X-Git-Url: https://gitweb.ps.run/chirp/blobdiff_plain/756346507acccc810c23b895caa937483cf9d0a8..82ffe1a0f6aa569a718a0db07a380f7f93c7f1d8:/flake.nix diff --git a/flake.nix b/flake.nix index 60987e7..cef0b0f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,95 +1,65 @@ { - description = "Zig project flake"; + description = "Chirp Flake"; - inputs = { - zig2nix.url = "github:Cloudef/zig2nix"; - }; + inputs.self.submodules = true; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; - 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} {}; - zighttp = env.pkgs.fetchFromGitHub { - owner = "patrick-scho"; - repo = "zighttp"; - rev = "274c46eb3f7e9987cc9260bb70c43b4f5d8555ac"; - sha256 = "sha256-SUFHiA0r46QfzhlO6Ie1CByzC/+qPR2kyAbeDEdKOJ0="; - }; - ziglmdb = env.pkgs.fetchFromGitHub { - owner = "patrick-scho"; - repo = "ziglmdb"; - rev = "88cb74a430fa9629c8127c3a866c40e79a8e4612"; - sha256 = "sha256-SUFHiA0r46QfzhlO6Ie1CByzC/+qPR2kyAbeDEdKOJ0="; - }; - in with builtins; with env.pkgs.lib; rec { - # Produces clean binaries meant to be ship'd outside of nix - # nix build .#foreign - packages.foreign = env.package { - src = cleanSource ./.; + 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 = ./.; - # Packages required for compiling - nativeBuildInputs = with env.pkgs; []; + buildPhase = '' + mkdir -p .zig-cache-global/zig + ${pkgs.zig}/bin/zig build --verbose --global-cache-dir .zig-cache-global + ''; - # Packages required for linking - buildInputs = with env.pkgs; []; - - # Smaller binaries and avoids shipping glibc. - zigPreferMusl = true; - }; + installPhase = '' + mkdir -p $out/bin + cp zig-out/bin/chirp $out/bin + ''; + }; - # nix build . - packages.default = packages.foreign.override (attrs: { - # Prefer nix friendly settings. - zigPreferMusl = false; + apps.default = { + type = "app"; + program = "${self.packages.${system}.default}/bin/chirp"; + }; + }) + // { + nixosModules.default = { config, lib, pkgs, ... }: { + options.services.chirp = { + enable = lib.mkEnableOption "Enable Chirp"; - # Executables required for runtime - # These packages will be added to the PATH - zigWrapperBins = with env.pkgs; []; + port = lib.mkOption { + type = lib.types.port; + default = 8080; + description = "Port to listen on"; + }; + }; - # Libraries required for runtime - # These packages will be added to the LD_LIBRARY_PATH - zigWrapperLibs = attrs.buildInputs or []; - }); - - # For bundling with nix bundle for running outside of nix - # example: https://github.com/ralismark/nix-appimage - apps.bundle = { - type = "app"; - program = "${packages.foreign}/bin/default"; + 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; + }; + }; + }; + }; }; - - # nix run . - apps.default = env.app [] "zig build run -- \"$@\""; - - # nix run .#build - apps.build = env.app [] '' - mkdir -p ext - ln -s ${zighttp} ext/zighttp - ln -s ${ziglmdb} ext/ziglmdb - zig build "$@" - ''; - - # nix run .#test - apps.test = env.app [] "zig build test -- \"$@\""; - - # nix run .#docs - apps.docs = env.app [] "zig build docs -- \"$@\""; - - # nix run .#zig2nix - apps.zig2nix = env.app [] "zig2nix \"$@\""; - - # nix develop - devShells.default = env.mkShell { - # Packages required for compiling, linking and running - # Libraries added here will be automatically added to the LD_LIBRARY_PATH and PKG_CONFIG_PATH - nativeBuildInputs = [] - ++ packages.default.nativeBuildInputs - ++ packages.default.buildInputs - ++ packages.default.zigWrapperBins - ++ packages.default.zigWrapperLibs; - }; - })); } +