Look at how we do it in https://github.com/canonical/template-connect-integrator
There is a common core 'charm', but each implementation of different connectors (in this case, cloud storages), have their own config and minor tweaks.
Makes it more maintainable