Scan from a comic where the hero throws an assortment of weapons. But instead, a backslash has been superimposed on each weapon and the hero shouts "Random backslashes go!!!!".
you are viewing a single comment's thread
view the rest of the comments
[–] 3 points 1 year ago* (last edited 1 year ago) (1 child)

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
  • source
  • parent
  • hideshow 1 child comment
  • [–] [S] 4 points 1 year ago

    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:

    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 '\\\\' '\\'"
    

    Source

    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.

  • source
  • parent