diff options
| author | Daiderd Jordan <daiderd@gmail.com> | 2017-07-02 18:39:07 +0200 |
|---|---|---|
| committer | Daiderd Jordan <daiderd@gmail.com> | 2017-07-02 18:39:07 +0200 |
| commit | acd0fee357c4a735cf14e17d99f275973b07b314 (patch) | |
| tree | 346e1a8e0edbe64cf72f6173bfacdf8c1be143f8 /modules/services/postgresql | |
| parent | 2eec909fafd869be5035b27fce7bcea8360eded7 (diff) | |
postgresql: init service
Diffstat (limited to 'modules/services/postgresql')
| -rw-r--r-- | modules/services/postgresql/default.nix | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/modules/services/postgresql/default.nix b/modules/services/postgresql/default.nix new file mode 100644 index 0000000..1098b4e --- /dev/null +++ b/modules/services/postgresql/default.nix @@ -0,0 +1,84 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.postgresql; + + configFile = pkgs.writeText "postgresql.conf" + '' + log_destination = 'stderr' + port = ${toString cfg.port} + ${cfg.extraConfig} + ''; +in + +{ + options = { + services.postgresql = { + enable = mkOption { + type = types.bool; + default = false; + description = ''Whether to run PostgreSQL.''; + }; + + package = mkOption { + type = types.package; + default = pkgs.postgresql96; + defaultText = "pkgs.postgresql96"; + description = ''PostgreSQL package to use.''; + }; + + port = mkOption { + type = types.int; + default = 5432; + description = ''The port on which PostgreSQL listens.''; + }; + + dataDir = mkOption { + type = types.path; + default = "/var/lib/postgresql"; + example = "/var/lib/postgresql/9.6"; + description = ''Data directory for PostgreSQL.''; + }; + + enableTCPIP = mkOption { + type = types.bool; + default = false; + description = '' + Whether PostgreSQL should listen on all network interfaces. + If disabled, the database can only be accessed via its Unix + domain socket or via TCP connections to localhost. + ''; + }; + + extraConfig = mkOption { + type = types.lines; + default = ""; + description = "Additional text to be appended to <filename>postgresql.conf</filename>."; + }; + }; + }; + + config = mkIf cfg.enable { + + environment.systemPackages = [ cfg.package ]; + + launchd.user.agents.postgresql = + { path = [ cfg.package ]; + script = '' + # Initialise the database. + if ! test -e ${cfg.dataDir}/PG_VERSION; then + initdb -U postgres -D ${cfg.dataDir} + fi + ln -sfn ${configFile} ${cfg.dataDir}/postgresql.conf + + exec ${cfg.package}/bin/postgres -D ${cfg.dataDir} ${optionalString cfg.enableTCPIP "-i"} + ''; + + serviceConfig.KeepAlive = true; + serviceConfig.RunAtLoad = true; + }; + + }; +} |
