-- general options local opt = vim.opt vim.g.mapleader = " " vim.g.maplocalleader = "\\" opt.number = true opt.relativenumber = true opt.cursorline = true opt.termguicolors = true opt.winborder = "rounded" opt.signcolumn = "yes" vim.lsp.inlay_hint.enable = true opt.tabstop = 8 vim.opt.expandtab = true vim.g.tinted_background_transparent = 1 opt.swapfile = false opt.winborder = "single" opt.shiftwidth = 8 vim.diagnostic.config({ virtual_text = { spacing = 4, source = true, }, }) -- add plugins vim.pack.add({ "https://github.com/folke/snacks.nvim", "https://github.com/nvim-lualine/lualine.nvim", "https://github.com/tinted-theming/tinted-vim", "https://github.com/akinsho/bufferline.nvim", "https://github.com/nvimdev/lspsaga.nvim", "https://github.com/neovim/nvim-lspconfig", "https://github.com/nvim-treesitter/nvim-treesitter", "https://github.com/vyfor/cord.nvim", "https://github.com/mason-org/mason-lspconfig.nvim.git", "https://github.com/mason-org/mason.nvim.git", { src = "https://github.com/Saghen/blink.cmp", version = "v1" }, }) -- function to set colorsceme local default_theme = "base16-oceanicnext" local function get_tinty_theme() local theme_name = vim.fn.system("cat /home/lucy/.local/share/tinted-theming/tinty/current_scheme") if vim.v.shell_error ~= 0 then return default_theme else return vim.trim(theme_name) end end vim.cmd("colorscheme " .. get_tinty_theme()) -- set up qmlls to point to the right binary vim.lsp.config("qmlls", { cmd = { "qmlls6" }, }) require("blink.cmp").setup({ fuzzy = { implementation = "prefer_rust_with_warning" }, completion = { menu = { auto_show = false, }, }, sources = { default = { "lsp", "path", "snippets", "buffer" }, }, }) require("mason").setup() require("mason-lspconfig").setup() require("bufferline").setup({ options = { themable = true, numbers = "ordinal", indicator = { icon = "", style = "underline", }, }, }) require("snacks").setup({ notifier = { enabled = true }, statuscolumn = { enabled = true }, picker = {}, dashboard = { enabled = true, width = 60, row = nil, -- dashboard position. nil for center col = nil, -- dashboard position. nil for center pane_gap = 4, -- empty columns between vertical panes autokeys = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", -- autokey sequence -- These settings are used by some built-in sections preset = { -- Defaults to a picker that supports `fzf-lua`, `telescope.nvim` and `mini.pick` ---@type fun(cmd:string, opts:table)|nil pick = nil, -- Used by the `keys` section to show keymaps. -- Set your custom keymaps here. -- When using a function, the `items` argument are the default keymaps. ---@type snacks.dashboard.Item[] keys = { { icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')", }, { icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" }, { icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')", }, { icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')", }, { icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})", }, { icon = " ", key = "s", desc = "Restore Session", section = "session" }, { icon = "󰒲 ", key = "L", desc = "Lazy", action = ":Lazy", enabled = package.loaded.lazy ~= nil, }, { icon = " ", key = "q", desc = "Quit", action = ":qa" }, }, -- Used by the `header` section header = [[ ⠀⠀⠀⠀⠀⠀⣠⡤⠶⠒⠛⠉⠙⠛⠒⠶⢤⣀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠈⠙⢦⡀⠀⠀⠀ ⠀⠀⠀⠀⣀⣠⠤⠤⡴⠻⢓⣶⠦⠤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀ ⣀⡠⠴⠊⠁⠀⠀⠀⠀⠀⠒⠽⠀⠀⠀⠉⢙⠒⢢⡄⠀⠀⠀⠀⠀⠀⠀⠈⢷⡀ ⠘⢆⠉⠑⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢆⠁⣠⠎⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣇ ⠀⠈⠓⠦⠁⢀⣀⠀⠀⠀⠀⠀⠀⣀⣀⢸⡊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻ ⠀⠀⠀⡸⠀⠉⠀⠙⠆⠀⠀⠀⠏⠀⠈⠀⢇⠀⠀⠀⠀⠀⠀⠀⢀⠔⠀⠀⠀⣼ ⠀⠀⠀⠹⣄⠀⠠⣤⡡⠪⡭⠃⡤⢤⡄⡰⠋⠀⠀⠀⣀⡠⠴⠊⠁⠀⠀⠀⢠⠇ ⠀⠀⢠⢿⣠⠟⠓⠛⠉⠛⡟⠛⠛⠛⠛⠒⠒⠚⠉⠉⠁⠀⠀⠀⠀⠀⢀⡴⠋⠀ ⠀⠀⠈⠛⢯⣀⣀⣀⡤⠤⠤⠤⢤⣤⣀⣀⣀⣀⣀⣀⣀⣤⠤⠴⠒⠋⠁⠀⠀⠀ ]], }, -- item field formatters formats = { icon = function(item) if item.file and item.icon == "file" or item.icon == "directory" then return Snacks.dashboard.icon(item.file, item.icon) end return { item.icon, width = 2, hl = "icon" } end, footer = { "%s", align = "center" }, header = { "%s", align = "center" }, file = function(item, ctx) local fname = vim.fn.fnamemodify(item.file, ":~") fname = ctx.width and #fname > ctx.width and vim.fn.pathshorten(fname) or fname if #fname > ctx.width then local dir = vim.fn.fnamemodify(fname, ":h") local file = vim.fn.fnamemodify(fname, ":t") if dir and file then file = file:sub(-(ctx.width - #dir - 2)) fname = dir .. "/…" .. file end end local dir, file = fname:match("^(.*)/(.+)$") return dir and { { dir .. "/", hl = "dir" }, { file, hl = "file" } } or { { fname, hl = "file" } } end, }, sections = { { section = "header" }, { section = "keys", gap = 1, padding = 1 }, }, }, }) require("lspsaga").setup({ symbol_in_winbar = { enable = true }, lightbulb = { enable = true, sign = false, }, hover = { max_width = 0.6, open_link = "gx", open_browser = "!google-chrome", }, }) require("cord").setup({ display = { theme = "atom", }, editor = { tooltip = "ur gay x3" }, }) require("lualine").setup({ options = { section_separators = { left = "", right = "" }, component_separators = { left = "|", right = "|" }, }, sections = { lualine_a = { "mode" }, lualine_b = { "diagnostics" }, lualine_c = { "filename", "branch", "navic" }, lualine_x = { "lsp_status", "filetype", "filesize" }, lualine_y = { "" }, lualine_z = { "location" }, }, }) -- keymaps local map = vim.keymap.set map("n", "ff", function() Snacks.picker.files() end) map("n", "lg", function() Snacks.picker.grep() end) map("n", "", "h") map("n", "", "j") map("n", "", "k") map("n", "", "l") map("n", "", ":vertical resize -5", { silent = true }) map("n", "", ":vertical resize +5", { silent = true }) map("n", "", ":resize +5", { silent = true }) map("n", "", ":resize -5", { silent = true }) -- lsp keybinds map("n", "K", " Lspsaga hover_doc") map("n", "go", " Lspsaga goto_definition") map("n", "gr", " Lspsaga finder") map("n", "qf", " Lspsaga code_action") map("n", "", function() vim.lsp.buf.format() end) -- bufferline keybinds map("n", "", " BufferLineGoToBuffer 1 ") map("n", "", " BufferLineGoToBuffer 2 ") map("n", "", " BufferLineGoToBuffer 3 ") map("n", "", " BufferLineGoToBuffer 4 ") map("n", "", " BufferLineGoToBuffer 5 ") map("n", "", " BufferLineGoToBuffer 6 ") map("n", "", " BufferLineGoToBuffer 7 ") map("n", "", " BufferLineGoToBuffer 8 ") map("n", "", " BufferLineGoToBuffer 9 ") map("n", "", " BufferLineGoToBuffer last ") map("n", "w", " bdelete! ") -- util keybinds map("n", "t", " terminal ") map("n", "", "Lspsaga term_toggle") map("t", "", "") map("i", "", vim.lsp.completion.get, { desc = "trigger autocompletion" }) -- tinty function local function handle_focus_gained() local new_theme_name = get_tinty_theme() local current_theme_name = vim.g.colors_name if current_theme_name ~= new_theme_name then vim.cmd("colorscheme " .. new_theme_name) require("lualine").setup() end require("lualine").setup() end local function main() vim.o.termguicolors = true vim.g.tinted_colorspace = 256 local current_theme_name = get_tinty_theme() vim.cmd("colorscheme " .. current_theme_name) vim.api.nvim_create_autocmd("FocusGained", { callback = handle_focus_gained, }) end main()