From 52cdb30b13c1cb93b78ec3c02af0de0d4715131c Mon Sep 17 00:00:00 2001 From: Heng-Yi Wu <2316687+henry40408@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:19:42 +0800 Subject: [PATCH 1/3] refactor: disable neovim --- home-manager/common/default.nix | 38 -------------- home-manager/common/neovim/init.lua | 2 - .../common/neovim/lua/config/autocmds.lua | 3 -- .../common/neovim/lua/config/keymaps.lua | 3 -- .../common/neovim/lua/config/lazy.lua | 50 ------------------- .../common/neovim/lua/config/options.lua | 10 ---- .../common/neovim/lua/plugins/colorscheme.lua | 7 --- .../common/neovim/lua/plugins/lsp.lua | 27 ---------- .../common/neovim/lua/plugins/treesitter.lua | 8 --- home-manager/common/neovim/stylua.toml | 3 -- 10 files changed, 151 deletions(-) delete mode 100644 home-manager/common/neovim/init.lua delete mode 100644 home-manager/common/neovim/lua/config/autocmds.lua delete mode 100644 home-manager/common/neovim/lua/config/keymaps.lua delete mode 100644 home-manager/common/neovim/lua/config/lazy.lua delete mode 100644 home-manager/common/neovim/lua/config/options.lua delete mode 100644 home-manager/common/neovim/lua/plugins/colorscheme.lua delete mode 100644 home-manager/common/neovim/lua/plugins/lsp.lua delete mode 100644 home-manager/common/neovim/lua/plugins/treesitter.lua delete mode 100644 home-manager/common/neovim/stylua.toml diff --git a/home-manager/common/default.nix b/home-manager/common/default.nix index 84ffc53..8d8b8f6 100644 --- a/home-manager/common/default.nix +++ b/home-manager/common/default.nix @@ -73,40 +73,6 @@ programs.gpg.enable = true; programs.lazygit.enable = true; programs.lsd.enable = true; - programs.neovim = { - enable = true; - defaultEditor = true; - extraPackages = with pkgs; [ - dockerfile-language-server-nodejs - emmet-language-server - fish - gopls - hadolint - lua-language-server - markdownlint-cli - marksman - nil - nixpkgs-fmt - nodePackages.prettier - nodePackages.volar - pyright - rust-analyzer - shfmt - stylua - taplo - tree-sitter - unzip - vscode-langservers-extracted - wget - ]; - package = pkgs.unstable.neovim-unwrapped; - plugins = with pkgs.vimPlugins; [ lazy-nvim ]; - withNodeJs = true; - withPython3 = true; - viAlias = true; - vimAlias = true; - vimdiffAlias = true; - }; programs.password-store = { enable = true; settings = { @@ -168,10 +134,6 @@ programs.zellij.enable = true; programs.zoxide.enable = true; - xdg.configFile."nvim" = { - recursive = true; - source = ./neovim; - }; xdg.configFile."zellij/config.kdl" = { source = ./zellij/config.kdl; }; diff --git a/home-manager/common/neovim/init.lua b/home-manager/common/neovim/init.lua deleted file mode 100644 index 2514f9e..0000000 --- a/home-manager/common/neovim/init.lua +++ /dev/null @@ -1,2 +0,0 @@ --- bootstrap lazy.nvim, LazyVim and your plugins -require("config.lazy") diff --git a/home-manager/common/neovim/lua/config/autocmds.lua b/home-manager/common/neovim/lua/config/autocmds.lua deleted file mode 100644 index 27e9e06..0000000 --- a/home-manager/common/neovim/lua/config/autocmds.lua +++ /dev/null @@ -1,3 +0,0 @@ --- Autocmds are automatically loaded on the VeryLazy event --- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua --- Add any additional autocmds here diff --git a/home-manager/common/neovim/lua/config/keymaps.lua b/home-manager/common/neovim/lua/config/keymaps.lua deleted file mode 100644 index 2c134f7..0000000 --- a/home-manager/common/neovim/lua/config/keymaps.lua +++ /dev/null @@ -1,3 +0,0 @@ --- Keymaps are automatically loaded on the VeryLazy event --- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua --- Add any additional keymaps here diff --git a/home-manager/common/neovim/lua/config/lazy.lua b/home-manager/common/neovim/lua/config/lazy.lua deleted file mode 100644 index 4a62c90..0000000 --- a/home-manager/common/neovim/lua/config/lazy.lua +++ /dev/null @@ -1,50 +0,0 @@ -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - -if not (vim.uv or vim.loop).fs_stat(lazypath) then - -- bootstrap lazy.nvim - -- stylua: ignore - vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) -end -vim.opt.rtp:prepend(vim.env.LAZY or lazypath) - -require("lazy").setup({ - spec = { - -- add LazyVim and import its plugins - { "LazyVim/LazyVim", import = "lazyvim.plugins", version = "v12.38.2" }, - -- https://github.com/LazyVim/LazyVim/discussions/1972#discussion-5826338 [[ - { "nvim-telescope/telescope-fzf-native.nvim", enabled = true }, - { "williamboman/mason.nvim", enabled = false }, - { "williamboman/mason-lspconfig.nvim", enabled = false }, - -- ]] - { import = "lazyvim.plugins.extras.formatting.prettier" }, - { import = "lazyvim.plugins.extras.coding.mini-surround" }, - -- import/override with your plugins - { import = "plugins" }, - }, - 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. - lazy = false, - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = false, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - }, - install = { colorscheme = { "tokyonight", "habamax" } }, - checker = { enabled = false }, -- automatically check for plugin updates - performance = { - rtp = { - -- disable some rtp plugins - disabled_plugins = { - "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - "tarPlugin", - "tohtml", - "tutor", - "zipPlugin", - }, - }, - }, -}) diff --git a/home-manager/common/neovim/lua/config/options.lua b/home-manager/common/neovim/lua/config/options.lua deleted file mode 100644 index 4b8a6f0..0000000 --- a/home-manager/common/neovim/lua/config/options.lua +++ /dev/null @@ -1,10 +0,0 @@ --- Options are automatically loaded before lazy.nvim startup --- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua --- Add any additional options here - --- ref: https://github.com/LazyVim/LazyVim/issues/1319 -vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" -vim.opt.foldmethod = "expr" - --- https://www.reddit.com/r/neovim/comments/14e4y5p/is_there_a_way_to_make_nvim_using_absolute_line/ -vim.opt.relativenumber = false diff --git a/home-manager/common/neovim/lua/plugins/colorscheme.lua b/home-manager/common/neovim/lua/plugins/colorscheme.lua deleted file mode 100644 index 5bd0f80..0000000 --- a/home-manager/common/neovim/lua/plugins/colorscheme.lua +++ /dev/null @@ -1,7 +0,0 @@ -return { - { "dracula/vim", commit = "28874a1" }, - { - "LazyVim/LazyVim", - opts = { colorscheme = "dracula" }, - }, -} diff --git a/home-manager/common/neovim/lua/plugins/lsp.lua b/home-manager/common/neovim/lua/plugins/lsp.lua deleted file mode 100644 index 9eac100..0000000 --- a/home-manager/common/neovim/lua/plugins/lsp.lua +++ /dev/null @@ -1,27 +0,0 @@ -return { - { - "neovim/nvim-lspconfig", - opts = { - servers = { - cssls = {}, - docker_compose_language_service = {}, - dockerls = {}, - emmet_language_server = {}, - eslint = {}, - gopls = {}, - jsonls = {}, - lua_ls = {}, - marksman = {}, - nil_ls = { settings = { ["nil"] = { formatting = { command = { "nixfmt" } } } } }, - pyright = {}, - ruff = {}, - ruff_lsp = {}, - rust_analyzer = {}, - taplo = {}, - volar = { - filetypes = { "typescript", "javascript", "javascriptreact", "typescriptreact", "vue", "json" }, - }, - }, - }, - }, -} diff --git a/home-manager/common/neovim/lua/plugins/treesitter.lua b/home-manager/common/neovim/lua/plugins/treesitter.lua deleted file mode 100644 index 8fde78b..0000000 --- a/home-manager/common/neovim/lua/plugins/treesitter.lua +++ /dev/null @@ -1,8 +0,0 @@ -return { - { - "nvim-treesitter/nvim-treesitter", - opts = function(_, opts) - vim.list_extend(opts.ensure_installed, { "nix" }) - end, - }, -} diff --git a/home-manager/common/neovim/stylua.toml b/home-manager/common/neovim/stylua.toml deleted file mode 100644 index 0f90030..0000000 --- a/home-manager/common/neovim/stylua.toml +++ /dev/null @@ -1,3 +0,0 @@ -indent_type = "Spaces" -indent_width = 2 -column_width = 120 From d5e337226dc21e7b4d1e8e0b9d890826b6226085 Mon Sep 17 00:00:00 2001 From: Heng-Yi Wu <2316687+henry40408@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:21:21 +0800 Subject: [PATCH 2/3] feat: enable nixvim --- flake.lock | 216 +++++++++++++++++++++++++++++++- flake.nix | 7 ++ home-manager/common/default.nix | 3 + home-manager/linux/default.nix | 3 +- 4 files changed, 227 insertions(+), 2 deletions(-) diff --git a/flake.lock b/flake.lock index 5441189..52a8dbf 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,26 @@ { "nodes": { + "devshell": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722113426, + "narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=", + "owner": "numtide", + "repo": "devshell", + "rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -16,6 +37,57 @@ "type": "github" } }, + "flake-compat_2": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727826117, + "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -34,6 +106,55 @@ "type": "github" } }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat_3", + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728092656, + "narHash": "sha256-eMeCTJZ5xBeQ0f9Os7K8DThNVSo9gy4umZLDfF5q6OM=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "1211305a5b237771e13fcca0c51e60ad47326a9a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -55,6 +176,49 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726989464, + "narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-24.05", + "repo": "home-manager", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727999297, + "narHash": "sha256-LTJuQPCsSItZ/8TieFeP30iY+uaLoD0mT0tAj1gLeyQ=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "8c8388ade72e58efdeae71b4cbb79e872c23a56b", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, "nixos-wsl": { "inputs": { "flake-compat": "flake-compat", @@ -124,12 +288,41 @@ "type": "github" } }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts", + "git-hooks": "git-hooks", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1728131554, + "narHash": "sha256-QA4wmlIibVpJFsa5Pl01hbfq5wzLZtMpJC9gq39LTTo=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "12cc74ae4b22cb20486c22a3163d7cdbd7fdf047", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "nixos-24.05", + "repo": "nixvim", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", "nixos-wsl": "nixos-wsl", "nixpkgs": "nixpkgs_2", - "nixpkgs-unstable": "nixpkgs-unstable" + "nixpkgs-unstable": "nixpkgs-unstable", + "nixvim": "nixvim" } }, "systems": { @@ -146,6 +339,27 @@ "repo": "default", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727984844, + "narHash": "sha256-xpRqITAoD8rHlXQafYZOLvUXCF6cnZkPfoq67ThN0Hc=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "4446c7a6fc0775df028c5a3f6727945ba8400e64", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 5230058..152869f 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,12 @@ # NixOS WSL nixos-wsl.url = "github:nix-community/nixos-wsl/2405.5.4"; + + # nixvim + nixvim = { + url = "github:nix-community/nixvim/nixos-24.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -21,6 +27,7 @@ self, nixpkgs, home-manager, + nixvim, ... }@inputs: let diff --git a/home-manager/common/default.nix b/home-manager/common/default.nix index 8d8b8f6..6008be4 100644 --- a/home-manager/common/default.nix +++ b/home-manager/common/default.nix @@ -73,6 +73,9 @@ programs.gpg.enable = true; programs.lazygit.enable = true; programs.lsd.enable = true; + programs.nixvim = { + enable = true; + }; programs.password-store = { enable = true; settings = { diff --git a/home-manager/linux/default.nix b/home-manager/linux/default.nix index c081df6..580c0b9 100644 --- a/home-manager/linux/default.nix +++ b/home-manager/linux/default.nix @@ -1,11 +1,12 @@ # This is your home-manager configuration file # Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix) -{ outputs, pkgs, ... }: +{ inputs, outputs, pkgs, ... }: { # You can import other home-manager modules here imports = [ # If you want to use home-manager modules from other flakes (such as nix-colors): # inputs.nix-colors.homeManagerModule + inputs.nixvim.homeManagerModules.nixvim # You can also split up your configuration and import pieces of it here: ../common From 000b38a155f02194be10335e58a408966934265f Mon Sep 17 00:00:00 2001 From: Heng-Yi Wu <2316687+henry40408@users.noreply.github.com> Date: Sun, 6 Oct 2024 17:13:59 +0800 Subject: [PATCH 3/3] refactor: customize nixvim --- flake.lock | 8 +- flake.nix | 3 +- home-manager/common/default.nix | 5 +- home-manager/common/nixvim/appearance.nix | 10 ++ home-manager/common/nixvim/bufferline.nix | 42 +++++++ home-manager/common/nixvim/cmp.nix | 41 ++++++ home-manager/common/nixvim/default.nix | 37 ++++++ home-manager/common/nixvim/flash.nix | 65 ++++++++++ home-manager/common/nixvim/keymaps.nix | 144 ++++++++++++++++++++++ home-manager/common/nixvim/lsp.nix | 51 ++++++++ home-manager/common/nixvim/mini.nix | 51 ++++++++ home-manager/common/nixvim/neo-tree.nix | 20 +++ home-manager/common/nixvim/plugins.nix | 33 +++++ home-manager/common/nixvim/treesitter.nix | 8 ++ home-manager/linux/default.nix | 7 +- 15 files changed, 516 insertions(+), 9 deletions(-) create mode 100644 home-manager/common/nixvim/appearance.nix create mode 100644 home-manager/common/nixvim/bufferline.nix create mode 100644 home-manager/common/nixvim/cmp.nix create mode 100644 home-manager/common/nixvim/default.nix create mode 100644 home-manager/common/nixvim/flash.nix create mode 100644 home-manager/common/nixvim/keymaps.nix create mode 100644 home-manager/common/nixvim/lsp.nix create mode 100644 home-manager/common/nixvim/mini.nix create mode 100644 home-manager/common/nixvim/neo-tree.nix create mode 100644 home-manager/common/nixvim/plugins.nix create mode 100644 home-manager/common/nixvim/treesitter.nix diff --git a/flake.lock b/flake.lock index 52a8dbf..068a117 100644 --- a/flake.lock +++ b/flake.lock @@ -258,17 +258,17 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1721974850, - "narHash": "sha256-Hsc8wzvG+ArGMFrogaS8C189o8JAFZ8WExY71s4mdHQ=", + "lastModified": 1725737037, + "narHash": "sha256-Bz1OCDMjiF6y6mb64w2qVKLjgPzuspXqkKR/K7/7hfw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "91fb48da7554115400cc6b7a1bfa603e5cfefdb7", + "rev": "26ddb99cfd3f8e1092057f90e42db325dad4e5a5", "type": "github" }, "original": { "owner": "nixos", "repo": "nixpkgs", - "rev": "91fb48da7554115400cc6b7a1bfa603e5cfefdb7", + "rev": "26ddb99cfd3f8e1092057f90e42db325dad4e5a5", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 152869f..beb229a 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,8 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; # Nixpkgs unstable - nixpkgs-unstable.url = "github:nixos/nixpkgs/91fb48da7554115400cc6b7a1bfa603e5cfefdb7"; + # vue-language-server: 2.1.2 -> 2.1.6 + nixpkgs-unstable.url = "github:nixos/nixpkgs/26ddb99cfd3f8e1092057f90e42db325dad4e5a5"; # Home manager home-manager.url = "github:nix-community/home-manager/release-24.05"; diff --git a/home-manager/common/default.nix b/home-manager/common/default.nix index 6008be4..53df9b5 100644 --- a/home-manager/common/default.nix +++ b/home-manager/common/default.nix @@ -1,5 +1,7 @@ { pkgs, ... }: { + imports = [ ./nixvim ]; + home.packages = with pkgs; [ fd fnm @@ -73,9 +75,6 @@ programs.gpg.enable = true; programs.lazygit.enable = true; programs.lsd.enable = true; - programs.nixvim = { - enable = true; - }; programs.password-store = { enable = true; settings = { diff --git a/home-manager/common/nixvim/appearance.nix b/home-manager/common/nixvim/appearance.nix new file mode 100644 index 0000000..ab95f1b --- /dev/null +++ b/home-manager/common/nixvim/appearance.nix @@ -0,0 +1,10 @@ +{ + programs.nixvim = { + colorschemes = { + base16 = { + enable = true; + colorscheme = "irblack"; + }; + }; + }; +} diff --git a/home-manager/common/nixvim/bufferline.nix b/home-manager/common/nixvim/bufferline.nix new file mode 100644 index 0000000..2ec6ee1 --- /dev/null +++ b/home-manager/common/nixvim/bufferline.nix @@ -0,0 +1,42 @@ +{ + programs.nixvim = { + plugins.bufferline.enable = true; + keymaps = [ + { + key = "bo"; + action = "BufferLineCloseOthers"; + options = { + desc = "Delete Other Buffers"; + }; + } + { + key = "[B"; + action = "BufferLineMovePrev"; + options = { + desc = "Move Buffer Prev"; + }; + } + { + key = "[b"; + action = "BufferLineCyclePrev"; + options = { + desc = "Prev Buffer"; + }; + } + { + key = "]B"; + action = "BufferLineMoveNext"; + options = { + desc = "Move Buffer Next"; + }; + } + { + key = "]b"; + action = "BufferLineCycleNext"; + options = { + desc = "Next Buffer"; + }; + } + ]; + }; +} diff --git a/home-manager/common/nixvim/cmp.nix b/home-manager/common/nixvim/cmp.nix new file mode 100644 index 0000000..22494ad --- /dev/null +++ b/home-manager/common/nixvim/cmp.nix @@ -0,0 +1,41 @@ +{ + programs.nixvim = { + plugins.luasnip.enable = true; + plugins.cmp = { + enable = true; + autoEnableSources = true; + settings = { + mapping = { + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.scroll_docs(-4)"; + "" = "cmp.mapping.abort()"; + "" = "cmp.mapping.scroll_docs(4)"; + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.confirm({ select = true })"; + "" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })"; + "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + }; + snippet = { + # otherwise: snippet engine is not configured + expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + }; + sources = [ + { name = "nvim_lsp"; } + { name = "nvim_lsp_signature_help"; } + { name = "nvim_lsp_document_symbol"; } + { name = "path"; } + { name = "buffer"; } + { + name = "luasnip"; + keywordLength = 3; + } + ]; + }; + }; + }; +} diff --git a/home-manager/common/nixvim/default.nix b/home-manager/common/nixvim/default.nix new file mode 100644 index 0000000..0588736 --- /dev/null +++ b/home-manager/common/nixvim/default.nix @@ -0,0 +1,37 @@ +{ + imports = [ + ./appearance.nix + ./bufferline.nix + ./cmp.nix + ./flash.nix + ./keymaps.nix + ./lsp.nix + ./mini.nix + ./neo-tree.nix + ./plugins.nix + ./treesitter.nix + ]; + programs.nixvim = { + enable = true; + globals.mapleader = " "; + opts = { + # highlight current line + cursorline = true; + # line numbers + number = true; + relativenumber = true; + # search + ignorecase = true; + smartcase = true; + ruler = true; # show line and column when search + # tabs + tabstop = 2; + shiftwidth = 2; + expandtab = true; + smarttab = true; + # always show the signcolumn, otherwise text would be shifted when displaying error icons + # https://github.com/Ahwxorg/nixvim-config/blob/d90d75bd7c69637e08cbd3969ec0373d6db7ffdc/config/options.nix + signcolumn = "yes"; + }; + }; +} diff --git a/home-manager/common/nixvim/flash.nix b/home-manager/common/nixvim/flash.nix new file mode 100644 index 0000000..33fb6a7 --- /dev/null +++ b/home-manager/common/nixvim/flash.nix @@ -0,0 +1,65 @@ +{ + programs.nixvim = { + plugins.flash = { + enable = true; + jump = { + autojump = true; + }; + label = { + uppercase = false; + rainbow = { + enabled = true; + }; + }; + labels = "asdfghjklqwertyuiopzxcvbnm"; + search = { + mode = "fuzzy"; + }; + }; + keymaps = [ + { + key = "s"; + action = "lua require('flash').jump()"; + mode = [ + "n" + "x" + "o" + ]; + options = { + desc = "Flash"; + }; + } + { + key = "S"; + action = "lua require('flash').treesitter()"; + mode = [ + "n" + "x" + "o" + ]; + options = { + desc = "Flash Treesitter"; + }; + } + { + key = "r"; + action = "lua require('flash').remote()"; + mode = "o"; + options = { + desc = "Remote Flash"; + }; + } + { + key = "R"; + action = "lua require('flash').treesitter_search()"; + mode = [ + "x" + "o" + ]; + options = { + desc = "Treesitter Search"; + }; + } + ]; + }; +} diff --git a/home-manager/common/nixvim/keymaps.nix b/home-manager/common/nixvim/keymaps.nix new file mode 100644 index 0000000..3500143 --- /dev/null +++ b/home-manager/common/nixvim/keymaps.nix @@ -0,0 +1,144 @@ +{ + programs.nixvim = { + keymaps = [ + # https://github.com/LazyVim/LazyVim/blob/13a4a84e3485a36e64055365665a45dc82b6bf71/lua/lazyvim/config/keymaps.lua + # better up / down + { + mode = [ + "n" + "x" + ]; + key = "j"; + action = "v:count == 0 ? 'gj' : 'j'"; + options = { + desc = "Down"; + expr = true; + silent = true; + }; + } + { + mode = [ + "n" + "x" + ]; + key = ""; + action = "v:count == 0 ? 'gj' : 'j'"; + options = { + desc = "Down"; + expr = true; + silent = true; + }; + } + { + mode = [ + "n" + "x" + ]; + key = "k"; + action = "v:count == 0 ? 'gk' : 'k'"; + options = { + desc = "Up"; + expr = true; + silent = true; + }; + } + { + mode = [ + "n" + "x" + ]; + key = ""; + action = "v:count == 0 ? 'gk' : 'k'"; + options = { + desc = "Up"; + expr = true; + silent = true; + }; + } + # move to window using the + { + mode = "n"; + key = ""; + action = "h"; + options = { + desc = "Go to Left Window"; + remap = true; + }; + } + { + mode = "n"; + key = ""; + action = "j"; + options = { + desc = "Go to Lower Window"; + remap = true; + }; + } + { + mode = "n"; + key = ""; + action = "k"; + options = { + desc = "Go to Upper Window"; + remap = true; + }; + } + { + mode = "n"; + key = ""; + action = "l"; + options = { + desc = "Go to Right Window"; + remap = true; + }; + } + # resize window using + # move lines + # buffers + # clear search with + { + mode = [ + "i" + "n" + ]; + key = ""; + action = "noh"; + options = { + desc = "Escape and Clear hlsearch"; + }; + } + # https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n + # add undo break-points + # save file + { + mode = [ + "i" + "x" + "n" + "s" + ]; + key = ""; + action = "w"; + options = { + desc = "Save File"; + }; + } + # keywordprg + # better indenting + # commenting + # new file + # quit + { + mode = "n"; + key = "qq"; + action = "qa"; + options = { + desc = "Quit All"; + }; + } + # terminal mappings + # windows + # tabs + ]; + }; +} diff --git a/home-manager/common/nixvim/lsp.nix b/home-manager/common/nixvim/lsp.nix new file mode 100644 index 0000000..e3782c3 --- /dev/null +++ b/home-manager/common/nixvim/lsp.nix @@ -0,0 +1,51 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + plugins.conform-nvim = { + enable = true; + formattersByFt = { + javascript = [ "prettierd" ]; + javascriptreact = [ "prettierd" ]; + typescript = [ "prettierd" ]; + typescriptreact = [ "prettierd" ]; + nix = [ "nixfmt" ]; + }; + formatOnSave = { + timeoutMs = 500; + lspFallback = true; + }; + }; + plugins.lsp = { + enable = true; + servers = { + eslint.enable = true; + gopls.enable = true; + nil-ls.enable = true; # nix language server + rust-analyzer = { + enable = true; + # do not install cargo and rustc + installCargo = false; + installRustc = false; + }; + volar = { + enable = true; + filetypes = [ + "typescript" + "javascript" + "javascriptreact" + "typescriptreact" + "vue" + ]; + settings = { + init_options = { + vue = { + hybridMode = true; + }; + }; + }; + package = pkgs.unstable.vue-language-server; + }; + }; + }; + }; +} diff --git a/home-manager/common/nixvim/mini.nix b/home-manager/common/nixvim/mini.nix new file mode 100644 index 0000000..dee0cc5 --- /dev/null +++ b/home-manager/common/nixvim/mini.nix @@ -0,0 +1,51 @@ +{ + programs.nixvim = { + plugins.mini = { + enable = true; + modules = { + ai = { }; + bracketed = { }; + diff = { }; + pairs = { }; + pick = { }; + surround = { + mappings = { + add = "gsa"; + delete = "gsd"; + find = "gsf"; + find_left = "gsF"; + highlight = "gsh"; + replace = "gsr"; + update_n_lines = "gsn"; + }; + }; + }; + }; + keymaps = [ + { + key = "fb"; + action = "Pick buffers"; + options = { + desc = "Buffers"; + silent = true; + }; + } + { + key = "ff"; + action = "Pick files"; + options = { + desc = "Find Files with Telescope"; + silent = true; + }; + } + { + key = "fg"; + action = "Pick grep_live"; + options = { + desc = "Live Grep"; + silent = true; + }; + } + ]; + }; +} diff --git a/home-manager/common/nixvim/neo-tree.nix b/home-manager/common/nixvim/neo-tree.nix new file mode 100644 index 0000000..87f72ea --- /dev/null +++ b/home-manager/common/nixvim/neo-tree.nix @@ -0,0 +1,20 @@ +{ + programs.nixvim = { + plugins.neo-tree = { + enable = true; + closeIfLastWindow = true; + filesystem.followCurrentFile.enabled = true; + buffers.followCurrentFile.enabled = true; + }; + keymaps = [ + { + key = "e"; + action = "Neotree toggle"; + options = { + desc = "Explorer NeoTree (Root Dir)"; + remap = true; + }; + } + ]; + }; +} diff --git a/home-manager/common/nixvim/plugins.nix b/home-manager/common/nixvim/plugins.nix new file mode 100644 index 0000000..fd1c7a5 --- /dev/null +++ b/home-manager/common/nixvim/plugins.nix @@ -0,0 +1,33 @@ +{ + programs.nixvim = { + plugins = { + lualine.enable = true; # bottom status line + + comment.enable = true; + cursorline.enable = true; + dashboard.enable = true; + friendly-snippets.enable = true; + fidget.enable = true; + gitsigns.enable = true; + indent-blankline = { + enable = true; + settings = { + exclude = { + filetypes = [ + "" + "TelescopePrompt" + "TelescopeResults" + "checkhealth" + "help" + "lspinfo" + "packer" + "yaml" + "dashboard" + ]; + }; + }; + }; + which-key.enable = true; + }; + }; +} diff --git a/home-manager/common/nixvim/treesitter.nix b/home-manager/common/nixvim/treesitter.nix new file mode 100644 index 0000000..9361270 --- /dev/null +++ b/home-manager/common/nixvim/treesitter.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + programs.nixvim = { + plugins.treesitter = { + enable = true; + }; + }; +} diff --git a/home-manager/linux/default.nix b/home-manager/linux/default.nix index 580c0b9..d60e3ea 100644 --- a/home-manager/linux/default.nix +++ b/home-manager/linux/default.nix @@ -1,6 +1,11 @@ # This is your home-manager configuration file # Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix) -{ inputs, outputs, pkgs, ... }: +{ + inputs, + outputs, + pkgs, + ... +}: { # You can import other home-manager modules here imports = [