Fix iwd space handling

ref man iwd.network:

> Key-value lines contain a setting key, an equal sign and the value of
> the setting. Whitespace preceding the key, the equal sign or the value,
> is ignored. The key must be a continuous string of alphanumeric and
> underscore characters and minus signs only. The value starts at the
> first non-whitespace character after the first equal sign on the line
> and ends at the end of the line and must be correctly UTF-8-encoded.
> […]
> String values, including file
> paths and hexstrings, are written as is except for five characters that
> may be backslash-escaped: space, \t, \r, \n and backslash itself.
> The latter three must be escaped. A space character must be escaped if
> it is the first character in the value string and is written as \s.

I guess this is what is expected then:
```
$ echo -e "  \t \r \\ "
 \

$ echo -e "  \t \r \\ " | sed "s=\\\=\\\\\\\=g;s=\t=\\\t=g;s=\r=\\\r=g;s=^ =\\\s="
\s \t \r \\
```
This commit is contained in:
Guilhem Saurel
2025-03-03 23:44:37 +01:00
committed by Qubasa
parent 19f2facbce
commit a11d5471ec

View File

@@ -1,4 +1,4 @@
{ lib, config, ... }: { lib, config, pkgs, ... }:
let let
cfg = config.clan.iwd; cfg = config.clan.iwd;
@@ -12,12 +12,13 @@ let
{ {
secret.${secret_name} = { }; secret.${secret_name} = { };
generator.prompt = "Wifi password for '${value.ssid}'"; generator.prompt = "Wifi password for '${value.ssid}'";
# ref. man iwd.network
generator.script = '' generator.script = ''
config=" config="
[Settings] [Settings]
AutoConnect=${if value.AutoConnect then "true" else "false"} AutoConnect=${if value.AutoConnect then "true" else "false"}
[Security] [Security]
Passphrase=\"$prompt_value\" Passphrase=$(echo -e "$prompt_value" | ${lib.getExe pkgs.gnused} "s=\\\=\\\\\\\=g;s=\t=\\\t=g;s=\r=\\\r=g;s=^ =\\\s=")
" "
echo "$config" > "$secrets/${secret_name}" echo "$config" > "$secrets/${secret_name}"
''; '';