From 1049feb0124ded16ed9cea36f48f19bf4749221d Mon Sep 17 00:00:00 2001 From: Anthony Cicchetti Date: Fri, 1 Dec 2023 16:14:36 -0500 Subject: [PATCH] runnable flake --- flake.nix | 170 +++++++++++++++++++++++++++++------------------------- 1 file changed, 93 insertions(+), 77 deletions(-) diff --git a/flake.nix b/flake.nix index e1dd6a9..9f47afa 100644 --- a/flake.nix +++ b/flake.nix @@ -23,117 +23,133 @@ }; }; - outputs = { self, nixpkgs, crane, fenix, flake-utils, advisory-db, ... }: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = nixpkgs.legacyPackages.${system}; + outputs = { + self, + nixpkgs, + crane, + fenix, + flake-utils, + advisory-db, + ... + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; - inherit (pkgs) lib; + inherit (pkgs) lib; - craneLib = crane.lib.${system}; - src = craneLib.cleanCargoSource (craneLib.path ./.); + craneLib = crane.lib.${system}; + src = craneLib.cleanCargoSource (craneLib.path ./.); - # Common arguments can be set here to avoid repeating them later - commonArgs = { - inherit src; - strictDeps = true; + # Common arguments can be set here to avoid repeating them later + commonArgs = { + inherit src; + strictDeps = true; - buildInputs = [ + buildInputs = + [ # Add additional build inputs here - ] ++ lib.optionals pkgs.stdenv.isDarwin [ + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ # Additional darwin specific inputs can be set here pkgs.libiconv ]; - # Additional environment variables can be set directly - # MY_CUSTOM_VAR = "some value"; - }; + # Additional environment variables can be set directly + # MY_CUSTOM_VAR = "some value"; + }; - craneLibLLvmTools = craneLib.overrideToolchain - (fenix.packages.${system}.complete.withComponents [ - "cargo" - "llvm-tools" - "rustc" - ]); + craneLibLLvmTools = + craneLib.overrideToolchain + (fenix.packages.${system}.complete.withComponents [ + "cargo" + "llvm-tools" + "rustc" + ]); - # Build *just* the cargo dependencies, so we can reuse - # all of that work (e.g. via cachix) when running in CI - cargoArtifacts = craneLib.buildDepsOnly commonArgs; + # Build *just* the cargo dependencies, so we can reuse + # all of that work (e.g. via cachix) when running in CI + cargoArtifacts = craneLib.buildDepsOnly commonArgs; - # Build the actual crate itself, reusing the dependency - # artifacts from above. - my-crate = craneLib.buildPackage (commonArgs // { + # Build the actual crate itself, reusing the dependency + # artifacts from above. + my-crate = craneLib.buildPackage (commonArgs + // { inherit cargoArtifacts; + cargoExtraArgs = "-p cli"; }); - in - { - checks = { - # Build the crate as part of `nix flake check` for convenience - inherit my-crate; + in { + checks = { + # Build the crate as part of `nix flake check` for convenience + inherit my-crate; - # Run clippy (and deny all warnings) on the crate source, - # again, resuing the dependency artifacts from above. - # - # Note that this is done as a separate derivation so that - # we can block the CI if there are issues here, but not - # prevent downstream consumers from building our crate by itself. - my-crate-clippy = craneLib.cargoClippy (commonArgs // { + # Run clippy (and deny all warnings) on the crate source, + # again, resuing the dependency artifacts from above. + # + # Note that this is done as a separate derivation so that + # we can block the CI if there are issues here, but not + # prevent downstream consumers from building our crate by itself. + my-crate-clippy = craneLib.cargoClippy (commonArgs + // { inherit cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- --deny warnings"; }); - my-crate-doc = craneLib.cargoDoc (commonArgs // { + my-crate-doc = craneLib.cargoDoc (commonArgs + // { inherit cargoArtifacts; }); - # Check formatting - my-crate-fmt = craneLib.cargoFmt { - inherit src; - }; + # Check formatting + my-crate-fmt = craneLib.cargoFmt { + inherit src; + }; - # Audit dependencies - my-crate-audit = craneLib.cargoAudit { - inherit src advisory-db; - }; + # Audit dependencies + my-crate-audit = craneLib.cargoAudit { + inherit src advisory-db; + }; - # Audit licenses - my-crate-deny = craneLib.cargoDeny { - inherit src; - }; + # Audit licenses + my-crate-deny = craneLib.cargoDeny { + inherit src; + }; - # Run tests with cargo-nextest - # Consider setting `doCheck = false` on `my-crate` if you do not want - # the tests to run twice - my-crate-nextest = craneLib.cargoNextest (commonArgs // { + # Run tests with cargo-nextest + # Consider setting `doCheck = false` on `my-crate` if you do not want + # the tests to run twice + my-crate-nextest = craneLib.cargoNextest (commonArgs + // { inherit cargoArtifacts; partitions = 1; partitionType = "count"; }); - }; + }; - packages = { - default = my-crate; - my-crate-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs // { + packages = { + default = my-crate; + my-crate-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs + // { inherit cargoArtifacts; }); - }; + }; - apps.default = flake-utils.lib.mkApp { - drv = my-crate; - }; + apps.default = flake-utils.lib.mkApp { + drv = my-crate; + name = "cli"; + }; - devShells.default = craneLib.devShell { - # Inherit inputs from checks. - checks = self.checks.${system}; + devShells.default = craneLib.devShell { + # Inherit inputs from checks. + checks = self.checks.${system}; - # Additional dev-shell environment variables can be set directly - # MY_CUSTOM_DEVELOPMENT_VAR = "something else"; + # Additional dev-shell environment variables can be set directly + # MY_CUSTOM_DEVELOPMENT_VAR = "something else"; - # Extra inputs can be added here; cargo and rustc are provided by default. - packages = [ - pkgs.sd - # pkgs.ripgrep - ]; - }; - }); + # Extra inputs can be added here; cargo and rustc are provided by default. + packages = [ + pkgs.sd + pkgs.alejandra + ]; + }; + }); }