{ dash, hectic, postgresql_17, neovim, openssh, coreutils, gawk, lib, runCommand, self }: let shell = "${dash}/bin/dash"; hecticInheritance = runCommand "hectic-inheritance" { } '' mkdir -p "$out/share/hectic" cp ${self.lib.hectic.inheritance.path} "$out/share/hectic/hectic-inheritance.sql" ''; applyBundle = self.lib.hectic.applyBundleScript; mkDatabase = { postgresql ? postgresql_17 }: hectic.writeShellApplication { inherit shell; bashOptions = [ "errexit" "nounset" ]; 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 hectic.helpers.posix-shell.with_closed_fds} ${applyBundle} ${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 hectic.helpers.posix-shell.with_closed_fds} ${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 { }; "hectic-inheritance" = hecticInheritance; }