diff --git a/init.lua b/init.lua index 328dfe5..8525326 100644 --- a/init.lua +++ b/init.lua @@ -1,11 +1,10 @@ --- general options local opt = vim.opt vim.g.mapleader = " " vim.g.maplocalleader = "\\" opt.number = true opt.relativenumber = true -opt.cursorline = false +opt.cursorline = true opt.termguicolors = true opt.winborder = "rounded" opt.signcolumn = "yes" @@ -13,143 +12,49 @@ 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/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 -vim.cmd("colorscheme " .. vim.fn.system("cat /home/lucy/.local/share/tinted-theming/tinty/current_scheme")) --- setup superior (?) lsp -vim.lsp.config("qml-language-server", { - cmd = { "qml-language-server" }, - filetypes = { "qml" }, - root_markers = { { "qmldir", "shell.qml" }, ".git" }, + virtual_text = { + spacing = 4, + source = true, + }, }) +require("config.lazy") +require("config.keymaps") +local default_theme = "base16-oceanicnext" -vim.lsp.enable("qml-language-server") -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("snacks").setup({ - notifier = { enabled = true }, - statuscolumn = { enabled = true }, - picker = {}, -}) -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 = "|" }, - globalstatus = true, - always_divide_middle = true, - }, - sections = { - lualine_a = { "mode" }, - lualine_b = { "diagnostics" }, - lualine_c = { "filename", "filesize", }, - lualine_x = { "lsp_status", "filetype" }, - lualine_y = { "" }, - lualine_z = { "location" }, - }, - tabline = { - lualine_a = { { 'buffers', mode = 2, show_modified_status = true, } }, - lualine_b = { 'branch' }, - lualine_c = {}, - lualine_x = {}, - lualine_y = {}, - lualine_z = { 'tabs' } - } -}) +local function get_tinty_theme() + local theme_name = vim.fn.system("cat ~/.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 --- keymaps -local map = vim.keymap.set +local function handle_focus_gained() + local new_theme_name = get_tinty_theme() + local current_theme_name = vim.g.colors_name -map("n", "ff", function() - Snacks.picker.files() -end) -map("n", "lg", function() - Snacks.picker.grep() -end) + if current_theme_name ~= new_theme_name then + vim.cmd("colorscheme " .. new_theme_name) + require("lualine").setup() + end + require("lualine").setup() +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) --- buffer keybinds -map("n", "", " LualineBuffersJump! 1 ") -map("n", "", " LualineBuffersJump! 2 ") -map("n", "", " LualineBuffersJump! 3 ") -map("n", "", " LualineBuffersJump! 4 ") -map("n", "", " LualineBuffersJump! 5 ") -map("n", "", " LualineBuffersJump! 6 ") -map("n", "", " LualineBuffersJump! 7 ") -map("n", "", " LualineBuffersJump! 8 ") -map("n", "", " LualineBuffersJump! 9 ") -map("n", "", " LualineBuffersJump! last ") -map("n", "w", " bdelete! ") +local function main() + vim.o.termguicolors = true + vim.g.tinted_colorspace = 256 + local current_theme_name = get_tinty_theme() --- util keybinds -map("n", "t", " terminal ") -map("n", "", "Lspsaga term_toggle") -map("t", "", "") -map("i", "", vim.lsp.completion.get, { desc = "trigger autocompletion" }) + vim.cmd("colorscheme " .. current_theme_name) + vim.api.nvim_create_autocmd("FocusGained", { + callback = handle_focus_gained, + }) +end + +main() diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..d84fcd7 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,17 @@ +{ + "base16-nvim": { "branch": "master", "commit": "190397833e53fdfd5cf400c5baaf1a4e533158e5" }, + "blink.cmp": { "branch": "main", "commit": "451168851e8e2466bc97ee3e026c3dcb9141ce07" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "cord.nvim": { "branch": "master", "commit": "283e4a5bdafd0d6187f28e5b739cccab6b4c9c64" }, + "indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "lspsaga.nvim": { "branch": "main", "commit": "562d9724e3869ffd1801c572dd149cc9f8d0cc36" }, + "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "25f609e7fca78af7cede4f9fa3af8a94b1c4950b" }, + "mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" }, + "nvim-lspconfig": { "branch": "master", "commit": "8e2084bf5e40c79c1f42210a6ef96a0a4793a763" }, + "nvim-treesitter": { "branch": "main", "commit": "7caec274fd19c12b55902a5b795100d21531391f" }, + "nvim-web-devicons": { "branch": "master", "commit": "d7462543c9e366c0d196c7f67a945eaaf5d99414" }, + "snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" }, + "tinted-vim": { "branch": "main", "commit": "19b03f63f58ffc63aa8e26159a370d6514735581" } +} diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua new file mode 100644 index 0000000..a980275 --- /dev/null +++ b/lua/config/keymaps.lua @@ -0,0 +1,36 @@ +local map = vim.keymap.set + +map("n", "ff", function() + Snacks.picker.files() +end) +map("n", "lg", function() + Snacks.picker.grep() +end) + +-- 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("n", "", "NvimTreeToggle") +map("n", "", " vim.b.completion != vim.b.completion ") diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua new file mode 100644 index 0000000..17c756e --- /dev/null +++ b/lua/config/lazy.lua @@ -0,0 +1,34 @@ +-- Bootstrap lazy.nvim +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) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "base16-catppuccin-mocha" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + change_detection = { notify = false }, +}) diff --git a/lua/plugins/coding.lua b/lua/plugins/coding.lua new file mode 100644 index 0000000..7d01e46 --- /dev/null +++ b/lua/plugins/coding.lua @@ -0,0 +1,58 @@ +return { + { + "mason-org/mason-lspconfig.nvim", + opts = {}, + dependencies = { + { "mason-org/mason.nvim", opts = {} }, + "neovim/nvim-lspconfig", + }, + }, + + { + "saghen/blink.cmp", + -- optional: provides snippets for the snippet source + dependencies = { "neovim/nvim-lspconfig" }, + + -- use a release tag to download pre-built binaries + version = "1.*", + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = 'cargo build --release', + -- If you use nix, you can build from source using latest nightly rust with: + -- build = 'nix run .#build-plugin', + + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { preset = "default" }, + + appearance = { + nerd_font_variant = "mono", + }, + + -- (Default) Only show the documentation popup when manually triggered + completion = { + documentation = { auto_show = true }, + menu = { auto_show = false }, + }, + + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + }, + + fuzzy = { implementation = "prefer_rust_with_warning" }, + }, + opts_extend = { "sources.default" }, + }, +} diff --git a/lua/plugins/snacks.lua b/lua/plugins/snacks.lua new file mode 100644 index 0000000..5a09c00 --- /dev/null +++ b/lua/plugins/snacks.lua @@ -0,0 +1,112 @@ +return { + { + "folke/snacks.nvim", + opts = { + 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 }, + { section = "startup" }, + }, + }, + notifier = { enabled = true }, + statuscolumn = { enabled = true }, + }, + }, +} diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua new file mode 100644 index 0000000..8e3b113 --- /dev/null +++ b/lua/plugins/ui.lua @@ -0,0 +1,74 @@ +return { + { + "vyfor/cord.nvim", + ---@type CordConfig + opts = { + display = { + theme = "atom", + }, + editor = { tooltip = "ur gay x3" }, + }, + }, + { + "tinted-theming/tinted-vim", + lazy = false, + priority = 1000, + }, + { + "lukas-reineke/indent-blankline.nvim", + main = "ibl", + ---@module "ibl" + ---@type ibl.config + opts = { + scope = { enabled = true }, + }, + }, + + { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons", "RRethy/base16-nvim" }, + opts = { + options = { + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "diagnostics" }, + lualine_c = { "filename", "branch", "navic" }, + lualine_x = { "lsp_status", "filetype" }, + lualine_y = { "progress" }, + lualine_z = { "location" }, + }, + }, + }, + + { + "nvim-treesitter/nvim-treesitter", + opts = { install_dir = vim.fn.stdpath("data") .. "/site" }, + lazy = false, + build = ":TSUpdate", + }, + { + "nvimdev/lspsaga.nvim", + dependencies = { + "nvim-treesitter/nvim-treesitter", -- for syntax highlighting inside the popup + }, + opts = { + symbol_in_winbar = { enable = true }, + lightbulb = { + enable = true, + sign = false, + }, + hover = { + max_width = 0.6, + open_link = "gx", + open_browser = "!google-chrome", + }, + }, + }, + { + "akinsho/bufferline.nvim", + opts = {}, + }, +} diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json deleted file mode 100644 index fd15508..0000000 --- a/nvim-pack-lock.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "plugins": { - "base16-nvim": { - "rev": "190397833e53fdfd5cf400c5baaf1a4e533158e5", - "src": "https://github.com/RRethy/base16-nvim" - }, - "blink.cmp": { - "rev": "78336bc89ee5365633bcf754d93df01678b5c08f", - "src": "https://github.com/Saghen/blink.cmp", - "version": "'v1'" - }, - "bufferline.nvim": { - "rev": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3", - "src": "https://github.com/akinsho/bufferline.nvim" - }, - "cord.nvim": { - "rev": "283e4a5bdafd0d6187f28e5b739cccab6b4c9c64", - "src": "https://github.com/vyfor/cord.nvim" - }, - "lspsaga.nvim": { - "rev": "562d9724e3869ffd1801c572dd149cc9f8d0cc36", - "src": "https://github.com/nvimdev/lspsaga.nvim" - }, - "lualine.nvim": { - "rev": "47f91c416daef12db467145e16bed5bbfe00add8", - "src": "https://github.com/nvim-lualine/lualine.nvim" - }, - "mason-lspconfig.nvim": { - "rev": "25f609e7fca78af7cede4f9fa3af8a94b1c4950b", - "src": "https://github.com/mason-org/mason-lspconfig.nvim.git" - }, - "mason.nvim": { - "rev": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65", - "src": "https://github.com/mason-org/mason.nvim.git" - }, - "nvim-lspconfig": { - "rev": "8e2084bf5e40c79c1f42210a6ef96a0a4793a763", - "src": "https://github.com/neovim/nvim-lspconfig" - }, - "nvim-treesitter": { - "rev": "c82bf96f0a773d85304feeb695e1e23b2207ac35", - "src": "https://github.com/nvim-treesitter/nvim-treesitter" - }, - "nvim-web-devicons": { - "rev": "40e9d5a6cc3db11b309e39593fc7ac03bb844e38", - "src": "https://github.com/nvim-tree/nvim-web-devicons" - }, - "snacks.nvim": { - "rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e", - "src": "https://github.com/folke/snacks.nvim" - }, - "tinted-vim": { - "rev": "19b03f63f58ffc63aa8e26159a370d6514735581", - "src": "https://github.com/tinted-theming/tinted-vim" - } - } -}