I totally agree! I did have a hacked-together solution using the Satellite Freeview MHEG5 guide years ago, but I can't even remember which tools I was using...
I've been browsing through the current Freeview NZ specs here:
https://freeviewnz.tv/media/1790/freeview-specification-2022-v15.pdf
Looking at page 28 of the specs, it seems to me that if I could find a way of rewriting the Tvheadend Transport stream IDs, so that 0x1a, 0x1b and 0x1c were rewritten to 0x19 (for the TVNZ channels), and 0x1e, 0x1f and 0x21 were rewritten to 0x1d (for the TV Works channels), then those EPGs would work for all of NZ. The Tvheadend source seems to use different terminology, so I haven't managed to track it down yet - if anyone more skilful than me can find where this takes place in the TVheadend source code then it would be worth a try!
Relevant quote below:
To limit the EITschedule bandwidth broadcast on each DTT multiplexer, EITschedule_actual and
EITschedule_other tables are activated on Transport_streams;-
• 0x19 TVNZ Auckland multiplexer,
• 0x1d TVWorks multiplexer
• 0x21 Kordia1 multiplexer
• 0x22 Kordia2 multiplexer
• 0x023 MaoriTV multiplexer
• 0x26 Hawkes Bay TV Multiplexer
The TVNZ regional multiplexers transport_stream_ids 0x1a, 0x1b and 0x1c are deemed identical to
transport_stream_id 0x19 since they are made up from the same service_ids, event_ids and associated CID
data, differing in advertorial content only. EITschedule_actual data is not activated on these multiplexers.
The TVWorks regional multiplexer’s transport_stream_ids 0x1e, 0x1f and 0x21 are deemed identical to
transport_stream_id 0x1d since they are made up from the same service_ids, event_ids and associated CID
data, differing in advertorial content only. EITschedule_actual data is not activated on these multiplexers.
For a device to fully populate its event information database with every Freeview services event_ids,
irrespective of its’ current active multiplexer it must parse both the EITschedule actual and other tables. If the
database includes duplicate service_ids irrespective of their transport_stream_ids it shall discard the service_id
with the lesser signal quality.