feat(nix): expose matomo-bootstrap as flake package and app

- add flake packages and apps for matomo-bootstrap
- provide nix run support for CLI execution
- add Playwright browser installer app
- simplify devShell (remove pytest, keep ruff only)
- align pyproject license with MIT LICENSE
- register stable CLI entry point via project.scripts
This commit is contained in:
Kevin Veen-Birkenbach
2025-12-23 12:58:48 +01:00
parent 5f645cbfbf
commit c9d4a5a9a4
2 changed files with 96 additions and 8 deletions

View File

@@ -1,11 +1,92 @@
{ {
description = "matomo-bootstrap"; description = "matomo-bootstrap";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }: outputs = { self, nixpkgs }:
let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; let
in { systems = [ "x86_64-linux" "aarch64-linux" ];
devShells.${system}.default = pkgs.mkShell { forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system);
packages = with pkgs; [ python312 python312Packages.pytest python312Packages.ruff ]; in
}; {
packages = forAllSystems (system:
let
pkgs = import nixpkgs { inherit system; };
python = pkgs.python312;
in
rec {
matomo-bootstrap = python.pkgs.buildPythonApplication {
pname = "matomo-bootstrap";
version = "0.1.0"; # keep in sync with pyproject.toml
pyproject = true;
src = self;
# Runtime deps (Python)
propagatedBuildInputs = with python.pkgs; [
playwright
];
# Optional: keep tests off in nix build by default
doCheck = false;
meta = with pkgs.lib; {
description = "Headless bootstrap tooling for Matomo (installation + API token provisioning)";
homepage = "https://github.com/kevinveenbirkenbach/matomo-bootstrap";
license = licenses.mit;
mainProgram = "matomo-bootstrap";
};
};
default = matomo-bootstrap;
}
);
apps = forAllSystems (system:
let
pkgs = import nixpkgs { inherit system; };
matomo = self.packages.${system}.matomo-bootstrap;
playwright-install = pkgs.writeShellApplication {
name = "matomo-bootstrap-playwright-install";
runtimeInputs = [ matomo ];
text = ''
# Installs the Playwright Chromium browser into the user cache.
# This is needed when the Matomo instance is not installed yet and
# the web installer must be driven via Playwright.
exec ${matomo}/bin/python -m playwright install chromium
'';
};
in
{
matomo-bootstrap = {
type = "app";
program = "${matomo}/bin/matomo-bootstrap";
};
matomo-bootstrap-playwright-install = {
type = "app";
program = "${playwright-install}/bin/matomo-bootstrap-playwright-install";
};
default = self.apps.${system}.matomo-bootstrap;
}
);
devShells = forAllSystems (system:
let
pkgs = import nixpkgs { inherit system; };
python = pkgs.python312;
in
{
default = pkgs.mkShell {
packages = with pkgs; [
python
python.pkgs.ruff
];
};
}
);
}; };
} }

View File

@@ -9,17 +9,24 @@ description = "Headless bootstrap tooling for Matomo (installation + API token p
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.10"
authors = [{ name = "Kevin Veen-Birkenbach", email = "kevin@veen.world" }] authors = [{ name = "Kevin Veen-Birkenbach", email = "kevin@veen.world" }]
license = { text = "All rights reserved by Kevin Veen-Birkenbach" } license = { text = "MIT" }
urls = { Homepage = "https://github.com/kevinveenbirkenbach/matomo-bootstrap" } urls = { Homepage = "https://github.com/kevinveenbirkenbach/matomo-bootstrap" }
# Playwright is needed at runtime to run the web installer when Matomo is not yet installed.
dependencies = [ dependencies = [
"playwright>=1.40.0", "playwright>=1.40.0",
] ]
# Provides a stable CLI name for Nix + pip installs:
[project.scripts]
matomo-bootstrap = "matomo_bootstrap.__main__:main"
[project.optional-dependencies] [project.optional-dependencies]
e2e = [] e2e = []
dev = [
"ruff",
]
[tool.setuptools] [tool.setuptools]
package-dir = { "" = "src" } package-dir = { "" = "src" }