Change layout to per-device top level
This commit is contained in:
@@ -1,578 +0,0 @@
|
|||||||
-- Leaders / globals
|
|
||||||
vim.g.mapleader = " "
|
|
||||||
vim.g.maplocalleader = " "
|
|
||||||
|
|
||||||
-- Options
|
|
||||||
vim.opt.termguicolors = true
|
|
||||||
vim.opt.number = true
|
|
||||||
vim.opt.relativenumber = true
|
|
||||||
vim.opt.signcolumn = "yes"
|
|
||||||
vim.opt.cursorline = true
|
|
||||||
vim.opt.laststatus = 2
|
|
||||||
|
|
||||||
vim.opt.splitbelow = true
|
|
||||||
vim.opt.splitright = true
|
|
||||||
|
|
||||||
vim.opt.ignorecase = true
|
|
||||||
vim.opt.smartcase = true
|
|
||||||
vim.opt.incsearch = true
|
|
||||||
vim.opt.hlsearch = true
|
|
||||||
vim.opt.expandtab = true
|
|
||||||
vim.opt.tabstop = 2
|
|
||||||
vim.opt.shiftwidth = 2
|
|
||||||
vim.opt.softtabstop = 2
|
|
||||||
vim.opt.smartindent = true
|
|
||||||
vim.opt.breakindent = true
|
|
||||||
|
|
||||||
vim.opt.undofile = true
|
|
||||||
vim.opt.swapfile = false
|
|
||||||
vim.opt.backup = false
|
|
||||||
vim.opt.confirm = true
|
|
||||||
|
|
||||||
vim.opt.clipboard = "unnamedplus"
|
|
||||||
|
|
||||||
vim.opt.scrolloff = 8
|
|
||||||
|
|
||||||
|
|
||||||
-- Keymaps
|
|
||||||
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR><Esc>", { desc = "Clear search highlight" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "j", "gj", { silent = true })
|
|
||||||
vim.keymap.set("n", "k", "gk", { silent = true })
|
|
||||||
vim.keymap.set("v", "<", "<gv")
|
|
||||||
vim.keymap.set("v", ">", ">gv")
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<C-s>", function()
|
|
||||||
vim.lsp.buf.format({ timeout_ms = 2000 })
|
|
||||||
vim.cmd("w")
|
|
||||||
end, { desc = "Format + Write" })
|
|
||||||
|
|
||||||
vim.keymap.set("i", "<C-s>", function()
|
|
||||||
vim.cmd("stopinsert")
|
|
||||||
vim.lsp.buf.format({ timeout_ms = 2000 })
|
|
||||||
vim.cmd("w")
|
|
||||||
end, { desc = "Format + Write" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Window left" })
|
|
||||||
vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Window down" })
|
|
||||||
vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Window up" })
|
|
||||||
vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Window right" })
|
|
||||||
|
|
||||||
vim.keymap.set("t", "<C-h>", [[<C-\><C-n><C-w>h]], { desc = "Terminal window left" })
|
|
||||||
vim.keymap.set("t", "<C-j>", [[<C-\><C-n><C-w>j]], { desc = "Terminal window down" })
|
|
||||||
vim.keymap.set("t", "<C-k>", [[<C-\><C-n><C-w>k]], { desc = "Terminal window up" })
|
|
||||||
vim.keymap.set("t", "<C-l>", [[<C-\><C-n><C-w>l]], { desc = "Terminal window right" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>bb", "<cmd>buffers<CR>", { desc = "List buffers" })
|
|
||||||
vim.keymap.set("n", "<leader>bl", "<cmd>b#<CR>", { desc = "Last buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bD", "<cmd>bdelete!<CR>", { desc = "Force delete buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bw", "<cmd>bwipeout<CR>", { desc = "Wipe buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bo", "<cmd>%bdelete|edit#|bdelete#<CR>", { desc = "Delete other buffers" })
|
|
||||||
vim.keymap.set("n", "<leader>ba", "<cmd>%bdelete<CR>", { desc = "Delete all buffers" })
|
|
||||||
|
|
||||||
vim.keymap.set('n', 'H', ':bprevious<CR>', { silent = true })
|
|
||||||
vim.keymap.set('n', 'L', ':bnext<CR>', { silent = true })
|
|
||||||
|
|
||||||
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>', { noremap = true, silent = true })
|
|
||||||
|
|
||||||
|
|
||||||
-- lazy.nvim bootstrap
|
|
||||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
||||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
|
||||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
|
||||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
|
||||||
if vim.v.shell_error ~= 0 then
|
|
||||||
vim.api.nvim_echo({
|
|
||||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
|
||||||
{ out, "WarningMsg" },
|
|
||||||
{ "\nPress any key to exit..." },
|
|
||||||
}, true, {})
|
|
||||||
vim.fn.getchar()
|
|
||||||
os.exit(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
-- Plugins
|
|
||||||
require("lazy").setup({
|
|
||||||
-- Themes
|
|
||||||
{
|
|
||||||
"vague-theme/vague.nvim",
|
|
||||||
lazy = false,
|
|
||||||
priority = 1000,
|
|
||||||
config = function()
|
|
||||||
vim.cmd("colorscheme koda")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{ "rebelot/kanagawa.nvim" },
|
|
||||||
{ "oskarnurm/koda.nvim" },
|
|
||||||
{ "datsfilipe/vesper.nvim" },
|
|
||||||
{ "metalelf0/base16-black-metal-scheme" },
|
|
||||||
|
|
||||||
-- LSP / Completion
|
|
||||||
{ "neovim/nvim-lspconfig" },
|
|
||||||
{
|
|
||||||
"saghen/blink.cmp",
|
|
||||||
version = "1.*",
|
|
||||||
opts = {
|
|
||||||
keymap = {
|
|
||||||
preset = "none",
|
|
||||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
|
||||||
["<C-e>"] = { "hide" },
|
|
||||||
|
|
||||||
["<C-up>"] = { "scroll_documentation_up" },
|
|
||||||
["<C-down>"] = { "scroll_documentation_down" },
|
|
||||||
|
|
||||||
["<CR>"] = { "accept", "fallback" },
|
|
||||||
|
|
||||||
["<Tab>"] = { "select_next", "fallback" },
|
|
||||||
["<S-Tab>"] = { "select_prev", "fallback" },
|
|
||||||
|
|
||||||
["<C-n>"] = { "select_next", "fallback" },
|
|
||||||
["<C-p>"] = { "select_prev", "fallback" },
|
|
||||||
|
|
||||||
["<C-j>"] = { "snippet_forward", "fallback" },
|
|
||||||
["<C-k>"] = { "snippet_backward", "fallback" },
|
|
||||||
},
|
|
||||||
completion = {
|
|
||||||
documentation = {
|
|
||||||
auto_show = true,
|
|
||||||
},
|
|
||||||
list = {
|
|
||||||
selection = {
|
|
||||||
auto_insert = false,
|
|
||||||
preselect = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sources = {
|
|
||||||
default = { "lsp", "path", "buffer", "snippets" },
|
|
||||||
},
|
|
||||||
snippets = {
|
|
||||||
preset = "luasnip",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
version = "v2.*",
|
|
||||||
build = "make install_jsregexp",
|
|
||||||
dependencies = { "rafamadriz/friendly-snippets" },
|
|
||||||
config = function()
|
|
||||||
local luasnip = require("luasnip")
|
|
||||||
luasnip.config.setup({
|
|
||||||
history = true,
|
|
||||||
updateevents = "TextChanged, TextChangedI",
|
|
||||||
enable_autosnippets = false,
|
|
||||||
})
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
|
||||||
|
|
||||||
local autosnips_enabled = false
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>sa", function()
|
|
||||||
autosnips_enabled = not autosnips_enabled
|
|
||||||
luasnip.config.set_config({ enable_autosnippets = autosnips_enabled })
|
|
||||||
vim.notify("Autosnippets: " .. (autosnips_enabled and "ON" or "OFF"))
|
|
||||||
end, { desc = "Toggle autosnippets" })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"lervag/vimtex",
|
|
||||||
lazy = false,
|
|
||||||
init = function()
|
|
||||||
vim.g.vimtex_view_method = "zathura"
|
|
||||||
vim.g.vimtex_quickfix_mode = 0
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"chomosuke/typst-preview.nvim",
|
|
||||||
lazy = false,
|
|
||||||
version = "1.*",
|
|
||||||
opts = {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"NickvanDyke/opencode.nvim",
|
|
||||||
config = function()
|
|
||||||
vim.g.opencode_opts = {
|
|
||||||
provider = {
|
|
||||||
enabled = "tmux",
|
|
||||||
tmux = {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vim.o.autoread = true
|
|
||||||
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>aa", function() require("opencode").ask("@this: ", { submit = true }) end,
|
|
||||||
{ desc = "AI Ask" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>as", function() require("opencode").select() end,
|
|
||||||
{ desc = "AI Select action" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>at", function() require("opencode").toggle() end,
|
|
||||||
{ desc = "AI Toggle panel" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>ar", function() return require("opencode").operator("@this ") end,
|
|
||||||
{ desc = "AI Add range", expr = true })
|
|
||||||
vim.keymap.set("n", "<leader>al", function() return require("opencode").operator("@this ") .. "_" end,
|
|
||||||
{ desc = "AI Add line", expr = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>au", function() require("opencode").command("session.half.page.up") end,
|
|
||||||
{ desc = "AI Scroll up" })
|
|
||||||
vim.keymap.set("n", "<leader>ad", function() require("opencode").command("session.half.page.down") end,
|
|
||||||
{ desc = "AI Scroll down" })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"github/copilot.vim",
|
|
||||||
init = function()
|
|
||||||
vim.g.copilot_no_tab_map = true
|
|
||||||
vim.g.copilot_assume_mapped = true
|
|
||||||
end,
|
|
||||||
config = function()
|
|
||||||
vim.keymap.set("i", "<M-CR>", 'copilot#Accept("\\<CR>")', {
|
|
||||||
expr = true,
|
|
||||||
replace_keycodes = false,
|
|
||||||
silent = true
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("i", "<M-'>", 'copilot#AcceptWord()', { expr = true, silent = true })
|
|
||||||
vim.keymap.set("i", "<M-;>", 'copilot#AcceptLine()', { expr = true, silent = true })
|
|
||||||
vim.keymap.set("n", "<leader>ac", "<cmd>Copilot toggle<CR>", { desc = "Toggle Copilot" })
|
|
||||||
end
|
|
||||||
},
|
|
||||||
-- File explorer / Search
|
|
||||||
{
|
|
||||||
"nvim-neo-tree/neo-tree.nvim",
|
|
||||||
branch = "v3.x",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
"MunifTanjim/nui.nvim",
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
},
|
|
||||||
lazy = false,
|
|
||||||
opts = {
|
|
||||||
window = {
|
|
||||||
width = 80,
|
|
||||||
},
|
|
||||||
filesystem = {
|
|
||||||
filtered_items = {
|
|
||||||
hide_dotfiles = false,
|
|
||||||
},
|
|
||||||
follow_current_file = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
group_empty_dirs = true,
|
|
||||||
},
|
|
||||||
default_component_configs = {
|
|
||||||
indent = {
|
|
||||||
indent_size = 2,
|
|
||||||
with_markers = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>e",
|
|
||||||
function()
|
|
||||||
vim.cmd("Neotree position=right toggle")
|
|
||||||
end,
|
|
||||||
desc = "Neo-tree (right)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"stevearc/oil.nvim",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
opts = {},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>E", "<cmd>Oil<CR>", desc = "Oil" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ibhagwan/fzf-lua",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
opts = function()
|
|
||||||
local actions = require("fzf-lua.actions")
|
|
||||||
return {
|
|
||||||
files = {
|
|
||||||
actions = {
|
|
||||||
["default"] = actions.file_edit,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{ "<leader>ff", function() require("fzf-lua").files() end, desc = "Find files" },
|
|
||||||
{ "<leader>fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" },
|
|
||||||
{ "<leader>fo", function() require("fzf-lua").oldfiles() end, desc = "Find recent files" },
|
|
||||||
{ "<leader>ft", function() require("fzf-lua").live_grep() end, desc = "Find text in project" },
|
|
||||||
{ "<leader>fs", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find document symbols" },
|
|
||||||
|
|
||||||
{ "<M-/>", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
|
|
||||||
{ "<leader>/", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
|
|
||||||
|
|
||||||
{ "<leader>fh", function() require("fzf-lua").helptags() end, desc = "Find help tags" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Git
|
|
||||||
{
|
|
||||||
"tpope/vim-fugitive",
|
|
||||||
cmd = { "Git", "G" },
|
|
||||||
},
|
|
||||||
{ "lewis6991/gitsigns.nvim" },
|
|
||||||
{
|
|
||||||
"kdheepak/lazygit.nvim",
|
|
||||||
lazy = true,
|
|
||||||
cmd = {
|
|
||||||
"LazyGit",
|
|
||||||
"LazyGitConfig",
|
|
||||||
"LazyGitCurrentFile",
|
|
||||||
"LazyGitFilter",
|
|
||||||
"LazyGitFilterCurrentFile",
|
|
||||||
},
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Editing utilities
|
|
||||||
{ "MagicDuck/grug-far.nvim" },
|
|
||||||
{
|
|
||||||
"kylechui/nvim-surround",
|
|
||||||
event = "VeryLazy",
|
|
||||||
config = function()
|
|
||||||
require("nvim-surround").setup({})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"windwp/nvim-autopairs",
|
|
||||||
event = "insertenter",
|
|
||||||
config = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'abecodes/tabout.nvim',
|
|
||||||
lazy = false,
|
|
||||||
config = function()
|
|
||||||
require('tabout').setup {
|
|
||||||
tabkey = '<Tab>', -- key to trigger tabout, set to an empty string to disable
|
|
||||||
backwards_tabkey = '<S-Tab>', -- key to trigger backwards tabout, set to an empty string to disable
|
|
||||||
act_as_tab = true, -- shift content if tab out is not possible
|
|
||||||
act_as_shift_tab = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports <S-Tab>)
|
|
||||||
default_tab = '<C-t>', -- shift default action (only at the beginning of a line, otherwise <TAB> is used)
|
|
||||||
default_shift_tab = '<C-d>', -- reverse shift default action,
|
|
||||||
enable_backwards = true, -- well ...
|
|
||||||
completion = false, -- if the tabkey is used in a completion pum
|
|
||||||
tabouts = {
|
|
||||||
{ open = "'", close = "'" },
|
|
||||||
{ open = '"', close = '"' },
|
|
||||||
{ open = '`', close = '`' },
|
|
||||||
{ open = '(', close = ')' },
|
|
||||||
{ open = '[', close = ']' },
|
|
||||||
{ open = '{', close = '}' },
|
|
||||||
{ open = ',', close = ',' }
|
|
||||||
},
|
|
||||||
ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]]
|
|
||||||
exclude = {} -- tabout will ignore these filetypes
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
dependencies = { -- These are optional
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
},
|
|
||||||
event = 'InsertCharPre', -- Set the event to 'InsertCharPre' for better compatibility
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Motion / UI
|
|
||||||
{
|
|
||||||
"folke/flash.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {
|
|
||||||
modes = {
|
|
||||||
treesitter = {
|
|
||||||
jump = { pos = "start" }, -- or "end"
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
|
|
||||||
{ "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
lazy = false,
|
|
||||||
build = ":TSUpdate",
|
|
||||||
config = function()
|
|
||||||
require('nvim-treesitter').setup({
|
|
||||||
ensure_installed = { "go", "latex", "typst" },
|
|
||||||
highlight = { enable = true }
|
|
||||||
})
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wellle/targets.vim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'nvim-lualine/lualine.nvim',
|
|
||||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
|
||||||
opts = function()
|
|
||||||
local function pretty_path()
|
|
||||||
local name = vim.api.nvim_buf_get_name(0)
|
|
||||||
if name == '' then return '[No Name]' end
|
|
||||||
-- Relative to current working directory, nicely normalized
|
|
||||||
return vim.fn.fnamemodify(name, ':.')
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
options = {
|
|
||||||
section_separators = '',
|
|
||||||
component_separators = '',
|
|
||||||
globalstatus = true,
|
|
||||||
},
|
|
||||||
|
|
||||||
sections = {
|
|
||||||
lualine_a = { 'mode' },
|
|
||||||
lualine_b = { { 'branch', icon = '' }, 'diff' },
|
|
||||||
lualine_c = {
|
|
||||||
{ 'diagnostics' }, -- uses vim.diagnostic by default
|
|
||||||
{ 'filename', path = 1, symbols = { modified = ' ●', readonly = ' ' } },
|
|
||||||
},
|
|
||||||
lualine_x = { 'encoding', 'fileformat', 'filetype', require("opencode").statusline },
|
|
||||||
lualine_y = { 'progress' },
|
|
||||||
lualine_z = { 'location' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Global list (best place for buffers)
|
|
||||||
tabline = {
|
|
||||||
lualine_a = {
|
|
||||||
{
|
|
||||||
'buffers',
|
|
||||||
show_filename_only = true,
|
|
||||||
show_modified_status = true,
|
|
||||||
mode = 2,
|
|
||||||
max_length = vim.o.columns * 8 / 10,
|
|
||||||
use_mode_colors = true,
|
|
||||||
buffers_color = {
|
|
||||||
active = 'lualine_a_normal',
|
|
||||||
inactive = 'lualine_b_inactive',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
lualine_z = { 'tabs' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"goolord/alpha-nvim",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
require("alpha").setup(require("alpha.themes.theta").config)
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"chentoast/marks.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"leath-dub/snipe.nvim",
|
|
||||||
keys = {
|
|
||||||
{ "<leader><leader>", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" }
|
|
||||||
},
|
|
||||||
opts = {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"folke/which-key.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {
|
|
||||||
preset = "helix"
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>?",
|
|
||||||
function()
|
|
||||||
require("which-key").show({ global = false })
|
|
||||||
end,
|
|
||||||
desc = "Buffer Local Keymaps (which-key)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"j-hui/fidget.nvim",
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"christoomey/vim-tmux-navigator",
|
|
||||||
cmd = {
|
|
||||||
"TmuxNavigateLeft",
|
|
||||||
"TmuxNavigateDown",
|
|
||||||
"TmuxNavigateUp",
|
|
||||||
"TmuxNavigateRight",
|
|
||||||
"TmuxNavigatePrevious",
|
|
||||||
"TmuxNavigatorProcessList",
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
|
|
||||||
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
|
|
||||||
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
|
|
||||||
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
|
|
||||||
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
-- LSP
|
|
||||||
vim.lsp.config("lua_ls", {
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
diagnostics = {
|
|
||||||
globals = { "vim" },
|
|
||||||
},
|
|
||||||
workspace = {
|
|
||||||
checkThirdParty = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.lsp.enable({
|
|
||||||
"lua_ls",
|
|
||||||
"tinymist",
|
|
||||||
"gopls",
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
|
|
||||||
vim.keymap.set("v", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
|
|
||||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto definition" })
|
|
||||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto declaration" })
|
|
||||||
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Goto implementation" })
|
|
||||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References" })
|
|
||||||
vim.keymap.set("n", "gy", vim.lsp.buf.type_definition, { desc = "Goto type definition" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover" })
|
|
||||||
vim.keymap.set("i", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature help" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cs", vim.lsp.buf.document_symbol, { desc = "Document symbols" })
|
|
||||||
vim.keymap.set("n", "<leader>cS", vim.lsp.buf.workspace_symbol, { desc = "Workspace symbols" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cf", function()
|
|
||||||
vim.lsp.buf.format({ async = true })
|
|
||||||
end, { desc = "Format buffer" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cr", vim.lsp.buf.rename, { desc = "Rename" })
|
|
||||||
|
|
||||||
vim.diagnostic.config({
|
|
||||||
virtual_text = true,
|
|
||||||
signs = true,
|
|
||||||
underline = true,
|
|
||||||
update_in_insert = false,
|
|
||||||
severity_sort = true,
|
|
||||||
float = { border = "rounded", source = "if_many" },
|
|
||||||
})
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
### Variables
|
|
||||||
set $mod Mod4
|
|
||||||
set $left h
|
|
||||||
set $down j
|
|
||||||
set $up k
|
|
||||||
set $right l
|
|
||||||
|
|
||||||
set $term foot
|
|
||||||
set $menu bemenu-run -b -i --fn "Hack Nerd Font 10" --prompt "Run:" --list "8 up"
|
|
||||||
|
|
||||||
### Vague.nvim palette (no inline comments)
|
|
||||||
set $b00 #141415
|
|
||||||
set $b01 #1c1c24
|
|
||||||
set $b02 #2f2f3d
|
|
||||||
set $b03 #333738
|
|
||||||
set $b04 #c3c3d5
|
|
||||||
set $b05 #cdcdcd
|
|
||||||
|
|
||||||
set $red #d8647e
|
|
||||||
set $yellow #f3be7c
|
|
||||||
set $hint #7e98e8
|
|
||||||
set $float #878787
|
|
||||||
|
|
||||||
### UI: font, borders, gaps, colors
|
|
||||||
font Hack Nerd Font 10
|
|
||||||
default_border pixel 3
|
|
||||||
default_floating_border pixel 3
|
|
||||||
smart_borders no_gaps
|
|
||||||
gaps inner 0
|
|
||||||
gaps outer 0
|
|
||||||
|
|
||||||
client.focused $hint $b02 $b05 $hint
|
|
||||||
client.focused_inactive $b01 $b01 $b04 $b01
|
|
||||||
client.unfocused $b01 $b01 $b03 $b01
|
|
||||||
client.urgent $red $red $b05 $red
|
|
||||||
client.placeholder $b01 $b01 $b04 $b01
|
|
||||||
client.background $b00
|
|
||||||
|
|
||||||
for_window [floating] border pixel 2
|
|
||||||
|
|
||||||
### Output
|
|
||||||
exec_always swaybg -c $b00
|
|
||||||
|
|
||||||
### Lock / idle / DPMS / suspend
|
|
||||||
set $lock swaylock -f -c $b00
|
|
||||||
|
|
||||||
### Input
|
|
||||||
input type:keyboard {
|
|
||||||
xkb_layout "us"
|
|
||||||
}
|
|
||||||
|
|
||||||
### Workspace behavior
|
|
||||||
workspace_auto_back_and_forth yes
|
|
||||||
bindsym $mod+Tab workspace back_and_forth
|
|
||||||
|
|
||||||
### Key bindings
|
|
||||||
bindsym $mod+Return exec $term
|
|
||||||
bindsym $mod+q kill
|
|
||||||
bindsym $mod+Space exec $menu
|
|
||||||
bindsym $mod+Shift+c reload
|
|
||||||
bindsym $mod+Shift+e exec swaymsg exit
|
|
||||||
|
|
||||||
bindsym $mod+$left focus left
|
|
||||||
bindsym $mod+$down focus down
|
|
||||||
bindsym $mod+$up focus up
|
|
||||||
bindsym $mod+$right focus right
|
|
||||||
|
|
||||||
bindsym $mod+Shift+$left move left
|
|
||||||
bindsym $mod+Shift+$down move down
|
|
||||||
bindsym $mod+Shift+$up move up
|
|
||||||
bindsym $mod+Shift+$right move right
|
|
||||||
|
|
||||||
bindsym $mod+1 workspace number 1
|
|
||||||
bindsym $mod+2 workspace number 2
|
|
||||||
bindsym $mod+3 workspace number 3
|
|
||||||
bindsym $mod+4 workspace number 4
|
|
||||||
bindsym $mod+5 workspace number 5
|
|
||||||
bindsym $mod+6 workspace number 6
|
|
||||||
bindsym $mod+7 workspace number 7
|
|
||||||
bindsym $mod+8 workspace number 8
|
|
||||||
bindsym $mod+9 workspace number 9
|
|
||||||
bindsym $mod+0 workspace number 10
|
|
||||||
|
|
||||||
bindsym $mod+Shift+1 move container to workspace number 1
|
|
||||||
bindsym $mod+Shift+2 move container to workspace number 2
|
|
||||||
bindsym $mod+Shift+3 move container to workspace number 3
|
|
||||||
bindsym $mod+Shift+4 move container to workspace number 4
|
|
||||||
bindsym $mod+Shift+5 move container to workspace number 5
|
|
||||||
bindsym $mod+Shift+6 move container to workspace number 6
|
|
||||||
bindsym $mod+Shift+7 move container to workspace number 7
|
|
||||||
bindsym $mod+Shift+8 move container to workspace number 8
|
|
||||||
bindsym $mod+Shift+9 move container to workspace number 9
|
|
||||||
bindsym $mod+Shift+0 move container to workspace number 10
|
|
||||||
|
|
||||||
bindsym $mod+b splith
|
|
||||||
bindsym $mod+v splitv
|
|
||||||
|
|
||||||
bindsym $mod+equal fullscreen
|
|
||||||
bindsym $mod+Shift+f floating toggle
|
|
||||||
bindsym $mod+f focus mode_toggle
|
|
||||||
|
|
||||||
bindsym $mod+a focus parent
|
|
||||||
|
|
||||||
bindsym $mod+Shift+minus move scratchpad
|
|
||||||
bindsym $mod+minus scratchpad show
|
|
||||||
|
|
||||||
### Media keys
|
|
||||||
bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
|
|
||||||
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
|
|
||||||
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
|
|
||||||
bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
|
||||||
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
|
|
||||||
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
|
|
||||||
|
|
||||||
### Screenshots
|
|
||||||
bindsym Print exec grim -g "$(slurp)" - | wl-copy
|
|
||||||
bindsym $mod+Print exec grim - | wl-copy
|
|
||||||
|
|
||||||
bar {
|
|
||||||
colors {
|
|
||||||
focused_workspace $b01 $b01 $b05
|
|
||||||
}
|
|
||||||
font pango:Hack Nerd Font 10
|
|
||||||
position bottom
|
|
||||||
status_command ~/.config/sway/status.sh
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
while :; do
|
|
||||||
capacity=$(cat /sys/class/power_supply/BAT0/capacity 2>/dev/null || echo n/a)
|
|
||||||
temp=$(awk '{printf "%d", $1/1000}' /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo n/a)
|
|
||||||
datetime=$(date +'%a %d %b %T')
|
|
||||||
|
|
||||||
echo "${capacity}% | ${temp}C | ${datetime}"
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# see https://github.com/sigoden/aichat/blob/main/config.example.yaml
|
|
||||||
|
|
||||||
model: openrouter:xiaomi/mimo-v2-flash
|
|
||||||
clients:
|
|
||||||
- type: openai-compatible
|
|
||||||
name: openrouter
|
|
||||||
api_base: https://openrouter.ai/api/v1
|
|
||||||
api_key:
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,42 +0,0 @@
|
|||||||
if status is-interactive
|
|
||||||
zoxide init fish | source
|
|
||||||
|
|
||||||
set -U fish_greeting
|
|
||||||
|
|
||||||
set -gx EDITOR nvim
|
|
||||||
set -gx VISUAL nvim
|
|
||||||
|
|
||||||
set -gx PAGER less
|
|
||||||
set -gx LESS "-R --mouse -F -X"
|
|
||||||
|
|
||||||
abbr -a v 'nvim'
|
|
||||||
abbr -a vi 'nvim'
|
|
||||||
abbr -a ll 'ls -lah'
|
|
||||||
abbr -a la 'ls -A'
|
|
||||||
abbr -a .. 'cd ..'
|
|
||||||
abbr -a ... 'cd ../..'
|
|
||||||
|
|
||||||
abbr -a cp 'cp -i'
|
|
||||||
abbr -a mv 'mv -i'
|
|
||||||
abbr -a rm 'rm -i'
|
|
||||||
|
|
||||||
alias ai="aichat"
|
|
||||||
alias llm="aichat"
|
|
||||||
|
|
||||||
if type -q fzf
|
|
||||||
fzf --fish | source
|
|
||||||
end
|
|
||||||
|
|
||||||
if type -q starship
|
|
||||||
if test "$TERM" != linux
|
|
||||||
starship init fish | source
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -z "$WAYLAND_DISPLAY"; and test (tty) = "/dev/tty1"
|
|
||||||
exec sway
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
[main]
|
|
||||||
font=Hack Nerd Font:size=10
|
|
||||||
|
|
||||||
[colors-dark]
|
|
||||||
background=101010
|
|
||||||
@@ -1,606 +0,0 @@
|
|||||||
-- Leaders / globals
|
|
||||||
vim.g.mapleader = " "
|
|
||||||
vim.g.maplocalleader = " "
|
|
||||||
|
|
||||||
-- Options
|
|
||||||
vim.opt.termguicolors = true
|
|
||||||
vim.opt.number = true
|
|
||||||
vim.opt.relativenumber = true
|
|
||||||
vim.opt.signcolumn = "yes"
|
|
||||||
vim.opt.cursorline = true
|
|
||||||
vim.opt.laststatus = 2
|
|
||||||
|
|
||||||
vim.opt.splitbelow = true
|
|
||||||
vim.opt.splitright = true
|
|
||||||
|
|
||||||
vim.opt.ignorecase = true
|
|
||||||
vim.opt.smartcase = true
|
|
||||||
vim.opt.incsearch = true
|
|
||||||
vim.opt.hlsearch = true
|
|
||||||
vim.opt.expandtab = true
|
|
||||||
vim.opt.tabstop = 2
|
|
||||||
vim.opt.shiftwidth = 2
|
|
||||||
vim.opt.softtabstop = 2
|
|
||||||
vim.opt.smartindent = true
|
|
||||||
vim.opt.breakindent = true
|
|
||||||
|
|
||||||
vim.opt.undofile = true
|
|
||||||
vim.opt.swapfile = false
|
|
||||||
vim.opt.backup = false
|
|
||||||
vim.opt.confirm = true
|
|
||||||
|
|
||||||
vim.opt.clipboard = "unnamedplus"
|
|
||||||
|
|
||||||
vim.opt.scrolloff = 8
|
|
||||||
|
|
||||||
|
|
||||||
-- Keymaps
|
|
||||||
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR><Esc>", { desc = "Clear search highlight" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "j", "gj", { silent = true })
|
|
||||||
vim.keymap.set("n", "k", "gk", { silent = true })
|
|
||||||
vim.keymap.set("v", "<", "<gv")
|
|
||||||
vim.keymap.set("v", ">", ">gv")
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<C-s>", function()
|
|
||||||
vim.lsp.buf.format({ timeout_ms = 2000 })
|
|
||||||
vim.cmd("w")
|
|
||||||
end, { desc = "Format + Write" })
|
|
||||||
|
|
||||||
vim.keymap.set("i", "<C-s>", function()
|
|
||||||
vim.cmd("stopinsert")
|
|
||||||
vim.lsp.buf.format({ timeout_ms = 2000 })
|
|
||||||
vim.cmd("w")
|
|
||||||
end, { desc = "Format + Write" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Window left" })
|
|
||||||
vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Window down" })
|
|
||||||
vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Window up" })
|
|
||||||
vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Window right" })
|
|
||||||
|
|
||||||
vim.keymap.set("t", "<C-h>", [[<C-\><C-n><C-w>h]], { desc = "Terminal window left" })
|
|
||||||
vim.keymap.set("t", "<C-j>", [[<C-\><C-n><C-w>j]], { desc = "Terminal window down" })
|
|
||||||
vim.keymap.set("t", "<C-k>", [[<C-\><C-n><C-w>k]], { desc = "Terminal window up" })
|
|
||||||
vim.keymap.set("t", "<C-l>", [[<C-\><C-n><C-w>l]], { desc = "Terminal window right" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>bb", "<cmd>buffers<CR>", { desc = "List buffers" })
|
|
||||||
vim.keymap.set("n", "<leader>bl", "<cmd>b#<CR>", { desc = "Last buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bD", "<cmd>bdelete!<CR>", { desc = "Force delete buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bw", "<cmd>bwipeout<CR>", { desc = "Wipe buffer" })
|
|
||||||
vim.keymap.set("n", "<leader>bo", "<cmd>%bdelete|edit#|bdelete#<CR>", { desc = "Delete other buffers" })
|
|
||||||
vim.keymap.set("n", "<leader>ba", "<cmd>%bdelete<CR>", { desc = "Delete all buffers" })
|
|
||||||
|
|
||||||
vim.keymap.set('n', 'H', ':bprevious<CR>', { silent = true })
|
|
||||||
vim.keymap.set('n', 'L', ':bnext<CR>', { silent = true })
|
|
||||||
|
|
||||||
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>', { noremap = true, silent = true })
|
|
||||||
|
|
||||||
|
|
||||||
-- lazy.nvim bootstrap
|
|
||||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
||||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
|
||||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
|
||||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
|
||||||
if vim.v.shell_error ~= 0 then
|
|
||||||
vim.api.nvim_echo({
|
|
||||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
|
||||||
{ out, "WarningMsg" },
|
|
||||||
{ "\nPress any key to exit..." },
|
|
||||||
}, true, {})
|
|
||||||
vim.fn.getchar()
|
|
||||||
os.exit(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
-- Plugins
|
|
||||||
require("lazy").setup({
|
|
||||||
-- Themes
|
|
||||||
{
|
|
||||||
"vague-theme/vague.nvim",
|
|
||||||
lazy = false,
|
|
||||||
priority = 1000,
|
|
||||||
config = function()
|
|
||||||
vim.cmd("colorscheme koda")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{ "rebelot/kanagawa.nvim" },
|
|
||||||
{ "nendix/zen.nvim"},
|
|
||||||
{ "oskarnurm/koda.nvim" },
|
|
||||||
{ "datsfilipe/vesper.nvim" },
|
|
||||||
{ "metalelf0/base16-black-metal-scheme" },
|
|
||||||
|
|
||||||
-- LSP / Completion
|
|
||||||
{ "neovim/nvim-lspconfig" },
|
|
||||||
{
|
|
||||||
"saghen/blink.cmp",
|
|
||||||
version = "1.*",
|
|
||||||
opts = {
|
|
||||||
keymap = {
|
|
||||||
preset = "none",
|
|
||||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
|
||||||
["<C-e>"] = { "hide" },
|
|
||||||
|
|
||||||
["<C-up>"] = { "scroll_documentation_up" },
|
|
||||||
["<C-down>"] = { "scroll_documentation_down" },
|
|
||||||
|
|
||||||
["<CR>"] = { "accept", "fallback" },
|
|
||||||
|
|
||||||
["<Tab>"] = { "snippet_forward", "fallback" },
|
|
||||||
["<S-Tab>"] = { "snippet_backward", "fallback" },
|
|
||||||
|
|
||||||
["<C-n>"] = { "select_next", "fallback" },
|
|
||||||
["<C-p>"] = { "select_prev", "fallback" },
|
|
||||||
|
|
||||||
},
|
|
||||||
completion = {
|
|
||||||
documentation = {
|
|
||||||
auto_show = true,
|
|
||||||
},
|
|
||||||
list = {
|
|
||||||
selection = {
|
|
||||||
auto_insert = false,
|
|
||||||
preselect = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sources = {
|
|
||||||
default = { "lsp", "path", "buffer", "snippets" },
|
|
||||||
},
|
|
||||||
snippets = {
|
|
||||||
preset = "luasnip",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
version = "v2.*",
|
|
||||||
build = "make install_jsregexp",
|
|
||||||
dependencies = { "rafamadriz/friendly-snippets" },
|
|
||||||
config = function()
|
|
||||||
local luasnip = require("luasnip")
|
|
||||||
luasnip.config.setup({
|
|
||||||
history = true,
|
|
||||||
update_events = { "TextChanged", "TextChangedI" },
|
|
||||||
region_check_events = { "CursorMoved", "CursorHold", "InsertEnter" },
|
|
||||||
delete_check_events = { "TextChanged", "InsertLeave" },
|
|
||||||
enable_autosnippets = true,
|
|
||||||
store_selection_keys = "<Tab>",
|
|
||||||
})
|
|
||||||
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
|
||||||
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"lervag/vimtex",
|
|
||||||
lazy = false,
|
|
||||||
init = function()
|
|
||||||
vim.g.vimtex_view_method = "zathura"
|
|
||||||
vim.g.vimtex_quickfix_mode = 0
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"iurimateus/luasnip-latex-snippets.nvim",
|
|
||||||
dependencies = { "L3MON4D3/LuaSnip", "lervag/vimtex" },
|
|
||||||
config = function()
|
|
||||||
require('luasnip-latex-snippets').setup({
|
|
||||||
use_treesitter = true
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"chomosuke/typst-preview.nvim",
|
|
||||||
lazy = false,
|
|
||||||
version = "1.*",
|
|
||||||
opts = {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"selimacerbas/markdown-preview.nvim",
|
|
||||||
dependencies = { "selimacerbas/live-server.nvim" },
|
|
||||||
config = function()
|
|
||||||
require("markdown_preview").setup({
|
|
||||||
port = 8421,
|
|
||||||
open_browser = false,
|
|
||||||
debounce_ms = 0,
|
|
||||||
mermaid_renderer = "rust"
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'MeanderingProgrammer/render-markdown.nvim',
|
|
||||||
dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
|
|
||||||
---@module 'render-markdown'
|
|
||||||
---@type render.md.UserConfig
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"NickvanDyke/opencode.nvim",
|
|
||||||
config = function()
|
|
||||||
vim.g.opencode_opts = {}
|
|
||||||
vim.o.autoread = true
|
|
||||||
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>aa", function() require("opencode").ask("@this: ", { submit = true }) end,
|
|
||||||
{ desc = "AI Ask" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>as", function() require("opencode").select() end,
|
|
||||||
{ desc = "AI Select action" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>at", function() require("opencode").toggle() end,
|
|
||||||
{ desc = "AI Toggle panel" })
|
|
||||||
vim.keymap.set({ "n", "x" }, "<leader>ar", function() return require("opencode").operator("@this ") end,
|
|
||||||
{ desc = "AI Add range", expr = true })
|
|
||||||
vim.keymap.set("n", "<leader>al", function() return require("opencode").operator("@this ") .. "_" end,
|
|
||||||
{ desc = "AI Add line", expr = true })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>au", function() require("opencode").command("session.half.page.up") end,
|
|
||||||
{ desc = "AI Scroll up" })
|
|
||||||
vim.keymap.set("n", "<leader>ad", function() require("opencode").command("session.half.page.down") end,
|
|
||||||
{ desc = "AI Scroll down" })
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"github/copilot.vim",
|
|
||||||
init = function()
|
|
||||||
vim.g.copilot_no_tab_map = true
|
|
||||||
vim.g.copilot_assume_mapped = true
|
|
||||||
end,
|
|
||||||
config = function()
|
|
||||||
vim.keymap.set("i", "<M-CR>", 'copilot#Accept("\\<CR>")', {
|
|
||||||
expr = true,
|
|
||||||
replace_keycodes = false,
|
|
||||||
silent = true
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("i", "<M-'>", 'copilot#AcceptWord()', { expr = true, silent = true })
|
|
||||||
vim.keymap.set("i", "<M-;>", 'copilot#AcceptLine()', { expr = true, silent = true })
|
|
||||||
vim.keymap.set("n", "<leader>ac", "<cmd>Copilot toggle<CR>", { desc = "Toggle Copilot" })
|
|
||||||
end
|
|
||||||
},
|
|
||||||
-- File explorer / Search
|
|
||||||
{
|
|
||||||
"nvim-neo-tree/neo-tree.nvim",
|
|
||||||
branch = "v3.x",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
"MunifTanjim/nui.nvim",
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
},
|
|
||||||
lazy = false,
|
|
||||||
opts = {
|
|
||||||
window = {
|
|
||||||
width = 80,
|
|
||||||
},
|
|
||||||
filesystem = {
|
|
||||||
filtered_items = {
|
|
||||||
hide_dotfiles = false,
|
|
||||||
},
|
|
||||||
follow_current_file = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
group_empty_dirs = true,
|
|
||||||
},
|
|
||||||
default_component_configs = {
|
|
||||||
indent = {
|
|
||||||
indent_size = 2,
|
|
||||||
with_markers = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>e",
|
|
||||||
function()
|
|
||||||
vim.cmd("Neotree position=right toggle")
|
|
||||||
end,
|
|
||||||
desc = "Neo-tree (right)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"stevearc/oil.nvim",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
opts = {},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>E", "<cmd>Oil<CR>", desc = "Oil" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ibhagwan/fzf-lua",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
opts = function()
|
|
||||||
local actions = require("fzf-lua.actions")
|
|
||||||
return {
|
|
||||||
files = {
|
|
||||||
actions = {
|
|
||||||
["default"] = actions.file_edit,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
keys = {
|
|
||||||
{ "<leader>ff", function() require("fzf-lua").files() end, desc = "Find files" },
|
|
||||||
{ "<leader>fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" },
|
|
||||||
{ "<leader>fo", function() require("fzf-lua").oldfiles() end, desc = "Find recent files" },
|
|
||||||
{ "<leader>ft", function() require("fzf-lua").live_grep() end, desc = "Find text in project" },
|
|
||||||
{ "<leader>fs", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find document symbols" },
|
|
||||||
|
|
||||||
{ "<M-/>", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
|
|
||||||
{ "<leader>/", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
|
|
||||||
|
|
||||||
{ "<leader>fh", function() require("fzf-lua").helptags() end, desc = "Find help tags" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Git
|
|
||||||
{
|
|
||||||
"tpope/vim-fugitive",
|
|
||||||
cmd = { "Git", "G" },
|
|
||||||
},
|
|
||||||
{ "lewis6991/gitsigns.nvim" },
|
|
||||||
{
|
|
||||||
"kdheepak/lazygit.nvim",
|
|
||||||
lazy = true,
|
|
||||||
cmd = {
|
|
||||||
"LazyGit",
|
|
||||||
"LazyGitConfig",
|
|
||||||
"LazyGitCurrentFile",
|
|
||||||
"LazyGitFilter",
|
|
||||||
"LazyGitFilterCurrentFile",
|
|
||||||
},
|
|
||||||
dependencies = {
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Editing utilities
|
|
||||||
{ "MagicDuck/grug-far.nvim" },
|
|
||||||
{
|
|
||||||
"kylechui/nvim-surround",
|
|
||||||
event = "VeryLazy",
|
|
||||||
config = function()
|
|
||||||
require("nvim-surround").setup({})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"windwp/nvim-autopairs",
|
|
||||||
event = "InsertEnter",
|
|
||||||
config = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'abecodes/tabout.nvim',
|
|
||||||
lazy = false,
|
|
||||||
config = function()
|
|
||||||
require('tabout').setup {
|
|
||||||
tabkey = '<Tab>', -- key to trigger tabout, set to an empty string to disable
|
|
||||||
backwards_tabkey = '<S-Tab>', -- key to trigger backwards tabout, set to an empty string to disable
|
|
||||||
act_as_tab = true, -- shift content if tab out is not possible
|
|
||||||
act_as_shift_tab = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports <S-Tab>)
|
|
||||||
default_tab = '<C-t>', -- shift default action (only at the beginning of a line, otherwise <TAB> is used)
|
|
||||||
default_shift_tab = '<C-d>', -- reverse shift default action,
|
|
||||||
enable_backwards = true, -- well ...
|
|
||||||
completion = false, -- if the tabkey is used in a completion pum
|
|
||||||
tabouts = {
|
|
||||||
{ open = "'", close = "'" },
|
|
||||||
{ open = '"', close = '"' },
|
|
||||||
{ open = '`', close = '`' },
|
|
||||||
{ open = '(', close = ')' },
|
|
||||||
{ open = '[', close = ']' },
|
|
||||||
{ open = '{', close = '}' },
|
|
||||||
{ open = ',', close = ',' }
|
|
||||||
},
|
|
||||||
ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]]
|
|
||||||
exclude = {} -- tabout will ignore these filetypes
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
dependencies = { -- These are optional
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
},
|
|
||||||
event = 'InsertCharPre', -- Set the event to 'InsertCharPre' for better compatibility
|
|
||||||
priority = 1000,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Motion / UI
|
|
||||||
{
|
|
||||||
"folke/flash.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {
|
|
||||||
modes = {
|
|
||||||
treesitter = {
|
|
||||||
jump = { pos = "start" }, -- or "end"
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
|
|
||||||
{ "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
event = { "BufReadPost", "BufNewFile" },
|
|
||||||
build = ":TSUpdate",
|
|
||||||
config = function()
|
|
||||||
require("nvim-treesitter").setup({
|
|
||||||
ensure_installed = {
|
|
||||||
"markdown",
|
|
||||||
"markdown_inline",
|
|
||||||
"go",
|
|
||||||
"latex",
|
|
||||||
"typst",
|
|
||||||
"lua",
|
|
||||||
},
|
|
||||||
highlight = {
|
|
||||||
enable = true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wellle/targets.vim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'nvim-lualine/lualine.nvim',
|
|
||||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
|
||||||
opts = function()
|
|
||||||
local function pretty_path()
|
|
||||||
local name = vim.api.nvim_buf_get_name(0)
|
|
||||||
if name == '' then return '[No Name]' end
|
|
||||||
-- Relative to current working directory, nicely normalized
|
|
||||||
return vim.fn.fnamemodify(name, ':.')
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
options = {
|
|
||||||
section_separators = '',
|
|
||||||
component_separators = '',
|
|
||||||
globalstatus = true,
|
|
||||||
},
|
|
||||||
|
|
||||||
sections = {
|
|
||||||
lualine_a = { 'mode' },
|
|
||||||
lualine_b = { { 'branch', icon = '' }, 'diff' },
|
|
||||||
lualine_c = {
|
|
||||||
{ 'diagnostics' }, -- uses vim.diagnostic by default
|
|
||||||
{ 'filename', path = 1, symbols = { modified = ' ●', readonly = ' ' } },
|
|
||||||
},
|
|
||||||
lualine_x = { 'encoding', 'fileformat', 'filetype', require("opencode").statusline },
|
|
||||||
lualine_y = { 'progress' },
|
|
||||||
lualine_z = { 'location' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Global list (best place for buffers)
|
|
||||||
tabline = {
|
|
||||||
lualine_a = {
|
|
||||||
{
|
|
||||||
'buffers',
|
|
||||||
show_filename_only = true,
|
|
||||||
show_modified_status = true,
|
|
||||||
mode = 2,
|
|
||||||
max_length = vim.o.columns * 8 / 10,
|
|
||||||
use_mode_colors = true,
|
|
||||||
buffers_color = {
|
|
||||||
active = 'lualine_a_normal',
|
|
||||||
inactive = 'lualine_b_inactive',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
lualine_z = { 'tabs' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"goolord/alpha-nvim",
|
|
||||||
dependencies = {
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
require("alpha").setup(require("alpha.themes.theta").config)
|
|
||||||
end
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"chentoast/marks.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"leath-dub/snipe.nvim",
|
|
||||||
keys = {
|
|
||||||
{ "<leader><leader>", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" }
|
|
||||||
},
|
|
||||||
opts = {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"folke/which-key.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
opts = {
|
|
||||||
preset = "helix"
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
"<leader>?",
|
|
||||||
function()
|
|
||||||
require("which-key").show({ global = false })
|
|
||||||
end,
|
|
||||||
desc = "Buffer Local Keymaps (which-key)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"j-hui/fidget.nvim",
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"christoomey/vim-tmux-navigator",
|
|
||||||
cmd = {
|
|
||||||
"TmuxNavigateLeft",
|
|
||||||
"TmuxNavigateDown",
|
|
||||||
"TmuxNavigateUp",
|
|
||||||
"TmuxNavigateRight",
|
|
||||||
"TmuxNavigatePrevious",
|
|
||||||
"TmuxNavigatorProcessList",
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
|
|
||||||
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
|
|
||||||
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
|
|
||||||
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
|
|
||||||
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
-- LSP
|
|
||||||
vim.lsp.config("lua_ls", {
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
diagnostics = {
|
|
||||||
globals = { "vim" },
|
|
||||||
},
|
|
||||||
workspace = {
|
|
||||||
checkThirdParty = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.lsp.enable({
|
|
||||||
"lua_ls",
|
|
||||||
"tinymist",
|
|
||||||
"gopls",
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
|
|
||||||
vim.keymap.set("v", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
|
|
||||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto definition" })
|
|
||||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto declaration" })
|
|
||||||
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Goto implementation" })
|
|
||||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References" })
|
|
||||||
vim.keymap.set("n", "gy", vim.lsp.buf.type_definition, { desc = "Goto type definition" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover" })
|
|
||||||
vim.keymap.set("i", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature help" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cs", vim.lsp.buf.document_symbol, { desc = "Document symbols" })
|
|
||||||
vim.keymap.set("n", "<leader>cS", vim.lsp.buf.workspace_symbol, { desc = "Workspace symbols" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cf", function()
|
|
||||||
vim.lsp.buf.format({ async = true })
|
|
||||||
end, { desc = "Format buffer" })
|
|
||||||
|
|
||||||
vim.keymap.set("n", "<leader>cr", vim.lsp.buf.rename, { desc = "Rename" })
|
|
||||||
|
|
||||||
vim.diagnostic.config({
|
|
||||||
virtual_text = true,
|
|
||||||
signs = true,
|
|
||||||
underline = true,
|
|
||||||
update_in_insert = false,
|
|
||||||
severity_sort = true,
|
|
||||||
float = { border = "rounded", source = "if_many" },
|
|
||||||
})
|
|
||||||
@@ -1,843 +0,0 @@
|
|||||||
-- phill Neovim config (nightly)
|
|
||||||
|
|
||||||
vim.g.mapleader = " "
|
|
||||||
vim.g.maplocalleader = " "
|
|
||||||
|
|
||||||
local opt = vim.opt
|
|
||||||
local map = vim.keymap.set
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Core options
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
opt.number = true
|
|
||||||
opt.relativenumber = true
|
|
||||||
opt.mouse = "a"
|
|
||||||
opt.clipboard = "unnamedplus"
|
|
||||||
|
|
||||||
opt.swapfile = false
|
|
||||||
opt.backup = false
|
|
||||||
opt.writebackup = false
|
|
||||||
opt.undofile = true
|
|
||||||
|
|
||||||
opt.ignorecase = true
|
|
||||||
opt.smartcase = true
|
|
||||||
opt.incsearch = true
|
|
||||||
opt.hlsearch = false
|
|
||||||
|
|
||||||
opt.termguicolors = true
|
|
||||||
opt.signcolumn = "yes"
|
|
||||||
opt.cursorline = true
|
|
||||||
opt.splitbelow = true
|
|
||||||
opt.splitright = true
|
|
||||||
opt.wrap = false
|
|
||||||
opt.linebreak = true
|
|
||||||
opt.breakindent = true
|
|
||||||
opt.scrolloff = 8
|
|
||||||
opt.sidescrolloff = 8
|
|
||||||
opt.updatetime = 200
|
|
||||||
opt.timeoutlen = 300
|
|
||||||
opt.confirm = true
|
|
||||||
opt.showmode = false
|
|
||||||
opt.laststatus = 3
|
|
||||||
opt.pumheight = 12
|
|
||||||
-- opt.cmdheight = 0
|
|
||||||
|
|
||||||
opt.expandtab = true
|
|
||||||
opt.smartindent = true
|
|
||||||
opt.shiftround = true
|
|
||||||
opt.tabstop = 2
|
|
||||||
opt.softtabstop = 2
|
|
||||||
opt.shiftwidth = 2
|
|
||||||
|
|
||||||
opt.list = true
|
|
||||||
opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
|
|
||||||
opt.fillchars = { eob = " " }
|
|
||||||
|
|
||||||
opt.completeopt = { "menu", "menuone", "noselect", "popup", "fuzzy" }
|
|
||||||
opt.winborder = "single"
|
|
||||||
opt.pumborder = "single"
|
|
||||||
|
|
||||||
opt.winbar = "%=%m %t %="
|
|
||||||
opt.showtabline = 0
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Basic keymaps
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
map("n", "<Esc>", "<cmd>nohlsearch<cr><Esc>", { silent = true, desc = "Clear search highlight" })
|
|
||||||
|
|
||||||
-- j/k over display lines when no count is given
|
|
||||||
map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", {
|
|
||||||
expr = true,
|
|
||||||
silent = true,
|
|
||||||
desc = "Down (display line)",
|
|
||||||
})
|
|
||||||
map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", {
|
|
||||||
expr = true,
|
|
||||||
silent = true,
|
|
||||||
desc = "Up (display line)",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Save on Ctrl-s
|
|
||||||
map("n", "<C-s>", "<cmd>update<cr>", { silent = true, desc = "Save" })
|
|
||||||
map("i", "<C-s>", "<Esc><cmd>update<cr>gi", { silent = true, desc = "Save" })
|
|
||||||
map("v", "<C-s>", "<Esc><cmd>update<cr>gv", { silent = true, desc = "Save" })
|
|
||||||
|
|
||||||
-- Window navigation on Ctrl-hjkl
|
|
||||||
map("n", "<C-h>", "<C-w>h", { silent = true, desc = "Window left" })
|
|
||||||
map("n", "<C-j>", "<C-w>j", { silent = true, desc = "Window down" })
|
|
||||||
map("n", "<C-k>", "<C-w>k", { silent = true, desc = "Window up" })
|
|
||||||
map("n", "<C-l>", "<C-w>l", { silent = true, desc = "Window right" })
|
|
||||||
|
|
||||||
map("t", "<C-h>", [[<C-\><C-n><C-w>h]], { silent = true, desc = "Window left" })
|
|
||||||
map("t", "<C-j>", [[<C-\><C-n><C-w>j]], { silent = true, desc = "Window down" })
|
|
||||||
map("t", "<C-k>", [[<C-\><C-n><C-w>k]], { silent = true, desc = "Window up" })
|
|
||||||
map("t", "<C-l>", [[<C-\><C-n><C-w>l]], { silent = true, desc = "Window right" })
|
|
||||||
|
|
||||||
-- Buffer cycling
|
|
||||||
map("n", "H", "<cmd>bprevious<cr>", { silent = true, desc = "Previous buffer" })
|
|
||||||
map("n", "L", "<cmd>bnext<cr>", { silent = true, desc = "Next buffer" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Buffer helpers
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
local function listed_buffers()
|
|
||||||
return vim.tbl_filter(function(buf)
|
|
||||||
return vim.api.nvim_buf_is_valid(buf) and vim.bo[buf].buflisted
|
|
||||||
end, vim.api.nvim_list_bufs())
|
|
||||||
end
|
|
||||||
|
|
||||||
local function delete_buffer(buf, opts)
|
|
||||||
opts = opts or {}
|
|
||||||
if not buf or buf == 0 then
|
|
||||||
buf = vim.api.nvim_get_current_buf()
|
|
||||||
end
|
|
||||||
|
|
||||||
local cmd = opts.wipe
|
|
||||||
and (opts.force and "bwipeout!" or "bwipeout")
|
|
||||||
or (opts.force and "bdelete!" or "bdelete")
|
|
||||||
|
|
||||||
pcall(vim.cmd, cmd .. " " .. buf)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function delete_other_buffers(force)
|
|
||||||
local current = vim.api.nvim_get_current_buf()
|
|
||||||
for _, buf in ipairs(listed_buffers()) do
|
|
||||||
if buf ~= current then
|
|
||||||
delete_buffer(buf, { force = force })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function delete_all_buffers(force)
|
|
||||||
for _, buf in ipairs(listed_buffers()) do
|
|
||||||
delete_buffer(buf, { force = force })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
map("n", "<leader>bb", "<cmd>buffer #<cr>", { silent = true, desc = "Last buffer" })
|
|
||||||
map("n", "<leader>bd", function() delete_buffer(0, { force = false }) end, { desc = "Delete buffer" })
|
|
||||||
map("n", "<leader>bD", function() delete_buffer(0, { force = true }) end, { desc = "Force delete buffer" })
|
|
||||||
map("n", "<leader>bw", function() delete_buffer(0, { wipe = true }) end, { desc = "Wipe buffer" })
|
|
||||||
map("n", "<leader>bo", function() delete_other_buffers(false) end, { desc = "Delete other buffers" })
|
|
||||||
map("n", "<leader>ba", function() delete_all_buffers(false) end, { desc = "Delete all buffers" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- netrw stays the default file browser
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
vim.g.netrw_banner = 1
|
|
||||||
vim.g.netrw_liststyle = 3
|
|
||||||
vim.g.netrw_winsize = 30
|
|
||||||
vim.g.netrw_keepdir = 0
|
|
||||||
|
|
||||||
map("n", "<leader>E", "<cmd>Ex<cr>", { silent = true, desc = "Open netrw" })
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("VimEnter", {
|
|
||||||
callback = function()
|
|
||||||
if vim.fn.argc() == 0 then
|
|
||||||
vim.cmd("Neotree position=current")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Built-in package manager (nightly)
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
-- Optional post-install hooks for plugins that usually need one-time setup.
|
|
||||||
vim.api.nvim_create_autocmd("PackChanged", {
|
|
||||||
callback = function(ev)
|
|
||||||
local data = ev.data or {}
|
|
||||||
local spec = data.spec or {}
|
|
||||||
local name = spec.name
|
|
||||||
local kind = data.kind
|
|
||||||
|
|
||||||
if kind ~= "install" and kind ~= "update" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if name == "nvim-treesitter" then
|
|
||||||
vim.schedule(function()
|
|
||||||
pcall(vim.cmd.packadd, "nvim-treesitter")
|
|
||||||
pcall(function()
|
|
||||||
require("nvim-treesitter.install").update({ with_sync = true })()
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
if name == "markdown-preview.nvim" then
|
|
||||||
vim.schedule(function()
|
|
||||||
pcall(vim.cmd.packadd, "markdown-preview.nvim")
|
|
||||||
pcall(function()
|
|
||||||
vim.fn["mkdp#util#install"]()
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.pack.add({
|
|
||||||
|
|
||||||
{ src = "https://github.com/nvim-lua/plenary.nvim" },
|
|
||||||
{ src = "https://github.com/MunifTanjim/nui.nvim" },
|
|
||||||
{ src = "https://github.com/nvim-tree/nvim-web-devicons" },
|
|
||||||
|
|
||||||
-- Themes
|
|
||||||
{ src = "https://github.com/oskarnurm/koda.nvim" },
|
|
||||||
{ src = "https://github.com/vague-theme/vague.nvim" },
|
|
||||||
{ src = "https://github.com/nendix/zen.nvim" },
|
|
||||||
{ src = "https://github.com/rebelot/kanagawa.nvim" },
|
|
||||||
|
|
||||||
-- Editing / syntax / completion
|
|
||||||
{ src = "https://github.com/nvim-treesitter/nvim-treesitter" },
|
|
||||||
|
|
||||||
{ src = "https://github.com/saghen/blink.lib" },
|
|
||||||
{ src = "https://github.com/saghen/blink.cmp" },
|
|
||||||
|
|
||||||
{ src = "https://github.com/L3MON4D3/LuaSnip" },
|
|
||||||
{ src = "https://github.com/rafamadriz/friendly-snippets" },
|
|
||||||
{ src = "https://gitlab.com/repetitivesin/madol.nvim" },
|
|
||||||
|
|
||||||
-- LSP configs (for vim.lsp.enable)
|
|
||||||
{ src = "https://github.com/neovim/nvim-lspconfig" },
|
|
||||||
|
|
||||||
-- Navigation / search
|
|
||||||
{ src = "https://github.com/ibhagwan/fzf-lua" },
|
|
||||||
{ src = "https://github.com/nvim-neo-tree/neo-tree.nvim" },
|
|
||||||
{ src = "https://github.com/folke/flash.nvim" },
|
|
||||||
{ src = "https://github.com/leath-dub/snipe.nvim" },
|
|
||||||
{ src = "https://github.com/folke/which-key.nvim" },
|
|
||||||
{ src = "https://github.com/mikavilpas/yazi.nvim" },
|
|
||||||
{ src = "https://github.com/christoomey/vim-tmux-navigator"},
|
|
||||||
|
|
||||||
-- Git
|
|
||||||
{ src = "https://github.com/tpope/vim-fugitive" },
|
|
||||||
{ src = "https://github.com/lewis6991/gitsigns.nvim" },
|
|
||||||
{ src = "https://github.com/kdheepak/lazygit.nvim" },
|
|
||||||
|
|
||||||
-- Text objects / editing
|
|
||||||
{ src = "https://github.com/kylechui/nvim-surround" },
|
|
||||||
{ src = "https://github.com/windwp/nvim-autopairs" },
|
|
||||||
{ src = "https://github.com/abecodes/tabout.nvim" },
|
|
||||||
|
|
||||||
-- UI
|
|
||||||
{ src = "https://github.com/nvim-lualine/lualine.nvim" },
|
|
||||||
{ src = "https://github.com/chentoast/marks.nvim" },
|
|
||||||
|
|
||||||
-- Writing / docs
|
|
||||||
{ src = "https://github.com/chomosuke/typst-preview.nvim" },
|
|
||||||
{ src = "https://github.com/iamcco/markdown-preview.nvim" },
|
|
||||||
{ src = "https://github.com/MeanderingProgrammer/render-markdown.nvim" },
|
|
||||||
|
|
||||||
-- AI
|
|
||||||
{ src = "https://github.com/nickjvandyke/opencode.nvim" },
|
|
||||||
{ src = "https://github.com/zbirenbaum/copilot.lua" },
|
|
||||||
|
|
||||||
}, { confirm = false, load = true })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Plugin globals before setup
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
vim.g.mkdp_auto_start = 0
|
|
||||||
vim.g.mkdp_auto_close = 1
|
|
||||||
vim.g.mkdp_filetypes = { "markdown" }
|
|
||||||
|
|
||||||
-- Let native LSP own LSP features; opencode still works for its own UI/actions.
|
|
||||||
vim.g.opencode_opts = {
|
|
||||||
lsp = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
vim.o.autoread = true
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Themes
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("koda").setup({})
|
|
||||||
require("vague").setup({})
|
|
||||||
require("kanagawa").setup({
|
|
||||||
compile = false,
|
|
||||||
background = {
|
|
||||||
dark = "wave",
|
|
||||||
light = "lotus",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require("zen").setup({})
|
|
||||||
|
|
||||||
vim.cmd.colorscheme("vague")
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- which-key
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
local wk = require("which-key")
|
|
||||||
wk.setup({ preset = "helix" })
|
|
||||||
|
|
||||||
wk.add({
|
|
||||||
{ "<leader>b", group = "buffer" },
|
|
||||||
{ "<leader>f", group = "find" },
|
|
||||||
{ "<leader>g", group = "git" },
|
|
||||||
{ "<leader>h", group = "hunks" },
|
|
||||||
{ "<leader>l", group = "lsp" },
|
|
||||||
{ "<leader>m", group = "marks" },
|
|
||||||
{ "<leader>o", group = "opencode" },
|
|
||||||
{ "<leader>t", group = "tree" },
|
|
||||||
{ "<leader>p", group = "preview" },
|
|
||||||
{ "<leader>u", group = "toggles" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- vim-tmux-navigator
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
map("n", "<C-h>", "<cmd>TmuxNavigateLeft<CR>", { silent = true })
|
|
||||||
map("n", "<C-j>", "<cmd>TmuxNavigateDown<CR>", { silent = true })
|
|
||||||
map("n", "<C-k>", "<cmd>TmuxNavigateUp<CR>", { silent = true })
|
|
||||||
map("n", "<C-l>", "<cmd>TmuxNavigateRight<CR>", { silent = true })
|
|
||||||
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Treesitter
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("nvim-treesitter.configs").setup({
|
|
||||||
ensure_installed = {
|
|
||||||
"go",
|
|
||||||
"gomod",
|
|
||||||
"gowork",
|
|
||||||
"gosum",
|
|
||||||
"bash",
|
|
||||||
"c",
|
|
||||||
"cpp",
|
|
||||||
"css",
|
|
||||||
"diff",
|
|
||||||
"html",
|
|
||||||
"javascript",
|
|
||||||
"json",
|
|
||||||
"json5",
|
|
||||||
"latex",
|
|
||||||
"lua",
|
|
||||||
"luadoc",
|
|
||||||
"markdown",
|
|
||||||
"markdown_inline",
|
|
||||||
"python",
|
|
||||||
"query",
|
|
||||||
"regex",
|
|
||||||
"rust",
|
|
||||||
"toml",
|
|
||||||
"tsx",
|
|
||||||
"typst",
|
|
||||||
"typescript",
|
|
||||||
"vim",
|
|
||||||
"vimdoc",
|
|
||||||
"yaml",
|
|
||||||
},
|
|
||||||
auto_install = true,
|
|
||||||
highlight = { enable = true },
|
|
||||||
indent = { enable = true },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- LuaSnip
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
local ls = require("luasnip")
|
|
||||||
|
|
||||||
ls.config.setup({
|
|
||||||
history = true,
|
|
||||||
update_events = "TextChanged,TextChangedI",
|
|
||||||
delete_check_events = "TextChanged",
|
|
||||||
enable_autosnippets = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
|
||||||
|
|
||||||
require("madol").setup({
|
|
||||||
rmarkdown = {
|
|
||||||
snippets = {
|
|
||||||
["greek-tex"] = true,
|
|
||||||
["greek-unicode"] = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
map({ "i", "s" }, "<C-j>", function()
|
|
||||||
if ls.choice_active() then
|
|
||||||
ls.change_choice(1)
|
|
||||||
end
|
|
||||||
end, { desc = "LuaSnip next choice" })
|
|
||||||
|
|
||||||
map({ "i", "s" }, "<C-k>", function()
|
|
||||||
if ls.choice_active() then
|
|
||||||
ls.change_choice(-1)
|
|
||||||
end
|
|
||||||
end, { desc = "LuaSnip previous choice" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- blink.cmp
|
|
||||||
-- ============================================================================
|
|
||||||
--
|
|
||||||
|
|
||||||
require("blink.cmp").build():pwait()
|
|
||||||
|
|
||||||
require("blink.cmp").setup({
|
|
||||||
snippets = {
|
|
||||||
preset = "luasnip",
|
|
||||||
},
|
|
||||||
completion = {
|
|
||||||
menu = { auto_show = true },
|
|
||||||
ghost_text = { enabled = false },
|
|
||||||
documentation = {
|
|
||||||
auto_show = true,
|
|
||||||
auto_show_delay_ms = 200,
|
|
||||||
},
|
|
||||||
list = {
|
|
||||||
selection = {
|
|
||||||
preselect = false,
|
|
||||||
auto_insert = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keymap = {
|
|
||||||
preset = "none",
|
|
||||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
|
||||||
["<C-e>"] = { "hide" },
|
|
||||||
|
|
||||||
["<C-up>"] = { "scroll_documentation_up" },
|
|
||||||
["<C-down>"] = { "scroll_documentation_down" },
|
|
||||||
|
|
||||||
["<CR>"] = { "accept", "fallback" },
|
|
||||||
|
|
||||||
["<C-n>"] = { "select_next", "fallback" },
|
|
||||||
["<C-p>"] = { "select_prev", "fallback" },
|
|
||||||
|
|
||||||
["<C-l>"] = { "snippet_forward", "fallback" },
|
|
||||||
["<C-h>"] = { "snippet_backward", "fallback" },
|
|
||||||
|
|
||||||
|
|
||||||
},
|
|
||||||
sources = {
|
|
||||||
default = { "lsp", "path", "snippets", "buffer" },
|
|
||||||
},
|
|
||||||
fuzzy = {
|
|
||||||
implementation = "rust"
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Copilot
|
|
||||||
-- Included, but practically "off by default" because auto_trigger = false.
|
|
||||||
-- Toggle it on/off with <leader>uc.
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("User", {
|
|
||||||
pattern = "BlinkCmpMenuOpen",
|
|
||||||
callback = function()
|
|
||||||
vim.b.copilot_suggestion_hidden = true
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("User", {
|
|
||||||
pattern = "BlinkCmpMenuClose",
|
|
||||||
callback = function()
|
|
||||||
vim.b.copilot_suggestion_hidden = false
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
require("copilot").setup({
|
|
||||||
panel = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
suggestion = {
|
|
||||||
enabled = true,
|
|
||||||
auto_trigger = false,
|
|
||||||
hide_during_completion = true,
|
|
||||||
keymap = {
|
|
||||||
accept = "<M-l>",
|
|
||||||
next = "<M-]>",
|
|
||||||
prev = "<M-[>",
|
|
||||||
dismiss = "<C-]>",
|
|
||||||
toggle_auto_trigger = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader>ac", function()
|
|
||||||
require("copilot.suggestion").toggle_auto_trigger()
|
|
||||||
end, { desc = "Toggle Copilot auto-trigger" })
|
|
||||||
|
|
||||||
map("n", "<leader>ap", function()
|
|
||||||
require("copilot.panel").toggle()
|
|
||||||
end, { desc = "Toggle Copilot panel" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- autopairs / tabout / surround
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("nvim-autopairs").setup({
|
|
||||||
check_ts = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
require("tabout").setup({
|
|
||||||
tabkey = "<Tab>",
|
|
||||||
backwards_tabkey = "<S-Tab>",
|
|
||||||
act_as_tab = true,
|
|
||||||
act_as_shift_tab = true,
|
|
||||||
default_tab = "<C-t>",
|
|
||||||
default_shift_tab = "<C-d>",
|
|
||||||
enable_backwards = true,
|
|
||||||
completion = false,
|
|
||||||
ignore_beginning = true,
|
|
||||||
tabouts = {
|
|
||||||
{ open = "'", close = "'" },
|
|
||||||
{ open = '"', close = '"' },
|
|
||||||
{ open = "`", close = "`" },
|
|
||||||
{ open = "(", close = ")" },
|
|
||||||
{ open = "[", close = "]" },
|
|
||||||
{ open = "{", close = "}" },
|
|
||||||
{ open = "$", close = "$" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
require("nvim-surround").setup({})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- flash.nvim
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("flash").setup({})
|
|
||||||
|
|
||||||
map({ "n", "x", "o" }, "s", function() require("flash").jump() end, { desc = "Flash" })
|
|
||||||
map({ "n", "x", "o" }, "S", function() require("flash").treesitter() end, { desc = "Flash Treesitter" })
|
|
||||||
map("o", "r", function() require("flash").remote() end, { desc = "Remote Flash" })
|
|
||||||
map({ "o", "x" }, "R", function() require("flash").treesitter_search() end, { desc = "Treesitter Search" })
|
|
||||||
map("c", "<C-s>", function() require("flash").toggle() end, { desc = "Toggle Flash Search" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- marks.nvim
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("marks").setup({
|
|
||||||
default_mappings = true,
|
|
||||||
builtin_marks = { ".", "<", ">", "^" },
|
|
||||||
cyclic = true,
|
|
||||||
force_write_shada = false,
|
|
||||||
refresh_interval = 250,
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader>mb", "<cmd>MarksListBuf<cr>", { silent = true, desc = "Marks in buffer" })
|
|
||||||
map("n", "<leader>ma", "<cmd>MarksListAll<cr>", { silent = true, desc = "All marks" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- snipe.nvim
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("snipe").setup({
|
|
||||||
ui = {
|
|
||||||
position = "center",
|
|
||||||
preselect_current = true,
|
|
||||||
text_align = "file-first",
|
|
||||||
},
|
|
||||||
hints = {
|
|
||||||
dictionary = "sadflewcmpghio",
|
|
||||||
},
|
|
||||||
navigate = {
|
|
||||||
cancel_snipe = "<Esc>",
|
|
||||||
close_buffer = "D",
|
|
||||||
open_vsplit = "V",
|
|
||||||
open_split = "H",
|
|
||||||
},
|
|
||||||
sort = "last",
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader><leader>", function() require("snipe").open_buffer_menu() end, { desc = "Snipe buffers" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Markdown / Typst
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("render-markdown").setup({
|
|
||||||
file_types = { "markdown" },
|
|
||||||
render_modes = { "n", "c", "t" },
|
|
||||||
})
|
|
||||||
|
|
||||||
require("typst-preview").setup({
|
|
||||||
follow_cursor = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Typst
|
|
||||||
map("n", "<leader>ptp", "<cmd>TypstPreview<cr>", { silent = true, desc = "Typst preview" })
|
|
||||||
map("n", "<leader>ptP", "<cmd>TypstPreviewToggle<cr>", { silent = true, desc = "Toggle Typst preview" })
|
|
||||||
|
|
||||||
-- Markdown
|
|
||||||
map("n", "<leader>pmp", "<cmd>MarkdownPreview<cr>", { silent = true, desc = "Markdown preview" })
|
|
||||||
map("n", "<leader>pmr", "<cmd>RenderMarkdown toggle<cr>", { silent = true, desc = "Toggle render-markdown" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- fzf-lua
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("fzf-lua").setup({
|
|
||||||
actions = {
|
|
||||||
files = {
|
|
||||||
["enter"] = require("fzf-lua.actions").file_edit,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader>ff", function() require("fzf-lua").files() end, { desc = "Files" })
|
|
||||||
map("n", "<leader>db", function() require("fzf-lua").buffers() end, { desc = "Buffers" })
|
|
||||||
map("n", "<leader>bl", function() require("fzf-lua").buffers() end, { desc = "List buffers" })
|
|
||||||
map("n", "<leader>ft", function() require("fzf-lua").live_grep() end, { desc = "Live grep" })
|
|
||||||
map("n", "<leader>fs", function() require("fzf-lua").lsp_document_symbols() end, { desc = "Document symbols" })
|
|
||||||
map("n", "<leader>/", function() require("fzf-lua").grep_curbuf() end, { desc = "Grep current buffer" })
|
|
||||||
map("n", "<leader>fh", function() require("fzf-lua").help_tags() end, { desc = "Help tags" })
|
|
||||||
|
|
||||||
-- useful extras
|
|
||||||
map("n", "<leader>fr", function() require("fzf-lua").oldfiles() end, { desc = "Recent files" })
|
|
||||||
map("n", "<leader>fg", function() require("fzf-lua").git_files() end, { desc = "Git files" })
|
|
||||||
map("n", "<leader>fc", function() require("fzf-lua").commands() end, { desc = "Commands" })
|
|
||||||
map("n", "<leader>fk", function() require("fzf-lua").keymaps() end, { desc = "Keymaps" })
|
|
||||||
map("n", "<leader>fd", function() require("fzf-lua").diagnostics_document() end, { desc = "Document diagnostics" })
|
|
||||||
map("n", "<leader>fD", function() require("fzf-lua").diagnostics_workspace() end, { desc = "Workspace diagnostics" })
|
|
||||||
map("n", "<leader>fw", function() require("fzf-lua").grep_cword() end, { desc = "Grep word under cursor" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- neo-tree
|
|
||||||
-- netrw remains default; neo-tree is opt-in on <leader>n
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("neo-tree").setup({
|
|
||||||
close_if_last_window = true,
|
|
||||||
enable_git_status = true,
|
|
||||||
enable_diagnostics = true,
|
|
||||||
filesystem = {
|
|
||||||
hijack_netrw_behavior = "disabled",
|
|
||||||
follow_current_file = { enabled = true },
|
|
||||||
use_libuv_file_watcher = true,
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
width = 80,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader>e", "<cmd>Neotree position=right toggle<cr>", {
|
|
||||||
silent = true,
|
|
||||||
desc = "Neo-tree",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Git
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
require("gitsigns").setup({
|
|
||||||
signs = {
|
|
||||||
add = { text = "▎" },
|
|
||||||
change = { text = "▎" },
|
|
||||||
delete = { text = "" },
|
|
||||||
topdelete = { text = "" },
|
|
||||||
changedelete = { text = "▎" },
|
|
||||||
untracked = { text = "▎" },
|
|
||||||
},
|
|
||||||
on_attach = function(bufnr)
|
|
||||||
local gs = package.loaded.gitsigns
|
|
||||||
|
|
||||||
local function bufmap(mode, lhs, rhs, desc)
|
|
||||||
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, silent = true, desc = desc })
|
|
||||||
end
|
|
||||||
|
|
||||||
bufmap("n", "]h", gs.next_hunk, "Next hunk")
|
|
||||||
bufmap("n", "[h", gs.prev_hunk, "Prev hunk")
|
|
||||||
bufmap("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
|
|
||||||
bufmap("n", "<leader>hr", gs.reset_hunk, "Reset hunk")
|
|
||||||
bufmap("n", "<leader>hS", gs.stage_buffer, "Stage buffer")
|
|
||||||
bufmap("n", "<leader>hR", gs.reset_buffer, "Reset buffer")
|
|
||||||
bufmap("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
|
|
||||||
bufmap("n", "<leader>hb", function() gs.blame_line({ full = true }) end, "Blame line")
|
|
||||||
bufmap("n", "<leader>hd", gs.diffthis, "Diff this")
|
|
||||||
bufmap("n", "<leader>hQ", gs.setqflist, "Hunks to quickfix")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
map("n", "<leader>gg", "<cmd>LazyGit<cr>", { silent = true, desc = "LazyGit" })
|
|
||||||
map("n", "<leader>gs", "<cmd>Git<cr>", { silent = true, desc = "Git status" })
|
|
||||||
map("n", "<leader>gb", "<cmd>Git blame<cr>", { silent = true, desc = "Git blame" })
|
|
||||||
map("n", "<leader>gp", "<cmd>Git push<cr>", { silent = true, desc = "Git push" })
|
|
||||||
map("n", "<leader>gl", "<cmd>Git pull<cr>", { silent = true, desc = "Git pull" })
|
|
||||||
map("n", "<leader>gc", "<cmd>Git commit<cr>", { silent = true, desc = "Git commit" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- opencode.nvim
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
map({ "n", "x" }, "<leader>oa", function()
|
|
||||||
require("opencode").ask("@this: ", { submit = true })
|
|
||||||
end, { desc = "Ask opencode" })
|
|
||||||
|
|
||||||
map({ "n", "x" }, "<leader>os", function()
|
|
||||||
require("opencode").select()
|
|
||||||
end, { desc = "Select opencode action" })
|
|
||||||
|
|
||||||
map({ "n", "t" }, "<leader>oo", function()
|
|
||||||
require("opencode").toggle()
|
|
||||||
end, { desc = "Toggle opencode" })
|
|
||||||
|
|
||||||
map({ "n", "x" }, "<leader>or", function()
|
|
||||||
return require("opencode").operator("@this ")
|
|
||||||
end, { expr = true, desc = "Send range to opencode" })
|
|
||||||
|
|
||||||
map("n", "<leader>ol", function()
|
|
||||||
return require("opencode").operator("@this ") .. "_"
|
|
||||||
end, { expr = true, desc = "Send line to opencode" })
|
|
||||||
|
|
||||||
map("n", "<leader>ou", function()
|
|
||||||
require("opencode").command("session.half.page.up")
|
|
||||||
end, { desc = "Opencode scroll up" })
|
|
||||||
|
|
||||||
map("n", "<leader>od", function()
|
|
||||||
require("opencode").command("session.half.page.down")
|
|
||||||
end, { desc = "Opencode scroll down" })
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- LSP (native nightly flow)
|
|
||||||
-- No Mason. Install server binaries yourself and keep them on PATH.
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
local capabilities = require("blink.cmp").get_lsp_capabilities()
|
|
||||||
|
|
||||||
vim.diagnostic.config({
|
|
||||||
underline = true,
|
|
||||||
severity_sort = true,
|
|
||||||
update_in_insert = false,
|
|
||||||
virtual_text = {
|
|
||||||
spacing = 2,
|
|
||||||
source = "if_many",
|
|
||||||
},
|
|
||||||
float = {
|
|
||||||
border = "rounded",
|
|
||||||
source = "if_many",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Global defaults for all enabled servers
|
|
||||||
vim.lsp.config("*", {
|
|
||||||
capabilities = capabilities,
|
|
||||||
root_markers = { ".git" },
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Per-server overrides
|
|
||||||
vim.lsp.config("lua_ls", {
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
diagnostics = {
|
|
||||||
globals = { "vim" },
|
|
||||||
},
|
|
||||||
workspace = {
|
|
||||||
checkThirdParty = false,
|
|
||||||
},
|
|
||||||
telemetry = {
|
|
||||||
enable = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Adjust this list to the servers you actually have installed.
|
|
||||||
local servers = {
|
|
||||||
"gopls",
|
|
||||||
"lua_ls",
|
|
||||||
"tinymist",
|
|
||||||
"marksman",
|
|
||||||
"pyright",
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, server in ipairs(servers) do
|
|
||||||
vim.lsp.enable(server)
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("LspAttach", {
|
|
||||||
callback = function(ev)
|
|
||||||
local bufnr = ev.buf
|
|
||||||
|
|
||||||
local function lmap(lhs, rhs, desc, mode)
|
|
||||||
vim.keymap.set(mode or "n", lhs, rhs, { buffer = bufnr, silent = true, desc = desc })
|
|
||||||
end
|
|
||||||
|
|
||||||
lmap("gd", vim.lsp.buf.definition, "Goto definition")
|
|
||||||
lmap("gD", vim.lsp.buf.declaration, "Goto declaration")
|
|
||||||
lmap("gi", vim.lsp.buf.implementation, "Goto implementation")
|
|
||||||
lmap("gt", vim.lsp.buf.type_definition, "Goto type definition")
|
|
||||||
lmap("gr", function() require("fzf-lua").lsp_references() end, "References")
|
|
||||||
lmap("K", vim.lsp.buf.hover, "Hover")
|
|
||||||
lmap("gK", vim.lsp.buf.signature_help, "Signature help")
|
|
||||||
|
|
||||||
lmap("<leader>la", vim.lsp.buf.code_action, "Code action", { "n", "x" })
|
|
||||||
lmap("<leader>lr", vim.lsp.buf.rename, "Rename")
|
|
||||||
lmap("<leader>lf", function() vim.lsp.buf.format({ async = true }) end, "Format")
|
|
||||||
lmap("<leader>ld", vim.diagnostic.open_float, "Line diagnostics")
|
|
||||||
lmap("<leader>ls", function() require("fzf-lua").lsp_document_symbols() end, "Document symbols")
|
|
||||||
lmap("<leader>lS", function() require("fzf-lua").lsp_live_workspace_symbols() end, "Workspace symbols")
|
|
||||||
|
|
||||||
lmap("[d", function() vim.diagnostic.jump({ count = -1, float = true }) end, "Prev diagnostic")
|
|
||||||
lmap("]d", function() vim.diagnostic.jump({ count = 1, float = true }) end, "Next diagnostic")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- lualine
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
local function opencode_statusline()
|
|
||||||
local ok, opencode = pcall(require, "opencode")
|
|
||||||
if ok and opencode.statusline then
|
|
||||||
return opencode.statusline()
|
|
||||||
end
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
require("lualine").setup({
|
|
||||||
options = {
|
|
||||||
section_separators = "",
|
|
||||||
component_separators = "",
|
|
||||||
globalstatus = true,
|
|
||||||
theme = "auto",
|
|
||||||
},
|
|
||||||
|
|
||||||
sections = {
|
|
||||||
lualine_a = { "mode" },
|
|
||||||
lualine_b = { { "branch", icon = "" }, "diff" },
|
|
||||||
lualine_c = {
|
|
||||||
{ "diagnostics" },
|
|
||||||
{ "filename", path = 1, symbols = { modified = " ●", readonly = " " } },
|
|
||||||
},
|
|
||||||
lualine_x = { "encoding", "fileformat", "filetype", opencode_statusline },
|
|
||||||
lualine_y = { "progress" },
|
|
||||||
lualine_z = { "location" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
OUTPUT="HDMI-A-2"
|
|
||||||
|
|
||||||
active="$(swaymsg -t get_outputs -r \
|
|
||||||
| jq -r --arg o "$OUTPUT" '.[] | select(.name==$o) | .active')"
|
|
||||||
|
|
||||||
case "$active" in
|
|
||||||
true) swaymsg output "$OUTPUT" disable ;;
|
|
||||||
false) swaymsg output "$OUTPUT" enable ;;
|
|
||||||
*)
|
|
||||||
printf 'Output %s not found or jq parse error\n' "$OUTPUT" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
[env]
|
||||||
|
TERM = "xterm-256color"
|
||||||
|
|
||||||
|
[scrolling]
|
||||||
|
history = 100000
|
||||||
|
multiplier = 3
|
||||||
|
|
||||||
|
[font]
|
||||||
|
size = 10
|
||||||
|
|
||||||
|
[font.normal]
|
||||||
|
family = "Hack Nerd Font"
|
||||||
|
style = "Regular"
|
||||||
|
|
||||||
|
[font.bold]
|
||||||
|
family = "Hack Nerd Font"
|
||||||
|
style = "Bold"
|
||||||
|
|
||||||
|
[font.italic]
|
||||||
|
family = "Hack Nerd Font"
|
||||||
|
style = "Italic"
|
||||||
|
|
||||||
|
[font.bold_italic]
|
||||||
|
family = "Hack Nerd Font"
|
||||||
|
style = "Bold Italic"
|
||||||
|
|
||||||
|
[cursor]
|
||||||
|
style = { shape = "Beam", blinking = "On" }
|
||||||
|
blink_interval = 500
|
||||||
|
unfocused_hollow = true
|
||||||
|
|
||||||
|
[selection]
|
||||||
|
save_to_clipboard = true
|
||||||
|
|
||||||
|
[mouse]
|
||||||
|
hide_when_typing = true
|
||||||
|
|
||||||
|
[keyboard]
|
||||||
|
bindings = [
|
||||||
|
{ key = "N", mods = "Control|Shift", action = "CreateNewWindow" },
|
||||||
|
{ key = "V", mods = "Control|Shift", action = "Paste" },
|
||||||
|
{ key = "C", mods = "Control|Shift", action = "Copy" }
|
||||||
|
]
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# Editor
|
||||||
|
set -gx EDITOR nvim
|
||||||
|
set -gx VISUAL nvim
|
||||||
|
|
||||||
|
# Better defaults
|
||||||
|
set -gx PAGER less
|
||||||
|
set -gx LESS "-R --use-color -Dd+r -Du+b"
|
||||||
|
|
||||||
|
# XDG paths
|
||||||
|
set -gx XDG_CONFIG_HOME "$HOME/.config"
|
||||||
|
set -gx XDG_DATA_HOME "$HOME/.local/share"
|
||||||
|
set -gx XDG_CACHE_HOME "$HOME/.cache"
|
||||||
|
|
||||||
|
# Local binaries
|
||||||
|
fish_add_path "$HOME/.local/bin"
|
||||||
|
fish_add_path "$HOME/.cargo/bin"
|
||||||
|
|
||||||
|
# Wayland-friendly defaults
|
||||||
|
set -gx MOZ_ENABLE_WAYLAND 1
|
||||||
|
set -gx QT_QPA_PLATFORM wayland
|
||||||
|
set -gx SDL_VIDEODRIVER wayland
|
||||||
|
set -gx CLUTTER_BACKEND wayland
|
||||||
|
|
||||||
|
# Fish behavior
|
||||||
|
set fish_greeting
|
||||||
|
|
||||||
|
# Vi-style bindings
|
||||||
|
fish_vi_key_bindings
|
||||||
|
|
||||||
|
# Useful aliases
|
||||||
|
alias ls="ls --color=auto"
|
||||||
|
alias ll="ls -lah"
|
||||||
|
alias la="ls -A"
|
||||||
|
alias grep="grep --color=auto"
|
||||||
|
|
||||||
|
alias c="clear"
|
||||||
|
alias v="nvim"
|
||||||
|
alias svim="sudoedit"
|
||||||
|
|
||||||
|
alias gs="git status"
|
||||||
|
alias ga="git add"
|
||||||
|
alias gc="git commit"
|
||||||
|
alias gp="git push"
|
||||||
|
alias gl="git log --oneline --graph --decorate"
|
||||||
|
|
||||||
|
alias pacup="sudo pacman -Syu"
|
||||||
|
alias pacin="sudo pacman -S"
|
||||||
|
alias pacrm="sudo pacman -Rns"
|
||||||
|
alias pacq="pacman -Qs"
|
||||||
|
|
||||||
|
alias ls="eza --icons"
|
||||||
|
alias ll="eza -lah --icons --git"
|
||||||
|
alias cat="bat"
|
||||||
|
|
||||||
|
if type -q zoxide
|
||||||
|
zoxide init fish | source
|
||||||
|
end
|
||||||
|
|
||||||
|
if type -q fzf
|
||||||
|
fzf --fish | source
|
||||||
|
end
|
||||||
|
|
||||||
|
# Safer defaults
|
||||||
|
alias cp="cp -i"
|
||||||
|
alias mv="mv -i"
|
||||||
|
alias rm="rm -i"
|
||||||
|
|
||||||
|
# Starship prompt
|
||||||
|
if type -q starship
|
||||||
|
starship init fish | source
|
||||||
|
end
|
||||||
|
|
||||||
|
if status is-login
|
||||||
|
and test -z "$WAYLAND_DISPLAY"
|
||||||
|
and test "$XDG_VTNR" = "1"
|
||||||
|
exec sway
|
||||||
|
end
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# This file contains fish universal variable definitions.
|
# This file contains fish universal variable definitions.
|
||||||
# VERSION: 3.0
|
# VERSION: 3.0
|
||||||
SETUVAR __fish_initialized:4300
|
SETUVAR __fish_initialized:4300
|
||||||
SETUVAR fish_greeting:\x1d
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"plugins": {
|
||||||
|
"alpha-nvim": {
|
||||||
|
"rev": "6c6a89d5b068b5251c8bdf0dd57bb921bcfeeb09",
|
||||||
|
"src": "https://github.com/goolord/alpha-nvim"
|
||||||
|
},
|
||||||
|
"blink.cmp": {
|
||||||
|
"rev": "3db7326f54b73df4789e0fd6274bedda33975fea",
|
||||||
|
"src": "https://github.com/saghen/blink.cmp"
|
||||||
|
},
|
||||||
|
"blink.lib": {
|
||||||
|
"rev": "b127d48bf8e9ac9cf41f6e0fbead317503f76558",
|
||||||
|
"src": "https://github.com/saghen/blink.lib"
|
||||||
|
},
|
||||||
|
"fzf-lua": {
|
||||||
|
"rev": "988416cc782dfe28bff3f0da9b8c943b236cd86a",
|
||||||
|
"src": "https://github.com/ibhagwan/fzf-lua"
|
||||||
|
},
|
||||||
|
"gitsigns.nvim": {
|
||||||
|
"rev": "25050e4ed39e628282831d4cbecb1850454ce915",
|
||||||
|
"src": "https://github.com/lewis6991/gitsigns.nvim"
|
||||||
|
},
|
||||||
|
"mini.nvim": {
|
||||||
|
"rev": "d5e6f5b843f1d813d9c4bfb242b751dc5ab6f8ae",
|
||||||
|
"src": "https://github.com/echasnovski/mini.nvim"
|
||||||
|
},
|
||||||
|
"neo-tree.nvim": {
|
||||||
|
"rev": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61",
|
||||||
|
"src": "https://github.com/nvim-neo-tree/neo-tree.nvim",
|
||||||
|
"version": "3.0.0 - 4.0.0"
|
||||||
|
},
|
||||||
|
"nui.nvim": {
|
||||||
|
"rev": "de740991c12411b663994b2860f1a4fd0937c130",
|
||||||
|
"src": "https://github.com/MunifTanjim/nui.nvim"
|
||||||
|
},
|
||||||
|
"nvim-lspconfig": {
|
||||||
|
"rev": "229b79051b380377664edc4cbd534930154921a1",
|
||||||
|
"src": "https://github.com/neovim/nvim-lspconfig"
|
||||||
|
},
|
||||||
|
"nvim-treesitter": {
|
||||||
|
"rev": "4916d6592ede8c07973490d9322f187e07dfefac",
|
||||||
|
"src": "https://github.com/nvim-treesitter/nvim-treesitter",
|
||||||
|
"version": "'main'"
|
||||||
|
},
|
||||||
|
"nvim-web-devicons": {
|
||||||
|
"rev": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c",
|
||||||
|
"src": "https://github.com/nvim-tree/nvim-web-devicons"
|
||||||
|
},
|
||||||
|
"plenary.nvim": {
|
||||||
|
"rev": "74b06c6c75e4eeb3108ec01852001636d85a932b",
|
||||||
|
"src": "https://github.com/nvim-lua/plenary.nvim"
|
||||||
|
},
|
||||||
|
"todo-comments.nvim": {
|
||||||
|
"rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668",
|
||||||
|
"src": "https://github.com/folke/todo-comments.nvim"
|
||||||
|
},
|
||||||
|
"vague.nvim": {
|
||||||
|
"rev": "8ee15ea4505d64ede559ff1cb112582a6f2ea138",
|
||||||
|
"src": "https://github.com/vague-theme/vague.nvim"
|
||||||
|
},
|
||||||
|
"vim-tmux-navigator": {
|
||||||
|
"rev": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432",
|
||||||
|
"src": "https://github.com/christoomey/vim-tmux-navigator"
|
||||||
|
},
|
||||||
|
"which-key.nvim": {
|
||||||
|
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
|
||||||
|
"src": "https://github.com/folke/which-key.nvim"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
add_newline = true
|
||||||
|
command_timeout = 1000
|
||||||
|
|
||||||
|
format = """
|
||||||
|
$username\
|
||||||
|
$hostname\
|
||||||
|
$directory\
|
||||||
|
$git_branch\
|
||||||
|
$git_status\
|
||||||
|
$python\
|
||||||
|
$nodejs\
|
||||||
|
$rust\
|
||||||
|
$golang\
|
||||||
|
$cmd_duration\
|
||||||
|
$line_break\
|
||||||
|
$character"""
|
||||||
|
|
||||||
|
[character]
|
||||||
|
success_symbol = "[❯](bold green)"
|
||||||
|
error_symbol = "[❯](bold red)"
|
||||||
|
vimcmd_symbol = "[❮](bold blue)"
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
style = "bold blue"
|
||||||
|
truncation_length = 3
|
||||||
|
truncate_to_repo = true
|
||||||
|
read_only = " "
|
||||||
|
|
||||||
|
[git_branch]
|
||||||
|
symbol = " "
|
||||||
|
style = "bold mauve"
|
||||||
|
format = "[$symbol$branch]($style) "
|
||||||
|
|
||||||
|
[git_status]
|
||||||
|
style = "bold yellow"
|
||||||
|
format = "[$all_status$ahead_behind]($style) "
|
||||||
|
conflicted = "=${count} "
|
||||||
|
ahead = "⇡${count} "
|
||||||
|
behind = "⇣${count} "
|
||||||
|
diverged = "⇕⇡${ahead_count}⇣${behind_count} "
|
||||||
|
untracked = "?${count} "
|
||||||
|
stashed = "\\$${count} "
|
||||||
|
modified = "!${count} "
|
||||||
|
staged = "+${count} "
|
||||||
|
renamed = "»${count} "
|
||||||
|
deleted = "✘${count} "
|
||||||
|
|
||||||
|
[cmd_duration]
|
||||||
|
min_time = 500
|
||||||
|
format = "took [$duration](bold yellow) "
|
||||||
|
|
||||||
|
[python]
|
||||||
|
symbol = " "
|
||||||
|
format = "[$symbol$version]($style) "
|
||||||
|
style = "bold green"
|
||||||
|
|
||||||
|
[nodejs]
|
||||||
|
symbol = " "
|
||||||
|
format = "[$symbol$version]($style) "
|
||||||
|
style = "bold green"
|
||||||
|
|
||||||
|
[rust]
|
||||||
|
symbol = " "
|
||||||
|
format = "[$symbol$version]($style) "
|
||||||
|
style = "bold red"
|
||||||
|
|
||||||
|
[golang]
|
||||||
|
symbol = " "
|
||||||
|
format = "[$symbol$version]($style) "
|
||||||
|
style = "bold cyan"
|
||||||
@@ -5,7 +5,7 @@ set $down j
|
|||||||
set $up k
|
set $up k
|
||||||
set $right l
|
set $right l
|
||||||
|
|
||||||
set $term foot
|
set $term alacritty
|
||||||
set $menu bemenu-run -b -i --fn "Hack Nerd Font 10" --prompt "Run:" --list "8 up"
|
set $menu bemenu-run -b -i --fn "Hack Nerd Font 10" --prompt "Run:" --list "8 up"
|
||||||
|
|
||||||
set $b00 #141415
|
set $b00 #141415
|
||||||
@@ -50,17 +50,14 @@ input type:keyboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output HDMI-A-1 resolution 2560x1440 pos 0 0
|
output HDMI-A-1 resolution 2560x1440 pos 0 0
|
||||||
output HDMI-A-2 resolution 1920x1080 pos -1920 0
|
|
||||||
|
|
||||||
workspace 1 output HDMI-A-1
|
workspace 1 output HDMI-A-1
|
||||||
workspace 4 output HDMI-A-2
|
|
||||||
|
|
||||||
|
|
||||||
workspace_auto_back_and_forth yes
|
workspace_auto_back_and_forth yes
|
||||||
bindsym $mod+Tab workspace back_and_forth
|
bindsym $mod+Tab workspace back_and_forth
|
||||||
|
|
||||||
bindsym $mod+Shift+m exec ~/.config/sway/toggle-hdmi.sh
|
output * adaptive_sync on
|
||||||
output * adaptive_sync off
|
|
||||||
|
|
||||||
### Key bindings
|
### Key bindings
|
||||||
bindsym $mod+Return exec $term
|
bindsym $mod+Return exec $term
|
||||||
Reference in New Issue
Block a user