You can have anything you want with macros :)
I just wrote a macro `array` [1] that allows you to write
#[no_mangle]
static keymaps: array!{ u16[1, 2, 3] } = [
[
[1, 2, 3],
[4, 5, 6],
],
];
or alternatively using a type alias
type Keymaps = array!{ u16[1, 2, 3] };
#[no_mangle]
static keymaps: Keymaps = ...
On a more serious note, in general Rust favors explicit simple syntax: the only syntax related to arrays you need to learn is `[TYPE; LENGTH]` which is the way to write an array of type TYPE and length LENGTH, pretty straightforward. `[[[usize; 3]; 2]; 1]` is simply a composition of such arrays, as multidimensional arrays are just arrays of arrays.
C has a few more variants: the implicit length of `keymaps[]`, the `[0] = ...` initializer , the alternative `keymaps[1,2,3]` syntax. This is nice syntactic sugar, but you don't technically need it. Although if you really don't like the raw Rust syntax, you can always use macros like shown or a library like multiarray [2].
In a way I would say this makes Rust easier to learn: there are only a few symbols and patterns you need to learn to recognize, and the rest is compositions.
[1] WARNING: macro definitions are very symbol heavy, and thus even more unreadable.
https://play.rust-lang.org/?version=nightly&mode=debug&editi...
[2] https://docs.rs/multiarray/0.1.3/multiarray/