- 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.
98 lines
2.5 KiB
Nix
98 lines
2.5 KiB
Nix
{
|
|
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
|
|
];
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|