diff --git a/README.md b/README.md index aa299ce..f148a61 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ on your system: it is pretty _[fast](#benchmarks)_... - Fast - Really fast - Minimal dependencies -- Tiny binary (~370kb) +- Tiny binary (~370kb [^1]) - Actually really fast - Cool NixOS logo (other, inferior, distros are not supported) - Reliable detection of following info: @@ -60,6 +60,9 @@ on your system: it is pretty _[fast](#benchmarks)_... - Did I mention fast? - Respects [`NO_COLOR` spec](https://no-color.org/) +[^1]: With the Mold linker, which is enabled by default in the Flake package, + the binary size is roughly 350kb. That's nearly 20kb reduction in size :) + ## Motivation Fastfetch, as its name probably hinted, is a very fast fetch tool written in C. diff --git a/flake.nix b/flake.nix index ed36872..90978a2 100644 --- a/flake.nix +++ b/flake.nix @@ -10,9 +10,12 @@ forEachSystem = nixpkgs.lib.genAttrs systems; pkgsForEach = nixpkgs.legacyPackages; in { - packages = forEachSystem (system: { + packages = forEachSystem (system: let + pkgs = pkgsForEach.${system}; + in { default = self.packages.${system}.microfetch; - microfetch = pkgsForEach.${system}.callPackage ./nix/package.nix {}; + microfetch = pkgs.callPackage ./nix/package.nix {}; + microfetch-mold = pkgs.callPackage ./nix/package.nix {useMold = true;}; }); devShells = forEachSystem (system: { diff --git a/nix/package.nix b/nix/package.nix index dca3cc2..052f576 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -1,14 +1,22 @@ { lib, - rustPlatform, + stdenv, stdenvAdapters, + rustPlatform, llvm, + useMold ? stdenv.isLinux && !stdenv.hostPlatform.isAarch, }: let toml = (lib.importTOML ../Cargo.toml).package; pname = toml.name; inherit (toml) version; + + # Select stdenv based on useMold flag + stdenv = + if useMold + then stdenvAdapters.useMoldLinker llvm.stdenv + else llvm.stdenv; in - rustPlatform.buildRustPackage.override {stdenv = stdenvAdapters.useMoldLinker llvm.stdenv;} { + rustPlatform.buildRustPackage.override {inherit stdenv;} { inherit pname version; src = let fs = lib.fileset; @@ -26,7 +34,14 @@ in cargoLock.lockFile = ../Cargo.lock; enableParallelBuilding = true; - env.RUSTFLAGS = "-C link-arg=-fuse-ld=mold"; + buildNoDefaultFeatures = true; + doCheck = false; + + # Only set RUSTFLAGS for mold if useMold is enabled + env = lib.optionalAttrs useMold { + CARGO_LINKER = "clang"; + RUSTFLAGS = "-C link-arg=-fuse-ld=mold"; + }; meta = { description = "Microscopic fetch script in Rust, for NixOS systems";