diff --git a/flake.lock b/flake.lock index 6877683..f4adb7c 100644 --- a/flake.lock +++ b/flake.lock @@ -34,6 +34,24 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "gen-luarc": { "inputs": { "flake-parts": "flake-parts", @@ -163,11 +181,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -195,12 +213,28 @@ }, "root": { "inputs": { + "flake-utils": "flake-utils", "gen-luarc": "gen-luarc", "nixpkgs": "nixpkgs_2", "presence-nvim": "presence-nvim", "workspace-diagnostics-nvim": "workspace-diagnostics-nvim" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "workspace-diagnostics-nvim": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index ecfdaf3..e1f0205 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,7 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; gen-luarc.url = "github:mrcjkb/nix-gen-luarc-json"; # Add bleeding-edge plugins here. @@ -24,6 +25,7 @@ outputs = inputs @ { self, nixpkgs, + flake-utils, gen-luarc, ... }: let @@ -34,59 +36,51 @@ "aarch64-darwin" ]; + # This is where the Neovim derivation is built. + neovim-overlay = import ./nix/neovim-overlay.nix {inherit inputs;}; + inherit (self) outputs; # This is a function that generates an attribute by calling a function you # pass to it, with each system as an argument forAllSystems = nixpkgs.lib.genAttrs supportedSystems; in - { - formatter = forAllSystems(system: nixpkgs.legacyPackages.${system}.alejandra); - - overlays = { - neovim-overlay = import ./nix/neovim-overlay.nix {inherit inputs;}; - # You can add this overlay to your NixOS configuration - default = self.outputs.overlays.neovim-overlay; + flake-utils.lib.eachSystem supportedSystems (system: let + pkgs = import nixpkgs { + inherit system; + overlays = [ + # Import the overlay, so that the final Neovim derivation(s) can be accessed via pkgs. + neovim-overlay + # This adds a function can be used to generate a .luarc.json + # containing the Neovim API all plugins in the workspace directory. + # The generated file can be symlinked in the devShell's shellHook. + gen-luarc.overlays.default + ]; }; - - packages = forAllSystems (system: - let - pkgs = import nixpkgs { - inherit system; - overlays = [ self.outputs.overlays.neovim-overlay ]; - }; - in { - nvim-pkg = pkgs.nvim-pkg; - default = self.outputs.packages.${system}.nvim-pkg; - } - ); - - devShells = forAllSystems (system: - let - pkgs = import nixpkgs { - inherit system; - overlays = [ - self.outputs.overlays.neovim-overlay - gen-luarc.overlays.default - ]; - }; - in { - default = pkgs.mkShell { - name = "nvim-devShell"; - buildInputs = with pkgs; [ - # Tools for Lua and Nix development, useful for editing files in this repo - lua-language-server - nil - stylua - luajitPackages.luacheck - ]; - shellHook = '' - # symlink the .luarc.json generated in the overlay - ln -fs ${pkgs.nvim-luarc-json} .luarc.json - ''; - }; - } - ); - - # templates = { - # }; + shell = pkgs.mkShell { + name = "nvim-devShell"; + buildInputs = with pkgs; [ + # Tools for Lua and Nix development, useful for editing files in this repo + lua-language-server + nil + stylua + luajitPackages.luacheck + ]; + shellHook = '' + # symlink the .luarc.json generated in the overlay + ln -fs ${pkgs.nvim-luarc-json} .luarc.json + ''; + }; + in { + formatter = nixpkgs.legacyPackages.${system}.alejandra; + packages = rec { + default = nvim; + nvim = pkgs.nvim-pkg; + }; + devShells = { + default = shell; + }; + }) + // { + # You can add this overlay to your NixOS configuration + overlays.default = neovim-overlay; }; } diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index 10aab96..2e3f2fb 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -120,20 +120,27 @@ with final.pkgs.lib; let # ^ bleeding-edge plugins from flake inputs ]; - extraPackages = with pkgs; [ - # Dependencies - ripgrep + extraPackages = with pkgs; + [ + # Dependencies + ripgrep - # language servers, etc. - asm-lsp # Assembly language server - clang-tools # C/C++ language server - (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools - nil # nix LSP - nodePackages.bash-language-server # Bash language server - lua-language-server - (pkgs.python312.withPackages (python-pkgs: [ python-pkgs.python-lsp-server python-pkgs.python-lsp-ruff python-pkgs.pylsp-rope])) - jsonnet-language-server - ]; + # language servers, etc. + asm-lsp # Assembly language server + clang-tools # C/C++ language server + (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools + nil # nix LSP + nodePackages.bash-language-server # Bash language server + lua-language-server + ] + ++ [ + (pkgs.python312.withPackages (python-pkgs: [ + python-pkgs.python-lsp-server + python-pkgs.python-lsp-ruff + python-pkgs.pylsp-mypy + python-pkgs.pylsp-rope + ])) + ]; in { # This is the neovim derivation # returned by the overlay