Our distro packaging makes customising the skin complicated because Estuary is inside a squashfs file (SYSTEM) which is expanded into a virtual and read-only filesystem on each boot. You can clone the skin to /storage and then make changes to the clone, or you create a custom LE image that compiles the changes into the image.
LE is minimalist so we don't have git and change management tools in the filesystem. You could add them via a Docker container if you wanted to, with a clone of the Kodi repo to e.g. /storage/xbmc.repo acting as the source of the skin and symlinks between the root folder of the Estuary skin files and /storage/.kodi/addons/skin.MyEstuary making the skin appear locally. It has the advantage of being somewhat self-contained on the device. It requires quite a bit of setup/fiddling though (and there are no guides for it) and you need to reinvent the wheel when moving to another device. If the changes are not extensive; perhaps skip "doing it right" and just clone the skin files locally and apply changes; and rinse/repeat occasionally if needed.
The ultimate "doing it properly" is creating a custom image with the changes baked in. I have virtual machines and resources for that, and I'm using this workflow:
Fork https://github.com/xbmc/xbmc/ to your own GitHub account. Now clone your repo locally, git remote add an 'upstream' source for the Kodi repo, and git checkout -b a local topic branch to contain commits for your skin changes. You can now make changes and git commit them to the branch, and generate diff patches using git format-patch. Over time and if required, you can git fetch upstream Kodi changes from their repo and git rebase your local branch against them, and regenerate the patches.
Fork https://github.com/LibreELEC/LibreELEC.tv/ to your own GitHub account. now clone your repo locally, add an upstream remote for the LE repo, and checkout a local topic branch for your LE image changes. Add the diff patch(es) generated in the Kodi repo to packages/mediacentre/kodi-theme-Estuary/patches/ then commit them to the branch. You can now build a custom image that applies the diff patches to the skin. You can periodically fetch changes from our upstream repo and rebase your branch against them. and then rebuild the image.
No idea what works best for you .. it's about time/effort/resources/skills available ![]()