diff --git a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
index 2b9110e15a2d..539bf00a3627 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
@@ -44,6 +44,14 @@
services.atuin.
+
+
+ mmsd,
+ a lower level daemon that transmits and recieves MMSes.
+ Available as
+ services.mmsd.
+
+
v2rayA, a Linux
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index fb8e856490c1..6a6a34efbd14 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -20,6 +20,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [atuin](https://github.com/ellie/atuin), a sync server for shell history. Available as [services.atuin](#opt-services.atuin.enable).
+- [mmsd](https://gitlab.com/kop316/mmsd), a lower level daemon that transmits and recieves MMSes. Available as [services.mmsd](#opt-services.mmsd.enable).
+
- [v2rayA](https://v2raya.org), a Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel. Available as [services.v2raya](options.html#opt-services.v2raya.enable).
## Backward Incompatibilities {#sec-release-23.05-incompatibilities}
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 9e5696eb5cfd..6ec6c74565cd 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -873,6 +873,8 @@
./services/networking/miniupnpd.nix
./services/networking/miredo.nix
./services/networking/mjpg-streamer.nix
+ ./services/networking/mmsd.nix
+ ./services/networking/mosquitto.nix
./services/networking/monero.nix
./services/networking/morty.nix
./services/networking/mosquitto.nix
diff --git a/nixos/modules/services/networking/mmsd.nix b/nixos/modules/services/networking/mmsd.nix
new file mode 100644
index 000000000000..7e262a9326c1
--- /dev/null
+++ b/nixos/modules/services/networking/mmsd.nix
@@ -0,0 +1,38 @@
+{ pkgs, lib, config, ... }:
+with lib;
+let
+ cfg = config.services.mmsd;
+ dbusServiceFile = pkgs.writeTextDir "share/dbus-1/services/org.ofono.mms.service" ''
+ [D-BUS Service]
+ Name=org.ofono.mms
+ SystemdService=dbus-org.ofono.mms.service
+
+ # Exec= is still required despite SystemdService= being used:
+ # https://github.com/freedesktop/dbus/blob/ef55a3db0d8f17848f8a579092fb05900cc076f5/test/data/systemd-activation/com.example.SystemdActivatable1.service
+ Exec=${pkgs.coreutils}/bin/false mmsd
+ '';
+in
+{
+ options.services.mmsd = {
+ enable = mkEnableOption (mdDoc "Multimedia Messaging Service Daemon");
+ extraArgs = mkOption {
+ type = with types; listOf str;
+ description = mdDoc "Extra arguments passed to `mmsd-tng`";
+ default = [];
+ example = ["--debug"];
+ };
+ };
+ config = mkIf cfg.enable {
+ services.dbus.packages = [ dbusServiceFile ];
+ systemd.user.services.mmsd = {
+ after = [ "ModemManager.service" ];
+ aliases = [ "dbus-org.ofono.mms.service" ];
+ serviceConfig = {
+ Type = "dbus";
+ ExecStart = "${pkgs.mmsd-tng}/bin/mmsdtng " + escapeShellArgs cfg.extraArgs;
+ BusName = "org.ofono.mms";
+ Restart = "on-failure";
+ };
+ };
+ };
+}