Since you want to do it without settings.sync, you can use project-local settings.json which then resides in your projects .vscode directory.
Open the Command Palette with [ctrl] [p] and type preference: open Workspace Settings (JSON)
This will create an empty local settings.json file for you.
Copy your desired settings and change them to your needs, this should override your global vscode settings.
Note: These will be project specific settings.
If you safe the contents of the .vscode directory in GitHub, they will be persistent in this repository.
Settings sync for the default shell should work out of the Box in the Github Codespace. This is persistent accross sessions and even accross different github repositories.
One funny thing here occurs to me, in some repositories VS Code still opens a bash shell as the first shell, while fish beeing the default. Seems to be something that GitHub does in its default container. But the first shell still isn't the default. Each new terminal that relies on the default selects your configured default shell. Simply open a new default shell and close the "first" one.