From 81ae90dd129d84c045afb6708686a82b247cda02 Mon Sep 17 00:00:00 2001 From: arcnmx Date: Sat, 11 May 2024 12:33:10 -0700 Subject: [PATCH] feat(chen): WoL --- ci/packages.nix | 3 +++ ci/systems.json | 14 ++++++++++++++ modules/system/host.nix | 3 ++- nixos/systemd2mqtt.nix | 6 +++++- nixos/wake-chen.nix | 31 +++++++++++++++++++++++++++++++ outputs.nix | 1 + overlays/default.nix | 1 + packages/default.nix | 3 ++- systems/chen/default.nix | 9 +++++++++ systems/hakurei/nixos.nix | 2 ++ tf/cloudflare_records.tf | 7 +++++++ tree.nix | 1 - 12 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 nixos/wake-chen.nix create mode 100644 systems/chen/default.nix diff --git a/ci/packages.nix b/ci/packages.nix index f259c6be..2f1d60aa 100644 --- a/ci/packages.nix +++ b/ci/packages.nix @@ -32,5 +32,8 @@ in { packages.x86_64-linux.openwebrxplus # TODO: packages.aarch64-linux.openwebrxplus ]; + systemd2mqtt.inputs = [ + packages.x86_64-linux.systemd2mqtt + ]; }; } diff --git a/ci/systems.json b/ci/systems.json index cce6e282..8ba93330 100644 --- a/ci/systems.json +++ b/ci/systems.json @@ -21,6 +21,20 @@ } } }, + "chen": { + "network": { + "hostName": "chen", + "networks": { + "int": null, + "local": { + "address4": null, + "address6": "fd0a::9e6b:00ff:fe21:1ce2", + "macAddress": "9c:6b:00:21:1c:e2" + }, + "tail": null + } + } + }, "ct": { "network": { "hostName": "ct", diff --git a/modules/system/host.nix b/modules/system/host.nix index b43749f8..074c61b4 100644 --- a/modules/system/host.nix +++ b/modules/system/host.nix @@ -28,7 +28,7 @@ in { }; type = mkOption { description = "Operating system type of the host"; - type = enum ["NixOS" "MacOS" "Darwin" "Linux"]; + type = enum ["NixOS" "MacOS" "Darwin" "Linux" "Windows"]; default = "NixOS"; }; folder = mkOption { @@ -73,6 +73,7 @@ in { macos = "darwin"; darwin = "darwin"; linux = "linux"; + windows = "windows"; } .${string.toLower config.type}; modules = mkIf (config.folder != "linux") [ diff --git a/nixos/systemd2mqtt.nix b/nixos/systemd2mqtt.nix index e53e3f79..9c62f81e 100644 --- a/nixos/systemd2mqtt.nix +++ b/nixos/systemd2mqtt.nix @@ -1,11 +1,15 @@ { config, + access, lib, + inputs, ... }: let inherit (lib.modules) mkIf mkDefault; cfg = config.services.systemd2mqtt; in { + imports = [ inputs.systemd2mqtt.nixosModules.default ]; + services.systemd2mqtt = { enable = mkDefault true; user = mkDefault "root"; @@ -13,7 +17,7 @@ in { url = mkDefault ( if config.services.mosquitto.enable then "tcp://localhost:1883" - else "tcp://mqtt.local.${config.networking.domain}:1883" + else access.proxyUrlFor { serviceName = "mosquitto"; scheme = "tcp"; } ); username = mkDefault "systemd"; }; diff --git a/nixos/wake-chen.nix b/nixos/wake-chen.nix new file mode 100644 index 00000000..4aa2bf17 --- /dev/null +++ b/nixos/wake-chen.nix @@ -0,0 +1,31 @@ +{ + config, + pkgs, + gensokyo-zone, + lib, + ... +}: let + inherit (gensokyo-zone.lib) mapOptionDefaults; + inherit (lib.meta) getExe; + chen = gensokyo-zone.systems.chen.config; + service = "wake-chen"; +in { + systemd.services.${service} = { + path = [ pkgs.wol ]; + script = '' + exec wol ${chen.network.networks.local.macAddress} + ''; + environment = mapOptionDefaults { + WOL_MAC_ADDRESS = chen.network.networks.local.macAddress; + }; + serviceConfig = mapOptionDefaults { + Type = "oneshot"; + RemainAfterExit = false; + } // { + ExecStart = [ + "${getExe pkgs.wol} $WOL_MAC_ADDRESS" + ]; + }; + }; + services.systemd2mqtt.units = [ "${service}.service" ]; +} diff --git a/outputs.nix b/outputs.nix index d375c72e..eb29450a 100644 --- a/outputs.nix +++ b/outputs.nix @@ -19,6 +19,7 @@ overlays = [ inputs.self.overlays.default inputs.self.overlays.deploy-rs + inputs.self.overlays.systemd2mqtt inputs.self.overlays.arc ]; config = { diff --git a/overlays/default.nix b/overlays/default.nix index fc88405d..49ee2b2f 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -21,5 +21,6 @@ in rec { samba = import ./samba.nix; openwebrx = import ./openwebrxplus.nix; deploy-rs = inputs.deploy-rs.overlays.default or inputs.deploy-rs.overlay; + systemd2mqtt = inputs.systemd2mqtt.overlays.default; arc = inputs.arcexprs.overlays.default; } diff --git a/packages/default.nix b/packages/default.nix index 8e76d32f..d8242850 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -47,7 +47,8 @@ krb5-ldap nfs-utils-ldap barcodebuddy - openwebrxplus; + openwebrxplus + systemd2mqtt; nf-setup-node = let reisen = ../systems/reisen; diff --git a/systems/chen/default.nix b/systems/chen/default.nix new file mode 100644 index 00000000..8a5265e8 --- /dev/null +++ b/systems/chen/default.nix @@ -0,0 +1,9 @@ +{...}: { + type = "Windows"; + network.networks = { + local = { + macAddress = "9c:6b:00:21:1c:e2"; + address4 = null; + }; + }; +} diff --git a/systems/hakurei/nixos.nix b/systems/hakurei/nixos.nix index 3bef3928..2cc22d03 100644 --- a/systems/hakurei/nixos.nix +++ b/systems/hakurei/nixos.nix @@ -23,6 +23,7 @@ in { nixos.tailscale nixos.ipa nixos.cloudflared + nixos.systemd2mqtt nixos.ddclient nixos.acme nixos.nginx @@ -44,6 +45,7 @@ in { nixos.access.proxmox nixos.access.plex nixos.access.invidious + nixos.wake-chen nixos.samba ./reisen-ssh.nix ]; diff --git a/tf/cloudflare_records.tf b/tf/cloudflare_records.tf index 4f58d942..a7484bd7 100644 --- a/tf/cloudflare_records.tf +++ b/tf/cloudflare_records.tf @@ -159,3 +159,10 @@ module "tewi_legacy_system_records" { zone_zone = cloudflare_zone.gensokyo-zone_zone.zone net_data = local.systems.tewi.network } + +module "chen_system_records" { + source = "./system/records" + zone_id = cloudflare_zone.gensokyo-zone_zone.id + zone_zone = cloudflare_zone.gensokyo-zone_zone.zone + net_data = local.systems.chen.network +} diff --git a/tree.nix b/tree.nix index 9febe0f2..bcf14a8b 100644 --- a/tree.nix +++ b/tree.nix @@ -51,7 +51,6 @@ filebin mosh doc-warnings - inputs.systemd2mqtt.nixosModules.default ]; }; };