I have created a clock which is always accurate down to the second, and will never drift or need setting. This is possible due to the fact that all GPS satellites broadcast a hyper-accurate time signal from an atomic clock on board.

The device uses 4x MAX7219 8x8 displays (purchased 3 of them for $26 AUD on amazon). All four 8x8 modules are controlled via an i2c interface. This was connected to a Raspberry Pi 4. A button was then soldered directly to the RPI 4's headers. The GPS module simply plugged into USB. The components were then hot glued into the 3D Printed case.

The following pin setup was used:
| function | gpio | physical pin |
|---|---|---|
| VCC (For display) | 5V | 2 |
| GND (For display) | GND | 6 |
| DIN (For display) | GPIO10 | 19 |
| CS (For display) | GPIO8 | 24 |
| CLK (For display) | GPIO11 | 23 |
| Button Input | GPIO21 | 40 |
| Button Ground | GND | 39 |
The display displays "HH MM SS GG", where GG is the current number of satellites the device is receiving a signal from. It is best to place the device on a windowsill or near outside in order to receive a signal. If the GPS signal is lost, it continues counting up time until it receives another GPS signal to re-update the time, however the time should not drift unless signal is lost for weeks.

The RPI 4 is running Raspberry Pi OS Lite 64-bit, and the actual programming of the device is contained inside main.py, which is scheduled to run on boot using crontab ("sudo crontab-e", add the line "@reboot /usr/bin/python3 /home/USER/main.py" replacing USER with your actual user, assuming the script is stored in the home directory.)
Once plugged in, as soon as a GPS signal is heard, the exact time gets displayed. However, despite GPS transmitting an atomically accurate time, due to the overhead of USB and the RPI 4's processing, the time will only be accurate to the second.
The soldered button changes the time-zone. In the script provided, the time-zones available are:
SYD (Sydney, UTC+10)
SDST (Sydney Daylight Savings Time, UTC+11)
CALF (California, UTC-8)
NYC (New York City, UTC-5)
TKYO (Tokyo, UTC+9)
BJNG (Beijing, UTC+8)
GRCE (Greece, UTC+2)
THE END