{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; utils.url = "github:numtide/flake-utils"; # Plenary (required by crates-nvim) plenary-nvim = { url = "github:nvim-lua/plenary.nvim"; flake = false; }; # config # https://github.com/gpanders/editorconfig.nvim editorconfig-nvim = { url = "github:gpanders/editorconfig.nvim?rev=e72d2331b43e3f08d0ecca44cecded4e20c01fab"; flake = false; }; # explorer # https://github.com/kyazdani42/nvim-tree.lua nvim-tree-lua = { url = "github:kyazdani42/nvim-tree.lua?rev=fba97517bb570702be98718c9f841ae9b359133e"; flake = false; }; # https://github.com/nvim-telescope/telescope.nvim telescope-nvim = { url = "github:nvim-telescope/telescope.nvim?rev=f174a0367b4fc7cb17710d867e25ea792311c418"; flake = false; }; # https://github.com/nvim-telescope/telescope-live-grep-args.nvim telescope-live-grep-args-nvim = { url = "github:nvim-telescope/telescope-live-grep-args.nvim?rev=32b633b062d1168a2d18ad27994e5b4ef97f0a74"; flake = false; }; # formatter # https://github.com/sbdchd/neoformat neoformat = { url = "github:sbdchd/neoformat?rev=0ae951121da29a157d80db70c32679b428afffdc"; flake = false; }; # git # https://github.com/lewis6991/gitsigns.nvim gitsigns-nvim = { url = "github:lewis6991/gitsigns.nvim?rev=f98c85e7c3d65a51f45863a34feb4849c82f240f"; flake = false; }; # lsp # https://github.com/neovim/nvim-lspconfig nvim-lspconfig = { url = "github:neovim/nvim-lspconfig?rev=d4eb971db353ccf78cefb3be1b05483b69ec1e69"; flake = false; }; # https://github.com/tamago324/nlsp-settings.nvim nlsp-settings-nvim = { url = "github:tamago324/nlsp-settings.nvim?rev=effb5f50b2ad7d6070e429635384345ca4be078e"; flake = false; }; # https://github.com/glepnir/lspsaga.nvim lspsaga-nvim = { url = "github:glepnir/lspsaga.nvim?rev=f33bc99d0ed3ed691a58b3339decf4e1933c3f9e"; flake = false; }; # https://github.com/L3MON4D3/LuaSnip luasnip = { url = "github:L3MON4D3/LuaSnip?rev=d36c063b7f6e701852f7880f1314656592a61b4f"; flake = false; }; # https://github.com/hrsh7th/nvim-cmp nvim-cmp = { url = "github:hrsh7th/nvim-cmp?rev=17a55b3d5498c617855d015bbcad0c872d10c879"; flake = false; }; # https://github.com/hrsh7th/cmp-nvim-lsp cmp-nvim-lsp = { url = "github:hrsh7th/cmp-nvim-lsp?rev=affe808a5c56b71630f17aa7c38e15c59fd648a8"; flake = false; }; # https://github.com/saadparwaiz1/cmp_luasnip cmp-luasnip = { url = "github:saadparwaiz1/cmp_luasnip?rev=a9de941bcbda508d0a45d28ae366bb3f08db2e36"; flake = false; }; # syntax # https://github.com/nvim-treesitter/nvim-treesitter nvim-treesitter = { url = "github:nvim-treesitter/nvim-treesitter?rev=a60aa7b2e1dd9219c6356f65ba48bdbd50090abd"; flake = false; }; # theme # https://github.com/nanozuki/tabby.nvim tabby-nvim = { url = "github:nanozuki/tabby.nvim?rev=916c9e56d043906a441cd9f905e2ca1f5c4dddb0"; flake = false; }; # https://github.com/nvim-lualine/lualine.nvim lualine-nvim = { url = "github:nvim-lualine/lualine.nvim?rev=a52f078026b27694d2290e34efa61a6e4a690621"; flake = false; }; # https://github.com/arkav/lualine-lsp-progress lualine-lsp-progress = { url = "github:/arkav/lualine-lsp-progress?rev=56842d097245a08d77912edf5f2a69ba29f275d7"; flake = false; }; # https://github.com/kyazdani42/nvim-web-devicons nvim-web-devicons = { url = "github:kyazdani42/nvim-web-devicons?rev=969728506c0175644a1d448f55e311ccdada7eaf"; flake = false; }; # https://github.com/catppuccin/nvim theme = { url = "github:catppuccin/nvim?rev=9ac18414f0446478024b19018d73b7ea14f6fc96"; flake = false; }; # ux # https://github.com/phaazon/hop.nvim hop-nvim = { url = "github:phaazon/hop.nvim?rev=6591b3656b75ff313cc38dc662a7ee8f75f1c165"; flake = false; }; # https://github.com/nvim-orgmode/orgmode nvim-orgmode = { url = "github:nvim-orgmode/orgmode?rev=806b8b9b81eaaf9b236f0a20d8e0486da23f448c"; flake = false; }; # https://github.com/akinsho/org-bullets.nvim org-bullets-nvim = { url = "github:akinsho/org-bullets.nvim"; flake = false; }; }; outputs = inputs @ { self, nixpkgs, utils, ... }: let inputPlugins = [ "plenary-nvim" # config "editorconfig-nvim" # explorer "nvim-tree-lua" "telescope-nvim" "telescope-live-grep-args-nvim" # formatter "neoformat" # git "gitsigns-nvim" # lsp "nvim-lspconfig" "nlsp-settings-nvim" "lspsaga-nvim" "luasnip" "nvim-cmp" "cmp-nvim-lsp" "cmp-luasnip" # syntax "nvim-treesitter" # theme "tabby-nvim" "lualine-nvim" "lualine-lsp-progress" "nvim-web-devicons" "theme" # ux "hop-nvim" "nvim-orgmode" "org-bullets-nvim" ]; mkNvimPlugins = { lib, vimUtils, vimPlugins, ... }: let inherit (builtins) getAttr attrNames pathExists readDir; inherit (lib) listToAttrs nameValuePair; buildPlugin = name: vimUtils.buildVimPluginFrom2Nix { name = name; src = getAttr name inputs; patches = lib.optional (pathExists ./patches/${name}) (map (fn: ./patches/${name}/${fn}) (attrNames (readDir ./patches/${name})) ); }; buildPluginValuePair = n: nameValuePair n (buildPlugin n); customPlugins = (listToAttrs (map buildPluginValuePair inputPlugins)); in { vimPlugins = vimPlugins // customPlugins; }; in { overlays = { default = final: prev: { myneovim = prev.callPackage self (mkNvimPlugins prev); }; }; } // utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; neovim = pkgs.callPackage self (mkNvimPlugins pkgs); testNeovim = (neovim.override { enableDevIcons = true; enableTabby = true; enableOrgMode = true; grammarFileTypes = [ "nix" "lua" "org" ]; }); in { apps.default = { type = "app"; program = "${neovim}/bin/nvim"; }; apps.test = { type = "app"; program = "${testNeovim}/bin/nvim"; }; packages.default = neovim; packages.test = testNeovim; devShells.default = pkgs.mkShell { packages = [ pkgs.stylua # lua formatter ]; }; }); }