{ inputs = { nixpkgs.url = "nixpkgs"; zig.url = "github:silversquirl/zig-flake"; zig.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, zig, ... }: let forAllSystems = f: builtins.mapAttrs (system: pkgs: f pkgs zig.packages.${system}.nightly) nixpkgs.legacyPackages; in { devShells = forAllSystems (pkgs: zig: { default = pkgs.mkShellNoCC { packages = [pkgs.bash zig zig.zls]; }; }); packages = forAllSystems (pkgs: zig: { default = zig.makePackage { pname = "zhttpws"; version = "0.0.0"; src = ./.; zigReleaseMode = "fast"; depsHash = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; }; }); nixosModules.default = { config, lib, pkgs, ... }: let cfg = config.services.zhttpws; in { options.services.zhttpws = { enable = lib.mkEnableOption "zhttpws"; domain = lib.mkOption { type = lib.types.str; }; port = lib.mkOption { type = lib.types.port; }; }; config = lib.mkIf cfg.enable { systemd.services.zhttpws = { wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; serviceConfig = { ExecStart = "${self.packages.${pkgs.system}.default}/bin/zhttpws"; DynamicUser = true; Restart = "always"; }; environment = { PORT = toString cfg.port; }; }; services.caddy.virtualHosts."${cfg.domain}".extraConfig = '' reverse_proxy localhost:${toString cfg.port} ''; }; }; }; }