grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / network-filesystems / yandex-disk.nix
blobee9b58b081a37f0b4b65c3e9cbd737a231099f90
1 { config, pkgs, lib, ... }:
2 let
4   cfg = config.services.yandex-disk;
6   dir = "/var/lib/yandex-disk";
8   u = if cfg.user != null then cfg.user else "yandexdisk";
14   ###### interface
16   options = {
18     services.yandex-disk = {
20       enable = lib.mkOption {
21         type = lib.types.bool;
22         default = false;
23         description = ''
24           Whether to enable Yandex-disk client. See https://disk.yandex.ru/
25         '';
26       };
28       username = lib.mkOption {
29         default = "";
30         type = lib.types.str;
31         description = ''
32           Your yandex.com login name.
33         '';
34       };
36       password = lib.mkOption {
37         default = "";
38         type = lib.types.str;
39         description = ''
40           Your yandex.com password. Warning: it will be world-readable in /nix/store.
41         '';
42       };
44       user = lib.mkOption {
45         default = null;
46         type = lib.types.nullOr lib.types.str;
47         description = ''
48           The user the yandex-disk daemon should run as.
49         '';
50       };
52       directory = lib.mkOption {
53         type = lib.types.path;
54         default = "/home/Yandex.Disk";
55         description = "The directory to use for Yandex.Disk storage";
56       };
58       excludes = lib.mkOption {
59         default = "";
60         type = lib.types.commas;
61         example = "data,backup";
62         description = ''
63           Comma-separated list of directories which are excluded from synchronization.
64         '';
65       };
67     };
69   };
72   ###### implementation
74   config = lib.mkIf cfg.enable {
76     users.users = lib.mkIf (cfg.user == null) [ {
77       name = u;
78       uid = config.ids.uids.yandexdisk;
79       group = "nogroup";
80       home = dir;
81     } ];
83     systemd.services.yandex-disk = {
84       description = "Yandex-disk server";
86       after = [ "network.target" ];
88       wantedBy = [ "multi-user.target" ];
90       # FIXME: have to specify ${directory} here as well
91       unitConfig.RequiresMountsFor = dir;
93       script = ''
94         mkdir -p -m 700 ${dir}
95         chown ${u} ${dir}
97         if ! test -d "${cfg.directory}" ; then
98           (mkdir -p -m 755 ${cfg.directory} && chown ${u} ${cfg.directory}) ||
99             exit 1
100         fi
102         ${pkgs.su}/bin/su -s ${pkgs.runtimeShell} ${u} \
103           -c '${pkgs.yandex-disk}/bin/yandex-disk token -p ${cfg.password} ${cfg.username} ${dir}/token'
105         ${pkgs.su}/bin/su -s ${pkgs.runtimeShell} ${u} \
106           -c '${pkgs.yandex-disk}/bin/yandex-disk start --no-daemon -a ${dir}/token -d ${cfg.directory} --exclude-dirs=${cfg.excludes}'
107       '';
109     };
110   };