1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8with lib;
9
10let
11 cfg = config.services.wg-netmanager;
12in
13{
14
15 options = {
16 services.wg-netmanager = {
17 enable = mkEnableOption "Wireguard network manager";
18 };
19 };
20
21 ###### implementation
22 config = mkIf cfg.enable {
23 # NOTE: wg-netmanager runs as root
24 systemd.services.wg-netmanager = {
25 description = "Wireguard network manager";
26 wantedBy = [ "multi-user.target" ];
27 after = [ "network.target" ];
28 path = with pkgs; [
29 wireguard-tools
30 iproute2
31 wireguard-go
32 ];
33 serviceConfig = {
34 Type = "simple";
35 Restart = "on-failure";
36 ExecStart = "${pkgs.wg-netmanager}/bin/wg_netmanager";
37 ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
38 ExecStop = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
39
40 ReadWritePaths = [
41 "/tmp" # wg-netmanager creates files in /tmp before deleting them after use
42 ];
43 };
44 unitConfig = {
45 ConditionPathExists = [
46 "/etc/wg_netmanager/network.yaml"
47 "/etc/wg_netmanager/peer.yaml"
48 ];
49 };
50 };
51 };
52
53 meta.maintainers = with maintainers; [ gin66 ];
54}