I use tvheadend (as backend) and Kodi as frontend. Works well for me.
I like that tvheadend can map multiple services/muxes (m3u channels) to the same channel, so if one channel doesn’t work it silently switches to another service/mux.
I use guide2go to download EPG via schedulesdirect, with excellent quality (including posters and icons).
It is a bit tedious to setup all the mappings in tvheadend but it can be automated with some scripts that give the same channel the same tvg-id and set the tvh-prio properties. Only have a hundred or so channels that I use so I just do it manually.
I use zsh with a few customisations. I’ve used fish but it’s sometimes slow so I just stick to zsh.