# SPDX-License-Identifier: AGPL-3.0-or-later { description = "A MOS6502 emulator written in Rust."; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; crane.url = "github:ipetkov/crane"; # devenv dependencies devenv-root = { url = "file+file:///dev/null"; flake = false; }; flake-parts.url = "github:hercules-ci/flake-parts"; devenv.url = "github:cachix/devenv"; devenv.inputs.nixpkgs.follows = "nixpkgs"; nix2container.url = "github:nlewo/nix2container"; nix2container.inputs.nixpkgs.follows = "nixpkgs"; mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin"; # Custom template dependencies treefmt-nix.url = "github:numtide/treefmt-nix"; treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs @ { crane, flake-parts, devenv-root, ... }: flake-parts.lib.mkFlake {inherit inputs;} { imports = [ inputs.devenv.flakeModule inputs.treefmt-nix.flakeModule ]; systems = ["x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; perSystem = { config, pkgs, ... }: let craneLib = crane.mkLib pkgs; src = craneLib.cleanCargoSource ./.; commonArgs = { inherit src; strictDeps = true; }; cargoArtifacts = craneLib.buildDepsOnly commonArgs; mos6502 = craneLib.buildPackage (commonArgs // {inherit cargoArtifacts;}); in { checks = { inherit mos6502; mos6502-clippy = craneLib.cargoClippy (commonArgs // { inherit cargoArtifacts; }); mos6502-nextest = craneLib.cargoNextest (commonArgs // { inherit cargoArtifacts; partitions = 1; partitionType = "count"; }); }; packages.default = mos6502; devenv.shells.default = { devenv.root = let devenvRootFileContent = builtins.readFile devenv-root.outPath; in pkgs.lib.mkIf (devenvRootFileContent != "") devenvRootFileContent; imports = [./nix/devenv.nix]; pre-commit.hooks.treefmt = { enable = true; packageOverrides.treefmt = config.treefmt.build.wrapper; }; name = "my-project"; }; treefmt = { # Checked by pre-commit. flakeCheck = false; flakeFormatter = true; programs = { alejandra.enable = true; rustfmt.enable = true; statix.enable = true; taplo.enable = true; }; projectRootFile = "flake.nix"; }; }; }; }