![](/static/253f0d9b/assets/icons/icon-96x96.png)
![](https://programming.dev/pictrs/image/170721ad-9010-470f-a4a4-ead95f51f13b.png)
Good for you, you have a short list of requirements out of a chat service and discord perfectly fills your niche. But different people have different requirements for chat, and they don’t align. And network effects force people who have differing requirements to use the service with the most users which sucks.
For instance here are things that I require from any chat service that I use that discord completely falls flat at:
- Ability to run it on my linux machine without using an electron client (npm is a huge mess of supply chain attacks and I refuse to run any software that is likely to contain dependencies from it)
- Ability to run it on my AOSP phone which does not have any google play services installed
- Ability to write software to back up messages without fear of a company changing their API and breaking my backup system
Since I like to use bemenu I just wrote the derivation myself, it’s super short and simple especially borrowing from the
build.sh
script inwofi-emoji
repository. You can get the emoji data like so:emoji-data = pkgs.runCommand "emoji-data" { buildInputs = [ pkgs.cacert pkgs.curl pkgs.jq ]; outputHashAlgo = "sha256"; outputHash = "sha256-znAwFu0vq2B7lQ8uvG0xKv9j3jYr6P0CZpjoKMNPhZw="; } '' curl 'https://raw.githubusercontent.com/muan/emojilib/v3.0.6/dist/emoji-en-US.json' \ | jq --raw-output '. | to_entries | .[] | .key + " " + (.value | join(" ") | sub("_"; " "; "g"))' \ > $out '';
And then write a small wrapper script of your liking. I’m using wtype and bemenu, but you could just as easily use wl-clipboard and rofi for instance. This is to me one of the huge benifits of nix, how you can slam these small scripts together and not worry about missing dependencies when taking the configuration to other systems.