trying out change with formatter

This commit is contained in:
2025-03-18 12:37:04 -05:00
parent 6769b5cbbe
commit cdd7e69dda
3 changed files with 180 additions and 132 deletions

35
flake.lock generated
View File

@@ -16,6 +16,22 @@
"type": "github" "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": { "pyproject-build-systems": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -67,9 +83,28 @@
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"pyproject-build-systems": "pyproject-build-systems", "pyproject-build-systems": "pyproject-build-systems",
"pyproject-nix": "pyproject-nix", "pyproject-nix": "pyproject-nix",
"treefmt-nix": "treefmt-nix",
"uv2nix": "uv2nix" "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": { "uv2nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [

259
flake.nix
View File

@@ -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 = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
pyproject-nix.url = "github:pyproject-nix/pyproject.nix"; nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
pyproject-nix.inputs.nixpkgs.follows = "nixpkgs"; treefmt-nix.url = "github:numtide/treefmt-nix";
uv2nix = {
url = "github:pyproject-nix/uv2nix";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
pyproject-build-systems = { pyproject-nix.url = "github:pyproject-nix/pyproject.nix";
url = "github:pyproject-nix/build-system-pkgs"; pyproject-nix.inputs.nixpkgs.follows = "nixpkgs";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.uv2nix.follows = "uv2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# Uncomment and set correct URL when available uv2nix = {
# mcp-servers = { url = "github:pyproject-nix/uv2nix";
# url = "github:your-org/mcp-servers"; inputs.pyproject-nix.follows = "pyproject-nix";
# flake = false; inputs.nixpkgs.follows = "nixpkgs";
# }; };
};
outputs = { self, nixpkgs, ... }@inputs: pyproject-build-systems = {
let url = "github:pyproject-nix/build-system-pkgs";
supportedSystems = [ "x86_64-linux"]; inputs.pyproject-nix.follows = "pyproject-nix";
forAllSystems = nixpkgs.lib.genAttrs supportedSystems; inputs.uv2nix.follows = "uv2nix";
pkgsFor = system: nixpkgs.legacyPackages.${system}.extend( inputs.nixpkgs.follows = "nixpkgs";
nixpkgs.lib.composeManyExtensions ( };
[] ++ builtins.attrValues self.overlays
)
);
buildUvServers = { pkgs }: # Uncomment and set correct URL when available
let # mcp-servers = {
inherit (pkgs.callPackage inputs.pyproject-nix.build.util {}) mkApplication; # url = "github:your-org/mcp-servers";
workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; # flake = false;
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 outputs =
buildMcpServer = { pkgs }: { self, nixpkgs, ... }@inputs:
pkgs.stdenv.mkDerivation { let
pname = "mcp-servers"; supportedSystems = [ "x86_64-linux" ];
version = "0.1.0"; pkgsFor =
src = inputs.mcp-servers; system:
nativeBuildInputs = [ pkgs.nodejs pkgs.makeWrapper ]; nixpkgs.legacyPackages.${system}.extend (
nixpkgs.lib.composeManyExtensions ([ ] ++ builtins.attrValues self.overlays)
);
eachSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f (pkgsFor system));
buildPhase = '' buildUvServers = (
export HOME=$(mktemp -d) pkgs:
ls -alhR let
echo "starting to build..." inherit (pkgs.callPackage inputs.pyproject-nix.build.util { }) mkApplication;
npm ci --no-audit --no-fund --loglevel verbose 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 = '' # Build function for MCP servers
mkdir -p $out/lib $out/bin
cp -r . $out/lib
cp -r node_modules/bin $out/bin
'';
};
in { treefmtEval = eachSystem (pkgs: inputs.treefmt-nix.lib.evalModule pkgs ./treefmt.nix);
# Formatting
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixpkgs-fmt);
# Overlays in
overlays.default = final: prev: { {
custom-servers = buildUvServers { # Formatting
pkgs = prev; # 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 # Overlays
# packages = forAllSystems (system: overlays.default = _final: prev: {
# let custom-servers = buildUvServers prev;
# pkgs = pkgsFor system; };
# in buildUvServers {
# pkgs = pkgs;
# }
#);
# Development shell # Packages
devShells = forAllSystems (system: # packages = forAllSystems (system:
let pkgs = pkgsFor system; # let
uv-servers = buildUvServers { inherit pkgs; }; # pkgs = pkgsFor system;
in { # in buildUvServers {
default = pkgs.mkShell { # pkgs = pkgs;
packages = [ # }
pkgs.python313 #);
pkgs.uv
pkgs.nodejs # Development shell
pkgs.node2nix devShells = eachSystem (
uv-servers.arxiv-mcp-server pkgs:
uv-servers.mcp-text-editor let
uv-servers.basic-memory-server 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
];
};
}
);
};
} }

18
treefmt.nix Normal file
View File

@@ -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;
}