Compare commits

37 Commits
Author SHA1 Message Date
romanzy313 b0679fa52f easier norm complience 2026-10-01 22:15:45 +02:00
romanzy313 d9f92eb203 remove noisy suggestions 2026-09-30 23:50:20 +02:00
romanzy313 bddad61696 update keymaps 2026-09-29 21:36:43 +02:00
romanzy313 a23783c324 oil is king 2026-09-29 21:35:52 +02:00
romanzy313 f8ba62a6bb Revert "disable oil, enable mini.files"
This reverts commit 75eae3f174.
2026-09-29 21:32:45 +02:00
romanzy313 598f684c22 support other clipboards 2026-09-29 21:28:35 +02:00
Roman Volovoy 972289799c fix codam header 2026-09-28 16:26:02 +02:00
Roman Volovoy f362f0b9b1 lazygit installed 2026-09-28 12:48:00 +02:00
Roman Volovoy b8304c06af install scripts 2026-09-28 12:45:07 +02:00
romanzy313 a0341ca1c7 stop diagnostics spam 2026-09-27 00:03:13 +02:00
romanzy313 ebf5a0e8eb cunstom diagnositcs 2026-09-26 23:08:55 +02:00
romanzy313 b1714279ff disable lsp progress
Very annoying in slow dart lsp
2026-09-21 16:43:32 +02:00
romanzy313 94972506c2 improve mini_files 2026-09-18 19:01:58 +02:00
romanzy313 0ac228d0c3 change mini.files open location 2026-09-18 18:53:36 +02:00
romanzy313 e8027c8c7f primitive spell checking 2026-09-18 17:45:45 +02:00
romanzy313 a0e45a6dec config mini.input 2026-09-18 17:01:20 +02:00
romanzy313 18931930a2 added mini.input 2026-09-18 16:29:48 +02:00
romanzy313 dda48dc457 buffers close toast 2026-09-18 16:03:22 +02:00
romanzy313 cbe9447671 cleanup structure 2026-09-18 16:00:05 +02:00
romanzy313 c67352a14d refactor 2026-09-18 15:56:14 +02:00
romanzy313 0e8f4bc7a5 open files from mini.files 2026-09-18 15:50:54 +02:00
romanzy313 292961ae93 refreshing the shortcuts 2026-09-18 15:39:36 +02:00
romanzy313 9a01804f2f improve highlight 2026-09-18 15:30:19 +02:00
romanzy313 d41c23b9aa implemted oil compatibility 2026-09-18 15:03:27 +02:00
romanzy313 75eae3f174 disable oil, enable mini.files 2026-09-18 14:33:35 +02:00
romanzy313 c71d6ae982 improve mini.diff 2026-09-18 02:43:20 +02:00
romanzy313 7c24bf6c94 declutter statusline 2026-09-18 02:19:00 +02:00
romanzy313 da7f9d0bdb mini.cmdline 2026-09-18 02:05:31 +02:00
romanzy313 83561baf1f adhoc better completions 2026-09-18 01:50:34 +02:00
romanzy313 5b7df5dfb4 fix wrapping!!! 2026-09-18 01:09:58 +02:00
romanzy313 3ba2f15222 disable wrapping plugin 2026-09-16 18:48:10 +02:00
romanzy313 7ed28b5abf oil monkey patch 2026-09-08 03:36:41 +02:00
romanzy313 53da8295f9 type peaking docs 2026-09-08 03:24:50 +02:00
romanzy313 56b1e1bb58 readme update 2026-09-08 03:20:09 +02:00
romanzy313 dda59e048e better oil coloring 2026-09-08 03:16:04 +02:00
romanzy313 3769e95cf0 refresh shortcuts 2026-09-08 03:13:05 +02:00
romanzy313 9ce38fd7ca better buffer mangement 2026-09-08 03:07:36 +02:00
17 changed files with 482 additions and 88 deletions
+7
View File
@@ -18,3 +18,10 @@ cc-run(){
rm "${file}.out" rm "${file}.out"
} }
# https://pypi.org/project/c-formatter-42/
# install via
# pip3 install --user c-formatter-42
norm(){
c_formatter_42 *.c *.h
}
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
fonts_dir="$HOME/.local/share/fonts"
mkdir -p "$fonts_dir"
# List of fonts to install
declare -a fonts=(FiraCode JetBrainsMono Hack)
for font in "${fonts[@]}"; do
echo "Installing $font..."
wget "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${font}.zip" -P "/tmp/"
unzip -o "/tmp/${font}.zip" -d "$fonts_dir"
rm "/tmp/${font}.zip"
done
fc-cache -fv
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": *"v\K[^"]*')
LAZYGIT_ARCH=$(uname -m | sed 's/aarch64/arm64/')
echo "Installing lazygit v${LAZYGIT_VERSION} (${LAZYGIT_ARCH})"
WORKDIR=$(mktemp -d /tmp/lazygit.XXXXXX)
trap 'rm -rf "$WORKDIR"' EXIT
curl -sLo "${WORKDIR}/lazygit.tar.gz" \
"https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_${LAZYGIT_ARCH}.tar.gz"
tar -xOf "${WORKDIR}/lazygit.tar.gz" lazygit > "${WORKDIR}/lazygit"
mkdir -p ~/.local/bin
install -m 755 "${WORKDIR}/lazygit" ~/.local/bin/lazygit
echo "Done: $(~/.local/bin/lazygit --version)"
+25
View File
@@ -0,0 +1,25 @@
#!/bin/bash
STOW_VERSION="${STOW_VERSION:-2.4.1}"
# Create temp build directory
BUILD_DIR=$(mktemp -d)
trap 'rm -rf "$BUILD_DIR"' EXIT
# 1. Download and extract
cd "$BUILD_DIR"
curl -O "http://ftp.gnu.org/gnu/stow/stow-${STOW_VERSION}.tar.gz"
tar xf "stow-${STOW_VERSION}.tar.gz"
cd "stow-${STOW_VERSION}"
# 2. Configure installation to user directory
./configure --prefix="$HOME/.local"
# 3. Compile and install (no sudo needed)
make
make install
# 4. Add to PATH (add this line to ~/.bashrc or ~/.zshrc)
export PATH="$HOME/.local/bin:$PATH"
# 5. Verify installation
stow --version
+27 -36
View File
@@ -14,26 +14,29 @@ To remove a plugin run `:lua vim.pack.del({ "<plugin name>" })`.
See custom keymaps with short descriptions with `<leader><leader>h`. See custom keymaps with short descriptions with `<leader><leader>h`.
Split shortcuts: General shortcuts:
- `<leader>e` opens the file browser
- `gx` opens an external viewer
- `gR`, `<F5>` refresh
Windowing shortcuts:
- `<leader>sv` open a vertical split - `<leader>sv` open a vertical split
- `<leader>sh` open a horizontal split - `<leader>sh` open a horizontal split
- `<leader>se` equalize split sizes - `<leader>se` equalize split sizes
- `<leader>sc` close the current window - `<leader>sc` close the current window
- `<leader>r-hjkl` to resize
Resize shortcuts:
- `<leader>rh` make the current window narrower
- `<leader>rl` make the current window wider
- `<leader>rj` make the current window shorter
- `<leader>rk` make the current window taller
- `<leader>re` equalize split sizes - `<leader>re` equalize split sizes
- `<C-hjkl>` move between windows
Buffer shortcuts: Buffer shortcuts:
- `<leader>bp` previous buffer - `<leader>bp` previous buffer
- `<leader>bn` next buffer - `<leader>bn` next buffer
- `<leader>bd` delete the current buffer - `<leader>bd` delete the current buffer
- `<leader>bc` force close all non-visible buffers
- `<leader>bf` find buffers
Telescope shortcuts: Telescope shortcuts:
@@ -48,37 +51,21 @@ Git shortcuts:
- `<leader>lg` open LazyGit - `<leader>lg` open LazyGit
- `<leader>dv` open Diffview - `<leader>dv` open Diffview
- `<leader>dc` close Diffview - `<leader>dc` close Diffview
- `[h`, `]h`, `[H`, `]H` jump to hunks
- `<leader>th` — toggle the expanded hunk view
Oil usage:
- `-`, `<BS>` goes to the parent directory
- `<C-p>` previews the selected entry
Toggle shortcuts: Toggle shortcuts:
- `<leader>tw` toggle soft wrap - `<leader>tw` toggle soft wrap
- `<leader>ts` toggle spell checking
- `<leader>ti` toggle inline diagnostics - `<leader>ti` toggle inline diagnostics
- `<leader>tv` toggle virtual diagnostics - `<leader>tv` toggle virtual diagnostics
- `<leader>th` — toggle the expanded hunk view
Oil usage:
- `<leader>dl` opens the file browser
- `<CR>` opens a file or enters a directory
- `-` goes to the parent directory
- `<BS>` also goes to the parent directory
- `<A-h>` also goes to the parent directory
- `<A-l>` opens the selected file or enters the selected directory
- `<C-p>` previews the selected entry
- `gx` opens the file in external viewer
## Window Navigation
Move between windows with:
```vim
<C-hjkl>
```
Cycle through windows:
```vim
<C-w>w
```
## Terminal ## Terminal
@@ -102,6 +89,7 @@ Useful Mason commands:
Useful LSP commands: Useful LSP commands:
- `K` show the type and documentation for the symbol under the cursor
- `gd` go to definition - `gd` go to definition
- `gD` go to declaration - `gD` go to declaration
- `grd` list references - `grd` list references
@@ -109,17 +97,20 @@ Useful LSP commands:
- `<leader>ca` show code actions - `<leader>ca` show code actions
- `<leader>cf` apply quick fixes - `<leader>cf` apply quick fixes
- `<leader>cs` show source actions - `<leader>cs` show source actions
- `<C-x><C-n>` manually word completion
Diagnostics: Diagnostics:
- `g.` open diagnostic float - `g.` open diagnostic float
- `gl` send diagnostics to the location list - `gl` send diagnostics to the location list
- `gld` display diagnostic information - `gld` display diagnostic information
- `]g` jump to next warning or error - `]g`, `[g` jump to warning or error
- `[g` jump to previous warning or error
- `<leader>ti` toggle inline diagnostics - `<leader>ti` toggle inline diagnostics
- `<leader>tv` toggle virtual diagnostics - `<leader>tv` toggle virtual diagnostics
- `<leader>xx` toggle project warnings and errors - `<leader>xx`, `:ProjectDiagnostics` check the current Dart or TypeScript
package and show warnings and errors in Trouble. Save modified package files
first. Other languages show available LSP diagnostics; project coverage
depends on the language server.
## Tree-sitter ## Tree-sitter
+1
View File
@@ -2,3 +2,4 @@ local o = vim.opt_local
o.textwidth = 80 o.textwidth = 80
o.expandtab = false o.expandtab = false
o.commentstring = "/*%s*/"
@@ -3,6 +3,8 @@ local ac = vim.api.nvim_create_autocmd
local aug = vim.api.nvim_create_augroup local aug = vim.api.nvim_create_augroup
uc("W", "w|e", { desc = "write file then refresh buffer" }) uc("W", "w|e", { desc = "write file then refresh buffer" })
uc("ProjectDiagnostics", require("romanzy.custom.project_diagnostics").run,
{ desc = "check project warnings and errors" })
ac("TextYankPost", { ac("TextYankPost", {
desc = "Highlight when yanking text", desc = "Highlight when yanking text",
@@ -12,6 +14,8 @@ ac("TextYankPost", {
end, end,
}) })
uc("NormFormat", "!c_formatter_42 *.c *.h", { desc = "comply with the norm in C" })
-- ac("LspAttach", { -- ac("LspAttach", {
-- desc = "Notify user about attached LSP clients", -- desc = "Notify user about attached LSP clients",
-- group = aug("LSPOnAttach", { clear = true }), -- group = aug("LSPOnAttach", { clear = true }),
@@ -0,0 +1,29 @@
local M = {}
function M.close_hidden()
local visible_buffers = {}
local closed_count = 0
for _, tabpage in ipairs(vim.api.nvim_list_tabpages()) do
for _, window in ipairs(vim.api.nvim_tabpage_list_wins(tabpage)) do
visible_buffers[vim.api.nvim_win_get_buf(window)] = true
end
end
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
if vim.bo[buffer].buflisted and not visible_buffers[buffer] then
vim.api.nvim_buf_delete(buffer, { force = true })
closed_count = closed_count + 1
end
end
if closed_count == 0 then
vim.notify("No hidden buffers to close", vim.log.levels.INFO)
return
end
local buffer_label = closed_count == 1 and "buffer" or "buffers"
vim.notify(string.format("Closed %d hidden %s", closed_count, buffer_label), vim.log.levels.INFO)
end
return M
@@ -0,0 +1,184 @@
local M = {}
local run_id = 0
local severities = { error = "E", warning = "W" }
local extensions = {
dart = "dart",
ts = "typescript",
tsx = "typescript",
mts = "typescript",
cts = "typescript",
js = "typescript",
jsx = "typescript",
mjs = "typescript",
cjs = "typescript",
}
local function absolute_path(root, path)
if path:sub(1, 1) == "/" then
return vim.fs.normalize(path)
end
return vim.fs.normalize(vim.fs.joinpath(root, path))
end
local function parse_output(kind, output, root)
local items = {}
for line in output:gmatch("[^\r\n]+") do
local path, row, col, level, message, code
if kind == "dart" then
level, path, row, col, message, code = line:match("^%s*(%a+)%s+%-%s+(.+):(%d+):(%d+)%s+%-%s+(.+)%s+%-%s+([%w_]+)%s*$")
else
path, row, col, level, code, message = line:match("^(.+)%((%d+),(%d+)%)%:%s*(%a+)%s+TS(%d+):%s*(.+)$")
if not path then
level, code, message = line:match("^(%a+)%s+TS(%d+):%s*(.+)$")
if level then
path, row, col = "tsconfig.json", 1, 1
end
end
end
if path and severities[level] then
table.insert(items, {
filename = absolute_path(root, path),
lnum = tonumber(row),
col = tonumber(col),
text = message,
type = severities[level],
nr = code and tonumber(code) or nil,
})
end
end
return items
end
local function add_lsp_diagnostics(items, root)
local seen = {}
for _, item in ipairs(items) do
seen[table.concat({ item.filename, item.lnum, item.col, item.type, item.text }, "\0")] = true
end
local prefix = root .. "/"
for _, diagnostic in ipairs(vim.diagnostic.get()) do
local path = vim.api.nvim_buf_get_name(diagnostic.bufnr)
local kind = diagnostic.severity == vim.diagnostic.severity.ERROR and "E"
or diagnostic.severity == vim.diagnostic.severity.WARN and "W"
if kind and path:sub(1, #prefix) == prefix then
local item = {
filename = path,
lnum = diagnostic.lnum + 1,
col = diagnostic.col + 1,
text = diagnostic.message,
type = kind,
}
local key = table.concat({ item.filename, item.lnum, item.col, item.type, item.text }, "\0")
if not seen[key] then
table.insert(items, item)
seen[key] = true
end
end
end
end
local function show_lsp_diagnostics(bufnr)
local clients = vim.lsp.get_clients({ bufnr = bufnr })
local supported = false
for _, client in ipairs(clients) do
if client:supports_method("workspace/diagnostic") then
supported = true
break
end
end
if supported then
vim.lsp.buf.workspace_diagnostics()
elseif #clients == 0 then
vim.notify("Project diagnostics: no language server is attached; showing available diagnostics", vim.log.levels.WARN)
else
vim.notify("Project diagnostics: this language server may only report opened files", vim.log.levels.WARN)
end
require("trouble").close({ mode = "qflist" })
require("trouble").open({
mode = "diagnostics",
filter = { severity = { vim.diagnostic.severity.ERROR, vim.diagnostic.severity.WARN } },
})
end
local function has_modified_buffers(root)
local prefix = root .. "/"
for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
local path = vim.api.nvim_buf_get_name(bufnr)
if vim.bo[bufnr].modified and path:sub(1, #prefix) == prefix then
return true
end
end
return false
end
local function checker_for(path)
local extension = path:match("%.([^./]+)$")
local kind = extensions[extension]
if not kind then
return nil
end
local marker = kind == "dart" and "pubspec.yaml" or "tsconfig.json"
local found = vim.fs.find(marker, { path = vim.fs.dirname(path), upward = true })[1]
if not found then
return nil
end
local root = vim.fs.dirname(found)
if kind == "dart" then
local has_fvm = vim.fs.find({ ".fvmrc", ".fvm" }, { path = root, upward = true })[1]
local executable = has_fvm and "fvm" or "dart"
local command = has_fvm and { "fvm", "dart", "analyze" } or { "dart", "analyze" }
return kind, root, executable, command
end
local config = table.concat(vim.fn.readfile(found), "\n")
if config:find('"references"%s*:') then
return kind, root, "pnpm", { "pnpm", "exec", "tsc", "--build", "tsconfig.json", "--noEmit", "--pretty", "false" }
end
return kind, root, "pnpm", { "pnpm", "exec", "tsc", "--noEmit", "--pretty", "false", "--project", "tsconfig.json" }
end
function M.run()
run_id = run_id + 1
local current_run = run_id
local bufnr = vim.api.nvim_get_current_buf()
local path = vim.api.nvim_buf_get_name(bufnr)
local kind, root, executable, command = checker_for(path)
if not kind then
show_lsp_diagnostics(bufnr)
return
end
require("trouble").close({ mode = "qflist" })
if has_modified_buffers(root) then
vim.notify("Project diagnostics: save modified package files before checking", vim.log.levels.WARN)
return
end
if vim.fn.executable(executable) ~= 1 then
vim.notify("Project diagnostics: " .. executable .. " is unavailable", vim.log.levels.ERROR)
return
end
vim.notify("Checking " .. root .. "…", vim.log.levels.INFO)
vim.system(command, { cwd = root, text = true }, function(result)
vim.schedule(function()
if current_run ~= run_id then
return
end
local output = (result.stdout or "") .. "\n" .. (result.stderr or "")
local items = parse_output(kind, output, root)
if result.code ~= 0 and #items == 0 then
vim.notify("Project diagnostics failed:\n" .. vim.trim(output), vim.log.levels.ERROR)
return
end
add_lsp_diagnostics(items, root)
vim.fn.setqflist({}, "r", { title = "Project diagnostics: " .. root, items = items })
if #items == 0 then
require("trouble").close({ mode = "qflist" })
vim.notify("Project diagnostics: no warnings or errors", vim.log.levels.INFO)
else
require("trouble").close({ mode = "diagnostics" })
require("trouble").open({ mode = "qflist" })
end
end)
end)
end
return M
@@ -0,0 +1,35 @@
local M = {}
--- Toggle spell checking for the current window.
function M.toggle()
if vim.bo.buftype == "terminal" then
return
end
vim.opt_local.spell = not vim.wo.spell
vim.cmd("redrawstatus")
end
function M.setup()
vim.opt.spelllang = { "en_us" }
vim.opt.spell = true
local group = vim.api.nvim_create_augroup("RomanzySpell", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
group = group,
pattern = "terminal",
callback = function()
vim.opt_local.spell = false
end,
})
vim.api.nvim_create_autocmd("TermOpen", {
group = group,
callback = function()
vim.cmd("setfiletype terminal")
end,
})
end
return M
@@ -10,7 +10,8 @@ function M.toggle(enabled)
vim.wo.wrap = enabled vim.wo.wrap = enabled
vim.wo.linebreak = enabled vim.wo.linebreak = enabled
vim.wo.breakindent = enabled vim.wo.breakindent = enabled
vim.bo.textwidth = enabled and 80 or 0 vim.wo.colorcolumn = enabled and "" or "80"
vim.bo.textwidth = enabled and 0 or 80
vim.bo.wrapmargin = 0 vim.bo.wrapmargin = 0
end end
+11 -17
View File
@@ -20,7 +20,7 @@ end
map("n", "<leader><leader>r", ":source ~/.config/nvim/init.lua<CR>", { desc = "reload init.lua" }) map("n", "<leader><leader>r", ":source ~/.config/nvim/init.lua<CR>", { desc = "reload init.lua" })
map("n", "<leader><leader>h", telescope_picker("keymaps"), { desc = "show keymaps" }) map("n", "<leader><leader>h", telescope_picker("keymaps"), { desc = "show keymaps" })
map("n", "<leader>dl", "<Cmd>Oil<CR>", { desc = "open oil" }) map("n", "<leader>e", "<Cmd>Oil<CR>", { desc = "open oil" })
map("n", "<leader>ff", telescope_picker("find_files"), { desc = "find files" }) map("n", "<leader>ff", telescope_picker("find_files"), { desc = "find files" })
map("n", "<leader>fg", telescope_picker("live_grep"), { desc = "live grep" }) map("n", "<leader>fg", telescope_picker("live_grep"), { desc = "live grep" })
map("n", "<leader>fb", telescope_picker("buffers"), { desc = "find buffers" }) map("n", "<leader>fb", telescope_picker("buffers"), { desc = "find buffers" })
@@ -29,6 +29,10 @@ map("n", "<leader>lg", "<Cmd>LazyGit<CR>", { desc = "open lazygit" })
map("n", "<leader>dv", "<Cmd>DiffviewOpen<CR>", { desc = "open diffview" }) map("n", "<leader>dv", "<Cmd>DiffviewOpen<CR>", { desc = "open diffview" })
map("n", "<leader>dc", "<Cmd>DiffviewClose<CR>", { desc = "close diffview" }) map("n", "<leader>dc", "<Cmd>DiffviewClose<CR>", { desc = "close diffview" })
map("n", "<leader>tw", require("romanzy.custom.wrap").toggle, { desc = "toggle soft wrap" }) map("n", "<leader>tw", require("romanzy.custom.wrap").toggle, { desc = "toggle soft wrap" })
map("n", "<leader>ts", require("romanzy.custom.spell").toggle, { desc = "toggle spell checking" })
map("n", "<leader>th", function()
MiniDiff.toggle_overlay()
end, { desc = "toggle hunk view" })
map("n", "<leader>sv", "<Cmd>vs<CR>", { desc = "split vertical" }) map("n", "<leader>sv", "<Cmd>vs<CR>", { desc = "split vertical" })
map("n", "<leader>sh", "<Cmd>sp<CR>", { desc = "split horizontal" }) map("n", "<leader>sh", "<Cmd>sp<CR>", { desc = "split horizontal" })
@@ -44,6 +48,8 @@ map("n", "<leader>re", "<C-w>=", { desc = "equalize buffer sizes" })
map("n", "<leader>bp", "<Cmd>bprevious<CR>", { desc = "prev buffer" }) map("n", "<leader>bp", "<Cmd>bprevious<CR>", { desc = "prev buffer" })
map("n", "<leader>bn", "<Cmd>bnext<CR>", { desc = "next buffer" }) map("n", "<leader>bn", "<Cmd>bnext<CR>", { desc = "next buffer" })
map("n", "<leader>bd", "<Cmd>bdelete<CR>", { desc = "delete buffer" }) map("n", "<leader>bd", "<Cmd>bdelete<CR>", { desc = "delete buffer" })
map("n", "<leader>bc", require("romanzy.custom.buffers").close_hidden, { desc = "close hidden buffers" })
map("n", "<leader>bf", telescope_picker("buffers"), { desc = "find buffers" })
map({ "n", "v" }, "<leader>y", '"+y', { desc = "yank to system clipboard" }) map({ "n", "v" }, "<leader>y", '"+y', { desc = "yank to system clipboard" })
map("n", "<leader>Y", '"+Y', { desc = "yank line to system clipboard" }) map("n", "<leader>Y", '"+Y', { desc = "yank line to system clipboard" })
@@ -57,9 +63,7 @@ map("n", "<C-h>", "<C-w>h", { desc = "window left" })
map("n", "<C-j>", "<C-w>j", { desc = "window down" }) map("n", "<C-j>", "<C-w>j", { desc = "window down" })
map("n", "<C-k>", "<C-w>k", { desc = "window up" }) map("n", "<C-k>", "<C-w>k", { desc = "window up" })
map("n", "<C-l>", "<C-w>l", { desc = "window right" }) map("n", "<C-l>", "<C-w>l", { desc = "window right" })
map("n", "gR", function() map("n", { "gR", "<F5>" }, "<Cmd>edit<CR>", { desc = "refresh current buffer" })
vim.cmd.normal({ args = { vim.keycode("<C-l>") }, bang = true })
end, { desc = "refresh current view" })
-- this is needed to disable refresh behavior for <C-l> for navigation -- this is needed to disable refresh behavior for <C-l> for navigation
vim.api.nvim_create_autocmd("FileType", { vim.api.nvim_create_autocmd("FileType", {
@@ -102,8 +106,8 @@ vim.api.nvim_create_autocmd("LspAttach", {
map("n", "gd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "goto definition" }) map("n", "gd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "goto definition" })
map("n", "gD", vim.lsp.buf.declaration, { buffer = ev.buf, desc = "goto declaration" }) map("n", "gD", vim.lsp.buf.declaration, { buffer = ev.buf, desc = "goto declaration" })
map("n", "gfr", vim.lsp.buf.references, { buffer = ev.buf, desc = "find references" }) map("n", "gfr", vim.lsp.buf.references, { buffer = ev.buf, desc = "find references" })
map("n", "grn", rename_without_default, { buffer = ev.buf, desc = "rename symbol completely" }) map("n", "grn", rename_without_default, { buffer = ev.buf, desc = "rename symbol (from empty)" })
map("n", "gRN", vim.lsp.buf.rename, { buffer = ev.buf, desc = "rename symbol starting with whatever is there" }) map("n", "grN", vim.lsp.buf.rename, { buffer = ev.buf, desc = "rename symbol (from current)" })
map({ "n", "x" }, "<leader>ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "code actions" }) map({ "n", "x" }, "<leader>ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "code actions" })
map("n", "<leader>cf", function() map("n", "<leader>cf", function()
@@ -125,17 +129,7 @@ vim.api.nvim_create_autocmd("LspAttach", {
}) })
-- diagnostics -- diagnostics
map("n", "<leader>xx", function() map("n", "<leader>xx", require("romanzy.custom.project_diagnostics").run, { desc = "check project warnings and errors" })
require("trouble").toggle({
mode = "diagnostics",
filter = {
severity = {
vim.diagnostic.severity.ERROR,
vim.diagnostic.severity.WARN,
},
},
})
end, { desc = "toggle project warnings and errors" })
map("n", "g.", vim.diagnostic.open_float, { desc = "line diagnostics" }) map("n", "g.", vim.diagnostic.open_float, { desc = "line diagnostics" })
map("n", "gl", vim.diagnostic.setloclist, { desc = "diagnostic list" }) map("n", "gl", vim.diagnostic.setloclist, { desc = "diagnostic list" })
+4 -5
View File
@@ -1,9 +1,7 @@
local g = vim.g local g = vim.g
local o = vim.opt local o = vim.opt
g.mapleader = " " -- Uses space as the global leader key. g.mapleader = " " -- Uses space as the global leader key.
g.maplocalleader = " " -- Uses space as the local leader key. g.maplocalleader = " " -- Uses space as the local leader key.
g.clipboard = "osc52" -- Routes the + and * registers through OSC52 in terminal Neovim.
o.number = true -- Shows absolute line numbers. o.number = true -- Shows absolute line numbers.
o.relativenumber = true -- Shows relative numbers for easier motion. o.relativenumber = true -- Shows relative numbers for easier motion.
@@ -11,7 +9,8 @@ o.cursorline = true -- Highlights the line under the cursor.
o.textwidth = 80 -- Wraps inserted text after 80 columns when formatting is active. o.textwidth = 80 -- Wraps inserted text after 80 columns when formatting is active.
o.scrolloff = 8 -- Keeps context lines visible around the cursor. o.scrolloff = 8 -- Keeps context lines visible around the cursor.
o.signcolumn = "yes" -- Always reserves space for signs in the gutter. o.signcolumn = "yes" -- Always reserves space for signs in the gutter.
o.colorcolumn = "+1" -- Highlights the preferred maximum line width. o.colorcolumn = "80" -- Highlights the preferred maximum line width.
o.wrap = false -- Prevents long lines from wrapping on screen.
o.list = true -- Displays whitespace characters using listchars. o.list = true -- Displays whitespace characters using listchars.
o.listchars = { o.listchars = {
tab = "» ", tab = "» ",
@@ -29,11 +28,11 @@ o.expandtab = true -- Inserts spaces w
o.smartindent = true -- Adds indentation automatically on new lines. o.smartindent = true -- Adds indentation automatically on new lines.
o.swapfile = false -- Disables swapfile creation. o.swapfile = false -- Disables swapfile creation.
o.incsearch = true -- Updates search matches as you type. o.incsearch = true -- Updates search matches as you type.
o.completeopt = { "menuone", "noselect", "fuzzy", "nosort" } -- Enables fuzzy completion matching. o.completeopt = { "menuone", "noinsert", "fuzzy", "nosort" } -- Enables fuzzy completion matching.
o.pumheight = 8 -- Limits the completion popup menu size. o.pumheight = 8 -- Limits the completion popup menu size.
o.updatetime = 50 -- Reduces idle delay for swap and CursorHold events. o.updatetime = 50 -- Reduces idle delay for swap and CursorHold events.
o.spelllang = { "en_us" } -- Uses US English for spell checking.
o.shell = "bash" -- Runs shell commands through bash. o.shell = "bash" -- Runs shell commands through bash.
g.c_syntax_for_h = true -- Unfuck header formatting
-- Only show the invisible characters inside the code editing buffers -- Only show the invisible characters inside the code editing buffers
vim.cmd([[autocmd BufWinEnter * if &buftype != '' | setlocal nolist | endif]]) vim.cmd([[autocmd BufWinEnter * if &buftype != '' | setlocal nolist | endif]])
+2 -1
View File
@@ -9,4 +9,5 @@ require("romanzy.plugins.nvim-treesitter")
require("romanzy.plugins.conform") require("romanzy.plugins.conform")
require("romanzy.plugins.lsp") require("romanzy.plugins.lsp")
require("romanzy.plugins.codamheader") require("romanzy.plugins.codamheader")
require("romanzy.plugins.romanzy") require("romanzy.custom.spell").setup()
require("romanzy.custom.tabline").setup()
+82 -25
View File
@@ -6,18 +6,34 @@ vim.pack.add({
}, },
}) })
local icons = require("mini.icons")
local input = require("mini.input")
local clue = require("mini.clue") local clue = require("mini.clue")
local completion = require("mini.completion") local completion = require("mini.completion")
local icons = require("mini.icons")
local git = require("mini.git") local git = require("mini.git")
local diff = require("mini.diff") local diff = require("mini.diff")
local statusline = require("mini.statusline") local statusline = require("mini.statusline")
local cmdline = require("mini.cmdline")
local hipatterns = require("mini.hipatterns") local hipatterns = require("mini.hipatterns")
local pairs = require("mini.pairs") local pairs = require("mini.pairs")
local ai = require("mini.ai") local ai = require("mini.ai")
local notify = require("mini.notify") local notify = require("mini.notify")
local surround = require("mini.surround") local surround = require("mini.surround")
icons.setup({})
local input_view = input.gen_view.floatwin({
-- other interesting symbols for the caret `▏` `⎕` `░` `▒` `▓`
to_chunks = function(state, max_width)
return input.state_to_chunks(state, max_width, {
include_prompt = false,
include_hint = false,
symbol_caret = "█",
})
end,
})
input.setup({ handlers = { view = input_view } })
clue.setup({ clue.setup({
triggers = { triggers = {
{ mode = "n", keys = "<leader>" }, { mode = "n", keys = "<leader>" },
@@ -39,39 +55,70 @@ clue.setup({
}, },
}) })
completion.setup({})
local function complete_accept_top()
if vim.fn.pumvisible() == 0 then
return "<C-y>"
end
if vim.fn.complete_info({ "selected" }).selected == -1 then
return "<C-n><C-y>"
end
return "<C-y>"
end
vim.keymap.set("i", "<C-y>", complete_accept_top, { expr = true })
icons.setup({}) icons.setup({})
git.setup({}) git.setup({})
diff.setup({}) diff.setup({})
local function set_mini_diff_highlights() local function set_mini_diff_highlights()
vim.api.nvim_set_hl(0, "MiniDiffSignAdd", { fg = "#9ccf8d" }) vim.api.nvim_set_hl(0, "MiniDiffSignAdd", { fg = "#9ccf8d", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffSignChange", { fg = "#f6c177" }) vim.api.nvim_set_hl(0, "MiniDiffSignChange", { fg = "#f6c177", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffSignDelete", { fg = "#eb6f92" }) vim.api.nvim_set_hl(0, "MiniDiffSignDelete", { fg = "#eb6f92", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffOverAdd", { fg = "#9ccf8d" }) vim.api.nvim_set_hl(0, "MiniDiffOverAdd", { fg = "#9ccf8d", bg = "#333c48", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffOverChange", { fg = "#f6c177" }) vim.api.nvim_set_hl(0, "MiniDiffOverChange", { fg = "#eb6f92", bg = "#43293a", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffOverDelete", { fg = "#eb6f92" }) vim.api.nvim_set_hl(0, "MiniDiffOverChangeBuf", { fg = "#9ccf8d", bg = "#333c48", bold = true })
vim.api.nvim_set_hl(0, "MiniDiffOverContext", { fg = "#908caa", bg = "#26233a" })
vim.api.nvim_set_hl(0, "MiniDiffOverContextBuf", { fg = "#e0def4", bg = "#1f1d2e" })
vim.api.nvim_set_hl(0, "MiniDiffOverDelete", { fg = "#eb6f92", bg = "#43293a", bold = true })
end end
set_mini_diff_highlights() set_mini_diff_highlights()
vim.api.nvim_create_autocmd("ColorScheme", { vim.api.nvim_create_autocmd("ColorScheme", {
callback = set_mini_diff_highlights, callback = set_mini_diff_highlights,
}) })
statusline.setup({ use_icons = true }) -- Custom de-cluttered status line output. The default was waaay to noisy
local function statusline_active()
local function statusline_filetype()
local filetype = vim.bo.filetype
if filetype == "" then
return ""
end
local icon = MiniIcons.get("filetype", filetype)
return icon .. " " .. filetype
end
local function statusline_spell()
return vim.wo.spell and "spell" or ""
end
local mode, mode_hl = statusline.section_mode({ trunc_width = 120 })
local git_info = statusline.section_git({ trunc_width = 40 })
-- local diff_info = statusline.section_diff({ trunc_width = 75 })
-- local diagnostics = statusline.section_diagnostics({ trunc_width = 75 })
local lsp = statusline.section_lsp({ trunc_width = 75 })
local filename = statusline.section_filename({ trunc_width = 140 })
local spell = statusline_spell()
local fileinfo = statusline_filetype()
local search = statusline.section_searchcount({ trunc_width = 75 })
return statusline.combine_groups({
{ hl = mode_hl, strings = { mode } },
{ hl = "MiniStatuslineDevinfo", strings = { git_info, lsp } },
"%<",
{ hl = "MiniStatuslineFilename", strings = { filename } },
"%=",
{ hl = "MiniStatuslineFileinfo", strings = { spell, fileinfo } },
{ hl = mode_hl, strings = { search } },
})
end
statusline.setup({
use_icons = true,
content = { active = statusline_active },
})
cmdline.setup({})
hipatterns.setup({ hipatterns.setup({
highlighters = { highlighters = {
@@ -87,13 +134,23 @@ pairs.setup({
modes = { insert = true, command = true, terminal = false }, modes = { insert = true, command = true, terminal = false },
}) })
completion.setup({
fallback_action = function() end,
mappings = { force_fallback = "" },
})
vim.keymap.set("i", "<CR>", function()
if vim.fn.complete_info({ "selected" }).selected ~= -1 then
return "\25"
end
return MiniPairs.cr()
end, { expr = true })
ai.setup({}) ai.setup({})
notify.setup({ notify.setup({
lsp_progress = { lsp_progress = {
-- the message "lua_ls: processing completion..." and enable = false,
-- "lua_ls: Diagnosing" is very annoying
enable = true,
}, },
}) })
vim.notify = notify.make_notify() vim.notify = notify.make_notify()
+34 -2
View File
@@ -18,6 +18,7 @@ local function set_oil_git_highlights()
vim.api.nvim_set_hl(0, "OilGitCopied", { link = "MiniDiffSignChange" }) vim.api.nvim_set_hl(0, "OilGitCopied", { link = "MiniDiffSignChange" })
vim.api.nvim_set_hl(0, "OilGitDeleted", { link = "MiniDiffSignDelete" }) vim.api.nvim_set_hl(0, "OilGitDeleted", { link = "MiniDiffSignDelete" })
vim.api.nvim_set_hl(0, "OilGitConflict", { link = "MiniDiffSignDelete" }) vim.api.nvim_set_hl(0, "OilGitConflict", { link = "MiniDiffSignDelete" })
vim.api.nvim_set_hl(0, "OilGitIgnored", { link = "Comment" })
end end
require("oil").setup({ require("oil").setup({
@@ -27,14 +28,15 @@ require("oil").setup({
["<C-k>"] = false, ["<C-k>"] = false,
["<C-l>"] = false, ["<C-l>"] = false,
["gR"] = "actions.refresh", -- replaces default <C-l> behavior ["gR"] = "actions.refresh", -- replaces default <C-l> behavior
["<F5>"] = "actions.refresh",
["<C-s>"] = false, ["<C-s>"] = false,
["<C-p>"] = { "actions.preview", opts = { vertical = true, split = "belowright" } }, ["<C-p>"] = { "actions.preview", opts = { vertical = true, split = "belowright" } },
["<BS>"] = { "actions.parent", mode = "n" }, ["<BS>"] = { "actions.parent", mode = "n" },
}, },
view_options = { view_options = {
show_hidden = true, show_hidden = true,
is_hidden_file = function(name, _) is_hidden_file = function(_, _)
return vim.startswith(name, ".") return false
end, end,
is_always_hidden = function(name, _) is_always_hidden = function(name, _)
return name == ".git" return name == ".git"
@@ -42,9 +44,39 @@ require("oil").setup({
}, },
}) })
local oil_git_trie = require("oil-git.trie")
local oil_git_lookup = oil_git_trie.lookup
-- ugly internal monkey patch to not show partially git-ignored foldres as grey
rawset(oil_git_trie, "lookup", function(root, entry_path, git_root, exclude_ignored)
local status = oil_git_lookup(root, entry_path, git_root, exclude_ignored)
if status ~= "!!" or exclude_ignored then
return status
end
local relative_path = entry_path:sub(#git_root + 2)
local node = root
for segment in relative_path:gmatch("[^/\\]+") do
node = node.children[segment]
if not node then
return nil
end
end
-- oil-git normally propagates an ignored child's status to every parent.
-- Only grey a directory when Git reported that directory itself as ignored.
if not node.is_dir_ignored then
return nil
end
return status
end)
require("oil-git").setup({ require("oil-git").setup({
show_file_highlights = true, show_file_highlights = true,
show_directory_highlights = true, show_directory_highlights = true,
show_ignored_files = true,
show_ignored_directories = true,
show_file_symbols = true, show_file_symbols = true,
show_directory_symbols = true, show_directory_symbols = true,
symbol_position = "none", symbol_position = "none",
@@ -1 +0,0 @@
require("romanzy.custom.tabline").setup()