mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-02-04 05:48:53 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d9e0477b0 | |||
| cfab48eee0 | |||
| 624920b2ab | |||
|
|
fd82f1e36c | ||
|
|
48ec8cd7a7 | ||
|
|
3a61bd2b72 | ||
| 895b0ad353 | |||
| 3c733ec7eb | |||
| 5321ad7bd7 | |||
| 196077bea9 |
@@ -8,11 +8,14 @@ indent_style = space
|
|||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.fish]
|
||||||
|
max_line_length = 80
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
max_line_length = 100
|
max_line_length = 100
|
||||||
|
|
||||||
[*.lua]
|
[*.lua]
|
||||||
max_line_length = 120
|
max_line_length = 90
|
||||||
|
|
||||||
[*.{php,fish}]
|
[*.{php,fish}]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|||||||
45
.gitattributes
vendored
45
.gitattributes
vendored
@@ -1,4 +1,4 @@
|
|||||||
## GITATTRIBUTES FOR WEB PROJECTS
|
## GITATTRIBUTES
|
||||||
#
|
#
|
||||||
# These settings are for any web project.
|
# These settings are for any web project.
|
||||||
#
|
#
|
||||||
@@ -20,20 +20,23 @@
|
|||||||
*.bat text eol=crlf
|
*.bat text eol=crlf
|
||||||
*.cmd text eol=crlf
|
*.cmd text eol=crlf
|
||||||
*.coffee text
|
*.coffee text
|
||||||
*.css text diff=css
|
*.css text diff=css eol=lf
|
||||||
*.htm text diff=html
|
*.fish text diff=shell eol=lf
|
||||||
*.html text diff=html
|
*.htm text diff=html eol=lf
|
||||||
|
*.html text diff=html eol=lf
|
||||||
*.inc text
|
*.inc text
|
||||||
*.ini text
|
*.ini text
|
||||||
*.js text
|
*.js text
|
||||||
*.json text
|
*.json text
|
||||||
*.jsx text
|
*.jsx text
|
||||||
*.less text
|
*.less text
|
||||||
|
*.lua text diff=lua eol=lf
|
||||||
*.ls text
|
*.ls text
|
||||||
*.map text -diff
|
*.map text -diff
|
||||||
*.od text
|
*.od text
|
||||||
*.onlydata text
|
*.onlydata text
|
||||||
*.php text diff=php
|
*.php text diff=php
|
||||||
|
*.plist text eol=lf
|
||||||
*.pl text
|
*.pl text
|
||||||
*.ps1 text eol=crlf
|
*.ps1 text eol=crlf
|
||||||
*.py text diff=python
|
*.py text diff=python
|
||||||
@@ -41,15 +44,18 @@
|
|||||||
*.sass text
|
*.sass text
|
||||||
*.scm text
|
*.scm text
|
||||||
*.scss text diff=css
|
*.scss text diff=css
|
||||||
*.sh text eol=lf
|
*.sh text eol=lf diff=shell
|
||||||
.husky/* text eol=lf
|
.husky/* text eol=lf
|
||||||
*.sql text
|
*.sql text
|
||||||
*.styl text
|
*.styl text
|
||||||
*.tag text
|
*.tag text
|
||||||
|
*.tmux text eol=lf diff=tmux
|
||||||
*.ts text
|
*.ts text
|
||||||
*.tsx text
|
*.tsx text
|
||||||
|
*.vim text eol=lf
|
||||||
*.xml text
|
*.xml text
|
||||||
*.xhtml text diff=html
|
*.xhtml text diff=html
|
||||||
|
*.zsh text diff=zsh eol=lf
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
Dockerfile text
|
Dockerfile text
|
||||||
@@ -68,6 +74,7 @@ Dockerfile text
|
|||||||
AUTHORS text
|
AUTHORS text
|
||||||
CHANGELOG text
|
CHANGELOG text
|
||||||
CHANGES text
|
CHANGES text
|
||||||
|
CODEOWNERS text
|
||||||
CONTRIBUTING text
|
CONTRIBUTING text
|
||||||
COPYING text
|
COPYING text
|
||||||
copyright text
|
copyright text
|
||||||
@@ -105,6 +112,8 @@ TODO text
|
|||||||
*.config text
|
*.config text
|
||||||
.editorconfig text
|
.editorconfig text
|
||||||
.env text
|
.env text
|
||||||
|
*.env text
|
||||||
|
*.env.* text
|
||||||
.gitattributes text
|
.gitattributes text
|
||||||
.gitconfig text
|
.gitconfig text
|
||||||
.htaccess text
|
.htaccess text
|
||||||
@@ -208,15 +217,37 @@ Procfile text
|
|||||||
|
|
||||||
*.gitignore text
|
*.gitignore text
|
||||||
*.gitkeep text
|
*.gitkeep text
|
||||||
.gitattributes export-ignore
|
.gitattributes text export-ignore
|
||||||
|
*.gitattributes text export-ignore
|
||||||
|
.gitmodules text export-ignore
|
||||||
|
*.gitmodules text export-ignore
|
||||||
**/.gitignore export-ignore
|
**/.gitignore export-ignore
|
||||||
**/.gitkeep export-ignore
|
**/.gitkeep export-ignore
|
||||||
|
|
||||||
# Repo specials
|
# Repo specials
|
||||||
local/bin/* text eol=lf
|
local/bin/* text eol=lf diff=shell
|
||||||
|
local/bin/*.md text eol=lf diff=markdown
|
||||||
config/antigen.zsh text
|
config/antigen.zsh text
|
||||||
git/* text
|
git/* text
|
||||||
**/git/* text
|
**/git/* text
|
||||||
**/alias text
|
**/alias text
|
||||||
ssh/* text
|
ssh/* text
|
||||||
|
ssh/shared.d/* text
|
||||||
|
ssh/local.d/* text
|
||||||
|
|
||||||
|
# Auto-generated rules - 2025-04-16 10:28:04
|
||||||
|
# Shell scripts detected by content
|
||||||
|
install text eol=lf diff=shell
|
||||||
|
|
||||||
|
# File extension-based rules
|
||||||
|
*.1 text eol=lf
|
||||||
|
*.applescript text eol=lf
|
||||||
|
*.d/work-git text eol=lf
|
||||||
|
*.dirs text eol=lf
|
||||||
|
*.example text eol=lf
|
||||||
|
*.itermcolors text eol=lf
|
||||||
|
*.locale text eol=lf
|
||||||
|
*.python-version text eol=lf
|
||||||
|
*.snippets text eol=lf
|
||||||
|
*.theme text eol=lf
|
||||||
|
*.yamlfmt text eol=lf
|
||||||
|
|||||||
2
.github/workflows/new-release.yml
vendored
2
.github/workflows/new-release.yml
vendored
@@ -40,7 +40,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create release
|
- name: Create release
|
||||||
if: steps.daily-version.outputs.created
|
if: steps.daily-version.outputs.created
|
||||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
|
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
tag_name: ${{ steps.daily-version.outputs.version }}
|
tag_name: ${{ steps.daily-version.outputs.version }}
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,6 +40,7 @@ node_modules
|
|||||||
ssh/local.d/*
|
ssh/local.d/*
|
||||||
!ssh/local.d/.gitkeep
|
!ssh/local.d/.gitkeep
|
||||||
config/fish/fish_variables
|
config/fish/fish_variables
|
||||||
|
**/exports.secret.fish
|
||||||
**/exports-secret.fish
|
**/exports-secret.fish
|
||||||
config/fish/completions/asdf.fish
|
config/fish/completions/asdf.fish
|
||||||
config/vim/.netrwhist
|
config/vim/.netrwhist
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ repos:
|
|||||||
- id: actionlint
|
- id: actionlint
|
||||||
|
|
||||||
- repo: https://github.com/renovatebot/pre-commit-hooks
|
- repo: https://github.com/renovatebot/pre-commit-hooks
|
||||||
rev: 39.248.1
|
rev: 39.252.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: renovate-config-validator
|
- id: renovate-config-validator
|
||||||
|
|
||||||
|
|||||||
@@ -9,13 +9,7 @@
|
|||||||
# - all
|
# - all
|
||||||
registries:
|
registries:
|
||||||
- type: standard
|
- type: standard
|
||||||
ref: v4.331.0 # renovate: depName=aquaproj/aqua-registry
|
ref: v4.346.0 # renovate: depName=aquaproj/aqua-registry
|
||||||
packages:
|
packages:
|
||||||
- name: cli/cli
|
- name: cli/cli
|
||||||
version: 'v2.69.0'
|
version: 'v2.69.0'
|
||||||
- name: junegunn/fzf
|
|
||||||
version: 'v0.60.3'
|
|
||||||
- name: jqlang/jq
|
|
||||||
version: 'jq-1.7.1'
|
|
||||||
- name: 1password/cli
|
|
||||||
version: '2.30.3'
|
|
||||||
|
|||||||
@@ -8,13 +8,23 @@ test -e "$HOME/.config/fish/alias.fish" &&
|
|||||||
test -e "$HOME/.config/fish/exports.fish" &&
|
test -e "$HOME/.config/fish/exports.fish" &&
|
||||||
source "$HOME/.config/fish/exports.fish"
|
source "$HOME/.config/fish/exports.fish"
|
||||||
|
|
||||||
|
test -e "$HOME/.config/fish/exports.secret.fish" &&
|
||||||
|
source "$HOME/.config/fish/exports.secret.fish"
|
||||||
|
|
||||||
|
test -e "$HOME/.dotfiles/config/fzf/key-bindings.fish" &&
|
||||||
|
source "$HOME/.dotfiles/config/fzf/key-bindings.fish"
|
||||||
|
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
# Commands to run in interactive shell
|
# Commands to run in interactive shell
|
||||||
|
|
||||||
|
# 1Password plugins if op command is available
|
||||||
|
type -q op; and test -e "$HOME/.config/op/plugins.sh" &&
|
||||||
|
source "$HOME/.config/op/plugins.sh"
|
||||||
|
|
||||||
# version manager initializers
|
# version manager initializers
|
||||||
type -q rbenv; and source (rbenv init -|psub)
|
type -q rbenv; and source (rbenv init -|psub)
|
||||||
type -q pyenv; and source (pyenv init -|psub)
|
type -q pyenv; and source (pyenv init -|psub)
|
||||||
type -q pyenv; and source (pyenv virtualenv-init -)
|
type -q pyenv; and source (pyenv virtualenv-init -|psub)
|
||||||
type -q goenv; and source (goenv init -|psub)
|
type -q goenv; and source (goenv init -|psub)
|
||||||
# type -q fnm; and fnm env --use-on-cd --shell fish | source
|
# type -q fnm; and fnm env --use-on-cd --shell fish | source
|
||||||
type -q load_nvm; and load_nvm > /dev/stderr
|
type -q load_nvm; and load_nvm > /dev/stderr
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# EditorConfig is awesome: https://editorconfig.org
|
# EditorConfig is awesome: https://editorconfig.org
|
||||||
|
|
||||||
# top-most EditorConfig file
|
# top-most EditorConfig file
|
||||||
root = true
|
root = false
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
@@ -18,3 +18,7 @@ trim_trailing_whitespace = false
|
|||||||
|
|
||||||
[*.json]
|
[*.json]
|
||||||
max_line_length = off
|
max_line_length = off
|
||||||
|
|
||||||
|
[*.lua]
|
||||||
|
max_line_length = 90
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
column_width = 80
|
column_width = 90
|
||||||
line_endings = "Unix"
|
line_endings = "Unix"
|
||||||
indent_type = "Spaces"
|
indent_type = "Spaces"
|
||||||
indent_width = 2
|
indent_width = 2
|
||||||
|
|||||||
2
config/nvim/ftdetect/env.vim
Normal file
2
config/nvim/ftdetect/env.vim
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
autocmd BufRead,BufNewFile *.env set ft=env
|
||||||
|
autocmd BufRead,BufNewFile *.env.* set ft=env
|
||||||
@@ -28,10 +28,7 @@ end
|
|||||||
vim.opt.rtp:prepend(lazypath)
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
|
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
|
||||||
vim.fn.setenv(
|
vim.fn.setenv('PATH', vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH')
|
||||||
'PATH',
|
|
||||||
vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH'
|
|
||||||
)
|
|
||||||
|
|
||||||
require 'options'
|
require 'options'
|
||||||
require 'autogroups'
|
require 'autogroups'
|
||||||
@@ -68,4 +65,4 @@ require('lazy').setup(
|
|||||||
|
|
||||||
require 'keymaps'
|
require 'keymaps'
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
-- vim: set ts=2 sts=2 sw=2 wrap et :
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ autocmd({ 'BufEnter', 'BufWinEnter', 'TabEnter' }, {
|
|||||||
callback = function()
|
callback = function()
|
||||||
local max_line_count = vim.fn.line '$'
|
local max_line_count = vim.fn.line '$'
|
||||||
-- Only adjust if the file is large enough to matter
|
-- Only adjust if the file is large enough to matter
|
||||||
if max_line_count > 99 then
|
if max_line_count > 99 then vim.opt.numberwidth = #tostring(max_line_count) + 1 end
|
||||||
vim.opt.numberwidth = #tostring(max_line_count) + 1
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -104,5 +102,3 @@ autocmd({ 'BufRead', 'BufNewFile' }, {
|
|||||||
},
|
},
|
||||||
command = 'set filetype=sshconfig',
|
command = 'set filetype=sshconfig',
|
||||||
})
|
})
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=130 :
|
|
||||||
|
|
||||||
require 'utils'
|
require 'utils'
|
||||||
|
|
||||||
-- ╭─────────────────────────────────────────────────────────╮
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
@@ -20,16 +18,8 @@ K.n('<C-w>+', ':resize +10<CR>', { desc = 'H Resize +' })
|
|||||||
K.n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
|
K.n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
|
||||||
|
|
||||||
-- ── Deal with word wrap ─────────────────────────────────────────────
|
-- ── Deal with word wrap ─────────────────────────────────────────────
|
||||||
K.n(
|
K.n('k', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true })
|
||||||
'k',
|
K.n('j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true })
|
||||||
"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 ───────────────────────────────────────────────
|
-- ── Text manipulation ───────────────────────────────────────────────
|
||||||
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
|
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
|
||||||
@@ -111,12 +101,10 @@ K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
|
|||||||
-- unless it's a generic operation like searching or finding buffers
|
-- unless it's a generic operation like searching or finding buffers
|
||||||
|
|
||||||
local fuzzy_search = function()
|
local fuzzy_search = function()
|
||||||
require('telescope.builtin').find_files(
|
require('telescope.builtin').find_files(require('telescope.themes').get_dropdown {
|
||||||
require('telescope.themes').get_dropdown {
|
winblend = 20,
|
||||||
winblend = 20,
|
previewer = true,
|
||||||
previewer = true,
|
})
|
||||||
}
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local lazy_plugins = function()
|
local lazy_plugins = function()
|
||||||
@@ -159,9 +147,7 @@ K.nl('tn', ':Noice dismiss<cr>', 'Noice: Dismiss Notification')
|
|||||||
-- Convention is 'q' followed by the operation
|
-- Convention is 'q' followed by the operation
|
||||||
K.nl('qf', ':q<CR>', 'Quicker close split')
|
K.nl('qf', ':q<CR>', 'Quicker close split')
|
||||||
K.nl('qq', function()
|
K.nl('qq', function()
|
||||||
if vim.fn.confirm('Force save and quit?', '&Yes\n&No', 2) == 1 then
|
if vim.fn.confirm('Force save and quit?', '&Yes\n&No', 2) == 1 then vim.cmd 'wq!' end
|
||||||
vim.cmd 'wq!'
|
|
||||||
end
|
|
||||||
end, 'Quit with force saving')
|
end, 'Quit with force saving')
|
||||||
K.nl('qw', ':wq<CR>', 'Write and quit')
|
K.nl('qw', ':wq<CR>', 'Write and quit')
|
||||||
K.nl('qQ', function()
|
K.nl('qQ', function()
|
||||||
|
|||||||
@@ -77,10 +77,8 @@ function M.setup(opts)
|
|||||||
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
|
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
|
||||||
local current_nvm_version_path =
|
local current_nvm_version_path =
|
||||||
string.format('%s/versions/node/%s', nvm_path, node_version)
|
string.format('%s/versions/node/%s', nvm_path, node_version)
|
||||||
local current_nvm_node_bin_path =
|
local current_nvm_node_bin_path = string.format('%s/bin', current_nvm_version_path)
|
||||||
string.format('%s/bin', current_nvm_version_path)
|
local current_nvm_node_bin = string.format('%s/node', current_nvm_node_bin_path)
|
||||||
local current_nvm_node_bin =
|
|
||||||
string.format('%s/node', current_nvm_node_bin_path)
|
|
||||||
local neovim_node_host_bin_path =
|
local neovim_node_host_bin_path =
|
||||||
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
|
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
|
||||||
|
|
||||||
|
|||||||
@@ -64,4 +64,7 @@ vim.schedule(function()
|
|||||||
o.clipboard = c
|
o.clipboard = c
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- xiyaowong/transparent.nvim
|
||||||
|
vim.g.transparent_enabled = true
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
-- vim: ts=2 sts=2 sw=2 et
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return {
|
|||||||
-- https:/github.com/saghen/blink.cmp
|
-- https:/github.com/saghen/blink.cmp
|
||||||
{
|
{
|
||||||
'saghen/blink.cmp',
|
'saghen/blink.cmp',
|
||||||
version = '*',
|
version = '1.*',
|
||||||
lazy = false, -- lazy loading handled internally
|
lazy = false, -- lazy loading handled internally
|
||||||
dependencies = {
|
dependencies = {
|
||||||
-- Compatibility layer for using nvim-cmp sources on blink.cmp
|
-- Compatibility layer for using nvim-cmp sources on blink.cmp
|
||||||
@@ -58,10 +58,10 @@ return {
|
|||||||
-- 'default' for mappings similar to built-in completion
|
-- 'default' for mappings similar to built-in completion
|
||||||
-- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate)
|
-- '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
|
-- '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
|
-- see the "default configuration" section below for full documentation on how to
|
||||||
-- your own keymap.
|
-- define your own keymap.
|
||||||
keymap = {
|
keymap = {
|
||||||
preset = 'super-tab',
|
preset = 'default',
|
||||||
-- Use Ctrl-x to trigger auto completion
|
-- Use Ctrl-x to trigger auto completion
|
||||||
['<C-x>'] = { 'show', 'show_documentation', 'hide_documentation' },
|
['<C-x>'] = { 'show', 'show_documentation', 'hide_documentation' },
|
||||||
},
|
},
|
||||||
@@ -86,7 +86,8 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
documentation = {
|
documentation = {
|
||||||
auto_show = true,
|
auto_show = false,
|
||||||
|
auto_show_delay_ms = 500,
|
||||||
},
|
},
|
||||||
ghost_text = {
|
ghost_text = {
|
||||||
enabled = false,
|
enabled = false,
|
||||||
@@ -97,12 +98,12 @@ return {
|
|||||||
-- elsewhere in your config, without redefining it, via `opts_extend`
|
-- elsewhere in your config, without redefining it, via `opts_extend`
|
||||||
sources = {
|
sources = {
|
||||||
default = {
|
default = {
|
||||||
'lazydev',
|
|
||||||
'lsp',
|
'lsp',
|
||||||
'snippets',
|
|
||||||
'copilot',
|
'copilot',
|
||||||
'path',
|
'path',
|
||||||
|
'snippets',
|
||||||
'buffer',
|
'buffer',
|
||||||
|
'lazydev',
|
||||||
},
|
},
|
||||||
providers = {
|
providers = {
|
||||||
copilot = {
|
copilot = {
|
||||||
@@ -118,6 +119,15 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- Blink.cmp includes an optional, recommended rust fuzzy matcher,
|
||||||
|
-- which automatically downloads a prebuilt binary when enabled.
|
||||||
|
--
|
||||||
|
-- By default, we use the Lua implementation instead, but you may enable
|
||||||
|
-- the rust implementation via `'prefer_rust_with_warning'`
|
||||||
|
--
|
||||||
|
-- See :h blink-cmp-config-fuzzy for more information
|
||||||
|
fuzzy = { implementation = 'lua' },
|
||||||
|
|
||||||
-- experimental signature help support
|
-- experimental signature help support
|
||||||
signature = { enabled = true },
|
signature = { enabled = true },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,17 +1,9 @@
|
|||||||
return {
|
return {
|
||||||
-- A better annotation generator.
|
|
||||||
-- Supports multiple languages and annotation conventions.
|
|
||||||
-- https://github.com/danymat/neogen
|
|
||||||
{
|
|
||||||
'danymat/neogen',
|
|
||||||
version = '*',
|
|
||||||
opts = { enabled = true, snippet_engine = 'luasnip' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Terminal manager for (neo)vim
|
-- Terminal manager for (neo)vim
|
||||||
-- https://github.com/voldikss/vim-floaterm
|
-- https://github.com/voldikss/vim-floaterm
|
||||||
{
|
{
|
||||||
'voldikss/vim-floaterm',
|
'voldikss/vim-floaterm',
|
||||||
|
lazy = true,
|
||||||
cmd = { 'FloatermToggle' },
|
cmd = { 'FloatermToggle' },
|
||||||
init = function()
|
init = function()
|
||||||
vim.g.floaterm_width = 0.8
|
vim.g.floaterm_width = 0.8
|
||||||
@@ -49,34 +41,6 @@ return {
|
|||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Cloak allows you to overlay *'s over defined patterns in defined files.
|
|
||||||
-- https://github.com/laytan/cloak.nvim
|
|
||||||
{
|
|
||||||
'laytan/cloak.nvim',
|
|
||||||
version = '*',
|
|
||||||
opts = {
|
|
||||||
enabled = true,
|
|
||||||
cloak_character = '*',
|
|
||||||
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
|
|
||||||
highlight_group = 'Comment',
|
|
||||||
patterns = {
|
|
||||||
{
|
|
||||||
-- Match any file starting with ".env".
|
|
||||||
-- This can be a table to match multiple file patterns.
|
|
||||||
file_pattern = {
|
|
||||||
'.env*',
|
|
||||||
'wrangler.toml',
|
|
||||||
'.dev.vars',
|
|
||||||
},
|
|
||||||
-- Match an equals sign and any character after it.
|
|
||||||
-- This can also be a table of patterns to cloak,
|
|
||||||
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
|
|
||||||
cloak_pattern = '=.+',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- projectionist.vim: Granular project configuration
|
-- projectionist.vim: Granular project configuration
|
||||||
-- https://github.com/tpope/vim-projectionist
|
-- https://github.com/tpope/vim-projectionist
|
||||||
{
|
{
|
||||||
@@ -150,21 +114,7 @@ return {
|
|||||||
{
|
{
|
||||||
'whatyouhide/vim-textobj-xmlattr',
|
'whatyouhide/vim-textobj-xmlattr',
|
||||||
dependencies = { 'kana/vim-textobj-user' },
|
dependencies = { 'kana/vim-textobj-user' },
|
||||||
},
|
ft = { 'html', 'xml', 'javascriptreact', 'typescriptreact', 'vue' },
|
||||||
|
|
||||||
-- 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.
|
-- Clarify and beautify your comments using boxes and lines.
|
||||||
@@ -174,38 +124,4 @@ return {
|
|||||||
event = 'BufEnter',
|
event = 'BufEnter',
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Plugin to improve viewing Markdown files in Neovim
|
|
||||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
|
|
||||||
{
|
|
||||||
'MeanderingProgrammer/render-markdown.nvim',
|
|
||||||
event = 'BufEnter',
|
|
||||||
dependencies = {
|
|
||||||
'nvim-treesitter/nvim-treesitter',
|
|
||||||
'nvim-tree/nvim-web-devicons',
|
|
||||||
},
|
|
||||||
ft = 'markdown',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
'ray-x/go.nvim',
|
|
||||||
dependencies = { -- optional packages
|
|
||||||
'ray-x/guihua.lua',
|
|
||||||
'neovim/nvim-lspconfig',
|
|
||||||
'nvim-treesitter/nvim-treesitter',
|
|
||||||
},
|
|
||||||
config = function() require('go').setup() end,
|
|
||||||
event = { 'CmdlineEnter' },
|
|
||||||
ft = { 'go', 'gomod' },
|
|
||||||
build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Mainly a PHP Language Server with more features than you can shake a stick at
|
|
||||||
-- https://github.com/phpactor/phpactor
|
|
||||||
{
|
|
||||||
'phpactor/phpactor',
|
|
||||||
build = 'composer install --no-dev --optimize-autoloader',
|
|
||||||
ft = 'php',
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|||||||
66
config/nvim/lua/plugins/conform.lua
Normal file
66
config/nvim/lua/plugins/conform.lua
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
'stevearc/conform.nvim',
|
||||||
|
event = 'BufWritePre',
|
||||||
|
config = function()
|
||||||
|
local conform = require 'conform'
|
||||||
|
|
||||||
|
conform.setup {
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { 'stylua' },
|
||||||
|
},
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
-- Disable autoformat for files in a certain paths
|
||||||
|
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||||
|
if bufname:match '/dist|node_modules|vendor/' then return end
|
||||||
|
|
||||||
|
local disable_lsp = {
|
||||||
|
c = true,
|
||||||
|
cpp = true,
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
lsp_fallback = not disable_lsp[vim.bo[bufnr].filetype],
|
||||||
|
timeout_ms = 500,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
notify_on_error = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||||
|
|
||||||
|
-- Autoformat toggle keybinding
|
||||||
|
local autoformat = true
|
||||||
|
vim.g.autoformat_enabled = autoformat
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command('ToggleFormat', function()
|
||||||
|
autoformat = not autoformat
|
||||||
|
vim.g.autoformat_enabled = autoformat
|
||||||
|
vim.notify('Autoformat on save: ' .. (autoformat and 'enabled' or 'disabled'))
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>tf',
|
||||||
|
':ToggleFormat<CR>',
|
||||||
|
{ desc = 'Toggle autoformat on save' }
|
||||||
|
)
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('BufWritePre', {
|
||||||
|
callback = function(args)
|
||||||
|
if autoformat then
|
||||||
|
conform.format {
|
||||||
|
bufnr = args.buf,
|
||||||
|
async = true,
|
||||||
|
lsp_format = 'fallback',
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Global statusline helper function
|
||||||
|
function _G.autoformat_status()
|
||||||
|
return vim.g.autoformat_enabled and '[ fmt:on]' or '[ fmt:off]'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ return {
|
|||||||
-- A collection of small QoL plugins for Neovim
|
-- A collection of small QoL plugins for Neovim
|
||||||
-- https://github.com/folke/snacks.nvim
|
-- https://github.com/folke/snacks.nvim
|
||||||
{
|
{
|
||||||
|
---@module 'snacks'
|
||||||
'folke/snacks.nvim',
|
'folke/snacks.nvim',
|
||||||
priority = 1000,
|
priority = 1000,
|
||||||
lazy = false,
|
lazy = false,
|
||||||
@@ -21,7 +22,7 @@ return {
|
|||||||
right = { 'fold', 'git' }, -- priority of signs on the right (high to low)
|
right = { 'fold', 'git' }, -- priority of signs on the right (high to low)
|
||||||
folds = {
|
folds = {
|
||||||
open = true, -- show open fold icons
|
open = true, -- show open fold icons
|
||||||
git_hl = false, -- use Git Signs hl for fold icons
|
git_hl = true, -- use Git Signs hl for fold icons
|
||||||
},
|
},
|
||||||
git = {
|
git = {
|
||||||
-- patterns to match Git signs
|
-- patterns to match Git signs
|
||||||
@@ -42,6 +43,7 @@ return {
|
|||||||
-- replaces the UI for messages, cmdline and the popupmenu.
|
-- replaces the UI for messages, cmdline and the popupmenu.
|
||||||
-- https://github.com/folke/noice.nvim
|
-- https://github.com/folke/noice.nvim
|
||||||
{
|
{
|
||||||
|
---@module 'noice'
|
||||||
'folke/noice.nvim',
|
'folke/noice.nvim',
|
||||||
event = 'VeryLazy',
|
event = 'VeryLazy',
|
||||||
dependencies = {
|
dependencies = {
|
||||||
@@ -122,10 +124,12 @@ return {
|
|||||||
-- trouble your code is causing.
|
-- trouble your code is causing.
|
||||||
-- https://github.com/folke/trouble.nvim
|
-- https://github.com/folke/trouble.nvim
|
||||||
{
|
{
|
||||||
|
---@module 'trouble'
|
||||||
'folke/trouble.nvim',
|
'folke/trouble.nvim',
|
||||||
lazy = false,
|
lazy = false,
|
||||||
cmd = 'Trouble',
|
cmd = 'Trouble',
|
||||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||||
|
---@type trouble.Config
|
||||||
opts = {
|
opts = {
|
||||||
auto_preview = true,
|
auto_preview = true,
|
||||||
auto_fold = true,
|
auto_fold = true,
|
||||||
|
|||||||
@@ -4,359 +4,296 @@
|
|||||||
|
|
||||||
require 'utils'
|
require 'utils'
|
||||||
|
|
||||||
-- LSP Servers are installed and configured by lsp-setup.nvim
|
|
||||||
-- Mason formatters Conform uses to format files
|
|
||||||
-- These are automatically configured by zapling/mason-conform.nvim
|
|
||||||
local lsp_servers = {
|
|
||||||
bashls = {},
|
|
||||||
-- csharp_ls = {},
|
|
||||||
diagnosticls = {},
|
|
||||||
gopls = {
|
|
||||||
settings = {
|
|
||||||
gopls = {
|
|
||||||
hints = {
|
|
||||||
rangeVariableTypes = true,
|
|
||||||
parameterNames = true,
|
|
||||||
constantValues = true,
|
|
||||||
assignVariableTypes = true,
|
|
||||||
compositeLiteralFields = true,
|
|
||||||
compositeLiteralTypes = true,
|
|
||||||
functionTypeParameters = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
html = {},
|
|
||||||
intelephense = {
|
|
||||||
init_options = {
|
|
||||||
licenceKey = GetIntelephenseLicense(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
jsonls = {},
|
|
||||||
lua_ls = {
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
completion = {
|
|
||||||
callSnippet = 'Replace',
|
|
||||||
},
|
|
||||||
diagnostics = {
|
|
||||||
globals = {
|
|
||||||
'vim',
|
|
||||||
},
|
|
||||||
disable = {
|
|
||||||
-- Ignore lua_ls noisy `missing-fields` warnings
|
|
||||||
'missing-fields',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
hint = {
|
|
||||||
enable = true,
|
|
||||||
arrayIndex = 'Auto',
|
|
||||||
await = true,
|
|
||||||
paramName = 'All',
|
|
||||||
paramType = true,
|
|
||||||
semicolon = 'SameLine',
|
|
||||||
setType = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
tailwindcss = {},
|
|
||||||
ts_ls = {
|
|
||||||
settings = {
|
|
||||||
typescript = {
|
|
||||||
inlayHints = {
|
|
||||||
includeInlayParameterNameHints = 'all',
|
|
||||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
|
||||||
includeInlayFunctionParameterTypeHints = true,
|
|
||||||
includeInlayVariableTypeHints = true,
|
|
||||||
includeInlayVariableTypeHintsWhenTypeMatchesName = false,
|
|
||||||
includeInlayPropertyDeclarationTypeHints = true,
|
|
||||||
includeInlayFunctionLikeReturnTypeHints = true,
|
|
||||||
includeInlayEnumMemberValueHints = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
vimls = {},
|
|
||||||
volar = {
|
|
||||||
settings = {
|
|
||||||
typescript = {
|
|
||||||
inlayHints = {
|
|
||||||
enumMemberValues = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
functionLikeReturnTypes = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
propertyDeclarationTypes = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
parameterTypes = {
|
|
||||||
enabled = true,
|
|
||||||
suppressWhenArgumentMatchesName = true,
|
|
||||||
},
|
|
||||||
variableTypes = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Mason tools to automatically install and configure.
|
|
||||||
-- These are automatically configured by WhoIsSethDaniel/mason-tool-installer.nvim
|
|
||||||
local mason_tools = {
|
|
||||||
'actionlint',
|
|
||||||
'ast-grep',
|
|
||||||
'black',
|
|
||||||
'editorconfig-checker',
|
|
||||||
'goimports',
|
|
||||||
'golangci-lint',
|
|
||||||
'golines',
|
|
||||||
'gopls',
|
|
||||||
'gotests',
|
|
||||||
'isort',
|
|
||||||
'phpcbf',
|
|
||||||
'phpmd',
|
|
||||||
'phpstan',
|
|
||||||
'pint',
|
|
||||||
'prettierd',
|
|
||||||
'revive',
|
|
||||||
'semgrep',
|
|
||||||
'shellcheck',
|
|
||||||
'shfmt',
|
|
||||||
'sonarlint-language-server',
|
|
||||||
'staticcheck',
|
|
||||||
'stylua',
|
|
||||||
'trivy',
|
|
||||||
'vint',
|
|
||||||
'yamlfmt',
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
|
|
||||||
-- used for completion, annotations and signatures of Neovim apis
|
|
||||||
-- https://github.com/folke/lazydev.nvim
|
|
||||||
{
|
{
|
||||||
'folke/lazydev.nvim',
|
'neovim/nvim-lspconfig',
|
||||||
ft = 'lua',
|
dependencies = {
|
||||||
opts = {
|
{ 'williamboman/mason.nvim', opts = {} },
|
||||||
library = {
|
'williamboman/mason-lspconfig.nvim',
|
||||||
-- Load luvit types when the `vim.uv` word is found
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
|
||||||
-- load assert and describe paths
|
'folke/lazydev.nvim',
|
||||||
{ path = 'luassert/library', words = { 'assert' } },
|
'zapling/mason-conform.nvim',
|
||||||
{ path = 'busted/library', words = { 'describe' } },
|
|
||||||
},
|
-- Allows extra capabilities provided by blink.cmp
|
||||||
|
'saghen/blink.cmp',
|
||||||
},
|
},
|
||||||
},
|
config = function()
|
||||||
|
local lazydev = require 'lazydev'
|
||||||
|
|
||||||
-- Meta type definitions for the Lua platform Luvit.
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
-- https://github.com/Bilal2453/luvit-meta
|
group = vim.api.nvim_create_augroup('lsp-attach', { clear = true }),
|
||||||
{ 'Bilal2453/luvit-meta', lazy = true },
|
callback = function(event)
|
||||||
|
local map = function(keys, func, desc, mode)
|
||||||
-- Quickstart configs for Nvim LSP
|
mode = mode or 'n'
|
||||||
-- https://github.com/neovim/nvim-lspconfig
|
vim.keymap.set(
|
||||||
{ 'neovim/nvim-lspconfig' },
|
mode,
|
||||||
|
keys,
|
||||||
-- Portable package manager for Neovim that runs everywhere Neovim runs.
|
func,
|
||||||
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
|
{ buffer = event.buf, desc = 'LSP: ' .. desc }
|
||||||
-- https://github.com/williamboman/mason.nvim
|
)
|
||||||
{
|
|
||||||
'williamboman/mason.nvim',
|
|
||||||
version = '*',
|
|
||||||
cmd = 'Mason',
|
|
||||||
run = ':MasonUpdate',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Extensible UI for Neovim notifications and LSP progress messages.
|
|
||||||
-- https://github.com/j-hui/fidget.nvim
|
|
||||||
{
|
|
||||||
'j-hui/fidget.nvim',
|
|
||||||
version = '*',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
|
|
||||||
-- https://github.com/williamboman/mason-lspconfig.nvim
|
|
||||||
{ 'williamboman/mason-lspconfig.nvim' },
|
|
||||||
|
|
||||||
-- Install and upgrade third party tools automatically
|
|
||||||
-- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
|
|
||||||
{
|
|
||||||
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
|
||||||
version = '*',
|
|
||||||
opts = {
|
|
||||||
auto_install = true,
|
|
||||||
auto_update = true,
|
|
||||||
ensure_installed = mason_tools,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- JSON schemas for Neovim
|
|
||||||
-- https://github.com/b0o/SchemaStore.nvim
|
|
||||||
{ 'b0o/schemastore.nvim' },
|
|
||||||
|
|
||||||
-- Performant, batteries-included completion plugin for Neovim
|
|
||||||
-- https://github.com/saghen/blink.cmp
|
|
||||||
-- See lua/plugins/blink.lua for configs
|
|
||||||
{ 'saghen/blink.cmp' },
|
|
||||||
|
|
||||||
-- A simple wrapper for nvim-lspconfig and mason-lspconfig
|
|
||||||
-- to easily setup LSP servers.
|
|
||||||
-- https://github.com/junnplus/lsp-setup.nvim
|
|
||||||
{
|
|
||||||
'junnplus/lsp-setup.nvim',
|
|
||||||
opts = {
|
|
||||||
default_mappings = false,
|
|
||||||
servers = lsp_servers,
|
|
||||||
},
|
|
||||||
config = function(_, opts)
|
|
||||||
require('lazydev').setup()
|
|
||||||
require('lsp-setup').setup(opts)
|
|
||||||
local cmp = require 'blink.cmp'
|
|
||||||
local lspconfig = require 'lspconfig'
|
|
||||||
for server, config in pairs(opts.servers) do
|
|
||||||
-- passing config.capabilities to blink.cmp merges with the capabilities in your
|
|
||||||
-- `opts[server].capabilities, if you've defined it
|
|
||||||
config.capabilities = cmp.get_lsp_capabilities(config.capabilities)
|
|
||||||
lspconfig[server].setup(config)
|
|
||||||
end
|
|
||||||
|
|
||||||
lspconfig.lua_ls.on_init = function(client)
|
|
||||||
if client.workspace_folders then
|
|
||||||
local path = client.workspace_folders[1].name
|
|
||||||
if
|
|
||||||
vim.loop.fs_stat(path .. '/.luarc.json')
|
|
||||||
or vim.loop.fs_stat(path .. '/.luarc.jsonc')
|
|
||||||
then
|
|
||||||
return
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
client.config.settings.Lua =
|
local tsb = require 'telescope.builtin'
|
||||||
vim.tbl_deep_extend('force', client.config.settings.Lua, {
|
|
||||||
runtime = {
|
-- Rename the variable under your cursor.
|
||||||
-- Tell the language server which version of Lua you're using
|
-- Most Language Servers support renaming across files, etc.
|
||||||
-- (most likely LuaJIT in the case of Neovim)
|
map('grn', vim.lsp.buf.rename, '[R]e[n]ame')
|
||||||
version = 'LuaJIT',
|
|
||||||
},
|
-- Execute a code action, usually your cursor needs to be on top of an error
|
||||||
-- Make the server aware of Neovim runtime files
|
-- or a suggestion from your LSP for this to activate.
|
||||||
workspace = {
|
map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' })
|
||||||
checkThirdParty = false,
|
|
||||||
library = {
|
-- Find references for the word under your cursor.
|
||||||
vim.env.VIMRUNTIME,
|
map('grr', tsb.lsp_references, '[G]oto [R]eferences')
|
||||||
|
|
||||||
|
-- Jump to the implementation of the word under your cursor.
|
||||||
|
-- Useful when your language has ways of declaring types without
|
||||||
|
-- an actual implementation.
|
||||||
|
map('gri', tsb.lsp_implementations, '[G]oto [I]mplementation')
|
||||||
|
|
||||||
|
-- Jump to the definition of the word under your cursor.
|
||||||
|
-- This is where a variable was first declared, or where a function is
|
||||||
|
-- defined, etc. To jump back, press <C-t>.
|
||||||
|
map('grd', tsb.lsp_definitions, '[G]oto [D]efinition')
|
||||||
|
|
||||||
|
-- WARN: This is not Goto Definition, this is Goto Declaration.
|
||||||
|
-- For example, in C this would take you to the header.
|
||||||
|
map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
||||||
|
|
||||||
|
-- Fuzzy find all the symbols in your current document.
|
||||||
|
-- Symbols are things like variables, functions, types, etc.
|
||||||
|
map('gO', tsb.lsp_document_symbols, 'Open Document Symbols')
|
||||||
|
|
||||||
|
-- Fuzzy find all the symbols in your current workspace.
|
||||||
|
-- Similar to document symbols, except searches over your entire project.
|
||||||
|
map('gW', tsb.lsp_dynamic_workspace_symbols, 'Open Workspace Symbols')
|
||||||
|
|
||||||
|
-- Jump to the type of the word under your cursor.
|
||||||
|
-- Useful when you're not sure what type a variable is and you want to see
|
||||||
|
-- the definition of its *type*, not where it was *defined*.
|
||||||
|
map('grt', tsb.lsp_type_definitions, '[G]oto [T]ype Definition')
|
||||||
|
|
||||||
|
-- This function resolves a difference between neovim nightly
|
||||||
|
-- (version 0.11) and stable (version 0.10)
|
||||||
|
---@param client vim.lsp.Client
|
||||||
|
---@param method vim.lsp.protocol.Method
|
||||||
|
---@param bufnr? integer some lsp support methods only in specific files
|
||||||
|
---@return boolean
|
||||||
|
local function client_supports_method(client, method, bufnr)
|
||||||
|
if vim.fn.has 'nvim-0.11' == 1 then
|
||||||
|
return client:supports_method(method, bufnr)
|
||||||
|
else
|
||||||
|
---@diagnostic disable-next-line: param-type-mismatch
|
||||||
|
return client.supports_method(method, { bufnr = bufnr })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The following two autocommands are used to highlight references of the
|
||||||
|
-- word under your cursor when your cursor rests there for a little while.
|
||||||
|
-- See `:help CursorHold` for information about when this is executed
|
||||||
|
--
|
||||||
|
-- When you move your cursor, the highlights will be cleared
|
||||||
|
-- (the second autocommand).
|
||||||
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||||
|
if
|
||||||
|
client
|
||||||
|
and client_supports_method(
|
||||||
|
client,
|
||||||
|
vim.lsp.protocol.Methods.textDocument_documentHighlight,
|
||||||
|
event.buf
|
||||||
|
)
|
||||||
|
then
|
||||||
|
local highlight_augroup =
|
||||||
|
vim.api.nvim_create_augroup('lsp-highlight', { clear = false })
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('LspDetach', {
|
||||||
|
group = vim.api.nvim_create_augroup('lsp-detach', { clear = true }),
|
||||||
|
callback = function(event2)
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
vim.api.nvim_clear_autocmds {
|
||||||
|
group = 'lsp-highlight',
|
||||||
|
buffer = event2.buf,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Diagnostic Config
|
||||||
|
-- See :help vim.diagnostic.Opts
|
||||||
|
vim.diagnostic.config {
|
||||||
|
severity_sort = true,
|
||||||
|
float = { border = 'rounded', source = 'if_many' },
|
||||||
|
underline = { severity = vim.diagnostic.severity.ERROR },
|
||||||
|
signs = vim.g.have_nerd_font and {
|
||||||
|
text = {
|
||||||
|
[vim.diagnostic.severity.ERROR] = ' ',
|
||||||
|
[vim.diagnostic.severity.WARN] = ' ',
|
||||||
|
[vim.diagnostic.severity.INFO] = ' ',
|
||||||
|
[vim.diagnostic.severity.HINT] = ' ',
|
||||||
|
},
|
||||||
|
} or {},
|
||||||
|
virtual_text = {
|
||||||
|
source = 'if_many',
|
||||||
|
spacing = 2,
|
||||||
|
format = function(diagnostic)
|
||||||
|
local diagnostic_message = {
|
||||||
|
[vim.diagnostic.severity.ERROR] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.WARN] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.INFO] = diagnostic.message,
|
||||||
|
[vim.diagnostic.severity.HINT] = diagnostic.message,
|
||||||
|
}
|
||||||
|
return diagnostic_message[diagnostic.severity]
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local capabilities = require('blink.cmp').get_lsp_capabilities()
|
||||||
|
|
||||||
|
local servers = {
|
||||||
|
ansiblels = {},
|
||||||
|
ast_grep = {},
|
||||||
|
bashls = {},
|
||||||
|
cssls = {},
|
||||||
|
dockerls = {},
|
||||||
|
gopls = {
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
hints = {
|
||||||
|
assignVariableTypes = true,
|
||||||
|
compositeLiteralFields = true,
|
||||||
|
compositeLiteralTypes = true,
|
||||||
|
constantValues = true,
|
||||||
|
functionTypeParameters = true,
|
||||||
|
parameterNames = true,
|
||||||
|
rangeVariableTypes = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
|
||||||
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 },
|
html = {},
|
||||||
|
intelephense = {
|
||||||
|
init_options = {
|
||||||
|
licenceKey = vim.env.INTELEPHENSE_LICENSE or GetIntelephenseLicense() or nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
jsonls = {},
|
||||||
|
lua_ls = {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
diagnostics = {
|
||||||
|
globals = { 'vim' },
|
||||||
|
disable = { 'missing-fields' },
|
||||||
|
},
|
||||||
|
completion = { callSnippet = 'Replace' },
|
||||||
|
workspace = { checkThirdParty = true },
|
||||||
|
hint = {
|
||||||
|
enable = true,
|
||||||
|
arrayIndex = 'Auto',
|
||||||
|
await = true,
|
||||||
|
paramName = 'All',
|
||||||
|
paramType = true,
|
||||||
|
semicolon = 'SameLine',
|
||||||
|
setType = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
on_init = function(client)
|
||||||
|
client.config.settings.Lua.workspace.library = {
|
||||||
|
vim.env.VIMRUNTIME,
|
||||||
|
}
|
||||||
|
client.config.settings.Lua.runtime = { version = 'LuaJIT' }
|
||||||
|
client.notify(
|
||||||
|
'workspace/didChangeConfiguration',
|
||||||
|
{ settings = client.config.settings }
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
omnisharp = {}, -- C# OmniSharp (will respect EditorConfig for formatting)
|
||||||
|
pyright = {},
|
||||||
|
tailwindcss = {},
|
||||||
|
terraformls = {},
|
||||||
|
ts_ls = {},
|
||||||
|
volar = {
|
||||||
|
settings = {
|
||||||
|
typescript = {
|
||||||
|
inlayHints = {
|
||||||
|
enumMemberValues = { enabled = true },
|
||||||
|
functionLikeReturnTypes = { enabled = true },
|
||||||
|
propertyDeclarationTypes = { enabled = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
vimls = {},
|
||||||
|
eslint = {},
|
||||||
|
yamlls = {
|
||||||
|
settings = {
|
||||||
|
yaml = {
|
||||||
|
keyOrdering = false, -- don't auto-sort YAML keys on format
|
||||||
|
schemaStore = { enable = true }, -- use JSON Schema Store for validation
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Diagnostic configuration
|
local ensure_installed = vim.tbl_keys(servers or {})
|
||||||
local signs = {
|
vim.list_extend(ensure_installed, {
|
||||||
{ name = 'DiagnosticSignError', text = '' }, -- Error icon
|
'actionlint', -- GitHub Actions linter
|
||||||
{ name = 'DiagnosticSignWarn', text = '' }, -- Warning icon
|
'shfmt', -- Shell formatter
|
||||||
{ name = 'DiagnosticSignHint', text = '' }, -- Hint icon
|
'stylua', -- Lua formatter
|
||||||
{ name = 'DiagnosticSignInfo', text = '' }, -- Information icon
|
'shellcheck', -- Shell linter
|
||||||
|
})
|
||||||
|
|
||||||
|
require('mason-tool-installer').setup {
|
||||||
|
auto_install = true,
|
||||||
|
auto_update = true,
|
||||||
|
ensure_installed = ensure_installed,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function ensure_sign_defined(name, sign_opts)
|
require('mason-conform').setup {
|
||||||
if vim.tbl_isempty(vim.fn.sign_getdefined(name)) then
|
ensure_installed = ensure_installed,
|
||||||
vim.fn.sign_define(name, sign_opts)
|
}
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, sign in ipairs(signs) do
|
require('mason-lspconfig').setup {
|
||||||
ensure_sign_defined(sign.name, {
|
ensure_installed = {}, -- explicitly set to an empty table
|
||||||
text = sign.text,
|
automatic_installation = false,
|
||||||
texthl = sign.texthl or sign.name,
|
handlers = {
|
||||||
numhl = sign.numhl or sign.name,
|
function(server_name)
|
||||||
})
|
local server = servers[server_name] or {}
|
||||||
end
|
server.capabilities =
|
||||||
|
vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
|
||||||
---@type vim.diagnostic.Opts
|
require('lspconfig')[server_name].setup(server)
|
||||||
local diagnostics_config = {
|
end,
|
||||||
signs = {
|
|
||||||
active = signs, -- show signs
|
|
||||||
},
|
},
|
||||||
update_in_insert = false,
|
|
||||||
underline = true,
|
|
||||||
severity_sort = true,
|
|
||||||
virtual_text = true,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.diagnostic.config(diagnostics_config)
|
lazydev.setup {
|
||||||
|
---@type boolean|(fun(root:string):boolean?)
|
||||||
-- end of junnplus/lsp-setup config
|
enabled = true,
|
||||||
|
debug = false,
|
||||||
|
runtime = vim.env.VIMRUNTIME --[[@as string]],
|
||||||
|
library = {
|
||||||
|
{ path = '${3rd}/luv/library', words = { 'vim%.uv' } },
|
||||||
|
},
|
||||||
|
integrations = {
|
||||||
|
lspconfig = true,
|
||||||
|
cmp = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Lightweight yet powerful formatter plugin for Neovim
|
|
||||||
-- https://github.com/stevearc/conform.nvim
|
|
||||||
{
|
|
||||||
'stevearc/conform.nvim',
|
|
||||||
event = { 'BufWritePre' },
|
|
||||||
cmd = { 'ConformInfo' },
|
|
||||||
opts = {
|
|
||||||
notify_on_error = false,
|
|
||||||
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
|
|
||||||
format_on_save = function(bufnr)
|
|
||||||
-- Disable "format_on_save lsp_fallback" for languages that don't
|
|
||||||
-- have a well standardized coding style. You can add additional
|
|
||||||
-- languages here or re-enable it for the disabled ones.
|
|
||||||
local disable_filetypes = { c = true, cpp = true }
|
|
||||||
local lsp_format_opt
|
|
||||||
if disable_filetypes[vim.bo[bufnr].filetype] then
|
|
||||||
lsp_format_opt = 'never'
|
|
||||||
else
|
|
||||||
lsp_format_opt = 'fallback'
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Disable autoformat for files in a certain paths
|
|
||||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
|
||||||
if bufname:match '/dist|node_modules|vendor/' then return end
|
|
||||||
|
|
||||||
return {
|
|
||||||
timeout_ms = 500,
|
|
||||||
lsp_format = lsp_format_opt,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
formatters_by_ft = {
|
|
||||||
lua = { 'stylua' },
|
|
||||||
sh = { 'shfmt' },
|
|
||||||
bash = { 'shfmt' },
|
|
||||||
php = { 'phpcbf' },
|
|
||||||
python = { 'isort', 'black' },
|
|
||||||
-- Conform can also run multiple formatters sequentially
|
|
||||||
-- python = { "isort", "black" },
|
|
||||||
--
|
|
||||||
-- You can use 'stop_after_first' to run the first available formatter from the list
|
|
||||||
-- javascript = { "prettierd", "prettier", stop_after_first = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
init = function()
|
|
||||||
-- If you want the formatexpr, here is the place to set it
|
|
||||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
|
||||||
-- https://github.com/zapling/mason-conform.nvim
|
|
||||||
{ 'zapling/mason-conform.nvim', opts = {} },
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,9 +54,7 @@ return {
|
|||||||
event_handlers = {
|
event_handlers = {
|
||||||
{
|
{
|
||||||
event = 'file_opened',
|
event = 'file_opened',
|
||||||
handler = function(_)
|
handler = function(_) require('neo-tree.command').execute { action = 'close' } end,
|
||||||
require('neo-tree.command').execute { action = 'close' }
|
|
||||||
end,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
default_component_configs = {
|
default_component_configs = {
|
||||||
|
|||||||
@@ -1,44 +1,13 @@
|
|||||||
return {
|
return {
|
||||||
{
|
|
||||||
'rmagatti/auto-session',
|
|
||||||
lazy = false,
|
|
||||||
version = '*',
|
|
||||||
opts = {
|
|
||||||
suppressed_dirs = {
|
|
||||||
'/',
|
|
||||||
'~/',
|
|
||||||
'~/Downloads',
|
|
||||||
'~/Library',
|
|
||||||
},
|
|
||||||
bypass_save_filetypes = {
|
|
||||||
'PlenaryTestPopup',
|
|
||||||
'alpha',
|
|
||||||
'checkhealth',
|
|
||||||
'dashboard',
|
|
||||||
'dbout',
|
|
||||||
'gitsigns.blame',
|
|
||||||
'grug-far',
|
|
||||||
'help',
|
|
||||||
'lspinfo',
|
|
||||||
'man',
|
|
||||||
'neo-tree',
|
|
||||||
'neotest-output',
|
|
||||||
'neotest-output-panel',
|
|
||||||
'neotest-summary',
|
|
||||||
'notify',
|
|
||||||
'qf',
|
|
||||||
'spectre_panel',
|
|
||||||
'startuptime',
|
|
||||||
'trouble',
|
|
||||||
'tsplayground',
|
|
||||||
},
|
|
||||||
-- log_level = 'debug',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
'nvim-lua/plenary.nvim',
|
'nvim-lua/plenary.nvim',
|
||||||
version = '*',
|
version = '*',
|
||||||
lazy = false,
|
lazy = false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- Vim plugin for automatic time tracking and metrics
|
||||||
|
-- generated from your programming activity.
|
||||||
|
-- https://github.com/wakatime/vim-wakatime
|
||||||
|
{ 'wakatime/vim-wakatime', lazy = false, enabled = true },
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ return {
|
|||||||
-- https://github.com/nvim-telescope/telescope.nvim
|
-- https://github.com/nvim-telescope/telescope.nvim
|
||||||
'nvim-telescope/telescope.nvim',
|
'nvim-telescope/telescope.nvim',
|
||||||
version = '*',
|
version = '*',
|
||||||
lazy = false,
|
lazy = true,
|
||||||
|
cmd = 'Telescope',
|
||||||
dependencies = {
|
dependencies = {
|
||||||
{ 'nvim-lua/plenary.nvim' },
|
{ 'nvim-lua/plenary.nvim' },
|
||||||
{ 'nvim-telescope/telescope-symbols.nvim' },
|
{ 'nvim-telescope/telescope-symbols.nvim' },
|
||||||
@@ -16,10 +17,6 @@ return {
|
|||||||
-- https://github.com/polirritmico/telescope-lazy-plugins.nvim
|
-- https://github.com/polirritmico/telescope-lazy-plugins.nvim
|
||||||
{ 'polirritmico/telescope-lazy-plugins.nvim' },
|
{ 'polirritmico/telescope-lazy-plugins.nvim' },
|
||||||
|
|
||||||
-- Neovim plugin. Telescope.nvim extension that adds LuaSnip integration.
|
|
||||||
-- https://github.com/benfowler/telescope-luasnip.nvim
|
|
||||||
{ 'benfowler/telescope-luasnip.nvim' },
|
|
||||||
|
|
||||||
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
|
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
|
||||||
-- Only load if `make` is available
|
-- Only load if `make` is available
|
||||||
{
|
{
|
||||||
@@ -27,27 +24,45 @@ return {
|
|||||||
build = 'make',
|
build = 'make',
|
||||||
cond = vim.fn.executable 'make' == 1,
|
cond = vim.fn.executable 'make' == 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Import modules with ease
|
|
||||||
-- https://github.com/piersolenski/telescope-import.nvim
|
|
||||||
{ 'piersolenski/telescope-import.nvim' },
|
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
local t = require 'telescope'
|
local t = require 'telescope'
|
||||||
local a = require 'telescope.actions'
|
local a = require 'telescope.actions'
|
||||||
|
local c = require 'telescope.config'
|
||||||
|
|
||||||
local open_with_trouble = require('trouble.sources.telescope').open
|
local open_with_trouble = require('trouble.sources.telescope').open
|
||||||
local add_to_trouble = require('trouble.sources.telescope').add
|
local add_to_trouble = require('trouble.sources.telescope').add
|
||||||
|
|
||||||
|
-- Clone the default Telescope configuration
|
||||||
|
local vimgrep_arguments = { unpack(c.values.vimgrep_arguments) }
|
||||||
|
|
||||||
|
-- I want to search in hidden/dot files.
|
||||||
|
table.insert(vimgrep_arguments, '--hidden')
|
||||||
|
-- I don't want to search in the `.git` directory.
|
||||||
|
table.insert(vimgrep_arguments, '--glob')
|
||||||
|
table.insert(vimgrep_arguments, '!**/.git/*')
|
||||||
|
|
||||||
-- [[ Configure Telescope ]]
|
-- [[ Configure Telescope ]]
|
||||||
-- See `:help telescope` and `:help telescope.setup()`
|
-- See `:help telescope` and `:help telescope.setup()`
|
||||||
t.setup {
|
t.setup {
|
||||||
defaults = {
|
defaults = {
|
||||||
|
-- `hidden = true` is not supported in text grep commands.
|
||||||
|
vimgrep_arguments = vimgrep_arguments,
|
||||||
|
|
||||||
layout_strategy = 'horizontal',
|
layout_strategy = 'horizontal',
|
||||||
pickers = {
|
pickers = {
|
||||||
find_files = {
|
find_files = {
|
||||||
|
-- `hidden = true` will still show the inside of `.git/` as
|
||||||
|
-- it's not `.gitignore`d.
|
||||||
|
find_command = { 'rg', '--files', '--hidden', '--glob', '!**/.git/*' },
|
||||||
theme = 'dropdown',
|
theme = 'dropdown',
|
||||||
},
|
},
|
||||||
|
mappings = {
|
||||||
|
i = {
|
||||||
|
['<C-s>'] = a.cycle_previewers_next,
|
||||||
|
['<C-a>'] = a.cycle_previewers_prev,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mappings = {
|
mappings = {
|
||||||
i = {
|
i = {
|
||||||
@@ -64,28 +79,28 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
additional_vim_regex_highlighting = false,
|
||||||
|
},
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
init_selection = '<CR>',
|
||||||
|
node_incremental = '<CR>',
|
||||||
|
scope_incremental = '<TAB>',
|
||||||
|
node_decremental = '<S-TAB>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
context_commentstring = {
|
||||||
|
enable = true,
|
||||||
|
enable_autocmd = false,
|
||||||
|
},
|
||||||
extensions = {
|
extensions = {
|
||||||
lazy_plugins = {
|
lazy_plugins = {
|
||||||
-- Must be a valid path to the file containing the lazy spec and setup() call.
|
-- Must be a valid path to the file containing the lazy spec and setup() call.
|
||||||
lazy_config = vim.fn.stdpath 'config' .. '/init.lua',
|
lazy_config = vim.fn.stdpath 'config' .. '/init.lua',
|
||||||
},
|
},
|
||||||
import = {
|
|
||||||
-- Imports can be added at a specified line whilst keeping the cursor in place
|
|
||||||
insert_at_top = true,
|
|
||||||
-- Optionally support additional languages or modify existing languages...
|
|
||||||
custom_languages = {
|
|
||||||
{
|
|
||||||
-- The filetypes that ripgrep supports (find these via `rg --type-list`)
|
|
||||||
extensions = { 'js', 'ts' },
|
|
||||||
-- The Vim filetypes
|
|
||||||
filetypes = { 'vue' },
|
|
||||||
-- Optionally set a line other than 1
|
|
||||||
insert_at_line = 2, ---@type function|number
|
|
||||||
-- The regex pattern for the import statement
|
|
||||||
regex = [[^(?:import(?:[\"'\s]*([\w*{}\n, ]+)from\s*)?[\"'\s](.*?)[\"'\s].*)]],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,8 @@
|
|||||||
return {
|
return {
|
||||||
-- https://github.com/rmehri01/onenord.nvim
|
|
||||||
{
|
{
|
||||||
'rmehri01/onenord.nvim',
|
'rmehri01/onenord.nvim',
|
||||||
priority = 1000, -- Make sure to load this before all the other start plugins.
|
opts = {},
|
||||||
opts = {
|
|
||||||
borders = true,
|
|
||||||
fade_nc = true,
|
|
||||||
disable = {
|
|
||||||
float_background = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Automatic dark mode
|
-- Automatic dark mode
|
||||||
-- https://github.com/f-person/auto-dark-mode.nvim
|
-- https://github.com/f-person/auto-dark-mode.nvim
|
||||||
{
|
{
|
||||||
@@ -33,6 +24,7 @@ return {
|
|||||||
-- https://github.com/catgoose/nvim-colorizer.lua
|
-- https://github.com/catgoose/nvim-colorizer.lua
|
||||||
{
|
{
|
||||||
'catgoose/nvim-colorizer.lua',
|
'catgoose/nvim-colorizer.lua',
|
||||||
|
event = 'BufReadPre',
|
||||||
opts = {
|
opts = {
|
||||||
user_default_options = {
|
user_default_options = {
|
||||||
names = false,
|
names = false,
|
||||||
@@ -40,13 +32,27 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- A neovim plugin that shows colorcolumn dynamically
|
|
||||||
-- https://github.com/Bekaboo/deadcolumn.nvim
|
|
||||||
{ 'Bekaboo/deadcolumn.nvim' },
|
|
||||||
|
|
||||||
-- Remove all background colors to make nvim transparent
|
-- Remove all background colors to make nvim transparent
|
||||||
-- https://github.com/xiyaowong/nvim-transparent
|
-- https://github.com/xiyaowong/nvim-transparent
|
||||||
{ 'xiyaowong/nvim-transparent', opts = {} },
|
{
|
||||||
|
'xiyaowong/nvim-transparent',
|
||||||
|
lazy = false,
|
||||||
|
config = function()
|
||||||
|
local t = require 'transparent'
|
||||||
|
t.setup {
|
||||||
|
extra_groups = {
|
||||||
|
'NormalNC',
|
||||||
|
'NormalFloat',
|
||||||
|
'FloatBorder',
|
||||||
|
'TelescopeBorder',
|
||||||
|
'TelescopePromptBorder',
|
||||||
|
'TelescopeResultsBorder',
|
||||||
|
'TelescopePreviewBorder',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
t.clear_prefix 'NeoTree'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
-- Display a character as the colorcolumn
|
-- Display a character as the colorcolumn
|
||||||
-- https://github.com/lukas-reineke/virt-column.nvim
|
-- https://github.com/lukas-reineke/virt-column.nvim
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
-- Vim plugin for automatic time tracking and metrics
|
|
||||||
-- generated from your programming activity.
|
|
||||||
-- https://github.com/wakatime/vim-wakatime
|
|
||||||
return { 'wakatime/vim-wakatime', lazy = false, enabled = true }
|
|
||||||
31
config/nvim/syntax/env.vim
Normal file
31
config/nvim/syntax/env.vim
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: env files (NOT shell code)
|
||||||
|
" Maintainer: Gernot Schulz <gernot.schulz@overleaf.com>
|
||||||
|
" Source: https://github.com/overleaf/vim-env-syntax
|
||||||
|
|
||||||
|
" quit when a syntax file was already loaded
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match envComment '^#.*'
|
||||||
|
syn match envVariableUnassigned "^\<\h\w*$"
|
||||||
|
|
||||||
|
syn match envVariable "^\<\h\w*\ze=" nextgroup=envVarAssign
|
||||||
|
syn match envVarAssign contained "=" nextgroup=envVar,envQuotedVarOpen,envSpace
|
||||||
|
syn match envVar contained "\h\w*"
|
||||||
|
syn match envSpace contained "\s\+" nextgroup=envQuotedVarOpen
|
||||||
|
syn match envQuotedVarOpen contained "[\"']"
|
||||||
|
|
||||||
|
syn match envSpace "\s$"
|
||||||
|
syn match envQuotedVarClose "[\"']$"
|
||||||
|
|
||||||
|
let b:current_syntax = "env"
|
||||||
|
|
||||||
|
hi def link envComment Comment
|
||||||
|
hi def link envVariableUnassigned Error
|
||||||
|
hi def link envVariable Identifier
|
||||||
|
hi def link envVarAssign Operator
|
||||||
|
hi def link envSpace Error
|
||||||
|
hi def link envQuotedVarOpen Error
|
||||||
|
hi def link envQuotedVarClose Error
|
||||||
2
config/op/plugins.sh
Normal file
2
config/op/plugins.sh
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export OP_PLUGIN_ALIASES_SOURCED=1
|
||||||
|
alias gh="op plugin run -- gh"
|
||||||
15
config/op/plugins/gh.json
Normal file
15
config/op/plugins/gh.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"account_id": "S5Z2DMNFKJEZBPCWRHRWC4DCGI",
|
||||||
|
"entrypoint": [
|
||||||
|
"gh"
|
||||||
|
],
|
||||||
|
"credentials": [
|
||||||
|
{
|
||||||
|
"plugin": "github",
|
||||||
|
"credential_type": "personal_access_token",
|
||||||
|
"usage_id": "personal_access_token",
|
||||||
|
"vault_id": "injcin7obv3jdet3r2u3kfihfy",
|
||||||
|
"item_id": "f6vinbnc6l7ngdzvlw66ayewlq"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1
config/op/plugins/used_items/gh.json
Normal file
1
config/op/plugins/used_items/gh.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"account_id":"S5Z2DMNFKJEZBPCWRHRWC4DCGI","vault_id":"injcin7obv3jdet3r2u3kfihfy","item_id":"f6vinbnc6l7ngdzvlw66ayewlq"}]
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
set-option -g status-style 'fg=#4c4f69,bg=#eff1f5'
|
set-option -g status-style 'fg=#4c4f69,bg=default'
|
||||||
set-window-option -g window-status-style 'fg=#4c4f69,bg=#eff1f5 dim'
|
set-window-option -g window-status-style 'fg=#4c4f69,bg=default dim'
|
||||||
set-window-option -g window-status-current-style 'fg=#8839ef,bg=#eff1f5'
|
set-window-option -g window-status-current-style 'fg=#8839ef,bg=default'
|
||||||
set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=#eff1f5 nodim'
|
set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=default nodim'
|
||||||
set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=#eff1f5'
|
set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=default'
|
||||||
set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black
|
set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
# -o : Set the option only if it is not already set.
|
# -o : Set the option only if it is not already set.
|
||||||
# -u : Unset the specified option.
|
# -u : Unset the specified option.
|
||||||
|
|
||||||
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
||||||
|
set -ag terminal-features 'xterm-256color:RGB'
|
||||||
|
|
||||||
set -g default-terminal "tmux-256color" # Set default terminal to 256 colors
|
set -g default-terminal "tmux-256color" # Set default terminal to 256 colors
|
||||||
set -g detach-on-destroy off # don't detach tmux when killing a session
|
set -g detach-on-destroy off # don't detach tmux when killing a session
|
||||||
set -g display-time 0 # Hide clock
|
set -g display-time 0 # Hide clock
|
||||||
@@ -49,11 +52,12 @@ if-shell '[ "$DEBUG" = "1" ]' 'set -g debug-file ~/.cache/tmux-debug.log'
|
|||||||
|
|
||||||
set -g pane-active-border-style "fg=#7aa2f7"
|
set -g pane-active-border-style "fg=#7aa2f7"
|
||||||
set -g pane-border-style "fg=#3b4261"
|
set -g pane-border-style "fg=#3b4261"
|
||||||
|
set -g status-style "bg=default"
|
||||||
set -g status-justify "left"
|
set -g status-justify "left"
|
||||||
set -g status-left ''
|
set -g status-left ''
|
||||||
set -g status-left-length "0"
|
set -g status-left-length "0"
|
||||||
set -g status-position "bottom"
|
set -g status-position "bottom"
|
||||||
set -g status-right "#S@#{hostname_short} #{tmux_mode_indicator}"
|
set -g status-right "#S@#h #{tmux_mode_indicator}"
|
||||||
set -g status-right-length "30"
|
set -g status-right-length "30"
|
||||||
set -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} '
|
set -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} '
|
||||||
set -g window-status-format ' #I:#W '
|
set -g window-status-format ' #I:#W '
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ config.set_environment_variables = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- Font and font size
|
-- Font and font size
|
||||||
config.font_size = 14.0
|
config.font_size = 14.5
|
||||||
config.font = wezterm.font_with_fallback {
|
config.font = wezterm.font_with_fallback {
|
||||||
{
|
{
|
||||||
family = 'Operator Mono',
|
family = 'Operator Mono',
|
||||||
@@ -17,16 +17,31 @@ config.font = wezterm.font_with_fallback {
|
|||||||
'JetBrains Mono',
|
'JetBrains Mono',
|
||||||
'Symbols Nerd Font Mono',
|
'Symbols Nerd Font Mono',
|
||||||
}
|
}
|
||||||
config.harfbuzz_features = { 'zero', 'ss01', 'cv05' }
|
config.font_shaper = 'Harfbuzz'
|
||||||
|
config.harfbuzz_features = { 'calt=1', 'clig=1', 'liga=1' }
|
||||||
|
|
||||||
-- Make the window a bit transparent
|
config.selection_word_boundary = ' \t\n{[}]()"\'`,;:'
|
||||||
config.window_background_opacity = 0.98
|
|
||||||
|
-- Window configuration
|
||||||
|
config.window_background_opacity = 0.95
|
||||||
|
config.window_decorations = 'RESIZE'
|
||||||
|
config.macos_window_background_blur = 10
|
||||||
|
config.window_padding = {
|
||||||
|
left = 5,
|
||||||
|
right = 5,
|
||||||
|
top = 5,
|
||||||
|
bottom = 5,
|
||||||
|
}
|
||||||
|
|
||||||
-- Don't show tab bar
|
-- Don't show tab bar
|
||||||
config.enable_tab_bar = false
|
config.enable_tab_bar = false
|
||||||
|
|
||||||
-- Fix alt on macOS
|
-- Fix alt on macOS
|
||||||
config.send_composed_key_when_left_alt_is_pressed = true
|
config.send_composed_key_when_left_alt_is_pressed = true
|
||||||
|
config.send_composed_key_when_right_alt_is_pressed = true
|
||||||
|
|
||||||
|
-- Scrolling deactivated, using tmux for that
|
||||||
|
config.scrollback_lines = 0
|
||||||
|
|
||||||
-- Function to detect the theme based on appearance
|
-- Function to detect the theme based on appearance
|
||||||
function Scheme_for_appearance(appearance)
|
function Scheme_for_appearance(appearance)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"assistant": {
|
"assistant": {
|
||||||
"default_model": {
|
"default_model": {
|
||||||
"provider": "copilot_chat",
|
"provider": "copilot_chat",
|
||||||
"model": "claude-3-7-sonnet"
|
"model": "claude-3.7-sonnet-thought"
|
||||||
},
|
},
|
||||||
"version": "2"
|
"version": "2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -35,11 +35,20 @@
|
|||||||
glob: true
|
glob: true
|
||||||
path: base/*
|
path: base/*
|
||||||
prefix: '.'
|
prefix: '.'
|
||||||
|
# Most of the configs
|
||||||
~/.config/:
|
~/.config/:
|
||||||
glob: true
|
glob: true
|
||||||
relink: true
|
relink: true
|
||||||
path: config/*
|
path: config/*
|
||||||
exclude: [config/nvm, config/fzf]
|
exclude: [config/nvm, config/fzf, config/op]
|
||||||
|
# 1Password CLI plugins
|
||||||
|
~/.config/op/plugins.sh:
|
||||||
|
relink: true
|
||||||
|
path: config/op/plugins.sh
|
||||||
|
~/.config/op/plugins/*:
|
||||||
|
relink: true
|
||||||
|
path: config/op/plugins/*
|
||||||
|
# Scripts
|
||||||
~/.local/bin:
|
~/.local/bin:
|
||||||
glob: true
|
glob: true
|
||||||
path: local/bin/*
|
path: local/bin/*
|
||||||
@@ -47,22 +56,27 @@
|
|||||||
~/.local/fzf:
|
~/.local/fzf:
|
||||||
glob: true
|
glob: true
|
||||||
path: config/fzf/*
|
path: config/fzf/*
|
||||||
|
# Manuals
|
||||||
~/.local/man:
|
~/.local/man:
|
||||||
glob: true
|
glob: true
|
||||||
path: local/man/**
|
path: local/man/**
|
||||||
~/.local/share:
|
~/.local/share:
|
||||||
glob: true
|
glob: true
|
||||||
path: local/share/*
|
path: local/share/*
|
||||||
|
# SSH Configuration
|
||||||
~/.ssh/:
|
~/.ssh/:
|
||||||
glob: true
|
glob: true
|
||||||
mode: 0600
|
mode: 0600
|
||||||
path: ssh/*
|
path: ssh/*
|
||||||
|
|
||||||
- shell:
|
- shell:
|
||||||
|
# Add Git submodules and remove old ones
|
||||||
- bash add-submodules.sh || true
|
- bash add-submodules.sh || true
|
||||||
|
# Update submodules recursively
|
||||||
- git submodule update --init --recursive --force
|
- git submodule update --init --recursive --force
|
||||||
|
|
||||||
- shell:
|
- shell:
|
||||||
|
# Use my dotfiles manager to install everything
|
||||||
- bash local/bin/dfm install all
|
- bash local/bin/dfm install all
|
||||||
|
|
||||||
- pipx:
|
- pipx:
|
||||||
|
|||||||
675
local/bin/git-attributes
Executable file
675
local/bin/git-attributes
Executable file
@@ -0,0 +1,675 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Check git repo's files .gitattributes and ensure all of them are mapped.
|
||||||
|
#
|
||||||
|
# Author: Ismo Vuorinen <https://github.com/ivuorinen> 2022
|
||||||
|
# License: MIT
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Default configuration
|
||||||
|
VERBOSE=0
|
||||||
|
CHECK_PATTERN="text: auto"
|
||||||
|
EXIT_ON_MISSING=0
|
||||||
|
SUGGEST_RULES=1 # Suggestions enabled by default
|
||||||
|
WRITE_RULES=0 # Writing to file is opt-in
|
||||||
|
FORMAT_WIDTH=0 # Auto-width by default (0 means auto)
|
||||||
|
MIN_FORMAT_WIDTH=20 # Minimum format width
|
||||||
|
|
||||||
|
DEBUG="${DEBUG:-0}"
|
||||||
|
|
||||||
|
if [ "$DEBUG" -eq 1 ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Output functions
|
||||||
|
msg_err() {
|
||||||
|
echo -e "\e[31m$@\e[0m" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_success() {
|
||||||
|
echo -e "\e[32m$@\e[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_warn() {
|
||||||
|
echo -e "\e[33m$@\e[0m" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_info() {
|
||||||
|
echo -e "\e[36m$@\e[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_debug() {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && echo -e "\e[35m$@\e[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: $(basename "$0") [OPTIONS]
|
||||||
|
|
||||||
|
Check if all git-tracked files have corresponding rules in .gitattributes
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help Display this help message
|
||||||
|
-v, --verbose Enable verbose output
|
||||||
|
-e, --exit Exit with error code if missing attributes found
|
||||||
|
-p, --pattern Pattern to check (default: "text: auto")
|
||||||
|
-n, --no-suggest Don't suggest .gitattributes rules (suggestions are on by default)
|
||||||
|
-w, --write Write suggested rules to .gitattributes file
|
||||||
|
-f, --format-width Specify width for formatting rule patterns (default: auto, min: $MIN_FORMAT_WIDTH)
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
VERBOSE=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-e|--exit)
|
||||||
|
EXIT_ON_MISSING=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-p|--pattern)
|
||||||
|
CHECK_PATTERN="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-n|--no-suggest)
|
||||||
|
SUGGEST_RULES=0
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-w|--write)
|
||||||
|
WRITE_RULES=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--format-width)
|
||||||
|
if [[ $2 =~ ^[0-9]+$ ]]; then
|
||||||
|
FORMAT_WIDTH=$2
|
||||||
|
shift 2
|
||||||
|
else
|
||||||
|
msg_err "Error: --format-width requires a numeric argument"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg_err "Unknown option: $1"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Function to check if git is installed
|
||||||
|
check_git_installed() {
|
||||||
|
if ! command -v git &> /dev/null; then
|
||||||
|
msg_err "git could not be found, please install it first"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if we're in a git repository
|
||||||
|
check_git_repo() {
|
||||||
|
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
|
||||||
|
msg_err "Not inside a git repository"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if we're in the git root directory
|
||||||
|
check_git_root() {
|
||||||
|
local git_root
|
||||||
|
git_root=$(git rev-parse --show-toplevel)
|
||||||
|
local current_dir
|
||||||
|
current_dir=$(pwd)
|
||||||
|
|
||||||
|
if [[ "$git_root" != "$current_dir" ]]; then
|
||||||
|
msg_err "Not in git repository root directory"
|
||||||
|
msg_warn "Please run this command from: $git_root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if .gitattributes exists
|
||||||
|
check_gitattributes_exists() {
|
||||||
|
if [[ ! -f ".gitattributes" ]]; then
|
||||||
|
msg_err ".gitattributes file not found in the repository root"
|
||||||
|
msg_warn "Create a .gitattributes file before running this command"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Format rule with proper alignment
|
||||||
|
format_rule() {
|
||||||
|
local pattern="$1"
|
||||||
|
local attributes="$2"
|
||||||
|
local width="$3"
|
||||||
|
|
||||||
|
# If pattern starts with "#", it's a comment, don't format
|
||||||
|
if [[ "$pattern" == "#"* ]]; then
|
||||||
|
echo "$pattern"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If pattern is empty, return empty
|
||||||
|
if [[ -z "$pattern" ]]; then
|
||||||
|
echo ""
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%-${width}s %s\n" "$pattern" "$attributes"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the file extension properly, handling special cases
|
||||||
|
get_file_extension() {
|
||||||
|
local file="$1"
|
||||||
|
local basename=$(basename "$file")
|
||||||
|
local extension=""
|
||||||
|
|
||||||
|
# Check if file has no extension or is a dotfile
|
||||||
|
if [[ "$basename" == .* && ! "$basename" =~ \..+$ ]]; then
|
||||||
|
# It's a dotfile without extension (like .gitignore)
|
||||||
|
extension="$basename"
|
||||||
|
elif [[ "$basename" =~ \..+$ ]]; then
|
||||||
|
# Normal file with extension
|
||||||
|
extension="${basename##*.}"
|
||||||
|
|
||||||
|
# Check for special cases like .d/ directories
|
||||||
|
if [[ "$extension" == "d" ]]; then
|
||||||
|
# This is likely a .d directory - use the full filename as pattern
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
# For files in .d directories, use the complete path as pattern
|
||||||
|
extension=$(basename "$file")
|
||||||
|
else
|
||||||
|
# For .d directory itself, use *.d
|
||||||
|
extension="d"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# No extension at all
|
||||||
|
extension="$basename"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$extension"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Suggest appropriate gitattributes rules based on file extension
|
||||||
|
suggest_rule() {
|
||||||
|
local file="$1"
|
||||||
|
local extension=""
|
||||||
|
local pattern=""
|
||||||
|
local attributes=""
|
||||||
|
|
||||||
|
msg_debug "Checking file: $file"
|
||||||
|
|
||||||
|
# Skip directories
|
||||||
|
if [[ -d "$file" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get proper file extension
|
||||||
|
extension=$(get_file_extension "$file")
|
||||||
|
|
||||||
|
# If file path contains .d/ pattern, we need special handling
|
||||||
|
if [[ "$file" =~ \.d/ ]]; then
|
||||||
|
# Extract the pattern part that includes the .d/ directory
|
||||||
|
local dir_part=$(dirname "$file")
|
||||||
|
local base_name=$(basename "$file")
|
||||||
|
|
||||||
|
# Check if it's a config directory pattern worth capturing
|
||||||
|
if [[ "$dir_part" =~ /(\.d|[^/]+\.d)$ ]]; then
|
||||||
|
pattern="$dir_part/*"
|
||||||
|
msg_debug "Detected .d directory pattern: $pattern"
|
||||||
|
else
|
||||||
|
# Use standard extension pattern
|
||||||
|
pattern="*.${extension}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Standard file with extension
|
||||||
|
pattern="*.${extension}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Common text files
|
||||||
|
case "$extension" in
|
||||||
|
# Shell scripts
|
||||||
|
sh|bash|zsh|fish)
|
||||||
|
attributes="text eol=lf diff=shell"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Web development
|
||||||
|
html|htm|xhtml|css|scss|sass|less)
|
||||||
|
attributes="text eol=lf diff=html"
|
||||||
|
;;
|
||||||
|
js|jsx|ts|tsx|json|json5)
|
||||||
|
attributes="text eol=lf diff=javascript"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Programming languages
|
||||||
|
php)
|
||||||
|
attributes="text eol=lf diff=php"
|
||||||
|
;;
|
||||||
|
py)
|
||||||
|
attributes="text eol=lf diff=python"
|
||||||
|
;;
|
||||||
|
rb)
|
||||||
|
attributes="text eol=lf diff=ruby"
|
||||||
|
;;
|
||||||
|
go)
|
||||||
|
attributes="text eol=lf diff=golang"
|
||||||
|
;;
|
||||||
|
java|kt|scala)
|
||||||
|
attributes="text eol=lf diff=java"
|
||||||
|
;;
|
||||||
|
c|cpp|h|hpp)
|
||||||
|
attributes="text eol=lf diff=cpp"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
md|markdown|txt)
|
||||||
|
attributes="text eol=lf"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Configuration files
|
||||||
|
yml|yaml|toml|ini|cfg|conf)
|
||||||
|
attributes="text eol=lf"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Git config files and similar patterns
|
||||||
|
git)
|
||||||
|
attributes="text eol=lf"
|
||||||
|
;;
|
||||||
|
gitignore|gitattributes)
|
||||||
|
attributes="text eol=lf"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Binary files
|
||||||
|
png|jpg|jpeg|gif|ico|svg|webp|avif)
|
||||||
|
attributes="binary"
|
||||||
|
;;
|
||||||
|
pdf|doc|docx|xls|xlsx|ppt|pptx)
|
||||||
|
attributes="binary"
|
||||||
|
;;
|
||||||
|
zip|tar|gz|7z|rar)
|
||||||
|
attributes="binary"
|
||||||
|
;;
|
||||||
|
mp3|mp4|avi|mov|wav|ogg)
|
||||||
|
attributes="binary"
|
||||||
|
;;
|
||||||
|
ttf|otf|woff|woff2|eot)
|
||||||
|
attributes="binary"
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Default for unknown extensions
|
||||||
|
*)
|
||||||
|
# Try to guess if it's text by checking if it contains null bytes
|
||||||
|
if file "$file" | grep -q text; then
|
||||||
|
attributes="text eol=lf"
|
||||||
|
else
|
||||||
|
attributes="binary"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
msg_debug "...suggesting $pattern $attributes"
|
||||||
|
|
||||||
|
echo "$pattern:$attributes"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check for missing .gitattributes
|
||||||
|
check_gitattributes() {
|
||||||
|
local missing_attributes
|
||||||
|
msg_info "Checking for pattern: $CHECK_PATTERN"
|
||||||
|
|
||||||
|
missing_attributes=$(git ls-files | git check-attr -a --stdin | grep "$CHECK_PATTERN" || true)
|
||||||
|
|
||||||
|
if [[ -n "$missing_attributes" ]]; then
|
||||||
|
msg_warn "Missing .gitattributes rules detected"
|
||||||
|
|
||||||
|
if [[ $SUGGEST_RULES -eq 1 ]]; then
|
||||||
|
# Generate suggestions
|
||||||
|
local suggestions
|
||||||
|
|
||||||
|
# Generate the suggestions
|
||||||
|
suggestions=$(suggest_gitattributes "$missing_attributes")
|
||||||
|
|
||||||
|
# Display the suggestions
|
||||||
|
echo ""
|
||||||
|
echo "$suggestions"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [[ $WRITE_RULES -eq 1 ]]; then
|
||||||
|
msg_debug "...writing to .gitattributes"
|
||||||
|
write_to_gitattributes "$suggestions"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg_err ".gitattributes rule missing for the following files:"
|
||||||
|
echo "$missing_attributes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $EXIT_ON_MISSING -eq 1 ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg_success "All files have a corresponding rule in .gitattributes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse rule string and extract pattern and attributes
|
||||||
|
parse_rule() {
|
||||||
|
local rule="$1"
|
||||||
|
|
||||||
|
if [[ "$rule" == "#"* ]]; then
|
||||||
|
# This is a comment line
|
||||||
|
echo "$rule::"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$rule" =~ ^([^[:space:]]+)[[:space:]]+(.*)$ ]]; then
|
||||||
|
echo "${BASH_REMATCH[1]}:${BASH_REMATCH[2]}"
|
||||||
|
else
|
||||||
|
echo "$rule::"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check shell scripts by name regardless of extension
|
||||||
|
detect_shell_scripts() {
|
||||||
|
msg_debug "Detecting shell scripts by name regardless of extension..."
|
||||||
|
|
||||||
|
local shell_scripts_rules=""
|
||||||
|
local shell_scripts_found=0
|
||||||
|
local patterns=()
|
||||||
|
local attributes=()
|
||||||
|
|
||||||
|
# Get already defined rules in .gitattributes
|
||||||
|
local existing_rules
|
||||||
|
existing_rules=$(grep -v "^#" .gitattributes || true)
|
||||||
|
|
||||||
|
# Get all shell scripts regardless of extension
|
||||||
|
local shell_scripts
|
||||||
|
shell_scripts=$(git ls-files | xargs file | grep "shell script" | cut -d: -f1)
|
||||||
|
|
||||||
|
if [[ -n "$shell_scripts" ]]; then
|
||||||
|
shell_scripts_found=$(echo "$shell_scripts" | wc -l | tr -d ' ')
|
||||||
|
msg_debug "Found $shell_scripts_found potential shell scripts."
|
||||||
|
|
||||||
|
# Track scripts that need rules
|
||||||
|
declare -A scripts_by_dir=()
|
||||||
|
local need_rule_count=0
|
||||||
|
|
||||||
|
# Process each script
|
||||||
|
while IFS= read -r script; do
|
||||||
|
local rel_path="${script#./}"
|
||||||
|
|
||||||
|
# Skip if exact path already in .gitattributes
|
||||||
|
if grep -q "^${rel_path} " <<< "$existing_rules"; then
|
||||||
|
msg_debug "Script already in .gitattributes: $rel_path"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Skip if file extension already covered
|
||||||
|
local extension=$(get_file_extension "$rel_path")
|
||||||
|
if [[ "$extension" != "$rel_path" ]] && grep -q "^\*\.$extension " <<< "$existing_rules"; then
|
||||||
|
msg_debug "Script covered by extension rule: $rel_path (*.$extension)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if any parent directory is already covered
|
||||||
|
local is_covered=0
|
||||||
|
local dir_path="$rel_path"
|
||||||
|
while [[ "$dir_path" != "." && "$dir_path" != "/" ]]; do
|
||||||
|
dir_path=$(dirname "$dir_path")
|
||||||
|
if [[ "$dir_path" == "." ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if directory or any of its contents are covered
|
||||||
|
if grep -q "^${dir_path}/\?" <<< "$existing_rules" || grep -q "^${dir_path}/\*" <<< "$existing_rules"; then
|
||||||
|
msg_debug "Script covered by directory rule: $rel_path (${dir_path})"
|
||||||
|
is_covered=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $is_covered -eq 1 ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Group by directory
|
||||||
|
local dir=$(dirname "$rel_path")
|
||||||
|
if [[ "$dir" == "." ]]; then
|
||||||
|
dir="root"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add to appropriate group
|
||||||
|
if [[ -z "${scripts_by_dir[$dir]:-}" ]]; then
|
||||||
|
scripts_by_dir[$dir]="$rel_path"
|
||||||
|
else
|
||||||
|
scripts_by_dir[$dir]="${scripts_by_dir[$dir]}\n$rel_path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
((need_rule_count++))
|
||||||
|
done <<< "$shell_scripts"
|
||||||
|
|
||||||
|
# Output grouped results
|
||||||
|
if [[ $need_rule_count -gt 0 ]]; then
|
||||||
|
patterns+=("# Shell scripts detected by content")
|
||||||
|
attributes+=("")
|
||||||
|
|
||||||
|
# Check if we can use directory-based rules instead of individual files
|
||||||
|
for dir in "${!scripts_by_dir[@]}"; do
|
||||||
|
local files_in_dir=$(echo -e "${scripts_by_dir[$dir]}" | wc -l)
|
||||||
|
local dir_path="$dir"
|
||||||
|
|
||||||
|
if [[ "$dir" == "root" ]]; then
|
||||||
|
# For root directory files, list each individually
|
||||||
|
while IFS= read -r file; do
|
||||||
|
patterns+=("$file")
|
||||||
|
attributes+=("text eol=lf diff=shell")
|
||||||
|
done <<< "$(echo -e "${scripts_by_dir[$dir]}")"
|
||||||
|
elif [[ $files_in_dir -gt 2 ]]; then
|
||||||
|
# If directory has multiple scripts, suggest a directory pattern
|
||||||
|
patterns+=("# Found $files_in_dir scripts in $dir_path")
|
||||||
|
attributes+=("")
|
||||||
|
|
||||||
|
# Special handling for .d directories
|
||||||
|
if [[ "$dir_path" =~ \.d$ || "$dir_path" =~ \.d/ ]]; then
|
||||||
|
patterns+=("$dir_path/*")
|
||||||
|
else
|
||||||
|
patterns+=("$dir_path/*")
|
||||||
|
fi
|
||||||
|
attributes+=("text eol=lf diff=shell")
|
||||||
|
|
||||||
|
# List the files as comments for reference
|
||||||
|
while IFS= read -r file; do
|
||||||
|
patterns+=("# - ${file}")
|
||||||
|
attributes+=("")
|
||||||
|
done <<< "$(echo -e "${scripts_by_dir[$dir]}" | sort)"
|
||||||
|
else
|
||||||
|
# For directories with few scripts, list them individually
|
||||||
|
while IFS= read -r file; do
|
||||||
|
patterns+=("$file")
|
||||||
|
attributes+=("text eol=lf diff=shell")
|
||||||
|
done <<< "$(echo -e "${scripts_by_dir[$dir]}")"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
msg_debug "Adding $need_rule_count shell scripts to suggestions (grouped by directory)."
|
||||||
|
else
|
||||||
|
msg_debug "All detected shell scripts already have rules."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg_debug "No shell scripts detected."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Return the formatted arrays
|
||||||
|
local rules_count=${#patterns[@]}
|
||||||
|
for ((i=0; i<rules_count; i++)); do
|
||||||
|
echo "${patterns[$i]}:${attributes[$i]}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to suggest gitattributes rules
|
||||||
|
suggest_gitattributes() {
|
||||||
|
local missing_attributes="$1"
|
||||||
|
local files
|
||||||
|
local extension_suggestions=()
|
||||||
|
local formatted_suggestions=""
|
||||||
|
local all_patterns=()
|
||||||
|
local all_attributes=()
|
||||||
|
local max_pattern_length=0
|
||||||
|
|
||||||
|
# Add header to suggestions
|
||||||
|
all_patterns+=("# Auto-generated rules - $(date +"%Y-%m-%d %H:%M:%S")")
|
||||||
|
all_attributes+=("")
|
||||||
|
|
||||||
|
msg_info "Suggested .gitattributes rules:"
|
||||||
|
|
||||||
|
# First, detect shell scripts and add them to suggestions
|
||||||
|
msg_info "Detecting shell scripts by content..."
|
||||||
|
local shell_scripts_rules
|
||||||
|
shell_scripts_rules=$(detect_shell_scripts)
|
||||||
|
|
||||||
|
# Add shell script rules to patterns and attributes arrays
|
||||||
|
if [[ -n "$shell_scripts_rules" ]]; then
|
||||||
|
while IFS=':' read -r pattern attributes; do
|
||||||
|
if [[ -n "$pattern" ]]; then
|
||||||
|
all_patterns+=("$pattern")
|
||||||
|
all_attributes+=("$attributes")
|
||||||
|
|
||||||
|
# Update max pattern length (skip comments)
|
||||||
|
if [[ "$pattern" != "#"* ]] && [[ ${#pattern} -gt $max_pattern_length ]]; then
|
||||||
|
max_pattern_length=${#pattern}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$shell_scripts_rules"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract filenames from git check-attr output
|
||||||
|
files=$(echo "$missing_attributes" | awk -F': ' '{print $1}')
|
||||||
|
|
||||||
|
# Get suggestions for each file
|
||||||
|
declare -A seen_patterns=()
|
||||||
|
|
||||||
|
while IFS= read -r file; do
|
||||||
|
local suggestion=$(suggest_rule "$file")
|
||||||
|
if [[ -n "$suggestion" ]]; then
|
||||||
|
IFS=':' read -r pattern attributes <<< "$suggestion"
|
||||||
|
|
||||||
|
# Only add each pattern once
|
||||||
|
if [[ -z "${seen_patterns[$pattern]:-}" ]]; then
|
||||||
|
extension_suggestions+=("$suggestion")
|
||||||
|
seen_patterns[$pattern]=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$files"
|
||||||
|
|
||||||
|
# Remove duplicates and sort
|
||||||
|
local unique_extensions=()
|
||||||
|
mapfile -t unique_extensions < <(printf '%s\n' "${extension_suggestions[@]}" | sort -u)
|
||||||
|
|
||||||
|
# Add extension-based suggestions header if we have any
|
||||||
|
if [[ ${#unique_extensions[@]} -gt 0 ]]; then
|
||||||
|
all_patterns+=("")
|
||||||
|
all_attributes+=("")
|
||||||
|
|
||||||
|
all_patterns+=("# File extension-based rules")
|
||||||
|
all_attributes+=("")
|
||||||
|
|
||||||
|
# Add extension rules to patterns and attributes arrays
|
||||||
|
for suggestion in "${unique_extensions[@]}"; do
|
||||||
|
IFS=':' read -r pattern attributes <<< "$suggestion"
|
||||||
|
|
||||||
|
all_patterns+=("$pattern")
|
||||||
|
all_attributes+=("$attributes")
|
||||||
|
|
||||||
|
# Update max pattern length
|
||||||
|
if [[ ${#pattern} -gt $max_pattern_length ]]; then
|
||||||
|
max_pattern_length=${#pattern}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use user-specified format width if provided, otherwise use max_pattern_length
|
||||||
|
# But ensure it's at least MIN_FORMAT_WIDTH
|
||||||
|
local format_width=$max_pattern_length
|
||||||
|
if [[ $FORMAT_WIDTH -gt 0 ]]; then
|
||||||
|
format_width=$FORMAT_WIDTH
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure minimum width
|
||||||
|
if [[ $format_width -lt $MIN_FORMAT_WIDTH ]]; then
|
||||||
|
format_width=$MIN_FORMAT_WIDTH
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_debug "Using format width: $format_width"
|
||||||
|
|
||||||
|
# Format and output all suggestions with proper alignment
|
||||||
|
local rule_count=${#all_patterns[@]}
|
||||||
|
|
||||||
|
for ((i=0; i<rule_count; i++)); do
|
||||||
|
local pattern="${all_patterns[$i]}"
|
||||||
|
local attributes="${all_attributes[$i]}"
|
||||||
|
|
||||||
|
# Handle comments separately
|
||||||
|
if [[ "$pattern" == "#"* ]] || [[ -z "$attributes" ]]; then
|
||||||
|
formatted_suggestions+="$pattern\n"
|
||||||
|
echo "$pattern"
|
||||||
|
else
|
||||||
|
local formatted_rule=$(printf "%-${format_width}s %s\n" "$pattern" "$attributes")
|
||||||
|
formatted_suggestions+="$formatted_rule\n"
|
||||||
|
echo "$formatted_rule"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Add final message
|
||||||
|
echo ""
|
||||||
|
msg_info "Add these rules to your .gitattributes file to resolve missing attributes."
|
||||||
|
|
||||||
|
# Return the full suggestion text so it can be both displayed and written to file
|
||||||
|
echo -e "$formatted_suggestions"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Write suggestions to .gitattributes file
|
||||||
|
write_to_gitattributes() {
|
||||||
|
local suggestions="$1"
|
||||||
|
local gitattributes=".gitattributes"
|
||||||
|
|
||||||
|
# Check if file exists and is writable
|
||||||
|
if [[ ! -w "$gitattributes" ]]; then
|
||||||
|
msg_err "Cannot write to $gitattributes. Check permissions."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add a newline at the end of the file if it doesn't have one
|
||||||
|
if [[ -s "$gitattributes" ]] && [[ $(tail -c 1 "$gitattributes" | wc -l) -eq 0 ]]; then
|
||||||
|
echo "" >> "$gitattributes"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append suggestions to the file
|
||||||
|
echo -e "$suggestions" >> "$gitattributes"
|
||||||
|
|
||||||
|
msg_success "Added suggested rules to $gitattributes"
|
||||||
|
|
||||||
|
# Remind to check the file
|
||||||
|
msg_warn "Please review the changes to ensure they're appropriate for your project."
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main function
|
||||||
|
main() {
|
||||||
|
check_git_installed
|
||||||
|
check_git_repo
|
||||||
|
check_git_root
|
||||||
|
check_gitattributes_exists
|
||||||
|
check_gitattributes
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Check git repo's files .gitattributes and ensure all of them are mapped.
|
|
||||||
# Ismo Vuorinen <https://github.com/ivuorinen> 2022
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
|
||||||
VERBOSE="${VERBOSE:-0}"
|
|
||||||
|
|
||||||
# Function to check if git is installed
|
|
||||||
check_git_installed()
|
|
||||||
{
|
|
||||||
if ! command -v git &> /dev/null; then
|
|
||||||
msg_err "git could not be found, please install it first"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to check for missing .gitattributes
|
|
||||||
check_gitattributes()
|
|
||||||
{
|
|
||||||
local missing_attributes
|
|
||||||
missing_attributes=$(git ls-files | git check-attr -a --stdin | grep "text: auto" || true)
|
|
||||||
|
|
||||||
if [[ -n "$missing_attributes" ]]; then
|
|
||||||
echo ".gitattributes rule missing for the following files:"
|
|
||||||
echo "$missing_attributes"
|
|
||||||
else
|
|
||||||
echo "All files have a corresponding rule in .gitattributes"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main function
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
check_git_installed
|
|
||||||
check_gitattributes
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
column_width = 120
|
column_width = 90
|
||||||
line_endings = "Unix"
|
line_endings = "Unix"
|
||||||
indent_type = "Spaces"
|
indent_type = "Spaces"
|
||||||
indent_width = 2
|
indent_width = 2
|
||||||
|
|||||||
@@ -6947,9 +6947,9 @@ http-proxy-agent@^7.0.0:
|
|||||||
debug "^4.3.4"
|
debug "^4.3.4"
|
||||||
|
|
||||||
http-proxy-middleware@^2.0.3:
|
http-proxy-middleware@^2.0.3:
|
||||||
version "2.0.7"
|
version "2.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6"
|
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef"
|
||||||
integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==
|
integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/http-proxy" "^1.17.8"
|
"@types/http-proxy" "^1.17.8"
|
||||||
http-proxy "^1.18.1"
|
http-proxy "^1.18.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user