Add Nix package, NixOS module, and tests for bambuddy
- packages.bambuddy: FastAPI backend + prebuilt React frontend assembled into the app-root layout upstream expects, behind a single `bambuddy` launcher (uvicorn --loop asyncio, ffmpeg on PATH, XDG state defaults). Pins upstream maziggy/bambuddy v1.2.5.7. - nixosModules.default: services.bambuddy with host/port/dataDir, openFirewall, environment + environmentFile, extraPackages, DynamicUser + StateDirectory, systemd hardening, and CAP_NET_BIND_SERVICE for the virtual-printer FTPS/RTSP ports. - checks.bambuddy-import: backend import + admin CLI smoke test. - checks.bambuddy-service: two-node NixOS VM test covering the health endpoint, UI/static assets/manifest, SQLite + logs in the StateDirectory, journal startup check, cross-node reachability with openFirewall, custom host/port/env node, and loopback-only binding. - overlay, run app, devShell, README, .gitignore.
This commit is contained in:
commit
5fb8e8d724
9 changed files with 761 additions and 0 deletions
98
flake.nix
Normal file
98
flake.nix
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
{
|
||||
description = "Bambuddy — self-hosted command center for Bambu Lab 3D printers (package + NixOS module)";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ self, nixpkgs }:
|
||||
let
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
forAllSystems = nixpkgs.lib.genAttrs systems;
|
||||
|
||||
pkgsFor = system: nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
packages = forAllSystems (
|
||||
system:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
in
|
||||
rec {
|
||||
bambuddy = pkgs.callPackage ./pkgs/bambuddy { };
|
||||
default = bambuddy;
|
||||
}
|
||||
);
|
||||
|
||||
overlays.default = final: prev: {
|
||||
bambuddy = self.packages.${final.stdenv.hostPlatform.system}.bambuddy;
|
||||
};
|
||||
|
||||
nixosModules = rec {
|
||||
# Wires the module against this flake's own package as the default,
|
||||
# so `services.bambuddy.enable = true;` works out of the box.
|
||||
bambuddy =
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
imports = [ ./nixos/module.nix ];
|
||||
services.bambuddy.package = lib.mkOptionDefault self.packages.${pkgs.stdenv.hostPlatform.system}.bambuddy;
|
||||
};
|
||||
default = bambuddy;
|
||||
};
|
||||
|
||||
checks = forAllSystems (
|
||||
system:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
bambuddy = self.packages.${system}.bambuddy;
|
||||
in
|
||||
{
|
||||
bambuddy-import = pkgs.callPackage ./tests/import-check.nix { inherit bambuddy; };
|
||||
}
|
||||
// nixpkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
|
||||
bambuddy-service = pkgs.callPackage ./tests/service-test.nix {
|
||||
inherit bambuddy;
|
||||
nixosModule = self.nixosModules.default;
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
apps = forAllSystems (
|
||||
system:
|
||||
let
|
||||
bambuddy = self.packages.${system}.bambuddy;
|
||||
in
|
||||
{
|
||||
default = {
|
||||
type = "app";
|
||||
program = "${bambuddy}/bin/bambuddy";
|
||||
meta.description = "Run the Bambuddy server";
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
devShells = forAllSystems (
|
||||
system:
|
||||
let
|
||||
pkgs = pkgsFor system;
|
||||
bambuddy = self.packages.${system}.bambuddy;
|
||||
in
|
||||
{
|
||||
default = pkgs.mkShell {
|
||||
packages = [
|
||||
bambuddy.passthru.pythonEnv
|
||||
pkgs.nodejs
|
||||
pkgs.ffmpeg
|
||||
pkgs.nixfmt
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue