initial commit
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
[main]
|
||||||
|
font=DejaVu Sans Mono:size=14
|
||||||
|
pad=10x10
|
||||||
|
term=foot
|
||||||
|
|
||||||
|
[cursor]
|
||||||
|
style=block
|
||||||
|
blink=no
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
alpha=0.90
|
||||||
|
background=1a1b26
|
||||||
|
foreground=c0caf5
|
||||||
|
regular0=15161e
|
||||||
|
regular1=f7768e
|
||||||
|
regular2=9ece6a
|
||||||
|
regular3=e0af68
|
||||||
|
regular4=7aa2f7
|
||||||
|
regular5=bb9af7
|
||||||
|
regular6=7dcfff
|
||||||
|
regular7=a9b1d6
|
||||||
|
bright0=414868
|
||||||
|
bright1=f7768e
|
||||||
|
bright2=9ece6a
|
||||||
|
bright3=e0af68
|
||||||
|
bright4=7aa2f7
|
||||||
|
bright5=bb9af7
|
||||||
|
bright6=7dcfff
|
||||||
|
bright7=c0caf5
|
||||||
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[user]
|
||||||
|
name = Bartal Læarsson
|
||||||
|
email = bartal@flo.fo
|
||||||
|
signingkey = ~/.ssh/id_ed25519.pub
|
||||||
|
[commit]
|
||||||
|
gpgsign = true
|
||||||
|
[tag]
|
||||||
|
gpgsign = true
|
||||||
|
[gpg]
|
||||||
|
format = ssh
|
||||||
|
[gpg "ssh"]
|
||||||
|
allowedSignersFile = ~/.ssh/allowed_signers
|
||||||
|
[core]
|
||||||
|
editor = nvim
|
||||||
|
autocrlf = input
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
[push]
|
||||||
|
autoSetupRemote = true
|
||||||
|
[init]
|
||||||
|
defaultBranch = main
|
||||||
|
[merge]
|
||||||
|
conflictstyle = diff3
|
||||||
|
[diff]
|
||||||
|
colorMoved = zebra
|
||||||
|
|
||||||
@@ -0,0 +1,490 @@
|
|||||||
|
vim.g.mapleader = " "
|
||||||
|
vim.g.maplocalleader = " "
|
||||||
|
vim.g.have_nerd_font = true
|
||||||
|
vim.o.number = true
|
||||||
|
vim.o.relativenumber = true
|
||||||
|
vim.o.mouse = "a"
|
||||||
|
vim.o.showmode = false
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.o.clipboard = "unnamedplus"
|
||||||
|
end)
|
||||||
|
vim.o.breakindent = true
|
||||||
|
vim.o.undofile = true
|
||||||
|
vim.o.ignorecase = true
|
||||||
|
vim.o.smartcase = true
|
||||||
|
vim.o.signcolumn = "yes"
|
||||||
|
vim.o.updatetime = 250
|
||||||
|
vim.o.timeoutlen = 300
|
||||||
|
vim.o.splitright = true
|
||||||
|
vim.o.splitbelow = true
|
||||||
|
vim.o.list = true
|
||||||
|
vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
|
||||||
|
vim.o.inccommand = "split"
|
||||||
|
vim.o.cursorline = true
|
||||||
|
vim.o.scrolloff = 15
|
||||||
|
vim.o.confirm = true
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>")
|
||||||
|
|
||||||
|
vim.diagnostic.config({
|
||||||
|
update_in_insert = false,
|
||||||
|
severity_sort = true,
|
||||||
|
float = { border = "rounded", source = "if_many" },
|
||||||
|
underline = { severity = { min = vim.diagnostic.severity.WARN } },
|
||||||
|
virtual_text = true,
|
||||||
|
virtual_lines = false,
|
||||||
|
jump = { float = true },
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" })
|
||||||
|
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })
|
||||||
|
vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" })
|
||||||
|
vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" })
|
||||||
|
vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" })
|
||||||
|
vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||||
|
desc = "Highlight when yanking (copying) text",
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.hl.on_yank()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
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
|
||||||
|
error("Error cloning lazy.nvim:\n" .. out)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---@type vim.Option
|
||||||
|
local rtp = vim.opt.rtp
|
||||||
|
rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
require("lazy").setup({
|
||||||
|
{ "NMAC427/guess-indent.nvim", opts = {} },
|
||||||
|
|
||||||
|
{
|
||||||
|
"lewis6991/gitsigns.nvim",
|
||||||
|
---@module 'gitsigns'
|
||||||
|
---@type Gitsigns.Config
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
|
opts = {
|
||||||
|
signs = {
|
||||||
|
add = { text = "+" }, ---@diagnostic disable-line: missing-fields
|
||||||
|
change = { text = "~" }, ---@diagnostic disable-line: missing-fields
|
||||||
|
delete = { text = "_" }, ---@diagnostic disable-line: missing-fields
|
||||||
|
topdelete = { text = "‾" }, ---@diagnostic disable-line: missing-fields
|
||||||
|
changedelete = { text = "~" }, ---@diagnostic disable-line: missing-fields
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"nvim-telescope/telescope.nvim",
|
||||||
|
enabled = true,
|
||||||
|
event = "VimEnter",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
{
|
||||||
|
"nvim-telescope/telescope-fzf-native.nvim",
|
||||||
|
build = "make",
|
||||||
|
cond = function()
|
||||||
|
return vim.fn.executable("make") == 1
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{ "nvim-telescope/telescope-ui-select.nvim" },
|
||||||
|
{ "nvim-tree/nvim-web-devicons", enabled = vim.g.have_nerd_font },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require("telescope").setup({
|
||||||
|
extensions = {
|
||||||
|
["ui-select"] = { require("telescope.themes").get_dropdown() },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
pcall(require("telescope").load_extension, "fzf")
|
||||||
|
pcall(require("telescope").load_extension, "ui-select")
|
||||||
|
|
||||||
|
local builtin = require("telescope.builtin")
|
||||||
|
vim.keymap.set("n", "<leader>sh", builtin.help_tags, { desc = "[S]earch [H]elp" })
|
||||||
|
vim.keymap.set("n", "<leader>sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" })
|
||||||
|
vim.keymap.set("n", "<leader>sf", builtin.find_files, { desc = "[S]earch [F]iles" })
|
||||||
|
vim.keymap.set("n", "<leader>ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" })
|
||||||
|
vim.keymap.set({ "n", "v" }, "<leader>sw", builtin.grep_string, { desc = "[S]earch current [W]ord" })
|
||||||
|
vim.keymap.set("n", "<leader>sg", builtin.live_grep, { desc = "[S]earch by [G]rep" })
|
||||||
|
vim.keymap.set("n", "<leader>sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" })
|
||||||
|
vim.keymap.set("n", "<leader>sr", builtin.resume, { desc = "[S]earch [R]esume" })
|
||||||
|
vim.keymap.set("n", "<leader>s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||||
|
vim.keymap.set("n", "<leader>sc", builtin.commands, { desc = "[S]earch [C]ommands" })
|
||||||
|
vim.keymap.set("n", "<leader><leader>", builtin.buffers, { desc = "[ ] Find existing buffers" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
group = vim.api.nvim_create_augroup("telescope-lsp-attach", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
local buf = event.buf
|
||||||
|
vim.keymap.set("n", "grr", builtin.lsp_references, { buffer = buf, desc = "[G]oto [R]eferences" })
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"gri",
|
||||||
|
builtin.lsp_implementations,
|
||||||
|
{ buffer = buf, desc = "[G]oto [I]mplementation" }
|
||||||
|
)
|
||||||
|
vim.keymap.set("n", "grd", builtin.lsp_definitions, { buffer = buf, desc = "[G]oto [D]efinition" })
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"gO",
|
||||||
|
builtin.lsp_document_symbols,
|
||||||
|
{ buffer = buf, desc = "Open Document Symbols" }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"gW",
|
||||||
|
builtin.lsp_dynamic_workspace_symbols,
|
||||||
|
{ buffer = buf, desc = "Open Workspace Symbols" }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"grt",
|
||||||
|
builtin.lsp_type_definitions,
|
||||||
|
{ buffer = buf, desc = "[G]oto [T]ype Definition" }
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>/", function()
|
||||||
|
builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({
|
||||||
|
winblend = 20,
|
||||||
|
previewer = false,
|
||||||
|
}))
|
||||||
|
end, { desc = "[/] Fuzzily search in current buffer" })
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>s/", function()
|
||||||
|
builtin.live_grep({
|
||||||
|
grep_open_files = true,
|
||||||
|
prompt_title = "Live Grep in Open Files",
|
||||||
|
})
|
||||||
|
end, { desc = "[S]earch [/] in Open Files" })
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>sn", function()
|
||||||
|
builtin.find_files({ cwd = vim.fn.stdpath("config") })
|
||||||
|
end, { desc = "[S]earch [N]eovim files" })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
dependencies = {
|
||||||
|
{ "j-hui/fidget.nvim", opts = {} },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
local map = function(keys, func, desc, mode)
|
||||||
|
mode = mode or "n"
|
||||||
|
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
map("grn", vim.lsp.buf.rename, "[R]e[n]ame")
|
||||||
|
map("gra", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" })
|
||||||
|
map("grD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
|
||||||
|
|
||||||
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||||
|
|
||||||
|
if client and client:supports_method("textDocument/documentHighlight", event.buf) then
|
||||||
|
local highlight_augroup =
|
||||||
|
vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("LspDetach", {
|
||||||
|
group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }),
|
||||||
|
callback = function(event2)
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
vim.api.nvim_clear_autocmds({
|
||||||
|
group = "kickstart-lsp-highlight",
|
||||||
|
buffer = event2.buf,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if client and client:supports_method("textDocument/inlayHint", event.buf) then
|
||||||
|
map("<leader>th", function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }))
|
||||||
|
end, "[T]oggle Inlay [H]ints")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local servers = {
|
||||||
|
clangd = {},
|
||||||
|
zls = {},
|
||||||
|
gopls = {},
|
||||||
|
rust_analyzer = {},
|
||||||
|
omnisharp = {},
|
||||||
|
jdtls = {},
|
||||||
|
|
||||||
|
ts_ls = {},
|
||||||
|
|
||||||
|
lua_ls = {
|
||||||
|
on_init = function(client)
|
||||||
|
if client.workspace_folders then
|
||||||
|
local path = client.workspace_folders[1].name
|
||||||
|
if
|
||||||
|
path ~= vim.fn.stdpath("config")
|
||||||
|
and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc"))
|
||||||
|
then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
|
||||||
|
runtime = {
|
||||||
|
version = "LuaJIT",
|
||||||
|
path = { "lua/?.lua", "lua/?/init.lua" },
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
checkThirdParty = false,
|
||||||
|
library = vim.tbl_extend("force", vim.api.nvim_get_runtime_file("", true), {
|
||||||
|
"${3rd}/luv/library",
|
||||||
|
"${3rd}/busted/library",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
settings = {
|
||||||
|
Lua = {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, server in pairs(servers) do
|
||||||
|
vim.lsp.config(name, server)
|
||||||
|
vim.lsp.enable(name)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
event = { "BufWritePre" },
|
||||||
|
cmd = { "ConformInfo" },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>f",
|
||||||
|
function()
|
||||||
|
require("conform").format({ async = true, lsp_format = "fallback" })
|
||||||
|
end,
|
||||||
|
mode = "",
|
||||||
|
desc = "[F]ormat buffer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
---@module 'conform'
|
||||||
|
---@type conform.setupOpts
|
||||||
|
opts = {
|
||||||
|
notify_on_error = false,
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
local disable_filetypes = { c = true, cpp = true }
|
||||||
|
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return {
|
||||||
|
timeout_ms = 500,
|
||||||
|
lsp_format = "fallback",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { "stylua" },
|
||||||
|
python = { "isort", "black" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"saghen/blink.cmp",
|
||||||
|
event = "VimEnter",
|
||||||
|
version = "1.*",
|
||||||
|
dependencies = {
|
||||||
|
{
|
||||||
|
"L3MON4D3/LuaSnip",
|
||||||
|
version = "2.*",
|
||||||
|
build = (function()
|
||||||
|
if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return "make install_jsregexp"
|
||||||
|
end)(),
|
||||||
|
dependencies = {},
|
||||||
|
opts = {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
---@module 'blink.cmp'
|
||||||
|
---@type blink.cmp.Config
|
||||||
|
opts = {
|
||||||
|
keymap = {
|
||||||
|
preset = "default",
|
||||||
|
},
|
||||||
|
appearance = {
|
||||||
|
nerd_font_variant = "mono",
|
||||||
|
},
|
||||||
|
completion = {
|
||||||
|
documentation = { auto_show = false, auto_show_delay_ms = 500 },
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
default = { "lsp", "path", "snippets" },
|
||||||
|
},
|
||||||
|
snippets = { preset = "luasnip" },
|
||||||
|
fuzzy = { implementation = "prefer_rust_with_warning" },
|
||||||
|
signature = { enabled = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"folke/tokyonight.nvim",
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
|
require("tokyonight").setup({
|
||||||
|
styles = {
|
||||||
|
comments = { italic = true },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
vim.cmd.colorscheme("tokyonight-night")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"folke/todo-comments.nvim",
|
||||||
|
event = "VimEnter",
|
||||||
|
dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
|
---@module 'todo-comments'
|
||||||
|
---@type TodoOptions
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
|
opts = { signs = false },
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"nvim-mini/mini.nvim",
|
||||||
|
config = function()
|
||||||
|
require("mini.ai").setup({ n_lines = 500 })
|
||||||
|
require("mini.surround").setup()
|
||||||
|
local statusline = require("mini.statusline")
|
||||||
|
statusline.setup({ use_icons = vim.g.have_nerd_font })
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
statusline.section_location = function()
|
||||||
|
return "%2l:%-2v"
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
lazy = false,
|
||||||
|
branch = "main",
|
||||||
|
build = ":TSUpdate",
|
||||||
|
config = function()
|
||||||
|
-- Pre-install parsers for languages we know we use.
|
||||||
|
-- For any other filetype, the FileType autocmd below will
|
||||||
|
-- auto-install the parser on first open.
|
||||||
|
local parsers = {
|
||||||
|
"javascript",
|
||||||
|
"typescript",
|
||||||
|
"tsx",
|
||||||
|
"json",
|
||||||
|
"bash",
|
||||||
|
"c",
|
||||||
|
"c_sharp",
|
||||||
|
"diff",
|
||||||
|
"go",
|
||||||
|
"html",
|
||||||
|
"java",
|
||||||
|
"lua",
|
||||||
|
"luadoc",
|
||||||
|
"markdown",
|
||||||
|
"markdown_inline",
|
||||||
|
"python",
|
||||||
|
"query",
|
||||||
|
"rust",
|
||||||
|
"vim",
|
||||||
|
"vimdoc",
|
||||||
|
"zig",
|
||||||
|
}
|
||||||
|
|
||||||
|
local installed = require("nvim-treesitter.config").get_installed()
|
||||||
|
local to_install = vim.tbl_filter(function(p)
|
||||||
|
return not vim.tbl_contains(installed, p)
|
||||||
|
end, parsers)
|
||||||
|
if #to_install > 0 then
|
||||||
|
require("nvim-treesitter").install(to_install)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Helper: try to start treesitter highlighting + indentation for a buffer
|
||||||
|
local function treesitter_try_attach(buf, language)
|
||||||
|
if not pcall(vim.treesitter.start, buf, language) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local has_indent_query = pcall(vim.treesitter.query.get, language, "indents")
|
||||||
|
if has_indent_query then
|
||||||
|
vim.bo[buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- On every FileType event:
|
||||||
|
-- 1. If the parser is already installed, attach immediately.
|
||||||
|
-- 2. If not, auto-install it then attach once done.
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
callback = function(args)
|
||||||
|
local buf, filetype = args.buf, args.match
|
||||||
|
local language = vim.treesitter.language.get_lang(filetype)
|
||||||
|
if not language then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.treesitter.language.add(language) then
|
||||||
|
-- Parser already available — attach right away
|
||||||
|
treesitter_try_attach(buf, language)
|
||||||
|
else
|
||||||
|
-- Parser missing — install it, then attach
|
||||||
|
require("nvim-treesitter").install(language):await(function()
|
||||||
|
treesitter_try_attach(buf, language)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}, { ---@diagnostic disable-line: missing-fields
|
||||||
|
ui = {
|
||||||
|
icons = vim.g.have_nerd_font and {} or {
|
||||||
|
cmd = "⌘",
|
||||||
|
config = "🛠",
|
||||||
|
event = "📅",
|
||||||
|
ft = "📂",
|
||||||
|
init = "⚙",
|
||||||
|
keys = "🗝",
|
||||||
|
plugin = "🔌",
|
||||||
|
runtime = "💻",
|
||||||
|
require = "🌙",
|
||||||
|
source = "📄",
|
||||||
|
start = "🚀",
|
||||||
|
task = "📌",
|
||||||
|
lazy = "💤 ",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Host flo-homeserver
|
||||||
|
HostName 10.0.0.2
|
||||||
|
User bl
|
||||||
|
ProxyJump vps
|
||||||
|
|
||||||
|
Host vps
|
||||||
|
HostName 139.59.166.35
|
||||||
|
User bl
|
||||||
|
IdentityFile ~/.ssh/id_ed25519
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
# Sway workstation configuration translated from NixOS behavior.
|
||||||
|
set $mod Mod4
|
||||||
|
set $term foot -e tmux new-session -A -s main
|
||||||
|
set $browser zen
|
||||||
|
set $menu rofi -show drun
|
||||||
|
|
||||||
|
font pango:DejaVu Sans Mono 10
|
||||||
|
|
||||||
|
output * scale 1
|
||||||
|
output * bg ~/.config/sway/tux.png fill
|
||||||
|
|
||||||
|
input type:keyboard {
|
||||||
|
xkb_layout fo
|
||||||
|
xkb_model pc105
|
||||||
|
}
|
||||||
|
|
||||||
|
input type:touchpad {
|
||||||
|
natural_scroll disabled
|
||||||
|
tap enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
gaps inner 5
|
||||||
|
gaps outer 10
|
||||||
|
smart_gaps on
|
||||||
|
default_border pixel 2
|
||||||
|
default_floating_border pixel 2
|
||||||
|
|
||||||
|
client.focused #33ccff #33ccff #1a1b26 #33ccff #33ccff
|
||||||
|
client.focused_inactive #595959 #595959 #c0caf5 #595959 #595959
|
||||||
|
client.unfocused #595959 #595959 #c0caf5 #595959 #595959
|
||||||
|
|
||||||
|
floating_modifier $mod normal
|
||||||
|
|
||||||
|
# Applications and session
|
||||||
|
bindsym $mod+t exec $term
|
||||||
|
bindsym $mod+b exec $browser
|
||||||
|
bindsym $mod+d exec $menu
|
||||||
|
bindsym $mod+q kill
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
bindsym $mod+Shift+e exec swaynag -t warning -m 'Exit Sway?' -B 'Exit' 'swaymsg exit'
|
||||||
|
|
||||||
|
# Focus movement
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# Move windows
|
||||||
|
bindsym $mod+Shift+h move left
|
||||||
|
bindsym $mod+Shift+j move down
|
||||||
|
bindsym $mod+Shift+k move up
|
||||||
|
bindsym $mod+Shift+l move 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
|
||||||
|
|
||||||
|
# Workspaces
|
||||||
|
set $ws1 1
|
||||||
|
set $ws2 2
|
||||||
|
set $ws3 3
|
||||||
|
set $ws4 4
|
||||||
|
set $ws5 5
|
||||||
|
set $ws6 6
|
||||||
|
set $ws7 7
|
||||||
|
set $ws8 8
|
||||||
|
set $ws9 9
|
||||||
|
set $ws10 10
|
||||||
|
|
||||||
|
bindsym $mod+1 workspace number $ws1
|
||||||
|
bindsym $mod+2 workspace number $ws2
|
||||||
|
bindsym $mod+3 workspace number $ws3
|
||||||
|
bindsym $mod+4 workspace number $ws4
|
||||||
|
bindsym $mod+5 workspace number $ws5
|
||||||
|
bindsym $mod+6 workspace number $ws6
|
||||||
|
bindsym $mod+7 workspace number $ws7
|
||||||
|
bindsym $mod+8 workspace number $ws8
|
||||||
|
bindsym $mod+9 workspace number $ws9
|
||||||
|
bindsym $mod+0 workspace number $ws10
|
||||||
|
|
||||||
|
bindsym $mod+Shift+1 move container to workspace number $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace number $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace number $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace number $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace number $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace number $ws6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace number $ws7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace number $ws8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace number $ws9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace number $ws10
|
||||||
|
|
||||||
|
# Layout and scratchpad
|
||||||
|
bindsym $mod+s layout toggle split
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Hardware controls
|
||||||
|
bindsym XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindsym XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindsym XF86AudioMicMute exec wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindsym XF86MonBrightnessUp exec brightnessctl set 5%+
|
||||||
|
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
|
||||||
|
bindsym Print exec grim -g "$(slurp)" "$HOME/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png"
|
||||||
|
|
||||||
|
# Session services
|
||||||
|
exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP
|
||||||
|
exec /usr/libexec/lxqt-policykit-agent
|
||||||
|
exec nm-applet --indicator
|
||||||
|
exec mako
|
||||||
|
exec ~/.config/waybar/launch.sh
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -0,0 +1,28 @@
|
|||||||
|
set -ga terminal-overrides ",xterm-256color:RGB"
|
||||||
|
set -g display-time 4000
|
||||||
|
set -g status-position top
|
||||||
|
setw -g pane-base-index 1
|
||||||
|
|
||||||
|
# Tokyo Night Colors
|
||||||
|
bg="#1a1b26"
|
||||||
|
default_fg="#c0caf5"
|
||||||
|
session_fg="#9ece6a"
|
||||||
|
session_selection_fg="#1a1b26"
|
||||||
|
session_selection_bg="#7aa2f7"
|
||||||
|
active_window_fg="#7dcfff"
|
||||||
|
active_pane_border="#7aa2f7"
|
||||||
|
|
||||||
|
set -g status-left-length 200
|
||||||
|
set -g status-right-length 200
|
||||||
|
set -g status-left "#[fg=${session_fg},bold,bg=${bg}] #S #[fg=${default_fg},nobold,bg=${bg}] | "
|
||||||
|
set -g status-right "#[fg=${active_window_fg},bg=${bg}] #(acpi -b | awk -F', ' '{print $2}') #[fg=${default_fg},nobold,bg=${bg}] | #[fg=${active_window_fg},bg=${bg}] %H:%M #[fg=${default_fg},nobold,bg=${bg}] | #[fg=${session_fg},bg=${bg}] %a %Y-%m-%d "
|
||||||
|
set -g status-justify left
|
||||||
|
set -g status-style "bg=${bg}"
|
||||||
|
set -g window-status-format "#[fg=${default_fg},bg=default] #I:#W"
|
||||||
|
set -g window-status-current-format "#[fg=${active_window_fg},bold,bg=default] #[underscore]#I:#W"
|
||||||
|
set -g window-status-last-style "fg=${default_fg},bg=default"
|
||||||
|
set -g message-command-style "bg=default,fg=${default_fg}"
|
||||||
|
set -g message-style "bg=default,fg=${default_fg}"
|
||||||
|
set -g mode-style "bg=${session_selection_bg},fg=${session_selection_fg}"
|
||||||
|
set -g pane-active-border-style "fg=${active_pane_border},bg=default"
|
||||||
|
set -g pane-border-style "fg=brightblack,bg=default"
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
set -g prefix C-b
|
||||||
|
setw -g mode-keys vi
|
||||||
|
set -g default-shell /usr/bin/zsh
|
||||||
|
set -sg escape-time 0
|
||||||
|
set -g focus-events on
|
||||||
|
set -g default-terminal tmux-256color
|
||||||
|
set -g history-limit 10000
|
||||||
|
setw -g aggressive-resize on
|
||||||
|
set -g base-index 1
|
||||||
|
setw -g pane-base-index 1
|
||||||
|
|
||||||
|
source-file ~/.config/tmux/theme.conf
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"height": 34,
|
||||||
|
"margin-top": 8,
|
||||||
|
"margin-left": 0,
|
||||||
|
"margin-right": 0,
|
||||||
|
|
||||||
|
"modules-left": ["sway/workspaces", "sway/window"],
|
||||||
|
"modules-center": ["clock"],
|
||||||
|
"modules-right": ["pulseaudio", "network", "battery", "tray"],
|
||||||
|
|
||||||
|
"sway/workspaces": {
|
||||||
|
"all-outputs": true,
|
||||||
|
"disable-scroll": true,
|
||||||
|
"format": "{name}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"sway/window": {
|
||||||
|
"max-length": 40
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%a %b %d %I:%M %p}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"battery": {
|
||||||
|
"format": "{capacity}%"
|
||||||
|
},
|
||||||
|
|
||||||
|
"network": {
|
||||||
|
"format-wifi": "wifi {essid}",
|
||||||
|
"format-ethernet": "wired",
|
||||||
|
"format-disconnected": "offline",
|
||||||
|
"on-click": "nm-connection-editor"
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "vol {volume}%",
|
||||||
|
"format-muted": "muted",
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/waybar"
|
||||||
|
base_config="$config_dir/config"
|
||||||
|
runtime_config="$config_dir/config.runtime"
|
||||||
|
|
||||||
|
width=$(swaymsg -r -t get_outputs | jq -r '[.[] | select(.focused)][0] // .[0] // {rect: {width: 1440}} | .rect.width // 1440')
|
||||||
|
|
||||||
|
if ! [[ "$width" =~ ^[0-9]+$ ]] || (( width == 0 )); then
|
||||||
|
width=1440
|
||||||
|
fi
|
||||||
|
|
||||||
|
margin=$((width * 125 / 1000))
|
||||||
|
jq --argjson margin "$margin" '
|
||||||
|
.["margin-left"] = $margin
|
||||||
|
| .["margin-right"] = $margin
|
||||||
|
' "$base_config" > "$runtime_config"
|
||||||
|
|
||||||
|
exec waybar -c "$runtime_config"
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
@import "themes/current.css";
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "DejaVu Sans Mono", monospace;
|
||||||
|
font-size: 13px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: @bar-bg;
|
||||||
|
color: @text;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid @border;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar > box {
|
||||||
|
padding: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces label {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 5px 3px;
|
||||||
|
color: @text;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces .active {
|
||||||
|
background: @accent;
|
||||||
|
color: @accent-fg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
padding: 0 12px;
|
||||||
|
margin: 5px 4px;
|
||||||
|
background: @accent;
|
||||||
|
color: @accent-fg;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#battery,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#tray {
|
||||||
|
padding: 0 12px;
|
||||||
|
margin: 5px 4px;
|
||||||
|
background: @module-bg;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@define-color bar-bg rgba(17, 17, 27, 0.82);
|
||||||
|
@define-color module-bg rgba(49, 50, 68, 0.85);
|
||||||
|
@define-color border rgba(203, 166, 247, 0.35);
|
||||||
|
@define-color text #cdd6f4;
|
||||||
|
@define-color accent #cba6f7;
|
||||||
|
@define-color accent-fg #11111b;
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
@define-color bar-bg rgba(17, 17, 27, 0.82);
|
||||||
|
@define-color module-bg rgba(49, 50, 68, 0.85);
|
||||||
|
@define-color border rgba(203, 166, 247, 0.35);
|
||||||
|
@define-color text #cdd6f4;
|
||||||
|
@define-color accent #cba6f7;
|
||||||
|
@define-color accent-fg #11111b;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
@define-color bar-bg rgba(249, 245, 215, 0.88);
|
||||||
|
@define-color module-bg rgba(235, 219, 178, 0.86);
|
||||||
|
@define-color border rgba(181, 118, 20, 0.35);
|
||||||
|
@define-color text #3c3836;
|
||||||
|
@define-color accent #b57614;
|
||||||
|
@define-color accent-fg #f9f5d7;
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
HISTFILE="$HOME/.zsh_history"
|
||||||
|
HISTSIZE=10000
|
||||||
|
SAVEHIST=10000
|
||||||
|
|
||||||
|
setopt append_history
|
||||||
|
|
||||||
|
alias gp='git push'
|
||||||
|
alias gcm='git commit -am'
|
||||||
|
alias gsw='git switch'
|
||||||
|
alias gst='git status'
|
||||||
|
alias ga='git add .'
|
||||||
|
alias gtree="git log --graph --all --pretty=format:'%C(yellow)%h%Creset%C(cyan)%d%Creset %s %C(dim)(%cr) <%an>%Creset'"
|
||||||
|
alias typ='typora --enable-features=UseOzonePlatform --ozone-platform=wayland &'
|
||||||
|
|
||||||
|
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
|
export GOPATH="${GOPATH:-$HOME/go}"
|
||||||
|
export PATH="$HOME/.scripts:$HOME/.local/bin:$HOME/.cargo/bin:$HOME/.bun/bin:$HOME/bin/zig:$HOME/bin/zls:$GOPATH/bin:$PATH"
|
||||||
|
|
||||||
|
start-ssh-agent() {
|
||||||
|
local agent_env="$HOME/.ssh/agent.env"
|
||||||
|
if [[ -f "$agent_env" ]]; then
|
||||||
|
source "$agent_env" >/dev/null
|
||||||
|
fi
|
||||||
|
if ! ssh-add -l &>/dev/null; then
|
||||||
|
eval "$(ssh-agent -s)" >/dev/null
|
||||||
|
ssh-agent -s >"$agent_env"
|
||||||
|
chmod 600 "$agent_env"
|
||||||
|
ssh-add ~/.ssh/id_ed25519 2>/dev/null || ssh-add ~/.ssh/id_rsa 2>/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||||
|
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
|
||||||
|
eval "$(fzf --zsh)"
|
||||||
|
eval "$(starship init zsh)"
|
||||||
Reference in New Issue
Block a user