1{ config, lib, pkgs, ... }:
2let
3 cfg = config.services.clickhouse;
4 confDir = "/etc/clickhouse-server";
5 stateDir = "/var/lib/clickhouse";
6in
7with lib;
8{
9
10 ###### interface
11
12 options = {
13
14 services.clickhouse = {
15
16 enable = mkOption {
17 default = false;
18 description = "Whether to enable ClickHouse database server.";
19 };
20
21 };
22
23 };
24
25
26 ###### implementation
27
28 config = mkIf cfg.enable {
29
30 users.users.clickhouse = {
31 name = "clickhouse";
32 uid = config.ids.uids.clickhouse;
33 group = "clickhouse";
34 description = "ClickHouse server user";
35 };
36
37 users.groups.clickhouse.gid = config.ids.gids.clickhouse;
38
39 systemd.services.clickhouse = {
40 description = "ClickHouse server";
41
42 wantedBy = [ "multi-user.target" ];
43
44 after = [ "network.target" ];
45
46 preStart = ''
47 mkdir -p ${stateDir}
48 chown clickhouse:clickhouse ${confDir} ${stateDir}
49 '';
50
51 script = ''
52 cd "${confDir}"
53 exec ${pkgs.clickhouse}/bin/clickhouse-server
54 '';
55
56 serviceConfig = {
57 User = "clickhouse";
58 Group = "clickhouse";
59 PermissionsStartOnly = true;
60 };
61 };
62
63 environment.etc = {
64 "clickhouse-server/config.xml" = {
65 source = "${pkgs.clickhouse}/etc/clickhouse-server/config.xml";
66 };
67
68 "clickhouse-server/users.xml" = {
69 source = "${pkgs.clickhouse}/etc/clickhouse-server/users.xml";
70 };
71 };
72
73 };
74
75}