diff --git a/flake.nix b/flake.nix index 093d512..5f44a0c 100644 --- a/flake.nix +++ b/flake.nix @@ -30,17 +30,18 @@ }; }; - outputs = inputs @ { - self, - nixpkgs, - flake-parts, - crane, - fenix, - flake-utils, - advisory-db, - rust-overlay, - }: - flake-parts.lib.mkFlake {inherit inputs self;} { + outputs = + inputs @ { self + , nixpkgs + , flake-parts + , crane + , fenix + , flake-utils + , advisory-db + , rust-overlay + , + }: + flake-parts.lib.mkFlake { inherit inputs self; } { imports = [ ]; @@ -52,131 +53,136 @@ flake.hydraJobs.devShells.x86_64-linux = self.devShells.x86_64-linux; flake.hydraJobs.checks.x86_64-linux = self.checks.x86_64-linux; - perSystem = { - self', - pkgs, - lib, - config, - system, - ... - }: let - # Load toolchain from file and extend with rust-src and rust-analyzer + clippy - rustToolchain = (pkgs.rust-bin.fromRustupToolchainFile (self + /rust-toolchain.toml)).override { - extensions = [ - "rust-src" - "rust-analyzer" - "clippy" - ]; - }; - - # NB: we don't need to overlay our custom toolchain for the *entire* - # pkgs (which would require rebuidling anything else which uses rust). - # Instead, we just want to update the scope that crane will use by appending - # our specific toolchain there. - craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; - - src = craneLib.cleanCargoSource (craneLib.path ./.); - - # Common arguments can be set here to avoid repeating them later - commonArgs = { - inherit src; - strictDeps = true; - - buildInputs = - [ - # Add additional build inputs here - ] - ++ lib.optionals pkgs.stdenv.isDarwin [ - # Additional darwin specific inputs can be set here - pkgs.libiconv + perSystem = + { self' + , pkgs + , lib + , config + , system + , ... + }: + let + # Load toolchain from file and extend with rust-src and rust-analyzer + clippy + rustToolchain = (pkgs.rust-bin.fromRustupToolchainFile (self + /rust-toolchain.toml)).override { + extensions = [ + "rust-src" + "rust-analyzer" + "clippy" ]; + }; - # Additional environment variables can be set directly - # MY_CUSTOM_VAR = "some value"; - }; + # NB: we don't need to overlay our custom toolchain for the *entire* + # pkgs (which would require rebuidling anything else which uses rust). + # Instead, we just want to update the scope that crane will use by appending + # our specific toolchain there. + craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; - craneLibLLvmTools = - craneLib.overrideToolchain - (fenix.packages.${system}.complete.withComponents [ - "cargo" - "llvm-tools" - "rustc" - ]); + src = craneLib.cleanCargoSource (craneLib.path ./.); - # 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; + # Common arguments can be set here to avoid repeating them later + commonArgs = { + inherit src; + strictDeps = true; - # Build the actual crate itself, reusing the dependency - # artifacts from above. - aba2sat = craneLib.buildPackage (commonArgs - // { + buildInputs = + [ + # Add additional build inputs here + ] + ++ 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"; + }; + + 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 the actual crate itself, reusing the dependency + # artifacts from above. + aba2sat = craneLib.buildPackage (commonArgs + // { inherit cargoArtifacts; }); - in { - _module.args.pkgs = import nixpkgs { - inherit system; - overlays = [ - (import rust-overlay) - ]; - }; + in + { + _module.args.pkgs = import nixpkgs { + inherit system; + overlays = [ + (import rust-overlay) + ]; + }; - checks = { - # Build the crate as part of `nix flake check` for convenience - inherit aba2sat; + checks = { + # Build the crate as part of `nix flake check` for convenience + inherit aba2sat; - # Run clippy (and deny all warnings) on the crate source, - # again, reusing 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. - aba2sat-clippy = craneLib.cargoClippy (commonArgs - // { + # Run clippy (and deny all warnings) on the crate source, + # again, reusing 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. + aba2sat-clippy = craneLib.cargoClippy (commonArgs + // { inherit cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- --deny warnings"; }); - aba2sat-doc = craneLib.cargoDoc (commonArgs - // { + aba2sat-doc = craneLib.cargoDoc (commonArgs + // { inherit cargoArtifacts; }); - # Check formatting - aba2sat-fmt = craneLib.cargoFmt { - inherit src; - }; + # Check formatting + aba2sat-fmt = craneLib.cargoFmt { + inherit src; + }; - # Audit dependencies - aba2sat-audit = craneLib.cargoAudit { - inherit src advisory-db; - }; + # Audit dependencies + aba2sat-audit = craneLib.cargoAudit { + inherit src advisory-db; + }; - # Audit licenses - aba2sat-deny = crane.lib.${system}.cargoDeny { - inherit src; - }; + # Audit licenses + aba2sat-deny = crane.lib.${system}.cargoDeny { + inherit src; + }; - # Run tests with cargo-nextest - # Consider setting `doCheck = false` on `aba2sat` if you do not want - # the tests to run twice - aba2sat-nextest = craneLib.cargoNextest (commonArgs - // { + # Run tests with cargo-nextest + # Consider setting `doCheck = false` on `aba2sat` if you do not want + # the tests to run twice + aba2sat-nextest = craneLib.cargoNextest (commonArgs + // { inherit cargoArtifacts; partitions = 1; partitionType = "count"; }); }; - packages = { - default = aba2sat; - aspforaba = pkgs.callPackage ./nix/packages/aspforaba.nix { inherit (self'.packages) clingo; }; - clingo = pkgs.callPackage ./nix/packages/clingo.nix { }; - } // lib.optionalAttrs (!pkgs.stdenv.isDarwin) { - aba2sat-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs // { - inherit cargoArtifacts; - }); - }; + packages = + { + default = aba2sat; + aspforaba = pkgs.callPackage ./nix/packages/aspforaba.nix { inherit (self'.packages) clingo; }; + clingo = pkgs.callPackage ./nix/packages/clingo.nix { }; + } + // lib.optionalAttrs (!pkgs.stdenv.isDarwin) { + aba2sat-llvm-coverage = craneLibLLvmTools.cargoLlvmCov (commonArgs + // { + inherit cargoArtifacts; + }); + }; apps.default = flake-utils.lib.mkApp { drv = aba2sat; @@ -202,5 +208,5 @@ ]; }; }; - }; + }; }