{ dash, hectic, postgresql_17, neovim, openssh, coreutils, gawk, lib }: let shell = "${dash}/bin/dash"; mkDatabase = { postgresql ? postgresql_17 }: hectic.writeShellApplication { inherit shell; bashOptions = [ "errexit" "nounset" ]; # SC2209: false positive — PAGER_OR_CAT=cat stores the string "cat" intentionally excludeShellChecks = [ "SC2209" ]; name = "database"; runtimeInputs = [ hectic.migrator hectic.parse-uri postgresql neovim openssh coreutils gawk ]; text = '' ${builtins.readFile hectic.helpers.posix-shell.log} ${builtins.readFile hectic.helpers.posix-shell.change_namespace} ${builtins.readFile hectic.helpers.posix-shell.quote} ${builtins.readFile hectic.helpers.posix-shell.pager_or_cat} ${builtins.readFile ./database.sh} ''; meta = { description = "PostgreSQL development database management"; mainProgram = "database"; }; }; mkPostgresInit = { postgresql ? postgresql_17 }: hectic.writeShellApplication { inherit shell; bashOptions = [ ]; name = "postgres-init"; runtimeInputs = [ postgresql coreutils ]; text = builtins.readFile ./postgres-init.sh; meta = { description = "Initialize local PostgreSQL instance"; mainProgram = "postgres-init"; }; }; mkPostgresCleanup = { postgresql ? postgresql_17 }: hectic.writeShellApplication { inherit shell; bashOptions = [ ]; name = "postgres-cleanup"; runtimeInputs = [ postgresql coreutils ]; text = builtins.readFile ./postgres-cleanup.sh; meta = { description = "Clean up local PostgreSQL instance"; mainProgram = "postgres-cleanup"; }; }; in { "db-tool" = lib.makeOverridable mkDatabase { }; "postgres-init" = lib.makeOverridable mkPostgresInit { }; "postgres-cleanup" = lib.makeOverridable mkPostgresCleanup { }; }