• Ephera@lemmy.mlOP
    link
    fedilink
    English
    arrow-up
    11
    ·
    edit-2
    23 hours ago

    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.

    • balsoft@lemmy.ml
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      11 hours ago

      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
      
      • Ephera@lemmy.mlOP
        link
        fedilink
        English
        arrow-up
        1
        ·
        5 hours 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.