Parts Info
These are all of the parts that were bought to build this project. There were some odds and ends that I already owned and cannot find a good link for (plugs, wires, etc).
Filament
I used Prusa PETG for all of the filament. The colors used were Orange, White, and Anthracite Grey.
https://www.prusa3d.com/category/petg/
NeoPixels
The four rods on the end are each covered with one 28-pixel strip. The rods are all wired in parallel.
https://www.adafruit.com/product/1506
Perma-Proto Board
This board is meant to be used with a Raspberry Pi, but after looking at its size and layout, it proved perfect for mounting the QTPY ESP32-S2, MCP23017, and EEPROM.
https://www.adafruit.com/product/2310
QTPY ESP32 S2
The main MCU.
https://www.adafruit.com/product/5325
MCP23017
An I2C I/O expander. I likely could have used less inputs for the buttons, but this seemed simpler.
https://www.adafruit.com/product/732
EEPROM (24LC32AT-I/SN)
https://www.digikey.com/en/products/detail/microchip-technology/24LC32AT-I-SN/285049
6mm Switch (trigger)
https://www.adafruit.com/product/367
12mm Switch (buttons)
https://www.digikey.com/en/products/detail/omron-electronics-inc-emc-div/B3F-4055/31799
Haptic Vibrator
Placed in the grip, just under the batteries.
https://www.adafruit.com/product/1201
2-Axis Joystick
https://www.adafruit.com/product/245
I2C Rotary Encoder Breakout
In hind-sight, this was more difficult to work with than just a standard rotary encoder. Reading and clearing interrupts over I2C was a lot of unnecessary overhead.
https://www.adafruit.com/product/4991
Rotary Encoder
https://www.adafruit.com/product/377
16mm Illuminated Latching Push Button
https://www.adafruit.com/product/1442
4 x AA Battery Holder with 2.1mm Plug
https://www.adafruit.com/product/3784
2.2" 18-bit color TFT LCD display
https://www.adafruit.com/product/1480
Other
Generic Capacitors, Resistors, BPJ transistors, springs, magnets, screws, LEDs.