144 lines
4.1 KiB
Nix
144 lines
4.1 KiB
Nix
{
|
|
description = "Flake that contains an overlay with some mcp servers";
|
|
|
|
inputs = {
|
|
|
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
|
treefmt-nix.url = "github:numtide/treefmt-nix";
|
|
|
|
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" ];
|
|
pkgsFor =
|
|
system:
|
|
nixpkgs.legacyPackages.${system}.extend (
|
|
nixpkgs.lib.composeManyExtensions ([ ] ++ builtins.attrValues self.overlays)
|
|
);
|
|
eachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f (pkgsFor system));
|
|
|
|
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
|
|
|
|
treefmtEval = eachSystem (pkgs: inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix);
|
|
|
|
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;
|
|
});
|
|
|
|
# Overlays
|
|
overlays.default = _final: prev: {
|
|
custom-servers = buildUvServers prev;
|
|
};
|
|
|
|
# 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
|
|
];
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|