2022-05-25 16:36:33 +02:00
{ config , lib , flake-parts-lib , self , . . . }:
2021-10-27 11:05:52 +02:00
let
inherit ( lib )
2021-11-22 22:01:38 +01:00
genAttrs
2021-10-27 11:05:52 +02:00
mapAttrs
mkOption
types
;
2022-05-25 16:36:33 +02:00
inherit ( flake-parts-lib )
2022-05-13 10:14:10 +02:00
mkPerSystemType
;
2021-10-27 11:05:52 +02:00
rootConfig = config ;
in
{
options = {
systems = mkOption {
description = " A l l t h e s y s t e m t y p e s t o e n u m e r a t e i n t h e f l a k e . " ;
type = types . listOf types . str ;
} ;
perInput = mkOption {
2022-05-13 10:14:54 +02:00
description = " F u n c t i o n f r o m s y s t e m t o f u n c t i o n f r o m f l a k e t o < l i t e r a l > s y s t e m < / l i t e r a l > - s p e c i f i c a t t r i b u t e s . " ;
2021-10-27 11:05:52 +02:00
type = types . functionTo ( types . functionTo ( types . lazyAttrsOf types . unspecified ) ) ;
} ;
perSystem = mkOption {
2022-05-13 10:14:10 +02:00
description = " A f u n c t i o n f r o m s y s t e m t o f l a k e - l i k e a t t r i b u t e s o m i t t i n g t h e < l i t e r a l > & l t ; s y s t e m > < / l i t e r a l > a t t r i b u t e . " ;
type = mkPerSystemType ( { config , system , . . . }: {
_file = ./perSystem.nix ;
config = {
_module . args . inputs' = mapAttrs ( k : rootConfig . perInput system ) self . inputs ;
_module . args . self' = rootConfig . perInput system self ;
} ;
2021-10-27 11:05:52 +02:00
} ) ;
2022-05-25 18:09:17 +02:00
apply = modules : system :
( lib . evalModules {
inherit modules ;
prefix = [ " p e r S y s t e m " system ] ;
specialArgs = {
inherit system ;
} ;
} ) . config ;
2021-10-27 11:05:52 +02:00
} ;
2021-11-22 22:01:38 +01:00
allSystems = mkOption {
type = types . lazyAttrsOf types . unspecified ;
description = " T h e s y s t e m - s p e c i f i c c o n f i g f o r e a c h o f s y s t e m s . " ;
internal = true ;
} ;
} ;
config = {
allSystems = genAttrs config . systems config . perSystem ;
# TODO: Sub-optimal error message. Get Nix to support a memoization primop, or get Nix Flakes to support systems properly or get Nix Flakes to add a name to flakes.
2022-04-06 18:01:26 +02:00
_module . args . getSystem = system : config . allSystems . ${ system } or ( builtins . trace " u s i n g n o n - m e m o i z e d s y s t e m ${ system } " config . perSystem system ) ;
2021-10-27 11:05:52 +02:00
} ;
}