diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix
index c11d4434c20..7255ffc5af4 100644
--- a/nixos/modules/services/networking/networkmanager.nix
+++ b/nixos/modules/services/networking/networkmanager.nix
@@ -24,6 +24,8 @@ let
[connection]
ipv6.ip6-privacy=2
+ ethernet.cloned-mac-address=${cfg.ethernet.macAddress}
+ wifi.cloned-mac-address=${cfg.wifi.macAddress}
'';
/*
@@ -73,6 +75,19 @@ let
"pre-down" = "pre-down.d/";
};
+ macAddressOpt = mkOption {
+ type = types.either types.str (types.enum ["permanent" "preserve" "random" "stable"]);
+ default = "preserve";
+ example = "00:11:22:33:44:55";
+ description = ''
+ "XX:XX:XX:XX:XX:XX": MAC address of the interface.
+ permanent: use the permanent MAC address of the device.
+ preserve: don’t change the MAC address of the device upon activation.
+ random: generate a randomized value upon each connect.
+ stable: generate a stable, hashed MAC address.
+ '';
+ };
+
in {
###### interface
@@ -140,6 +155,9 @@ in {
'';
};
+ ethernet.macAddress = macAddressOpt;
+ wifi.macAddress = macAddressOpt;
+
dispatcherScripts = mkOption {
type = types.listOf (types.submodule {
options = {
@@ -229,6 +247,7 @@ in {
systemd.services."network-manager" = {
wantedBy = [ "network.target" ];
+ restartTriggers = [ configFile ];
preStart = ''
mkdir -m 700 -p /etc/NetworkManager/system-connections