diff --git a/flake.lock b/flake.lock index 71e077b..6dd6cfa 100644 --- a/flake.lock +++ b/flake.lock @@ -16,6 +16,22 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1735554305, + "narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "pyproject-build-systems": { "inputs": { "nixpkgs": [ @@ -67,9 +83,28 @@ "nixpkgs": "nixpkgs", "pyproject-build-systems": "pyproject-build-systems", "pyproject-nix": "pyproject-nix", + "treefmt-nix": "treefmt-nix", "uv2nix": "uv2nix" } }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1742303424, + "narHash": "sha256-2R7cGdcA2npQQcIWu2cTlU63veTzwVZe78BliIuJT00=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "b3b938ab8ba2e8a0ce9ee9b30ccfa5e903ae5753", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "uv2nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index 1c2b4ac..9b12c36 100644 --- a/flake.nix +++ b/flake.nix @@ -1,148 +1,143 @@ { - description = "Flake that contains an overlay with some mcp servers"; + description = "Flake that contains an overlay with some mcp servers"; - inputs = { - nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + inputs = { - pyproject-nix.url = "github:pyproject-nix/pyproject.nix"; - pyproject-nix.inputs.nixpkgs.follows = "nixpkgs"; - - uv2nix = { - url = "github:pyproject-nix/uv2nix"; - inputs.pyproject-nix.follows = "pyproject-nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + treefmt-nix.url = "github:numtide/treefmt-nix"; - pyproject-build-systems = { - url = "github:pyproject-nix/build-system-pkgs"; - inputs.pyproject-nix.follows = "pyproject-nix"; - inputs.uv2nix.follows = "uv2nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + pyproject-nix.url = "github:pyproject-nix/pyproject.nix"; + pyproject-nix.inputs.nixpkgs.follows = "nixpkgs"; - # Uncomment and set correct URL when available - # mcp-servers = { - # url = "github:your-org/mcp-servers"; - # flake = false; - # }; - }; + uv2nix = { + url = "github:pyproject-nix/uv2nix"; + inputs.pyproject-nix.follows = "pyproject-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; - outputs = { self, nixpkgs, ... }@inputs: - let - supportedSystems = [ "x86_64-linux"]; - forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - pkgsFor = system: nixpkgs.legacyPackages.${system}.extend( - nixpkgs.lib.composeManyExtensions ( - [] ++ builtins.attrValues self.overlays - ) - ); + pyproject-build-systems = { + url = "github:pyproject-nix/build-system-pkgs"; + inputs.pyproject-nix.follows = "pyproject-nix"; + inputs.uv2nix.follows = "uv2nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; - buildUvServers = { pkgs }: - let - inherit (pkgs.callPackage inputs.pyproject-nix.build.util {}) mkApplication; - workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; - overlay = workspace.mkPyprojectOverlay { - sourcePreference = "wheel"; - }; - python = pkgs.python313; - pyprojectOverrides = final: prev: { - sgmllib3k = prev.sgmllib3k.overrideAttrs (old: { - nativeBuildInputs = - old.nativeBuildInputs or [ ] ++ ( - final.resolveBuildSystem { - setuptools-scm = [ ]; - setuptools = [ ]; - } - ); - }); - }; - pythonSet = (pkgs.callPackage inputs.pyproject-nix.build.packages { - inherit python; - }).overrideScope ( - nixpkgs.lib.composeManyExtensions [ - inputs.pyproject-build-systems.overlays.default - overlay - pyprojectOverrides - ] - ); - venv = (pythonSet.mkVirtualEnv "uv-mcp-envs" workspace.deps.default).overrideAttrs(old: { - venvIgnoreCollisions = [ "*" ]; - }); - in { - arxiv-mcp-server = mkApplication { - inherit venv; - package = pythonSet.arxiv-mcp-server; - }; - basic-memory-server = mkApplication { - inherit venv; - package = pythonSet.basic-memory; - }; - mcp-text-editor = mkApplication { - inherit venv; - package = pythonSet.mcp-text-editor; - }; - }; + # Uncomment and set correct URL when available + # mcp-servers = { + # url = "github:your-org/mcp-servers"; + # flake = false; + # }; + }; - # Build function for MCP servers - buildMcpServer = { pkgs }: - pkgs.stdenv.mkDerivation { - pname = "mcp-servers"; - version = "0.1.0"; - src = inputs.mcp-servers; - nativeBuildInputs = [ pkgs.nodejs pkgs.makeWrapper ]; + outputs = + { self, nixpkgs, ... }@inputs: + let + supportedSystems = [ "x86_64-linux" ]; + pkgsFor = + system: + nixpkgs.legacyPackages.${system}.extend ( + nixpkgs.lib.composeManyExtensions ([ ] ++ builtins.attrValues self.overlays) + ); + eachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f (pkgsFor system)); - buildPhase = '' - export HOME=$(mktemp -d) - ls -alhR - echo "starting to build..." - npm ci --no-audit --no-fund --loglevel verbose - ''; + buildUvServers = ( + pkgs: + let + inherit (pkgs.callPackage inputs.pyproject-nix.build.util { }) mkApplication; + workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; + overlay = workspace.mkPyprojectOverlay { + sourcePreference = "wheel"; + }; + python = pkgs.python313; + pyprojectOverrides = final: prev: { + sgmllib3k = prev.sgmllib3k.overrideAttrs (old: { + nativeBuildInputs = + old.nativeBuildInputs or [ ] + ++ (final.resolveBuildSystem { + setuptools-scm = [ ]; + setuptools = [ ]; + }); + }); + }; + pythonSet = + (pkgs.callPackage inputs.pyproject-nix.build.packages { + inherit python; + }).overrideScope + ( + nixpkgs.lib.composeManyExtensions [ + inputs.pyproject-build-systems.overlays.default + overlay + pyprojectOverrides + ] + ); + venv = (pythonSet.mkVirtualEnv "uv-mcp-envs" workspace.deps.default).overrideAttrs (_old: { + venvIgnoreCollisions = [ "*" ]; + }); + in + { + arxiv-mcp-server = mkApplication { + inherit venv; + package = pythonSet.arxiv-mcp-server; + }; + basic-memory-server = mkApplication { + inherit venv; + package = pythonSet.basic-memory; + }; + mcp-text-editor = mkApplication { + inherit venv; + package = pythonSet.mcp-text-editor; + }; + } + ); - installPhase = '' - mkdir -p $out/lib $out/bin - cp -r . $out/lib - cp -r node_modules/bin $out/bin - ''; - }; + # Build function for MCP servers - in { - # Formatting - formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt); + treefmtEval = eachSystem (pkgs: inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix); - # Overlays - overlays.default = final: prev: { - custom-servers = buildUvServers { - pkgs = prev; - }; + in + { + # Formatting + # formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt); + formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper); - }; + # for `nix flake check` + checks = eachSystem (pkgs: { + formatting = treefmtEval.${pkgs.system}.config.build.check self; + }); - # Packages - # packages = forAllSystems (system: - # let - # pkgs = pkgsFor system; - # in buildUvServers { - # pkgs = pkgs; - # } - #); + # Overlays + overlays.default = _final: prev: { + custom-servers = buildUvServers prev; + }; - # Development shell - devShells = forAllSystems (system: - let pkgs = pkgsFor system; - uv-servers = buildUvServers { inherit pkgs; }; - in { - default = pkgs.mkShell { - packages = [ - pkgs.python313 - pkgs.uv - pkgs.nodejs - pkgs.node2nix - uv-servers.arxiv-mcp-server - uv-servers.mcp-text-editor - uv-servers.basic-memory-server - ]; - }; - } - ); - }; + # Packages + # packages = forAllSystems (system: + # let + # pkgs = pkgsFor system; + # in buildUvServers { + # pkgs = pkgs; + # } + #); + + # Development shell + devShells = eachSystem ( + pkgs: + let + uv-servers = buildUvServers pkgs; + in + { + default = pkgs.mkShell { + packages = [ + pkgs.python313 + pkgs.uv + pkgs.nodejs + pkgs.node2nix + uv-servers.arxiv-mcp-server + uv-servers.mcp-text-editor + uv-servers.basic-memory-server + ]; + }; + } + ); + }; } diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..1d2496b --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,18 @@ +# treefmt.nix +{ ... }: +{ + projectRootFile = "treefmt.nix"; + settings.global.excludes = [ + "*.toml" + "*.txt" + ]; + + programs.deadnix.enable = true; + programs.mdsh.enable = true; + programs.nixfmt.enable = true; + programs.shellcheck.enable = true; + programs.shfmt.enable = true; + programs.yamlfmt.enable = true; + programs.just.enable = true; + +}