From 8f80c31bc35ba1c46bc66dbbff4b7e04b16ef473 Mon Sep 17 00:00:00 2001 From: qbisi Date: Fri, 3 Jul 2026 00:11:02 +0800 Subject: [PATCH] nixos/mptcpd: generate config declaratively --- nixos/modules/services/networking/mptcpd.nix | 46 ++++++++++++++++++-- pkgs/by-name/mp/mptcpd/package.nix | 6 +++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/networking/mptcpd.nix b/nixos/modules/services/networking/mptcpd.nix index 04279388d9de..429a3e856a91 100644 --- a/nixos/modules/services/networking/mptcpd.nix +++ b/nixos/modules/services/networking/mptcpd.nix @@ -5,11 +5,9 @@ ... }: let - cfg = config.services.mptcpd; - + settingsFormat = pkgs.formats.ini { }; in - { options = { @@ -20,15 +18,57 @@ in package = lib.mkPackageOption pkgs "mptcpd" { }; + settings = lib.mkOption { + type = settingsFormat.type; + default = { }; + example = lib.literalExpression '' + { + core = { + "addr-flags" = "subflow"; + "notify-flags" = "existing,skip_link_local,skip_loopback,check_route"; + "load-plugins" = "addr_adv,sspi"; + }; + } + ''; + description = '' + mptcpd configuration written to {file}`/etc/mptcpd/mptcpd.conf`. + + See {manpage}`mptcpd(8)` for details about available options and syntax. + ''; + }; + }; }; config = lib.mkIf cfg.enable { + # Disable NetworkManager from configuring the MPTCP endpoints. + # See https://github.com/multipath-tcp/mptcpd/blob/48942b2110805af236ca41164fde67830efd7507/README.md?plain=1#L19-L38 + networking.networkmanager.connectionConfig = { + "connection.mptcp-flags" = 1; + }; + + environment.etc."mptcpd/mptcpd.conf".source = settingsFormat.generate "mptcpd.conf" cfg.settings; + environment.systemPackages = [ cfg.package ]; + services.mptcpd.settings = { + core = { + log = lib.mkDefault "journal"; + "plugin-dir" = "${cfg.package}/lib/mptcpd"; + "path-manager" = lib.mkDefault "addr_adv"; + }; + }; + systemd.packages = [ cfg.package ]; + systemd.services.mptcp = { + wantedBy = [ "multi-user.target" ]; + serviceConfig.ExecStart = [ + "" + "${cfg.package}/libexec/mptcpd" + ]; + }; }; diff --git a/pkgs/by-name/mp/mptcpd/package.nix b/pkgs/by-name/mp/mptcpd/package.nix index eee2d99f7ad9..f3225ab96190 100644 --- a/pkgs/by-name/mp/mptcpd/package.nix +++ b/pkgs/by-name/mp/mptcpd/package.nix @@ -47,9 +47,15 @@ stdenv.mkDerivation (finalAttrs: { postConfigure = "doxygen -u"; configureFlags = [ + "--sysconfdir=/etc" "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system" ]; + installFlags = [ + # The NixOS module generates /etc/mptcpd/mptcpd.conf declaratively. + "pkgsysconfdir=$out/etc/mptcpd" + ]; + # fix: 'Fontconfig error: Cannot load default config file: No such file: (null)' env.FONTCONFIG_FILE = "${fontconfig.out}/etc/fonts/fonts.conf";