dots/modules/hosts/nixos/hetznix01/post-install/mosquitto.nix
Gene Liverman c1a53997ce
Add linting, formatting, and CI
- Add deadnix, nixfmt, and statix to flake inputs
- Add formatter output to flake for nix fmt support
- Add deadnix, nixfmt, statix to Home Manager packages
- Format all nix files with nixfmt
- Add GitHub Actions workflow for CI validation
- Support x86_64-darwin in formatter
2026-03-14 01:04:02 -04:00

135 lines
3.5 KiB
Nix

{ config, ... }:
let
mqtt_domain = "mqtt.technicalissues.us";
in
{
security.acme.certs.${mqtt_domain}.postRun =
"systemctl restart ${config.systemd.services.mosquitto.name}";
services.mosquitto = {
enable = true;
bridges = {
liamcottle = {
addresses = [
{
address = "mqtt.meshtastic.liamcottle.net";
port = 1883;
}
];
topics = [
"msh/# out 1 \"\""
];
settings = {
remote_username = "uplink";
remote_password = "uplink";
cleansession = true;
keepalive_interval = 160;
notifications = false;
start_type = "automatic";
};
};
meshtastic = {
addresses = [
{
address = "mqtt.meshtastic.org";
port = 1883;
}
];
topics = [
"msh/# out 1 \"\""
];
settings = {
remote_username = "meshdev";
remote_password = "large4cats";
#bridge_protocol_version = "mqttv311";
cleansession = true;
keepalive_interval = 160;
notifications = false;
start_type = "automatic";
};
};
homeassistant = {
addresses = [
{
address = "homeasistant-lc.atlas-snares.ts.net";
port = 1883;
}
];
topics = [
"msh/US/2/e/LongFast/!a386c80 out 1 \"\""
"msh/US/2/e/LongFast/!b03bcb24 out 1 \"\""
"msh/US/2/e/LongFast/!b03dbe58 out 1 \"\""
"msh/US/2/e/LongFast/!4370b0c6 out 1 \"\""
];
settings = {
remote_username = "meshtastic_user";
remote_password = "meshtastic_user";
cleansession = true;
keepalive_interval = 160;
notifications = false;
start_type = "automatic";
};
};
};
listeners =
let
mqtt_users = {
genebean = {
acl = [
"readwrite msh/#"
];
hashedPasswordFile = config.sops.secrets.mosquitto_genebean.path;
};
mountain_mesh = {
acl = [
"readwrite msh/#"
];
hashedPasswordFile = config.sops.secrets.mosquitto_mountain_mesh.path;
};
};
in
[
{
port = 1883;
users = mqtt_users;
settings.allow_anonymous = false;
}
{
port = 8883;
users = mqtt_users;
settings =
let
certDir = config.security.acme.certs."${mqtt_domain}".directory;
in
{
allow_anonymous = false;
keyfile = certDir + "/key.pem";
certfile = certDir + "/cert.pem";
cafile = certDir + "/chain.pem";
};
}
{
port = 9001;
users = mqtt_users;
settings =
let
certDir = config.security.acme.certs."${mqtt_domain}".directory;
in
{
allow_anonymous = false;
keyfile = certDir + "/key.pem";
certfile = certDir + "/cert.pem";
cafile = certDir + "/chain.pem";
protocol = "websockets";
};
}
];
};
sops.secrets = {
mosquitto_genebean.owner = config.users.users.mosquitto.name;
mosquitto_mountain_mesh.owner = config.users.users.mosquitto.name;
};
users.users.mosquitto.extraGroups = [ "nginx" ];
}