diff --git a/modules/formatter.nix b/modules/formatter.nix index b6098db..a63a9ba 100644 --- a/modules/formatter.nix +++ b/modules/formatter.nix @@ -1,21 +1,55 @@ { config, lib, flake-parts-lib, ... }: let inherit (lib) + filterAttrs + mapAttrs mkOption + optionalAttrs types ; inherit (flake-parts-lib) - mkTransposedPerSystemModule + mkSubmoduleOptions + mkPerSystemOption ; in -mkTransposedPerSystemModule { - name = "formatter"; - option = mkOption { - type = types.nullOr types.package; - default = null; - description = '' - A package used by [`nix fmt`](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-fmt.html). - ''; +{ + options = { + flake = mkSubmoduleOptions { + formatter = mkOption { + type = types.lazyAttrsOf types.package; + default = { }; + description = '' + Per system package used by nix fmt. + ''; + }; + }; + + perSystem = mkPerSystemOption ({ config, ... }: { + _file = ./formatter.nix; + options = { + formatter = mkOption { + type = types.nullOr types.package; + default = null; + description = '' + A package used by nix fmt. + ''; + }; + }; + }); + }; + config = { + flake.formatter = + mapAttrs + (k: v: v.formatter) + (filterAttrs + (k: v: v.formatter != null) + config.allSystems + ); + + perInput = system: flake: + optionalAttrs (flake?formatter.${system}) { + formatter = flake.formatter.${system}; + }; + }; - file = ./formatter.nix; }