mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-29 04:45:59 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b314c0ba76 | |||
| ece46561c4 | |||
| 196d217c34 |
@@ -11,6 +11,9 @@ trim_trailing_whitespace = true
|
||||
[*.md]
|
||||
max_line_length = 100
|
||||
|
||||
[*.lua]
|
||||
max_line_length = 120
|
||||
|
||||
[*.php]
|
||||
indent_size = 4
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@ repos:
|
||||
hooks:
|
||||
- id: yamllint
|
||||
|
||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||
rev: v0.10.0.1
|
||||
- repo: https://github.com/koalaman/shellcheck-precommit
|
||||
rev: v0.10.0
|
||||
hooks:
|
||||
- id: shellcheck
|
||||
|
||||
|
||||
@@ -52,3 +52,7 @@ x-have antidot && eval "$(antidot init)"
|
||||
autoload -Uz compinit bashcompinit
|
||||
compinit -d $ZSH_COMPDUMP
|
||||
bashcompinit
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
||||
export P10K_CONFIG="$DOTFILES/config/zsh/p10k.zsh"
|
||||
[[ ! -f "$P10K_CONFIG" ]] || source "$P10K_CONFIG"
|
||||
|
||||
@@ -18,7 +18,7 @@ if not vim.loop.fs_stat(lazypath) then
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ 'Failed to clone lazy.nvim:\n', 'ErrorMsg' },
|
||||
{ out, 'WarningMsg' },
|
||||
{ out, 'WarningMsg' },
|
||||
{ '\nPress any key to exit...' },
|
||||
}, true, {})
|
||||
vim.fn.getchar()
|
||||
@@ -38,7 +38,7 @@ require 'autogroups'
|
||||
|
||||
-- ── Load plugins ────────────────────────────────────────────────────
|
||||
require('lazy').setup(
|
||||
-- Automatically load plugins from lua/plugins
|
||||
-- Automatically load plugins from lua/plugins
|
||||
'plugins',
|
||||
-- Lazy Configuration
|
||||
{
|
||||
@@ -58,6 +58,8 @@ require('lazy').setup(
|
||||
}
|
||||
)
|
||||
|
||||
require('nvm-default').setup()
|
||||
|
||||
require 'keymaps'
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -83,6 +83,8 @@ autocmd({ 'FileType' }, {
|
||||
})
|
||||
|
||||
-- Set filetype for SSH config directory
|
||||
-- Pattern handles directories with files like:
|
||||
-- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work
|
||||
autocmd({ 'BufRead', 'BufNewFile' }, {
|
||||
desc = 'Set filetype for SSH config directory',
|
||||
pattern = { '*/?.ssh/{config|shared}.d/*', '*/?.ssh/config.local', '*/?.ssh/config.work' },
|
||||
|
||||
@@ -1,142 +1,91 @@
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Function shortcuts for keymap set │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=80 :
|
||||
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 :
|
||||
|
||||
-- Keymap set shortcut
|
||||
--@type vim.keymap.set
|
||||
local s = vim.keymap.set
|
||||
|
||||
-- Handle description
|
||||
---@param desc string|table? Optional description. Can be a string or a table.
|
||||
---@return table -- The description as a table.
|
||||
local function handleDesc(desc)
|
||||
if type(desc) == "string" then
|
||||
-- Convert string to table with `desc` as a key
|
||||
-- If the string is empty, just return as an empty description
|
||||
return { desc = desc }
|
||||
elseif type(desc) == "table" then
|
||||
-- If desc doesn't have 'desc' key, combine it with
|
||||
-- others with empty description
|
||||
if not desc.desc then
|
||||
desc.desc = ''
|
||||
return desc
|
||||
end
|
||||
-- Use the table as is
|
||||
return desc
|
||||
else
|
||||
-- Default to an empty table if `desc` is nil or an unsupported type
|
||||
return { desc = '' }
|
||||
end
|
||||
end
|
||||
|
||||
-- Normal mode keymaps
|
||||
---@param key string rhs, required
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table? Options, optional
|
||||
local n = function(key, cmd, opts) s('n', key, cmd, opts) end
|
||||
|
||||
-- Leader keymap shortcut function
|
||||
-- It prepends '<leader>' to the key
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table|string? Options (or just description), optional
|
||||
local nl = function(key, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
n('<leader>' .. key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Local leader keymap shortcut function
|
||||
-- It prepends '<leader>' to the key and uses desc from opts
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table|string description, required
|
||||
local nld = function(key, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
nl(key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Keymap shortcut function with mode defined, good for sorting by rhs
|
||||
---@param key string rhs, required
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description, required
|
||||
local d = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
s(mode, key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Leader based keymap shortcut function with mode defined
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description (or opts), required
|
||||
local ld = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
s(mode, '<leader>' .. key, cmd, opts)
|
||||
end
|
||||
require('utils')
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Keymaps │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Disable arrow keys in normal mode
|
||||
n('<left>', ':echo "Use h to move!!"<CR>')
|
||||
n('<right>', ':echo "Use l to move!!"<CR>')
|
||||
n('<up>', ':echo "Use k to move!!"<CR>')
|
||||
n('<down>', ':echo "Use j to move!!"<CR>')
|
||||
-- ── Disable arrow keys in normal mode ───────────────────────────────
|
||||
K.n('<left>', ':echo "Use h to move!!"<CR>')
|
||||
K.n('<right>', ':echo "Use l to move!!"<CR>')
|
||||
K.n('<up>', ':echo "Use k to move!!"<CR>')
|
||||
K.n('<down>', ':echo "Use j to move!!"<CR>')
|
||||
|
||||
n('<C-s>', ':w!<cr>', { desc = 'Save', noremap = true })
|
||||
n('<esc><esc>', ':nohlsearch<cr>', { desc = 'Clear Search Highlighting' })
|
||||
-- ── Splits ──────────────────────────────────────────────────────────
|
||||
K.n('<C-w>,', ':vertical resize -10<CR>', { desc = 'V Resize -' })
|
||||
K.n('<C-w>.', ':vertical resize +10<CR>', { desc = 'V Resize +' })
|
||||
K.n('<C-w>-', ':resize -10<CR>', { desc = 'H Resize -' })
|
||||
K.n('<C-w>+', ':resize +10<CR>', { desc = 'H Resize +' })
|
||||
K.n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
|
||||
|
||||
-- Buffer operations
|
||||
-- ── Deal with word wrap ─────────────────────────────────────────────
|
||||
K.n('k', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true })
|
||||
K.n('j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true })
|
||||
|
||||
-- ── Text manipulation ───────────────────────────────────────────────
|
||||
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
|
||||
K.d('>', { 'n', 'v' }, '>gv', 'Indent Right')
|
||||
K.d('<C-k>', { 'n', 'v' }, ":m '<-2<CR>gv=gv", 'Move Block Up')
|
||||
K.d('<C-j>', { 'n', 'v' }, ":m '>+1<CR>gv=gv", 'Move Block Down')
|
||||
|
||||
-- ── Other operations ────────────────────────────────────────────────
|
||||
K.nl('o', function() require('snacks').gitbrowse() end, 'Open repo in browser')
|
||||
K.n('<C-s>', ':w!<cr>', { desc = 'Save', noremap = true })
|
||||
K.n('<esc><esc>', ':nohlsearch<cr>', { desc = 'Clear Search Highlighting' })
|
||||
|
||||
-- ── Buffer operations ───────────────────────────────────────────────
|
||||
-- Mappings for buffer management operations like switching, deleting, etc.
|
||||
-- Convention: All mappings start with 'b' followed by the operation
|
||||
nld('ba', ':%bd|e#|bd#<cr>', 'Close all except current')
|
||||
nld('bd', ':lua MiniBufremove.delete()<CR>', 'Delete')
|
||||
nld('bh', ':bprev<cr>', 'Prev')
|
||||
nld('bj', ':bfirst<cr>', 'First')
|
||||
nld('bk', ':blast<cr>', 'Last')
|
||||
nld('bl', ':bnext<cr>', 'Next')
|
||||
nld('bw', ':lua MiniBufremove.wipeout()<CR>', 'Wipeout')
|
||||
K.nl('ba', ':%bd|e#|bd#<cr>', 'Close all except current')
|
||||
K.nl('bd', ':lua MiniBufremove.delete()<CR>', 'Delete')
|
||||
K.nl('bh', ':bprev<cr>', 'Prev')
|
||||
K.nl('bj', ':bfirst<cr>', 'First')
|
||||
K.nl('bk', ':blast<cr>', 'Last')
|
||||
K.nl('bl', ':bnext<cr>', 'Next')
|
||||
K.nl('bw', ':lua MiniBufremove.wipeout()<CR>', 'Wipeout')
|
||||
|
||||
-- Code
|
||||
nld('cg', ':lua require("neogen").generate()<CR>', 'Generate annotations')
|
||||
-- ── Code & LSP operations ───────────────────────────────────────────
|
||||
-- Mappings for code and LSP operations like code actions, formatting, etc.
|
||||
-- Convention: All mappings start with 'c' followed by the operation
|
||||
-- unless it's a generic operation like signature help or hover
|
||||
K.n('<C-l>', ':lua vim.lsp.buf.signature_help()<CR>', { desc = 'Signature' })
|
||||
K.n('K', ':Lspsaga hover_doc<cr>', { desc = 'Hover Documentation' })
|
||||
K.ld('ca', 'n', ':Lspsaga code_action<cr>', 'Code Action')
|
||||
K.ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls')
|
||||
K.ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls')
|
||||
K.ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics')
|
||||
K.ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format')
|
||||
K.ld('cg', 'n', ':lua require("neogen").generate()<CR>', 'Generate annotations')
|
||||
K.ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations')
|
||||
K.ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics')
|
||||
K.ld('cp', 'n', ':Lspsaga peek_definition<cr>', 'Peek Definition')
|
||||
K.ld('cr', 'n', ':Lspsaga rename<cr>', 'Rename')
|
||||
K.ld('cR', 'n', ':Lspsaga rename ++project<cr>', 'Rename Project wide')
|
||||
K.ld('cs', 'n', ':Telescope lsp_document_symbols<CR>', 'LSP Document Symbols')
|
||||
K.ld('ct', 'n', ':Lspsaga peek_type_definition<cr>', 'Peek Type Definition')
|
||||
K.ld('cT', 'n', ':Telescope lsp_type_definitions<CR>', 'LSP Type Definitions')
|
||||
K.ld('cu', 'n', ':Lspsaga preview_definition<cr>', 'Preview Definition')
|
||||
K.ld('cv', 'n', ':Lspsaga diagnostic_jump_prev<cr>', 'Diagnostic Jump Prev')
|
||||
K.ld('cw', 'n', ':Lspsaga diagnostic_jump_next<cr>', 'Diagnostic Jump Next')
|
||||
|
||||
-- LSP
|
||||
n('<C-l>', ':lua vim.lsp.buf.signature_help()<CR>', { desc = 'Signature' })
|
||||
n('K', ':Lspsaga hover_doc<cr>', { desc = 'Hover Documentation' })
|
||||
ld('ca', 'n', ':Lspsaga code_action<cr>', 'Code Action')
|
||||
ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls')
|
||||
ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls')
|
||||
ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics')
|
||||
ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format')
|
||||
ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations')
|
||||
ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics')
|
||||
ld('cp', 'n', ':Lspsaga peek_definition<cr>', 'Peek Definition')
|
||||
ld('cr', 'n', ':Lspsaga rename<cr>', 'Rename')
|
||||
ld('cR', 'n', ':Lspsaga rename ++project<cr>', 'Rename Project wide')
|
||||
ld('cs', 'n', ':Telescope lsp_document_symbols<CR>', 'LSP Document Symbols')
|
||||
ld('ct', 'n', ':Lspsaga peek_type_definition<cr>', 'Peek Type Definition')
|
||||
ld('cT', 'n', ':Telescope lsp_type_definitions<CR>', 'LSP Type Definitions')
|
||||
ld('cu', 'n', ':Lspsaga preview_definition<cr>', 'Preview Definition')
|
||||
ld('cv', 'n', ':Lspsaga diagnostic_jump_prev<cr>', 'Diagnostic Jump Prev')
|
||||
ld('cw', 'n', ':Lspsaga diagnostic_jump_next<cr>', 'Diagnostic Jump Next')
|
||||
|
||||
-- CommentBox operations
|
||||
-- ── CommentBox operations ───────────────────────────────────────────
|
||||
-- Mappings for creating and managing comment boxes
|
||||
-- Convention: All mappings start with 'cb' followed by the box type
|
||||
nld('cbb', '<Cmd>CBccbox<CR>', 'CB: Box Title')
|
||||
nld('cbd', '<Cmd>CBd<CR>', 'CB: Remove a box')
|
||||
nld('cbl', '<Cmd>CBline<CR>', 'CB: Simple Line')
|
||||
nld('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked')
|
||||
nld('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
|
||||
K.nl('cbb', '<Cmd>CBccbox<CR>', 'CB: Box Title')
|
||||
K.nl('cbd', '<Cmd>CBd<CR>', 'CB: Remove a box')
|
||||
K.nl('cbl', '<Cmd>CBline<CR>', 'CB: Simple Line')
|
||||
K.nl('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked')
|
||||
K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
|
||||
|
||||
|
||||
-- Telescope
|
||||
nld('f', ':Telescope find_files<cr>', 'Find Files')
|
||||
nld(',', ':Telescope buffers<cr>', 'Find existing buffers')
|
||||
nld('/', function()
|
||||
-- ── Telescope operations ────────────────────────────────────────────
|
||||
-- Mappings for Telescope operations like finding files, buffers, etc.
|
||||
-- Convention: All mappings start with 's' followed by the operation
|
||||
-- unless it's a generic operation like searching or finding buffers
|
||||
K.nl('f', ':Telescope find_files<cr>', 'Find Files')
|
||||
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
|
||||
K.nl('/', function()
|
||||
require('telescope.builtin').current_buffer_fuzzy_find(
|
||||
require('telescope.themes').get_dropdown {
|
||||
winblend = 20,
|
||||
@@ -145,75 +94,48 @@ nld('/', function()
|
||||
)
|
||||
end, 'Fuzzily search in current buffer')
|
||||
|
||||
nld('sc', ':Telescope commands<cr>', 'Commands')
|
||||
nld('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
|
||||
nld('sg', ':Telescope live_grep<cr>', 'Search by Grep')
|
||||
nld('sh', ':Telescope highlights<cr>', 'List Highlights')
|
||||
nld('sk', ':Telescope keymaps<cr>', 'Search Keymaps')
|
||||
nld('sl', ':Telescope luasnip<CR>', 'Search LuaSnip')
|
||||
nld('so', ':Telescope oldfiles<CR>', 'Old Files')
|
||||
nld('sp',
|
||||
':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>',
|
||||
'Lazy Plugins')
|
||||
nld('sq', ':Telescope quickfix<cr>', 'Quickfix')
|
||||
nld('ss', ':Telescope treesitter<cr>', 'Treesitter')
|
||||
nld('st', ':TodoTelescope<cr>', 'Search Todos')
|
||||
nld('sw', ':Telescope grep_string<cr>', 'Grep String')
|
||||
nld('sx', ':Telescope import<cr>', 'Telescope: Import')
|
||||
K.nl('sc', ':Telescope commands<cr>', 'Commands')
|
||||
K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
|
||||
K.nl('sg', ':Telescope live_grep<cr>', 'Search by Grep')
|
||||
K.nl('sh', ':Telescope help_tags<cr>', 'Help tags')
|
||||
K.nl('sk', ':Telescope keymaps<cr>', 'Search Keymaps')
|
||||
K.nl('sl', ':Telescope luasnip<CR>', 'Search LuaSnip')
|
||||
K.nl('so', ':Telescope oldfiles<CR>', 'Old Files')
|
||||
K.nl('sp', ':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>', 'Lazy Plugins')
|
||||
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
|
||||
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
|
||||
K.nl('st', ':TodoTelescope<cr>', 'Search Todos')
|
||||
K.nl('sw', ':Telescope grep_string<cr>', 'Grep String')
|
||||
K.nl('sx', ':Telescope import<cr>', 'Telescope: Import')
|
||||
|
||||
-- Trouble
|
||||
nld('xd',
|
||||
':Trouble document_diagnostics<cr>', 'Trouble: Document Diagnostics')
|
||||
nld('xl', ':Trouble loclist<cr>', 'Trouble: Location List')
|
||||
nld('xq', ':Trouble quickfix<cr>', 'Trouble: Quickfix')
|
||||
nld('xw',
|
||||
':Trouble workspace_diagnostics<cr>', 'Trouble: Workspace Diagnostics')
|
||||
nld('xx', ':Trouble diagnostics<cr>', 'Trouble: Diagnostic')
|
||||
-- ── Trouble operations ──────────────────────────────────────────────
|
||||
-- Convention is 'x' followed by the operation
|
||||
K.nl('xd', ':Trouble document_diagnostics<cr>', 'Document Diagnostics')
|
||||
K.nl('xl', ':Trouble loclist<cr>', 'Location List')
|
||||
K.nl('xq', ':Trouble quickfix<cr>', 'Quickfix')
|
||||
K.nl('xw', ':Trouble workspace_diagnostics<cr>', 'Workspace Diagnostics')
|
||||
K.nl('xx', ':Trouble diagnostics<cr>', 'Diagnostic')
|
||||
|
||||
-- Text manipulation
|
||||
d('<', { 'n', 'v' }, '<gv', 'Indent Left')
|
||||
d('>', { 'n', 'v' }, '>gv', 'Indent Right')
|
||||
d('<C-k>', { 'n', 'v' }, ":m '<-2<CR>gv=gv", 'Move Block Up')
|
||||
d('<C-j>', { 'n', 'v' }, ":m '>+1<CR>gv=gv", 'Move Block Down')
|
||||
-- ── Toggle settings ─────────────────────────────────────────────────
|
||||
-- Convention is 't' followed by the operation
|
||||
K.nl('tc', ':CloakToggle<cr>', 'Cloak: Toggle')
|
||||
K.nl('te', ':Neotree toggle<cr>', 'Toggle Neotree')
|
||||
K.nl('tl', ToggleBackground, 'Toggle Light/Dark Mode')
|
||||
K.nl('tn', ':Noice dismiss<cr>', 'Noice: Dismiss Notification')
|
||||
|
||||
-- Other functionality
|
||||
nld('o', function() require('snacks').gitbrowse() end, 'Open repo in browser')
|
||||
|
||||
-- Toggle settings
|
||||
local function toggle_background()
|
||||
vim.o.bg = vim.o.bg == "light" and "dark" or "light"
|
||||
end
|
||||
|
||||
nld('tc', ':CloakToggle<cr>', 'Cloak: Toggle')
|
||||
nld('te', ':Neotree toggle<cr>', 'Toggle Neotree')
|
||||
nld('tl', toggle_background, 'Toggle Light/Dark Mode')
|
||||
nld('tn', ':Noice dismiss<cr>', 'Noice: Dismiss Notification')
|
||||
|
||||
-- Splits
|
||||
n('<C-w>,', ':vertical resize -10<CR>', { desc = 'V Resize -' })
|
||||
n('<C-w>.', ':vertical resize +10<CR>', { desc = 'V Resize +' })
|
||||
n('<C-w>-', ':resize -5<CR>', { desc = 'H Resize -' })
|
||||
n('<C-w>+', ':resize +5<CR>', { desc = 'H Resize +' })
|
||||
n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
|
||||
|
||||
-- Deal with word wrap
|
||||
n('k',
|
||||
"v:count == 0 ? 'gk' : 'k'",
|
||||
{ desc = 'Move up', noremap = true, expr = true })
|
||||
n('j',
|
||||
"v:count == 0 ? 'gj' : 'j'",
|
||||
{ desc = 'Move down', noremap = true, expr = true })
|
||||
|
||||
-- Quit
|
||||
nld('qf', ':q<CR>', 'Quicker close split')
|
||||
nld('qq', function()
|
||||
-- ── Quit operations ─────────────────────────────────────────────────
|
||||
-- Convention is 'q' followed by the operation
|
||||
K.nl('qf', ':q<CR>', 'Quicker close split')
|
||||
K.nl('qq', function()
|
||||
if vim.fn.confirm("Force save and quit?", "&Yes\n&No", 2) == 1 then
|
||||
vim.cmd('wq!')
|
||||
end
|
||||
end, 'Quit with force saving')
|
||||
nld('qw', ':wq<CR>', 'Write and quit')
|
||||
nld('qQ', function()
|
||||
K.nl('qw', ':wq<CR>', 'Write and quit')
|
||||
K.nl('qQ', function()
|
||||
if vim.fn.confirm("Force quit without saving?", "&Yes\n&No", 2) == 1 then
|
||||
vim.cmd('q!')
|
||||
end
|
||||
end, 'Force quit without saving')
|
||||
|
||||
-- That concludes the keymaps section of the config.
|
||||
|
||||
111
config/nvim/lua/nvm-default/init.lua
Normal file
111
config/nvim/lua/nvm-default/init.lua
Normal file
@@ -0,0 +1,111 @@
|
||||
-- Get nvm default version and use it in node_host_prog
|
||||
-- and g.copilot_node_command.
|
||||
--
|
||||
-- This module automatically configures Neovim to use the default Node.js version
|
||||
-- from NVM. It requires a working NVM installation and 'default' alias to be set,
|
||||
-- and also neovim npm package to be installed.
|
||||
--
|
||||
-- You can install the neovim package by running:
|
||||
-- npm i --global neovim
|
||||
--
|
||||
-- Usage:
|
||||
-- require('nvm-default').setup({
|
||||
-- add_to_path = true, -- optional: add NVM bin directory to PATH
|
||||
-- nvm_path = "~/.nvm", -- optional: custom NVM installation path
|
||||
-- notify_level = "info" -- optional: notification level
|
||||
-- })
|
||||
|
||||
local M = {}
|
||||
|
||||
M.name = 'nvm-default.nvim'
|
||||
M.version = '0.1.0' -- x-release-please-version
|
||||
|
||||
-- Helper function to run a shell command
|
||||
---@param cmd string Run a shell command
|
||||
---@return string? Return the result of the command
|
||||
local function run_command(cmd)
|
||||
local result = vim.fn.system(cmd)
|
||||
return vim.v.shell_error == 0 and result:gsub("%s+$", "") or nil
|
||||
end
|
||||
|
||||
|
||||
-- Helper function to show a notification
|
||||
---@param msg string Show a message
|
||||
---@param level number|"info"|"warn"|"error"|"trace" Notification level
|
||||
local function n(msg, level)
|
||||
if msg == nil then
|
||||
msg = M.name .. ": No message provided"
|
||||
end
|
||||
if level == nil then
|
||||
level = "trace"
|
||||
end
|
||||
|
||||
vim.notify(M.name .. ": " .. msg, level)
|
||||
end
|
||||
|
||||
---@class NvmDefaultOptions
|
||||
---@field add_to_path boolean Add found NVM bin directory to PATH
|
||||
---@field nvm_path string Where nvm installation is located
|
||||
---@field notify_level number|"info"|"warn"|"error"|"trace" Notification level filter
|
||||
|
||||
-- Default options
|
||||
---@type NvmDefaultOptions
|
||||
M.defaults = {
|
||||
add_to_path = vim.g.nvm_default_add_to_path or true,
|
||||
nvm_path = vim.fn.expand(os.getenv("NVM_DIR") or "~/.nvm"),
|
||||
notify_level = vim.g.nvm_default_notify_level or "info",
|
||||
}
|
||||
|
||||
-- Fetch the NVM default version or fallback to node version
|
||||
---@param opts? NvmDefaultOptions Plugin options
|
||||
function M.setup(opts)
|
||||
local options = vim.tbl_deep_extend("force", M.defaults, opts or {})
|
||||
|
||||
local nvm_path = options.nvm_path
|
||||
local node_version =
|
||||
run_command(string.format(". %s/nvm.sh && nvm version default", nvm_path)) or
|
||||
run_command(string.format(". %s/nvm.sh && nvm version node", nvm_path))
|
||||
|
||||
if node_version and node_version:match("^v") then
|
||||
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
|
||||
local current_nvm_version_path = string.format("%s/versions/node/%s", nvm_path, node_version)
|
||||
local current_nvm_node_bin_path = string.format("%s/bin", current_nvm_version_path)
|
||||
local current_nvm_node_bin = string.format("%s/node", current_nvm_node_bin_path)
|
||||
local neovim_node_host_bin_path = string.format("%s/neovim-node-host", current_nvm_node_bin_path)
|
||||
|
||||
-- Collect missing files and directories errors for error output
|
||||
local missing = {}
|
||||
|
||||
-- If node_dir isn't there, stop and show error
|
||||
if not vim.fn.isdirectory(current_nvm_version_path) then
|
||||
table.insert(missing, "Node.js directory: " .. current_nvm_version_path)
|
||||
end
|
||||
|
||||
-- If node_bin isn't there, stop and show error
|
||||
if not vim.fn.filereadable(current_nvm_node_bin) then
|
||||
table.insert(missing, "Node.js binary: " .. current_nvm_node_bin)
|
||||
end
|
||||
|
||||
if not vim.fn.filereadable(neovim_node_host_bin_path) then
|
||||
table.insert(missing, "Neovim host binary: " .. neovim_node_host_bin_path)
|
||||
end
|
||||
|
||||
if #missing > 0 then
|
||||
n("Missing required files:\n- " .. table.concat(missing, "\n- "), "error")
|
||||
return
|
||||
end
|
||||
|
||||
-- Add to PATH if requested. Can be turned off by setting if it messes with
|
||||
-- other tools.
|
||||
if options.add_to_path then
|
||||
vim.env.PATH = current_nvm_node_bin_path .. ":" .. vim.env.PATH
|
||||
end
|
||||
|
||||
vim.g.node_host_prog = neovim_node_host_bin_path
|
||||
vim.g.copilot_node_command = current_nvm_node_bin
|
||||
else
|
||||
n("Unable to determine the Node.js version from nvm.", "error")
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -33,7 +33,7 @@ o.numberwidth = 3 -- Set the width of the number column
|
||||
o.relativenumber = true -- Show relative line numbers
|
||||
o.scrolloff = 15 -- Show context around cursor
|
||||
o.showmode = false -- Don't show mode
|
||||
o.signcolumn = 'yes:2' -- Keep signcolumn on by default
|
||||
o.signcolumn = 'yes:3' -- Keep signcolumn on by default
|
||||
o.smartindent = true -- Insert indents automatically
|
||||
o.spell = true -- Enable spell checking
|
||||
o.spelllang = 'en_us' -- Set the spell checking language
|
||||
@@ -46,7 +46,7 @@ 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
|
||||
|
||||
|
||||
@@ -18,9 +18,11 @@ return {
|
||||
impersonate_nvim_cmp = true,
|
||||
},
|
||||
},
|
||||
|
||||
-- Set of preconfigured snippets for different languages.
|
||||
-- https://github.com/rafamadriz/friendly-snippets
|
||||
{ 'rafamadriz/friendly-snippets' },
|
||||
|
||||
-- Lua plugin to turn github copilot into a cmp source
|
||||
-- https://github.com/giuxtaposition/blink-cmp-copilot
|
||||
{
|
||||
@@ -73,7 +75,10 @@ return {
|
||||
completion = {
|
||||
menu = {
|
||||
draw = {
|
||||
columns = { { "label", "label_description", gap = 1 }, { "kind_icon", "kind", gap = 1 } },
|
||||
columns = {
|
||||
{ "label", "label_description", gap = 1 },
|
||||
{ "kind_icon", "kind", gap = 1 }
|
||||
},
|
||||
},
|
||||
},
|
||||
documentation = {
|
||||
|
||||
@@ -9,8 +9,11 @@ return {
|
||||
opts = {
|
||||
bigfile = { enabled = true },
|
||||
gitbrowse = { enabled = true },
|
||||
notifier = {
|
||||
enabled = true,
|
||||
timeout = 3000,
|
||||
},
|
||||
notify = { enabled = true },
|
||||
notifier = { enabled = true },
|
||||
quickfile = { enabled = true },
|
||||
statuscolumn = {
|
||||
enabled = true,
|
||||
|
||||
@@ -4,6 +4,9 @@ return {
|
||||
-- Presets for common options and mappings
|
||||
{ 'echasnovski/mini.basics', version = '*' },
|
||||
|
||||
-- Extend and create a/i textobjects
|
||||
{ 'echasnovski/mini.ai', version = '*' },
|
||||
|
||||
-- Animate common Neovim actions
|
||||
-- Replaced anuvyklack/windows.nvim
|
||||
{ 'echasnovski/mini.animate', version = '*', opts = {} },
|
||||
@@ -69,6 +72,7 @@ return {
|
||||
{ mode = 'n', keys = '<Leader>b', desc = '+Buffers' },
|
||||
{ mode = 'n', keys = '<Leader>c', desc = '+Code' },
|
||||
{ mode = 'n', keys = '<Leader>cb', desc = '+CommentBox' },
|
||||
{ mode = 'n', keys = '<Leader>cc', desc = '+Calls' },
|
||||
{ mode = 'n', keys = '<Leader>q', desc = '+Quit' },
|
||||
{ mode = 'n', keys = '<Leader>s', desc = '+Telescope' },
|
||||
{ mode = 'n', keys = '<Leader>t', desc = '+Toggle' },
|
||||
@@ -104,7 +108,7 @@ return {
|
||||
version = '*',
|
||||
opts = {
|
||||
highlighters = {
|
||||
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE'
|
||||
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE', 'BUG', 'PERF' words
|
||||
fixme = {
|
||||
pattern = '%f[%w]()FIXME:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsFixme',
|
||||
@@ -182,15 +186,40 @@ return {
|
||||
{ 'echasnovski/mini.operators', version = '*', opts = {} },
|
||||
|
||||
-- Session management (read, write, delete)
|
||||
{ 'echasnovski/mini.sessions', version = '*', opts = {} },
|
||||
{
|
||||
'echasnovski/mini.sessions',
|
||||
version = '*',
|
||||
opts = {
|
||||
autoread = true,
|
||||
autowrite = true,
|
||||
}
|
||||
},
|
||||
|
||||
-- Split and join arguments, lists, and other sequences
|
||||
-- Replaced Wansmer/treesj
|
||||
{ 'echasnovski/mini.splitjoin', version = '*', opts = {} },
|
||||
{ 'echasnovski/mini.splitjoin', version = '*', opts = {} },
|
||||
|
||||
-- Fast and flexible start screen
|
||||
-- Replaced glepnir/dashboard-nvim
|
||||
{ 'echasnovski/mini.starter', version = '*', opts = {} },
|
||||
{
|
||||
'echasnovski/mini.starter',
|
||||
version = '*',
|
||||
config = function()
|
||||
local starter = require('mini.starter')
|
||||
starter.setup({
|
||||
items = {
|
||||
starter.sections.telescope(),
|
||||
starter.sections.builtin_actions(),
|
||||
starter.sections.sessions(5, true),
|
||||
},
|
||||
content_hooks = {
|
||||
starter.gen_hook.adding_bullet(),
|
||||
starter.gen_hook.indexing('all', { 'Builtin actions' }),
|
||||
starter.gen_hook.aligning('center', 'center'),
|
||||
},
|
||||
})
|
||||
end
|
||||
},
|
||||
|
||||
-- Minimal and fast statusline module with opinionated default look
|
||||
-- Replaced nvim-lualine/lualine.nvim
|
||||
|
||||
@@ -8,6 +8,9 @@ return {
|
||||
{ 'nvim-lua/plenary.nvim' },
|
||||
{ 'nvim-telescope/telescope-symbols.nvim' },
|
||||
|
||||
-- Telescope plugin for file browsing
|
||||
{ 'nvim-telescope/telescope-file-browser.nvim' },
|
||||
|
||||
-- A Telescope picker to quickly access configurations
|
||||
-- of plugins managed by lazy.nvim.
|
||||
-- https://github.com/polirritmico/telescope-lazy-plugins.nvim
|
||||
|
||||
84
config/nvim/lua/utils.lua
Normal file
84
config/nvim/lua/utils.lua
Normal file
@@ -0,0 +1,84 @@
|
||||
-- These are my utility functions
|
||||
-- I use to make my life bit easier
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Function shortcuts for keymap set │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Keymap set shortcut
|
||||
--@type vim.keymap.set
|
||||
local s = vim.keymap.set
|
||||
|
||||
-- Keymap shortcut functions
|
||||
K = {}
|
||||
|
||||
-- Handle description
|
||||
---@param desc string|table? Optional description. Can be a string or a table.
|
||||
---@return table -- The description as a table.
|
||||
local function handleDesc(desc)
|
||||
if type(desc) == "string" then
|
||||
-- Convert string to table with `desc` as a key
|
||||
-- If the string is empty, just return as an empty description
|
||||
return { desc = desc }
|
||||
elseif type(desc) == "table" then
|
||||
-- If desc doesn't have 'desc' key, combine it with
|
||||
-- others with empty description
|
||||
if not desc.desc then
|
||||
desc.desc = '?'
|
||||
return desc
|
||||
end
|
||||
-- Use the table as is
|
||||
return desc
|
||||
else
|
||||
-- Default to an empty table if `desc` is nil or an unsupported type
|
||||
return { desc = '?' }
|
||||
end
|
||||
end
|
||||
|
||||
-- Normal mode keymaps
|
||||
---@param key string rhs, required
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table? Options, optional
|
||||
K.n = function(key, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s('n', key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Leader keymap shortcut function
|
||||
-- It prepends '<leader>' to the key
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table|string? Options (or just description), optional
|
||||
K.nl = function(key, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
K.n('<leader>' .. key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Keymap shortcut function with mode defined, good for sorting by rhs
|
||||
---@param key string rhs, required
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description, required
|
||||
K.d = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s(mode, key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Leader based keymap shortcut function with mode defined
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description (or opts), required
|
||||
K.ld = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s(mode, '<leader>' .. key, cmd, opts)
|
||||
end
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Options related helper functions │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Toggle background between light and dark
|
||||
function ToggleBackground()
|
||||
vim.o.bg = vim.o.bg == "light" and "dark" or "light"
|
||||
end
|
||||
@@ -10,9 +10,11 @@ zsh-users/zsh-completions kind:fpath path:src
|
||||
getantidote/use-omz # handle OMZ dependencies
|
||||
ohmyzsh/ohmyzsh path:lib # load OMZ's library
|
||||
|
||||
# Use pure prompt
|
||||
mafredri/zsh-async
|
||||
sindresorhus/pure
|
||||
# Theme
|
||||
# mafredri/zsh-async # for pure
|
||||
# sindresorhus/pure # pure itself
|
||||
|
||||
romkatv/powerlevel10k
|
||||
|
||||
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
|
||||
ohmyzsh/ohmyzsh path:plugins/brew
|
||||
|
||||
205
config/zsh/p10k.zsh
Normal file
205
config/zsh/p10k.zsh
Normal file
@@ -0,0 +1,205 @@
|
||||
# shellcheck disable=SC1073,SC1072
|
||||
#
|
||||
# Generated by Powerlevel10k configuration wizard on 2024-12-10 at 10:05 EET.
|
||||
# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 7533.
|
||||
# Wizard options: nerdfont-v3 + powerline, small icons, pure, original, 2 lines, sparse,
|
||||
# transient_prompt, instant_prompt=verbose.
|
||||
# Type `p10k configure` to generate another config.
|
||||
#
|
||||
# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure).
|
||||
#
|
||||
# Differences from Pure:
|
||||
#
|
||||
# - Git:
|
||||
# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state.
|
||||
# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`).
|
||||
#
|
||||
# Apart from the differences listed above, the replication of Pure prompt is exact. This includes
|
||||
# even the questionable parts. For example, just like in Pure, there is no indication of Git status
|
||||
# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt
|
||||
# doesn't fit on one line, it wraps around with no attempt to shorten it.
|
||||
#
|
||||
# If you like the general style of Pure but not particularly attached to all its quirks, type
|
||||
# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking
|
||||
# advantage of Powerlevel10k features that aren't present in Pure.
|
||||
|
||||
# Temporarily change options.
|
||||
'builtin' 'local' '-a' 'p10k_config_opts'
|
||||
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
|
||||
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
|
||||
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
|
||||
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
|
||||
|
||||
() {
|
||||
emulate -L zsh -o extended_glob
|
||||
|
||||
# Unset all configuration options.
|
||||
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
|
||||
|
||||
# Zsh >= 5.1 is required.
|
||||
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
|
||||
|
||||
# Prompt colors.
|
||||
local grey='242'
|
||||
local red='1'
|
||||
local yellow='3'
|
||||
local blue='33'
|
||||
local magenta='5'
|
||||
local cyan='6'
|
||||
local white='7'
|
||||
local green='2'
|
||||
|
||||
# Left prompt segments.
|
||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||
# =========================[ Line #1 ]=========================
|
||||
context # user@host
|
||||
dir # current directory
|
||||
vcs # git status
|
||||
# command_execution_time # previous command duration
|
||||
go
|
||||
nvm
|
||||
aws
|
||||
# =========================[ Line #2 ]=========================
|
||||
newline # \n
|
||||
virtualenv # python virtual environment
|
||||
prompt_char # prompt symbol
|
||||
)
|
||||
|
||||
# Right prompt segments.
|
||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||
# =========================[ Line #1 ]=========================
|
||||
# command_execution_time # previous command duration
|
||||
# virtualenv # python virtual environment
|
||||
# context # user@host
|
||||
# time # current time
|
||||
# =========================[ Line #2 ]=========================
|
||||
newline # \n
|
||||
)
|
||||
|
||||
# Basic style options that define the overall prompt look.
|
||||
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
|
||||
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
|
||||
|
||||
# Add an empty line before each prompt except the first. This doesn't emulate the bug
|
||||
# in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar.
|
||||
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||
|
||||
# Magenta prompt symbol if the last command succeeded.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$green
|
||||
# Red prompt symbol if the last command failed.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red
|
||||
# Default prompt symbol.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='➜'
|
||||
# Prompt symbol in command vi mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='←'
|
||||
# Prompt symbol in visual vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='←'
|
||||
# Prompt symbol in overwrite vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
||||
|
||||
# Grey Python Virtual Environment.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
|
||||
# Don't show Python version.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
||||
|
||||
# Blue current directory.
|
||||
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue
|
||||
|
||||
# Context format when root: user@host. The first part red, the rest green.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$red}%n%f%F{$green}@%m%f"
|
||||
# Context format when not root: host. The host is green.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$green}%m%f"
|
||||
# Don't show context unless root or in SSH.
|
||||
# typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
|
||||
|
||||
# Show previous command duration only if it's >= 86400s = 24h.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=86400
|
||||
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
|
||||
# Duration format: 1d 2h 3m 4s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
||||
# Yellow previous command duration.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow
|
||||
|
||||
# Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones.
|
||||
typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey
|
||||
|
||||
# Disable async loading indicator to make directories that aren't Git repositories
|
||||
# indistinguishable from large Git repositories without known state.
|
||||
typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=
|
||||
|
||||
# Don't wait for Git status even for a millisecond, so that prompt always updates
|
||||
# asynchronously when Git state changes.
|
||||
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
|
||||
|
||||
# Cyan ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan
|
||||
# Don't show remote branch, current tag or stashes.
|
||||
typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
|
||||
# Don't show the branch icon.
|
||||
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
|
||||
# When in detached HEAD state, show @commit where branch normally goes.
|
||||
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
|
||||
# Don't show staged, unstaged, untracked indicators.
|
||||
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=
|
||||
# Show '*' when there are staged, unstaged or untracked files.
|
||||
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON=':'
|
||||
# Show '⇣' if local branch is behind remote.
|
||||
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣'
|
||||
# Show '⇡' if local branch is ahead of remote.
|
||||
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡'
|
||||
# Don't show the number of commits next to the ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
|
||||
# Remove space between '⇣' and '⇡' and all trailing spaces.
|
||||
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }'
|
||||
|
||||
# Grey current time.
|
||||
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey
|
||||
# Format for the current time: 09:51:02. See `man 3 strftime`.
|
||||
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
|
||||
# If set to true, time will update when you hit enter. This way prompts for the past
|
||||
# commands will contain the start times of their commands rather than the end times of
|
||||
# their preceding commands.
|
||||
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
|
||||
|
||||
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
|
||||
# when accepting a command line. Supported values:
|
||||
#
|
||||
# - off: Don't change prompt when accepting a command line.
|
||||
# - always: Trim down prompt when accepting a command line.
|
||||
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
|
||||
# typed after changing current working directory.
|
||||
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
|
||||
|
||||
# Instant prompt mode.
|
||||
#
|
||||
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
|
||||
# it incompatible with your zsh configuration files.
|
||||
# - quiet: Enable instant prompt and don't print warnings when detecting console output
|
||||
# during zsh initialization. Choose this if you've read and understood
|
||||
# https://github.com/romkatv/powerlevel10k#instant-prompt.
|
||||
# - verbose: Enable instant prompt and print a warning when detecting console output during
|
||||
# zsh initialization. Choose this if you've never tried instant prompt, haven't
|
||||
# seen the warning, or if you are unsure what this all means.
|
||||
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
|
||||
|
||||
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
|
||||
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
|
||||
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
|
||||
# really need it.
|
||||
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
|
||||
|
||||
# If p10k is already loaded, reload configuration.
|
||||
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
|
||||
(( ! $+functions[p10k] )) || p10k reload
|
||||
}
|
||||
|
||||
# Tell `p10k configure` which file it should overwrite.
|
||||
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
|
||||
|
||||
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
|
||||
'builtin' 'unset' 'p10k_config_opts'
|
||||
Reference in New Issue
Block a user