From 4baf8548fbf9957b53418e0aad06bd6a798c283e Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Thu, 20 Jan 2022 18:49:54 +0100 Subject: types.singleLineStr: Allow and trim trailing \n Allow a \n character at the end of the string and remove it during the merge function. An option of this type will resolve to the value "foo" whether it is set to "foo" or "foo\n". This is useful when using 'builtins.readFile' or ''-strings, which might add an unintended newline (for example, bash trim the final newline from a subshell). --- lib/types.nix | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'lib/types.nix') diff --git a/lib/types.nix b/lib/types.nix index 18e95caaee8..7acfa60f161 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -300,11 +300,18 @@ rec { inherit (str) merge; }; - singleLineStr = mkOptionType { - name = "singleLineStr"; - description = "string that doesn't contain [\\n\\r]"; - inherit (strMatching "[^\n\r]*") check merge; - }; + # Allow a newline character at the end and trim it in the merge function. + singleLineStr = + let + inherit (strMatching "[^\n\r]*\n?") check merge; + in + mkOptionType { + name = "singleLineStr"; + description = "string that doesn't contain [\\n\\r]"; + inherit check; + merge = loc: defs: + lib.removeSuffix "\n" (merge loc defs); + }; strMatching = pattern: mkOptionType { name = "strMatching ${escapeNixString pattern}"; -- cgit 1.4.1