{ 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 ]; }; } ); }; }