{ config, pkgs, lib, ... }: with builtins // lib; let cfg = config.file; in { options.file = mkOption { default = {}; type = with types; lazyAttrsOf (submodule ({ name, config, ... }: { options = { enable = mkEnableOption name // { default = true; }; target = mkOption { type = types.str; default = name; }; executable = mkOption { type = with types; nullOr bool; default = null; }; directory = mkOption { type = types.bool; default = false; description = '' Enable this if the source file is a directory. Note that directories are copied first when forming the source ''; }; source = mkOption { type = types.path; }; text = mkOption { type = with types; nullOr lines; default = null; }; }; config = mkMerge [ (mkIf (config.text != null) { directory = false; source = pkgs.writeText name config.text; }) (mkIf (config.text == "") { enable = false; }) ]; })); }; }