1{ config, lib, pkgs, ... }:
2
3with pkgs;
4with lib;
5
6let
7 cfg = config.networking.connman;
8
9in {
10
11 ###### interface
12
13 options = {
14
15 networking.connman = {
16
17 enable = mkOption {
18 type = types.bool;
19 default = false;
20 description = ''
21 Whether to use ConnMan for managing your network connections.
22 '';
23 };
24
25 };
26
27 };
28
29 ###### implementation
30
31 config = mkIf cfg.enable {
32
33 assertions = [{
34 assertion = config.networking.useDHCP == false;
35 message = "You can not use services.networking.connman with services.networking.useDHCP";
36 }{
37 assertion = config.networking.wireless.enable == true;
38 message = "You must use services.networking.connman with services.networking.wireless";
39 }{
40 assertion = config.networking.networkmanager.enable == false;
41 message = "You can not use services.networking.connman with services.networking.networkmanager";
42 }];
43
44 environment.systemPackages = [ connman ];
45
46 systemd.services."connman" = {
47 description = "Connection service";
48 wantedBy = [ "multi-user.target" ];
49 after = [ "syslog.target" ];
50 serviceConfig = {
51 Type = "dbus";
52 BusName = "net.connman";
53 Restart = "on-failure";
54 ExecStart = "${pkgs.connman}/sbin/connmand --nodaemon";
55 StandardOutput = "null";
56 };
57 };
58
59 systemd.services."connman-vpn" = {
60 description = "ConnMan VPN service";
61 wantedBy = [ "multi-user.target" ];
62 after = [ "syslog.target" ];
63 before = [ "connman" ];
64 serviceConfig = {
65 Type = "dbus";
66 BusName = "net.connman.vpn";
67 ExecStart = "${pkgs.connman}/sbin/connman-vpnd -n";
68 StandardOutput = "null";
69 };
70 };
71
72 systemd.services."net-connman-vpn" = {
73 description = "D-BUS Service";
74 serviceConfig = {
75 Name = "net.connman.vpn";
76 before = [ "connman" ];
77 ExecStart = "${pkgs.connman}/sbin/connman-vpnd -n";
78 User = "root";
79 SystemdService = "connman-vpn.service";
80 };
81 };
82
83 networking = {
84 useDHCP = false;
85 wireless.enable = true;
86 networkmanager.enable = false;
87 };
88
89 powerManagement.resumeCommands = ''
90 systemctl restart connman
91 '';
92
93 };
94}