X-Git-Url: https://gitweb.ps.run/chirp/blobdiff_plain/4dd72bd444298a01fea2e17d5ba9915489c6f6ad..82ffe1a0f6aa569a718a0db07a380f7f93c7f1d8:/flake.nix diff --git a/flake.nix b/flake.nix index 5022167..cef0b0f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,26 +1,65 @@ { - description = "Zig project flake"; - - inputs = { - zig2nix.url = "github:Cloudef/zig2nix"; - }; - - outputs = { zig2nix, ... }: let - flake-utils = zig2nix.inputs.flake-utils; - in (flake-utils.lib.eachDefaultSystem (system: let - # Zig flake helper - # Check the flake.nix in zig2nix project for more options: - # - 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 + 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; + }; + }; + }; + }; }; - })); } +