Change layout to per-device top level

This commit is contained in:
2026-06-07 01:08:50 +08:00
parent 072e6ae564
commit 42f2931bac
21 changed files with 262 additions and 4038 deletions
-578
View File
@@ -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" },
})
-126
View File
@@ -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
}
-10
View File
@@ -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
-42
View File
@@ -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
-5
View File
@@ -1,5 +0,0 @@
[main]
font=Hack Nerd Font:size=10
[colors-dark]
background=101010
-606
View File
@@ -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" },
})
-843
View File
@@ -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
+43
View File
@@ -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" }
]
+77
View File
@@ -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
+70
View File
@@ -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"
}
}
}
+70
View File
@@ -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