{ description = "A CLI to display information about x509 certificates."; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; nix = { url = "github:nixos/nix/2.13.2"; }; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = { self , nixpkgs , fenix , naersk , nix , ... } @ inputs: let supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: (forSystem system f)); forSystem = system: f: f rec { inherit system; pkgs = import nixpkgs { inherit system; overlays = [ self.overlays.default ]; }; lib = pkgs.lib; }; fenixToolchain = system: with fenix.packages.${system}; combine ([ stable.clippy stable.rustc stable.cargo stable.rustfmt stable.rust-src ] ++ nixpkgs.lib.optionals (system == "x86_64-linux") [ targets.x86_64-unknown-linux-musl.stable.rust-std ]); in { overlays.default = final: prev: let toolchain = fenixToolchain final.stdenv.system; naerskLib = final.callPackage naersk { cargo = toolchain; rustc = toolchain; }; sharedAttrs = { pname = "x509-info"; version = "0.1.0"; src = builtins.path { name = "x509-info"; path = self; }; nativeBuildInputs = with final; [ ]; buildInputs = with final; [ ] ++ lib.optionals (final.stdenv.isDarwin) (with final.darwin.apple_sdk.frameworks; [ SystemConfiguration ]); copyBins = true; copyDocsToSeparateOutput = true; doCheck = true; doDoc = true; doDocFail = true; cargoTestOptions = f: f ++ [ "--all" ]; override = { preBuild ? "", ... }: { preBuild = preBuild + '' # logRun "cargo clippy --all-targets --all-features -- -D warnings" ''; }; }; in rec { x509-info = naerskLib.buildPackage sharedAttrs; } // nixpkgs.lib.optionalAttrs (prev.stdenv.system == "x86_64-linux") rec { default = x509-info-static; x509-info-static = naerskLib.buildPackage (sharedAttrs // { CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl"; }); }; devShells = forAllSystems ({ system, pkgs, ... }: let toolchain = fenixToolchain system; check = import ./nix/check.nix { inherit pkgs toolchain; }; in { default = pkgs.mkShell { name = "x509-info-shell"; RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library"; nativeBuildInputs = with pkgs; [ ]; buildInputs = with pkgs; [ toolchain rust-analyzer cargo-outdated cacert cargo-audit nixpkgs-fmt check.check-rustfmt check.check-spelling check.check-nixpkgs-fmt check.check-semver ] ++ lib.optionals (pkgs.stdenv.isDarwin) (with pkgs; [ libiconv darwin.apple_sdk.frameworks.Security ]) ++ lib.optionals (pkgs.stdenv.isLinux) (with pkgs; [ checkpolicy ]); }; }); checks = forAllSystems ({ system, pkgs, ... }: let toolchain = fenixToolchain system; check = import ./nix/check.nix { inherit pkgs toolchain; }; in { check-rustfmt = pkgs.runCommand "check-rustfmt" { buildInputs = [ check.check-rustfmt ]; } '' cd ${./.} check-rustfmt touch $out ''; check-spelling = pkgs.runCommand "check-spelling" { buildInputs = [ check.check-spelling ]; } '' cd ${./.} check-spelling touch $out ''; check-nixpkgs-fmt = pkgs.runCommand "check-nixpkgs-fmt" { buildInputs = [ check.check-nixpkgs-fmt ]; } '' cd ${./.} check-nixpkgs-fmt touch $out ''; }); packages = forAllSystems ({ system, pkgs, ... }: { inherit (pkgs) x509-info; } // nixpkgs.lib.optionalAttrs (system == "x86_64-linux") { inherit (pkgs) x509-info-static; default = pkgs.x509-info-static; } // nixpkgs.lib.optionalAttrs (pkgs.stdenv.isDarwin) { default = pkgs.x509-info; }); }; }