X-Git-Url: https://gitweb.ps.run/chirp/blobdiff_plain/d068d89a794d8ee0fe49ad84bb05dcb2f1f2a5fd..e72f3f9d2c8a06cab6a5fd6ae773057effcef8b2:/flake.nix diff --git a/flake.nix b/flake.nix index 3c33dce..29c9ade 100644 --- a/flake.nix +++ b/flake.nix @@ -1,24 +1,65 @@ { - description = "Zig project flake"; - - inputs = { - self.submodules = true; - zig2nix.url = "github:Cloudef/zig2nix"; - }; - - outputs = { zig2nix, ... }: let - flake-utils = zig2nix.inputs.flake-utils; - in (flake-utils.lib.eachDefaultSystem (system: let - env = zig2nix.outputs.zig-env.${system} {}; - in with builtins; with env.pkgs.lib; rec { - apps.default = env.app [] "zig build run -- \"$@\""; - packages.default = env.package { - src = cleanSource ./.; - - nativeBuildInputs = with env.pkgs; []; - buildInputs = with env.pkgs; []; - - zigPreferMusl = false; + 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; + }; + }; + }; + }; }; - })); } +