]> gitweb.ps.run Git - chirp/blob - flake.nix
add systemd service to flake
[chirp] / flake.nix
1 {
2   description = "Chirp Flake";
3
4   inputs.self.submodules = true;
5   inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6   inputs.flake-utils.url = "github:numtide/flake-utils";
7
8   outputs = { self, nixpkgs, flake-utils }:
9     flake-utils.lib.eachDefaultSystem (system:
10       let
11         pkgs = import nixpkgs { inherit system; };
12       in {
13         packages.default = pkgs.stdenv.mkDerivation {
14           pname = "chirp";
15           version = "0.0.0";
16           src = ./.;
17
18           buildPhase = ''
19             mkdir -p .zig-cache-global/zig
20             ${pkgs.zig}/bin/zig build --verbose --global-cache-dir .zig-cache-global
21           '';
22
23           installPhase = ''
24             mkdir -p $out/bin $out/db
25             cp zig-out/bin/chirp $out/bin
26           '';
27         };
28
29         apps.default = {
30           type = "app";
31           program = "${self.packages.${system}.default}/bin/chirp";
32         };
33       })
34       // {
35         nixosModules.default = { config, lib, pkgs, ... }: {
36           options.services.chirp = {
37             enable = lib.mkEnableOption "Enable Chirp";
38
39             port = lib.mkOption {
40               type = lib.types.port;
41               default = 8080;
42               description = "Port to listen on";
43             };
44           };
45
46           config = lib.mkIf config.services.chirp.enable {
47             systemd.services.chirp = {
48               description = "Chirp SystemD Service";
49               wantedBy = ["multi-user.target"];
50               after = ["network.target"];
51               serviceConfig = {
52                 ExecStart = "${self.packages.${pkgs.system}.default}/bin/chirp";
53                 Restart = "always";
54                 Type = "simple";
55                 DynamicUser = "yes";
56               };
57               environment = {
58                 PORT = toString config.services.chirp.port;
59               };
60             };
61           };
62         };
63       };
64 }
65