From 1f5442a4afc1ea805209418d50174c56863d4ed0 Mon Sep 17 00:00:00 2001 From: 0xrsydn Date: Mon, 27 Oct 2025 14:33:13 +0700 Subject: [PATCH] feat: nvim config --- modules/home/rsydn/programs/neovim.nix | 8 +- .../rsydn/programs/nvim/lua/config/lazy.lua | 2 + .../programs/nvim/lua/plugins/colorscheme.lua | 15 ++ .../programs/nvim/lua/plugins/example.lua | 197 ------------------ .../rsydn/programs/nvim/lua/plugins/lsp.lua | 29 +++ .../nvim/lua/plugins/smear-cursor.lua | 6 + 6 files changed, 59 insertions(+), 198 deletions(-) create mode 100644 modules/home/rsydn/programs/nvim/lua/plugins/colorscheme.lua delete mode 100644 modules/home/rsydn/programs/nvim/lua/plugins/example.lua create mode 100644 modules/home/rsydn/programs/nvim/lua/plugins/lsp.lua create mode 100644 modules/home/rsydn/programs/nvim/lua/plugins/smear-cursor.lua diff --git a/modules/home/rsydn/programs/neovim.nix b/modules/home/rsydn/programs/neovim.nix index 29e67e8..e2fba06 100644 --- a/modules/home/rsydn/programs/neovim.nix +++ b/modules/home/rsydn/programs/neovim.nix @@ -10,9 +10,15 @@ withRuby = true; extraPackages = with pkgs; [ - # LSP servers + # LSP servers installed via Nix lua-language-server nil + pyright + nodePackages.typescript + nodePackages.typescript-language-server + rust-analyzer + gopls + clang-tools # Formatters stylua diff --git a/modules/home/rsydn/programs/nvim/lua/config/lazy.lua b/modules/home/rsydn/programs/nvim/lua/config/lazy.lua index d73bfa1..749b7e4 100644 --- a/modules/home/rsydn/programs/nvim/lua/config/lazy.lua +++ b/modules/home/rsydn/programs/nvim/lua/config/lazy.lua @@ -21,6 +21,8 @@ require("lazy").setup({ -- import/override with your plugins { import = "plugins" }, }, + -- Put the lockfile somewhere writable when the config directory is managed by Nix + lockfile = vim.fn.stdpath("state") .. "/lazy-lock.json", defaults = { -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. diff --git a/modules/home/rsydn/programs/nvim/lua/plugins/colorscheme.lua b/modules/home/rsydn/programs/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..539e01a --- /dev/null +++ b/modules/home/rsydn/programs/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,15 @@ +return { + { + "ellisonleao/gruvbox.nvim", + priority = 1000, + opts = { + terminal_colors = true, + transparent_mode = false, + }, + config = function(_, opts) + require("gruvbox").setup(opts) + vim.o.background = "dark" + vim.cmd.colorscheme("gruvbox") + end, + }, +} diff --git a/modules/home/rsydn/programs/nvim/lua/plugins/example.lua b/modules/home/rsydn/programs/nvim/lua/plugins/example.lua deleted file mode 100644 index 17f53d6..0000000 --- a/modules/home/rsydn/programs/nvim/lua/plugins/example.lua +++ /dev/null @@ -1,197 +0,0 @@ --- since this is just an example spec, don't actually load anything here and return an empty spec --- stylua: ignore -if true then return {} end - --- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim --- --- In your plugin files, you can: --- * add extra plugins --- * disable/enabled LazyVim plugins --- * override the configuration of LazyVim plugins -return { - -- add gruvbox - { "ellisonleao/gruvbox.nvim" }, - - -- Configure LazyVim to load gruvbox - { - "LazyVim/LazyVim", - opts = { - colorscheme = "gruvbox", - }, - }, - - -- change trouble config - { - "folke/trouble.nvim", - -- opts will be merged with the parent spec - opts = { use_diagnostic_signs = true }, - }, - - -- disable trouble - { "folke/trouble.nvim", enabled = false }, - - -- override nvim-cmp and add cmp-emoji - { - "hrsh7th/nvim-cmp", - dependencies = { "hrsh7th/cmp-emoji" }, - ---@param opts cmp.ConfigSchema - opts = function(_, opts) - table.insert(opts.sources, { name = "emoji" }) - end, - }, - - -- change some telescope options and a keymap to browse plugin files - { - "nvim-telescope/telescope.nvim", - keys = { - -- add a keymap to browse plugin files - -- stylua: ignore - { - "fp", - function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, - desc = "Find Plugin File", - }, - }, - -- change some options - opts = { - defaults = { - layout_strategy = "horizontal", - layout_config = { prompt_position = "top" }, - sorting_strategy = "ascending", - winblend = 0, - }, - }, - }, - - -- add pyright to lspconfig - { - "neovim/nvim-lspconfig", - ---@class PluginLspOpts - opts = { - ---@type lspconfig.options - servers = { - -- pyright will be automatically installed with mason and loaded with lspconfig - pyright = {}, - }, - }, - }, - - -- add tsserver and setup with typescript.nvim instead of lspconfig - { - "neovim/nvim-lspconfig", - dependencies = { - "jose-elias-alvarez/typescript.nvim", - init = function() - require("lazyvim.util").lsp.on_attach(function(_, buffer) - -- stylua: ignore - vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) - vim.keymap.set("n", "cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) - end) - end, - }, - ---@class PluginLspOpts - opts = { - ---@type lspconfig.options - servers = { - -- tsserver will be automatically installed with mason and loaded with lspconfig - tsserver = {}, - }, - -- you can do any additional lsp server setup here - -- return true if you don't want this server to be setup with lspconfig - ---@type table - setup = { - -- example to setup with typescript.nvim - tsserver = function(_, opts) - require("typescript").setup({ server = opts }) - return true - end, - -- Specify * to use this function as a fallback for any server - -- ["*"] = function(server, opts) end, - }, - }, - }, - - -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, - -- treesitter, mason and typescript.nvim. So instead of the above, you can use: - { import = "lazyvim.plugins.extras.lang.typescript" }, - - -- add more treesitter parsers - { - "nvim-treesitter/nvim-treesitter", - opts = { - ensure_installed = { - "bash", - "html", - "javascript", - "json", - "lua", - "markdown", - "markdown_inline", - "python", - "query", - "regex", - "tsx", - "typescript", - "vim", - "yaml", - }, - }, - }, - - -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above - -- would overwrite `ensure_installed` with the new value. - -- If you'd rather extend the default config, use the code below instead: - { - "nvim-treesitter/nvim-treesitter", - opts = function(_, opts) - -- add tsx and treesitter - vim.list_extend(opts.ensure_installed, { - "tsx", - "typescript", - }) - end, - }, - - -- the opts function can also be used to change the default opts: - { - "nvim-lualine/lualine.nvim", - event = "VeryLazy", - opts = function(_, opts) - table.insert(opts.sections.lualine_x, { - function() - return "😄" - end, - }) - end, - }, - - -- or you can return new options to override all the defaults - { - "nvim-lualine/lualine.nvim", - event = "VeryLazy", - opts = function() - return { - --[[add your custom lualine config here]] - } - end, - }, - - -- use mini.starter instead of alpha - { import = "lazyvim.plugins.extras.ui.mini-starter" }, - - -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc - { import = "lazyvim.plugins.extras.lang.json" }, - - -- add any tools you want to have installed below - { - "williamboman/mason.nvim", - opts = { - ensure_installed = { - "stylua", - "shellcheck", - "shfmt", - "flake8", - }, - }, - }, -} diff --git a/modules/home/rsydn/programs/nvim/lua/plugins/lsp.lua b/modules/home/rsydn/programs/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..e29cba4 --- /dev/null +++ b/modules/home/rsydn/programs/nvim/lua/plugins/lsp.lua @@ -0,0 +1,29 @@ +-- Declare language servers provided via Nix so LazyVim skips Mason installs. +return { + { + "williamboman/mason.nvim", + opts = function(_, opts) + opts.ensure_installed = {} + end, + }, + { + "neovim/nvim-lspconfig", + opts = function(_, opts) + opts.servers = opts.servers or {} + local servers = { + lua_ls = { mason = false }, + nil_ls = { mason = false }, + pyright = { mason = false }, + tsserver = { mason = false }, + rust_analyzer = { mason = false }, + gopls = { mason = false }, + clangd = { mason = false }, + } + + for server, server_opts in pairs(servers) do + local existing = opts.servers[server] or {} + opts.servers[server] = vim.tbl_deep_extend("force", existing, server_opts) + end + end, + }, +} diff --git a/modules/home/rsydn/programs/nvim/lua/plugins/smear-cursor.lua b/modules/home/rsydn/programs/nvim/lua/plugins/smear-cursor.lua new file mode 100644 index 0000000..2916f2b --- /dev/null +++ b/modules/home/rsydn/programs/nvim/lua/plugins/smear-cursor.lua @@ -0,0 +1,6 @@ +return { + { + "sphamba/smear-cursor.nvim", + opts = {}, + }, +}