]> gitweb.ps.run Git - chirp/blobdiff - flake.nix
update submodule urls
[chirp] / flake.nix
index 3c33dcec19affdbe5a16955e0241321b9de47c9e..29c9adedf3ee958f85d8b947d6faf561770ca5a1 100644 (file)
--- 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;
+              };
+            };
+          };
+        };
       };
-    }));
 }
+