{ description = "A simple base flake to be used as a starting point to avoid setting up everything for every flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; snowfall-lib = { url = "github:snowfallorg/lib"; inputs.nixpkgs.follows = "nixpkgs"; }; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; }; outputs = { self, nixpkgs, snowfall-lib, treefmt-nix, }: let eachSystemOp = op: systems: f: builtins.foldl' (op f) { } systems; mapEachSystem = eachSystemOp ( f: attrs: system: let result = f system; in builtins.foldl' ( attrs: key: attrs // { ${key} = (attrs.${key} or { }) // { ${system} = result.${key}; }; } ) ); in { lib.mkFlake = options@{ systems ? [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ], devShellPackages ? (pkgs: [ ]), treeFmtFile ? ./treefmt.nix, ... }: let snowfallOptions = builtins.removeAttrs options [ "systems" "devShellPackages" "treeFmtFile" ]; in (snowfall-lib.mkFlake snowfallOptions) // (mapEachSystem systems ( system: let pkgs = import nixpkgs { inherit system; }; treeFmtEval = treefmt-nix.lib.evalModule pkgs treeFmtFile; in { formatter = treeFmtEval.config.build.wrapper; checks = { fmt = treeFmtEval.config.build.check self; }; devShells.default = pkgs.mkShell { packages = [ pkgs.nixfmt-rfc-style pkgs.nixd ] ++ (devShellPackages pkgs); }; } )); }; }