mirror of
https://github.com/kmein/niveum
synced 2026-03-20 20:01:08 +01:00
Compare commits
153 Commits
dc90c4c6ab
...
flakes-2
| Author | SHA1 | Date | |
|---|---|---|---|
| 248ebea28e | |||
| 2a98e680c2 | |||
| d5087c40b2 | |||
| 23fb65ce1e | |||
| c49a5a4187 | |||
| 42df2c032e | |||
| 86d6943dd2 | |||
| 6f10cd277d | |||
| 869c6e6a08 | |||
| 5b131a5a30 | |||
| 0423429e02 | |||
| f451cc5028 | |||
| 8f9e8db71e | |||
| 81e6b5c9f6 | |||
| 50d8788088 | |||
| 805b46ffb1 | |||
| bc9217ba3e | |||
| db2ec25bc1 | |||
| 33b960143b | |||
| f02225d1e9 | |||
| 9c2e2df05a | |||
| aaeef41f55 | |||
| 0787da719e | |||
| e225a7d451 | |||
| 9d3b29add2 | |||
| 5792224240 | |||
| ecadc12c9f | |||
| 4ecc34b63e | |||
| 48e2be7427 | |||
| 296a3a9c9f | |||
| 0136215a4a | |||
| dd8a885e81 | |||
| e755ee06e2 | |||
| 5ade0a7011 | |||
| bed0795a04 | |||
| 31d59aba6a | |||
| 08c04462a7 | |||
| 7d00a2e896 | |||
| 1027a850fb | |||
| 314134d861 | |||
| 143b2f1a06 | |||
| 02cc600c68 | |||
| 25c48354f7 | |||
| 5b2c2c7709 | |||
| e55cc77825 | |||
| 8a45abae35 | |||
| e046c74539 | |||
| 9dae3e2d1a | |||
| 0fea7ba938 | |||
| edcbe19fb2 | |||
| ee573e13fc | |||
| 83d23f8b55 | |||
| addd7077ed | |||
| ec175ef3d7 | |||
| a7a103c853 | |||
| 2105a5a0fe | |||
| d5a71770a6 | |||
| bff6ede4c1 | |||
| 5a82328b37 | |||
| b3871ba6aa | |||
| 9b68ac87d8 | |||
| bbc50f3642 | |||
| fc067a8493 | |||
| 4ac499530d | |||
| 078b3f6183 | |||
| ca0267ce22 | |||
| 10d003371e | |||
| 33da8389f5 | |||
| 707e1f1565 | |||
| 312dd27f02 | |||
| 5a0f6d3035 | |||
| 77bd1116ea | |||
| 8d4362d903 | |||
| bc4e25a42d | |||
| 96627b6f50 | |||
| 6f2a824d8b | |||
| a65a4b28da | |||
| 41f87bdc37 | |||
| 85ab948ccd | |||
| 9f834e742e | |||
| 416d3ab277 | |||
| 82b9bb2a4c | |||
| 82b650bdbf | |||
| 06125303b8 | |||
| c0efacd6ce | |||
| 2aff28c6ed | |||
| e27db27fd8 | |||
| 683bd2f3be | |||
| 01e3cef34f | |||
| f921d3d3b6 | |||
| ffa3f820ce | |||
| 8738cb4a58 | |||
| a2b706e787 | |||
| 22247715a3 | |||
| bdd4bda339 | |||
| 1002fd8b43 | |||
| 1f48644558 | |||
| da95622df1 | |||
| e275c81257 | |||
| bf7d0165b1 | |||
| cb10b423dc | |||
| a93a34e546 | |||
| c7603af4d0 | |||
| dd685afb7c | |||
| 055b4016e6 | |||
| f361d2b877 | |||
| 8b00faf762 | |||
| f7d72e00b6 | |||
| 087c138906 | |||
| bf8f6d8d52 | |||
| fcf2aa4cca | |||
| 48484514bc | |||
| aa359ad986 | |||
| 2432b0bbaa | |||
| 2b754d4a5b | |||
| f38e5c3295 | |||
| f6b4740b73 | |||
| c06fb3f50c | |||
| 4ae2fa4a6a | |||
| 6809db5ccc | |||
| c9fb802c55 | |||
| 2f4505d29b | |||
| b43de46611 | |||
| 3545c37084 | |||
| 043fe3b67b | |||
| f0779c45c3 | |||
| b7a6fda046 | |||
| e431e0bf03 | |||
| ac54cd5eaf | |||
| 4bd5965915 | |||
| f21112465b | |||
| b989684f12 | |||
| beef73daab | |||
| de3fbfd356 | |||
| a1e88e30a7 | |||
| c50698f275 | |||
| 6119c0dbcc | |||
| 7dd5a9e269 | |||
| 2384a4eef5 | |||
| f6ffd477d1 | |||
| 77fc7e4832 | |||
| 76d75048fa | |||
| 71e65461cf | |||
| 6545b016c5 | |||
| 6eff3d831c | |||
| 80abae0daa | |||
| bbdef3a8ed | |||
| 1f28eb000d | |||
| fb7a295310 | |||
| ad84e0445d | |||
| faac180148 | |||
| 2691608f8c | |||
| 9678ba7b28 |
46
.bin/bvg.sh
Executable file
46
.bin/bvg.sh
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
interesting="U6 N6 140 M46 184 N84"
|
||||
|
||||
curl -sSL 'https://www.bvg.de/disruption-reports/q' \
|
||||
--data-raw '{"variables":{},"query":"{
|
||||
allDisruptions {
|
||||
disruptions {
|
||||
meldungsId
|
||||
linie
|
||||
verkehrsmittel
|
||||
__typename
|
||||
... on Traffic {
|
||||
datum
|
||||
gueltigVonDatum
|
||||
gueltigVonZeit
|
||||
gueltigBisDatum
|
||||
gueltigBisZeit
|
||||
richtungName
|
||||
richtungHafasId
|
||||
beginnAbschnittName
|
||||
beginnAbschnittHafasId
|
||||
endeAbschnittName
|
||||
endeAbschnittHafasId
|
||||
textIntUrsache
|
||||
sev
|
||||
textIntAuswirkung
|
||||
umfahrung
|
||||
textWAPSMSUrsache
|
||||
textWAPSMSAuswirkung
|
||||
prioritaet
|
||||
__typename
|
||||
}
|
||||
}
|
||||
__typename
|
||||
}
|
||||
}"}' \
|
||||
| jq --arg interesting "$interesting" '
|
||||
.data.allDisruptions.disruptions
|
||||
| map(select(
|
||||
(.linie as $linie
|
||||
| $interesting
|
||||
| split(" ")
|
||||
| index($linie))
|
||||
and (.["__typename"] == "Traffic")
|
||||
))
|
||||
'
|
||||
14
.bin/csv2json
Executable file
14
.bin/csv2json
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import csv
|
||||
import json
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--delimiter", "-d", default=",", help="CSV field separator")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if __name__ == "__main__":
|
||||
json.dump(list(csv.DictReader(sys.stdin, delimiter=args.delimiter)), sys.stdout)
|
||||
7
.bin/elm-publish-private
Executable file
7
.bin/elm-publish-private
Executable file
@@ -0,0 +1,7 @@
|
||||
#! /usr/bin/env nix-shell
|
||||
#! nix-shell -p "(import <nixpkgs> { overlays = [ (import ~/work/fysiweb/engiadina-pwa/devops/pkgs) ]; }).elm-publish-private"
|
||||
#! nix-shell -i bash
|
||||
|
||||
set -efux
|
||||
|
||||
exec elm-publish-private "$@"
|
||||
24
.bin/json2csv
Executable file
24
.bin/json2csv
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python3
|
||||
import csv
|
||||
import json
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
json_list = json.load(sys.stdin)
|
||||
if not isinstance(json_list, list):
|
||||
print("JSON object is not a list.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
if len(json_list) == 0:
|
||||
print("JSON list is empty.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
keys = set()
|
||||
for element in json_list:
|
||||
if isinstance(element, dict):
|
||||
keys |= element.keys()
|
||||
else:
|
||||
print("Non-dict element:", element, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
writer = csv.DictWriter(sys.stdout, fieldnames=list(keys))
|
||||
writer.writeheader()
|
||||
for element in json_list:
|
||||
writer.writerow(element)
|
||||
6
.bin/sample-pdf.sh
Executable file
6
.bin/sample-pdf.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
filepath="$(shuf --head-count=1)"
|
||||
pages="$(pdfinfo "$filepath" | awk '/^Pages:/{print $2}')"
|
||||
random_page="$(shuf --input-range="1-$pages" --head-count=1)"
|
||||
zathura --page="$random_page" "$filepath"
|
||||
12
.gitmodules
vendored
12
.gitmodules
vendored
@@ -1,3 +1,9 @@
|
||||
[submodule "submodules/much"]
|
||||
path = submodules/much
|
||||
url = git@github.com:kmein/much
|
||||
[submodule "submodules/menstruation-telegram"]
|
||||
path = submodules/menstruation-telegram
|
||||
url = https://github.com/kmein/menstruation-telegram
|
||||
[submodule "submodules/menstruation-backend"]
|
||||
path = submodules/menstruation-backend
|
||||
url = https://github.com/kmein/menstruation.rs
|
||||
[submodule "submodules/nur-packages"]
|
||||
path = submodules/nur-packages
|
||||
url = git@github.com:kmein/nur-packages.git
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://github.com/nix-community/home-manager.git",
|
||||
"rev": "7d9ba15214004c979d2c8733f8be12ce6502cf8a",
|
||||
"date": "2021-09-14T00:53:31+02:00",
|
||||
"path": "/nix/store/83xlchpzj511c0db0whl99x1ww1apnb5-home-manager",
|
||||
"sha256": "18kmvzinsi9xgm81dk5kyd03m3y5nn125kmbkxf66xasrg13yqdv",
|
||||
"rev": "697cc8c68ed6a606296efbbe9614c32537078756",
|
||||
"date": "2021-12-19T00:59:29+01:00",
|
||||
"path": "/nix/store/fb46bv10azrag2jjlzhil6j11f4x8glw-home-manager",
|
||||
"sha256": "1c8gxm86zshr2zj9dvr02qs7y3m46gqavr6wyv01r09jfd99dxz9",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"date": "2021-03-23T22:47:37+01:00",
|
||||
"path": "/nix/store/mz13xxnil35lwsf90hwnrm2agir7hb51-krops",
|
||||
"sha256": "07mg3iaqjf1w49vmwfchi7b1w55bh7rvsbgicp2m47gnj9alwdb6",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
11
.versions/nix-writers.json
Normal file
11
.versions/nix-writers.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"url": "https://cgit.krebsco.de/nix-writers",
|
||||
"rev": "c528cf970e292790b414b4c1c8c8e9d7e73b2a71",
|
||||
"date": "2019-04-02T20:05:33+02:00",
|
||||
"path": "/nix/store/wm5zhsha1a2iy0d582nlfi7604ayd1vz-nix-writers",
|
||||
"sha256": "0xdivaca1hgbxs79jw9sv4gk4f81vy8kcyaff56hh2dgq2awyvw4",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://github.com/mozilla/nixpkgs-mozilla",
|
||||
"rev": "0510159186dd2ef46e5464484fbdf119393afa58",
|
||||
"date": "2021-08-17T20:37:26+02:00",
|
||||
"path": "/nix/store/w877m55xnigwaqrnadmnh2fkvfdxlan5-nixpkgs-mozilla",
|
||||
"sha256": "1c6r5ldkh71v6acsfhni7f9sxvi7xrqzshcwd8w0hl2rrqyzi58w",
|
||||
"rev": "7c1e8b1dd6ed0043fb4ee0b12b815256b0b9de6f",
|
||||
"date": "2021-12-07T09:28:33-05:00",
|
||||
"path": "/nix/store/pqwcw589i2y2w2116wn3ifl834adjsa0-nixpkgs-mozilla",
|
||||
"sha256": "1a71nfw7d36vplf89fp65vgj3s66np1dc0hqnqgj5gbdnpm1bihl",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://github.com/NixOS/nixpkgs.git",
|
||||
"rev": "aee6aefa230479a9c35f5d9031786c83c2db19a2",
|
||||
"date": "2021-09-14T21:10:26+08:00",
|
||||
"path": "/nix/store/jmxwzpfb24z159rnpa29drgb8z2znjl9-nixpkgs",
|
||||
"sha256": "0vy89mw8nd4jrv3byisynl7a3gsx0fsfpgqpaqz2z7vy60l1mkiq",
|
||||
"rev": "f01adc7b35a8f80e82f3466e6d873b8b9c8f1b28",
|
||||
"date": "2021-12-22T23:05:28+01:00",
|
||||
"path": "/nix/store/zhfrvg77dzpc3hq02v9zv20dfgqwpzk6-nixpkgs",
|
||||
"sha256": "17iyf2iiizi7c1wr71day3wvgalbkkm2zgc9lpy7y42rl4frq9sf",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://github.com/NixOS/nixpkgs.git",
|
||||
"rev": "b3083bc6933eb7fa4ee7bd4802e9f72b56f3e654",
|
||||
"date": "2021-09-13T17:06:43+02:00",
|
||||
"path": "/nix/store/18nwp35nj16hr2li3xbs6vczvw32rp5p-nixpkgs",
|
||||
"sha256": "1cj8jmzgf2rpf8n8yjsh6qsh66rqpyxh8jhn65ll15578fh98gb9",
|
||||
"rev": "9ab7d12287ced0e1b4c03b61c781901f178d9d77",
|
||||
"date": "2021-12-21T10:09:48+01:00",
|
||||
"path": "/nix/store/minmlh0avkwvvc3p7flhpbglp13kr585-nixpkgs",
|
||||
"sha256": "0bbd2pgcyavqn5wgq0xp8p67lha0kv9iqnh49i9w5fb5g29q7i30",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"url": "https://github.com/nix-community/NUR",
|
||||
"rev": "967dc2db6c7666d5d99113c10b3ff288bf515560",
|
||||
"date": "2021-09-14T12:44:44+00:00",
|
||||
"path": "/nix/store/pyxjrg05v2z9zfsqmhg1im7z1sxcya22-NUR",
|
||||
"sha256": "1lqfny81k2kmsamrf745dm4iw1zk0kdr33hcyf37kvcn99vm870z",
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://github.com/krebs/retiolum",
|
||||
"rev": "5384cff550036aa3581f8c6f851392329f28ffe8",
|
||||
"date": "2021-09-19T09:32:14+02:00",
|
||||
"path": "/nix/store/izzhb6p76h96zmlz5xdxa1xrpixhbk4s-retiolum",
|
||||
"sha256": "07318jnkb8zycyi43fydrmrsrbq9ajhb2nnaahj1bxg77pb4wj7a",
|
||||
"rev": "b72b0a987767b587c79cba8499b5114d69fceeef",
|
||||
"date": "2021-12-28T19:46:45+00:00",
|
||||
"path": "/nix/store/kyaqwf89v6id9mda92x4b0hf778j987x-retiolum",
|
||||
"sha256": "19hjzzlfk1m9ign33w4ppqgmg23v7c6k8l0fm7f33spq8982w7rb",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{
|
||||
"url": "https://cgit.krebsco.de/stockholm",
|
||||
"rev": "20e358043546482acfa8c6134f095c1a64ef144d",
|
||||
"date": "2021-08-31T20:06:03+02:00",
|
||||
"path": "/nix/store/a03pd46kdsfy9d2q9xlzapnzkj4vf20r-stockholm",
|
||||
"sha256": "0cwl36zc68qjwcahjgc3vn9qpnyi351m6ngnq21wlncn0k2gqw4a",
|
||||
"url": "https://cgit.lassul.us/stockholm",
|
||||
"rev": "576c05cf3a0ceddefa29c2d0073108177c3cfa52",
|
||||
"date": "2021-12-22T13:59:46+01:00",
|
||||
"path": "/nix/store/yx1j5pardgd9114f0cf3c4xjfq6r4yfv-stockholm",
|
||||
"sha256": "18napi4k8i2iizrismlp9ha3ga6c3n2dvrhijy59kl1jxqrsaq9l",
|
||||
"fetchLFS": false,
|
||||
"fetchSubmodules": false,
|
||||
"deepClone": false,
|
||||
"leaveDotGit": false
|
||||
|
||||
10
README.md
Normal file
10
README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# niveum
|
||||
|
||||
> [nĭvĕus](https://logeion.uchicago.edu/niveus), a, um, adj. [nix], _of_ or _from snow, snowy, snow-_ (poet.)
|
||||
>
|
||||
> 1. Lit.: aggeribus niveis informis, Verg. G. 3, 354: aqua, _cooled with snow_, Mart. 12, 17, 6; cf. id. 14, 104 and 117: mons, _covered with snow_, Cat. 64, 240.—
|
||||
>
|
||||
> 2. Transf., _snow-white, snowy_ (mostly poet.): a similitudine sic: Corpore niveum candorem, aspectu igneum ardorem assequebatur, Auct. Her. 4, 33, 44: lacerti, Verg. A. 8, 387: lac, id. E. 2, 20: hanc si capite niveae agnae exorari judicas, Sen. Q. N. 2, 36: Briseis niveo colore, Hor. C. 2, 4, 3: vestis, Ov. M. 10, 432: candidior nivei folio, Galatea, ligustri, id. ib. 13, 789: dens, id. H. 18, 18: quā notam duxit niveus videri, Hor. C. 4, 2, 59: panis, Juv. 5, 70: flumen, _clear, pellucid_, Sen. Hippol. 504: undae, Mart. 7, 32, 11: tribuni, _clothed in white togas_, Calp. Ecl. 7, 29; so, Quirites, Juv. 10, 45.
|
||||
|
||||
## Pressestimmen
|
||||
> das ist ja pure poesie —[xkey](https://github.com/riotbib)
|
||||
@@ -5,7 +5,7 @@
|
||||
"beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" {
|
||||
directory = "~/cloud/syncthing/music";
|
||||
library = "~/cloud/syncthing/common/music.db";
|
||||
plugins = lib.concatStringsSep " " [ "fetchart" "lastgenre" "lyrics" ];
|
||||
plugins = toString [ "fetchart" "lastgenre" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
57
configs/bvg.nix
Normal file
57
configs/bvg.nix
Normal file
@@ -0,0 +1,57 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) serveHtml;
|
||||
stations = [
|
||||
900068204 # A/M
|
||||
900068302 # KAS
|
||||
900068203 # B-P
|
||||
];
|
||||
fahrplan = pkgs.writeText "fahrplan.html" ''
|
||||
<!DOCTYPE html>
|
||||
<title>Fahrplan</title>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/x-icon"
|
||||
href="https://mobil.bvg.de/Fahrinfo/img/ua_xhtml/logo.gif"
|
||||
/>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
--bvg-yellow: #f0d722;
|
||||
}
|
||||
#fahrplan {
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
}
|
||||
#fahrplan iframe {
|
||||
flex-grow: 1;
|
||||
border: none;
|
||||
}
|
||||
#fahrplan iframe + iframe {
|
||||
border-left: 2px solid var(--bvg-yellow);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="fahrplan">
|
||||
${lib.concatMapStrings (station: ''
|
||||
<iframe scrolling="no" src="https://mobil.bvg.de/Fahrinfo/bin/stboard.bin/dox?ld=0.1&input=${toString station}&boardType=depRT&start=yes"></iframe>
|
||||
'') stations}
|
||||
</div>
|
||||
</body>
|
||||
'';
|
||||
in
|
||||
{
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."bvg.kmein.r" = {
|
||||
locations."/".extraConfig = serveHtml fahrplan pkgs;
|
||||
};
|
||||
}
|
||||
@@ -1,12 +1,4 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
imports = [
|
||||
<niveum/modules/dropbox.nix>
|
||||
];
|
||||
|
||||
niveum = {
|
||||
dropbox.enable = false;
|
||||
};
|
||||
|
||||
system.activationScripts.home-symlinks = ''
|
||||
ln -sfn ${config.users.users.me.home}/cloud/syncthing/common/mahlzeit ${config.users.users.me.home}/mahlzeit
|
||||
ln -sfn ${config.users.users.me.home}/cloud/Seafile/Wiki ${config.users.users.me.home}/notes
|
||||
@@ -17,6 +9,17 @@
|
||||
services.nextcloud-client.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "book" ''
|
||||
set -efu
|
||||
book="$({
|
||||
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f
|
||||
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/Seafile/Books -type f
|
||||
} | ${pkgs.fzf}/bin/fzf)"
|
||||
${pkgs.zathura}/bin/zathura "$book"
|
||||
'')
|
||||
];
|
||||
|
||||
fileSystems."/media/moodle" = {
|
||||
device = "zaatar.r:/moodle";
|
||||
fsType = "nfs";
|
||||
@@ -33,21 +36,19 @@
|
||||
openDefaultPorts = true;
|
||||
configDir = "/home/kfm/.config/syncthing";
|
||||
dataDir = "/home/kfm/.config/syncthing";
|
||||
declarative = rec {
|
||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||
key = toString <system-secrets/syncthing/key.pem>;
|
||||
inherit ((import <niveum/lib>).syncthing) devices;
|
||||
folders =
|
||||
let cloud-dir = "${config.users.users.me.home}/cloud";
|
||||
in {
|
||||
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ];
|
||||
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ];
|
||||
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ];
|
||||
"${cloud-dir}/syncthing/music" = {
|
||||
devices = [ "kabsa" "manakish" "heym" "zaatar" ];
|
||||
id = "music";
|
||||
};
|
||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||
key = toString <system-secrets/syncthing/key.pem>;
|
||||
inherit ((import ../lib).syncthing) devices;
|
||||
folders =
|
||||
let cloud-dir = "${config.users.users.me.home}/cloud";
|
||||
in {
|
||||
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ];
|
||||
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ];
|
||||
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ];
|
||||
"${cloud-dir}/syncthing/music" = {
|
||||
devices = [ "kabsa" "manakish" "heym" "zaatar" ];
|
||||
id = "music";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
37
configs/copyq.nix
Normal file
37
configs/copyq.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
copyqConfig = pkgs.writers.writeDash "copyq-config" ''
|
||||
${pkgs.copyq}/bin/copyq config check_clipboard true
|
||||
${pkgs.copyq}/bin/copyq config check_selection false
|
||||
${pkgs.copyq}/bin/copyq config copy_clipboard true
|
||||
${pkgs.copyq}/bin/copyq config copy_selection false
|
||||
|
||||
${pkgs.copyq}/bin/copyq config activate_closes true
|
||||
${pkgs.copyq}/bin/copyq config clipboard_notification_lines 0
|
||||
${pkgs.copyq}/bin/copyq config clipboard_tab \&clipboard
|
||||
${pkgs.copyq}/bin/copyq config disable_tray false
|
||||
${pkgs.copyq}/bin/copyq config hide_tabs false
|
||||
${pkgs.copyq}/bin/copyq config hide_toolbar false
|
||||
${pkgs.copyq}/bin/copyq config item_popup_interval true
|
||||
${pkgs.copyq}/bin/copyq config maxitems 1000
|
||||
${pkgs.copyq}/bin/copyq config move true
|
||||
${pkgs.copyq}/bin/copyq config text_wrap true
|
||||
'';
|
||||
in {
|
||||
environment.systemPackages = [ pkgs.copyq ];
|
||||
|
||||
systemd.user.services.copyq = {
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
environment = {
|
||||
DISPLAY = ":${toString config.services.xserver.display}";
|
||||
};
|
||||
serviceConfig = {
|
||||
SyslogIdentifier = "copyq";
|
||||
ExecStart = "${pkgs.copyq}/bin/copyq";
|
||||
ExecStartPost = copyqConfig;
|
||||
Restart = "always";
|
||||
RestartSec = "15s";
|
||||
StartLimitBurst = 0;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
{ pkgs, lib, config, options, ... }:
|
||||
let
|
||||
inherit (lib.strings) makeBinPath;
|
||||
inherit (import <niveum/lib>) localAddresses kieran;
|
||||
inherit (import ../lib) localAddresses kieran;
|
||||
in {
|
||||
imports = [
|
||||
<home-manager/nixos>
|
||||
<niveum/modules/system-dependent.nix>
|
||||
../modules/system-dependent.nix
|
||||
{
|
||||
boot.supportedFilesystems = [ "ntfs" ];
|
||||
}
|
||||
@@ -15,13 +14,11 @@ in {
|
||||
"nixpkgs-overlays=${toString ../overlays}"
|
||||
];
|
||||
}
|
||||
{ services.dbus.packages = [ pkgs.gnome3.dconf ]; }
|
||||
{
|
||||
nixpkgs = {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
packageOverrides = pkgs: {
|
||||
nur = import <nur> { inherit pkgs; };
|
||||
writeDashBin = pkgs.writers.writeDashBin;
|
||||
writeDash = pkgs.writers.writeDash;
|
||||
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
|
||||
@@ -31,11 +28,8 @@ in {
|
||||
};
|
||||
overlays = [
|
||||
(self: super: {
|
||||
scripts = import <niveum/packages/scripts> { pkgs = super; lib = super.lib; };
|
||||
scripts = import ../packages/scripts { pkgs = super; lib = super.lib; };
|
||||
})
|
||||
(import <stockholm/krebs/5pkgs/haskell>)
|
||||
(import <stockholm/submodules/nix-writers/pkgs>)
|
||||
(import <stockholm/krebs/5pkgs/override>)
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -69,6 +63,7 @@ in {
|
||||
};
|
||||
|
||||
home-manager.users.me.xdg.enable = true;
|
||||
home-manager.users.me.dconf.enable = false;
|
||||
}
|
||||
{
|
||||
sound.enable = true;
|
||||
@@ -142,7 +137,6 @@ in {
|
||||
};
|
||||
}
|
||||
{ i18n.defaultLocale = "en_GB.UTF-8"; }
|
||||
{ services.illum.enable = true; }
|
||||
{
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
@@ -163,8 +157,16 @@ in {
|
||||
}
|
||||
{
|
||||
security.wrappers = {
|
||||
pmount.source = "${pkgs.pmount}/bin/pmount";
|
||||
pumount.source = "${pkgs.pmount}/bin/pumount";
|
||||
pmount = {
|
||||
owner = "root";
|
||||
group = "users";
|
||||
source = "${pkgs.pmount}/bin/pmount";
|
||||
};
|
||||
pumount = {
|
||||
owner = "root";
|
||||
group = "users";
|
||||
source = "${pkgs.pmount}/bin/pumount";
|
||||
};
|
||||
};
|
||||
}
|
||||
{ programs.command-not-found.enable = true; }
|
||||
@@ -198,12 +200,11 @@ in {
|
||||
./ccc.nix
|
||||
# ./kleiter.nix
|
||||
./khal.nix
|
||||
./engiadina.nix
|
||||
./chromium.nix
|
||||
./cloud.nix
|
||||
./copyq.nix
|
||||
./compton.nix
|
||||
./direnv.nix
|
||||
./distrobump.nix
|
||||
./docker.nix
|
||||
./dunst.nix
|
||||
./flix.nix
|
||||
@@ -215,21 +216,20 @@ in {
|
||||
./htop.nix
|
||||
./hu-berlin.nix
|
||||
./i3.nix
|
||||
./keybase.nix
|
||||
./keyboard.nix
|
||||
./mail/client.nix
|
||||
./lb.nix
|
||||
./mpv.nix
|
||||
./mime.nix
|
||||
./nano.nix
|
||||
./neovim.nix
|
||||
./nix.nix
|
||||
./neomutt.nix
|
||||
./newsboat.nix
|
||||
./flameshot-once.nix
|
||||
./packages
|
||||
./power-action.nix
|
||||
# ./power-action.nix
|
||||
./printing.nix
|
||||
./openweathermap.nix
|
||||
./wallpaper.nix
|
||||
# ./wallpaper.nix
|
||||
./redshift.nix
|
||||
./retiolum.nix
|
||||
./rofi.nix
|
||||
|
||||
@@ -11,8 +11,7 @@ let
|
||||
cat > shell.nix <<'EOF'
|
||||
{ pkgs ? import <nixpkgs> {} }:
|
||||
pkgs.mkShell {
|
||||
buildInputs = with pkgs; [];
|
||||
shellHook = "export HISTFILE=''${toString ./.history}";
|
||||
buildInputs = [];
|
||||
}
|
||||
EOF
|
||||
''${EDITOR:-vim} shell.nix
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{ lib, config, pkgs, ... }: {
|
||||
imports = [
|
||||
(import <stockholm/makefu/3modules/bump-distrowatch.nix> {
|
||||
inherit lib config;
|
||||
pkgs = pkgs // { writeDash = pkgs.writers.writeDash; };
|
||||
})
|
||||
];
|
||||
|
||||
makefu.distrobump.enable = false;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) defaultApplications colours theme;
|
||||
inherit (import ../lib) defaultApplications colours theme;
|
||||
in {
|
||||
home-manager.users.me.services.dunst = {
|
||||
enable = true;
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) tmpfilesConfig;
|
||||
cdnRoot = "/var/lib/engiadina";
|
||||
in
|
||||
{
|
||||
imports = [ <stockholm/krebs/3modules/permown.nix> ];
|
||||
|
||||
krebs.permown.${cdnRoot} = {
|
||||
owner = config.users.users.me.name;
|
||||
group = "users";
|
||||
umask = "0002";
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts.default = {
|
||||
root = cdnRoot;
|
||||
listen = [{
|
||||
addr = "0.0.0.0";
|
||||
port = 3333;
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
environment.shellAliases = {
|
||||
engiadina-watch = "${pkgs.findutils}/bin/find extra-src src | ${pkgs.entr}/bin/entr -s 'build-component && ${pkgs.rsync}/bin/rsync -avu dist/*.js ${cdnRoot}/'";
|
||||
engiadina-edit = "$EDITOR ${cdnRoot}/index.html";
|
||||
};
|
||||
}
|
||||
@@ -1,26 +1,24 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
home-manager.users.me = {
|
||||
services.flameshot.enable = true;
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) defaultApplications;
|
||||
flameshot-once = pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {};
|
||||
in {
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
write =
|
||||
super.callPackage <stockholm/krebs/5pkgs/simple/xwaitforwindow.nix> { };
|
||||
})
|
||||
];
|
||||
|
||||
xdg.configFile."flameshot/flameshot.ini".source = (pkgs.formats.ini {}).generate "flameshot.ini" {
|
||||
General = {
|
||||
disabledTrayIcon = true;
|
||||
checkForUpdates = false;
|
||||
contrastOpacity = 188;
|
||||
savePath = "/tmp";
|
||||
savePathFixed = true;
|
||||
drawThickness = 0;
|
||||
showStartupLaunchMessage = false;
|
||||
filenamePattern = "shot_%F_%T";
|
||||
environment.systemPackages = [
|
||||
(flameshot-once.override {
|
||||
config.imgur = {
|
||||
enable = true;
|
||||
createUrl = "http://p.r/image";
|
||||
deleteUrl = "http://p.r/image/delete/%1";
|
||||
xdg-open.browser = (defaultApplications pkgs).browser;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services.flameshot.Unit.Requires = lib.mkForce [];
|
||||
systemd.user.services.flameshot.Environment = {
|
||||
# IMGUR_CREATE_URL = "https://p.krebsco.de/image";
|
||||
# IMGUR_DELETE_URL = "https://p.krebsco.de/image/delete/%1";
|
||||
PATH = "${config.home-manager.users.me.home.profileDirectory}/bin";
|
||||
};
|
||||
};
|
||||
config.timeout = 1000;
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
@@ -51,11 +51,11 @@ in {
|
||||
isSystemUser = true;
|
||||
createHome = true;
|
||||
home = cacheLocation;
|
||||
extraGroups = [ flixGroup ];
|
||||
group = flixGroup;
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writeDashBin "mpv-simpsons" ''
|
||||
(pkgs.writers.writeDashBin "mpv-simpsons" ''
|
||||
set -efu
|
||||
cd "${flixLocation}/download"
|
||||
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
|
||||
@@ -65,7 +65,7 @@ in {
|
||||
| shuf \
|
||||
| ${pkgs.findutils}/bin/xargs -d '\n' ${pkgs.mpv}/bin/mpv
|
||||
'')
|
||||
(pkgs.writeDashBin "flixmenu" ''
|
||||
(pkgs.writers.writeDashBin "flixmenu" ''
|
||||
set -efu
|
||||
cd "${flixLocation}/download"
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
enableDefaultFonts = true;
|
||||
fontDir.enable = true;
|
||||
fonts = with pkgs; [
|
||||
alegreya
|
||||
alegreya-sans
|
||||
corefonts
|
||||
eb-garamond
|
||||
fira
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) kieran ignorePaths;
|
||||
inherit (import ../lib) kieran ignorePaths;
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
services.gitea = {
|
||||
enable = true;
|
||||
disableRegistration = true;
|
||||
rootUrl = "https://code.xn--kiern-0qa.de";
|
||||
appName = "code.kierán.de";
|
||||
rootUrl = "https://code.kmein.de";
|
||||
appName = "code.kmein.de";
|
||||
};
|
||||
services.nginx.virtualHosts."code.xn--kiern-0qa.de" = {
|
||||
services.nginx.virtualHosts."code.kmein.de" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/".extraConfig = "proxy_pass http://localhost:3000;";
|
||||
|
||||
@@ -1,25 +1,34 @@
|
||||
{ pkgs, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
backupLocation = "/var/lib/codimd-backup";
|
||||
stateLocation = "/var/lib/codimd/state.sqlite";
|
||||
nixpkgs-unstable = import <nixpkgs-unstable> {};
|
||||
domain = "pad.kmein.de";
|
||||
in
|
||||
{
|
||||
imports = [ <stockholm/krebs/3modules/permown.nix> ];
|
||||
|
||||
services.nginx.virtualHosts."pad.xn--kiern-0qa.de" = {
|
||||
services.nginx.virtualHosts.${domain} = {
|
||||
enableACME = true;
|
||||
addSSL = true;
|
||||
locations."/".extraConfig = ''
|
||||
client_max_body_size 4G;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:3091;
|
||||
'';
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "https://localhost:3091";
|
||||
proxyWebsockets = true;
|
||||
};
|
||||
};
|
||||
|
||||
security.acme.certs.${domain}.group = "hedgecert";
|
||||
users.groups.hedgecert.members = [ "codimd" "nginx" ];
|
||||
|
||||
security.dhparams = {
|
||||
enable = true;
|
||||
params.hedgedoc = {};
|
||||
};
|
||||
|
||||
services.hedgedoc = {
|
||||
enable = true;
|
||||
configuration = {
|
||||
allowOrigin = [ domain ];
|
||||
allowAnonymous = true;
|
||||
allowGravatar = false;
|
||||
allowFreeURL = true;
|
||||
@@ -28,6 +37,13 @@ in
|
||||
storage = stateLocation;
|
||||
};
|
||||
port = 3091;
|
||||
domain = domain;
|
||||
useSSL = true;
|
||||
protocolUseSSL = true;
|
||||
sslCAPath = [ "/etc/ssl/certs/ca-certificates.crt" ];
|
||||
sslCertPath = "/var/lib/acme/${domain}/cert.pem";
|
||||
sslKeyPath = "/var/lib/acme/${domain}/key.pem";
|
||||
dhParamPath = config.security.dhparams.params.hedgedoc.path;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ config, pkgs, ... }: {
|
||||
imports = [ <niveum/modules/hledger.nix> ];
|
||||
imports = [ ../modules/hledger.nix ];
|
||||
|
||||
niveum.hledger = {
|
||||
enable = true;
|
||||
|
||||
@@ -32,6 +32,16 @@ in {
|
||||
options = hu-berlin-cifs-options;
|
||||
};
|
||||
|
||||
|
||||
home-manager.users.me.programs.ssh = {
|
||||
matchBlocks = {
|
||||
"alew.hu-berlin.de" = {
|
||||
user = "centos";
|
||||
hostname = "141.20.187.219";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "hu-ip" ''
|
||||
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
|
||||
@@ -49,7 +59,7 @@ in {
|
||||
];
|
||||
|
||||
systemd.services.hu-vpn = {
|
||||
enable = false;
|
||||
enable = true;
|
||||
wants = [ "network-online.target" ];
|
||||
conflicts = [ "openvpn-hu-berlin.service" ];
|
||||
script = ''
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{ inputs, config, pkgs, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) defaultApplications colours;
|
||||
klem = import <niveum/packages/scripts/klem.nix> {
|
||||
inherit (import ../lib) defaultApplications colours;
|
||||
klem = import ../packages/scripts/klem.nix {
|
||||
inherit pkgs lib;
|
||||
config.scripts = {
|
||||
"p.r" = pkgs.writers.writeDash "p.r" ''
|
||||
@@ -146,7 +146,7 @@ in {
|
||||
};
|
||||
};
|
||||
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${
|
||||
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> {
|
||||
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import ../lib/i3status-rust.nix {
|
||||
inherit (config.niveum) batteryName wirelessInterface;
|
||||
inherit colours;
|
||||
inherit pkgs;
|
||||
@@ -213,7 +213,11 @@ in {
|
||||
}
|
||||
|
||||
cd ~/notes
|
||||
note_file=$(find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2 | dmenu -i)
|
||||
note_file=$({
|
||||
echo diary/$(date -I).md
|
||||
echo diary/$(date -I -d yesterday).md
|
||||
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
|
||||
} | dmenu -i)
|
||||
if test "$note_file"
|
||||
then
|
||||
i3-sensible-terminal -e "$EDITOR" "$note_file"
|
||||
@@ -229,8 +233,7 @@ in {
|
||||
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
|
||||
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
|
||||
"${modifier}+F12" = "exec ${klem}/bin/klem";
|
||||
|
||||
"Print" = "exec flameshot gui -p /tmp";
|
||||
"Print" = "exec flameshot-once";
|
||||
"XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5";
|
||||
"XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t";
|
||||
"XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5";
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
{ config, ... }: {
|
||||
services.keybase.enable = true;
|
||||
|
||||
services.kbfs = {
|
||||
enable = true;
|
||||
mountPoint = "%h/cloud/keybase";
|
||||
};
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
let commaSep = builtins.concatStringsSep ",";
|
||||
in {
|
||||
services.xserver = {
|
||||
layout = commaSep [ "de" "gr" ];
|
||||
xkbVariant = commaSep [ "T3" "polytonic" ];
|
||||
layout = commaSep [ "de" "gr" "ru" ];
|
||||
xkbVariant = commaSep [ "T3" "polytonic" "phonetic" ];
|
||||
xkbOptions =
|
||||
commaSep [ "compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle" ];
|
||||
libinput.enable = true;
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
davHome = "~/.local/share/dav";
|
||||
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
|
||||
username = "kieran";
|
||||
password = lib.fileContents <secrets/nextcloud/password>;
|
||||
kmeinCloud = {
|
||||
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
|
||||
username = "kieran";
|
||||
password = lib.fileContents <secrets/nextcloud/password>;
|
||||
};
|
||||
fysiCloud = {
|
||||
davEndpoint = "https://nextcloud.fysi.dev/remote.php/dav";
|
||||
username = "kmein";
|
||||
password = lib.fileContents <secrets/nextcloud-fysi/password>;
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
|
||||
@@ -17,6 +24,10 @@ in
|
||||
${pkgs.vdirsyncer}/bin/vdirsyncer sync
|
||||
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
};
|
||||
|
||||
home-manager.users.me = {
|
||||
@@ -48,26 +59,48 @@ in
|
||||
skip_unparsable = no
|
||||
'';
|
||||
|
||||
"todoman/todoman.conf".text = ''
|
||||
[main]
|
||||
path = ${davHome}/calendar/*
|
||||
date_format = %Y-%m-%d
|
||||
time_format = %H:%M
|
||||
"todoman/config.py".text = ''
|
||||
path = "${davHome}/calendar/*"
|
||||
date_format = "%Y-%m-%d"
|
||||
time_format = "%H:%M"
|
||||
default_due = 0
|
||||
default_list = Personal
|
||||
default_list = "Personal"
|
||||
startable = True
|
||||
'';
|
||||
|
||||
"khal/config".text = ''
|
||||
[calendars]
|
||||
|
||||
[[kalender_local]]
|
||||
path = ${davHome}/calendar/*
|
||||
type = discover
|
||||
[[alew]]
|
||||
path = ${davHome}/calendar/alew
|
||||
color = "light gray"
|
||||
|
||||
[[personal]]
|
||||
path = ${davHome}/calendar/personal
|
||||
color = "light cyan"
|
||||
|
||||
[[uni]]
|
||||
path = ${davHome}/calendar/uni-1
|
||||
color = "yellow"
|
||||
|
||||
[[fysi]]
|
||||
path = ${davHome}/calendar/fysi-1
|
||||
color = "light magenta"
|
||||
|
||||
[[fysi_team]]
|
||||
path = ${davHome}/calendar/personal_shared_by_fdf
|
||||
color = "light red"
|
||||
|
||||
[[birthdays]]
|
||||
path = ${davHome}/contacts/contacts
|
||||
type = birthdays
|
||||
color = "light green"
|
||||
|
||||
[default]
|
||||
highlight_event_days = True
|
||||
timedelta = 5d
|
||||
print_new = path
|
||||
default_calendar = personal
|
||||
|
||||
[locale]
|
||||
timeformat = %H:%M
|
||||
@@ -93,7 +126,13 @@ in
|
||||
[pair kalender]
|
||||
a = "kalender_local"
|
||||
b = "kalender_cloud"
|
||||
collections = ["from a", "from b"]
|
||||
collections = ["personal", "alew", "uni-1"]
|
||||
conflict_resolution = "b wins"
|
||||
|
||||
[pair fysi]
|
||||
a = "kalender_local"
|
||||
b = "fysi_cloud"
|
||||
collections = ["fysi-1", "personal_shared_by_fdf"]
|
||||
conflict_resolution = "b wins"
|
||||
|
||||
[storage kontakte_local]
|
||||
@@ -108,15 +147,21 @@ in
|
||||
|
||||
[storage kontakte_cloud]
|
||||
type = "carddav"
|
||||
url = "${davEndpoint}/addressbooks/users/${username}/"
|
||||
username = "${username}"
|
||||
password = "${password}"
|
||||
url = "${kmeinCloud.davEndpoint}/addressbooks/users/${kmeinCloud.username}/"
|
||||
username = "${kmeinCloud.username}"
|
||||
password = "${kmeinCloud.password}"
|
||||
|
||||
[storage kalender_cloud]
|
||||
type = "caldav"
|
||||
url = "${davEndpoint}/calendars/${username}/"
|
||||
username = "${username}"
|
||||
password = "${password}"
|
||||
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
|
||||
username = "${kmeinCloud.username}"
|
||||
password = "${kmeinCloud.password}"
|
||||
|
||||
[storage fysi_cloud]
|
||||
type = "caldav"
|
||||
url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/"
|
||||
username = "${fysiCloud.username}"
|
||||
password = "${fysiCloud.password}"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
27
configs/lb.nix
Normal file
27
configs/lb.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
nixpkgs-unstable = import <nixpkgs-unstable> {};
|
||||
in
|
||||
{
|
||||
systemd.services.lb-subscription = {
|
||||
enable = true;
|
||||
wants = [ "network-online.target" ];
|
||||
startAt = "weekly";
|
||||
serviceConfig = {
|
||||
user = "kfm";
|
||||
WorkingDirectory = "/home/kfm/cloud/Seafile/Books/Germanistik/LB";
|
||||
};
|
||||
script = ''
|
||||
first_year=2019
|
||||
for year in $(${pkgs.coreutils}/bin/seq "$first_year" "$(date +%Y)"); do
|
||||
${pkgs.curl}/bin/curl -sSL "https://www.literarische-blaetter.de/jahrgang-$year/" \
|
||||
| ${nixpkgs-unstable.htmlq}/bin/htmlq --attribute href 'ul.slides a' \
|
||||
| while read -r month; do
|
||||
${pkgs.curl}/bin/curl -sSL "$month" \
|
||||
| ${nixpkgs-unstable.htmlq}/bin/htmlq --attribute src iframe \
|
||||
| ${pkgs.gnused}/bin/sed 's/.*?pdf=//;s/?wp-hosted.*//'
|
||||
done
|
||||
done | ${pkgs.findutils}/bin/xargs ${pkgs.wget}/bin/wget --no-clobber
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1,145 +0,0 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) kieran;
|
||||
|
||||
enableDefaults = lib.recursiveUpdate {
|
||||
mbsync = {
|
||||
enable = true;
|
||||
create = "both";
|
||||
expunge = "both";
|
||||
};
|
||||
msmtp.enable = true;
|
||||
notmuch.enable = true;
|
||||
};
|
||||
|
||||
settings = {
|
||||
fastmail = {
|
||||
smtp = {
|
||||
host = "smtp.fastmail.com";
|
||||
port = 465;
|
||||
tls.enable = true;
|
||||
};
|
||||
imap = {
|
||||
host = "imap.fastmail.com";
|
||||
port = 993;
|
||||
tls.enable = true;
|
||||
};
|
||||
};
|
||||
cock = {
|
||||
smtp = {
|
||||
host = "mail.cock.li";
|
||||
port = 587;
|
||||
tls = {
|
||||
enable = true;
|
||||
useStartTls = true;
|
||||
};
|
||||
};
|
||||
imap = {
|
||||
host = "mail.cock.li";
|
||||
port = 993;
|
||||
tls.enable = true;
|
||||
};
|
||||
};
|
||||
posteo = {
|
||||
smtp = {
|
||||
host = "posteo.de";
|
||||
port = 587;
|
||||
tls = {
|
||||
enable = true;
|
||||
useStartTls = true;
|
||||
};
|
||||
};
|
||||
imap = {
|
||||
host = "posteo.de";
|
||||
port = 993;
|
||||
tls.enable = true;
|
||||
};
|
||||
};
|
||||
hu-berlin = {
|
||||
smtp = {
|
||||
host = "mailhost.cms.hu-berlin.de";
|
||||
port = 25;
|
||||
tls = {
|
||||
enable = true;
|
||||
useStartTls = true;
|
||||
};
|
||||
};
|
||||
imap = {
|
||||
host = "mailbox.cms.hu-berlin.de";
|
||||
port = 993;
|
||||
tls.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# turns out we have to escape $ because, if the password contains a $, it will get interpolated as a variable by the msmtp `passwordeval` which does: `bash -c "COMMAND; echo"`
|
||||
pass_ = file: "echo ${lib.escape ["$"] (lib.escapeShellArg (lib.strings.fileContents file))}";
|
||||
in
|
||||
{
|
||||
fysi = enableDefaults {
|
||||
primary = false;
|
||||
userName = "kieran@fysi.tech";
|
||||
address = "kieran@fysi.tech";
|
||||
realName = kieran.name;
|
||||
passwordCommand = pass_ <secrets/mail/fastmail>;
|
||||
inherit (settings.fastmail) imap smtp;
|
||||
};
|
||||
cock = enableDefaults {
|
||||
primary = false;
|
||||
userName = "2210@cock.li";
|
||||
address = "2210@cock.li";
|
||||
realName = "2210";
|
||||
passwordCommand = pass_ <secrets/mail/cock>;
|
||||
inherit (settings.cock) imap smtp;
|
||||
};
|
||||
kieran-gmail = enableDefaults {
|
||||
primary = false;
|
||||
flavor = "gmail.com";
|
||||
address = "kieran.meinhardt@gmail.com";
|
||||
realName = kieran.name;
|
||||
userName = "kieran.meinhardt";
|
||||
passwordCommand = pass_ <secrets/mail/gmail/kieran.meinhardt>;
|
||||
folders = {
|
||||
drafts = "[Gmail]/Entw&APw-rfe";
|
||||
sent = "[Gmail]/Gesendet";
|
||||
trash = "[Gmail]/Papierkorb";
|
||||
};
|
||||
};
|
||||
amroplay = enableDefaults {
|
||||
primary = false;
|
||||
flavor = "gmail.com";
|
||||
address = "amroplay@gmail.com";
|
||||
realName = kieran.name;
|
||||
userName = "amroplay";
|
||||
passwordCommand = pass_ <secrets/mail/gmail/amroplay>;
|
||||
folders = {
|
||||
drafts = "[Gmail]/Drafts";
|
||||
sent = "[Gmail]/Sent Mail";
|
||||
trash = "[Gmail]/Bin";
|
||||
};
|
||||
};
|
||||
posteo = enableDefaults {
|
||||
primary = true;
|
||||
address = "kieran.meinhardt@posteo.net";
|
||||
realName = kieran.name;
|
||||
userName = "kieran.meinhardt@posteo.net";
|
||||
passwordCommand = pass_ <secrets/mail/posteo>;
|
||||
inherit (settings.posteo) imap smtp;
|
||||
};
|
||||
hu-berlin = enableDefaults {
|
||||
primary = false;
|
||||
address = "meinhark@hu-berlin.de";
|
||||
realName = kieran.name;
|
||||
userName = "meinhark";
|
||||
passwordCommand = pass_ <secrets/eduroam/password>;
|
||||
inherit (settings.hu-berlin) imap smtp;
|
||||
};
|
||||
hu-berlin-work = enableDefaults {
|
||||
primary = false;
|
||||
address = "meinhaki@hu-berlin.de";
|
||||
realName = kieran.name;
|
||||
userName = "meinhaki";
|
||||
passwordCommand = pass_ <secrets/mail/meinhaki>;
|
||||
inherit (settings.hu-berlin) imap smtp;
|
||||
};
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) email-sshKey;
|
||||
much =
|
||||
let
|
||||
nixpkgs-much = import (pkgs.fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "nixpkgs";
|
||||
rev = "7c2a362b58a1c2ba72d24aa3869da3b1a91d39e1";
|
||||
sha256 = "0gl4xndyahasa9dv5mi3x9w8s457wl2xh9lcldizcn1irjvkrzs4";
|
||||
}) {
|
||||
overlays = [
|
||||
(import <stockholm/krebs/5pkgs/haskell>)
|
||||
];
|
||||
};
|
||||
much-pkg = pkgs.haskellPackages.callCabal2nix "much" <niveum/submodules/much> {};
|
||||
in nixpkgs-much.haskell.lib.dontHaddock much-pkg;
|
||||
in {
|
||||
environment.variables.NOTMUCH_CONFIG = config.home-manager.users.me.home.sessionVariables.NOTMUCH_CONFIG;
|
||||
|
||||
users.users.me.openssh.authorizedKeys.keys = [ email-sshKey ];
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.notmuch-addrlookup
|
||||
|
||||
pkgs.muchsync
|
||||
|
||||
(pkgs.writers.writeDashBin "mua" ''
|
||||
if [ $# -eq 0 ]; then
|
||||
${much}/bin/much-kmein
|
||||
else
|
||||
${much}/bin/much-kmein -q "$*"
|
||||
fi
|
||||
'')
|
||||
|
||||
(pkgs.writers.writeDashBin "mail-clean" ''
|
||||
${pkgs.notmuch}/bin/notmuch search --output files --format=text0 tag:deleted | ${pkgs.findutils}/bin/xargs -r0 rm
|
||||
${pkgs.notmuch}/bin/notmuch new
|
||||
'')
|
||||
];
|
||||
|
||||
home-manager.users.me = {
|
||||
programs.notmuch = {
|
||||
enable = true;
|
||||
search.excludeTags = [ "deleted" "spam" ];
|
||||
};
|
||||
|
||||
programs.msmtp.enable = true;
|
||||
|
||||
accounts.email.accounts = import ./accounts.nix { inherit lib; };
|
||||
};
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) kieran sshPort;
|
||||
|
||||
tagRules = [
|
||||
{
|
||||
query = "to:miaengiadina-pwa@noreply.github.com AND subject:\"PR run failed\"";
|
||||
tags = [ "-new" "+deleted" ];
|
||||
}
|
||||
{
|
||||
query = lib.concatStringsSep " OR " [
|
||||
"from:noreply-local-guides@google.com"
|
||||
"from:google-maps-noreply@google.com"
|
||||
"subject:fd-noti"
|
||||
"from:nebenan.de"
|
||||
"to:miaengiadina-pwa@noreply.github.com"
|
||||
];
|
||||
tags = [ "-new" ];
|
||||
}
|
||||
{
|
||||
query = "tag:new";
|
||||
tags = [ "-new" "+inbox" ];
|
||||
}
|
||||
];
|
||||
|
||||
generateTaggingScript = filters:
|
||||
let
|
||||
template = { tags, query, message ? "tagging ${query} -> ${lib.concatStringsSep " " tags}", ... }: ''
|
||||
echo '${message}'
|
||||
${pkgs.notmuch}/bin/notmuch tag ${lib.concatStringsSep " " tags} -- "${query}"
|
||||
'';
|
||||
in lib.concatStringsSep "\n" (map template filters);
|
||||
in
|
||||
{
|
||||
imports = [ <stockholm/krebs/3modules/secret.nix> ];
|
||||
|
||||
krebs.secret.files.email-ssh = {
|
||||
path = "${config.users.users.email.home}/.ssh/id_ed25519";
|
||||
owner.name = config.users.users.email.name;
|
||||
source-path = toString <system-secrets> + "/email/ssh.key";
|
||||
};
|
||||
|
||||
users.users.email = {
|
||||
isNormalUser = true;
|
||||
description = "fetching mails since 2021";
|
||||
};
|
||||
|
||||
systemd.services.mail-sync =
|
||||
let
|
||||
hosts = [ "manakish.r" "kabsa.r" ];
|
||||
in {
|
||||
enable = true;
|
||||
wants = [ "network-online.target" config.krebs.secret.files.email-ssh.service ];
|
||||
startAt = "*:0/3";
|
||||
serviceConfig.User = config.users.users.email.name;
|
||||
serviceConfig.Type = "oneshot";
|
||||
environment.NOTMUCH_CONFIG = config.home-manager.users.email.home.sessionVariables.NOTMUCH_CONFIG;
|
||||
path = [ pkgs.notmuch pkgs.openssh ];
|
||||
script = ''
|
||||
${pkgs.isync}/bin/mbsync --all || true
|
||||
|
||||
${lib.concatMapStringsSep "\n" (host: ''
|
||||
echo === syncing ${host}
|
||||
${pkgs.muchsync}/bin/muchsync -s 'ssh -CTaxq -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=4 -p ${toString sshPort}' kfm@${host} || :
|
||||
'') hosts}
|
||||
'';
|
||||
};
|
||||
|
||||
home-manager.users.email = {
|
||||
programs.mbsync.enable = true;
|
||||
|
||||
accounts.email.accounts = import ./accounts.nix { inherit lib; };
|
||||
|
||||
programs.notmuch = {
|
||||
enable = true;
|
||||
new.tags = [ "new" ];
|
||||
hooks.postNew = generateTaggingScript tagRules;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -22,9 +22,9 @@
|
||||
};
|
||||
telegram.kmein.Token = bridgeBotToken;
|
||||
irc =
|
||||
let Nick = "ponte"; StripMarkdown = true;
|
||||
let Nick = "ponte";
|
||||
in {
|
||||
hackint = { Server = "irc.hackint.org:6697"; UseTLS = true; inherit Nick StripMarkdown; };
|
||||
hackint = { Server = "irc.hackint.org:6697"; UseTLS = true; inherit Nick; };
|
||||
};
|
||||
mumble.lassulus = {
|
||||
Server = "lassul.us:64738";
|
||||
|
||||
41
configs/menstruation.nix
Normal file
41
configs/menstruation.nix
Normal file
@@ -0,0 +1,41 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
backend = pkgs.callPackage <niveum/submodules/menstruation-backend> {};
|
||||
telegram = pkgs.callPackage <niveum/submodules/menstruation-telegram> {};
|
||||
backendPort = 8000;
|
||||
in
|
||||
{
|
||||
containers.menstruation.autoStart = true;
|
||||
containers.menstruation.config = { config, pkgs, ... }: {
|
||||
services.redis.enable = true;
|
||||
|
||||
systemd.services.menstruation-telegram = {
|
||||
wants = [
|
||||
"network-online.target"
|
||||
"menstruation-backend.service"
|
||||
"redis.service"
|
||||
];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
MENSTRUATION_TOKEN = lib.strings.fileContents <system-secrets/telegram/menstruation.token>;
|
||||
MENSTRUATION_ENDPOINT = "http://localhost:${toString backendPort}";
|
||||
MENSTRUATION_MODERATORS = "18980945";
|
||||
};
|
||||
serviceConfig = {
|
||||
Restart = "always";
|
||||
DynamicUser = true;
|
||||
ExecStart = "${telegram}/bin/menstruation-telegram";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.menstruation-backend = {
|
||||
wants = [ "network-online.target" ];
|
||||
environment.ROCKET_PORT = toString backendPort;
|
||||
serviceConfig = {
|
||||
Restart = "always";
|
||||
DynamicUser = true;
|
||||
ExecStart = "${backend}/bin/menstruation_server";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
17
configs/monitoring/blackbox.nix
Normal file
17
configs/monitoring/blackbox.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
# https://github.com/Fluepke/nix-files/blob/2be70b76a198afaa7763132fed645a3c19d5af6e/configuration/common/blackbox-exporter.yml
|
||||
# https://github.com/xHain-hackspace/xhain-nixfiles/blob/0d6e3b87a07317c2d54cccabf4f90da589319e2c/common/prometheus/blackbox-exporter.yml
|
||||
{
|
||||
modules.http_2xx = {
|
||||
http = {
|
||||
fail_if_not_ssl = true;
|
||||
ip_protocol_fallback = false;
|
||||
method = "GET";
|
||||
no_follow_redirects = false;
|
||||
preferred_ip_protocol = "ip4";
|
||||
valid_http_versions = [ "HTTP/1.1" "HTTP/2.0" ];
|
||||
tls_config.insecure_skip_verify = true;
|
||||
};
|
||||
prober = "http";
|
||||
timeout = "15s";
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
let
|
||||
lokiConfig = import ./loki.nix;
|
||||
blackboxConfig = import ./blackbox.nix;
|
||||
in
|
||||
{
|
||||
services.grafana = {
|
||||
@@ -60,6 +61,11 @@ in
|
||||
for = "1h";
|
||||
annotations.summary = "{{$labels.job}}: Using lots of RAM.";
|
||||
}
|
||||
{
|
||||
alert = "UptimeMonster";
|
||||
expr = "time() - node_boot_time_seconds > 2592000";
|
||||
annotations.summary = "{{$labels.job}}: up for more than 30 days.";
|
||||
}
|
||||
{
|
||||
alert = "HostDown";
|
||||
expr = ''up == 0'';
|
||||
@@ -71,7 +77,37 @@ in
|
||||
{
|
||||
alert = "Reboot";
|
||||
expr = "time() - node_boot_time_seconds < 300";
|
||||
annotations.summary = "{{$labels.alias}}: Reboot";
|
||||
annotations.summary = "{{$labels.job}}: Reboot";
|
||||
}
|
||||
{
|
||||
alert = "ProbeFailed";
|
||||
expr = "probe_success == 0";
|
||||
for = "5m";
|
||||
annotations.summary = "{{$labels.instance}}: probe failed";
|
||||
}
|
||||
{
|
||||
alert = "SlowProbe";
|
||||
expr = "avg_over_time(probe_http_duration_seconds[1m]) > 1";
|
||||
for = "5m";
|
||||
annotations.summary = "{{$labels.instance}}: HTTP probe slow";
|
||||
}
|
||||
{
|
||||
alert = "HttpStatusCode";
|
||||
expr = "probe_http_status_code != 0 AND (probe_http_status_code <= 199 OR probe_http_status_code >= 400)";
|
||||
for = "5m";
|
||||
annotations.summary = "{{$labels.instance}}: status code {{$value}}";
|
||||
}
|
||||
{
|
||||
alert = "SslExpirySoon";
|
||||
expr = "probe_ssl_earliest_cert_expiry - time() < 86400 * 30";
|
||||
for = "5m";
|
||||
annotations.summary = "{{$labels.instance}}: SSL certificate expires in 30 days";
|
||||
}
|
||||
{
|
||||
alert = "SslExpiry";
|
||||
expr = "probe_ssl_earliest_cert_expiry - time() <= 0";
|
||||
for = "5m";
|
||||
annotations.summary = "{{$labels.instance}}: SSL certificate has expired";
|
||||
}
|
||||
];
|
||||
}];
|
||||
@@ -112,9 +148,9 @@ in
|
||||
⚠ <b>{{ index .Annotations "summary"}}</b>
|
||||
{{ index .Annotations "description" }}
|
||||
|
||||
See on <a href="http://${config.services.grafana.domain}/d/alpUteInz/niveum">Grafana</a>.
|
||||
See on Grafana: http://${config.services.grafana.domain}/d/alpUteInz/niveum
|
||||
{{ else -}}
|
||||
😌 <del>{{ index .Annotations "summary"}}</del>
|
||||
RESOLVED 😌 <del>{{ index .Annotations "summary"}}</del>
|
||||
{{- end }}
|
||||
{{end -}}
|
||||
{{end}}
|
||||
@@ -152,15 +188,36 @@ in
|
||||
job_name = "makanek";
|
||||
static_configs = [ { targets = [
|
||||
"127.0.0.1:${toString config.services.prometheus.exporters.node.port}"
|
||||
# "127.0.0.1:${toString config.services.prometheus.exporters.nginx.port}"
|
||||
]; } ];
|
||||
}
|
||||
{
|
||||
scrape_interval = "5m";
|
||||
job_name = "blackbox";
|
||||
metrics_path = "/probe";
|
||||
params.module = [ "http_2xx" ];
|
||||
relabel_configs = [
|
||||
{ source_labels = ["__address__"]; target_label = "__param_target"; }
|
||||
{ source_labels = ["__param_target"]; target_label = "instance"; }
|
||||
{ replacement = "127.0.0.1:${toString config.services.prometheus.exporters.blackbox.port}"; target_label = "__address__"; }
|
||||
];
|
||||
static_configs = [{
|
||||
targets = [
|
||||
"alew.hu-berlin.de"
|
||||
];
|
||||
}];
|
||||
}
|
||||
{
|
||||
job_name = "zaatar";
|
||||
static_configs = [ { targets = [ "zaatar.r:${toString config.services.prometheus.exporters.node.port}" ]; } ];
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
services.prometheus.exporters.blackbox = {
|
||||
enable = true;
|
||||
configFile = (pkgs.formats.yaml {}).generate "blackbox.yaml" blackboxConfig;
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
lokiConfig.server.http_listen_port
|
||||
];
|
||||
|
||||
@@ -45,6 +45,25 @@ in
|
||||
103685 # Griechische Sprache und Übersetzung I
|
||||
105455 # Elegia greca
|
||||
105335 # Homerische Epen
|
||||
|
||||
# WS 2021
|
||||
108122 # Griechisch
|
||||
107986 # Altostslavisch
|
||||
107792 # Elegie in Rom
|
||||
107369 # Tusculanae Disputationes
|
||||
108586 # Griechische Religion
|
||||
107988 # Balkanindogermanisch
|
||||
108312 # Altnordisch
|
||||
107281 # NLP
|
||||
108736 # Grammatiktheorie
|
||||
109438 # Warum klingt Orkisch böse
|
||||
108025 # Poetik der Nordgermanen
|
||||
107280 # Statistik
|
||||
108350 # Attische Redner
|
||||
107461 # Argonautika
|
||||
108283 # Digital Classicist
|
||||
109211 # Altlitauisch
|
||||
109185 # Etymologie
|
||||
];
|
||||
download_submissions = true;
|
||||
download_descriptions = true;
|
||||
@@ -63,11 +82,26 @@ in
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 2049 ];
|
||||
|
||||
services.nginx.virtualHosts."moodle.kmein.r" =
|
||||
let
|
||||
identity = lib.strings.fileContents <secrets/eduroam/identity>;
|
||||
password = lib.strings.fileContents <secrets/eduroam/password>;
|
||||
in {
|
||||
basicAuth."${identity}" = password;
|
||||
locations."/" = {
|
||||
root = config.services.moodle-dl.directory;
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
charset UTF-8;
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
services.nfs.server = {
|
||||
enable = true;
|
||||
exports = ''
|
||||
/export 10.243.2.4(fsid=0) 10.243.2.85(fsid=0)
|
||||
/export/moodle 10.243.2.4(insecure,rw) 10.243.2.85(insecure,rw)
|
||||
exports = let machines = with (import <niveum/lib>).retiolumAddresses; [kabsa manakish]; in ''
|
||||
/export ${lib.concatMapStringsSep " " (machine: "${machine.ipv4}(fsid=0)") machines}
|
||||
/export/moodle ${lib.concatMapStringsSep " " (machine: "${machine.ipv4}(insecure,rw)") machines}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{ pkgs, lib, ... }: let
|
||||
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}";
|
||||
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; };
|
||||
in {
|
||||
environment.shellAliases.smpv = swallow "mpv";
|
||||
|
||||
@@ -8,8 +7,8 @@ in {
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
osc = "no";
|
||||
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ];
|
||||
screenshot-template = "%F-%wH%wM%wS-%#04n";
|
||||
};
|
||||
bindings = {
|
||||
"Alt+RIGHT" = "add video-rotate 90";
|
||||
@@ -22,8 +21,7 @@ in {
|
||||
"Alt+j" = "add video-pan-y -0.05";
|
||||
};
|
||||
scripts = [
|
||||
pkgs.mpvScripts.thumbnail
|
||||
nixpkgs-unstable.mpvScripts.youtube-quality
|
||||
pkgs.unstable.mpvScripts.youtube-quality
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
38
configs/names.nix
Normal file
38
configs/names.nix
Normal file
@@ -0,0 +1,38 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
port = 5703;
|
||||
geogen = (pkgs.fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "scripts";
|
||||
rev = "8945430f27a8c6fd632dd35382cb094abe3543ff";
|
||||
sha256 = "1djyxkynypxsrmdf6idgjszqpcgqyq607rrsvl58p2bpymmwibzb";
|
||||
}) + "/onomastics";
|
||||
inherit (pkgs.callPackage geogen {}) dependencyEnv;
|
||||
in
|
||||
{
|
||||
systemd.services.names = {
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Better clone of geogen.stoepel.net";
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
};
|
||||
script = ''
|
||||
cd $(mktemp -d)
|
||||
ln -s "${geogen}/wsgi.py" wsgi.py
|
||||
${dependencyEnv}/bin/gunicorn wsgi:app -b :${toString port}
|
||||
'';
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."names.kmein.r" = {
|
||||
locations."/".proxyPass = "http://127.0.0.1:${toString port}";
|
||||
};
|
||||
}
|
||||
248
configs/neomutt.nix
Normal file
248
configs/neomutt.nix
Normal file
@@ -0,0 +1,248 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
mainMailbox = "posteo";
|
||||
|
||||
accounts.uni = {
|
||||
user = "meinhark";
|
||||
password = lib.strings.fileContents <secrets/eduroam/password>;
|
||||
address = "kieran.felix.meinhardt@hu-berlin.de";
|
||||
imap = "mailbox.cms.hu-berlin.de";
|
||||
smtp = "mailhost.cms.hu-berlin.de";
|
||||
smtpSettings = smtp: "smtp://${smtp}";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.uni-old = {
|
||||
user = "meinhark";
|
||||
password = lib.strings.fileContents <secrets/eduroam/password>;
|
||||
address = "meinhark@informatik.hu-berlin.de";
|
||||
imap = "mailbox.informatik.hu-berlin.de";
|
||||
smtp = "mailhost.informatik.hu-berlin.de";
|
||||
smtpSettings = smtp: "smtp://${smtp}";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.work-uni = {
|
||||
user = "meinhaki";
|
||||
password = lib.strings.fileContents <secrets/mail/meinhaki>;
|
||||
address = "kieran.meinhardt@hu-berlin.de";
|
||||
imap = "mailbox.cms.hu-berlin.de";
|
||||
smtp = "mailhost.cms.hu-berlin.de";
|
||||
smtpSettings = smtp: "smtp://${smtp}";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.work-fysi = rec {
|
||||
user = "kieran@fysi.tech";
|
||||
address = user;
|
||||
password = lib.strings.fileContents <secrets/mail/fastmail>;
|
||||
imap = "imap.fastmail.com";
|
||||
smtp = "smtp.fastmail.com";
|
||||
smtpSettings = smtp: "smtps://${smtp}:465";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.cock = rec {
|
||||
user = "2210@cock.li";
|
||||
address = user;
|
||||
password = lib.strings.fileContents <secrets/mail/cock>;
|
||||
imap = "mail.cock.li";
|
||||
smtp = imap;
|
||||
smtpSettings = smtp: "smtp://${smtp}:587";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts."${mainMailbox}" = rec {
|
||||
user = "kieran.meinhardt@posteo.net";
|
||||
address = user;
|
||||
password = lib.strings.fileContents <secrets/mail/posteo>;
|
||||
imap = "posteo.de";
|
||||
smtp = imap;
|
||||
smtpSettings = smtp: "smtp://${smtp}";
|
||||
folders = {
|
||||
drafts = "Drafts";
|
||||
sent = "Sent";
|
||||
trash = "Trash";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.google-amro = rec {
|
||||
user = "amroplay@gmail.com";
|
||||
address = user;
|
||||
password = lib.strings.fileContents <secrets/mail/gmail/amroplay>;
|
||||
imap = "imap.gmail.com";
|
||||
smtp = "smtp.gmail.com";
|
||||
smtpSettings = smtp: "smtps://${smtp}:465";
|
||||
folders = {
|
||||
drafts = "[Gmail]/Drafts";
|
||||
sent = "[Gmail]/Sent Mail";
|
||||
trash = "[Gmail]/Bin";
|
||||
};
|
||||
};
|
||||
|
||||
accounts.google-kieran = rec {
|
||||
user = "kieran.meinhardt@gmail.com";
|
||||
address = user;
|
||||
password = lib.strings.fileContents <secrets/mail/gmail/kieran.meinhardt>;
|
||||
imap = "imap.gmail.com";
|
||||
smtp = "smtp.gmail.com";
|
||||
smtpSettings = smtp: "smtps://${smtp}:465";
|
||||
folders = {
|
||||
drafts = "[Gmail]/Entwürfe";
|
||||
sent = "[Gmail]/Gesendet";
|
||||
trash = "[Gmail]/Papierkorb";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [ pkgs.neomutt ];
|
||||
environment.shellAliases.mua = "${pkgs.neomutt}/bin/neomutt -f ${mainMailbox}←";
|
||||
|
||||
home-manager.users.me.xdg.configFile."neomutt/neomuttrc".text = ''
|
||||
set mailcap_path = ${pkgs.writeText "mailcap" ''
|
||||
text/plain; $EDITOR %s ;
|
||||
text/html; ${pkgs.lynx}/bin/lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
|
||||
image/*; ${pkgs.sxiv}/bin/sxiv %s ;
|
||||
video/*; ${pkgs.utillinux}/bin/setsid ${pkgs.mpv}/bin/mpv --quiet %s &; copiousoutput
|
||||
audio/*; ${pkgs.mpv}/bin/mpv %s ;
|
||||
application/pdf; ${pkgs.zathura}/bin/zathura %s ;
|
||||
application/pgp-encrypted; ${pkgs.gnupg}/bin/gpg -d '%s'; copiousoutput;
|
||||
application/pgp-keys; ${pkgs.gnupg}/bin/gpg --import '%s'; copiousoutput;
|
||||
''}:$mailcap_path
|
||||
|
||||
set sidebar_visible
|
||||
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S"
|
||||
set sidebar_width = 25 # Plenty of space
|
||||
set sidebar_divider_char = '│' # Pretty line-drawing character
|
||||
set mail_check_stats
|
||||
|
||||
set index_format="%2C %Z %D %-15.15L %s"
|
||||
set date_format="%F %R"
|
||||
|
||||
set sort = 'reverse-date'
|
||||
set sleep_time = 0 # Pause 0 seconds for informational messages
|
||||
set markers = no # Disables the `+` displayed at line wraps
|
||||
set mark_old = no # Unread mail stay unread until read
|
||||
set wait_key = no # mutt won't ask "press key to continue"
|
||||
set fast_reply # skip to compose when replying
|
||||
set forward_format = "Fwd: %s" # format of subject when forwarding
|
||||
set reverse_name # reply as whomever it was to
|
||||
set include=ask-no # don't include message in replies
|
||||
auto_view text/html # automatically show html (mailcap uses lynx)
|
||||
auto_view application/pgp-encrypted
|
||||
alternative_order text/plain text/enriched text/html
|
||||
|
||||
set abort_noattach abort_noattach_regex="\<(attach|attached|attachments?|anbei|Anhang|angehängt)\>"
|
||||
set attach_save_dir=/tmp
|
||||
set fast_reply
|
||||
|
||||
set narrow_tree # narrow threads for more depth
|
||||
|
||||
bind index,pager B sidebar-toggle-visible # Use 'B' to switch the Sidebar on and off
|
||||
bind index,pager \Ck sidebar-prev
|
||||
bind index,pager \Cj sidebar-next
|
||||
bind index,pager \Co sidebar-open
|
||||
bind index,pager \Cp sidebar-prev-new
|
||||
bind index,pager \Cn sidebar-next-new
|
||||
|
||||
macro index * <limit>~F\r
|
||||
macro index + <limit>all\r
|
||||
|
||||
set query_command = "khard email --parsable %s"
|
||||
bind editor <Tab> complete-query
|
||||
bind editor ^T complete
|
||||
|
||||
set mail_check = 90
|
||||
set timeout = 15
|
||||
# set imap_check_subscribed
|
||||
set use_from
|
||||
|
||||
|
||||
set header_cache="~/.cache/mutt" message_cachedir="~/.cache/mutt"
|
||||
|
||||
source ${pkgs.writeText "accounts.neomuttrc" ''
|
||||
set realname = "Kierán Meinhardt"
|
||||
account-hook . 'unset imap_user imap_pass smtp_user smtp_pass'
|
||||
# set accordingly: postponed trash record
|
||||
${lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: account: let imapRoot = "imaps://${account.user}@${account.imap}"; in ''
|
||||
account-hook ${account.user}@${account.imap} 'set imap_user="${account.user}" imap_pass="${account.password}"'
|
||||
account-hook ${account.user}@${account.smtp} 'set smtp_user="${account.user}" smtp_pass="${account.password}"'
|
||||
folder-hook ${account.user}@${account.imap} 'set smtp_url="${account.smtpSettings "${account.user}@${account.smtp}"}" from="${account.address}" record="${imapRoot}/${account.folders.sent}" postponed="${imapRoot}/${account.folders.drafts}" trash="${imapRoot}/${account.folders.trash}"'
|
||||
named-mailboxes "${name}←" "${imapRoot}" "${name}→" "${imapRoot}/${account.folders.sent}"
|
||||
'') accounts)}
|
||||
''}
|
||||
|
||||
set spoolfile="${mainMailbox}"
|
||||
|
||||
source ${pkgs.writeText "colors.neomuttrc" ''
|
||||
# Default index colors:
|
||||
color index_number blue default
|
||||
color index red default '.*'
|
||||
color index_flags lightcyan default '.*'
|
||||
color index_author yellow default '.*'
|
||||
color index_subject lightblack default '.*'
|
||||
|
||||
# New mail is boldened:
|
||||
color index_author lightyellow black "~N"
|
||||
color index_subject lightwhite black "~N"
|
||||
|
||||
# Flagged mail is highlighted:
|
||||
color index_flags lightmagenta default '~F'
|
||||
|
||||
# Other colors and aesthetic settings:
|
||||
mono bold bold
|
||||
mono underline underline
|
||||
mono error bold
|
||||
mono indicator reverse
|
||||
# color sidebar_flagged red black
|
||||
mono sidebar_new bold
|
||||
color error red default
|
||||
color message cyan default
|
||||
color search brightmagenta default
|
||||
color hdrdefault lightblack default
|
||||
color quoted green default
|
||||
color quoted1 blue default
|
||||
color quoted2 cyan default
|
||||
color quoted3 yellow default
|
||||
color quoted4 red default
|
||||
color quoted5 brightred default
|
||||
color signature lightblack default
|
||||
color tree color235 default
|
||||
|
||||
# Regex highlighting:
|
||||
color header red default "^(Date)"
|
||||
color header yellow default "^(From)"
|
||||
color header white default "^(B?CC)"
|
||||
color header brightwhite default "^(Subject)"
|
||||
color body cyan default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
|
||||
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
|
||||
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
|
||||
color body red default "(BAD signature)|^gpg: BAD signature from.*"
|
||||
color body brightgreen default "(Good signature)|^gpg: Good signature .*"
|
||||
color body brightyellow default "^gpg: "
|
||||
mono body bold "^gpg: Good signature"
|
||||
mono body bold "^gpg: BAD signature from.*"
|
||||
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
||||
''}
|
||||
'';
|
||||
}
|
||||
@@ -25,18 +25,13 @@
|
||||
customRC = builtins.readFile <niveum/lib/vim/init.vim>;
|
||||
packages.nvim = with pkgs.vimPlugins; {
|
||||
start = [
|
||||
# cheat-sh-vim
|
||||
# deoplete-nvim
|
||||
# vim-abolish
|
||||
ale
|
||||
fzf-vim
|
||||
fzfWrapper
|
||||
goyo
|
||||
supertab
|
||||
undotree
|
||||
tabular
|
||||
vimwiki
|
||||
vim-256noir
|
||||
vim-colors-paramount
|
||||
vim-commentary
|
||||
vim-css-color
|
||||
@@ -44,13 +39,9 @@
|
||||
vim-fetch
|
||||
vim-fugitive
|
||||
vim-gitgutter
|
||||
vim-pandoc
|
||||
vim-pandoc-syntax # vim-pandoc-after
|
||||
vim-repeat
|
||||
vim-sensible
|
||||
# vim-startify
|
||||
vim-surround
|
||||
vim-mail
|
||||
];
|
||||
opt = [
|
||||
csv
|
||||
@@ -72,6 +63,9 @@
|
||||
vim-reason-plus
|
||||
vim-toml
|
||||
vimtex
|
||||
vim-pandoc
|
||||
vim-pandoc-syntax # vim-pandoc-after
|
||||
vim-256noir
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
autowifi = pkgs.writers.writePython3Bin "autowifi" { flakeIgnore = [ "E501" ]; } <stockholm/lass/5pkgs/autowifi/autowifi.py>;
|
||||
profile = name: custom: lib.recursiveUpdate {
|
||||
connection.id = name;
|
||||
connection.type = "wifi";
|
||||
@@ -39,7 +38,7 @@ let
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [ <niveum/modules/networkmanager-declarative.nix> ];
|
||||
imports = [ ../modules/networkmanager-declarative.nix ];
|
||||
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
@@ -49,6 +48,8 @@ in
|
||||
profiles = lib.mapAttrs profile {
|
||||
Aether = {
|
||||
connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21";
|
||||
ipv6.addr-gen-mode = "stable";
|
||||
wifi.cloned-mac-address = "stable";
|
||||
wifi-security = {
|
||||
psk = lib.strings.fileContents <secrets/wifi/Aether.psk>;
|
||||
auth-alg = "open";
|
||||
@@ -81,22 +82,5 @@ in
|
||||
|
||||
users.users.me.extraGroups = [ "networkmanager" ];
|
||||
|
||||
systemd.services.autowifi = {
|
||||
enable = false;
|
||||
description = "Automatic wifi connector";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.networkmanager ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
Restart = "always";
|
||||
RestartSec = "10s";
|
||||
ExecStart = "${autowifi}/bin/autowifi";
|
||||
};
|
||||
};
|
||||
|
||||
networking.networkmanager.dispatcherScripts = [
|
||||
{ source = "${pkgs.nur.repos.makefu.prison-break}/bin/prison-break"; }
|
||||
];
|
||||
|
||||
environment.systemPackages = [ pkgs.speedtest-cli ];
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
passwordFile = path: toString (pkgs.writeText "password" (lib.strings.fileContents path));
|
||||
inherit (import <niveum/lib>) localAddresses;
|
||||
in
|
||||
{
|
||||
services.nextcloud = {
|
||||
enable = true;
|
||||
package = pkgs.nextcloud21;
|
||||
package = pkgs.nextcloud22;
|
||||
|
||||
https = true;
|
||||
|
||||
@@ -23,8 +24,8 @@ in
|
||||
dbuser = "nextcloud";
|
||||
dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
|
||||
dbname = "nextcloud";
|
||||
dbpass = lib.strings.fileContents <system-secrets/nextcloud/database>;
|
||||
adminpass = lib.strings.fileContents <system-secrets/nextcloud/admin>;
|
||||
dbpassFile = passwordFile <system-secrets/nextcloud/database>;
|
||||
adminpassFile = passwordFile <system-secrets/nextcloud/admin>;
|
||||
adminuser = "admin";
|
||||
# extraTrustedDomains = [ "toum.r" ];
|
||||
};
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# enable `nix flake`
|
||||
nix = {
|
||||
package = pkgs.nix;
|
||||
# extraOptions = ''
|
||||
# experimental-features = nix-command
|
||||
# '';
|
||||
};
|
||||
}
|
||||
@@ -2,8 +2,29 @@
|
||||
let
|
||||
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
|
||||
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
|
||||
menstruation = pkgs.callPackage <niveum/submodules/menstruation-backend> {};
|
||||
|
||||
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; };
|
||||
|
||||
astrolog = nixpkgs-unstable.astrolog.overrideAttrs (old: old // {
|
||||
installPhase = ''
|
||||
${old.installPhase}
|
||||
# set sensible defaults
|
||||
sed -i '
|
||||
/^-z /s/8:00W/1:00E/ # timezone
|
||||
/^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location
|
||||
/^-zj /s/"Current moment now"/Now/ # default name
|
||||
/^-zj /s/"Seattle, WA, USA"/Berlin/ # default location
|
||||
/^_k/s/_k/=k/ # use color
|
||||
/^_Yd/s/_Yd/=Yd/ # sensible date format
|
||||
/^_Yt/s/_Yt/=Yt/ # sensible time format
|
||||
/^_Yv/s/_Yv/=Yv/ # sensible length format
|
||||
/^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format
|
||||
/^:I /s/80/120/ # wider text output
|
||||
' $out/astrolog/astrolog.as
|
||||
'';
|
||||
});
|
||||
|
||||
recht = pkgs.callPackage (pkgs.fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "recht";
|
||||
@@ -13,7 +34,6 @@ let
|
||||
|
||||
in {
|
||||
imports = [
|
||||
./krebs.nix
|
||||
./writing.nix
|
||||
./python.nix
|
||||
./haskell
|
||||
@@ -51,7 +71,6 @@ in {
|
||||
wget
|
||||
whois
|
||||
ix
|
||||
nur.repos.kmein.python3Packages.instaloader
|
||||
dnsutils
|
||||
# mtr # my traceroute
|
||||
# FILE MANAGERS
|
||||
@@ -107,6 +126,8 @@ in {
|
||||
audacity
|
||||
calibre
|
||||
inkscape
|
||||
astrolog # astrolog
|
||||
anki # flashcards
|
||||
nixpkgs-unstable.zoom-us # video conferencing
|
||||
pdfgrep # search in pdf
|
||||
pdftk # pdf toolkit
|
||||
@@ -118,12 +139,14 @@ in {
|
||||
youtubeDL
|
||||
bc # calculator
|
||||
pari # gp -- better calculator
|
||||
scripts.auc
|
||||
scripts.infschmv
|
||||
scripts.qrpaste
|
||||
scripts.new-mac # get a new mac address
|
||||
scripts.scanned
|
||||
scripts.default-gateway
|
||||
scripts.showkeys-toggle
|
||||
scripts.kirciuoklis
|
||||
scripts.favicon
|
||||
scripts.ipa # XSAMPA to IPA converter
|
||||
scripts.playlist
|
||||
@@ -131,10 +154,9 @@ in {
|
||||
scripts.devanagari
|
||||
scripts.betacode # ancient greek betacode to unicode converter
|
||||
scripts.meteo
|
||||
nur.repos.kmein.mahlzeit
|
||||
scripts.mahlzeit
|
||||
recht
|
||||
# nur.repos.kmein.slide
|
||||
nur.repos.kmein.vimv
|
||||
scripts.vimv
|
||||
scripts.swallow # window swallowing
|
||||
scripts.genius
|
||||
scripts.instaget
|
||||
@@ -153,8 +175,10 @@ in {
|
||||
scripts.vg
|
||||
scripts.fkill
|
||||
scripts.wttr
|
||||
scripts.boetlingk
|
||||
scripts.sanskrit-dictionary
|
||||
scripts.unicodmenu
|
||||
scripts.horoscope
|
||||
scripts.closest
|
||||
scripts.trans
|
||||
scripts.liddel-scott-jones
|
||||
scripts.mpv-radio
|
||||
@@ -170,6 +194,8 @@ in {
|
||||
qrencode
|
||||
wtf
|
||||
|
||||
menstruation
|
||||
|
||||
(pkgs.writers.writeDashBin "worldradio" ''
|
||||
shuf ${worldradio} | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv --no-video
|
||||
'')
|
||||
@@ -182,11 +208,20 @@ in {
|
||||
(pkgs.writers.writeDashBin "mpc-zaatar" ''MPD_HOST=${(import <niveum/lib/local-network.nix>).zaatar} exec ${pkgs.mpc_cli}/bin/mpc "$@"'')
|
||||
|
||||
nixpkgs-unstable.spotify
|
||||
nixpkgs-unstable.spotify-tui
|
||||
ncspot
|
||||
playerctl
|
||||
|
||||
nix-index
|
||||
scripts.nix-index-update
|
||||
|
||||
#krebs
|
||||
dic
|
||||
cyberlocker-tools
|
||||
untilport
|
||||
kpaste
|
||||
irc-announce
|
||||
git-preview
|
||||
ircaids
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ with haskellPackages; [
|
||||
directory
|
||||
dlist
|
||||
either
|
||||
edit-distance
|
||||
exceptions
|
||||
extra
|
||||
filepath
|
||||
@@ -54,6 +55,7 @@ with haskellPackages; [
|
||||
megaparsec
|
||||
microlens
|
||||
monad-logger
|
||||
monad-memo
|
||||
mono-traversable
|
||||
mtl
|
||||
network
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
krebs-packages = pkgs: {
|
||||
dic = pkgs.callPackage <stockholm/krebs/5pkgs/simple/dic> { };
|
||||
yt-next = pkgs.callPackage <stockholm/lass/5pkgs/yt-next> { };
|
||||
acronym = pkgs.callPackage <stockholm/lass/5pkgs/acronym> { };
|
||||
urban = pkgs.callPackage <stockholm/lass/5pkgs/urban> { };
|
||||
mpv-poll = pkgs.callPackage <stockholm/lass/5pkgs/mpv-poll> { };
|
||||
cyberlocker-tools = pkgs.callPackage <stockholm/krebs/5pkgs/simple/cyberlocker-tools> { };
|
||||
untilport = pkgs.callPackage <stockholm/krebs/5pkgs/simple/untilport> { };
|
||||
kpaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/kpaste> { };
|
||||
irc-announce =
|
||||
pkgs.callPackage <stockholm/krebs/5pkgs/simple/irc-announce> { };
|
||||
git-preview =
|
||||
pkgs.callPackage <stockholm/krebs/5pkgs/simple/git-preview> { };
|
||||
};
|
||||
in {
|
||||
nixpkgs.config.packageOverrides = krebs-packages;
|
||||
|
||||
environment.systemPackages =
|
||||
map (name: pkgs.${name}) (lib.attrNames (krebs-packages pkgs));
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
environment.systemPackages = [
|
||||
(pkgs.python3.withPackages (py: [
|
||||
py.black
|
||||
py.python-language-server
|
||||
py.pyls-mypy
|
||||
py.pyls-black
|
||||
py.pyls-isort
|
||||
# py.python-language-server
|
||||
# py.pyls-mypy
|
||||
# py.pyls-black
|
||||
# py.pyls-isort
|
||||
py.flake8
|
||||
py.pygments
|
||||
py.schema
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
let
|
||||
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
|
||||
|
||||
zoteroStyle = { name, sha256 }: {
|
||||
name = "${name}.csl";
|
||||
path = pkgs.fetchurl {
|
||||
@@ -63,13 +65,14 @@ in {
|
||||
latexrun
|
||||
(aspellWithDicts (dict: [ dict.de dict.en dict.en-computers ]))
|
||||
# haskellPackages.pandoc-citeproc
|
||||
nur.repos.kmein.text2pdf
|
||||
scripts.text2pdf
|
||||
lowdown
|
||||
glow # markdown to term
|
||||
libreoffice
|
||||
# gnumeric
|
||||
dia
|
||||
pandoc
|
||||
pandoc-doc
|
||||
# proselint
|
||||
asciidoctor
|
||||
wordnet
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) localAddresses;
|
||||
inherit (import ../lib) localAddresses;
|
||||
hp-driver = pkgs.hplipWithPlugin;
|
||||
in {
|
||||
services.printing = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) tmpfilesConfig;
|
||||
inherit (import <niveum/lib>) tmpfilesConfig serveHtml;
|
||||
|
||||
radioStore = "/var/lib/radio";
|
||||
htgenPort = 8080;
|
||||
@@ -63,7 +63,11 @@ in
|
||||
})
|
||||
];
|
||||
|
||||
users.extraUsers.radio.isSystemUser = true;
|
||||
users.extraUsers.radio = {
|
||||
isSystemUser = true;
|
||||
group = "radio";
|
||||
};
|
||||
users.groups.radio = {};
|
||||
|
||||
krebs.htgen.radio = {
|
||||
port = htgenPort;
|
||||
@@ -192,22 +196,12 @@ in
|
||||
};
|
||||
|
||||
|
||||
services.nginx.virtualHosts."radio.xn--kiern-0qa.de" = {
|
||||
services.nginx.virtualHosts."radio.kmein.de" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations = lib.mkMerge (
|
||||
[
|
||||
{
|
||||
"/".extraConfig = ''
|
||||
default_type "text/html";
|
||||
root ${pkgs.linkFarm "station-list" [{
|
||||
name = "index.html";
|
||||
path = import ./station-list.nix { inherit pkgs lib stations; };
|
||||
}]};
|
||||
index index.html;
|
||||
'';
|
||||
# skip
|
||||
}
|
||||
{ "/".extraConfig = serveHtml (import ./station-list.nix { inherit pkgs lib stations; }) pkgs; }
|
||||
] ++ (lib.mapAttrsToList (name: station: {
|
||||
"= /${name}/status".proxyPass = "http://127.0.0.1:${toString htgenPort}";
|
||||
"= /${name}/listen.ogg".proxyPass = "http://127.0.0.1:${toString station.streamPort}";
|
||||
|
||||
69
configs/retiolum-map.nix
Normal file
69
configs/retiolum-map.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
network = "retiolum";
|
||||
|
||||
stateDirectory = "retiolum-map";
|
||||
|
||||
geo-ip-database = "${lib.head config.services.geoipupdate.settings.EditionIDs}.mmdb";
|
||||
geo-ip-database-path = "${config.services.geoipupdate.settings.DatabaseDirectory}/${geo-ip-database}";
|
||||
|
||||
tinc-graph-source = pkgs.fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "tinc-graph";
|
||||
rev = "1b9c69ffdbdab82d30a23e44f739feea63d94163";
|
||||
sha256 = "0bk4x9l399f80lmz4asx7s5fcsgrfdb6xyymbq884621x4z3d2vp";
|
||||
};
|
||||
tinc-graph = pkgs.callPackage tinc-graph-source {};
|
||||
in
|
||||
{
|
||||
systemd.services.retiolum-index = {
|
||||
description = "Retiolum indexing service";
|
||||
wants = [ "tinc.${network}.service" ];
|
||||
script = ''
|
||||
${tinc-graph}/bin/tinc-graph --geoip-file ${geo-ip-database-path} --network ${network} \
|
||||
| ${pkgs.coreutils}/bin/tee network.json \
|
||||
| ${tinc-graph}/bin/tinc-statistics > statistics.json
|
||||
|
||||
cp ${tinc-graph}/static/map.html map.html
|
||||
cp ${tinc-graph}/static/map.html index.html
|
||||
cp ${tinc-graph}/static/graph.html graph.html
|
||||
'';
|
||||
startAt = "hourly";
|
||||
path = [ pkgs.coreutils pkgs.jq pkgs.tinc_pre ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
StateDirectory = stateDirectory;
|
||||
WorkingDirectory = "/var/lib/${stateDirectory}";
|
||||
};
|
||||
};
|
||||
|
||||
services.geoipupdate = {
|
||||
enable = true;
|
||||
settings = {
|
||||
AccountID = 608777;
|
||||
LicenseKey = toString <system-secrets/maxmind/license.key>;
|
||||
EditionIDs = [ "GeoLite2-City" ];
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
virtualHosts."graph.r".locations."/".root = "/var/lib/${stateDirectory}";
|
||||
};
|
||||
|
||||
systemd.services.geoip-share = {
|
||||
after = [ "geoipupdate.service" ];
|
||||
script = let
|
||||
cyberlocker-tools = pkgs.callPackage <stockholm/krebs/5pkgs/simple/cyberlocker-tools> {};
|
||||
in "${cyberlocker-tools}/bin/cput ${geo-ip-database} < ${geo-ip-database-path}";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
DynamicUser = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{ config, pkgs, ... }: {
|
||||
imports = [
|
||||
<niveum/modules/retiolum.nix>
|
||||
../modules/retiolum.nix
|
||||
];
|
||||
|
||||
networking.hosts = { "42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ]; };
|
||||
|
||||
@@ -4,46 +4,6 @@ let
|
||||
in{
|
||||
home-manager.users.me.programs.rofi = {
|
||||
enable = true;
|
||||
separator = "solid";
|
||||
scrollbar = false;
|
||||
borderWidth = 0;
|
||||
lines = 5;
|
||||
font = "Monospace 10";
|
||||
colors = rec {
|
||||
window = rec {
|
||||
background = colours.foreground;
|
||||
border = background;
|
||||
separator = colours.black.bright;
|
||||
};
|
||||
rows = {
|
||||
normal = {
|
||||
background = window.background;
|
||||
backgroundAlt = window.background;
|
||||
foreground = colours.background;
|
||||
highlight = {
|
||||
foreground = colours.cyan.dark;
|
||||
inherit (window) background;
|
||||
};
|
||||
};
|
||||
active = {
|
||||
background = window.background;
|
||||
backgroundAlt = window.background;
|
||||
foreground = colours.yellow.dark;
|
||||
highlight = {
|
||||
foreground = colours.green.dark;
|
||||
inherit (window) background;
|
||||
};
|
||||
};
|
||||
urgent = {
|
||||
background = window.background;
|
||||
backgroundAlt = window.background;
|
||||
foreground = colours.red.dark;
|
||||
highlight = {
|
||||
foreground = colours.magenta.dark;
|
||||
inherit (window) background;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) sshPort kieran;
|
||||
inherit (import ../lib) sshPort kieran;
|
||||
in {
|
||||
services.xserver.displayManager.sessionCommands = "${pkgs.openssh}/bin/ssh-add";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) sshPort kieran;
|
||||
inherit (import ../lib) sshPort kieran;
|
||||
in
|
||||
{
|
||||
users.motd = "Welcome to ${config.networking.hostName}!";
|
||||
|
||||
61
configs/tarot.nix
Normal file
61
configs/tarot.nix
Normal file
@@ -0,0 +1,61 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
tarotPort = 7407;
|
||||
tarotFiles = pkgs.fetchzip {
|
||||
url = "https://c.krebsco.de/tarot.zip";
|
||||
sha256 = "0jl5vdwlj17pqp94yj02xgsb1gyvs9i08m83kac0jdnhfjl2f75a";
|
||||
stripRoot = false;
|
||||
};
|
||||
tarotKey = builtins.fetchurl {
|
||||
url = "http://c.krebsco.de/tarot.pdf";
|
||||
sha256 = "1n2m53kjg2vj9dbr70b9jrsbqwdfrcb48l4wswn21549fi24g6dx";
|
||||
};
|
||||
in
|
||||
{
|
||||
krebs.htgen.tarot = {
|
||||
port = tarotPort;
|
||||
user.name = "radio";
|
||||
script = ''. ${pkgs.writers.writeDash "tarot" ''
|
||||
case "$Method $Request_URI" in
|
||||
"GET /")
|
||||
if item=$(${pkgs.findutils}/bin/find ${toString tarotFiles} -type f | ${pkgs.coreutils}/bin/shuf -n1); then
|
||||
card=$(mktemp --tmpdir tarot.XXX)
|
||||
trap 'rm $card' EXIT
|
||||
reverse=$(${pkgs.coreutils}/bin/shuf -i0-1 -n1)
|
||||
if [ "$reverse" -eq 1 ]; then
|
||||
${pkgs.imagemagick}/bin/convert -rotate 180 "$item" "$card"
|
||||
else
|
||||
${pkgs.coreutils}/bin/cp "$item" "$card"
|
||||
fi
|
||||
printf 'HTTP/1.1 200 OK\r\n'
|
||||
printf 'Content-Type: %s\r\n' "$(${pkgs.file}/bin/file -ib "$card")"
|
||||
printf 'Server: %s\r\n' "$Server"
|
||||
printf 'Connection: close\r\n'
|
||||
printf 'Content-Length: %d\r\n' $(${pkgs.coreutils}/bin/wc -c < "$card")
|
||||
printf '\r\n'
|
||||
cat "$card"
|
||||
exit
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
''}'';
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."tarot.kmein.de" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations = {
|
||||
"/".proxyPass = "http://127.0.0.1:${toString tarotPort}";
|
||||
"/files/" = {
|
||||
root = pkgs.linkFarm "tarot" [
|
||||
{ name = "files/key.pdf"; path = tarotKey; }
|
||||
{ name = "files/cards"; path = tarotFiles; }
|
||||
];
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
charset UTF-8;
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
53
configs/telegram-bots/astrology.nix
Normal file
53
configs/telegram-bots/astrology.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
nixpkgs-unstable = import <nixpkgs-unstable> {};
|
||||
toSymbols = pkgs.writers.writeDash "to-symbols" ''
|
||||
${pkgs.gnused}/bin/sed '
|
||||
s/\bTri\b/△/;
|
||||
s/\bOpp\b/☍/;
|
||||
s/\bSqu\b/□/;
|
||||
s/\bSex\b/⚹/;
|
||||
s/\bCon\b/☌/;
|
||||
s/Sun/☉/g;
|
||||
s/Moon/☽/g;
|
||||
s/Mercury/☿/g;
|
||||
s/Venus/♀/g;
|
||||
s/Mars/♂/g;
|
||||
s/Jupiter/♃/g;
|
||||
s/Saturn/♄/g;
|
||||
s/Uranus/♅/g;
|
||||
s/Neptune/♆/g;
|
||||
s/Pluto/♇/g;
|
||||
s/North Node/☊/g;
|
||||
s/\bLeo\b/♌/g;
|
||||
s/\bCan\(cer\)\?\b/♋/g;
|
||||
s/\bGem\(ini\)\?\b/♊/g;
|
||||
s/\bVir\(go\)\?\b/♍/g;
|
||||
s/\bLib\(ra\)\?\b/♎/g;
|
||||
s/\bTau\(rus\)\?\b/♉/g;
|
||||
s/\bAri\(es\)\?\b/♈/g;
|
||||
s/\bSco\(rpio\)\?\b/♏/g;
|
||||
s/\bPis\(ces\)\?\b/♓/g;
|
||||
s/\bSag\(ittarius\)\?\b/♐/g;
|
||||
s/\bAqu\(arius\)\?\b/♒/g;
|
||||
s/\bCap\(ricorn\)\?\b/♑/g;
|
||||
s/-->/⟶/g;
|
||||
s/\s\+/ /g; # replace multiple spaces by one
|
||||
s/^.*\([ 0-9]\{2\}:[0-9]\{2\}\) /\1 /; # remove date at beginning of line (but not everything up to v/c X:XX)
|
||||
s/^\s*//
|
||||
'
|
||||
'';
|
||||
in {
|
||||
niveum.telegramBots.transits = {
|
||||
enable = true;
|
||||
time = "4:00";
|
||||
token = lib.strings.fileContents <system-secrets/telegram/kmein.token>;
|
||||
chatIds = [ "18980945" ];
|
||||
command = toString (pkgs.writers.writeDash "common-transits" ''
|
||||
{
|
||||
${nixpkgs-unstable.astrolog}/bin/astrolog -n -zN Berlin -Yt -Yd -d -R Uranus Neptune Pluto
|
||||
${nixpkgs-unstable.astrolog}/bin/astrolog -Yt -Yd -q 10 22 1999 6:32 -zN Kassel -td $(${pkgs.coreutils}/bin/date +'%m %d %Y') -R Uranus Neptune Pluto
|
||||
} | ${toSymbols} | ${pkgs.coreutils}/bin/sort -n
|
||||
'');
|
||||
};
|
||||
}
|
||||
@@ -14,6 +14,7 @@ let
|
||||
in {
|
||||
imports = [
|
||||
./literature-quote.nix
|
||||
./astrology.nix
|
||||
./autorenkalender.nix
|
||||
./nachtischsatan.nix
|
||||
./tlg-wotd.nix
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
let
|
||||
theme = (import <niveum/lib>).theme pkgs;
|
||||
theme = (import ../lib).theme pkgs;
|
||||
in {
|
||||
environment.systemPackages =
|
||||
[ theme.gtk.package theme.icon.package theme.cursor.package ];
|
||||
|
||||
@@ -4,7 +4,7 @@ let
|
||||
living-room-id = 131090;
|
||||
in
|
||||
{
|
||||
imports = [ <niveum/modules/traadfri.nix> ];
|
||||
imports = [ ../modules/traadfri.nix ];
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writeDashBin "traadfri-party" ''
|
||||
|
||||
@@ -19,17 +19,15 @@ in
|
||||
openDefaultPorts = true;
|
||||
configDir = "${mpd-directory}/.config/syncthing";
|
||||
dataDir = "${mpd-directory}/.config/syncthing";
|
||||
declarative = rec {
|
||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||
key = toString <system-secrets/syncthing/key.pem>;
|
||||
devices = {
|
||||
inherit ((import <niveum/lib>).syncthing.devices) kabsa manakish heym;
|
||||
};
|
||||
folders.${config.services.mpd.musicDirectory} = {
|
||||
devices = [ "heym" "kabsa" "manakish" ];
|
||||
id = "music";
|
||||
type = "receiveonly";
|
||||
};
|
||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||
key = toString <system-secrets/syncthing/key.pem>;
|
||||
devices = {
|
||||
inherit ((import <niveum/lib>).syncthing.devices) kabsa manakish heym;
|
||||
};
|
||||
folders.${config.services.mpd.musicDirectory} = {
|
||||
devices = [ "heym" "kabsa" "manakish" ];
|
||||
id = "music";
|
||||
type = "receiveonly";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -97,6 +95,7 @@ in
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
@@ -111,4 +110,5 @@ in
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -25,13 +25,26 @@ let
|
||||
{
|
||||
name = "Tatort";
|
||||
url = "https://www.daserste.de/unterhaltung/krimi/tatort/vorschau/index.html";
|
||||
filter = [ "html2text" "strip" ];
|
||||
filter = [
|
||||
"html2text"
|
||||
"strip"
|
||||
{
|
||||
shellpipe = ''
|
||||
${pkgs.gnused}/bin/sed 's/ / /g;s/))/&\n/g;s/ \+/ /g'
|
||||
'';
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "Kratylos";
|
||||
url = "https://kratylos.reichert-online.org/current_issue/KRATYLOS";
|
||||
filter = [ { element-by-id = "content"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Zeno Free E-Books";
|
||||
url = "http://www.zeno.org/Lesesaal/M/E-Books";
|
||||
filter = [ { element-by-class = "zenoCOMain"; } "html2text" "strip" ];
|
||||
}
|
||||
{
|
||||
name = "Indogermanische Forschungen";
|
||||
url = "https://www.degruyter.com/journal/key/INDO/html";
|
||||
@@ -120,8 +133,11 @@ in
|
||||
home = urlwatchDir;
|
||||
createHome = true;
|
||||
isSystemUser = true;
|
||||
group = "urlwatch";
|
||||
};
|
||||
|
||||
users.groups.urlwatch = {};
|
||||
|
||||
systemd.services.urlwatch = {
|
||||
enable = true;
|
||||
startAt = "*-*-* 05:00:00";
|
||||
@@ -132,6 +148,7 @@ in
|
||||
'';
|
||||
serviceConfig = {
|
||||
User = config.users.extraUsers.urlwatch.name;
|
||||
Group = config.users.groups.urlwatch.name;
|
||||
WorkingDirectory = config.users.extraUsers.urlwatch.home;
|
||||
PermissionsStartOnly = "true";
|
||||
PrivateTmp = "true";
|
||||
|
||||
@@ -23,7 +23,7 @@ in {
|
||||
'';
|
||||
weechat = pkgs.weechat.override {
|
||||
configure = { ... }: {
|
||||
scripts = [ pkgs.weechatScripts.weechat-autosort pkgs.weechatScripts.colorize_nicks ];
|
||||
scripts = [ pkgs.weechatScripts.weechat-autosort pkgs.weechatScripts.colorize_nicks pkgs.weechatScripts.weechat-matrix ];
|
||||
init = let
|
||||
coolColors = lib.lists.subtractLists (lib.range 52 69 ++ lib.range 231 248) (lib.range 31 254);
|
||||
nick = "kmein";
|
||||
@@ -43,14 +43,18 @@ in {
|
||||
/server add oftc irc.oftc.net/6697 -ssl -ipv6
|
||||
/server add retiolum irc.r
|
||||
/server add news news.r
|
||||
/matrix server add nibbana nibbana.jp
|
||||
|
||||
/alias add mod /quote omode $channel +o $nick
|
||||
|
||||
/relay add weechat 9000
|
||||
/set relay.network.password ${relayPassword}
|
||||
|
||||
/set matrix.server.nibbana.username ${nick}
|
||||
/set matrix.server.nibbana.password "${lib.strings.fileContents <system-secrets/matrix/nibbana>}"
|
||||
|
||||
/set irc.server.oftc.command /msg nickserv IDENTIFY ${lib.strings.fileContents <system-secrets/irc/oftc>};/msg nickserv SET CLOAK ON
|
||||
/set irc.server.oftc.autojoin "#osm,#osm-de"
|
||||
/set irc.server.oftc.autojoin "#osm,#osm-de,#home-manager"
|
||||
|
||||
/set irc.server.hackint.autojoin "#krebs,#nixos,#the_playlist"
|
||||
/set irc.server.hackint.sasl_mechanism plain
|
||||
@@ -68,7 +72,7 @@ in {
|
||||
/set irc.server.news.command "/oper aids balls"
|
||||
/set logger.level.irc.news 0
|
||||
|
||||
/filter addreplace zerocovid * * [kc]orona|[kc]ovid|virus|lockdown|va[kc][sc]in|mutante|mutation|impf|pandemi|κορ[ωο]ν[αο]ϊό|корона|expert|infe[ck]t|infizi|in[cz]iden[cz]|sars-cov|drosten|virolog|lauterbach|delta
|
||||
/filter addreplace zerocovid * * [kc]orona|💉|🤒|😷|[kc]ovid|virus|lockdown|va[kc][sc]in|mutante|mutation|impf|pandemi|κορ[ωο]ν[αο]ϊό|корона|expert|infe[ck]t|infizi|in[cz]iden[cz]|sars-cov|drosten|virolog|lauterbach|delta|omi[ck]ron|epidemi|booster|r-wert
|
||||
/filter addreplace joinquit * irc_join,irc_part,irc_quit,irc_nick *
|
||||
/filter addreplace playlist_topic irc.*.#the_playlist irc_topic *
|
||||
/filter addreplace brockman_notice irc.news.* irc_notice *
|
||||
@@ -80,6 +84,7 @@ in {
|
||||
/connect hackint
|
||||
/connect retiolum
|
||||
/connect news
|
||||
/matrix connect nibbana
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
96
deploy.nix
96
deploy.nix
@@ -1,68 +1,40 @@
|
||||
{ pkgs, secrets, writeCommand, lib, nixosRebuildCommand ? "switch" }:
|
||||
let
|
||||
inherit (import ./lib/default.nix) sshPort;
|
||||
sshPort = 22022;
|
||||
|
||||
gitFromJson = path:
|
||||
let object = importJson path;
|
||||
in {
|
||||
inherit (object) url;
|
||||
ref = object.rev;
|
||||
# command that ensures we use flake.nix during switch
|
||||
command = targetPath:
|
||||
let
|
||||
commandLine = "TMPDIR=/tmp nixos-rebuild ${nixosRebuildCommand} --flake ${targetPath} -L --keep-going";
|
||||
in
|
||||
''
|
||||
echo '${commandLine}'
|
||||
nix-shell \
|
||||
-E "with import <nixpkgs> {}; mkShell { buildInputs = [ git (nixos { nix.package = nixFlakes; }).nixos-rebuild ]; }" \
|
||||
--run '${commandLine}'
|
||||
'';
|
||||
|
||||
source = name: {
|
||||
niveum.file = toString ./.;
|
||||
system-secrets.pass = {
|
||||
dir = secrets;
|
||||
name = "systems/${name}";
|
||||
};
|
||||
secrets.pass = {
|
||||
dir = secrets;
|
||||
name = "shared";
|
||||
};
|
||||
krops = builtins.fetchGit (gitFromJson .versions/krops.json);
|
||||
lib = import "${krops}/lib";
|
||||
pkgs = import "${krops}/pkgs" { };
|
||||
importJson = (import <nixpkgs> { }).lib.importJSON;
|
||||
|
||||
regularSystem = { path, name, address }: {
|
||||
source = lib.evalSource [{
|
||||
niveum.file = toString ./.;
|
||||
system.file = toString path;
|
||||
nixos-config.symlink = "system/configuration.nix";
|
||||
|
||||
nixpkgs.git = gitFromJson .versions/nixpkgs.json // { shallow = true; };
|
||||
nixpkgs-unstable.git = gitFromJson .versions/nixpkgs-unstable.json // { shallow = true; };
|
||||
home-manager.git = gitFromJson .versions/home-manager.json;
|
||||
stockholm.git = gitFromJson .versions/stockholm.json;
|
||||
retiolum.git = gitFromJson .versions/retiolum.json;
|
||||
nur.git = gitFromJson .versions/nur.json;
|
||||
nixpkgs-mozilla.git = gitFromJson .versions/nixpkgs-mozilla.json;
|
||||
system-secrets.pass = {
|
||||
dir = toString ~/.password-store;
|
||||
name = "systems/${name}";
|
||||
};
|
||||
secrets.pass = {
|
||||
dir = toString ~/.password-store;
|
||||
name = "shared";
|
||||
};
|
||||
}];
|
||||
target = "root@${address}:${toString sshPort}";
|
||||
};
|
||||
inherit (pkgs.krops) writeDeploy;
|
||||
|
||||
deploy = {name, host}: writeCommand "/bin/system" {
|
||||
source = lib.evalSource [ (source name) ];
|
||||
force = true;
|
||||
target = lib.mkTarget "root@${host}:${toString sshPort}/var/krops/niveum";
|
||||
inherit command;
|
||||
};
|
||||
in {
|
||||
zaatar = writeDeploy "deploy-zaatar" (regularSystem {
|
||||
path = systems/zaatar;
|
||||
name = "zaatar";
|
||||
address = "zaatar.r";
|
||||
});
|
||||
kabsa = writeDeploy "deploy-kabsa" (regularSystem {
|
||||
path = systems/kabsa;
|
||||
name = "kabsa";
|
||||
address = "kabsa.r";
|
||||
});
|
||||
toum = writeDeploy "deploy-toum" (regularSystem {
|
||||
path = systems/toum;
|
||||
name = "toum";
|
||||
address = "toum.r";
|
||||
}) // {
|
||||
buildTarget = "${builtins.getEnv "USER"}@localhost/${builtins.getEnv "HOME"}/.cache/krops";
|
||||
};
|
||||
makanek = writeDeploy "deploy-makanek" (regularSystem {
|
||||
path = systems/makanek;
|
||||
name = "makanek";
|
||||
address = "makanek.r";
|
||||
});
|
||||
manakish = writeDeploy "deploy-manakish" (regularSystem {
|
||||
path = systems/manakish;
|
||||
name = "manakish";
|
||||
address = "manakish.r";
|
||||
});
|
||||
zaatar = deploy { name = "zaatar"; host = "zaatar.r"; };
|
||||
kabsa = deploy { name = "kabsa"; host = "kabsa.r"; };
|
||||
manakish = deploy { name = "manakish"; host = "manakish.r"; };
|
||||
makanek = deploy { name = "makanek"; host = "makanek.r"; };
|
||||
}
|
||||
|
||||
174
flake.lock
generated
Normal file
174
flake.lock
generated
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1638122382,
|
||||
"narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "74f7e4319258e287b0f9cb95426c9853b282730b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1639871969,
|
||||
"narHash": "sha256-6feWUnMygRzA9tzkrfAzpA5/NBYg75bkFxnqb1DtD7E=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "697cc8c68ed6a606296efbbe9614c32537078756",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-21.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"krops": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1632420452,
|
||||
"narHash": "sha256-ncK6vABW/Ku9XI0kqj1otarUfblryoQzSaOCnaZ0oSs=",
|
||||
"owner": "Mic92",
|
||||
"repo": "krops",
|
||||
"rev": "0388970c568905fedcbf429e5745aacd4f7a6633",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "krops",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-writers": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1554228333,
|
||||
"narHash": "sha256-hG/PlcCvCQhNcU55NpHfATkyH9k6cZmO7uvBoJjasXU=",
|
||||
"ref": "master",
|
||||
"rev": "c528cf970e292790b414b4c1c8c8e9d7e73b2a71",
|
||||
"revCount": 32,
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/nix-writers"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/nix-writers"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1640759603,
|
||||
"narHash": "sha256-k4d7oC6GvDV1OKxG325JUDpKtZcDUPEiddnJMOQQ/x8=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e101dc111ac1e5a21efca7822417acc1cb92013a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "release-21.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1640540585,
|
||||
"narHash": "sha256-cCmknKFjWgam9jq+58wSd0Z4REia8mjBP65kXcL3ki8=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ac169ec6371f0d835542db654a65e0f2feb07838",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"retiolum": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1640734423,
|
||||
"narHash": "sha256-i/M1nyPnIEqV7K5dn0Q7V5mRtfzspH+AM6HbgPYGreI=",
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"rev": "0e11e0119f330ea103a44e3502149ae50c1a299d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"home-manager": "home-manager",
|
||||
"krops": "krops",
|
||||
"nix-writers": "nix-writers",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"retiolum": "retiolum",
|
||||
"secrets": "secrets",
|
||||
"stockholm": "stockholm"
|
||||
}
|
||||
},
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1640701876,
|
||||
"narHash": "sha256-2vQ32k/z0Jh+Ade32mRA6tENetvWI6SNNrR5DJiBuWw=",
|
||||
"ref": "master",
|
||||
"rev": "120635422c7fb78c94e6a182fc384c98fb5cf4ce",
|
||||
"revCount": 170,
|
||||
"type": "git",
|
||||
"url": "file:///home/kfm/projects/sphinx"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "file:///home/kfm/projects/sphinx"
|
||||
}
|
||||
},
|
||||
"stockholm": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1640733142,
|
||||
"narHash": "sha256-HzSEyYTGPoGAfgl+lZLb/DDUCQRoZ2iN7oTLhl+1KTQ=",
|
||||
"ref": "master",
|
||||
"rev": "687948cfe5154e03f93886dd27dc30c7910ba754",
|
||||
"revCount": 10222,
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/stockholm"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/stockholm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
99
flake.nix
Normal file
99
flake.nix
Normal file
@@ -0,0 +1,99 @@
|
||||
{
|
||||
description = "niveum systems";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/release-21.11";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
secrets = {
|
||||
url = "/home/kfm/.password-store";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
flake-utils = {
|
||||
url = "github:numtide/flake-utils";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-21.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
retiolum = {
|
||||
url = "github:krebs/retiolum";
|
||||
flake = false;
|
||||
};
|
||||
nix-writers = {
|
||||
url = "git+https://cgit.krebsco.de/nix-writers";
|
||||
flake = false;
|
||||
};
|
||||
stockholm = {
|
||||
url = "git+https://cgit.krebsco.de/stockholm";
|
||||
flake = false;
|
||||
};
|
||||
krops = {
|
||||
url = "github:Mic92/krops";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, stockholm, secrets, nixpkgs-unstable, home-manager, retiolum, krops, nix-writers, ... }@inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
writeCommand = krops.packages.${system}.writeCommand;
|
||||
niveumSystem = configuration: nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
modules = defaultModules ++ [ configuration ];
|
||||
};
|
||||
defaultModules = [
|
||||
{ _module.args.inputs = inputs; }
|
||||
({ pkgs, ... }: {
|
||||
nix = {
|
||||
nixPath = [ "nixpkgs=${pkgs.path}" ];
|
||||
package = pkgs.nixFlakes;
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
nixpkgs.overlays = [
|
||||
(_self: _super: {
|
||||
unstable = nixpkgs-unstable.legacyPackages.${pkgs.system};
|
||||
})
|
||||
(import "${nix-writers}/pkgs")
|
||||
# (import <stockholm/krebs/5pkgs>)
|
||||
];
|
||||
})
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
}
|
||||
];
|
||||
in
|
||||
{
|
||||
nixosConfigurations = {
|
||||
kabsa = niveumSystem systems/kabsa/configuration.nix;
|
||||
makanek = niveumSystem systems/makanek/configuration.nix;
|
||||
manakish = niveumSystem systems/manakish/configuration.nix;
|
||||
zaatar = niveumSystem systems/zaatar/configuration.nix;
|
||||
};
|
||||
|
||||
apps.${system} = {
|
||||
# nix run ".#deploy.kabsa"
|
||||
deploy = pkgs.callPackage ./deploy.nix {
|
||||
inherit secrets writeCommand;
|
||||
inherit (krops) lib;
|
||||
};
|
||||
|
||||
# nix run ".#test.kabsa"
|
||||
test = pkgs.callPackage ./deploy.nix {
|
||||
inherit secrets writeCommand;
|
||||
inherit (krops) lib;
|
||||
nixosRebuildCommand = "test";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -7,6 +7,12 @@ rec {
|
||||
removeRules = lib.concatMapStringsSep "\n" (rule: "iptables -D ${rule} || true");
|
||||
};
|
||||
|
||||
serveHtml = file: pkgs: ''
|
||||
default_type "text/html";
|
||||
root ${pkgs.linkFarm "fahrplan" [{ name = "index.html"; path = file; }]};
|
||||
index index.html;
|
||||
'';
|
||||
|
||||
sshPort = 22022;
|
||||
|
||||
colours = import ./colours/mac-os.nix;
|
||||
@@ -28,6 +34,8 @@ rec {
|
||||
|
||||
defaultApplications = import ./default-applications.nix;
|
||||
|
||||
retiolumAddresses = import ./retiolum-network.nix;
|
||||
|
||||
localAddresses = import ./local-network.nix;
|
||||
|
||||
email-sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKz33wHtPuIfgXEb0+hybxFGV9ZuPsDTLUZo/+hlcdA";
|
||||
|
||||
@@ -92,6 +92,43 @@ in {
|
||||
units = "metric";
|
||||
};
|
||||
}
|
||||
{
|
||||
block = "custom";
|
||||
interval = 60 * 5;
|
||||
command = let inherit (import <niveum/configs/spacetime.nix>) location; in "${pkgs.scripts.horoscope}/bin/horoscope --latitude=${toString location.latitude} --longitude=${toString location.longitude}";
|
||||
}
|
||||
{
|
||||
block = "custom";
|
||||
interval = 60 * 5;
|
||||
command = let spacetime = import <niveum/configs/spacetime.nix>; in pkgs.writers.writePython3 "sun.py" { libraries = [ pkgs.python3Packages.astral ]; flakeIgnore = [ "E121" "E501" ]; }
|
||||
''
|
||||
import astral
|
||||
import astral.moon
|
||||
import astral.sun
|
||||
import math
|
||||
|
||||
moon_phases = {
|
||||
0: "🌑",
|
||||
3.5: "🌒",
|
||||
7: "🌓",
|
||||
10.5: "🌔",
|
||||
14: "🌕",
|
||||
17.5: "🌖",
|
||||
21: "🌗",
|
||||
24.5: "🌘",
|
||||
28: "🌑",
|
||||
}
|
||||
current_phase = astral.moon.phase()
|
||||
closest_phase = min(moon_phases.keys(), key=lambda x: abs(current_phase - x))
|
||||
|
||||
moon_percentage = round(100 * math.sin(current_phase / 28 * math.pi), 1)
|
||||
|
||||
city = astral.LocationInfo("Berlin", "Germany", "${spacetime.time.timeZone}", ${toString spacetime.location.latitude}, ${toString spacetime.location.longitude})
|
||||
sun = astral.sun.sun(city.observer, date=astral.today(), tzinfo=city.timezone)
|
||||
|
||||
print("🌅 {} 🌇 {} {} {}%".format(sun["sunrise"].strftime("%R"), sun["sunset"].strftime("%R"), moon_phases[closest_phase], moon_percentage))
|
||||
'';
|
||||
}
|
||||
{
|
||||
block = "custom";
|
||||
interval = 60 * 60;
|
||||
@@ -100,17 +137,6 @@ in {
|
||||
| ${pkgs.jq}/bin/jq -r '"💉 Ⅰ \(.data.quote * 1000 | floor | . / 10)% Ⅱ \(.data.secondVaccination.quote * 1000 | floor | . / 10)%"'
|
||||
'';
|
||||
}
|
||||
{
|
||||
block = "custom";
|
||||
interval = 30;
|
||||
command =
|
||||
let query = "tag:unread AND tag:inbox";
|
||||
in pkgs.writers.writeDash "count-new-mail" ''
|
||||
mail_count="$(${pkgs.notmuch}/bin/notmuch search ${lib.escapeShellArg query} | wc -l)"
|
||||
[ "$mail_count" = 0 ] && printf "📭" || printf "📬"
|
||||
echo "$mail_count"
|
||||
'';
|
||||
}
|
||||
(let service = "openvpn-hu-berlin"; in {
|
||||
block = "custom";
|
||||
interval = 5;
|
||||
|
||||
21
lib/retiolum-network.nix
Normal file
21
lib/retiolum-network.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
kabsa = {
|
||||
ipv4 = "10.243.2.4";
|
||||
ipv6 = "42:0:3c46:861f:a118:8e9a:82c9:3d";
|
||||
};
|
||||
|
||||
zaatar = {
|
||||
ipv4 = "10.243.2.34";
|
||||
ipv6 = "42:0:3c46:156e:10b6:3bd6:6e82:b2cd";
|
||||
};
|
||||
|
||||
makanek = {
|
||||
ipv4 = "10.243.2.84";
|
||||
ipv6 = "42:0:3c46:f7a9:1f0a:1b2b:822a:6050";
|
||||
};
|
||||
|
||||
manakish = {
|
||||
ipv4 = "10.243.2.85";
|
||||
ipv6 = "42:0:3c46:ac99:ae36:cb8:c551:ba27";
|
||||
};
|
||||
}
|
||||
@@ -50,12 +50,20 @@ in [
|
||||
desc = "Diminutive from lassus (“weary, faint, tired”). A programming human. Doing superior professional art.";
|
||||
}
|
||||
{
|
||||
stream = "https://radio.xn--kiern-0qa.de/lyrik/listen.ogg";
|
||||
stream = "https://cdn.c3voc.de/hls/abchillgleis/segment_Native.m3u8";
|
||||
station = "RC3 Abchillgleis";
|
||||
}
|
||||
{
|
||||
stream = "https://cdn.c3voc.de/hls/c3lounge/segment_Native.m3u8";
|
||||
station = "RC3 Lounge";
|
||||
}
|
||||
{
|
||||
stream = "https://radio.kmein.de/lyrik/listen.ogg";
|
||||
station = "Lyrik";
|
||||
desc = "Lyrik-Lesung rund um die Uhr.";
|
||||
}
|
||||
{
|
||||
stream = "https://radio.xn--kiern-0qa.de/lyrikline/listen.ogg";
|
||||
stream = "https://radio.kmein.de/lyrikline/listen.ogg";
|
||||
station = "Lyrikline";
|
||||
logo = "https://www.lyrikline.org/themes/lyrik/svg/Logo_lyrikline_pure.svg";
|
||||
desc = "24/7 zufällige Wiedergaben von lyrikline.org.";
|
||||
|
||||
@@ -132,6 +132,7 @@ if has("autocmd")
|
||||
autocmd bufnewfile,bufread *.jq packadd jq.vim
|
||||
autocmd bufnewfile,bufread *.re packadd vim-reason-plus | set filetype=reason
|
||||
autocmd bufnewfile,bufread *.journal packadd vim-ledger | set filetype=ledger shiftwidth=4
|
||||
autocmd bufnewfile,bufread *.md packadd vim-pandoc | packadd vim-pandoc-syntax
|
||||
autocmd bufnewfile,bufread urls,config set filetype=conf
|
||||
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
|
||||
autocmd bufnewfile,bufread *.dhall packadd dhall-vim | set filetype=dhall
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
./constants.nix
|
||||
./dropbox.nix
|
||||
./retiolum.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
with lib;
|
||||
let cfg = config.niveum.dropbox;
|
||||
in {
|
||||
options.niveum.dropbox = { enable = mkEnableOption "Dropbox"; };
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.dropbox-cli ];
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [ 17500 ];
|
||||
allowedUDPPorts = [ 17500 ];
|
||||
};
|
||||
|
||||
systemd.user.services.dropbox = {
|
||||
description = "Dropbox synchronisation service";
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.dropbox.out}/bin/dropbox";
|
||||
ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID";
|
||||
KillMode = "control-group"; # upstream recommends process
|
||||
Restart = "on-failure";
|
||||
PrivateTmp = true;
|
||||
ProtectSystem = "full";
|
||||
Nice = 10;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -56,6 +56,7 @@ in {
|
||||
users.users.moodle-dl = {
|
||||
isSystemUser = true;
|
||||
home = cfg.directory;
|
||||
group = "moodle-dl";
|
||||
};
|
||||
|
||||
users.groups.moodle-dl = {};
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{ inputs, config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
netname = "retiolum";
|
||||
cfg = config.networking.retiolum;
|
||||
inherit (inputs) retiolum;
|
||||
in {
|
||||
options = {
|
||||
networking.retiolum.ipv4 = mkOption {
|
||||
@@ -31,16 +32,17 @@ in {
|
||||
services.tinc.networks.${netname} = {
|
||||
name = cfg.nodename;
|
||||
hosts = builtins.mapAttrs
|
||||
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
|
||||
(builtins.readDir <retiolum/hosts>);
|
||||
(name: _: builtins.readFile "${retiolum}/hosts/${name}")
|
||||
(builtins.readDir "${retiolum}/hosts");
|
||||
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
||||
ed25519PrivateKeyFile = toString <system-secrets/retiolum.ed25519>;
|
||||
extraConfig = ''
|
||||
LocalDiscovery = yes
|
||||
AutoConnect = yes
|
||||
'';
|
||||
};
|
||||
|
||||
networking.extraHosts = builtins.readFile (toString <retiolum/etc.hosts>);
|
||||
networking.extraHosts = builtins.readFile (toString "${retiolum}/etc.hosts");
|
||||
|
||||
environment.systemPackages = [ config.services.tinc.networks.${netname}.package ];
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ let
|
||||
traadfri-package = pkgs.fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "traadfri";
|
||||
rev = "a55b778cf4c7f124e75070b056c90f5a8043bc45";
|
||||
sha256 = "10ggqksdbgmcwc2f3xs6abjf9zpvv554xfl3b3bblmfijgr6srv9";
|
||||
rev = "cf46bd09cd3263b90a09b0ca979aa705a4c3671c";
|
||||
sha256 = "0az9q38pl8fqk00488blhn6rhvwsw2wky3dbdlyz7945ggvxnbyd";
|
||||
};
|
||||
in pkgs.callPackage traadfri-package {
|
||||
libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> { tls = true; };
|
||||
|
||||
@@ -76,7 +76,11 @@ in {
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
users.extraUsers.tuna.isSystemUser = true;
|
||||
users.users.tuna = {
|
||||
isSystemUser = true;
|
||||
group = "tuna";
|
||||
};
|
||||
users.groups.tuna = {};
|
||||
# ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service
|
||||
systemd.services.tuna = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
27
packages/daybook.nix
Normal file
27
packages/daybook.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ lib, stdenv, makeWrapper, pandoc, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "daybook";
|
||||
src = fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "daybook";
|
||||
rev = "db2c34830e09183c80f3381bf5e4c44d52f05d53";
|
||||
sha256 = "0nbsv8f12qh5spq7zhimhdf3p7msk33xrb0ilqvlc6jmlkpislmv";
|
||||
};
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ pandoc ];
|
||||
buildPhase = ''
|
||||
mkdir -p $out/man/man1
|
||||
pandoc --standalone --to man daybook.1.md -o $out/man/man1/daybook.1
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
install daybook $out/bin
|
||||
wrapProgram $out/bin/daybook --prefix PATH ":" ${pandoc}/bin ;
|
||||
'';
|
||||
meta = with lib; {
|
||||
homepage = https://github.com/kmein/daybook;
|
||||
description = "A diary writing utility in sh";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
29
packages/depp.nix
Normal file
29
packages/depp.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ lib, writeShellScriptBin }:
|
||||
let
|
||||
aliasFlag = name: value: "-c alias.${name}=${lib.escapeShellArg value}";
|
||||
aliases = {
|
||||
eroeffne = "init";
|
||||
machnach = "clone";
|
||||
zieh = "pull";
|
||||
fueghinzu = "add";
|
||||
drueck = "push";
|
||||
pfusch = "push --force";
|
||||
zweig = "branch";
|
||||
verzweige = "branch";
|
||||
uebergib = "commit";
|
||||
erde = "rebase";
|
||||
unterscheide = "diff";
|
||||
vereinige = "merge";
|
||||
bunkere = "stash";
|
||||
markiere = "tag";
|
||||
nimm = "checkout";
|
||||
tagebuch = "log";
|
||||
zustand = "status";
|
||||
};
|
||||
in writeShellScriptBin "depp" ''
|
||||
if [ $# -gt 0 ]; then
|
||||
git ${lib.concatStringsSep " " (lib.attrsets.mapAttrsToList aliasFlag aliases)} "$@"
|
||||
else
|
||||
printf "${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: n + " " + v) aliases)}\n"
|
||||
fi
|
||||
''
|
||||
28
packages/devour.nix
Normal file
28
packages/devour.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{ lib, stdenv, xdo, makeWrapper, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "devour";
|
||||
version = "master";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "salman-abedin";
|
||||
repo = "devour";
|
||||
rev = "ceb871c3046ce290c27e2887365b9a19ca38113c";
|
||||
sha256 = "0f2jb8knx7lqy6wmf3rchgq2n2dj496lm8vgcs58rppzrmsk59d5";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ xdo ];
|
||||
|
||||
DESTDIR="$(out)";
|
||||
|
||||
fixupPhase = ''
|
||||
wrapProgram $out/bin/devour --prefix PATH ":" ${xdo}/bin ;
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/salman-abedin/devour";
|
||||
description = "Window Manager agnostic swallowing feature for terminal emulators";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
||||
30
packages/mahlzeit.nix
Normal file
30
packages/mahlzeit.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{ lib, fetchFromGitHub, mkDerivation, ansi-terminal, base, directory, doctest, filepath
|
||||
, megaparsec, optparse-applicative, prettyprinter, process
|
||||
, raw-strings-qq, stdenv, tasty, tasty-hunit, text, yaml
|
||||
}:
|
||||
mkDerivation {
|
||||
pname = "mahlzeit";
|
||||
version = "0.1.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "kmein";
|
||||
repo = "mahlzeit";
|
||||
rev = "954c0fb3f45815999bc65d003794af6a850b069c";
|
||||
sha256 = "046yrr40hjmxkjmwzcvmwb39fxx2v2i6hgdxrjfiwilzvhikarrg";
|
||||
};
|
||||
isLibrary = true;
|
||||
isExecutable = true;
|
||||
libraryHaskellDepends = [
|
||||
ansi-terminal base directory filepath megaparsec prettyprinter text
|
||||
yaml
|
||||
];
|
||||
executableHaskellDepends = [
|
||||
ansi-terminal base directory filepath optparse-applicative process
|
||||
text yaml
|
||||
];
|
||||
testHaskellDepends = [
|
||||
base doctest megaparsec raw-strings-qq tasty tasty-hunit
|
||||
];
|
||||
homepage = "https://github.com/kmein/mahlzeit";
|
||||
description = "Recipe toolkit";
|
||||
license = lib.licenses.mit;
|
||||
}
|
||||
14
packages/man/pandoc.nix
Normal file
14
packages/man/pandoc.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{ stdenv, pandoc, lib, fetchgit }:
|
||||
stdenv.mkDerivation {
|
||||
name = "pandoc-doc";
|
||||
version = pandoc.version;
|
||||
src = fetchgit {
|
||||
url = "https://github.com/jgm/pandoc";
|
||||
rev = pandoc.version;
|
||||
sha256 = "0s4mczbql35wh6bhyi542yln24f530rlsw6akcv7lmp083rrlpy4";
|
||||
};
|
||||
buildPhase = ''
|
||||
mkdir -p $out/man/man1
|
||||
${pandoc}/bin/pandoc -V section=1 --standalone --write=man $src/MANUAL.txt -o $out/man/man1/pandoc.1
|
||||
'';
|
||||
}
|
||||
26
packages/opustags.nix
Normal file
26
packages/opustags.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{ lib, stdenv, cmake, pkgconfig, libogg, fetchFromGitHub }:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "opustags";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fmang";
|
||||
repo = "opustags";
|
||||
rev = version;
|
||||
sha256 = "09z0cdg20algaj2yyhfz3hxh1biwjjvzx1pc2vdc64n8lkswqsc1";
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCMAKE_INSTALL_PREFIX=$out"
|
||||
];
|
||||
|
||||
buildInputs = [ libogg ];
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/fmang/opustags";
|
||||
description = "Ogg Opus tags editor";
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
||||
12
packages/python3Packages/betacode/default.nix
Normal file
12
packages/python3Packages/betacode/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ fetchPypi, buildPythonPackage, pygtrie, ... }:
|
||||
buildPythonPackage rec {
|
||||
pname = "betacode";
|
||||
version = "0.2";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "08fnjzjvnm9m6p4ddyr8qgfb9bs2nipv4ls50784v0xazgxx7siv";
|
||||
};
|
||||
preBuild = ''echo > README.rst'';
|
||||
propagatedBuildInputs = [ pygtrie ];
|
||||
doCheck = false;
|
||||
}
|
||||
14
packages/python3Packages/indic-transliteration/default.nix
Normal file
14
packages/python3Packages/indic-transliteration/default.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{ fetchFromGitHub, buildPythonPackage, backports_functools_lru_cache, selenium, regex, ... }:
|
||||
buildPythonPackage rec {
|
||||
pname = "indic_transliteration";
|
||||
version = "unstable-2020-12-15";
|
||||
src = fetchFromGitHub {
|
||||
repo = pname;
|
||||
owner = "sanskrit-coders";
|
||||
rev = "2ea25a03af15937916b6768835e056166986c567";
|
||||
sha256 = "1pcf800hl0zkcffc47mkjq9mizsxdi0hwxlnij5bvbqdshd3w9ll";
|
||||
};
|
||||
patches = [ ./regex-version.patch ];
|
||||
propagatedBuildInputs = [ backports_functools_lru_cache selenium regex ];
|
||||
doCheck = false;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
diff --git a/requirements.txt b/requirements.txt
|
||||
index 76b12d7..27fdc79 100644
|
||||
--- a/requirements.txt
|
||||
+++ b/requirements.txt
|
||||
@@ -1,3 +1,3 @@
|
||||
backports.functools_lru_cache==1.6.1
|
||||
selenium==3.141.0
|
||||
-regex==2020.10.11
|
||||
+regex>=2020.7.14
|
||||
12
packages/python3Packages/instaloader/default.nix
Normal file
12
packages/python3Packages/instaloader/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ buildPythonApplication, fetchPypi, requests }:
|
||||
let
|
||||
in buildPythonApplication rec {
|
||||
pname = "instaloader";
|
||||
version = "4.2.4";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "02zqb02idk2pzks7dv42vigcmmpjpfhfdyjp911yr0ix7dy3q0b9";
|
||||
};
|
||||
propagatedBuildInputs = [ requests ];
|
||||
doCheck = false;
|
||||
}
|
||||
10
packages/python3Packages/pygtrie/default.nix
Normal file
10
packages/python3Packages/pygtrie/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ fetchPypi, buildPythonPackage, ... }:
|
||||
buildPythonPackage rec {
|
||||
pname = "pygtrie";
|
||||
version = "2.3";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "00x7q4p9r75zdnw3a8vd0d0w0i5l28w408g5bsfl787yv6b1h9i8";
|
||||
};
|
||||
doCheck = false;
|
||||
}
|
||||
23
packages/python3Packages/spotify-cli-linux/default.nix
Normal file
23
packages/python3Packages/spotify-cli-linux/default.nix
Normal file
@@ -0,0 +1,23 @@
|
||||
{ buildPythonPackage, buildPythonApplication, fetchPypi, pytestrunner, six, beautifulsoup4, requests, dbus-python }:
|
||||
let
|
||||
lyricwikia = buildPythonPackage rec {
|
||||
pname = "lyricwikia";
|
||||
version = "0.1.9";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0sa5wkbgp5bpgkl8hgn7byyz9zj0786647ikf2l0k8m4fimq623y";
|
||||
};
|
||||
buildInputs = [ pytestrunner ];
|
||||
propagatedBuildInputs = [ six beautifulsoup4 requests ];
|
||||
doCheck = false;
|
||||
};
|
||||
in buildPythonApplication rec {
|
||||
pname = "spotify-cli-linux";
|
||||
version = "1.4.2";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "1gxich3v2i4lmh60abbw3mw15399afvvqflv8g6plvvbmvxmbgp0";
|
||||
};
|
||||
propagatedBuildInputs = [ lyricwikia dbus-python ];
|
||||
doCheck = false;
|
||||
}
|
||||
31
packages/scripts/auc.nix
Normal file
31
packages/scripts/auc.nix
Normal file
@@ -0,0 +1,31 @@
|
||||
{ stdenv, fetchFromGitHub, lib, pandoc }:
|
||||
let
|
||||
owner = "kamalist";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "auc";
|
||||
version = "2019-04-02";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
inherit owner;
|
||||
repo = "AUC";
|
||||
rev = "66d1cd57472442b4bf3c1ed12ca5cadd57d076b3";
|
||||
sha256 = "0gb4asmlfr19h42f3c5wg9c9i3014if3ymrqan6w9klgzgfyh2la";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/{bin,man/man1}
|
||||
install auc $out/bin
|
||||
${pandoc}/bin/pandoc -V title=${lib.escapeShellArg pname} -V section=1 $src/README.md -s -t man -o $out/man/man1/auc.1
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Command-line Roman calendar";
|
||||
longDescription = ''
|
||||
AUC (Ab Urbe condita) is a command-line Roman calendar tool. Currently it shows the specified date in the format of the Ancient Romans.
|
||||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.kmein ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user