at 22.05-pre 1.8 kB view raw
1{ config, lib, pkgs, ... }: 2let 3 cfg = config.services.clickhouse; 4in 5with lib; 6{ 7 8 ###### interface 9 10 options = { 11 12 services.clickhouse = { 13 14 enable = mkEnableOption "ClickHouse database server"; 15 16 package = mkOption { 17 type = types.package; 18 default = pkgs.clickhouse; 19 defaultText = "pkgs.clickhouse"; 20 description = '' 21 ClickHouse package to use. 22 ''; 23 }; 24 25 }; 26 27 }; 28 29 30 ###### implementation 31 32 config = mkIf cfg.enable { 33 34 users.users.clickhouse = { 35 name = "clickhouse"; 36 uid = config.ids.uids.clickhouse; 37 group = "clickhouse"; 38 description = "ClickHouse server user"; 39 }; 40 41 users.groups.clickhouse.gid = config.ids.gids.clickhouse; 42 43 systemd.services.clickhouse = { 44 description = "ClickHouse server"; 45 46 wantedBy = [ "multi-user.target" ]; 47 48 after = [ "network.target" ]; 49 50 serviceConfig = { 51 User = "clickhouse"; 52 Group = "clickhouse"; 53 ConfigurationDirectory = "clickhouse-server"; 54 AmbientCapabilities = "CAP_SYS_NICE"; 55 StateDirectory = "clickhouse"; 56 LogsDirectory = "clickhouse"; 57 ExecStart = "${cfg.package}/bin/clickhouse-server --config-file=${cfg.package}/etc/clickhouse-server/config.xml"; 58 }; 59 }; 60 61 environment.etc = { 62 "clickhouse-server/config.xml" = { 63 source = "${cfg.package}/etc/clickhouse-server/config.xml"; 64 }; 65 66 "clickhouse-server/users.xml" = { 67 source = "${cfg.package}/etc/clickhouse-server/users.xml"; 68 }; 69 }; 70 71 environment.systemPackages = [ cfg.package ]; 72 73 # startup requires a `/etc/localtime` which only if exists if `time.timeZone != null` 74 time.timeZone = mkDefault "UTC"; 75 76 }; 77 78}