149 lines
3.7 KiB
Nix
149 lines
3.7 KiB
Nix
{
|
|
description = "Flake that contains an overlay with some mcp servers";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
|
|
|
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";
|
|
};
|
|
|
|
pyproject-build-systems = {
|
|
url = "github:pyproject-nix/build-system-pkgs";
|
|
inputs.pyproject-nix.follows = "pyproject-nix";
|
|
inputs.uv2nix.follows = "uv2nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
# Uncomment and set correct URL when available
|
|
# mcp-servers = {
|
|
# url = "github:your-org/mcp-servers";
|
|
# flake = false;
|
|
# };
|
|
};
|
|
|
|
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
|
|
)
|
|
);
|
|
|
|
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;
|
|
};
|
|
};
|
|
|
|
# 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 ];
|
|
|
|
buildPhase = ''
|
|
export HOME=$(mktemp -d)
|
|
ls -alhR
|
|
echo "starting to build..."
|
|
npm ci --no-audit --no-fund --loglevel verbose
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib $out/bin
|
|
cp -r . $out/lib
|
|
cp -r node_modules/bin $out/bin
|
|
'';
|
|
};
|
|
|
|
in {
|
|
# Formatting
|
|
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt);
|
|
|
|
# Overlays
|
|
overlays.default = final: prev: {
|
|
custom-servers = buildUvServers {
|
|
pkgs = prev;
|
|
};
|
|
|
|
};
|
|
|
|
# Packages
|
|
# packages = forAllSystems (system:
|
|
# let
|
|
# pkgs = pkgsFor system;
|
|
# in buildUvServers {
|
|
# pkgs = pkgs;
|
|
# }
|
|
#);
|
|
|
|
# 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
|
|
];
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|