$ gpg --expert --full-gen-key
Select 8: RSA (set your own capabilities)
Select E to toggle off the Encrypt capability, which will leave you with only Sign + Certify.
Set a 4096 bit key size.
Set the expiration date.
Setup a UID.
Setup a passphrase.
The primary key is generated. Note your new key ID, as you'll be needing it henceforth.
Export the key ID as a variable (KEYID) for use later:
$ export KEYID= $ gpg --expert --edit-key $KEYID
Use gpg> adduid to add as many UIDs or e-mail addresses as you need. Once you're done, toggle to gpg> uid <#> and use the gpg> primary command to set the primary UID.
Now we will generate subkeys for each additional capability to be transferred to the main smartcard designated for daily use.
gpg> addkey
Select 6: RSA (encrypt only).
Set a 4096 bit key size.
Set the expiration date.
The first subkey is generated.
gpg> addkey
Select 8: RSA (set your own capabilities)
Select S and E to toggle off the Sign and Encrypt capabilities.
Select A to toggle on the Authenticate capability and press Q.
Set a 4096 bit key size.
Set the expiration date.
The second subkey is generated.
By the way, you should probably set the public key to the ultimate trust level.
gpg> trust
Select 5 = I trust ultimately.
gpg> save
Save the key(s) you've been creating.
If you want to sign your new master key with a previous key that you're transitioning from, then the time is now. How else will people know you're not an impostor?
gpg -u <your_old_keyid> --sign-key $KEYID
It's a good idea to create a revocation certificate, in case the YubiKey is lost or your private key is somehow compromised.
$ gpg --output revoke.asc --gen-revoke $KEYID
$ gpg --armor --output privkey.sec --export-secret-key $KEYID
$ gpg --armor --output subkeys.sec --export-secret-subkeys $KEYID
$ gpg --armor --output pubkey.asc --export $KEYID
You can move these private keys plus the revocation certificate someplace safe, like an encrypted partition or offline storage media.