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 };
17
18 };
19
20
21 ###### implementation
22
23 config = mkIf cfg.enable {
24
25 users.users.clickhouse = {
26 name = "clickhouse";
27 uid = config.ids.uids.clickhouse;
28 group = "clickhouse";
29 description = "ClickHouse server user";
30 };
31
32 users.groups.clickhouse.gid = config.ids.gids.clickhouse;
33
34 systemd.services.clickhouse = {
35 description = "ClickHouse server";
36
37 wantedBy = [ "multi-user.target" ];
38
39 after = [ "network.target" ];
40
41 serviceConfig = {
42 User = "clickhouse";
43 Group = "clickhouse";
44 ConfigurationDirectory = "clickhouse-server";
45 AmbientCapabilities = "CAP_SYS_NICE";
46 StateDirectory = "clickhouse";
47 LogsDirectory = "clickhouse";
48 ExecStart = "${pkgs.clickhouse}/bin/clickhouse-server --config-file=${pkgs.clickhouse}/etc/clickhouse-server/config.xml";
49 };
50 };
51
52 environment.etc = {
53 "clickhouse-server/config.xml" = {
54 source = "${pkgs.clickhouse}/etc/clickhouse-server/config.xml";
55 };
56
57 "clickhouse-server/users.xml" = {
58 source = "${pkgs.clickhouse}/etc/clickhouse-server/users.xml";
59 };
60 };
61
62 environment.systemPackages = [ pkgs.clickhouse ];
63
64 # startup requires a `/etc/localtime` which only if exists if `time.timeZone != null`
65 time.timeZone = mkDefault "UTC";
66
67 };
68
69}