--- /dev/null
+[Unit]
+Description=Stream Deck to MQTT bridge daemon
+After=network-online.target
+
+[Service]
+User=mqttdeck
+ExecStart=/usr/sbin/mqttdeck
+
+MemoryDenyWriteExecute=true
+NoNewPrivileges=yes
+PrivateTmp=true
+ProtectControlGroups=true
+ProtectHome=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+RestrictRealtime=true
+RestrictNamespaces=true
--- /dev/null
+# udev rules to allow mqttdeck user to talk to the hidraw device
+
+ACTION!="add|change", GOTO="mqttdeck_rules_end"
+SUBSYSTEM!="hidraw", GOTO="mqttdeck_rules_end"
+
+# Original Stream Deck
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+# Stream Deck v2
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+# Stream Deck Mini
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+# Stream Deck Mini Mk2
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+# Stream Deck XL
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+# Stream Deck XL v2
+ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", \
+ TAG+="systemd", OWNER="mqttdeck", ENV{SYSTEMD_WANTS}+="mqttdeck.service"
+
+LABEL="mqttdeck_rules_end"