153 lines
3.7 KiB
Nix
153 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";
|
|
};
|
|
|
|
arxiv-mcp-server = {
|
|
url = "github:blazickjp/arxiv-mcp-server/main";
|
|
flake = false;
|
|
};
|
|
|
|
basic-memory-mcp = {
|
|
url = "github:basicmachines-co/basic-memory/main";
|
|
flake = false;
|
|
};
|
|
|
|
# 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" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
|
pkgsFor = system: nixpkgs.legacyPackages.${system}.extend(
|
|
nixpkgs.lib.composeManyExtensions (
|
|
[] ++ builtins.attrValues self.overlays
|
|
)
|
|
);
|
|
|
|
buildUvServer = { src, pkgs, venvName }:
|
|
let
|
|
workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = "${src}/"; };
|
|
overlay = workspace.mkPyprojectOverlay {
|
|
sourcePreference = "wheel";
|
|
};
|
|
python = pkgs.python312;
|
|
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
|
|
]
|
|
);
|
|
in
|
|
pythonSet.mkVirtualEnv venvName workspace.deps.default;
|
|
|
|
# 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
|
|
'';
|
|
};
|
|
custom-serversFor = { pkgs }: {
|
|
arxiv-mcp-server = buildUvServer {
|
|
pkgs = pkgs;
|
|
src = inputs.arxiv-mcp-server;
|
|
venvName = "arxiv-mcp-env";
|
|
};
|
|
basic-memory-mcp = buildUvServer {
|
|
pkgs = pkgs;
|
|
src = inputs.basic-memory-mcp;
|
|
venvName = "basic-memory-mcp-env";
|
|
};
|
|
};
|
|
|
|
|
|
in {
|
|
# Formatting
|
|
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt);
|
|
|
|
# Overlays
|
|
overlays.default = final: prev: {
|
|
custom-servers = custom-serversFor {
|
|
pkgs = prev;
|
|
};
|
|
|
|
};
|
|
|
|
# Packages
|
|
packages = forAllSystems (system:
|
|
let
|
|
pkgs = pkgsFor system;
|
|
in custom-serversFor {
|
|
pkgs = pkgs;
|
|
}
|
|
);
|
|
|
|
# Development shell
|
|
devShells = forAllSystems (system:
|
|
let pkgs = pkgsFor system;
|
|
custom-servers = custom-serversFor { inherit pkgs; };
|
|
in {
|
|
default = pkgs.mkShell {
|
|
packages = [
|
|
# pkgs.uv
|
|
# pkgs.nodejs
|
|
custom-servers.arxiv-mcp-server
|
|
custom-servers.basic-memory-mcp
|
|
];
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|