nxfetch 0.1.2

A minimal, fast and batteries included fetcher!
Documentation
{
  description = "A configurable fetch tool written in Rust.";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";

    crane = {
      url = "github:ipetkov/crane";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    advisory-db = {
      url = "github:rustsec/advisory-db";
      flake = false;
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      crane,
      flake-utils,
      advisory-db,
      ...
    }:
    flake-utils.lib.eachDefaultSystem (
      system:
      let
        pkgs = import nixpkgs { inherit system; };

        inherit (pkgs) lib;
        craneLib = crane.mkLib pkgs;

        src = craneLib.cleanCargoSource (craneLib.path ./.);

        commonArgs = {
          inherit src;
          buildInputs = [ ];
        };

        cargoArtifacts = craneLib.buildDepsOnly commonArgs;
        nxfetch = craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; });
        nxfetch-benchmark = pkgs.writeShellScriptBin "benchmark" (
          lib.strings.concatStringsSep " " [
            "${pkgs.hyperfine}/bin/hyperfine"
            "--warmup 10"
            "--shell=none"
            "${nxfetch}/bin/nxfetch"
            "${pkgs.afetch}/bin/afetch"
            "${pkgs.bunnyfetch}/bin/bunnyfetch"
            "${pkgs.fastfetch}/bin/fastfetch"
            "${pkgs.inxi}/bin/inxi"
            "${pkgs.neofetch}/bin/neofetch"
            "${pkgs.pfetch}/bin/pfetch"
            "${pkgs.profetch}/bin/profetch"
            "${pkgs.yafetch}/bin/yafetch"
          ]
        );
      in
      {
        checks = {
          inherit nxfetch nxfetch-benchmark;

          nxfetch-clippy = craneLib.cargoClippy (
            commonArgs
            // {
              inherit cargoArtifacts;
              cargoClippyExtraArgs = "--all-targets -- --deny warnings";
            }
          );

          nxfetch-doc = craneLib.cargoDoc (commonArgs // { inherit cargoArtifacts; });

          nxfetch-fmt = craneLib.cargoFmt { inherit src; };

          nxfetch-audit = craneLib.cargoAudit { inherit src advisory-db; };
        };

        packages = {
          default = nxfetch;
          benchmark = nxfetch-benchmark;
        };

        apps.default = flake-utils.lib.mkApp {
          name = "nxfetch";
          drv = nxfetch;
        };

        formatter = pkgs.nixfmt-rfc-style;

        devShells.default = pkgs.mkShell {
          inputsFrom = builtins.attrValues self.checks.${system};

          RUST_BACKTRACE = "full";

          nativeBuildInputs = with pkgs; [
            cargo # rust package manager
            clippy # opinionated rust formatter
            marksman # md language server
            nixfmt-rfc-style # nix code formatter
            rust-analyzer # rust analyzer
            taplo-lsp # toml language server
          ];

          LD_LIBRARY_PATH = lib.makeLibraryPath commonArgs.buildInputs;
        };
      }
    );

  nixConfig = {
    extra-substituters = [ "https://nxfetch.cachix.org" ];
    extra-trusted-public-keys = [ "nxfetch.cachix.org-1:DqGz4BdO5hI+4fqS27EEtnYZzinSurUdeQn2PsvzyvA=" ];
  };
}