Compare commits

...

13 Commits

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

View File

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

View File

@@ -61,12 +61,6 @@ cheatpaths:
path: ~/.config/cheat/cheatsheets/community 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,50 +5,39 @@
-- `: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.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 -- Most of the good defaults are provided by `mini.basics`
o.completeopt = 'menuone,noselect' -- Popup menu when typing -- See: lua/plugins/mini.lua
o.cursorline = true -- Show which line your cursor is on o.ignorecase = true -- Ignore case in search patterns
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.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.signcolumn = 'yes:3' -- Keep signcolumn on by default
o.showmode = false -- Don't show mode o.spell = true -- Enable spell checking
o.signcolumn = 'yes:3' -- Keep signcolumn on by default o.spelllang = 'en_us' -- Set the spell checking language
o.smartindent = true -- Insert indents automatically o.splitbelow = true -- split to the bottom
o.spell = true -- Enable spell checking o.splitright = true -- vsplit to the right
o.spelllang = 'en_us' -- Set the spell checking language o.termguicolors = true -- Enable GUI colors
o.splitbelow = true -- split to the bottom o.timeoutlen = 250 -- Decrease mapped sequence wait time
o.splitright = true -- vsplit to the right o.updatetime = 250 -- 250 ms = 2,5 seconds
o.termguicolors = true -- Fixes Notify opacity issues
o.timeoutlen = 250 -- Decrease mapped sequence wait time
o.undofile = true -- Save undo history
o.updatetime = 250 -- 250 ms = 2,5 seconds
o.ignorecase = true -- Ignore case in search patterns
o.smartcase = true -- Override 'ignorecase' if pattern contains upper case chars
-- List options
o.list = true -- Show some invisible characters
o.listchars = { tab = '» ', trail = '·', nbsp = '' } -- Which invisible chars to show
-- Enable the colorcolumn -- Enable the colorcolumn
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' }) vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })

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

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

View File

@@ -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

@@ -1,28 +1,37 @@
-- https://github.com/echasnovski/mini.nvim
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
return { return {
-- Presets for common options and mappings -- Library of 40+ independent Lua modules improving overall Neovim
{ 'echasnovski/mini.basics', version = '*' }, -- (version 0.8 and higher) experience with minimal effort
-- https://github.com/echasnovski/mini.nvim
-- Extend and create a/i textobjects -- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
{ 'echasnovski/mini.ai', version = '*' },
-- Animate common Neovim actions
-- Replaced anuvyklack/windows.nvim
{ 'echasnovski/mini.animate', version = '*', opts = {} },
-- Buffer removing (unshow, delete, wipeout), which saves window layout
-- Replaced famiu/bufdelete.nvim
{ 'echasnovski/mini.bufremove', version = '*', opts = {} },
-- Show next key clues
-- Replaced folke/which-key.nvim
{ {
'echasnovski/mini.clue', 'echasnovski/mini.nvim',
version = '*', version = '*',
priority = 1001,
config = function() config = function()
local miniclue = require 'mini.clue' -- Presets for common options and mappings
-- h: MiniBasics.config
require('mini.basics').setup {
options = {
basics = true,
extra_ui = true,
},
mappings = {
basic = true,
option_toggle_prefix = [[<leader>tm]],
},
}
-- Animate common Neovim actions
-- Replaced anuvyklack/windows.nvim
require('mini.animate').setup()
-- Buffer removing (unshow, delete, wipeout), which saves window layout
-- Replaced famiu/bufdelete.nvim
require('mini.bufremove').setup()
-- Show next key clues
-- Replaced folke/which-key.nvim
local miniclue = require 'mini.clue'
miniclue.setup { miniclue.setup {
window = { window = {
config = { config = {
@@ -69,144 +78,125 @@ 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>tm', desc = '+Mini' },
{ mode = 'n', keys = '<leader>z', desc = '+TreeSitter' }, { mode = 'n', keys = '<Leader>x', desc = '+Trouble' },
{ mode = 'n', keys = '<leader>z', desc = '+TreeSitter' },
{ mode = 'n', keys = '<leader>zg', desc = '+Goto' }, { mode = 'n', keys = '<leader>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,
},
-- Comment lines -- Comment lines
-- Replaced numToStr/Comment.nvim -- Replaced numToStr/Comment.nvim
{ 'echasnovski/mini.comment', version = '*', opts = {} }, require('mini.comment').setup()
-- Highlight cursor word and its matches -- Highlight cursor word and its matches
{ 'echasnovski/mini.cursorword', version = '*' }, require('mini.cursorword').setup()
-- Work with diff hunks -- Work with diff hunks
-- Replaced lewis6991/gitsigns.nvim -- Replaced lewis6991/gitsigns.nvim
{ 'echasnovski/mini.diff', version = '*', opts = {} }, require('mini.diff').setup()
-- Git integration -- Git integration
{ 'echasnovski/mini-git', version = '*', opts = {}, main = 'mini.git' }, require('mini.git').setup()
-- Highlight patterns in text -- Highlight patterns in text
-- Replaced folke/todo-comments.nvim -- Replaced folke/todo-comments.nvim
{
'echasnovski/mini.hipatterns',
version = '*',
opts = {
highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE', 'BUG', 'PERF' words
fixme = {
pattern = '%f[%w]()FIXME:?%s*()%f[%W]',
group = 'MiniHipatternsFixme',
},
hack = {
pattern = '%f[%w]()HACK:?%s*()%f[%W]',
group = 'MiniHipatternsHack',
},
todo = {
pattern = '%f[%w]()NOTE:?%s*()%f[%W]',
group = 'MiniHipatternsTodo',
},
note = {
pattern = '%f[%w]()NOTE()%f[%W]',
group = 'MiniHipatternsNote',
},
bug = {
pattern = '%f[%w]()BUG:?%s*()%f[%W]',
group = 'MiniHipatternsBug',
},
perf = {
pattern = '%f[%w]()PERF:?%s*()%f[%W]',
group = 'MiniHipatternsPerf',
},
},
},
config = function(opts)
local hp = require 'mini.hipatterns' local hp = require 'mini.hipatterns'
hp.setup { hp.setup {
highlighters = opts.highlighters, highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE', 'BUG', 'PERF' words
fixme = {
pattern = '%f[%w]()FIXME:?%s*()%f[%W]',
group = 'MiniHipatternsFixme',
},
hack = {
pattern = '%f[%w]()HACK:?%s*()%f[%W]',
group = 'MiniHipatternsHack',
},
todo = {
pattern = '%f[%w]()TODO:?%s*()%f[%W]',
group = 'MiniHipatternsNote',
},
note = {
pattern = '%f[%w]()NOTE()%f[%W]',
group = 'MiniHipatternsNote',
},
bug = {
pattern = '%f[%w]()BUG:?%s*()%f[%W]',
group = 'MiniHipatternsHack',
},
perf = {
pattern = '%f[%w]()PERF:?%s*()%f[%W]',
group = 'MiniHipatternsNote',
},
},
-- Highlight hex color strings (`#rrggbb`) using that color -- Highlight hex color strings (`#rrggbb`) using that color
hex_color = hp.gen_highlighter.hex_color(), hex_color = hp.gen_highlighter.hex_color(),
} }
end,
},
-- Icons -- Icons
{ require('mini.icons').setup {
'echasnovski/mini.icons', file = {
opts = { ['.keep'] = { glyph = '󰊢', hl = 'MiniIconsGrey' },
file = { ['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' },
['.keep'] = { glyph = '󰊢', hl = 'MiniIconsGrey' }, },
['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' }, filetype = {
}, dotenv = { glyph = '', hl = 'MiniIconsYellow' },
filetype = { },
dotenv = { glyph = '', hl = 'MiniIconsYellow' }, }
},
},
},
-- Visualize and work with indent scope -- Visualize and work with indent scope
-- Replaced lukas-reineke/indent-blankline.nvim -- Replaced lukas-reineke/indent-blankline.nvim
{ 'echasnovski/mini.indentscope', version = '*', opts = {} }, require('mini.indentscope').setup()
-- Jump to next/previous single character -- Jump to next/previous single character
{ require('mini.jump').setup {
'echasnovski/mini.jump', mappings = {
version = '*', forward = 'f',
opts = { backward = 'F',
mappings = { forward_till = 't',
forward = 'f', backward_till = 'T',
backward = 'F', repeat_jump = ';',
forward_till = 't', },
backward_till = 'T', }
repeat_jump = ';',
},
},
},
-- Move lines and blocks of text -- Move lines and blocks of text
{ 'echasnovski/mini.move', version = '*', opts = {} }, require('mini.move').setup()
-- Text edit operators -- Text edit operators
{ 'echasnovski/mini.operators', version = '*', opts = {} }, -- g= - Evaluate text and replace with output
-- gx - Exchange text regions
-- gm - Multiply (duplicate) text
-- gr - Replace text with register
-- gs - Sort text
require('mini.operators').setup()
-- Session management (read, write, delete) -- Session management (read, write, delete)
{ require('mini.sessions').setup {
'echasnovski/mini.sessions', autowrite = true,
version = '*', directory = vim.g.sessions_dir or vim.fn.stdpath 'data' .. '/sessions',
opts = { file = '',
autoread = 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 = {} }, require('mini.splitjoin').setup()
-- Fast and flexible start screen -- Fast and flexible start screen
-- Replaced glepnir/dashboard-nvim -- Replaced glepnir/dashboard-nvim
{ local starter = require 'mini.starter'
'echasnovski/mini.starter', starter.setup {
version = '*',
config = function()
local starter = require('mini.starter')
starter.setup({
items = { items = {
starter.sections.telescope(), starter.sections.telescope(),
starter.sections.builtin_actions(), starter.sections.builtin_actions(),
@@ -217,44 +207,44 @@ 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
-- Minimal and fast statusline module with opinionated default look
-- Replaced nvim-lualine/lualine.nvim
local sl = require 'mini.statusline'
sl.setup {
use_icons = true,
set_vim_settings = true,
content = {
active = function()
local mode, mode_hl = sl.section_mode { trunc_width = 120 }
local git = sl.section_git { trunc_width = 75 }
local diagnostics = sl.section_diagnostics { trunc_width = 75 }
local filename = sl.section_filename { trunc_width = 999 }
-- local fileinfo = statusline.section_fileinfo({ trunc_width = 120 })
local location = sl.section_location { trunc_width = 75 }
return sl.combine_groups {
{ hl = mode_hl, strings = { mode } },
{ hl = 'statuslineDevinfo', strings = { git, diagnostics } },
'%<', -- Mark general truncate point
{ hl = 'statuslineFilename', strings = { filename } },
'%=', -- End left alignment
-- { hl = 'statuslineFileinfo', strings = { fileinfo } },
{ hl = mode_hl, strings = { location } },
}
end,
},
}
-- Fast and feature-rich surround actions
-- Replaced kylechui/nvim-surround
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require('mini.surround').setup()
-- Work with trailing whitespace
require('mini.trailspace').setup()
end,
}, },
-- Minimal and fast statusline module with opinionated default look
-- Replaced nvim-lualine/lualine.nvim
{
'echasnovski/mini.statusline',
version = '*',
opts = {
use_icons = true,
set_vim_settings = true,
content = {
active = function()
local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
local git = MiniStatusline.section_git({ trunc_width = 75 })
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 location = MiniStatusline.section_location({ trunc_width = 75 })
return MiniStatusline.combine_groups({
{ hl = mode_hl, strings = { mode } },
{ hl = 'MiniStatuslineDevinfo', strings = { git, diagnostics } },
'%<', -- Mark general truncate point
{ hl = 'MiniStatuslineFilename', strings = { filename } },
'%=', -- End left alignment
-- { hl = 'MiniStatuslineFileinfo', strings = { fileinfo } },
{ hl = mode_hl, strings = { location } },
})
end,
},
}
},
-- Fast and feature-rich surround actions
-- Replaced kylechui/nvim-surround
{ 'echasnovski/mini.surround', version = '*', opts = {} },
-- Work with trailing whitespace
{ 'echasnovski/mini.trailspace', version = '*', opts = {} },
} }

View File

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

View File

@@ -31,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,77 +33,13 @@ 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
{ 'lukas-reineke/virt-column.nvim', opts = {} }, { 'lukas-reineke/virt-column.nvim', opts = {} },
-- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim
{
'laytan/cloak.nvim',
version = '*',
opts = {
enabled = true,
cloak_character = '*',
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
highlight_group = 'Comment',
patterns = {
{
-- Match any file starting with ".env".
-- This can be a table to match multiple file patterns.
file_pattern = {
'.env*',
'wrangler.toml',
'.dev.vars',
},
-- Match an equals sign and any character after it.
-- This can also be a table of patterns to cloak,
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
cloak_pattern = '=.+',
},
},
},
},
-- Neovim plugin for locking a buffer to a window -- Neovim plugin for locking a buffer to a window
-- https://github.com/stevearc/stickybuf.nvim -- https://github.com/stevearc/stickybuf.nvim
{ 'stevearc/stickybuf.nvim', opts = {} }, { 'stevearc/stickybuf.nvim', opts = {} },
-- Describe the regexp under the cursor
-- https://github.com/bennypowers/nvim-regexplainer
{
'bennypowers/nvim-regexplainer',
event = 'BufEnter',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'MunifTanjim/nui.nvim',
},
opts = {
-- automatically show the explainer when the cursor enters a regexp
auto = true,
},
},
-- Clarify and beautify your comments using boxes and lines.
-- https://github.com/LudoPinelli/comment-box.nvim
{
'LudoPinelli/comment-box.nvim',
event = 'BufEnter',
opts = {}
},
-- Plugin to improve viewing Markdown files in Neovim
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
{
'MeanderingProgrammer/render-markdown.nvim',
event = 'BufEnter',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
ft = 'markdown',
opts = {},
},
} }

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

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

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