- 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:
- # <https://github.com/Cloudef/zig2nix/blob/master/flake.nix>
- 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;
+ };
+ };
+ };
+ };