{
  description = "Neovim configuration";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs {
          inherit system;
          overlays = [(final: prev: {
            node-lsp = final.callPackage ./node-lsp {};
          })];
        };
      in
      {
        packages.neovim = pkgs.callPackage ./neovim.nix {};
        packages.neovim-with-luadev = pkgs.callPackage ./neovim.nix { withLuadev = true; };
        packages.neovim-minimal = (pkgs.callPackage ./neovim.nix {}).minimal;
        packages.default = self.packages.${system}.neovim;
      }
    );
}