54 lines
1.6 KiB
Nix
54 lines
1.6 KiB
Nix
{ pkgs, lib, config, ... }:
|
|
let
|
|
desk_mqtt = pkgs.writers.writePython3 "desk_mqtt"
|
|
{
|
|
libraries = with pkgs.python3Packages; [ pyusb ha-mqtt-discoverable ];
|
|
}
|
|
(builtins.readFile ./desk_mqtt.py);
|
|
usb2lin06_udev = pkgs.writeTextFile {
|
|
name = "usb2lin06-udev-rules";
|
|
text = ''
|
|
SUBSYSTEM=="usb", ATTR{idVendor}=="12d3", ATTR{idProduct}=="0002", MODE="0666"
|
|
'';
|
|
destination = "/lib/udev/rules.d/90-usb2lin06.rules";
|
|
};
|
|
in
|
|
{
|
|
config = {
|
|
services.udev.packages = [ usb2lin06_udev ];
|
|
systemd = {
|
|
services.desk_mqtt = {
|
|
description = "Control desk height via MQTT";
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
ExecStart = "${desk_mqtt}";
|
|
RestartSec = 10;
|
|
Restart = "on-failure";
|
|
|
|
# Hardening (hapazardeous)
|
|
CapabilityBoundingSet = "";
|
|
DynamicUser = true;
|
|
LockPersonality = true;
|
|
MemoryDenyWriteExecute = false;
|
|
NoNewPrivileges = true;
|
|
PrivateTmp = true;
|
|
PrivateUsers = true;
|
|
ProtectClock = true;
|
|
ProtectControlGroups = true;
|
|
ProtectHome = true;
|
|
ProtectHostname = true;
|
|
ProtectKernelLogs = true;
|
|
ProtectKernelModules = true;
|
|
RemoveIPC = true;
|
|
RestrictNamespaces = true;
|
|
RestrictRealtime = true;
|
|
RestrictSUIDSGID = true;
|
|
SystemCallArchitectures = "native";
|
|
SystemCallFilter = [ "@system-service" "~@privileged" "~@resouces" ];
|
|
UMask = "0077";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|