- cross-posted to:
- [email protected]
- cross-posted to:
- [email protected]
Regexes in bash commands are my nemesis.
Regexes
in bash commandsare my nemesis.Regexesexes
scott pilgrim?
Learning C: Random asterisks go
But sometimes ampersands also!
This meme brought to you by me trying to pass a regex from Nix into a TOML, which is certainly not the worst backslash orgy I’ve seen, but tragic in its own right. Both Nix and TOML have a way to specify raw strings, which do not need escaping. But Nix uses a normal string when passing into TOML, so I do have to escape anyways. 🫠
My regex also contains a double-quote, which was just guesswork as to how many backslashes I need there.
But Nix uses a normal string when passing into TOML, so I do have to escape anyways
What do you mean by that? You are always able to just use the
''
strings instead of the"
strings, they are just different syntax for the same underlying type. Or are you just usinglib.generators.toINI
without any arguments? Maybe try something like this:toTomlEscapeBackslashes = toINI { mkKeyValue = mkKeyValueDefault { mkValueString = x: lib.escape [ ''\'' ] (toString x); } "="; }
This will escape the values, like this:
nix-repl> :print toTomlEscapeBackslashes { my.regex = ''foo\nbar''; } [my] regex=foo\\nbar
I figured, I’d involuntarily sign up for counter suggestions by posting this. 😅
Using
lib.escape
is a good idea, thanks.But yeah, basically I want to configure Alacritty and I’m using the respective home-manager module.
Even more specifically, I want to pass stuff, including a regex, into thesettings
parameter, which more-or-less just takes the Nix expression that I shove in and then outputs it as TOML on disk.As for how I would’ve liked this to work:
- Use
''doubled single-quotes''
in Nix to not need escaping. - Use
'single-quotes'
in TOML to not need escaping: https://toml.io/en/v1.0.0#string%3A~%3Atext=single+quotes
But the TOML is templated with
"double-quotes"
, so I do need to escape the regex after all.I did just try to understand how the Alacritty module does the templating and found this gem:
# TODO: why is this needed? Is there a better way to retain escape sequences? "substituteInPlace $out --replace-quiet '\\\\' '\\'"
So, that doesn’t fill me with a whole lot of confidence. 🙃
But yeah, it’s working now without me having to write a whole bunch of backslashes, so that’s good enough in my book.
- Use