python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / v2ray.nix
blobba2aa5bc1de773c561f2b9d2f767c199f8b1a21b
1 { config, lib, pkgs, ... }:
3 with lib;
6   options = {
8     services.v2ray = {
9       enable = mkOption {
10         type = types.bool;
11         default = false;
12         description = lib.mdDoc ''
13           Whether to run v2ray server.
15           Either `configFile` or `config` must be specified.
16         '';
17       };
19       package = mkOption {
20         type = types.package;
21         default = pkgs.v2ray;
22         defaultText = literalExpression "pkgs.v2ray";
23         description = lib.mdDoc ''
24           Which v2ray package to use.
25         '';
26       };
28       configFile = mkOption {
29         type = types.nullOr types.str;
30         default = null;
31         example = "/etc/v2ray/config.json";
32         description = lib.mdDoc ''
33           The absolute path to the configuration file.
35           Either `configFile` or `config` must be specified.
37           See <https://www.v2fly.org/en_US/v5/config/overview.html>.
38         '';
39       };
41       config = mkOption {
42         type = types.nullOr (types.attrsOf types.unspecified);
43         default = null;
44         example = {
45           inbounds = [{
46             port = 1080;
47             listen = "127.0.0.1";
48             protocol = "http";
49           }];
50           outbounds = [{
51             protocol = "freedom";
52           }];
53         };
54         description = lib.mdDoc ''
55           The configuration object.
57           Either `configFile` or `config` must be specified.
59           See <https://www.v2fly.org/en_US/v5/config/overview.html>.
60         '';
61       };
62     };
64   };
66   config = let
67     cfg = config.services.v2ray;
68     configFile = if cfg.configFile != null
69       then cfg.configFile
70       else pkgs.writeTextFile {
71         name = "v2ray.json";
72         text = builtins.toJSON cfg.config;
73         checkPhase = ''
74           ${cfg.package}/bin/v2ray test -c $out
75         '';
76       };
78   in mkIf cfg.enable {
79     assertions = [
80       {
81         assertion = (cfg.configFile == null) != (cfg.config == null);
82         message = "Either but not both `configFile` and `config` should be specified for v2ray.";
83       }
84     ];
86     environment.etc."v2ray/config.json".source = configFile;
88     systemd.packages = [ cfg.package ];
90     systemd.services.v2ray = {
91       restartTriggers = [ config.environment.etc."v2ray/config.json".source ];
93       # Workaround: https://github.com/NixOS/nixpkgs/issues/81138
94       wantedBy = [ "multi-user.target" ];
95     };
96   };