how to install signal messenger on openbsd -release and -stable

i recently moved to using openbsd on my personal computer and there was a single piece of the puzzle missing, which is that signal is the primary texting app i use and it is not available on openbsd

the signal client is an electron app, and electron is not well supported on openbsd for a variety of reasons. i don't make openbsd i just benefit hugely from the people who do, so no complaints from me!

but i need signal on my laptop, at least the messaging part (calls and video don't need to work since i have my phone for that), because i'm constantly sending files and links around from my computer to people on signal and it's just a hard requirement to be able to continue doing that

the solution is a TUI written in rust called gurk-rs: https://github.com/boxdot/gurk-rs

it's not available in ports but it's very easy to build, here's how you do it:

  1. install rust with doas pkg_add rustc. this also gives you cargo
  2. the other requirements are perl and protoc. perl is in base, so you already have it
  3. install protoc with doas pkg_add protobuf
  4. build gurk with cargo install --git https://github.com/boxdot/gurk-rs gurk
  5. gurk falls over if you don't exec it with a full path, so add an alias to .kshrc (or whatever you're using): alias signal=/home/<your-username>/.cargo/bin/gurk
  6. gurk won't render the TUI correctly unless you set locale settings that openbsd doesn't care about but lots of programs from linux world do care about. in your ~/.xsession add export LC_CTYPE="en_US.UTF-8" and export LANG="en_US.UTF-8" (or whatever is appropriate for your region and language)
  7. end your Xenocara session (log out) and log back in
  8. run signal
  9. if the device linking QR code doesn't render correctly in your terminal, find it in /tmp and open it in an image viewer to scan it

success! signal on openbsd without tracking -current — beautiful

i'm very new to openbsd, so if you are an expert and you see i've done something foolish, please let me know! i would like to dispense correct information. my email address is on my website <3