TLDR: I find the construction of the code, which can be understood as a special type a 3D color code based on a hexagon nut. Special thanks to @DaftWullie for providing information about the condition of "weak" self-dual.
X check matrix

We have five stabilizer generators for each X/Z check so let's start with the $H_X$ first. Looking at the nut, we have two hexagon faces and six rectangular side faces. Two of the $X$ stabilizers are defined on the two hexagon faces. The other three are defined on the adjacent pair of side faces. If I call $S_1$ as the face of qubit $\{1,2,7,8\}$ and $S_2$ as the clockwise next face and so on, The three side-face X stabilizers are separately supported on $S_1 + S_2$, $S_3 + S_4$ and $S_5 + S_6$. The check matrix $H_X$ are therefore given by
$$
H_X=\begin{bmatrix}1&1&1&0&0&0&1&1&1&0&0&0\\ 0&0&1&1&1&0&0&0&1&1&1&0 \\ 1&0&0&0&1&1&1&0&0&0&1&1 \\ 1&1&1&1&1&1&0&0&0&0&0&0\\ 0&0&0&0&0&0&1&1&1&1&1&1\end{bmatrix}
$$
It's not hard to verify $d_X = 4$.
Z check matrix
If $H_Z = H_X$, we can verify that
$$
H_X H_Z^{T}\neq 0,
$$
and we need to permute the column of $H_X$ a little in order to find a valid $H_Z$ (permutation doesn't change the distance, so $d_Z=4$ for sure). I use Python code to brutally find possible permutations for $H_Z$, and it seems like there are more than one solution. For example, the permutation index can be
$$
(1,2,3,4,5,6,7,8,9,10,11,12)\rightarrow(10, 5, 12, 9, 2, 8, 11, 4, 6, 3, 7, 1)
$$
Here is the code I used:
import numpy as np
H_X = np.array([
[1,1,1,0,0,0,1,1,1,0,0,0],
[0,0,1,1,1,0,0,0,1,1,1,0],
[1,0,0,0,1,1,1,0,0,0,1,1],
[1,1,1,1,1,1,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,1]
]
)
result = []
for _ in range(1000000):
perm_index = np.random.permutation(range(12))
temp = H_X[:,perm_index].transpose()
A = H_X @ temp
if np.any(np.mod(A,2)):
pass
else:
result.append((perm_index,temp))
How I find the hexagon nut
In the original paper, they frequently mentioned that term "automorphism" when discussing the logical opeartion of this code. I then go search for the automorphism group of size $N=12$ and find this post. With the pretty figure of the automorphism in mind, it's then not hard to find the answer by spending some time on brutally placing stabilizer on each plaquette and check the code distance.