{ description = "An oauth2/oidc1 proxy, written in anger"; # Flake inputs inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; # also valid: "nixpkgs" rust-overlay.url = "github:oxalica/rust-overlay"; # A helper for Rust + Nix # crane, for nicer caching when building rust crane.url = "github:ipetkov/crane"; }; # Flake outputs outputs = { self, nixpkgs, rust-overlay, crane }: let # Overlays enable you to customize the Nixpkgs attribute set overlays = [ # Makes a `rust-bin` attribute available in Nixpkgs (import rust-overlay) # Provides a `rustToolchain` attribute for Nixpkgs that we can use to # create a Rust environment (self: super: { rustToolchain = super.rust-bin.stable.latest.default.override { extensions = [ "rust-analyzer" "rust-src" "rust-docs" ]; }; minimalRustToolchain = super.rust-bin.stable.latest.minimal; }) ]; # Systems supported allSystems = [ "x86_64-linux" # 64-bit Intel/AMD Linux #"aarch64-linux" # 64-bit ARM Linux #"x86_64-darwin" # 64-bit Intel macOS #"aarch64-darwin" # 64-bit ARM macOS ]; # Helper to provide system-specific attributes forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f { pkgs = import nixpkgs { inherit overlays system; }; }); in { # Development environment output devShells = forAllSystems ({ pkgs }: { default = pkgs.mkShell { # The Nix packages provided in the environment packages = (with pkgs; [ # The package provided by our custom overlay. Includes cargo, Clippy, cargo-fmt, # rustdoc, rustfmt, and other tools. cmake rustToolchain protobuf ]) ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs; [ libiconv ]); }; }); packages = forAllSystems ({ pkgs }: { default = let craneLib = (crane.mkLib pkgs).overrideToolchain pkgs.minimalRustToolchain; commonArgs = { src = pkgs.lib.cleanSourceWith { src = ./.; filter = let protoFilter = path: _type: builtins.match ".*\.proto" path != null; in path: type: (protoFilter path type) || (craneLib.filterCargoSources path type); name = "source"; }; nativeBuildInputs = with pkgs; [ # for one of our rust deps cmake # for building our config protobuf ]; }; in craneLib.buildPackage ({ name = "proxy-in-anger"; version = "0.0.1"; cargoArtifacts = craneLib.buildDepsOnly commonArgs; meta.mainProgram = "auth-proxy"; } // commonArgs); }); }; }