diff --git a/lib.nix b/lib.nix index 2390e4f..cd1911b 100644 --- a/lib.nix +++ b/lib.nix @@ -8,8 +8,20 @@ in config, name, enableTui ? false, + modules ? [ ], }: let + merged_config = lib.foldl' (acc: elem: acc // elem.config) config modules; + checks = lib.concatStringsSep "\n" ( + lib.concatMap ( + attrs: + lib.mapAttrsToList (k: v: '' + echo "Running ${k}" + ${v} + echo "Passed ${k}" + '') attrs.checks + ) modules + ); removeNullAndEmptyAttrs = attrs: let @@ -29,7 +41,7 @@ in }; configFile = toPCJson name ( removeNullAndEmptyAttrs ( - config + merged_config // { is_tui_disabled = !enableTui; } @@ -39,16 +51,64 @@ in pkgs.writeShellApplication { inherit name; text = '' - PC_CONFIG_FILES=${configFile} ${pkgs.process-compose}/bin/process-compose "$@" + ${checks} + PC_CONFIG_FILES=${configFile} ${pkgs.process-compose}/bin/process-compose "$@" ''; }; mkPostgres = { - default_config ? false, + name, + default_config ? true, + config ? { }, + extra_config ? '''', + package ? pkgs.postgresql, ... }: let + merged_config = + ( + if default_config then + { + listen_addresses = "localhost"; + port = 5432; + shared_buffers = "128MB"; + worker_mem = "4M"; + logging_collector = "off"; + + } + else + { } + ) + // config; + toStr = + value: + if true == value then + "yes" + else if false == value then + "no" + else if lib.isString value then + "'${lib.replaceStrings [ "'" ] [ "''" value ]}'" + else + builtins.toString value; + configFile = pkgs.writeTextDir "postgresql.conf" ( + lib.concatStringSep "\n" ( + lib.mapAttrsToList (n: v: "${n} = ${toStr v}") (lib.filterAttrs ( + lib.const (x: x != null) + )) merged_config + ) + ); + configFileCheck = pkgs.writeShellScript { + name = "postgresql-config-check-${name}"; + text = '' + ${package}/bin/postgres -D${configFile} -C config_file + touch $out + ''; + }; in - { }; + { + config.processes."${name}" = { + }; + checks."postgresql${name}" = configFileCheck; + }; }