{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; git-hooks.url = "github:cachix/git-hooks.nix"; git-hooks.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, git-hooks, nixpkgs, }: let inherit (self) outputs; inherit (outputs) overlays; systems = ["aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux"]; forSystems = nixpkgs.lib.genAttrs systems; pkgsFor = system: (import nixpkgs {inherit system;}).extend overlays.default; genPkgs = func: (forSystems (system: func (pkgsFor system))); in { checks = genPkgs (pkgs: { git-hooks = git-hooks.lib.${pkgs.system}.run { src = ./.; hooks = { alejandra.enable = true; # NOTE: These do not work well with `nix flake check` due to pure environments # https://github.com/cachix/git-hooks.nix/issues/452 # cargo-check.enable = true; # clippy = { # enable = true; # packageOverrides.cargo = pkgs.cargo; # packageOverrides.clippy = pkgs.rustPackages.clippy; # }; rustfmt = { enable = true; packageOverrides.rustfmt = pkgs.rustfmt; }; }; }; build = outputs.packages.${pkgs.system}.default; }); packages = genPkgs (pkgs: { kodotag = pkgs.rustPlatform.buildRustPackage { pname = "kodotag"; version = "0.1.0"; nativeBuildInputs = with pkgs; [ pkg-config clang mold wayland ]; buildInputs = with pkgs; [ clang xorg.libX11 xorg.libXcursor xorg.libXi xorg.libXrandr udev alsa-lib vulkan-loader libxkbcommon ]; src = ./.; hash = pkgs.lib.fakeHash; cargoHash = "sha256-x2St+At8n07ns354zORhb7NJfBQTav1beSyAnlJtak8="; # a hack to avoid using mold as our linker when building with nix postUnpack = '' ls -la rm -r ./*/.cargo ''; }; default = outputs.packages.${pkgs.system}.kodotag; }); devShells = genPkgs (pkgs: { default = pkgs.mkShell { inherit (self.checks.${pkgs.system}.git-hooks) shellHook; inputsFrom = [outputs.packages.${pkgs.system}.default]; packages = with pkgs; [ rustPackages.clippy rust-analyzer rustfmt ]; }; }); overlays = { default = final: prev: {}; }; formatter = genPkgs (p: p.alejandra); }; }