Regexes in bash commands are my nemesis.
Programmer Humor
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
Regexes ~~in bash commands~~ are my nemesis.
~~Regexes~~
exes
scott pilgrim?
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 using lib.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 the settings
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%7E%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.
My personal best is backslash in a json string in an env variable passed to bash in a docker container, in a batch file.
Learning C: Random asterisks go
But sometimes ampersands also!