summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--krebs/2configs/agenda.html91
-rw-r--r--krebs/2configs/reaktor2.nix120
2 files changed, 104 insertions, 107 deletions
diff --git a/krebs/2configs/agenda.html b/krebs/2configs/agenda.html
new file mode 100644
index 000000000..9ccfc241c
--- /dev/null
+++ b/krebs/2configs/agenda.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Agenda</title>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <style>
+ html {
+ font-family: monospace;
+ }
+
+ dt {
+ float: left;
+ clear: left;
+ width: 30px;
+ text-align: right;
+ font-weight: bold;
+ }
+
+ dd {
+ margin: 0 0 0 40px;
+ padding: 0 0 0.5em 0;
+ }
+
+ .date {
+ color: grey;
+ font-style: italic;
+ }
+ </style>
+ </head>
+ <body>
+ <dl id="agenda"></dl>
+ <script>
+ const urlSearchParams = new URLSearchParams(window.location.search);
+ const params = Object.fromEntries(urlSearchParams.entries());
+
+ if (params.hasOwnProperty("style")) {
+ const cssUrls = params["style"].split(" ").filter((x) => x.length > 0);
+ for (const cssUrl of cssUrls)
+ fetch(cssUrl)
+ .then((response) =>
+ response.text().then((css) => {
+ const title = document.getElementsByTagName("head")[0];
+ const style = document.createElement("style");
+ style.appendChild(document.createTextNode(css));
+ title.appendChild(style);
+ })
+ )
+ .catch(console.log);
+ }
+
+ fetch("/agenda.json")
+ .then((response) => {
+ response.json().then((agenda) => {
+ const dl = document.getElementById("agenda");
+ for (const agendaItem of agenda) {
+ if (agendaItem.status !== "pending") continue;
+ // task warrior date format to ISO
+ const entryDate = agendaItem.entry.replace(
+ /(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z/,
+ "$1-$2-$3T$4:$5:$6Z"
+ );
+
+ const dt = document.createElement("dt");
+ dt.className = "id";
+ dt.appendChild(document.createTextNode(agendaItem.id.toString()));
+ dl.appendChild(dt);
+
+ const spanDate = document.createElement("span");
+ spanDate.className = "date";
+ spanDate.title = new Date(entryDate).toString();
+ spanDate.appendChild(document.createTextNode(entryDate));
+
+ const link = document.createElement("a");
+ link.href = "http://wiki.r/agenda/" + encodeURIComponent(agendaItem.description.replaceAll("/", "\u29F8")); // we use big solidus instead of slash because gollum will create directories
+ link.appendChild(document.createTextNode(agendaItem.description));
+
+ const dd = document.createElement("dd");
+ dd.className = "description";
+ dd.appendChild(link);
+ dd.appendChild(document.createTextNode(" "));
+ dd.appendChild(spanDate);
+
+ dl.appendChild(dd);
+ }
+ });
+ })
+ .then((data) => console.log(data));
+ </script>
+ </body>
+</html>
diff --git a/krebs/2configs/reaktor2.nix b/krebs/2configs/reaktor2.nix
index 8837f0aa5..c357da1d7 100644
--- a/krebs/2configs/reaktor2.nix
+++ b/krebs/2configs/reaktor2.nix
@@ -483,113 +483,19 @@ in {
''}'';
};
- services.nginx = {
- virtualHosts."agenda.r" = {
- serverAliases = [ "kri.r" ];
- locations."= /index.html".extraConfig = ''
- alias ${pkgs.writeText "agenda.html" ''
-<!DOCTYPE html>
-<html>
- <head>
- <title>Agenda</title>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <style>
- html {
- font-family: monospace;
- }
-
- dt {
- float: left;
- clear: left;
- width: 30px;
- text-align: right;
- font-weight: bold;
- }
-
- dd {
- margin: 0 0 0 40px;
- padding: 0 0 0.5em 0;
- }
-
- .date {
- color: grey;
- font-style: italic;
- }
- </style>
- </head>
- <body>
- <dl id="agenda"></dl>
- <script>
- const urlSearchParams = new URLSearchParams(window.location.search);
- const params = Object.fromEntries(urlSearchParams.entries());
-
- if (params.hasOwnProperty("style")) {
- const cssUrls = params["style"].split(" ").filter((x) => x.length > 0);
- for (const cssUrl of cssUrls)
- fetch(cssUrl)
- .then((response) =>
- response.text().then((css) => {
- const title = document.getElementsByTagName("head")[0];
- const style = document.createElement("style");
- style.appendChild(document.createTextNode(css));
- title.appendChild(style);
- })
- )
- .catch(console.log);
- }
-
- fetch("/agenda.json")
- .then((response) => {
- response.json().then((agenda) => {
- const dl = document.getElementById("agenda");
- for (const agendaItem of agenda) {
- if (agendaItem.status !== "pending") continue;
- // task warrior date format to ISO
- const entryDate = agendaItem.entry.replace(
- /(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z/,
- "$1-$2-$3T$4:$5:$6Z"
- );
-
- const dt = document.createElement("dt");
- dt.className = "id";
- dt.appendChild(document.createTextNode(agendaItem.id.toString()));
- dl.appendChild(dt);
-
- const spanDate = document.createElement("span");
- spanDate.className = "date";
- spanDate.title = new Date(entryDate).toString();
- spanDate.appendChild(document.createTextNode(entryDate));
-
- const link = document.createElement("a");
- link.href = "http://wiki.r/agenda/" + encodeURIComponent(agendaItem.description.replaceAll("/", "\u29F8")); // we use big solidus instead of slash because gollum will create directories
- link.appendChild(document.createTextNode(agendaItem.description));
-
- const dd = document.createElement("dd");
- dd.className = "description";
- dd.appendChild(link);
- dd.appendChild(document.createTextNode(" "));
- dd.appendChild(spanDate);
-
- dl.appendChild(dd);
- }
- });
- })
- .then((data) => console.log(data));
- </script>
- </body>
-</html>
- ''};
- '';
- locations."/agenda.json".extraConfig = ''
- proxy_set_header Host $host;
- proxy_pass http://localhost:8009;
- '';
- extraConfig = ''
- add_header 'Access-Control-Allow-Origin' '*';
- add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
- '';
- };
+ services.nginx.virtualHosts."agenda.r" = {
+ serverAliases = [ "kri.r" ];
+ locations."= /index.html".extraConfig = ''
+ alias ./agenda.html;
+ '';
+ locations."/agenda.json".extraConfig = ''
+ proxy_set_header Host $host;
+ proxy_pass http://localhost:8009;
+ '';
+ extraConfig = ''
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+ '';
};
systemd.services.reaktor2-r.serviceConfig.DynamicUser = mkForce false;