From: patrick-scho Date: Fri, 11 Apr 2025 11:12:24 +0000 (+0200) Subject: update flake.nix X-Git-Url: https://gitweb.ps.run/chirp/commitdiff_plain/756346507acccc810c23b895caa937483cf9d0a8?ds=inline update flake.nix --- diff --git a/flake.nix b/flake.nix index fd691a8..60987e7 100644 --- a/flake.nix +++ b/flake.nix @@ -1,56 +1,95 @@ { - description = "Chirp!"; + description = "Zig project flake"; inputs = { - zig.url = "github:mitchellh/zig-overlay"; + zig2nix.url = "github:Cloudef/zig2nix"; }; - outputs = { - self, - zig, - pkgs, - }: let - nixosModule = { - config, - lib, - pkgs, - ... - }: { - options.services.chirp = { - enable = lib.mkEnableOption "Chirp"; - - port = lib.mkOption { - type = lib.types.port; - default = 8080; - description = "Port to listen on"; - }; + 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 ./.; + + # Packages required for compiling + nativeBuildInputs = with env.pkgs; []; - config = lib.mkIf config.services.chirp.enable { - systemd.services.chirp = { - description = "Chirp SystemD Service!"; - wantedBy = ["multi-user.target"]; - after = ["network.target"]; - serviceConfig = { - ExecStart = "${zig.packages.master}"; - Restart = "always"; - Type = "simple"; - DynamicUser = "yes"; - }; - environment = { - PORT = toString config.services.chirp.port; - }; - }; + # Packages required for linking + buildInputs = with env.pkgs; []; + + # Smaller binaries and avoids shipping glibc. + zigPreferMusl = true; }; - }; - in { - # TODO: packages.default build - apps.default = { + + # nix build . + packages.default = packages.foreign.override (attrs: { + # Prefer nix friendly settings. + zigPreferMusl = false; + + # Executables required for runtime + # These packages will be added to the PATH + zigWrapperBins = with env.pkgs; []; + + # 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 = "${zig.packages.${pkgs.system}."0.14.0"} build run"; + program = "${packages.foreign}/bin/default"; + }; + + # 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; }; - } - // { - nixosModules.default = nixosModule; - }; + })); }