{ description = "Chirp Flake"; inputs.self.submodules = true; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; in { packages.default = pkgs.stdenv.mkDerivation { pname = "chirp"; version = "0.0.0"; src = ./.; buildPhase = '' mkdir -p .zig-cache-global/zig ${pkgs.zig}/bin/zig build --verbose --global-cache-dir .zig-cache-global ''; installPhase = '' mkdir -p $out/bin $out/db cp zig-out/bin/chirp $out/bin ''; }; apps.default = { type = "app"; program = "${self.packages.${system}.default}/bin/chirp"; }; }) // { nixosModules.default = { config, lib, pkgs, ... }: { options.services.chirp = { enable = lib.mkEnableOption "Enable Chirp"; port = lib.mkOption { type = lib.types.port; default = 8080; description = "Port to listen on"; }; }; config = lib.mkIf config.services.chirp.enable { systemd.services.chirp = { description = "Chirp SystemD Service"; wantedBy = ["multi-user.target"]; after = ["network.target"]; serviceConfig = { ExecStart = "${self.packages.${pkgs.system}.default}/bin/chirp"; Restart = "always"; Type = "simple"; DynamicUser = "yes"; }; environment = { PORT = toString config.services.chirp.port; }; }; }; }; }; }