mirror of
https://github.com/kmein/niveum
synced 2026-03-20 20:01:08 +01:00
Compare commits
17 Commits
new-krops
...
13727abfd6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13727abfd6 | ||
| a23f0c80a2 | |||
| b0b19c3989 | |||
| ef223a9717 | |||
| ecfc2ca06c | |||
| cd7e688a46 | |||
|
|
f7b9008ed0 | ||
| 81706489b5 | |||
| 817f57ad09 | |||
| eafb1ce0c3 | |||
| 0c72a89760 | |||
| a7db357e54 | |||
| 1ad6c63a2f | |||
| 502ab93585 | |||
|
|
fe6bda3cf2 | ||
| c64e681ada | |||
| af813cc876 |
@@ -40,8 +40,14 @@ in
|
||||
{
|
||||
imports = [ <niveum/modules/networkmanager-declarative.nix> ];
|
||||
|
||||
programs.nm-applet.enable = true;
|
||||
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
packages = [
|
||||
pkgs.networkmanager-openvpn
|
||||
pkgs.networkmanager-fortisslvpn
|
||||
];
|
||||
wifi.macAddress = "random";
|
||||
ethernet.macAddress = "random";
|
||||
unmanaged = [ "docker*" ];
|
||||
@@ -82,5 +88,10 @@ in
|
||||
|
||||
users.users.me.extraGroups = [ "networkmanager" ];
|
||||
|
||||
environment.systemPackages = [ pkgs.speedtest-cli ];
|
||||
environment.systemPackages = [
|
||||
pkgs.speedtest-cli
|
||||
pkgs.networkmanager-openvpn
|
||||
pkgs.networkmanagerapplet
|
||||
pkgs.networkmanager-fortisslvpn
|
||||
];
|
||||
}
|
||||
|
||||
26
flake.lock
generated
26
flake.lock
generated
@@ -109,11 +109,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1644837400,
|
||||
"narHash": "sha256-treFS89w/xKzeTjJSJdYp/Ceddv6oqq7bL9mZMQDPi0=",
|
||||
"lastModified": 1646406548,
|
||||
"narHash": "sha256-xp+3f76ycZXNf9pG65Ef9KfDl1fas2UQu/cBe/pLd+c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a03ae0e6d078cfdbb8404c3bff3622bd4e2f1c57",
|
||||
"rev": "47cd6702934434dd02bc53a67dbce3e5493e33a2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -125,11 +125,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1644951967,
|
||||
"narHash": "sha256-j+l8bt++dsYTJSGABuqeBEom5aNpD4n0BsOTdewFYuU=",
|
||||
"lastModified": 1646523963,
|
||||
"narHash": "sha256-ixFwYnaOycrzs0iN9RvyRMEGCkQ9Pj58x6V/qc2khy8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "05e1f8a2c7797b0d9f9e07ab2aaeccecdcf9b7da",
|
||||
"rev": "a173e92ee458878651356b9bcfb1e2b5145f76af",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -158,11 +158,11 @@
|
||||
"retiolum": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1644849126,
|
||||
"narHash": "sha256-iaRNvfQrUD+ZownDWWNdDwhVPgSsU5ojvVdswVq1IpY=",
|
||||
"lastModified": 1646081604,
|
||||
"narHash": "sha256-+o4I0UWPT2ZBr3oGF3vHGidfjbydkzyuFKWKDOzJo2U=",
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"rev": "6de359ef848dc1f38fb76731c35e712ee885fd88",
|
||||
"rev": "259d60325310b728f79c68dc1148f597e097d1b2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -210,11 +210,11 @@
|
||||
"stockholm": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1644865613,
|
||||
"narHash": "sha256-z7hPtMYxoQuWyLujUs5vbdZOGbjFosh+/IX3GpCDlkc=",
|
||||
"lastModified": 1646301205,
|
||||
"narHash": "sha256-m3eG8L0PI9Y2R2ZRF5NHfIzvRGkOL7aUIl7i+UCxUGc=",
|
||||
"ref": "master",
|
||||
"rev": "e3785b22b2c6cb173a58fd066c4eda80a67fb872",
|
||||
"revCount": 10404,
|
||||
"rev": "87a44dd1573cbdc8f0fc3553b0896b470bcfa44d",
|
||||
"revCount": 10431,
|
||||
"type": "git",
|
||||
"url": "https://cgit.lassul.us/stockholm"
|
||||
},
|
||||
|
||||
143
lib/radio-news.html
Normal file
143
lib/radio-news.html
Normal file
@@ -0,0 +1,143 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>lassulus radio news</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
main {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr;
|
||||
grid-gap: 2em;
|
||||
}
|
||||
|
||||
#news-list ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#news-list li {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#news-list time {
|
||||
display: block;
|
||||
color: grey;
|
||||
}
|
||||
|
||||
form label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
form input,
|
||||
form textarea {
|
||||
width: 100%;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
main {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
const newsEndpoint = "http://prism.r:7999";
|
||||
|
||||
function isoString(date) {
|
||||
return date.toISOString().slice(0, -5) + "Z";
|
||||
}
|
||||
|
||||
function setNextNews() {
|
||||
document.getElementById("next-news").innerHTML = (
|
||||
60 - new Date().getUTCMinutes()
|
||||
).toString();
|
||||
}
|
||||
|
||||
setInterval(setNextNews, 6000);
|
||||
|
||||
function fetchNews() {
|
||||
fetch(newsEndpoint).then((response) => {
|
||||
response.json().then((news) => {
|
||||
const newsList = document.getElementById("news-list");
|
||||
newsList.innerHTML = "";
|
||||
const ul = document.createElement("ul");
|
||||
for (const newsItem of news) {
|
||||
const start = new Date(newsItem.from);
|
||||
const end = new Date(newsItem.to);
|
||||
|
||||
const li = document.createElement("li");
|
||||
|
||||
const startDate = document.createElement("time");
|
||||
startDate.className = "start";
|
||||
startDate.title = start.toString();
|
||||
startDate.setAttribute("datetime", isoString(start));
|
||||
startDate.appendChild(document.createTextNode(isoString(start)));
|
||||
|
||||
const endDate = document.createElement("time");
|
||||
endDate.className = "end";
|
||||
endDate.title = end.toString();
|
||||
endDate.setAttribute("datetime", isoString(end));
|
||||
endDate.appendChild(document.createTextNode(isoString(end)));
|
||||
|
||||
li.appendChild(document.createTextNode(newsItem.text));
|
||||
li.appendChild(startDate);
|
||||
li.appendChild(endDate);
|
||||
ul.appendChild(li);
|
||||
}
|
||||
newsList.appendChild(ul);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function sendNews(event) {
|
||||
event.preventDefault();
|
||||
const formData = new FormData(event.target);
|
||||
|
||||
const request = new XMLHttpRequest();
|
||||
request.open("POST", newsEndpoint, false); // synchronous
|
||||
request.send(
|
||||
JSON.stringify({
|
||||
from: isoString(new Date(formData.get("from"))),
|
||||
to: isoString(new Date(formData.get("to"))),
|
||||
text: formData.get("text"),
|
||||
})
|
||||
);
|
||||
location.reload();
|
||||
}
|
||||
|
||||
window.onload = () => {
|
||||
setNextNews();
|
||||
fetchNews();
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<section>
|
||||
<h1>Submit news</h1>
|
||||
<form onsubmit="sendNews(event)">
|
||||
<label>Start date</label>
|
||||
<input type="datetime-local" name="from" required />
|
||||
<label>End date</label>
|
||||
<input type="datetime-local" name="to" required />
|
||||
<label>News text</label>
|
||||
<textarea name="text" rows="10" required></textarea>
|
||||
<input type="submit" />
|
||||
</form>
|
||||
Next news report should start in <span id="next-news"></span> minutes.
|
||||
</section>
|
||||
<aside>
|
||||
<h1>Planned news</h1>
|
||||
<div id="news-list">
|
||||
<em>No news planned yet.</em>
|
||||
</div>
|
||||
</aside>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -44,7 +44,7 @@ let
|
||||
caster-fm = subdomain: port: "http://${subdomain}.caster.fm:${toString port}/listen.mp3?authn0b0236758bd0e178156d0787327a055d";
|
||||
in [
|
||||
{
|
||||
stream = "https://radio.lassul.us/radio.ogg";
|
||||
stream = "http://lassul.us:8000/radio.ogg";
|
||||
station = "Radio lassulus";
|
||||
logo = "http://lassul.us/art/portraits/selbstportrait.jpg";
|
||||
desc = "Diminutive from lassus (“weary, faint, tired”). A programming human. Doing superior professional art.";
|
||||
|
||||
@@ -10,11 +10,12 @@ in
|
||||
./matterbridge.nix
|
||||
./menstruation.nix
|
||||
./moinbot.nix
|
||||
./horoscopy.nix
|
||||
# ./horoscopy.nix
|
||||
./monitoring
|
||||
./moodle-dl-borsfaye.nix
|
||||
./names.nix
|
||||
./nextcloud.nix
|
||||
./radio-news.nix
|
||||
./radio.nix
|
||||
./retiolum-map.nix
|
||||
./tarot.nix
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
matterbridge = (import (super.fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "nixpkgs";
|
||||
rev = "e45d91ee65db293a172ec506759d1248e40c35f5";
|
||||
sha256 = "03cjs5xcx09lw0djyrx2kfakw7gkg4iqmy9w25azai62im39l30k";
|
||||
}) {}).matterbridge;
|
||||
})
|
||||
];
|
||||
|
||||
services.matterbridge = {
|
||||
enable = true;
|
||||
configPath =
|
||||
|
||||
23
systems/makanek/radio-news.nix
Normal file
23
systems/makanek/radio-news.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) serveHtml;
|
||||
remote = "https://cgit.lassul.us/stockholm";
|
||||
in
|
||||
{
|
||||
services.nginx.virtualHosts."redaktion.r".locations."/".extraConfig = serveHtml <niveum/lib/radio-news.html> pkgs;
|
||||
|
||||
systemd.services.stockholm-history = {
|
||||
startAt = "hourly";
|
||||
script = ''
|
||||
stockholm=$(mktemp -d)
|
||||
trap clean EXIT
|
||||
clean() {
|
||||
rm -rf "$stockholm"
|
||||
}
|
||||
${pkgs.git}/bin/git clone ${remote} "$stockholm"
|
||||
${pkgs.git}/bin/git --git-dir "$stockholm"/.git log --pretty='"%s" by %an, %ar' --since "$(${pkgs.coreutils}/bin/date -I -d "yesterday")" \
|
||||
| ${pkgs.jq}/bin/jq -R '{text: ., from: now | todateiso8601, to: (now + (60 * 60)) | todateiso8601}' \
|
||||
| ${pkgs.curl}/bin/curl -Ssfd @- http://prism.r:7999/
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -45,6 +45,51 @@ let
|
||||
url = "http://www.zeno.org/Lesesaal/M/E-Books";
|
||||
filter = [ { element-by-class = "zenoCOMain"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Arnshaugk Neuerscheinungen";
|
||||
url = "http://www.arnshaugk.de/index.php";
|
||||
filter = [ "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Carolina Welslau";
|
||||
url = "https://carolinawelslau.de/";
|
||||
filter = [ { element-by-id = "main"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Lisa Littmann";
|
||||
url = "https://lisalittmann.de/";
|
||||
filter = [ { element-by-id = "main"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Lisa Littmann: Projects";
|
||||
url = "https://lisalittmann.de/projects/";
|
||||
filter = [ { element-by-id = "main"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Lisa Littmann: Archive";
|
||||
url = "https://lisalittmann.de/archive/";
|
||||
filter = [ { element-by-id = "main"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "WarpGrid: Idiomarium";
|
||||
url = "https://warpgrid.de/idiomarium/";
|
||||
filter = [ { element-by-id = "site-content"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "WarpGrid: Futurism";
|
||||
url = "https://warpgrid.de/futurism/";
|
||||
filter = [ { element-by-id = "site-content"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "WarpGrid: Imagiary";
|
||||
url = "https://warpgrid.de/imagiary/";
|
||||
filter = [ { element-by-id = "site-content"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "WarpGrid: Cook";
|
||||
url = "https://warpgrid.de/alchemy/";
|
||||
filter = [ { element-by-id = "site-content"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Indogermanische Forschungen";
|
||||
url = "https://www.degruyter.com/journal/key/INDO/html";
|
||||
|
||||
@@ -52,7 +52,7 @@ in {
|
||||
address = "irc.hackint.org/6697";
|
||||
ipv6 = true;
|
||||
ssl = true;
|
||||
autojoin = [ "#krebs" "#nixos" "#the_playlist" ];
|
||||
autojoin = [ "#krebs" "#hsmr" "#nixos" "#the_playlist" "#flipdot-berlin" "#hackint" ];
|
||||
sasl_mechanism = "plain";
|
||||
sasl_username = nick;
|
||||
sasl_password = lib.strings.fileContents <system-secrets/irc/hackint>;
|
||||
@@ -75,7 +75,7 @@ in {
|
||||
"/msg nickserv identify ${lib.strings.fileContents <system-secrets/irc/oftc>}"
|
||||
"/msg nickserv set cloak on"
|
||||
];
|
||||
autojoin = [ "#osm" "#osm-de" "#home-manager" ];
|
||||
autojoin = [ "#home-manager" ];
|
||||
};
|
||||
retiolum = {
|
||||
autoconnect = true;
|
||||
|
||||
@@ -17,7 +17,7 @@ in
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "restic-niveum" ''
|
||||
exec ${pkgs.util-linux}/bin/runuser -u restic -g restic ${pkgs.restic}/bin/restic -r ${toString dataDir} -p ${<secrets/restic/password>} "$@"
|
||||
exec ${pkgs.util-linux}/bin/runuser -u restic -g restic -- ${pkgs.restic}/bin/restic -r ${toString dataDir} -p ${<secrets/restic/password>} "$@"
|
||||
'')
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user