python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / iwd.nix
blob993a603c1ed5c43d7d6e5d7e0565d8e89eb0be75
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib)
5     mkEnableOption mkIf mkOption types
6     recursiveUpdate;
8   cfg = config.networking.wireless.iwd;
9   ini = pkgs.formats.ini { };
10   defaults = {
11     # without UseDefaultInterface, sometimes wlan0 simply goes AWOL with NetworkManager
12     # https://iwd.wiki.kernel.org/interface_lifecycle#interface_management_in_iwd
13     General.UseDefaultInterface = with config.networking.networkmanager; (enable && (wifi.backend == "iwd"));
14   };
15   configFile = ini.generate "main.conf" (recursiveUpdate defaults cfg.settings);
19   options.networking.wireless.iwd = {
20     enable = mkEnableOption (lib.mdDoc "iwd");
22     package = mkOption {
23       type = types.package;
24       default = pkgs.iwd;
25       defaultText = lib.literalExpression "pkgs.iwd";
26       description = lib.mdDoc ''
27         The iwd package to use.
28       '';
29     };
31     settings = mkOption {
32       type = ini.type;
33       default = { };
35       example = {
36         Settings.AutoConnect = true;
38         Network = {
39           EnableIPv6 = true;
40           RoutePriorityOffset = 300;
41         };
42       };
44       description = lib.mdDoc ''
45         Options passed to iwd.
46         See [here](https://iwd.wiki.kernel.org/networkconfigurationsettings) for supported options.
47       '';
48     };
49   };
51   config = mkIf cfg.enable {
52     assertions = [{
53       assertion = !config.networking.wireless.enable;
54       message = ''
55         Only one wireless daemon is allowed at the time: networking.wireless.enable and networking.wireless.iwd.enable are mutually exclusive.
56       '';
57     }];
59     environment.etc."iwd/${configFile.name}".source = configFile;
61     # for iwctl
62     environment.systemPackages = [ cfg.package ];
64     services.dbus.packages = [ cfg.package ];
66     systemd.packages = [ cfg.package ];
68     systemd.network.links."80-iwd" = {
69       matchConfig.Type = "wlan";
70       linkConfig.NamePolicy = "keep kernel";
71     };
73     systemd.services.iwd = {
74       wantedBy = [ "multi-user.target" ];
75       restartTriggers = [ configFile ];
76     };
77   };
79   meta.maintainers = with lib.maintainers; [ dtzWill ];