Compare commits

...

7 Commits

20 changed files with 588 additions and 279 deletions

View File

@@ -46,3 +46,13 @@ repos:
rev: v1.7.4 rev: v1.7.4
hooks: hooks:
- id: actionlint - id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 39.70.0
hooks:
- id: renovate-config-validator
- repo: https://github.com/JohnnyMorganz/StyLua
rev: v2.0.2
hooks:
- id: stylua # or stylua-system / stylua-github

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,7 @@ if not vim.loop.fs_stat(lazypath) then
if vim.v.shell_error ~= 0 then if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({ vim.api.nvim_echo({
{ 'Failed to clone lazy.nvim:\n', 'ErrorMsg' }, { 'Failed to clone lazy.nvim:\n', 'ErrorMsg' },
{ out, 'WarningMsg' }, { out, 'WarningMsg' },
{ '\nPress any key to exit...' }, { '\nPress any key to exit...' },
}, true, {}) }, true, {})
vim.fn.getchar() vim.fn.getchar()
@@ -38,7 +38,7 @@ require 'autogroups'
-- ── Load plugins ──────────────────────────────────────────────────── -- ── Load plugins ────────────────────────────────────────────────────
require('lazy').setup( require('lazy').setup(
-- Automatically load plugins from lua/plugins -- Automatically load plugins from lua/plugins
'plugins', 'plugins',
-- Lazy Configuration -- Lazy Configuration
{ {

View File

@@ -17,9 +17,9 @@ autocmd('TextYankPost', {
-- --
-- This fixes the issue where the line numbers jump -- This fixes the issue where the line numbers jump
-- around when moving between lines relative line numbers enabled. -- around when moving between lines relative line numbers enabled.
autocmd({ "BufEnter", "BufWinEnter", "TabEnter" }, { 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 vim.opt.numberwidth = #tostring(max_line_count) + 1
@@ -68,7 +68,16 @@ autocmd('FileType', {
-- wrap and check for spell in text filetypes -- wrap and check for spell in text filetypes
autocmd('FileType', { autocmd('FileType', {
group = augroup('wrap_spell', { clear = true }), group = augroup('wrap_spell', { clear = true }),
pattern = { 'text', 'plaintex', 'typst', 'gitcommit', 'markdown', 'asciidoc', 'rst', 'tex' }, pattern = {
'text',
'plaintex',
'typst',
'gitcommit',
'markdown',
'asciidoc',
'rst',
'tex',
},
callback = function() callback = function()
vim.opt_local.wrap = true vim.opt_local.wrap = true
vim.opt_local.spell = true vim.opt_local.spell = true
@@ -87,19 +96,12 @@ autocmd({ 'FileType' }, {
-- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work -- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work
autocmd({ 'BufRead', 'BufNewFile' }, { autocmd({ 'BufRead', 'BufNewFile' }, {
desc = 'Set filetype for SSH config directory', desc = 'Set filetype for SSH config directory',
pattern = { '*/?.ssh/{config|shared}.d/*', '*/?.ssh/config.local', '*/?.ssh/config.work' }, pattern = {
'*/?.ssh/{config|shared}.d/*',
'*/?.ssh/config.local',
'*/?.ssh/config.work',
},
command = 'set filetype=sshconfig', command = 'set filetype=sshconfig',
}) })
-- Format on save, unless disabled
autocmd('BufWritePre', {
group = augroup('Format', { clear = true }),
pattern = '*', -- All files
callback = function()
if not vim.g.disable_autoformat then
vim.lsp.buf.format({ async = false })
end
end,
})
-- vim: ts=2 sts=2 sw=2 et -- vim: ts=2 sts=2 sw=2 et

View File

@@ -1,6 +1,6 @@
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 : -- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 :
require('utils') require 'utils'
-- ╭─────────────────────────────────────────────────────────╮ -- ╭─────────────────────────────────────────────────────────╮
-- │ Keymaps │ -- │ Keymaps │
@@ -20,8 +20,16 @@ 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', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true }) K.n(
K.n('j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true }) 'k',
"v:count == 0 ? 'gk' : 'k'",
{ desc = 'Move up', noremap = true, expr = true }
)
K.n(
'j',
"v:count == 0 ? 'gj' : 'j'",
{ desc = 'Move down', noremap = true, expr = true }
)
-- ── Text manipulation ─────────────────────────────────────────────── -- ── Text manipulation ───────────────────────────────────────────────
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left') K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
@@ -55,7 +63,7 @@ K.ld('ca', 'n', ':Lspsaga code_action<cr>', 'Code Action')
K.ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls') K.ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls')
K.ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls') K.ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls')
K.ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics') K.ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics')
K.ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format') -- K.ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format')
K.ld('cg', 'n', ':lua require("neogen").generate()<CR>', 'Generate annotations') K.ld('cg', 'n', ':lua require("neogen").generate()<CR>', 'Generate annotations')
K.ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations') K.ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations')
K.ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics') K.ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics')
@@ -78,21 +86,24 @@ K.nl('cbl', '<Cmd>CBline<CR>', 'CB: Simple Line')
K.nl('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked') K.nl('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked')
K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line') K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
-- ── Telescope operations ──────────────────────────────────────────── -- ── Telescope operations ────────────────────────────────────────────
-- Mappings for Telescope operations like finding files, buffers, etc. -- Mappings for Telescope operations like finding files, buffers, etc.
-- Convention: All mappings start with 's' followed by the operation -- Convention: All mappings start with 's' followed by the operation
-- unless it's a generic operation like searching or finding buffers -- unless it's a generic operation like searching or finding buffers
K.nl('f', ':Telescope find_files<cr>', 'Find Files') K.nl('f', ':Telescope find_files<cr>', 'Find Files')
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers') K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
K.nl('/', function() K.nl(
require('telescope.builtin').current_buffer_fuzzy_find( '/',
require('telescope.themes').get_dropdown { function()
winblend = 20, require('telescope.builtin').current_buffer_fuzzy_find(
previewer = true, require('telescope.themes').get_dropdown {
} winblend = 20,
) previewer = true,
end, 'Fuzzily search in current buffer') }
)
end,
'Fuzzily search in current buffer'
)
K.nl('sc', ':Telescope commands<cr>', 'Commands') K.nl('sc', ':Telescope commands<cr>', 'Commands')
K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics') K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
@@ -101,7 +112,11 @@ K.nl('sh', ':Telescope help_tags<cr>', 'Help tags')
K.nl('sk', ':Telescope keymaps<cr>', 'Search Keymaps') K.nl('sk', ':Telescope keymaps<cr>', 'Search Keymaps')
K.nl('sl', ':Telescope luasnip<CR>', 'Search LuaSnip') K.nl('sl', ':Telescope luasnip<CR>', 'Search LuaSnip')
K.nl('so', ':Telescope oldfiles<CR>', 'Old Files') K.nl('so', ':Telescope oldfiles<CR>', 'Old Files')
K.nl('sp', ':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>', 'Lazy Plugins') K.nl(
'sp',
':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>',
'Lazy Plugins'
)
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix') K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter') K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
K.nl('st', ':TodoTelescope<cr>', 'Search Todos') K.nl('st', ':TodoTelescope<cr>', 'Search Todos')
@@ -127,14 +142,14 @@ 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!') vim.cmd 'wq!'
end 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()
if vim.fn.confirm("Force quit without saving?", "&Yes\n&No", 2) == 1 then if vim.fn.confirm('Force quit without saving?', '&Yes\n&No', 2) == 1 then
vim.cmd('q!') vim.cmd 'q!'
end end
end, 'Force quit without saving') end, 'Force quit without saving')

View File

@@ -25,22 +25,17 @@ M.version = '0.1.0' -- x-release-please-version
---@return string? Return the result of the command ---@return string? Return the result of the command
local function run_command(cmd) local function run_command(cmd)
local result = vim.fn.system(cmd) local result = vim.fn.system(cmd)
return vim.v.shell_error == 0 and result:gsub("%s+$", "") or nil return vim.v.shell_error == 0 and result:gsub('%s+$', '') or nil
end end
-- Helper function to show a notification -- Helper function to show a notification
---@param msg string Show a message ---@param msg string Show a message
---@param level number|"info"|"warn"|"error"|"trace" Notification level ---@param level number|"info"|"warn"|"error"|"trace" Notification level
local function n(msg, level) local function n(msg, level)
if msg == nil then if msg == nil then msg = M.name .. ': No message provided' end
msg = M.name .. ": No message provided" if level == nil then level = 'trace' end
end
if level == nil then
level = "trace"
end
vim.notify(M.name .. ": " .. msg, level) vim.notify(M.name .. ': ' .. msg, level)
end end
---@class NvmDefaultOptions ---@class NvmDefaultOptions
@@ -52,59 +47,63 @@ end
---@type NvmDefaultOptions ---@type NvmDefaultOptions
M.defaults = { M.defaults = {
add_to_path = vim.g.nvm_default_add_to_path or true, add_to_path = vim.g.nvm_default_add_to_path or true,
nvm_path = vim.fn.expand(os.getenv("NVM_DIR") or "~/.nvm"), nvm_path = vim.fn.expand(os.getenv 'NVM_DIR' or '~/.nvm'),
notify_level = vim.g.nvm_default_notify_level or "info", notify_level = vim.g.nvm_default_notify_level or 'info',
} }
-- Fetch the NVM default version or fallback to node version -- Fetch the NVM default version or fallback to node version
---@param opts? NvmDefaultOptions Plugin options ---@param opts? NvmDefaultOptions Plugin options
function M.setup(opts) function M.setup(opts)
local options = vim.tbl_deep_extend("force", M.defaults, opts or {}) local options = vim.tbl_deep_extend('force', M.defaults, opts or {})
local nvm_path = options.nvm_path local nvm_path = options.nvm_path
local node_version = local node_version = run_command(
run_command(string.format(". %s/nvm.sh && nvm version default", nvm_path)) or string.format('. %s/nvm.sh && nvm version default', nvm_path)
run_command(string.format(". %s/nvm.sh && nvm version node", nvm_path)) ) or run_command(string.format('. %s/nvm.sh && nvm version node', nvm_path))
if node_version and node_version:match("^v") then if node_version and node_version:match '^v' then
-- 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 = string.format("%s/versions/node/%s", nvm_path, node_version) local current_nvm_version_path =
local current_nvm_node_bin_path = string.format("%s/bin", current_nvm_version_path) string.format('%s/versions/node/%s', nvm_path, node_version)
local current_nvm_node_bin = string.format("%s/node", current_nvm_node_bin_path) local current_nvm_node_bin_path =
local neovim_node_host_bin_path = string.format("%s/neovim-node-host", current_nvm_node_bin_path) string.format('%s/bin', current_nvm_version_path)
local current_nvm_node_bin =
string.format('%s/node', current_nvm_node_bin_path)
local neovim_node_host_bin_path =
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
-- Collect missing files and directories errors for error output -- Collect missing files and directories errors for error output
local missing = {} local missing = {}
-- If node_dir isn't there, stop and show error -- If node_dir isn't there, stop and show error
if not vim.fn.isdirectory(current_nvm_version_path) then if not vim.fn.isdirectory(current_nvm_version_path) then
table.insert(missing, "Node.js directory: " .. current_nvm_version_path) table.insert(missing, 'Node.js directory: ' .. current_nvm_version_path)
end end
-- If node_bin isn't there, stop and show error -- If node_bin isn't there, stop and show error
if not vim.fn.filereadable(current_nvm_node_bin) then if not vim.fn.filereadable(current_nvm_node_bin) then
table.insert(missing, "Node.js binary: " .. current_nvm_node_bin) table.insert(missing, 'Node.js binary: ' .. current_nvm_node_bin)
end end
if not vim.fn.filereadable(neovim_node_host_bin_path) then if not vim.fn.filereadable(neovim_node_host_bin_path) then
table.insert(missing, "Neovim host binary: " .. neovim_node_host_bin_path) table.insert(missing, 'Neovim host binary: ' .. neovim_node_host_bin_path)
end end
if #missing > 0 then if #missing > 0 then
n("Missing required files:\n- " .. table.concat(missing, "\n- "), "error") n('Missing required files:\n- ' .. table.concat(missing, '\n- '), 'error')
return return
end end
-- Add to PATH if requested. Can be turned off by setting if it messes with -- Add to PATH if requested. Can be turned off by setting if it messes with
-- other tools. -- other tools.
if options.add_to_path then if options.add_to_path then
vim.env.PATH = current_nvm_node_bin_path .. ":" .. vim.env.PATH vim.env.PATH = current_nvm_node_bin_path .. ':' .. vim.env.PATH
end end
vim.g.node_host_prog = neovim_node_host_bin_path vim.g.node_host_prog = neovim_node_host_bin_path
vim.g.copilot_node_command = current_nvm_node_bin vim.g.copilot_node_command = current_nvm_node_bin
else else
n("Unable to determine the Node.js version from nvm.", "error") n('Unable to determine the Node.js version from nvm.', 'error')
end end
end end

View File

@@ -5,46 +5,47 @@
-- `:help vim.g` -- `:help vim.g`
-- For more options, you can see `:help option-list` -- For more options, you can see `:help option-list`
local g = vim.g -- A table to store global variables local g = vim.g -- A table to store global variables
local o = vim.opt -- A table to store global options local o = vim.opt -- A table to store global options
vim.loader.enable() -- Enable the plugin loader vim.loader.enable() -- Enable the plugin loader
-- vim.global -- vim.global
g.mapleader = ' ' -- Space as the leader key g.mapleader = ' ' -- Space as the leader key
g.maplocalleader = ' ' -- Space as the local leader key g.maplocalleader = ' ' -- Space as the local leader key
g.colors_theme = 'tokyonight' -- Set the colorscheme g.colors_theme = 'tokyonight' -- Set the colorscheme
g.colors_variant_light = 'tokyonight-day' -- Set the light variant g.colors_variant_light = 'tokyonight-day' -- Set the light variant
g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant
g.editorconfig = true -- Make sure editorconfig support is enabled g.editorconfig = true -- Make sure editorconfig support is enabled
g.loaded_perl_provider = 0 -- Disable perl provider g.loaded_perl_provider = 0 -- Disable perl provider
g.loaded_ruby_provider = 0 -- Disable ruby provider g.loaded_ruby_provider = 0 -- Disable ruby provider
g.loaded_java_provider = 0 -- Disable java provider
-- vim.options -- vim.options
o.breakindent = true -- Enable break indent o.breakindent = true -- Enable break indent
o.completeopt = 'menuone,noselect' -- Popup menu when typing o.completeopt = 'menuone,noselect' -- Popup menu when typing
o.cursorline = true -- Show which line your cursor is on o.cursorline = true -- Show which line your cursor is on
o.inccommand = 'split' -- Preview substitutions live, as you type! o.inccommand = 'split' -- Preview substitutions live, as you type!
o.mouse = 'a' -- Enable mouse support o.mouse = 'a' -- Enable mouse support
o.number = true -- Show line numbers o.number = true -- Show line numbers
o.numberwidth = 3 -- Set the width of the number column o.numberwidth = 3 -- Set the width of the number column
o.relativenumber = true -- Show relative line numbers o.relativenumber = true -- Show relative line numbers
o.scrolloff = 15 -- Show context around cursor o.scrolloff = 15 -- Show context around cursor
o.showmode = false -- Don't show mode o.showmode = false -- Don't show mode
o.signcolumn = 'yes:3' -- Keep signcolumn on by default o.signcolumn = 'yes:3' -- Keep signcolumn on by default
o.smartindent = true -- Insert indents automatically o.smartindent = true -- Insert indents automatically
o.spell = true -- Enable spell checking o.spell = true -- Enable spell checking
o.spelllang = 'en_us' -- Set the spell checking language o.spelllang = 'en_us' -- Set the spell checking language
o.splitbelow = true -- split to the bottom o.splitbelow = true -- split to the bottom
o.splitright = true -- vsplit to the right o.splitright = true -- vsplit to the right
o.termguicolors = true -- Fixes Notify opacity issues o.termguicolors = true -- Fixes Notify opacity issues
o.timeoutlen = 250 -- Decrease mapped sequence wait time o.timeoutlen = 250 -- Decrease mapped sequence wait time
o.undofile = true -- Save undo history o.undofile = true -- Save undo history
o.updatetime = 250 -- 250 ms = 2,5 seconds o.updatetime = 250 -- 250 ms = 2,5 seconds
o.ignorecase = true -- Ignore case in search patterns o.ignorecase = true -- Ignore case in search patterns
o.smartcase = true -- Override 'ignorecase' if pattern contains upper case chars o.smartcase = true -- Override 'ignorecase' if pattern contains upper case chars
-- List options -- List options
o.list = true -- Show some invisible characters o.list = true -- Show some invisible characters

View File

@@ -12,7 +12,6 @@ return {
'saghen/blink.compat', 'saghen/blink.compat',
version = '*', version = '*',
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp -- lazy.nvim will automatically load the plugin when it's required by blink.cmp
lazy = true,
opts = { opts = {
-- make sure to set opts so that lazy.nvim calls blink.compat's setup -- make sure to set opts so that lazy.nvim calls blink.compat's setup
impersonate_nvim_cmp = true, impersonate_nvim_cmp = true,
@@ -26,7 +25,7 @@ return {
-- Lua plugin to turn github copilot into a cmp source -- Lua plugin to turn github copilot into a cmp source
-- https://github.com/giuxtaposition/blink-cmp-copilot -- https://github.com/giuxtaposition/blink-cmp-copilot
{ {
"giuxtaposition/blink-cmp-copilot", 'giuxtaposition/blink-cmp-copilot',
dependencies = { dependencies = {
-- Fully featured & enhanced replacement for copilot.vim complete -- Fully featured & enhanced replacement for copilot.vim complete
-- with API for interacting with Github Copilot -- with API for interacting with Github Copilot
@@ -76,13 +75,13 @@ return {
menu = { menu = {
draw = { draw = {
columns = { columns = {
{ "label", "label_description", gap = 1 }, { 'label', 'label_description', gap = 1 },
{ "kind_icon", "kind", gap = 1 } { 'kind_icon', 'kind', gap = 1 },
}, },
}, },
}, },
documentation = { documentation = {
auto_show = true auto_show = true,
}, },
ghost_text = { ghost_text = {
enabled = false, enabled = false,
@@ -95,7 +94,7 @@ return {
providers = { providers = {
copilot = { copilot = {
name = 'copilot', name = 'copilot',
module = 'blink-cmp-copilot' module = 'blink-cmp-copilot',
}, },
}, },
completion = { completion = {
@@ -113,10 +112,10 @@ return {
-- completion = { accept = { auto_brackets = { enabled = true } } } -- completion = { accept = { auto_brackets = { enabled = true } } }
-- experimental signature help support -- experimental signature help support
signature = { enabled = true } signature = { enabled = true },
}, },
-- allows extending the enabled_providers array elsewhere in your config -- allows extending the enabled_providers array elsewhere in your config
-- without having to redefine it -- without having to redefine it
opts_extend = { "sources.completion.enabled_providers" }, opts_extend = { 'sources.completion.enabled_providers' },
}, },
} }

View File

@@ -2,7 +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
{ {
"folke/snacks.nvim", 'folke/snacks.nvim',
priority = 1000, priority = 1000,
lazy = false, lazy = false,
---@type snacks.Config ---@type snacks.Config
@@ -17,24 +17,24 @@ return {
quickfile = { enabled = true }, quickfile = { enabled = true },
statuscolumn = { statuscolumn = {
enabled = true, enabled = true,
left = { "mark", "sign" }, -- priority of signs on the left (high to low) left = { 'mark', 'sign' }, -- priority of signs on the left (high to low)
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 = false, -- use Git Signs hl for fold icons
}, },
git = { git = {
-- patterns to match Git signs -- patterns to match Git signs
patterns = { "GitSign", "MiniDiffSign" }, patterns = { 'GitSign', 'MiniDiffSign' },
}, },
refresh = 50, -- refresh at most every 50ms refresh = 50, -- refresh at most every 50ms
}, },
words = { enabled = true }, words = { enabled = true },
styles = { styles = {
notification = { notification = {
wo = { wrap = true } -- Wrap notifications wo = { wrap = true }, -- Wrap notifications
} },
} },
}, },
}, },
-- A pretty diagnostics, references, telescope results, -- A pretty diagnostics, references, telescope results,

View File

@@ -1,4 +1,129 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ LSP Setup and configuration │
-- ╰─────────────────────────────────────────────────────────╯
-- LSP Servers are installed and configured by lsp-setup.nvim
-- Mason formatters Conform uses to format files
-- These are automatically configured by zapling/mason-conform.nvim
local lsp_servers = {
bashls = {},
-- csharp_ls = {},
diagnosticls = {},
gopls = {
settings = {
gopls = {
hints = {
rangeVariableTypes = true,
parameterNames = true,
constantValues = true,
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
functionTypeParameters = true,
},
},
},
},
html = {},
intelephense = {},
jsonls = {},
lua_ls = {
settings = {
Lua = {
completion = {
callSnippet = 'Replace',
},
diagnostics = {
globals = {
'vim',
-- busted
'describe',
'it',
'before_each',
'after_each',
'assert',
},
disable = {
-- Ignore lua_ls noisy `missing-fields` warnings
'missing-fields',
},
},
hint = {
enable = false,
arrayIndex = 'Auto',
await = true,
paramName = 'All',
paramType = true,
semicolon = 'SameLine',
setType = false,
},
},
},
},
tailwindcss = {},
ts_ls = {
settings = {
typescript = {
inlayHints = {
includeInlayParameterNameHints = 'all',
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
includeInlayFunctionParameterTypeHints = true,
includeInlayVariableTypeHints = true,
includeInlayVariableTypeHintsWhenTypeMatchesName = false,
includeInlayPropertyDeclarationTypeHints = true,
includeInlayFunctionLikeReturnTypeHints = true,
includeInlayEnumMemberValueHints = true,
},
},
},
},
vimls = {},
volar = {
settings = {
typescript = {
inlayHints = {
enumMemberValues = {
enabled = true,
},
functionLikeReturnTypes = {
enabled = true,
},
propertyDeclarationTypes = {
enabled = true,
},
parameterTypes = {
enabled = true,
suppressWhenArgumentMatchesName = true,
},
variableTypes = {
enabled = true,
},
},
},
},
},
}
return { return {
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
-- https://github.com/folke/lazydev.nvim
{
'folke/lazydev.nvim',
ft = 'lua',
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
},
},
},
-- Meta type definitions for the Lua platform Luvit.
-- https://github.com/Bilal2453/luvit-meta
{ 'Bilal2453/luvit-meta', lazy = true },
-- improve neovim lsp experience -- improve neovim lsp experience
-- https://github.com/nvimdev/lspsaga.nvim -- https://github.com/nvimdev/lspsaga.nvim
-- https://nvimdev.github.io/lspsaga/ -- https://nvimdev.github.io/lspsaga/
@@ -24,21 +149,72 @@ return {
}, },
}, },
}, },
-- A simple wrapper for nvim-lspconfig and mason-lspconfig -- A simple wrapper for nvim-lspconfig and mason-lspconfig
-- to easily setup LSP servers. -- to easily setup LSP servers.
-- https://github.com/junnplus/lsp-setup.nvim -- https://github.com/junnplus/lsp-setup.nvim
{ {
'junnplus/lsp-setup.nvim', 'junnplus/lsp-setup.nvim',
dependencies = { dependencies = {
-- Quickstart configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
{ 'neovim/nvim-lspconfig' }, { 'neovim/nvim-lspconfig' },
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
-- https://github.com/williamboman/mason.nvim
{ {
'williamboman/mason.nvim', 'williamboman/mason.nvim',
version = '*',
cmd = 'Mason', cmd = 'Mason',
run = ':MasonUpdate' 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' }, { 'williamboman/mason-lspconfig.nvim' },
{ 'folke/neodev.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 = {
'editorconfig-checker',
'goimports',
'gotests',
'phpcbf',
'pint',
'prettierd',
'shellcheck',
'shfmt',
'staticcheck',
'stylua',
'vint',
'yamlfmt',
},
},
},
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' }, { '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' }, { 'saghen/blink.cmp' },
}, },
opts = { opts = {
@@ -51,126 +227,45 @@ return {
inlay_hints = { inlay_hints = {
enabled = true, enabled = true,
}, },
servers = { servers = lsp_servers,
bashls = {},
-- csharp_ls = {},
diagnosticls = {},
gopls = {
settings = {
gopls = {
hints = {
rangeVariableTypes = true,
parameterNames = true,
constantValues = true,
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
functionTypeParameters = true,
},
},
},
},
html = {},
intelephense = {},
jsonls = {},
lua_ls = {
settings = {
Lua = {
diagnostics = {
globals = { 'vim' },
disable = {
-- Ignore lua_ls noisy `missing-fields` warnings
'missing-fields',
},
},
hint = {
enable = false,
arrayIndex = 'Auto',
await = true,
paramName = 'All',
paramType = true,
semicolon = 'SameLine',
setType = false,
},
},
},
},
tailwindcss = {},
ts_ls = {
settings = {
typescript = {
inlayHints = {
includeInlayParameterNameHints = 'all',
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
includeInlayFunctionParameterTypeHints = true,
includeInlayVariableTypeHints = true,
includeInlayVariableTypeHintsWhenTypeMatchesName = false,
includeInlayPropertyDeclarationTypeHints = true,
includeInlayFunctionLikeReturnTypeHints = true,
includeInlayEnumMemberValueHints = true,
},
},
},
},
vimls = {},
volar = {
settings = {
typescript = {
inlayHints = {
enumMemberValues = {
enabled = true,
},
functionLikeReturnTypes = {
enabled = true,
},
propertyDeclarationTypes = {
enabled = true,
},
parameterTypes = {
enabled = true,
suppressWhenArgumentMatchesName = true,
},
variableTypes = {
enabled = true,
},
},
},
},
},
},
}, },
config = function(_, opts) config = function(_, opts)
require('neodev').setup() require('lazydev').setup()
require('lsp-setup').setup(opts) require('lsp-setup').setup(opts)
local lspconfig = require('lspconfig') local lspconfig = require 'lspconfig'
for server, config in pairs(opts.servers) do for server, config in pairs(opts.servers) do
-- passing config.capabilities to blink.cmp merges with the capabilities in your -- passing config.capabilities to blink.cmp merges with the capabilities in your
-- `opts[server].capabilities, if you've defined it -- `opts[server].capabilities, if you've defined it
config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities) config.capabilities =
require('blink.cmp').get_lsp_capabilities(config.capabilities)
lspconfig[server].setup(config) lspconfig[server].setup(config)
end end
lspconfig.lua_ls.on_init = function(client) lspconfig.lua_ls.on_init = function(client)
if client.workspace_folders then if client.workspace_folders then
local path = client.workspace_folders[1].name local path = client.workspace_folders[1].name
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then if
vim.loop.fs_stat(path .. '/.luarc.json')
or vim.loop.fs_stat(path .. '/.luarc.jsonc')
then
return return
end end
end end
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { client.config.settings.Lua =
runtime = { vim.tbl_deep_extend('force', client.config.settings.Lua, {
-- Tell the language server which version of Lua you're using runtime = {
-- (most likely LuaJIT in the case of Neovim) -- Tell the language server which version of Lua you're using
version = 'LuaJIT' -- (most likely LuaJIT in the case of Neovim)
}, version = 'LuaJIT',
-- Make the server aware of Neovim runtime files },
workspace = { -- Make the server aware of Neovim runtime files
checkThirdParty = false, workspace = {
library = { checkThirdParty = false,
vim.env.VIMRUNTIME library = {
} vim.env.VIMRUNTIME,
} },
}) },
})
end end
lspconfig.jsonls.settings = { lspconfig.jsonls.settings = {
json = { json = {
@@ -191,4 +286,53 @@ return {
} }
end, end,
}, },
-- Lightweight yet powerful formatter plugin for Neovim
-- https://github.com/stevearc/conform.nvim
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>cf',
function()
require('conform').format { async = true, lsp_format = 'fallback' }
end,
mode = '',
desc = 'Format buffer',
},
},
opts = {
notify_on_error = false,
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
local lsp_format_opt
if disable_filetypes[vim.bo[bufnr].filetype] then
lsp_format_opt = 'never'
else
lsp_format_opt = 'fallback'
end
return {
timeout_ms = 500,
lsp_format = lsp_format_opt,
}
end,
formatters_by_ft = {
lua = { 'stylua' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
},
},
-- Automatically install formatters registered with conform.nvim via mason.nvim
-- https://github.com/zapling/mason-conform.nvim
{ 'zapling/mason-conform.nvim', opts = {} },
} }

View File

@@ -2,14 +2,14 @@
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules -- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
return { return {
-- Presets for common options and mappings -- Presets for common options and mappings
{ 'echasnovski/mini.basics', version = '*' }, { 'echasnovski/mini.basics', version = '*' },
-- Extend and create a/i textobjects -- Extend and create a/i textobjects
{ 'echasnovski/mini.ai', version = '*' }, { 'echasnovski/mini.ai', version = '*' },
-- Animate common Neovim actions -- Animate common Neovim actions
-- Replaced anuvyklack/windows.nvim -- Replaced anuvyklack/windows.nvim
{ 'echasnovski/mini.animate', version = '*', opts = {} }, { 'echasnovski/mini.animate', version = '*', opts = {} },
-- Buffer removing (unshow, delete, wipeout), which saves window layout -- Buffer removing (unshow, delete, wipeout), which saves window layout
-- Replaced famiu/bufdelete.nvim -- Replaced famiu/bufdelete.nvim
@@ -69,19 +69,19 @@ return {
miniclue.gen_clues.registers(), miniclue.gen_clues.registers(),
miniclue.gen_clues.windows(), miniclue.gen_clues.windows(),
miniclue.gen_clues.z(), miniclue.gen_clues.z(),
{ mode = 'n', keys = '<Leader>b', desc = '+Buffers' }, { mode = 'n', keys = '<Leader>b', desc = '+Buffers' },
{ mode = 'n', keys = '<Leader>c', desc = '+Code' }, { mode = 'n', keys = '<Leader>c', desc = '+Code' },
{ mode = 'n', keys = '<Leader>cb', desc = '+CommentBox' }, { mode = 'n', keys = '<Leader>cb', desc = '+CommentBox' },
{ mode = 'n', keys = '<Leader>cc', desc = '+Calls' }, { mode = 'n', keys = '<Leader>cc', desc = '+Calls' },
{ mode = 'n', keys = '<Leader>q', desc = '+Quit' }, { mode = 'n', keys = '<Leader>q', desc = '+Quit' },
{ mode = 'n', keys = '<Leader>s', desc = '+Telescope' }, { mode = 'n', keys = '<Leader>s', desc = '+Telescope' },
{ mode = 'n', keys = '<Leader>t', desc = '+Toggle' }, { mode = 'n', keys = '<Leader>t', desc = '+Toggle' },
{ mode = 'n', keys = '<Leader>x', desc = '+Trouble' }, { mode = 'n', keys = '<Leader>x', desc = '+Trouble' },
{ mode = 'n', keys = '<leader>z', desc = '+TreeSitter' }, { mode = 'n', keys = '<leader>z', desc = '+TreeSitter' },
{ mode = 'n', keys = '<leader>zg', desc = '+Goto' }, { mode = 'n', keys = '<leader>zg', desc = '+Goto' },
{ mode = 'n', keys = '<Leader>?', desc = '+Help' }, { mode = 'n', keys = '<Leader>?', desc = '+Help' },
{ mode = 'n', keys = 'd', desc = '+Diagnostics' }, { mode = 'n', keys = 'd', desc = '+Diagnostics' },
{ mode = 'n', keys = 'y', desc = '+Yank' }, { mode = 'n', keys = 'y', desc = '+Yank' },
}, },
} }
end, end,
@@ -89,17 +89,22 @@ return {
-- Comment lines -- Comment lines
-- Replaced numToStr/Comment.nvim -- Replaced numToStr/Comment.nvim
{ 'echasnovski/mini.comment', version = '*', opts = {} }, { 'echasnovski/mini.comment', version = '*', opts = {} },
-- Highlight cursor word and its matches -- Highlight cursor word and its matches
{ 'echasnovski/mini.cursorword', version = '*' }, { 'echasnovski/mini.cursorword', version = '*' },
-- Work with diff hunks -- Work with diff hunks
-- Replaced lewis6991/gitsigns.nvim -- Replaced lewis6991/gitsigns.nvim
{ 'echasnovski/mini.diff', version = '*', opts = {} }, { 'echasnovski/mini.diff', version = '*', opts = {} },
-- Git integration -- Git integration
{ 'echasnovski/mini-git', version = '*', opts = {}, main = 'mini.git' }, {
'echasnovski/mini-git',
version = '*',
opts = {},
main = 'mini.git',
},
-- Highlight patterns in text -- Highlight patterns in text
-- Replaced folke/todo-comments.nvim -- Replaced folke/todo-comments.nvim
@@ -180,10 +185,10 @@ return {
}, },
-- Move lines and blocks of text -- Move lines and blocks of text
{ 'echasnovski/mini.move', version = '*', opts = {} }, { 'echasnovski/mini.move', version = '*', opts = {} },
-- Text edit operators -- Text edit operators
{ 'echasnovski/mini.operators', version = '*', opts = {} }, { 'echasnovski/mini.operators', version = '*', opts = {} },
-- Session management (read, write, delete) -- Session management (read, write, delete)
{ {
@@ -192,12 +197,12 @@ return {
opts = { opts = {
autoread = true, autoread = true,
autowrite = true, autowrite = true,
} },
}, },
-- Split and join arguments, lists, and other sequences -- Split and join arguments, lists, and other sequences
-- Replaced Wansmer/treesj -- Replaced Wansmer/treesj
{ 'echasnovski/mini.splitjoin', version = '*', opts = {} }, { 'echasnovski/mini.splitjoin', version = '*', opts = {} },
-- Fast and flexible start screen -- Fast and flexible start screen
-- Replaced glepnir/dashboard-nvim -- Replaced glepnir/dashboard-nvim
@@ -205,8 +210,8 @@ return {
'echasnovski/mini.starter', 'echasnovski/mini.starter',
version = '*', version = '*',
config = function() config = function()
local starter = require('mini.starter') local starter = require 'mini.starter'
starter.setup({ starter.setup {
items = { items = {
starter.sections.telescope(), starter.sections.telescope(),
starter.sections.builtin_actions(), starter.sections.builtin_actions(),
@@ -217,8 +222,8 @@ return {
starter.gen_hook.indexing('all', { 'Builtin actions' }), starter.gen_hook.indexing('all', { 'Builtin actions' }),
starter.gen_hook.aligning('center', 'center'), starter.gen_hook.aligning('center', 'center'),
}, },
}) }
end end,
}, },
-- Minimal and fast statusline module with opinionated default look -- Minimal and fast statusline module with opinionated default look
@@ -231,29 +236,34 @@ return {
set_vim_settings = true, set_vim_settings = true,
content = { content = {
active = function() active = function()
local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 }) local mode, mode_hl =
local git = MiniStatusline.section_git({ trunc_width = 75 }) MiniStatusline.section_mode { trunc_width = 120 }
local diagnostics = MiniStatusline.section_diagnostics({ trunc_width = 75 }) local git = MiniStatusline.section_git { trunc_width = 75 }
local filename = MiniStatusline.section_filename({ trunc_width = 50 }) local diagnostics =
MiniStatusline.section_diagnostics { trunc_width = 75 }
local filename = MiniStatusline.section_filename { trunc_width = 50 }
-- local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 }) -- local fileinfo = MiniStatusline.section_fileinfo({ trunc_width = 120 })
local location = MiniStatusline.section_location({ trunc_width = 75 }) local location = MiniStatusline.section_location { trunc_width = 75 }
return MiniStatusline.combine_groups({ return MiniStatusline.combine_groups {
{ hl = mode_hl, strings = { mode } }, { hl = mode_hl, strings = { mode } },
{ hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } }, { hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } },
'%<', -- Mark general truncate point '%<', -- Mark general truncate point
{ hl = 'MiniStatuslineFilename', strings = { filename } }, { hl = 'MiniStatuslineFilename', strings = { filename } },
'%=', -- End left alignment '%=', -- End left alignment
-- { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } }, -- { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } },
{ hl = mode_hl, strings = { location } }, { hl = mode_hl, strings = { location } },
}) }
end, end,
}, },
} },
}, },
-- Fast and feature-rich surround actions -- Fast and feature-rich surround actions
-- Replaced kylechui/nvim-surround -- Replaced kylechui/nvim-surround
{ 'echasnovski/mini.surround', version = '*', opts = {} }, -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
{ 'echasnovski/mini.surround', version = '*', opts = {} },
-- Work with trailing whitespace -- Work with trailing whitespace
{ 'echasnovski/mini.trailspace', version = '*', opts = {} }, { 'echasnovski/mini.trailspace', version = '*', opts = {} },

View File

@@ -31,6 +31,24 @@ return {
cmd = 'Neotree', cmd = 'Neotree',
opts = { opts = {
close_if_last_window = true, close_if_last_window = true,
popup_border_style = 'rounded',
enable_git_status = true,
enable_diagnostics = true,
git_status = {
symbols = {
-- Change type
added = '',
modified = '',
deleted = '',
renamed = '󰁕',
-- Status type
untracked = '',
ignored = '',
unstaged = '󰄱',
staged = '',
conflict = '',
},
},
filesystem = { filesystem = {
window = { window = {
mappings = { mappings = {
@@ -42,8 +60,10 @@ return {
hide_dotfiles = true, hide_dotfiles = true,
hide_gitignored = true, hide_gitignored = true,
hide_hidden = true, -- only works on Windows for hidden files/directories hide_hidden = true, -- only works on Windows for hidden files/directories
hide_by_name = { never_show = {
'.DS_Store', '.DS_Store',
},
hide_by_name = {
'node_modules', 'node_modules',
}, },
always_show = { always_show = {
@@ -85,6 +105,7 @@ return {
'.*rc.*', '.*rc.*',
'.env*', '.env*',
'.prettierrc*', '.prettierrc*',
'.markdownlint*',
'.stylua.*', '.stylua.*',
}, },
}, },

View File

@@ -0,0 +1,7 @@
return {
{
'nvim-lua/plenary.nvim',
version = '*',
lazy = false,
},
}

View File

@@ -14,7 +14,7 @@ return {
}, },
---@type TSConfig ---@type TSConfig
opts = { opts = {
auto_install = true, -- Auto install the parser generators auto_install = true, -- Auto install the parser generators
sync_install = false, -- Sync install the parser generators, install async sync_install = false, -- Sync install the parser generators, install async
-- Add languages to be installed here that you want installed for treesitter -- Add languages to be installed here that you want installed for treesitter
@@ -49,18 +49,18 @@ return {
config = function(_, opts) config = function(_, opts)
require('nvim-treesitter.configs').setup(opts) require('nvim-treesitter.configs').setup(opts)
vim.api.nvim_create_autocmd({ "FileType" }, { vim.api.nvim_create_autocmd({ 'FileType' }, {
callback = function() callback = function()
-- Set foldmethod to treesitter if available -- Set foldmethod to treesitter if available
if require("nvim-treesitter.parsers").has_parser() then if require('nvim-treesitter.parsers').has_parser() then
vim.opt.foldmethod = "expr" vim.opt.foldmethod = 'expr'
vim.opt.foldexpr = "nvim_treesitter#foldexpr()" vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
else else
-- Otherwise, set foldmethod to syntax -- Otherwise, set foldmethod to syntax
vim.opt.foldmethod = "syntax" vim.opt.foldmethod = 'syntax'
end end
vim.opt.foldlevel = 9 -- Open all folds by default vim.opt.foldlevel = 9 -- Open all folds by default
vim.opt.foldnestmax = 99 -- Maximum fold nesting vim.opt.foldnestmax = 99 -- Maximum fold nesting
end, end,
}) })

View File

@@ -33,7 +33,7 @@ return {
-- Remove all background colors to make nvim transparent -- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent -- https://github.com/xiyaowong/nvim-transparent
{ 'xiyaowong/nvim-transparent', opts = {} }, { 'xiyaowong/nvim-transparent', opts = {} },
-- 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
@@ -91,7 +91,7 @@ return {
{ {
'LudoPinelli/comment-box.nvim', 'LudoPinelli/comment-box.nvim',
event = 'BufEnter', event = 'BufEnter',
opts = {} opts = {},
}, },
-- Plugin to improve viewing Markdown files in Neovim -- Plugin to improve viewing Markdown files in Neovim

View File

@@ -16,11 +16,11 @@ K = {}
---@param desc string|table? Optional description. Can be a string or a table. ---@param desc string|table? Optional description. Can be a string or a table.
---@return table -- The description as a table. ---@return table -- The description as a table.
local function handleDesc(desc) local function handleDesc(desc)
if type(desc) == "string" then if type(desc) == 'string' then
-- Convert string to table with `desc` as a key -- Convert string to table with `desc` as a key
-- If the string is empty, just return as an empty description -- If the string is empty, just return as an empty description
return { desc = desc } return { desc = desc }
elseif type(desc) == "table" then elseif type(desc) == 'table' then
-- If desc doesn't have 'desc' key, combine it with -- If desc doesn't have 'desc' key, combine it with
-- others with empty description -- others with empty description
if not desc.desc then if not desc.desc then
@@ -79,6 +79,4 @@ end
-- ╰─────────────────────────────────────────────────────────╯ -- ╰─────────────────────────────────────────────────────────╯
-- Toggle background between light and dark -- Toggle background between light and dark
function ToggleBackground() function ToggleBackground() vim.o.bg = vim.o.bg == 'light' and 'dark' or 'light' end
vim.o.bg = vim.o.bg == "light" and "dark" or "light"
end

View File

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

View File

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