# SPDX-FileCopyrightText: 2023 Christina Sørensen # SPDX-FileContributor: Christina Sørensen # # SPDX-License-Identifier: AGPL-3.0-only { description = "fortune-kind: A new kinda fortune."; inputs = { nixpkgs = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; }; flake-utils = { url = "github:numtide/flake-utils"; }; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; pre-commit-hooks = { url = "github:cachix/pre-commit-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; }; outputs = { self, flake-utils, naersk, nixpkgs, treefmt-nix, rust-overlay, pre-commit-hooks, }: flake-utils.lib.eachDefaultSystem ( system: let overlays = [(import rust-overlay)]; pkgs = (import nixpkgs) { inherit system overlays; }; toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; naersk' = pkgs.callPackage naersk { cargo = toolchain; rustc = toolchain; clippy = toolchain; }; treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix; buildInputs = with pkgs; lib.optionals stdenv.isDarwin [libiconv darwin.apple_sdk.frameworks.Security]; in rec { # For `nix fmt` formatter = treefmtEval.config.build.wrapper; packages = { # For `nix build` & `nix run`: default = naersk'.buildPackage { src = ./.; doCheck = true; # run `cargo test` on build copyBins = true; copyLibs = true; singleStep = true; inherit buildInputs; nativeBuildInputs = with pkgs; [installShellFiles gnumake pkg-config openssl]; MAN_OUT = "./man"; preBuild = '' mkdir -p "./$MAN_OUT"; ''; preInstall = '' installManPage man/nix-weather.1 installShellCompletion \ --fish man/nix-weather.fish \ --bash man/nix-weather.bash \ --zsh man/_nix-weather mkdir -p $out ''; }; # Run `nix build .#check` to check code check = naersk'.buildPackage { src = ./.; mode = "check"; inherit buildInputs; }; # Run `nix build .#test` to run tests test = naersk'.buildPackage { src = ./.; mode = "test"; inherit buildInputs; }; # Run `nix build .#clippy` to lint code clippy = naersk'.buildPackage { src = ./.; mode = "clippy"; inherit buildInputs; }; }; # For `nix develop`: devShells.default = pkgs.mkShell { inherit (self.checks.${system}.pre-commit-check) shellHook; inputsFrom = [self.packages.${system}.default]; nativeBuildInputs = with pkgs; [rustup toolchain just zip reuse]; }; # For `nix flake check` checks = { pre-commit-check = let # some treefmt formatters are not supported in pre-commit-hooks we filter them out for now. toFilter = # HACK: This is a nice hack to not have to manually filter we should keep in mind for a future refactor. # Stolen from eza ["yamlfmt"]; filterFn = n: _v: (!builtins.elem n toFilter); treefmtFormatters = pkgs.lib.mapAttrs (_n: v: {inherit (v) enable;}) (pkgs.lib.filterAttrs filterFn (import ./treefmt.nix).programs); in pre-commit-hooks.lib.${system}.run { src = ./.; hooks = treefmtFormatters // { convco.enable = true; # not in treefmt reuse = { enable = true; name = "reuse"; entry = with pkgs; "${pkgs.reuse}/bin/reuse lint"; pass_filenames = false; }; }; }; formatting = treefmtEval.config.build.check self; build = packages.check; inherit (packages) default test ; lint = packages.clippy; }; } ); }