From 0a117618d2d50ce8cb84eae863c135e3a9eae5c4 Mon Sep 17 00:00:00 2001
From: makefu <github@syntax-fehler.de>
Date: Sun, 4 Oct 2015 16:42:04 +0200
Subject: [PATCH] makefu 3: add tinc_graphs module

---
 3modules/default.nix     | 23 +++---------
 3modules/tinc_graphs.nix | 79 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+), 17 deletions(-)
 create mode 100644 3modules/tinc_graphs.nix

diff --git a/3modules/default.nix b/3modules/default.nix
index 4178084..598365c 100644
--- a/3modules/default.nix
+++ b/3modules/default.nix
@@ -1,19 +1,8 @@
-{ config, lib, ... }:
+_:
 
-with lib;
-let
-  cfg = config.krebs;
+{
+  imports = [
+    ./tinc_graphs.nix
+  ];
+}
 
-  out = {
-    imports = [
-    ];
-    options.krebs = api;
-    config = mkIf cfg.enable imp;
-  };
-
-  api = { };
-
-  imp = { };
-
-in
-out
diff --git a/3modules/tinc_graphs.nix b/3modules/tinc_graphs.nix
new file mode 100644
index 0000000..fa7f103
--- /dev/null
+++ b/3modules/tinc_graphs.nix
@@ -0,0 +1,79 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+  cfg = config.makefu.tinc_graphs;
+  internal_dir = "${cfg.workingDir}/internal";
+  external_dir = "${cfg.workingDir}/external";
+
+  out = {
+    options.makefu.tinc_graphs = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkEnableOption "makefu.tinc_graphs";
+
+    geodbPath = mkOption {
+      type = types.str;
+      description = "Path to geocitydb, defaults to geolite-legacy";
+      default = "${geolite-legacy}/share/GeoIP/GeoIPCity.dat";
+    };
+
+    workingDir = mkOption {
+      type = types.str;
+      description = ''
+        Path to working dir, will create interal and external/.
+        Defaults to the new users home dir which defaults to
+        /var/cache/tinc_graphs'';
+      default = users.extraUsers.tinc_graphs.home;
+    };
+
+    timerConfig = mkOption {
+      type = with types; attrsOf str;
+      default = {
+        OnCalendar = "*:0/15";
+      };
+    };
+  };
+
+  imp = {
+
+    systemd.timers.tinc_graphs = {
+      description = "Build Tinc Graphs via via timer";
+
+      timerConfig = cfg.timerConfig;
+    };
+    systemd.services.tinc_graphs = {
+      description = "Build Tinc Graphs";
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" ];
+
+      restartIfChanged = true;
+
+      serviceConfig = {
+        Type = "simple";
+        environment = {
+          EXTERNAL_FOLDER = external_dir;
+          INTERNAL_FOLDER = internal_dir;
+          GEODB = cfg.geodbPath;
+        };
+        ExecStartPre = ''
+          #!/bin/sh
+          mkdir -p "$EXTERNAL_FOLDER" "$INTERNAL_FOLDER"
+        '';
+        ExecStart = "${pkgs.tinc_graphs}/bin/all-the-graphs";
+        User = "tinc_graphs";
+        privateTmp = true;
+      };
+    };
+
+    users.extraUsers.tinc_graphs = {
+      uid = 3925439960; #genid tinc_graphs
+      home = "/var/cache/tinc_graphs";
+      createHome = true;
+    };
+  };
+
+in
+out