Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.backup.*
.DS_Store
19 changes: 12 additions & 7 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@ if vim.loader then
vim.loader.enable()
end

require("config.globals")
require("config.neovide")
require("config.lazy")
require("config.options")
require("config.autocmds")
require("config.keymaps")
require("config.lsp")
local modules = {
"config.globals",
"config.options",
"config.lazy",
"config.autocmds",
"config.keymaps",
"config.lsp",
}

for _, module in ipairs(modules) do
require(module)
end
19 changes: 12 additions & 7 deletions init.lua.bak
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@ if vim.loader then
vim.loader.enable()
end

require("config.globals")
require("config.neovide")
require("config.lazy")
require("config.options")
require("config.autocmds")
require("config.keymaps")
require("config.lsp")
local modules = {
"config.globals",
"config.options",
"config.lazy",
"config.autocmds",
"config.keymaps",
"config.lsp",
}

for _, module in ipairs(modules) do
require(module)
end
36 changes: 14 additions & 22 deletions lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,34 +1,26 @@
{
"amp.nvim": { "branch": "main", "commit": "3b9ad5ef0328de1b35cc9bfa723a37db5daf9434" },
"arctic": { "branch": "main", "commit": "46da33aeb3a8ee48533f41911b3aaf4f1541dd6f" },
"catppuccin": { "branch": "main", "commit": "426dbebe06b5c69fd846ceb17b42e12f890aedf1" },
"everforest": { "branch": "master", "commit": "b03a03148c8b34c24c96960b93da9c8883d11f54" },
"fff.nvim": { "branch": "feat/implement-buffers-support", "commit": "c134566edc684870bcf3069c0bfdfe058562166a" },
"fidget.nvim": { "branch": "main", "commit": "889e2e96edef4e144965571d46f7a77bcc4d0ddf" },
"grug-far.nvim": { "branch": "main", "commit": "21604255d0e8f9968322f61f2b6c09e5efe1285a" },
"gruvbox-material": { "branch": "master", "commit": "afb275d8e6dc379762d122bd24e1773fc057abf3" },
"conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
"fff.nvim": { "branch": "feat/implement-buffers-support", "commit": "18504c1bf05add6be1db8c31bad793d9348d7d90" },
"fidget.nvim": { "branch": "main", "commit": "82404b196e73a00b1727a91903beef5ddc319d22" },
"gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" },
"grug-far.nvim": { "branch": "main", "commit": "c995bbacf8229dc096ec1c3d60f8531059c86c1b" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"kanagawa.nvim": { "branch": "master", "commit": "aef7f5cec0a40dbe7f3304214850c472e2264b10" },
"lanciabones.nvim": { "branch": "main", "commit": "65545cefba9d5d6d59cad047f1103de40aad16a5" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" },
"leap.nvim": { "branch": "main", "commit": "e7ca7b92f996bcbc34beee8b244ea5ef6692b478" },
"lualine.nvim": { "branch": "master", "commit": "a905eeebc4e63fdc48b5135d3bf8aea5618fb21c" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"lush.nvim": { "branch": "main", "commit": "9c60ec2279d62487d942ce095e49006af28eed6e" },
"monokai-pro-vim": { "branch": "main", "commit": "130e87e68e23167e8216eed72d883c35844bd3e4" },
"nightfox.nvim": { "branch": "main", "commit": "ba47d4b4c5ec308718641ba7402c143836f35aa9" },
"nvim-highlight-colors": { "branch": "main", "commit": "e2cb22089cc2358b2b995c09578224f142de6039" },
"nvim-rg": { "branch": "main", "commit": "27c9ca583d05a73048186dc3048b26428ef21753" },
"nvim-surround": { "branch": "main", "commit": "61319d4bd1c5e336e197defa15bd104c51f0fb29" },
"nvim-tree.lua": { "branch": "master", "commit": "509962f21ab7289d8dcd28568af539be39a8c01e" },
"nvim-highlight-colors": { "branch": "main", "commit": "e4c7af0211866162d999ce0bdd6a029302e19139" },
"nvim-surround": { "branch": "main", "commit": "2e93e154de9ff326def6480a4358bfc149d5da2c" },
"nvim-tree.lua": { "branch": "master", "commit": "07f541fcaa4a5ae019598240362449ab7e9812b3" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
"nvim-web-devicons": { "branch": "master", "commit": "c72328a5494b4502947a022fe69c0c47e53b6aa6" },
"oscura-vim": { "branch": "main", "commit": "6103dc6942755e88e60103df741e4c4a7ba8b4ce" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
"rose-pine": { "branch": "main", "commit": "9504524e5ed0e326534698f637f9d038ba4cd0ee" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
"tsc.nvim": { "branch": "main", "commit": "e083bcf1e54bc3af7df92b33235efb334e8c782c" },
"vim-commentary": { "branch": "master", "commit": "64a654ef4a20db1727938338310209b6a63f60c9" },
"vimwiki": { "branch": "dev", "commit": "72792615e739d0eb54a9c8f7e0a46a6e2407c9e8" },
"zenbones.nvim": { "branch": "main", "commit": "22b7fb75593412e0dc81b4bdefae718e9e84aa82" }
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vimwiki": { "branch": "dev", "commit": "a54a3002e229c4b43d69ced170ff77663a5b2c40" },
"zenbones.nvim": { "branch": "main", "commit": "239bdb9a09c8d38c752c43590d02f654ed0da2b0" }
}
152 changes: 87 additions & 65 deletions lua/config/autocmds.lua
Original file line number Diff line number Diff line change
@@ -1,64 +1,95 @@
local function strip_trailing_whitespace()
if vim.bo.binary or vim.bo.filetype == "diff" then
return
end
local cursor = vim.api.nvim_win_get_cursor(0)
local pattern = vim.bo.filetype == "mail" and [[\(^--\)\@<!\s\+$]] or [[\s\+$]]
vim.cmd([[keeppatterns %s/]] .. pattern .. [[//e]])
pcall(vim.api.nvim_win_set_cursor, 0, cursor)
end
-- =============================================================================
-- autocmds.lua
-- =============================================================================
local user_augroup = vim.api.nvim_create_augroup("user_autocmds", { clear = true })

-- ---------------------------------------------------------------------------
-- Background / colorscheme
-- ---------------------------------------------------------------------------
local current_bg

local function macos_is_dark()
local out = vim.fn.system("defaults read -g AppleInterfaceStyle 2>/dev/null")
out = (out or ""):gsub("%s+", "")
return out == "Dark"
local function apply_bg(bg)
if bg == current_bg then
return
end
current_bg = bg
vim.opt.background = bg
pcall(vim.cmd.colorscheme, "lanciabones")
end

local function desired_background()
local function override_bg()
local override = vim.env.NVIM_BACKGROUND
if override == "dark" or override == "light" then
return override
end

if vim.g.neovide then
return macos_is_dark() and "dark" or "light"
end

return "dark"
return nil
end

local function switch_background_and_colorscheme()
local bg = desired_background()
if bg == current_bg then
local function refresh_background_async()
local override = override_bg()
if override then
apply_bg(override)
return
end

current_bg = bg
vim.opt.background = bg

if bg == "dark" then
vim.cmd.colorscheme("arctic")
else
vim.cmd.colorscheme("grb-lucius")
if vim.fn.has("mac") ~= 1 then
apply_bg("dark")
return
end

vim.system(
{ "defaults", "read", "-g", "AppleInterfaceStyle" },
{ text = true },
function(obj)
local is_dark = obj.code == 0 and (obj.stdout or ""):find("Dark") ~= nil
vim.schedule(function()
apply_bg(is_dark and "dark" or "light")
end)
end
)
end

local user_augroup = vim.api.nvim_create_augroup("user_autocmds", { clear = true })
-- Defer the initial colorscheme application to UIEnter, off the startup
-- critical path. Lanciabones plugin still loads eagerly (priority=1000),
-- so the only thing moved here is the actual `:colorscheme` invocation.
vim.api.nvim_create_autocmd("UIEnter", {
group = user_augroup,
once = true,
callback = function()
-- Set a default immediately so there is no flash of default colours.
apply_bg(override_bg() or "dark")
-- Then refine with the real macOS appearance asynchronously.
refresh_background_async()
end,
})

vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter" }, {
-- Re-check on focus; cheap because vim.system is async.
vim.api.nvim_create_autocmd("FocusGained", {
group = user_augroup,
callback = switch_background_and_colorscheme,
callback = refresh_background_async,
})

switch_background_and_colorscheme()
-- ---------------------------------------------------------------------------
-- Strip trailing whitespace on save
-- ---------------------------------------------------------------------------
local function strip_trailing_whitespace()
if vim.bo.binary or vim.bo.filetype == "diff" then
return
end
local cursor = vim.api.nvim_win_get_cursor(0)
local pattern = vim.bo.filetype == "mail" and [[\(^--\)\@<!\s\+$]] or [[\s\+$]]
vim.cmd([[keeppatterns %s/]] .. pattern .. [[//e]])
pcall(vim.api.nvim_win_set_cursor, 0, cursor)
end

vim.api.nvim_create_autocmd("BufWritePre", {
group = user_augroup,
callback = strip_trailing_whitespace,
})

-- ---------------------------------------------------------------------------
-- Vimwiki diary template
-- ---------------------------------------------------------------------------
vim.api.nvim_create_autocmd("BufNewFile", {
group = user_augroup,
pattern = vim.fn.expand("~") .. "/vimwiki/diary/*.wiki",
Expand All @@ -67,16 +98,33 @@ vim.api.nvim_create_autocmd("BufNewFile", {
end,
})

vim.api.nvim_create_autocmd({ "BufNewFile", "BufRead" }, {
-- ---------------------------------------------------------------------------
-- Filetype-specific tweaks
-- Note: yaml and markdown filetype detection is built-in, so we don't need
-- BufNewFile/BufRead handlers just to set vim.bo.filetype.
-- ---------------------------------------------------------------------------

-- Force *.tsx into typescript.tsx (deliberately overrides the default
-- typescriptreact - keeps existing behaviour)
vim.api.nvim_create_autocmd({ "BufNewFile", "BufReadPost" }, {
group = user_augroup,
pattern = "*.tsx",
callback = function()
vim.bo.filetype = "typescript.tsx"
end,
})

-- Markdown indent (filetype is auto-detected from extension)
vim.api.nvim_create_autocmd("FileType", {
group = user_augroup,
pattern = "*.md",
pattern = "markdown",
callback = function()
vim.bo.filetype = "markdown"
vim.bo.softtabstop = 4
vim.bo.shiftwidth = 4
end,
})

-- Prose / commit messages: wrap + spell
vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
group = user_augroup,
pattern = { "*.md", "*.txt", "*.adoc", "*.html", "COMMIT_EDITMSG" },
Expand All @@ -99,40 +147,14 @@ vim.api.nvim_create_autocmd("FileType", {
end,
})

-- 2-space families (yaml folded in - was previously a separate autocmd)
vim.api.nvim_create_autocmd("FileType", {
group = user_augroup,
pattern = { "javascript", "typescript", "json", "c", "html", "htmldjango" },
pattern = { "javascript", "typescript", "typescript.tsx", "json", "c", "html", "htmldjango", "yaml" },
callback = function()
vim.bo.expandtab = true
vim.bo.shiftwidth = 2
vim.bo.tabstop = 2
vim.bo.softtabstop = 2
end,
})

vim.api.nvim_create_autocmd({ "BufNewFile", "BufReadPost" }, {
group = user_augroup,
pattern = "*.tsx",
callback = function()
vim.bo.filetype = "typescript.tsx"
end,
})

vim.api.nvim_create_autocmd({ "BufNewFile", "BufReadPost" }, {
group = user_augroup,
pattern = { "*.yaml", "*.yml" },
callback = function()
vim.bo.filetype = "yaml"
end,
})

vim.api.nvim_create_autocmd("FileType", {
group = user_augroup,
pattern = "yaml",
callback = function()
vim.bo.tabstop = 2
vim.bo.softtabstop = 2
vim.bo.shiftwidth = 2
vim.bo.expandtab = true
end,
})
32 changes: 14 additions & 18 deletions lua/config/keymaps.lua
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
local keymap = vim.keymap
local is_linux = vim.uv.os_uname().sysname == "Linux"

if is_linux then
-- The macOS finder bindings (<C-p>, <C-b>, <C-h>) for fff.nvim are registered
-- lazily in config.plugins so they don't drag the plugin in at startup.
if vim.uv.os_uname().sysname == "Linux" then
keymap.set("n", "<C-p>", function() require("fzf-lua").files() end, { desc = "Find files" })
keymap.set("n", "<C-b>", function() require("fzf-lua").buffers() end, { desc = "Find buffers" })
keymap.set("n", "<C-h>", function() require("fzf-lua").git_files() end, { desc = "Find Git files" })
else
keymap.set("n", "<C-p>", function() require("fff").find_files() end, { desc = "Find files" })
keymap.set("n", "<C-b>", function() require("fff").buffers() end, { desc = "Find buffers" })
keymap.set("n", "<C-h>", function() require("fff").git_files() end, { desc = "Find Git files" })
end

keymap.set("n", "<C-c>", ":NvimTreeToggle<CR>")
Expand All @@ -30,6 +27,17 @@ keymap.set("n", "<leader>rn", function() vim.lsp.buf.rename() end, { desc = "Ren
keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, { desc = "Code action" })
keymap.set("n", "K", function() vim.lsp.buf.hover() end, { desc = "Hover documentation" })

local function smart_delete(key)
local line = vim.api.nvim_get_current_line()
return (line:match("^%s*$") and '"_' or "") .. key
end

for _, lhs in ipairs({ "d", "dd", "x", "c", "s", "C", "X" }) do
keymap.set({ "n", "v" }, lhs, function()
return smart_delete(lhs)
end, { desc = "Smart delete", expr = true, noremap = true })
end

keymap.set("n", "<CR>", "G")
keymap.set("n", "<BS>", "gg")
keymap.set("n", "j", "gj")
Expand Down Expand Up @@ -57,15 +65,3 @@ keymap.set("i", "<CR>", function()
end
return "\r"
end, expr_opts)

if vim.g.neovide then
keymap.set({ "n", "v" }, "<D-=>", function()
vim.g.neovide_scale_factor = vim.g.neovide_scale_factor + 0.1
end, { desc = "Increase Neovide scale" })
keymap.set({ "n", "v" }, "<D-->", function()
vim.g.neovide_scale_factor = math.max(0.5, vim.g.neovide_scale_factor - 0.1)
end, { desc = "Decrease Neovide scale" })
keymap.set({ "n", "v" }, "<D-0>", function()
vim.g.neovide_scale_factor = 1.0
end, { desc = "Reset Neovide scale" })
end
Loading