{ description = "zig template"; nixConfig = { extra-substituters = [ "https://nix.trev.zip" ]; extra-trusted-public-keys = [ "trev:I39N/EsnHkvfmsbx8RUW+ia5dOzojTQNCTzKYij1chU=" ]; }; inputs = { systems.url = "github:nix-systems/default"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; trev = { url = "github:spotdemo4/nur"; inputs.systems.follows = "systems"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs, trev, ... }: trev.libs.mkFlake ( system: let pkgs = import nixpkgs { inherit system; overlays = [ trev.overlays.packages trev.overlays.libs ]; }; fs = pkgs.lib.fileset; in rec { devShells = { default = pkgs.mkShell { shellHook = pkgs.shellhook.ref; packages = with pkgs; [ zig zls lldb # deps duckdb # linters octoscan # formatters nixfmt prettier # util bumper flake-release renovate ]; }; bump = pkgs.mkShell { packages = with pkgs; [ bumper ]; }; release = pkgs.mkShell { packages = with pkgs; [ flake-release ]; }; update = pkgs.mkShell { packages = with pkgs; [ renovate ]; }; vulnerable = pkgs.mkShell { packages = with pkgs; [ # flake flake-checker # actions octoscan ]; }; }; checks = pkgs.lib.mkChecks { zig = { src = packages.default; script = '' zig build test ''; }; actions = { root = ./.; fileset = ./.github/workflows; deps = with pkgs; [ action-validator octoscan ]; forEach = '' action-validator $file octoscan scan $file ''; }; renovate = { root = ./.github; fileset = ./.github/renovate.json; deps = with pkgs; [ renovate ]; script = '' renovate-config-validator renovate.json ''; }; nix = { root = ./.; filter = file: file.hasExt "nix"; deps = with pkgs; [ nixfmt ]; forEach = '' nixfmt --check "$file" ''; }; prettier = { root = ./.; filter = file: file.hasExt "yaml" || file.hasExt "json" || file.hasExt "md"; deps = with pkgs; [ prettier ]; forEach = '' prettier --check "$file" ''; }; }; packages = with pkgs.lib; rec { default = pkgs.stdenv.mkDerivation (finalAttrs: { pname = "zig-template"; version = "0.0.1"; src = fs.toSource { root = ./.; fileset = fs.unions [ ./build.zig ./build.zig.zon ./src ./LICENSE ]; }; nativeBuildInputs = with pkgs; [ zig.hook ]; meta = { description = "zig template"; mainProgram = "zig_template"; homepage = "https://github.com/spotdemo4/zig-template"; changelog = "https://github.com/spotdemo4/zig-template/releases/tag/v${finalAttrs.version}"; license = licenses.mit; platforms = platforms.all; }; }); image = pkgs.dockerTools.buildLayeredImage { name = default.pname; tag = default.version; contents = with pkgs; [ dockerTools.caCertificates ]; created = "now"; meta = default.meta; config = { Cmd = [ "${meta.getExe default}" ]; Labels = { "org.opencontainers.image.title" = default.pname; "org.opencontainers.image.description" = default.meta.description; "org.opencontainers.image.version" = default.version; "org.opencontainers.image.source" = default.meta.homepage; "org.opencontainers.image.licenses" = default.meta.license.spdxId; }; }; }; }; formatter = pkgs.nixfmt-tree; } ); }