diff --git a/modules/system/boot/systemd-unit-options.nix b/modules/system/boot/systemd-unit-options.nix
index 9069d03b9f00..f863daf2250d 100644
--- a/modules/system/boot/systemd-unit-options.nix
+++ b/modules/system/boot/systemd-unit-options.nix
@@ -215,6 +215,16 @@ rec {
socketOptions = unitOptions // {
+ listenStreams = mkOption {
+ default = [];
+ types = types.listOf types.string;
+ example = [ "0.0.0.0:993" "/run/my-socket" ];
+ description = ''
+ For each item in this list, a ListenStream
+ option in the [Socket] section will be created.
+ '';
+ };
+
socketConfig = mkOption {
default = {};
example = { ListenStream = "/run/my-socket"; };
diff --git a/modules/system/boot/systemd.nix b/modules/system/boot/systemd.nix
index 4957bfeed34b..11c2cfc6ace4 100644
--- a/modules/system/boot/systemd.nix
+++ b/modules/system/boot/systemd.nix
@@ -275,6 +275,7 @@ let
[Socket]
${attrsToSection def.socketConfig}
+ ${concatStringsSep "\n" (map (s: "ListenStream=${s}") def.listenStreams)}
'';
};