does the wallet always create the first account at index 0?
Yes, the wallet derivation path defaults are declared in the trezor suite wallet source code. https://github.com/trezor/trezor-suite/blob/5377ec9e20d5e37951db2ad4a8bbeca437ed8d69/packages/suite/src/utils/wallet/coinmarket/coinmarketUtils.ts#L115
{
name: 'Bitcoin (legacy)',
networkType: 'bitcoin',
accountType: 'legacy',
symbol: 'btc',
bip44: "m/44'/0'/i'",
decimals: 8,
explorer: {
tx: 'https://btc1.trezor.io/tx/',
account: 'https://btc1.trezor.io/xpub/',
},
features: ['rbf', 'sign-verify'],
},
const result = await TrezorConnect.getAddress({
device,
coin: legacy.symbol,
path: `${legacy.bip44.replace('i', '0')}/0/0`,
useEmptyPassphrase: device.useEmptyPassphrase,
showOnTrezor: false,
});
if (result.success) {
return result.payload.address;
}
Is it possible for a user to generate an account at subsequent indices
if there are no funds at the previous index?
Yes, under the receive tab of the wallet. Although it shows index 0 by default, there’s a “+ More Addresses” button the users could click on and send BTC to a higher index prior to receiving anything at index 0. A user going too far ahead of the index on their own doing can complicate the way an HD wallet works due to look-ahead gaps. See https://bitcoin.stackexchange.com/a/54664/26873