mirror of
https://github.com/kmein/niveum
synced 2026-03-19 03:21:10 +01:00
Compare commits
156 Commits
f91004fff6
...
flakes
| Author | SHA1 | Date | |
|---|---|---|---|
| 06c1be9e09 | |||
| 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 | |||
| dc90c4c6ab | |||
| 4c2a4df663 | |||
| c60e90f001 | |||
| d0f1287c68 |
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 <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";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
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,29 +1,23 @@
|
||||
{ pkgs, lib, config, options, ... }:
|
||||
{ inputs, pkgs, lib, config, options, ... }:
|
||||
let
|
||||
inherit (lib.strings) makeBinPath;
|
||||
inherit (import <niveum/lib>) localAddresses kieran;
|
||||
in {
|
||||
imports = [
|
||||
<home-manager/nixos>
|
||||
<niveum/modules/system-dependent.nix>
|
||||
../modules/system-dependent.nix
|
||||
{
|
||||
boot.supportedFilesystems = [ "ntfs" ];
|
||||
}
|
||||
{
|
||||
nix.nixPath = [
|
||||
"/var/src"
|
||||
"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> {};
|
||||
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { };
|
||||
ix = pkgs.callPackage <niveum/packages/ix.nix> { };
|
||||
@@ -31,11 +25,8 @@ in {
|
||||
};
|
||||
overlays = [
|
||||
(self: super: {
|
||||
scripts = import <niveum/packages/scripts> { pkgs = super; lib = super.lib; };
|
||||
scripts = import <niveum/packages/scripts> { pkgs = super; inherit lib; };
|
||||
})
|
||||
(import <stockholm/krebs/5pkgs/haskell>)
|
||||
(import <stockholm/submodules/nix-writers/pkgs>)
|
||||
(import <stockholm/krebs/5pkgs/override>)
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -69,6 +60,7 @@ in {
|
||||
};
|
||||
|
||||
home-manager.users.me.xdg.enable = true;
|
||||
home-manager.users.me.dconf.enable = false;
|
||||
}
|
||||
{
|
||||
sound.enable = true;
|
||||
@@ -142,7 +134,6 @@ in {
|
||||
};
|
||||
}
|
||||
{ i18n.defaultLocale = "en_GB.UTF-8"; }
|
||||
{ services.illum.enable = true; }
|
||||
{
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
@@ -163,8 +154,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 +197,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,13 +213,13 @@ 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
|
||||
./neomutt.nix
|
||||
./nix.nix
|
||||
./newsboat.nix
|
||||
./flameshot-once.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,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
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
];
|
||||
}];
|
||||
@@ -109,12 +145,12 @@ in
|
||||
{{ define "telegram.default" }}
|
||||
{{range .Alerts -}}
|
||||
{{ if eq .Status "firing" }}
|
||||
⚠ <b>{{ index .Annotations "summary"}}</b>
|
||||
{{ index .Annotations "description" }}
|
||||
⚠ <b>{{ index .Annotations "summary"}}</b>
|
||||
{{ index .Annotations "description" }}
|
||||
|
||||
See on <a href="${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}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
@@ -8,8 +8,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,7 +22,6 @@ in {
|
||||
"Alt+j" = "add video-pan-y -0.05";
|
||||
};
|
||||
scripts = [
|
||||
pkgs.mpvScripts.thumbnail
|
||||
nixpkgs-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,13 +1,84 @@
|
||||
{ pkgs, ... }:
|
||||
{ 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";
|
||||
connection.interface-name = "wlp3s0";
|
||||
connection.permissions = "";
|
||||
wifi.mac-address-blacklist = "";
|
||||
wifi.ssid = name;
|
||||
wifi.mode = "infrastructure";
|
||||
ipv4.dns-search = "";
|
||||
ipv4.method = "auto";
|
||||
ipv6.addr-gen-mode = "stable-privacy";
|
||||
ipv6.dns-search = "";
|
||||
ipv6.method = "auto";
|
||||
proxy = {};
|
||||
} custom;
|
||||
eduroamProfile = {
|
||||
connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf";
|
||||
wifi-security = {
|
||||
group = "ccmp;tkip;";
|
||||
key-mgmt = "wpa-eap";
|
||||
pairwise = "ccmp;";
|
||||
proto = "rsn;";
|
||||
};
|
||||
"802-1x" = {
|
||||
altsubject-matches = "DNS:srv1-radius.cms.hu-berlin.de;DNS:srv2-radius.cms.hu-berlin.de;";
|
||||
anonymous-identity = "anonymous@wlan.hu-berlin.de";
|
||||
ca-cert = pkgs.fetchurl {
|
||||
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/t-telesec_globalroot_class_2.pem";
|
||||
sha256 = "0if8aqd06sid7a0vw009zpa087wxcgdd2x6z2zs4pis5kvyqj2dk";
|
||||
};
|
||||
eap = "ttls;";
|
||||
identity = lib.strings.fileContents <secrets/eduroam/identity>;
|
||||
password = lib.strings.fileContents <secrets/eduroam/password>;
|
||||
phase2-auth = "pap";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [ ../modules/networkmanager-declarative.nix ];
|
||||
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
wifi.macAddress = "random";
|
||||
ethernet.macAddress = "random";
|
||||
unmanaged = [ "docker*" ];
|
||||
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";
|
||||
key-mgmt = "wpa-psk";
|
||||
};
|
||||
};
|
||||
FactoryCommunityGuest = {
|
||||
connection.uuid = "fb1f2e52-651e-48b5-a72c-1accddf31afb";
|
||||
connection.timestamp = "1631885129";
|
||||
wifi.seen-bssids = "54:EC:2F:19:30:DC;54:EC:2F:19:5C:9C;54:EC:2F:58:E4:3C;";
|
||||
wifi-security = {
|
||||
psk = "Factory4ever";
|
||||
auth-alg = "open";
|
||||
key-mgmt = "wpa-psk";
|
||||
};
|
||||
};
|
||||
o2-WLAN66 = {
|
||||
connection.uuid = "c563aec3-f344-4ffb-8d1c-60a6cdac8fe0";
|
||||
wifi-security = {
|
||||
psk = "PK3468KV488T934U";
|
||||
auth-alg = "open";
|
||||
key-mgmt = "wpa-psk";
|
||||
};
|
||||
};
|
||||
"WIFI@DB".connection.uuid = "4eff4e94-8850-4e9f-a338-1787d0d90479";
|
||||
eduroam = eduroamProfile;
|
||||
eduroam_5GHz = eduroamProfile;
|
||||
};
|
||||
};
|
||||
|
||||
users.users.me.extraGroups = [ "networkmanager" ];
|
||||
@@ -25,9 +96,5 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
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" ];
|
||||
};
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
{
|
||||
# enable `nix flake`
|
||||
nix = {
|
||||
package = pkgs.nix;
|
||||
# extraOptions = ''
|
||||
# experimental-features = nix-command
|
||||
# '';
|
||||
package = pkgs.nixFlakes;
|
||||
extraOptions = "experimental-features = nix-command flakes";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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,11 +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
|
||||
@@ -130,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
|
||||
@@ -152,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
|
||||
@@ -169,6 +194,8 @@ in {
|
||||
qrencode
|
||||
wtf
|
||||
|
||||
menstruation
|
||||
|
||||
(pkgs.writers.writeDashBin "worldradio" ''
|
||||
shuf ${worldradio} | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv --no-video
|
||||
'')
|
||||
@@ -181,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
|
||||
|
||||
@@ -3,8 +3,6 @@ let
|
||||
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
||||
in
|
||||
{
|
||||
imports = [ <stockholm/krebs/3modules/power-action.nix> ];
|
||||
|
||||
krebs.power-action = {
|
||||
enable = true;
|
||||
plans.suspend = {
|
||||
|
||||
@@ -1,19 +1,10 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
let
|
||||
inherit (import <niveum/lib>) tmpfilesConfig;
|
||||
inherit (import <niveum/lib>) tmpfilesConfig serveHtml;
|
||||
|
||||
radioStore = "/var/lib/radio";
|
||||
htgenPort = 8080;
|
||||
stations = {
|
||||
meddl = {
|
||||
streamPort = 8000;
|
||||
mpdPort = 6600;
|
||||
description = ''
|
||||
Drachenlord-Radio. Kopie von <a href="https://antenne-asb.ga/">Hit Radio Antenne ASB</a>, dem Anti-Mobbing-Sender.
|
||||
<em>Hier wird nicht nur, aber auch Meddl gespielt.
|
||||
Für dich On Air einer unserer Top Moderatoren Rainer Winkler. Als einer der größten Meddler aller Zeiten, hat er sich schon in seiner Kinheit einen Namen gemacht. Auch wenn er dem Meddl zugeneigt ist und HipHop-Kaschber eigentlich hasst, spielt er mittlerweile gelegentlich auch Techno oder HipHop.</em>
|
||||
'';
|
||||
};
|
||||
lyrikline = {
|
||||
streamPort = 8001;
|
||||
mpdPort = 6601;
|
||||
@@ -72,7 +63,11 @@ in
|
||||
})
|
||||
];
|
||||
|
||||
users.extraUsers.radio.isSystemUser = true;
|
||||
users.extraUsers.radio = {
|
||||
isSystemUser = true;
|
||||
group = "radio";
|
||||
};
|
||||
users.groups.radio = {};
|
||||
|
||||
krebs.htgen.radio = {
|
||||
port = htgenPort;
|
||||
@@ -113,25 +108,6 @@ in
|
||||
)"
|
||||
url="$(cat ${radioStore}/$hash)"
|
||||
|
||||
echo "<html><body style='margin:0'><iframe style='width:100%;height:100%;border:0' src="$url"></iframe></body></html>"
|
||||
exit
|
||||
;;
|
||||
"POST /meddl/skip")
|
||||
send200
|
||||
${mpcs.meddl}/bin/mpc-meddl next
|
||||
exit
|
||||
;;
|
||||
"GET /meddl/status")
|
||||
send200
|
||||
|
||||
hash="$(
|
||||
${mpcs.meddl}/bin/mpc-meddl status -f '%file%' \
|
||||
| head -n 1 \
|
||||
| md5sum \
|
||||
| cut -d' ' -f 1
|
||||
)"
|
||||
url="$(cat ${radioStore}/$hash)"
|
||||
|
||||
echo "<html><body style='margin:0'><iframe style='width:100%;height:100%;border:0' src="$url"></iframe></body></html>"
|
||||
exit
|
||||
;;
|
||||
@@ -220,57 +196,12 @@ in
|
||||
};
|
||||
|
||||
|
||||
systemd.services.meddl = {
|
||||
after = [ "container@meddl.service" ];
|
||||
wantedBy = [ "container@meddl.service" ];
|
||||
startAt = "*:00/10";
|
||||
serviceConfig.User = config.users.extraUsers.radio.name;
|
||||
preStart = "${mpcs.meddl}/bin/mpc-meddl crop || :";
|
||||
script = ''
|
||||
set -efu
|
||||
host=http://antenne-asb.ga
|
||||
|
||||
prepend_host() {
|
||||
sed "s#^#$host/#"
|
||||
}
|
||||
|
||||
${pkgs.curl}/bin/curl -sSL "$host" \
|
||||
| ${pkgs.pup}/bin/pup 'li a attr{href}' \
|
||||
| prepend_host \
|
||||
| while read -r song; do
|
||||
song_url="$(${pkgs.curl}/bin/curl -sSL "$song" \
|
||||
| ${pkgs.pup}/bin/pup 'audio source attr{src}' \
|
||||
| prepend_host
|
||||
)"
|
||||
|
||||
hash="$(echo "$song_url" | md5sum | cut -d' ' -f 1)"
|
||||
echo "$song_url ($hash) -> $song"
|
||||
echo "$song" > "${radioStore}/$hash"
|
||||
|
||||
${mpcs.meddl}/bin/mpc-meddl add "$song_url"
|
||||
done
|
||||
|
||||
${mpcs.meddl}/bin/mpc-meddl play
|
||||
'';
|
||||
};
|
||||
|
||||
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
|
||||
"= /meddl/skip".proxyPass = "http://127.0.0.1:${toString htgenPort}";
|
||||
}
|
||||
{ "/".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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
imports = [ <stockholm/krebs/3modules/fetchWallpaper.nix> ];
|
||||
|
||||
krebs.fetchWallpaper = {
|
||||
enable = true;
|
||||
url = "http://prism.r/realwallpaper-krebs-stars-berlin.png";
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
88
deploy.nix
88
deploy.nix
@@ -1,68 +1,38 @@
|
||||
let
|
||||
inherit (import ./lib/default.nix) sshPort;
|
||||
|
||||
gitFromJson = path:
|
||||
let object = importJson path;
|
||||
in {
|
||||
inherit (object) url;
|
||||
ref = object.rev;
|
||||
};
|
||||
krops = builtins.fetchGit (gitFromJson .versions/krops.json);
|
||||
krops = builtins.fetchGit { url = "https://cgit.krebsco.de/krops/"; };
|
||||
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";
|
||||
source = name: lib.evalSource [{
|
||||
niveum.file = toString ./.;
|
||||
system-secrets.pass = {
|
||||
dir = toString ~/.password-store;
|
||||
name = "systems/${name}";
|
||||
};
|
||||
secrets.pass = {
|
||||
dir = toString ~/.password-store;
|
||||
name = "shared";
|
||||
};
|
||||
}];
|
||||
|
||||
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}";
|
||||
command = targetPath: ''
|
||||
nix-shell -p git --run '
|
||||
nixos-rebuild switch -v --show-trace --flake ${targetPath}/niveum || \
|
||||
nixos-rebuild switch -v --flake ${targetPath}/niveum
|
||||
'
|
||||
'';
|
||||
|
||||
createHost = name: target: pkgs.krops.writeCommand "deploy-${name}" {
|
||||
source = source name;
|
||||
inherit command target;
|
||||
};
|
||||
inherit (pkgs.krops) writeDeploy;
|
||||
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";
|
||||
});
|
||||
in rec {
|
||||
zaatar = createHost "zaatar" "root@zaatar.r:${toString sshPort}";
|
||||
kabsa = createHost "kabsa" "root@kabsa.r:${toString sshPort}";
|
||||
makanek = createHost "kabsa" "root@makanek.r:${toString sshPort}";
|
||||
manakish = createHost "kabsa" "root@manakish.r:${toString sshPort}";
|
||||
all = pkgs.writeScript "deploy-all"
|
||||
(lib.concatStringsSep "\n" [ zaatar kabsa makanek manakish ]);
|
||||
}
|
||||
|
||||
150
flake.lock
generated
Normal file
150
flake.lock
generated
Normal file
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"nodes": {
|
||||
"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": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1637419569,
|
||||
"narHash": "sha256-0hxKZQIoByRDoPsfQq5qzFJioyWRX/fbpvMO2EYQ9lc=",
|
||||
"ref": "master",
|
||||
"rev": "13ae434b140035e7e2664bd5a8ef4c475413b2e0",
|
||||
"revCount": 115,
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/krops"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://cgit.krebsco.de/krops"
|
||||
}
|
||||
},
|
||||
"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-mozilla": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1638887313,
|
||||
"narHash": "sha256-FMYV6rVtvSIfthgC1sK1xugh3y7muoQcvduMdriz4ag=",
|
||||
"owner": "mozilla",
|
||||
"repo": "nixpkgs-mozilla",
|
||||
"rev": "7c1e8b1dd6ed0043fb4ee0b12b815256b0b9de6f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "mozilla",
|
||||
"repo": "nixpkgs-mozilla",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1640725200,
|
||||
"narHash": "sha256-yR8clhRTt1OBFojyBaNnNgD+om51nhuJ1OLqWqdY2Ow=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "eaeea6e9337b93d2acb7c2aa27e3f4617408375a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"retiolum": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1640724425,
|
||||
"narHash": "sha256-eGzvF96ZnrKqvQ7wnpa9OYsfBxUMV0Jdh3QGdZhbSek=",
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"rev": "5a32ea07d6ca5668ea06f14dffe94fb46d42c674",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "krebs",
|
||||
"repo": "retiolum",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"krops": "krops",
|
||||
"nix-writers": "nix-writers",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-mozilla": "nixpkgs-mozilla",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"retiolum": "retiolum",
|
||||
"stockholm": "stockholm"
|
||||
}
|
||||
},
|
||||
"stockholm": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1640726454,
|
||||
"narHash": "sha256-twePnoB0NRhSM4zJOrUI/Zxzwx/u52ey6zA4YYGEvOc=",
|
||||
"ref": "master",
|
||||
"rev": "2a47990f16935d909930c9dd1ed6f8f2982df638",
|
||||
"revCount": 10218,
|
||||
"type": "git",
|
||||
"url": "https://cgit.lassul.us/stockholm"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://cgit.lassul.us/stockholm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
79
flake.nix
Normal file
79
flake.nix
Normal file
@@ -0,0 +1,79 @@
|
||||
# imported from https://github.com/pinpox/nixos/blob/bdc0d47111d57cd19512c83538a01f9f9a3fc847/flake.nix
|
||||
# ref https://www.youtube.com/watch?v=mJbQ--iBc1U
|
||||
{
|
||||
description = "niveum systems";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/release-21.11";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-21.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
# flake-utils.url = "github:numtide/flake-utils";
|
||||
# flake-compat = {
|
||||
# url = "github:edolstra/flake-compat";
|
||||
# flake = false;
|
||||
# };
|
||||
stockholm = {
|
||||
url = "git+https://cgit.lassul.us/stockholm";
|
||||
flake = false;
|
||||
};
|
||||
nix-writers = {
|
||||
url = "git+https://cgit.krebsco.de/nix-writers";
|
||||
flake = false;
|
||||
};
|
||||
krops = {
|
||||
url = "git+https://cgit.krebsco.de/krops";
|
||||
flake = false;
|
||||
};
|
||||
retiolum = {
|
||||
url = "github:krebs/retiolum";
|
||||
flake = false;
|
||||
};
|
||||
nixpkgs-mozilla = {
|
||||
url = "github:mozilla/nixpkgs-mozilla";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, nix-writers, home-manager, stockholm, ... }@inputs:
|
||||
let
|
||||
nixosSystem = nixpkgs.lib.makeOverridable nixpkgs.lib.nixosSystem;
|
||||
|
||||
defaultModules = [
|
||||
{ _module.args.inputs = inputs; }
|
||||
{
|
||||
imports = [
|
||||
home-manager.nixosModules.home-manager
|
||||
"${stockholm}/krebs/3modules/power-action.nix"
|
||||
"${stockholm}/krebs/3modules/fetchWallpaper.nix"
|
||||
({ pkgs, ... }: {
|
||||
nix.nixPath = [ "nixpkgs=${pkgs.path}" ];
|
||||
nixpkgs.overlays = [
|
||||
(import "${nix-writers}/pkgs")
|
||||
(import "${stockholm}/krebs/5pkgs")
|
||||
];
|
||||
})
|
||||
({ pkgs, ... }: { # https://github.com/Mic92/dotfiles/blob/50826e8f247909557975f4f193ecbb4162b07310/nixos/modules/upgrade-diff.nix
|
||||
system.activationScripts.diff = ''
|
||||
${pkgs.nix}/bin/nix store diff-closures /run/current-system "$systemConfig"
|
||||
'';
|
||||
})
|
||||
];
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
}
|
||||
];
|
||||
in {
|
||||
nixosConfigurations = {
|
||||
kabsa = nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = defaultModules ++ [
|
||||
systems/kabsa/configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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,18 +50,12 @@ in [
|
||||
desc = "Diminutive from lassus (“weary, faint, tired”). A programming human. Doing superior professional art.";
|
||||
}
|
||||
{
|
||||
stream = "https://radio.xn--kiern-0qa.de/meddl/listen.ogg";
|
||||
station = "Meddl";
|
||||
logo = "https://antenne-asb.ga/logo.png";
|
||||
desc = "Forked from antenne-asb.ga: Radiosender zum Youtuber Drachenlord. Hier läuft den ganzen Tag Drachenlord Musik von Haidern oder Podcasts zum Lord.";
|
||||
}
|
||||
{
|
||||
stream = "https://radio.xn--kiern-0qa.de/lyrik/listen.ogg";
|
||||
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,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 = {};
|
||||
|
||||
50
modules/networkmanager-declarative.nix
Normal file
50
modules/networkmanager-declarative.nix
Normal file
@@ -0,0 +1,50 @@
|
||||
# https://github.com/jmackie/nixos-networkmanager-profiles/
|
||||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let
|
||||
nm = config.networking.networkmanager;
|
||||
|
||||
mkProfile = profileAttrs:
|
||||
if !(isAttrs profileAttrs) then
|
||||
throw "error 1"
|
||||
else {
|
||||
enable = true;
|
||||
mode = "0400"; # readonly (user)
|
||||
text = (foldlAttrs (accum:
|
||||
{ name, value }: ''
|
||||
${accum}
|
||||
|
||||
[${name}] ${mkProfileEntry value}'')
|
||||
"# Generated by nixos-networkmanager-profiles" profileAttrs) + "\n";
|
||||
};
|
||||
|
||||
mkProfileEntry = entryAttrs:
|
||||
if !(isAttrs entryAttrs) then
|
||||
throw "error 2"
|
||||
else
|
||||
foldlAttrs (accum:
|
||||
{ name, value }: ''
|
||||
${accum}
|
||||
${name}=${toString value}'') "" entryAttrs;
|
||||
|
||||
foldlAttrs = op: nul: attrs:
|
||||
foldl (accum: { fst, snd }: op accum (nameValuePair fst snd)) nul
|
||||
(lists.zipLists (attrNames attrs) (attrValues attrs));
|
||||
|
||||
attrLength = attrs: length (attrValues attrs);
|
||||
|
||||
in {
|
||||
options.networking.networkmanager.profiles = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
};
|
||||
|
||||
config = mkIf (attrLength nm.profiles > 0) {
|
||||
environment.etc = (foldlAttrs (accum:
|
||||
{ name, value }:
|
||||
accum // {
|
||||
"NetworkManager/system-connections/${name}.nmconnection" =
|
||||
mkProfile value;
|
||||
}) { } nm.profiles);
|
||||
};
|
||||
}
|
||||
@@ -34,6 +34,7 @@ in {
|
||||
(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
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
self: super:
|
||||
with super.lib;
|
||||
let
|
||||
eval = import <nixpkgs/nixos/lib/eval-config.nix>;
|
||||
paths = (eval {modules = [(import <nixos-config>)];}).config.nixpkgs.overlays;
|
||||
in foldl' (flip extends) (_: super) paths self
|
||||
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;
|
||||
};
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -efu
|
||||
|
||||
input="$*"
|
||||
|
||||
curl -sSL "https://www.sanskrit-lexicon.uni-koeln.de/scans/PWScan/2020/web/webtc/getword.php?key=$input&filter=roman&accent=yes&transLit=hk" \
|
||||
| pandoc --standalone --variable=title:"$input" --from=html --to=man \
|
||||
| sed 's/\s\+\([:.,;]\)/\1/g;s/\s\+/ /g' \
|
||||
| man --local-file --pager="bat -p" -
|
||||
@@ -1,6 +1,8 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
kpaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/kpaste> { };
|
||||
opustags = pkgs.callPackage <niveum/packages/opustags.nix> { };
|
||||
betacode = pkgs.callPackage <niveum/packages/python3Packages/betacode.nix> { };
|
||||
wrapScript = { packages ? [ ], name, script }:
|
||||
pkgs.writers.writeDashBin name ''
|
||||
PATH=$PATH:${
|
||||
@@ -15,6 +17,8 @@ let
|
||||
sha256 = "0c4hkny4zkknlimc9yi9ljss2cws4zn8lzd8ip9b8mfsm094dlfl";
|
||||
};
|
||||
in rec {
|
||||
auc = pkgs.callPackage ./auc.nix {};
|
||||
|
||||
instaget = wrapScript {
|
||||
packages = [ pkgs.jq pkgs.curl pkgs.gnugrep ];
|
||||
script = ./instaget.sh;
|
||||
@@ -76,6 +80,12 @@ in rec {
|
||||
fi
|
||||
'';
|
||||
|
||||
qrpaste = pkgs.writers.writeDashBin "qrpaste" ''
|
||||
file="$(${pkgs.mktemp}/bin/mktemp qrpasteXXX.png --tmpdir)"
|
||||
${pkgs.qrencode}/bin/qrencode "$(${pkgs.xclip}/bin/xclip -selection clipboard -out)" -o "$file"
|
||||
${pkgs.sxiv}/bin/sxiv "$file" ; rm "$file"
|
||||
'';
|
||||
|
||||
interdimensional-cable =
|
||||
let nimaid-github-io = pkgs.fetchFromGitHub {
|
||||
owner = "nimaid";
|
||||
@@ -89,7 +99,7 @@ in rec {
|
||||
'';
|
||||
|
||||
tag = wrapScript {
|
||||
packages = [ pkgs.vorbisTools pkgs.python3Packages.eyeD3 pkgs.nur.repos.kmein.opustags ];
|
||||
packages = [ pkgs.vorbisTools pkgs.python3Packages.eyeD3 opustags ];
|
||||
script = "${voidrice}/.local/bin/tag";
|
||||
name = "tag";
|
||||
};
|
||||
@@ -100,6 +110,12 @@ in rec {
|
||||
name = "meteo";
|
||||
};
|
||||
|
||||
kirciuoklis = wrapScript {
|
||||
packages = [ pkgs.curl pkgs.jq ];
|
||||
script = ./kirciuoklis.sh;
|
||||
name = "kirciuoklis";
|
||||
};
|
||||
|
||||
booksplit = wrapScript {
|
||||
packages = [ pkgs.ffmpeg tag pkgs.glibc.bin ];
|
||||
script = "${voidrice}/.local/bin/booksplit";
|
||||
@@ -122,13 +138,37 @@ in rec {
|
||||
packages = [ pkgs.curl pkgs.pup betacode pkgs.gnused pkgs.pandoc pkgs.man ];
|
||||
};
|
||||
|
||||
boetlingk = wrapScript {
|
||||
name = "boet";
|
||||
script = ./boetlingk.sh;
|
||||
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc pkgs.man ];
|
||||
};
|
||||
sanskrit-dictionary = pkgs.writers.writeDashBin "sa" ''
|
||||
set -efu
|
||||
|
||||
playlist = import ./pls.nix { inherit pkgs; };
|
||||
usage() {
|
||||
echo "usage: [OUTPUT=deva|roman] $0 mw|mwe|boet|bopp|apte|boro TERM"
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ $# -eq 2 ] || usage
|
||||
|
||||
case $1 in
|
||||
mw) id=MWScan;;
|
||||
mwe) id=MWEScan;;
|
||||
bopp) id=BOPScan;;
|
||||
boet) id=PWGScan;;
|
||||
apte) id=AEScan;;
|
||||
boro) id=BORScan;;
|
||||
*) usage;;
|
||||
esac
|
||||
|
||||
shift
|
||||
|
||||
input="$*"
|
||||
|
||||
${pkgs.curl}/bin/curl -sSL "https://www.sanskrit-lexicon.uni-koeln.de/scans/$id/2020/web/webtc/getword.php?key=$input&filter=''${OUTPUT-roman}&accent=yes&transLit=hk" \
|
||||
| ${pkgs.pandoc}/bin/pandoc --standalone --variable=title:"$input" --from=html --to=man \
|
||||
| ${pkgs.gnused}/bin/sed 's/\s\+\([:.,;]\)/\1/g;s/\s\+/ /g' \
|
||||
| ${pkgs.man}/bin/man --local-file --pager="${pkgs.bat}/bin/bat -p" -
|
||||
'';
|
||||
|
||||
playlist = import ./pls.nix { inherit pkgs lib; };
|
||||
|
||||
mpv-tv = import ./mpv-tv.nix { inherit pkgs lib; };
|
||||
|
||||
@@ -138,6 +178,18 @@ in rec {
|
||||
script = ./favicon.sh;
|
||||
};
|
||||
|
||||
closest = pkgs.writers.writeDashBin "closest" ''
|
||||
${pkgs.writers.writeHaskellBin "closest" {
|
||||
libraries = with pkgs.haskellPackages; [ parallel optparse-applicative edit-distance ];
|
||||
ghcArgs = ["-O3" "-threaded" ];
|
||||
} (builtins.readFile ./distance.hs)}/bin/closest +RTS -N4 -RTS --dictionary ${pkgs.fetchurl {
|
||||
url = "https://gist.github.com/MarvinJWendt/2f4f4154b8ae218600eb091a5706b5f4/raw/36b70dd6be330aa61cd4d4cdfda6234dcb0b8784/wordlist-german.txt";
|
||||
sha256 = "0vr4lmlckgvj4s8sk502sknq9pf3297rvasj5sqqm05zzbdgpppj";
|
||||
}} "$@"
|
||||
'';
|
||||
|
||||
horoscope = pkgs.callPackage ./horoscope {};
|
||||
|
||||
genius = wrapScript {
|
||||
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc ];
|
||||
name = "genius";
|
||||
@@ -245,7 +297,7 @@ in rec {
|
||||
'';
|
||||
|
||||
betacode = pkgs.writers.writePython3Bin "betacode" {
|
||||
libraries = [ pkgs.nur.repos.kmein.python3Packages.betacode ];
|
||||
libraries = [ betacode ];
|
||||
} ''
|
||||
import betacode.conv
|
||||
import sys
|
||||
@@ -354,4 +406,12 @@ in rec {
|
||||
curl -L "https://github.com/Mic92/nix-index-database/releases/download/$tag/files" -o $XDG_RUNTIME_DIR/files-$tag
|
||||
mv $XDG_RUNTIME_DIR/files-$tag $HOME/.cache/nix-index/files
|
||||
'';
|
||||
} // {
|
||||
devour = pkgs.callPackage <niveum/packages/devour.nix> { };
|
||||
depp = pkgs.callPackage <niveum/packages/depp.nix> { };
|
||||
text2pdf = pkgs.callPackage <niveum/packages/text2pdf.nix> { };
|
||||
vimv = pkgs.callPackage <niveum/packages/vimv.nix> { };
|
||||
when = pkgs.callPackage <niveum/packages/when.nix> { };
|
||||
mahlzeit = pkgs.haskellPackages.callPackage <niveum/packages/mahlzeit.nix> { };
|
||||
inherit opustags;
|
||||
}
|
||||
|
||||
36
packages/scripts/distance.hs
Normal file
36
packages/scripts/distance.hs
Normal file
@@ -0,0 +1,36 @@
|
||||
{-# LANGUAGE ApplicativeDo #-}
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
import Control.Arrow ((&&&))
|
||||
import Control.Monad (forM_)
|
||||
import Control.Parallel.Strategies (using, parList, rdeepseq)
|
||||
import Data.Char (toLower)
|
||||
import Data.List (sortOn)
|
||||
import Options.Applicative
|
||||
import Text.EditDistance (levenshteinDistance, defaultEditCosts)
|
||||
|
||||
data Options = Options
|
||||
{ limit :: Int
|
||||
, word :: String
|
||||
, dictionary :: FilePath
|
||||
}
|
||||
|
||||
optionsParser :: Parser Options
|
||||
optionsParser = do
|
||||
limit <- option auto (long "limit" <> short 'l' <> help "maximum edit distance to list" <> value 3 <> metavar "N")
|
||||
word <- strArgument (help "the word to match" <> metavar "WORD")
|
||||
dictionary <- strOption (long "dictionary" <> short 'd' <> help "the dictionary to search")
|
||||
pure Options {..}
|
||||
|
||||
readDictionary :: FilePath -> IO [String]
|
||||
readDictionary path = lines . map toLower <$> readFile path
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let options = info (optionsParser <**> helper) (fullDesc <> progDesc "Find close words")
|
||||
Options {..} <- execParser options
|
||||
let word' = map toLower word
|
||||
allWords <- readDictionary dictionary
|
||||
let distances = map (levenshteinDistance defaultEditCosts word' &&& id) allWords
|
||||
distances' = distances `using` parList rdeepseq
|
||||
ranking = takeWhile ((<= limit) . fst) $ sortOn fst distances'
|
||||
forM_ ranking $ \(theDistance, theWord) -> putStrLn (show theDistance ++ " " ++ theWord)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user