1{ config, lib, pkgs, ... }:
2let
3 cfg = config.services.mullvad-vpn;
4in
5with lib;
6{
7 options.services.mullvad-vpn.enable = mkOption {
8 type = types.bool;
9 default = false;
10 description = ''
11 This option enables Mullvad VPN daemon.
12 '';
13 };
14
15 config = mkIf cfg.enable {
16 boot.kernelModules = [ "tun" ];
17
18 # mullvad-daemon writes to /etc/iproute2/rt_tables
19 networking.iproute2.enable = true;
20
21 systemd.services.mullvad-daemon = {
22 description = "Mullvad VPN daemon";
23 wantedBy = [ "multi-user.target" ];
24 wants = [ "network.target" ];
25 after = [
26 "network-online.target"
27 "NetworkManager.service"
28 "systemd-resolved.service"
29 ];
30 path = [
31 pkgs.iproute2
32 # Needed for ping
33 "/run/wrappers"
34 ];
35 startLimitBurst = 5;
36 startLimitIntervalSec = 20;
37 serviceConfig = {
38 ExecStart = "${pkgs.mullvad-vpn}/bin/mullvad-daemon -v --disable-stdout-timestamps";
39 Restart = "always";
40 RestartSec = 1;
41 };
42 };
43 };
44
45 meta.maintainers = [ maintainers.xfix ];
46}