summaryrefslogtreecommitdiff
path: root/modules/services/postgresql
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2017-07-02 18:39:07 +0200
committerDaiderd Jordan <daiderd@gmail.com>2017-07-02 18:39:07 +0200
commitacd0fee357c4a735cf14e17d99f275973b07b314 (patch)
tree346e1a8e0edbe64cf72f6173bfacdf8c1be143f8 /modules/services/postgresql
parent2eec909fafd869be5035b27fce7bcea8360eded7 (diff)
postgresql: init service
Diffstat (limited to 'modules/services/postgresql')
-rw-r--r--modules/services/postgresql/default.nix84
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;
+ };
+
+ };
+}