mirror of
https://github.com/kmein/niveum
synced 2026-03-19 19:41:08 +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"]
|
[submodule "submodules/menstruation-telegram"]
|
||||||
path = submodules/much
|
path = submodules/menstruation-telegram
|
||||||
url = git@github.com:kmein/much
|
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",
|
"url": "https://github.com/nix-community/home-manager.git",
|
||||||
"rev": "7d9ba15214004c979d2c8733f8be12ce6502cf8a",
|
"rev": "697cc8c68ed6a606296efbbe9614c32537078756",
|
||||||
"date": "2021-09-14T00:53:31+02:00",
|
"date": "2021-12-19T00:59:29+01:00",
|
||||||
"path": "/nix/store/83xlchpzj511c0db0whl99x1ww1apnb5-home-manager",
|
"path": "/nix/store/fb46bv10azrag2jjlzhil6j11f4x8glw-home-manager",
|
||||||
"sha256": "18kmvzinsi9xgm81dk5kyd03m3y5nn125kmbkxf66xasrg13yqdv",
|
"sha256": "1c8gxm86zshr2zj9dvr02qs7y3m46gqavr6wyv01r09jfd99dxz9",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": false
|
"leaveDotGit": false
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"date": "2021-03-23T22:47:37+01:00",
|
"date": "2021-03-23T22:47:37+01:00",
|
||||||
"path": "/nix/store/mz13xxnil35lwsf90hwnrm2agir7hb51-krops",
|
"path": "/nix/store/mz13xxnil35lwsf90hwnrm2agir7hb51-krops",
|
||||||
"sha256": "07mg3iaqjf1w49vmwfchi7b1w55bh7rvsbgicp2m47gnj9alwdb6",
|
"sha256": "07mg3iaqjf1w49vmwfchi7b1w55bh7rvsbgicp2m47gnj9alwdb6",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": 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",
|
"url": "https://github.com/mozilla/nixpkgs-mozilla",
|
||||||
"rev": "0510159186dd2ef46e5464484fbdf119393afa58",
|
"rev": "7c1e8b1dd6ed0043fb4ee0b12b815256b0b9de6f",
|
||||||
"date": "2021-08-17T20:37:26+02:00",
|
"date": "2021-12-07T09:28:33-05:00",
|
||||||
"path": "/nix/store/w877m55xnigwaqrnadmnh2fkvfdxlan5-nixpkgs-mozilla",
|
"path": "/nix/store/pqwcw589i2y2w2116wn3ifl834adjsa0-nixpkgs-mozilla",
|
||||||
"sha256": "1c6r5ldkh71v6acsfhni7f9sxvi7xrqzshcwd8w0hl2rrqyzi58w",
|
"sha256": "1a71nfw7d36vplf89fp65vgj3s66np1dc0hqnqgj5gbdnpm1bihl",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": false
|
"leaveDotGit": false
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/NixOS/nixpkgs.git",
|
"url": "https://github.com/NixOS/nixpkgs.git",
|
||||||
"rev": "aee6aefa230479a9c35f5d9031786c83c2db19a2",
|
"rev": "f01adc7b35a8f80e82f3466e6d873b8b9c8f1b28",
|
||||||
"date": "2021-09-14T21:10:26+08:00",
|
"date": "2021-12-22T23:05:28+01:00",
|
||||||
"path": "/nix/store/jmxwzpfb24z159rnpa29drgb8z2znjl9-nixpkgs",
|
"path": "/nix/store/zhfrvg77dzpc3hq02v9zv20dfgqwpzk6-nixpkgs",
|
||||||
"sha256": "0vy89mw8nd4jrv3byisynl7a3gsx0fsfpgqpaqz2z7vy60l1mkiq",
|
"sha256": "17iyf2iiizi7c1wr71day3wvgalbkkm2zgc9lpy7y42rl4frq9sf",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": false
|
"leaveDotGit": false
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"url": "https://github.com/NixOS/nixpkgs.git",
|
"url": "https://github.com/NixOS/nixpkgs.git",
|
||||||
"rev": "b3083bc6933eb7fa4ee7bd4802e9f72b56f3e654",
|
"rev": "9ab7d12287ced0e1b4c03b61c781901f178d9d77",
|
||||||
"date": "2021-09-13T17:06:43+02:00",
|
"date": "2021-12-21T10:09:48+01:00",
|
||||||
"path": "/nix/store/18nwp35nj16hr2li3xbs6vczvw32rp5p-nixpkgs",
|
"path": "/nix/store/minmlh0avkwvvc3p7flhpbglp13kr585-nixpkgs",
|
||||||
"sha256": "1cj8jmzgf2rpf8n8yjsh6qsh66rqpyxh8jhn65ll15578fh98gb9",
|
"sha256": "0bbd2pgcyavqn5wgq0xp8p67lha0kv9iqnh49i9w5fb5g29q7i30",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": 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",
|
"url": "https://github.com/krebs/retiolum",
|
||||||
"rev": "5384cff550036aa3581f8c6f851392329f28ffe8",
|
"rev": "b72b0a987767b587c79cba8499b5114d69fceeef",
|
||||||
"date": "2021-09-19T09:32:14+02:00",
|
"date": "2021-12-28T19:46:45+00:00",
|
||||||
"path": "/nix/store/izzhb6p76h96zmlz5xdxa1xrpixhbk4s-retiolum",
|
"path": "/nix/store/kyaqwf89v6id9mda92x4b0hf778j987x-retiolum",
|
||||||
"sha256": "07318jnkb8zycyi43fydrmrsrbq9ajhb2nnaahj1bxg77pb4wj7a",
|
"sha256": "19hjzzlfk1m9ign33w4ppqgmg23v7c6k8l0fm7f33spq8982w7rb",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": false
|
"leaveDotGit": false
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"url": "https://cgit.krebsco.de/stockholm",
|
"url": "https://cgit.lassul.us/stockholm",
|
||||||
"rev": "20e358043546482acfa8c6134f095c1a64ef144d",
|
"rev": "576c05cf3a0ceddefa29c2d0073108177c3cfa52",
|
||||||
"date": "2021-08-31T20:06:03+02:00",
|
"date": "2021-12-22T13:59:46+01:00",
|
||||||
"path": "/nix/store/a03pd46kdsfy9d2q9xlzapnzkj4vf20r-stockholm",
|
"path": "/nix/store/yx1j5pardgd9114f0cf3c4xjfq6r4yfv-stockholm",
|
||||||
"sha256": "0cwl36zc68qjwcahjgc3vn9qpnyi351m6ngnq21wlncn0k2gqw4a",
|
"sha256": "18napi4k8i2iizrismlp9ha3ga6c3n2dvrhijy59kl1jxqrsaq9l",
|
||||||
|
"fetchLFS": false,
|
||||||
"fetchSubmodules": false,
|
"fetchSubmodules": false,
|
||||||
"deepClone": false,
|
"deepClone": false,
|
||||||
"leaveDotGit": 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" {
|
"beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" {
|
||||||
directory = "~/cloud/syncthing/music";
|
directory = "~/cloud/syncthing/music";
|
||||||
library = "~/cloud/syncthing/common/music.db";
|
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, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
imports = [
|
|
||||||
<niveum/modules/dropbox.nix>
|
|
||||||
];
|
|
||||||
|
|
||||||
niveum = {
|
|
||||||
dropbox.enable = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
system.activationScripts.home-symlinks = ''
|
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/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
|
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;
|
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" = {
|
fileSystems."/media/moodle" = {
|
||||||
device = "zaatar.r:/moodle";
|
device = "zaatar.r:/moodle";
|
||||||
fsType = "nfs";
|
fsType = "nfs";
|
||||||
@@ -33,21 +36,19 @@
|
|||||||
openDefaultPorts = true;
|
openDefaultPorts = true;
|
||||||
configDir = "/home/kfm/.config/syncthing";
|
configDir = "/home/kfm/.config/syncthing";
|
||||||
dataDir = "/home/kfm/.config/syncthing";
|
dataDir = "/home/kfm/.config/syncthing";
|
||||||
declarative = rec {
|
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
key = toString <system-secrets/syncthing/key.pem>;
|
||||||
key = toString <system-secrets/syncthing/key.pem>;
|
inherit ((import <niveum/lib>).syncthing) devices;
|
||||||
inherit ((import <niveum/lib>).syncthing) devices;
|
folders =
|
||||||
folders =
|
let cloud-dir = "${config.users.users.me.home}/cloud";
|
||||||
let cloud-dir = "${config.users.users.me.home}/cloud";
|
in {
|
||||||
in {
|
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ];
|
||||||
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ];
|
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ];
|
||||||
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ];
|
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ];
|
||||||
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ];
|
"${cloud-dir}/syncthing/music" = {
|
||||||
"${cloud-dir}/syncthing/music" = {
|
devices = [ "kabsa" "manakish" "heym" "zaatar" ];
|
||||||
devices = [ "kabsa" "manakish" "heym" "zaatar" ];
|
id = "music";
|
||||||
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
|
let
|
||||||
inherit (lib.strings) makeBinPath;
|
inherit (lib.strings) makeBinPath;
|
||||||
inherit (import <niveum/lib>) localAddresses kieran;
|
inherit (import <niveum/lib>) localAddresses kieran;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
<home-manager/nixos>
|
../modules/system-dependent.nix
|
||||||
<niveum/modules/system-dependent.nix>
|
|
||||||
{
|
{
|
||||||
boot.supportedFilesystems = [ "ntfs" ];
|
boot.supportedFilesystems = [ "ntfs" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
nix.nixPath = [
|
nix.nixPath = [
|
||||||
"/var/src"
|
"/var/src"
|
||||||
"nixpkgs-overlays=${toString ../overlays}"
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{ services.dbus.packages = [ pkgs.gnome3.dconf ]; }
|
|
||||||
{
|
{
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
config = {
|
config = {
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
packageOverrides = pkgs: {
|
packageOverrides = pkgs: {
|
||||||
nur = import <nur> { inherit pkgs; };
|
|
||||||
writeDashBin = pkgs.writers.writeDashBin;
|
|
||||||
writeDash = pkgs.writers.writeDash;
|
|
||||||
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
|
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {};
|
||||||
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { };
|
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { };
|
||||||
ix = pkgs.callPackage <niveum/packages/ix.nix> { };
|
ix = pkgs.callPackage <niveum/packages/ix.nix> { };
|
||||||
@@ -31,11 +25,8 @@ in {
|
|||||||
};
|
};
|
||||||
overlays = [
|
overlays = [
|
||||||
(self: super: {
|
(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.xdg.enable = true;
|
||||||
|
home-manager.users.me.dconf.enable = false;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
@@ -142,7 +134,6 @@ in {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{ i18n.defaultLocale = "en_GB.UTF-8"; }
|
{ i18n.defaultLocale = "en_GB.UTF-8"; }
|
||||||
{ services.illum.enable = true; }
|
|
||||||
{
|
{
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -163,8 +154,16 @@ in {
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
security.wrappers = {
|
security.wrappers = {
|
||||||
pmount.source = "${pkgs.pmount}/bin/pmount";
|
pmount = {
|
||||||
pumount.source = "${pkgs.pmount}/bin/pumount";
|
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; }
|
{ programs.command-not-found.enable = true; }
|
||||||
@@ -198,12 +197,11 @@ in {
|
|||||||
./ccc.nix
|
./ccc.nix
|
||||||
# ./kleiter.nix
|
# ./kleiter.nix
|
||||||
./khal.nix
|
./khal.nix
|
||||||
./engiadina.nix
|
|
||||||
./chromium.nix
|
./chromium.nix
|
||||||
./cloud.nix
|
./cloud.nix
|
||||||
|
./copyq.nix
|
||||||
./compton.nix
|
./compton.nix
|
||||||
./direnv.nix
|
./direnv.nix
|
||||||
./distrobump.nix
|
|
||||||
./docker.nix
|
./docker.nix
|
||||||
./dunst.nix
|
./dunst.nix
|
||||||
./flix.nix
|
./flix.nix
|
||||||
@@ -215,13 +213,13 @@ in {
|
|||||||
./htop.nix
|
./htop.nix
|
||||||
./hu-berlin.nix
|
./hu-berlin.nix
|
||||||
./i3.nix
|
./i3.nix
|
||||||
./keybase.nix
|
|
||||||
./keyboard.nix
|
./keyboard.nix
|
||||||
./mail/client.nix
|
./lb.nix
|
||||||
./mpv.nix
|
./mpv.nix
|
||||||
./mime.nix
|
./mime.nix
|
||||||
./nano.nix
|
./nano.nix
|
||||||
./neovim.nix
|
./neovim.nix
|
||||||
|
./neomutt.nix
|
||||||
./nix.nix
|
./nix.nix
|
||||||
./newsboat.nix
|
./newsboat.nix
|
||||||
./flameshot-once.nix
|
./flameshot-once.nix
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ let
|
|||||||
cat > shell.nix <<'EOF'
|
cat > shell.nix <<'EOF'
|
||||||
{ pkgs ? import <nixpkgs> {} }:
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [];
|
buildInputs = [];
|
||||||
shellHook = "export HISTFILE=''${toString ./.history}";
|
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
''${EDITOR:-vim} shell.nix
|
''${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, ... }:
|
{ lib, pkgs, ... }:
|
||||||
{
|
let
|
||||||
home-manager.users.me = {
|
inherit (import <niveum/lib>) defaultApplications;
|
||||||
services.flameshot.enable = true;
|
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" {
|
environment.systemPackages = [
|
||||||
General = {
|
(flameshot-once.override {
|
||||||
disabledTrayIcon = true;
|
config.imgur = {
|
||||||
checkForUpdates = false;
|
enable = true;
|
||||||
contrastOpacity = 188;
|
createUrl = "http://p.r/image";
|
||||||
savePath = "/tmp";
|
deleteUrl = "http://p.r/image/delete/%1";
|
||||||
savePathFixed = true;
|
xdg-open.browser = (defaultApplications pkgs).browser;
|
||||||
drawThickness = 0;
|
|
||||||
showStartupLaunchMessage = false;
|
|
||||||
filenamePattern = "shot_%F_%T";
|
|
||||||
};
|
};
|
||||||
};
|
config.timeout = 1000;
|
||||||
|
})
|
||||||
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";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,11 +51,11 @@ in {
|
|||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
createHome = true;
|
createHome = true;
|
||||||
home = cacheLocation;
|
home = cacheLocation;
|
||||||
extraGroups = [ flixGroup ];
|
group = flixGroup;
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(pkgs.writeDashBin "mpv-simpsons" ''
|
(pkgs.writers.writeDashBin "mpv-simpsons" ''
|
||||||
set -efu
|
set -efu
|
||||||
cd "${flixLocation}/download"
|
cd "${flixLocation}/download"
|
||||||
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
|
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
|
||||||
@@ -65,7 +65,7 @@ in {
|
|||||||
| shuf \
|
| shuf \
|
||||||
| ${pkgs.findutils}/bin/xargs -d '\n' ${pkgs.mpv}/bin/mpv
|
| ${pkgs.findutils}/bin/xargs -d '\n' ${pkgs.mpv}/bin/mpv
|
||||||
'')
|
'')
|
||||||
(pkgs.writeDashBin "flixmenu" ''
|
(pkgs.writers.writeDashBin "flixmenu" ''
|
||||||
set -efu
|
set -efu
|
||||||
cd "${flixLocation}/download"
|
cd "${flixLocation}/download"
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
enableDefaultFonts = true;
|
enableDefaultFonts = true;
|
||||||
fontDir.enable = true;
|
fontDir.enable = true;
|
||||||
fonts = with pkgs; [
|
fonts = with pkgs; [
|
||||||
|
alegreya
|
||||||
|
alegreya-sans
|
||||||
corefonts
|
corefonts
|
||||||
eb-garamond
|
eb-garamond
|
||||||
fira
|
fira
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
disableRegistration = true;
|
disableRegistration = true;
|
||||||
rootUrl = "https://code.xn--kiern-0qa.de";
|
rootUrl = "https://code.kmein.de";
|
||||||
appName = "code.kierán.de";
|
appName = "code.kmein.de";
|
||||||
};
|
};
|
||||||
services.nginx.virtualHosts."code.xn--kiern-0qa.de" = {
|
services.nginx.virtualHosts."code.kmein.de" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
locations."/".extraConfig = "proxy_pass http://localhost:3000;";
|
locations."/".extraConfig = "proxy_pass http://localhost:3000;";
|
||||||
|
|||||||
@@ -1,25 +1,34 @@
|
|||||||
{ pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
let
|
let
|
||||||
backupLocation = "/var/lib/codimd-backup";
|
backupLocation = "/var/lib/codimd-backup";
|
||||||
stateLocation = "/var/lib/codimd/state.sqlite";
|
stateLocation = "/var/lib/codimd/state.sqlite";
|
||||||
nixpkgs-unstable = import <nixpkgs-unstable> {};
|
nixpkgs-unstable = import <nixpkgs-unstable> {};
|
||||||
|
domain = "pad.kmein.de";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ <stockholm/krebs/3modules/permown.nix> ];
|
imports = [ <stockholm/krebs/3modules/permown.nix> ];
|
||||||
|
|
||||||
services.nginx.virtualHosts."pad.xn--kiern-0qa.de" = {
|
services.nginx.virtualHosts.${domain} = {
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
addSSL = true;
|
forceSSL = true;
|
||||||
locations."/".extraConfig = ''
|
locations."/" = {
|
||||||
client_max_body_size 4G;
|
proxyPass = "https://localhost:3091";
|
||||||
proxy_set_header Host $host;
|
proxyWebsockets = true;
|
||||||
proxy_pass http://localhost:3091;
|
};
|
||||||
'';
|
};
|
||||||
|
|
||||||
|
security.acme.certs.${domain}.group = "hedgecert";
|
||||||
|
users.groups.hedgecert.members = [ "codimd" "nginx" ];
|
||||||
|
|
||||||
|
security.dhparams = {
|
||||||
|
enable = true;
|
||||||
|
params.hedgedoc = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.hedgedoc = {
|
services.hedgedoc = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configuration = {
|
configuration = {
|
||||||
|
allowOrigin = [ domain ];
|
||||||
allowAnonymous = true;
|
allowAnonymous = true;
|
||||||
allowGravatar = false;
|
allowGravatar = false;
|
||||||
allowFreeURL = true;
|
allowFreeURL = true;
|
||||||
@@ -28,6 +37,13 @@ in
|
|||||||
storage = stateLocation;
|
storage = stateLocation;
|
||||||
};
|
};
|
||||||
port = 3091;
|
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, ... }: {
|
{ config, pkgs, ... }: {
|
||||||
imports = [ <niveum/modules/hledger.nix> ];
|
imports = [ ../modules/hledger.nix ];
|
||||||
|
|
||||||
niveum.hledger = {
|
niveum.hledger = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -32,6 +32,16 @@ in {
|
|||||||
options = hu-berlin-cifs-options;
|
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 = [
|
environment.systemPackages = [
|
||||||
(pkgs.writers.writeDashBin "hu-ip" ''
|
(pkgs.writers.writeDashBin "hu-ip" ''
|
||||||
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
|
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
|
||||||
@@ -49,7 +59,7 @@ in {
|
|||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.hu-vpn = {
|
systemd.services.hu-vpn = {
|
||||||
enable = false;
|
enable = true;
|
||||||
wants = [ "network-online.target" ];
|
wants = [ "network-online.target" ];
|
||||||
conflicts = [ "openvpn-hu-berlin.service" ];
|
conflicts = [ "openvpn-hu-berlin.service" ];
|
||||||
script = ''
|
script = ''
|
||||||
|
|||||||
@@ -213,7 +213,11 @@ in {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cd ~/notes
|
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"
|
if test "$note_file"
|
||||||
then
|
then
|
||||||
i3-sensible-terminal -e "$EDITOR" "$note_file"
|
i3-sensible-terminal -e "$EDITOR" "$note_file"
|
||||||
@@ -229,8 +233,7 @@ in {
|
|||||||
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
|
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
|
||||||
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
|
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
|
||||||
"${modifier}+F12" = "exec ${klem}/bin/klem";
|
"${modifier}+F12" = "exec ${klem}/bin/klem";
|
||||||
|
"Print" = "exec flameshot-once";
|
||||||
"Print" = "exec flameshot gui -p /tmp";
|
|
||||||
"XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5";
|
"XF86AudioLowerVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -d 5";
|
||||||
"XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t";
|
"XF86AudioMute" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -t";
|
||||||
"XF86AudioRaiseVolume" = "exec --no-startup-id ${pkgs.pamixer}/bin/pamixer -i 5";
|
"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 ",";
|
let commaSep = builtins.concatStringsSep ",";
|
||||||
in {
|
in {
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
layout = commaSep [ "de" "gr" ];
|
layout = commaSep [ "de" "gr" "ru" ];
|
||||||
xkbVariant = commaSep [ "T3" "polytonic" ];
|
xkbVariant = commaSep [ "T3" "polytonic" "phonetic" ];
|
||||||
xkbOptions =
|
xkbOptions =
|
||||||
commaSep [ "compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle" ];
|
commaSep [ "compose:caps" "terminate:ctrl_alt_bksp" "grp:ctrls_toggle" ];
|
||||||
libinput.enable = true;
|
libinput.enable = true;
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
davHome = "~/.local/share/dav";
|
davHome = "~/.local/share/dav";
|
||||||
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
|
kmeinCloud = {
|
||||||
username = "kieran";
|
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
|
||||||
password = lib.fileContents <secrets/nextcloud/password>;
|
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
|
in
|
||||||
{
|
{
|
||||||
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
|
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
|
||||||
@@ -17,6 +24,10 @@ in
|
|||||||
${pkgs.vdirsyncer}/bin/vdirsyncer sync
|
${pkgs.vdirsyncer}/bin/vdirsyncer sync
|
||||||
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
|
||||||
'';
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home-manager.users.me = {
|
home-manager.users.me = {
|
||||||
@@ -48,26 +59,48 @@ in
|
|||||||
skip_unparsable = no
|
skip_unparsable = no
|
||||||
'';
|
'';
|
||||||
|
|
||||||
"todoman/todoman.conf".text = ''
|
"todoman/config.py".text = ''
|
||||||
[main]
|
path = "${davHome}/calendar/*"
|
||||||
path = ${davHome}/calendar/*
|
date_format = "%Y-%m-%d"
|
||||||
date_format = %Y-%m-%d
|
time_format = "%H:%M"
|
||||||
time_format = %H:%M
|
|
||||||
default_due = 0
|
default_due = 0
|
||||||
default_list = Personal
|
default_list = "Personal"
|
||||||
startable = True
|
startable = True
|
||||||
'';
|
'';
|
||||||
|
|
||||||
"khal/config".text = ''
|
"khal/config".text = ''
|
||||||
[calendars]
|
[calendars]
|
||||||
|
|
||||||
[[kalender_local]]
|
[[alew]]
|
||||||
path = ${davHome}/calendar/*
|
path = ${davHome}/calendar/alew
|
||||||
type = discover
|
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]
|
[default]
|
||||||
highlight_event_days = True
|
highlight_event_days = True
|
||||||
timedelta = 5d
|
timedelta = 5d
|
||||||
|
print_new = path
|
||||||
|
default_calendar = personal
|
||||||
|
|
||||||
[locale]
|
[locale]
|
||||||
timeformat = %H:%M
|
timeformat = %H:%M
|
||||||
@@ -93,7 +126,13 @@ in
|
|||||||
[pair kalender]
|
[pair kalender]
|
||||||
a = "kalender_local"
|
a = "kalender_local"
|
||||||
b = "kalender_cloud"
|
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"
|
conflict_resolution = "b wins"
|
||||||
|
|
||||||
[storage kontakte_local]
|
[storage kontakte_local]
|
||||||
@@ -108,15 +147,21 @@ in
|
|||||||
|
|
||||||
[storage kontakte_cloud]
|
[storage kontakte_cloud]
|
||||||
type = "carddav"
|
type = "carddav"
|
||||||
url = "${davEndpoint}/addressbooks/users/${username}/"
|
url = "${kmeinCloud.davEndpoint}/addressbooks/users/${kmeinCloud.username}/"
|
||||||
username = "${username}"
|
username = "${kmeinCloud.username}"
|
||||||
password = "${password}"
|
password = "${kmeinCloud.password}"
|
||||||
|
|
||||||
[storage kalender_cloud]
|
[storage kalender_cloud]
|
||||||
type = "caldav"
|
type = "caldav"
|
||||||
url = "${davEndpoint}/calendars/${username}/"
|
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
|
||||||
username = "${username}"
|
username = "${kmeinCloud.username}"
|
||||||
password = "${password}"
|
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;
|
telegram.kmein.Token = bridgeBotToken;
|
||||||
irc =
|
irc =
|
||||||
let Nick = "ponte"; StripMarkdown = true;
|
let Nick = "ponte";
|
||||||
in {
|
in {
|
||||||
hackint = { Server = "irc.hackint.org:6697"; UseTLS = true; inherit Nick StripMarkdown; };
|
hackint = { Server = "irc.hackint.org:6697"; UseTLS = true; inherit Nick; };
|
||||||
};
|
};
|
||||||
mumble.lassulus = {
|
mumble.lassulus = {
|
||||||
Server = "lassul.us:64738";
|
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, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
let
|
let
|
||||||
lokiConfig = import ./loki.nix;
|
lokiConfig = import ./loki.nix;
|
||||||
|
blackboxConfig = import ./blackbox.nix;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.grafana = {
|
services.grafana = {
|
||||||
@@ -60,6 +61,11 @@ in
|
|||||||
for = "1h";
|
for = "1h";
|
||||||
annotations.summary = "{{$labels.job}}: Using lots of RAM.";
|
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";
|
alert = "HostDown";
|
||||||
expr = ''up == 0'';
|
expr = ''up == 0'';
|
||||||
@@ -71,7 +77,37 @@ in
|
|||||||
{
|
{
|
||||||
alert = "Reboot";
|
alert = "Reboot";
|
||||||
expr = "time() - node_boot_time_seconds < 300";
|
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" }}
|
{{ define "telegram.default" }}
|
||||||
{{range .Alerts -}}
|
{{range .Alerts -}}
|
||||||
{{ if eq .Status "firing" }}
|
{{ if eq .Status "firing" }}
|
||||||
⚠ <b>{{ index .Annotations "summary"}}</b>
|
⚠ <b>{{ index .Annotations "summary"}}</b>
|
||||||
{{ index .Annotations "description" }}
|
{{ 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 -}}
|
{{ else -}}
|
||||||
😌 <del>{{ index .Annotations "summary"}}</del>
|
RESOLVED 😌 <del>{{ index .Annotations "summary"}}</del>
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{end -}}
|
{{end -}}
|
||||||
{{end}}
|
{{end}}
|
||||||
@@ -152,15 +188,36 @@ in
|
|||||||
job_name = "makanek";
|
job_name = "makanek";
|
||||||
static_configs = [ { targets = [
|
static_configs = [ { targets = [
|
||||||
"127.0.0.1:${toString config.services.prometheus.exporters.node.port}"
|
"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";
|
job_name = "zaatar";
|
||||||
static_configs = [ { targets = [ "zaatar.r:${toString config.services.prometheus.exporters.node.port}" ]; } ];
|
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 = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
lokiConfig.server.http_listen_port
|
lokiConfig.server.http_listen_port
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -45,6 +45,25 @@ in
|
|||||||
103685 # Griechische Sprache und Übersetzung I
|
103685 # Griechische Sprache und Übersetzung I
|
||||||
105455 # Elegia greca
|
105455 # Elegia greca
|
||||||
105335 # Homerische Epen
|
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_submissions = true;
|
||||||
download_descriptions = true;
|
download_descriptions = true;
|
||||||
@@ -63,11 +82,26 @@ in
|
|||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [ 2049 ];
|
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 = {
|
services.nfs.server = {
|
||||||
enable = true;
|
enable = true;
|
||||||
exports = ''
|
exports = let machines = with (import <niveum/lib>).retiolumAddresses; [kabsa manakish]; in ''
|
||||||
/export 10.243.2.4(fsid=0) 10.243.2.85(fsid=0)
|
/export ${lib.concatMapStringsSep " " (machine: "${machine.ipv4}(fsid=0)") machines}
|
||||||
/export/moodle 10.243.2.4(insecure,rw) 10.243.2.85(insecure,rw)
|
/export/moodle ${lib.concatMapStringsSep " " (machine: "${machine.ipv4}(insecure,rw)") machines}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ in {
|
|||||||
programs.mpv = {
|
programs.mpv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = {
|
config = {
|
||||||
osc = "no";
|
|
||||||
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ];
|
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ];
|
||||||
|
screenshot-template = "%F-%wH%wM%wS-%#04n";
|
||||||
};
|
};
|
||||||
bindings = {
|
bindings = {
|
||||||
"Alt+RIGHT" = "add video-rotate 90";
|
"Alt+RIGHT" = "add video-rotate 90";
|
||||||
@@ -22,7 +22,6 @@ in {
|
|||||||
"Alt+j" = "add video-pan-y -0.05";
|
"Alt+j" = "add video-pan-y -0.05";
|
||||||
};
|
};
|
||||||
scripts = [
|
scripts = [
|
||||||
pkgs.mpvScripts.thumbnail
|
|
||||||
nixpkgs-unstable.mpvScripts.youtube-quality
|
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>;
|
customRC = builtins.readFile <niveum/lib/vim/init.vim>;
|
||||||
packages.nvim = with pkgs.vimPlugins; {
|
packages.nvim = with pkgs.vimPlugins; {
|
||||||
start = [
|
start = [
|
||||||
# cheat-sh-vim
|
|
||||||
# deoplete-nvim
|
|
||||||
# vim-abolish
|
|
||||||
ale
|
ale
|
||||||
fzf-vim
|
fzf-vim
|
||||||
fzfWrapper
|
fzfWrapper
|
||||||
goyo
|
|
||||||
supertab
|
supertab
|
||||||
undotree
|
undotree
|
||||||
tabular
|
tabular
|
||||||
vimwiki
|
vimwiki
|
||||||
vim-256noir
|
|
||||||
vim-colors-paramount
|
vim-colors-paramount
|
||||||
vim-commentary
|
vim-commentary
|
||||||
vim-css-color
|
vim-css-color
|
||||||
@@ -44,13 +39,9 @@
|
|||||||
vim-fetch
|
vim-fetch
|
||||||
vim-fugitive
|
vim-fugitive
|
||||||
vim-gitgutter
|
vim-gitgutter
|
||||||
vim-pandoc
|
|
||||||
vim-pandoc-syntax # vim-pandoc-after
|
|
||||||
vim-repeat
|
vim-repeat
|
||||||
vim-sensible
|
vim-sensible
|
||||||
# vim-startify
|
|
||||||
vim-surround
|
vim-surround
|
||||||
vim-mail
|
|
||||||
];
|
];
|
||||||
opt = [
|
opt = [
|
||||||
csv
|
csv
|
||||||
@@ -72,6 +63,9 @@
|
|||||||
vim-reason-plus
|
vim-reason-plus
|
||||||
vim-toml
|
vim-toml
|
||||||
vimtex
|
vimtex
|
||||||
|
vim-pandoc
|
||||||
|
vim-pandoc-syntax # vim-pandoc-after
|
||||||
|
vim-256noir
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,13 +1,84 @@
|
|||||||
{ pkgs, ... }:
|
{ lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
autowifi = pkgs.writers.writePython3Bin "autowifi" { flakeIgnore = [ "E501" ]; } <stockholm/lass/5pkgs/autowifi/autowifi.py>;
|
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
|
in
|
||||||
{
|
{
|
||||||
|
imports = [ ../modules/networkmanager-declarative.nix ];
|
||||||
|
|
||||||
networking.networkmanager = {
|
networking.networkmanager = {
|
||||||
enable = true;
|
enable = true;
|
||||||
wifi.macAddress = "random";
|
wifi.macAddress = "random";
|
||||||
ethernet.macAddress = "random";
|
ethernet.macAddress = "random";
|
||||||
unmanaged = [ "docker*" ];
|
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" ];
|
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 ];
|
environment.systemPackages = [ pkgs.speedtest-cli ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
|
passwordFile = path: toString (pkgs.writeText "password" (lib.strings.fileContents path));
|
||||||
inherit (import <niveum/lib>) localAddresses;
|
inherit (import <niveum/lib>) localAddresses;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.nextcloud21;
|
package = pkgs.nextcloud22;
|
||||||
|
|
||||||
https = true;
|
https = true;
|
||||||
|
|
||||||
@@ -23,8 +24,8 @@ in
|
|||||||
dbuser = "nextcloud";
|
dbuser = "nextcloud";
|
||||||
dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
|
dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
|
||||||
dbname = "nextcloud";
|
dbname = "nextcloud";
|
||||||
dbpass = lib.strings.fileContents <system-secrets/nextcloud/database>;
|
dbpassFile = passwordFile <system-secrets/nextcloud/database>;
|
||||||
adminpass = lib.strings.fileContents <system-secrets/nextcloud/admin>;
|
adminpassFile = passwordFile <system-secrets/nextcloud/admin>;
|
||||||
adminuser = "admin";
|
adminuser = "admin";
|
||||||
# extraTrustedDomains = [ "toum.r" ];
|
# extraTrustedDomains = [ "toum.r" ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
{
|
{
|
||||||
# enable `nix flake`
|
# enable `nix flake`
|
||||||
nix = {
|
nix = {
|
||||||
package = pkgs.nix;
|
package = pkgs.nixFlakes;
|
||||||
# extraOptions = ''
|
extraOptions = "experimental-features = nix-command flakes";
|
||||||
# experimental-features = nix-command
|
|
||||||
# '';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,29 @@
|
|||||||
let
|
let
|
||||||
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
|
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
|
||||||
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
|
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
|
||||||
|
menstruation = pkgs.callPackage <niveum/submodules/menstruation-backend> {};
|
||||||
|
|
||||||
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; };
|
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 {
|
recht = pkgs.callPackage (pkgs.fetchFromGitHub {
|
||||||
owner = "kmein";
|
owner = "kmein";
|
||||||
repo = "recht";
|
repo = "recht";
|
||||||
@@ -13,7 +34,6 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./krebs.nix
|
|
||||||
./writing.nix
|
./writing.nix
|
||||||
./python.nix
|
./python.nix
|
||||||
./haskell
|
./haskell
|
||||||
@@ -51,7 +71,6 @@ in {
|
|||||||
wget
|
wget
|
||||||
whois
|
whois
|
||||||
ix
|
ix
|
||||||
nur.repos.kmein.python3Packages.instaloader
|
|
||||||
dnsutils
|
dnsutils
|
||||||
# mtr # my traceroute
|
# mtr # my traceroute
|
||||||
# FILE MANAGERS
|
# FILE MANAGERS
|
||||||
@@ -107,6 +126,8 @@ in {
|
|||||||
audacity
|
audacity
|
||||||
calibre
|
calibre
|
||||||
inkscape
|
inkscape
|
||||||
|
astrolog # astrolog
|
||||||
|
anki # flashcards
|
||||||
nixpkgs-unstable.zoom-us # video conferencing
|
nixpkgs-unstable.zoom-us # video conferencing
|
||||||
pdfgrep # search in pdf
|
pdfgrep # search in pdf
|
||||||
pdftk # pdf toolkit
|
pdftk # pdf toolkit
|
||||||
@@ -118,11 +139,14 @@ in {
|
|||||||
youtubeDL
|
youtubeDL
|
||||||
bc # calculator
|
bc # calculator
|
||||||
pari # gp -- better calculator
|
pari # gp -- better calculator
|
||||||
|
scripts.auc
|
||||||
scripts.infschmv
|
scripts.infschmv
|
||||||
|
scripts.qrpaste
|
||||||
scripts.new-mac # get a new mac address
|
scripts.new-mac # get a new mac address
|
||||||
scripts.scanned
|
scripts.scanned
|
||||||
scripts.default-gateway
|
scripts.default-gateway
|
||||||
scripts.showkeys-toggle
|
scripts.showkeys-toggle
|
||||||
|
scripts.kirciuoklis
|
||||||
scripts.favicon
|
scripts.favicon
|
||||||
scripts.ipa # XSAMPA to IPA converter
|
scripts.ipa # XSAMPA to IPA converter
|
||||||
scripts.playlist
|
scripts.playlist
|
||||||
@@ -130,10 +154,9 @@ in {
|
|||||||
scripts.devanagari
|
scripts.devanagari
|
||||||
scripts.betacode # ancient greek betacode to unicode converter
|
scripts.betacode # ancient greek betacode to unicode converter
|
||||||
scripts.meteo
|
scripts.meteo
|
||||||
nur.repos.kmein.mahlzeit
|
scripts.mahlzeit
|
||||||
recht
|
recht
|
||||||
# nur.repos.kmein.slide
|
scripts.vimv
|
||||||
nur.repos.kmein.vimv
|
|
||||||
scripts.swallow # window swallowing
|
scripts.swallow # window swallowing
|
||||||
scripts.genius
|
scripts.genius
|
||||||
scripts.instaget
|
scripts.instaget
|
||||||
@@ -152,8 +175,10 @@ in {
|
|||||||
scripts.vg
|
scripts.vg
|
||||||
scripts.fkill
|
scripts.fkill
|
||||||
scripts.wttr
|
scripts.wttr
|
||||||
scripts.boetlingk
|
scripts.sanskrit-dictionary
|
||||||
scripts.unicodmenu
|
scripts.unicodmenu
|
||||||
|
scripts.horoscope
|
||||||
|
scripts.closest
|
||||||
scripts.trans
|
scripts.trans
|
||||||
scripts.liddel-scott-jones
|
scripts.liddel-scott-jones
|
||||||
scripts.mpv-radio
|
scripts.mpv-radio
|
||||||
@@ -169,6 +194,8 @@ in {
|
|||||||
qrencode
|
qrencode
|
||||||
wtf
|
wtf
|
||||||
|
|
||||||
|
menstruation
|
||||||
|
|
||||||
(pkgs.writers.writeDashBin "worldradio" ''
|
(pkgs.writers.writeDashBin "worldradio" ''
|
||||||
shuf ${worldradio} | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv --no-video
|
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 "$@"'')
|
(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
|
||||||
nixpkgs-unstable.spotify-tui
|
ncspot
|
||||||
playerctl
|
playerctl
|
||||||
|
|
||||||
nix-index
|
nix-index
|
||||||
scripts.nix-index-update
|
scripts.nix-index-update
|
||||||
|
|
||||||
|
#krebs
|
||||||
|
dic
|
||||||
|
cyberlocker-tools
|
||||||
|
untilport
|
||||||
|
kpaste
|
||||||
|
irc-announce
|
||||||
|
git-preview
|
||||||
|
ircaids
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ with haskellPackages; [
|
|||||||
directory
|
directory
|
||||||
dlist
|
dlist
|
||||||
either
|
either
|
||||||
|
edit-distance
|
||||||
exceptions
|
exceptions
|
||||||
extra
|
extra
|
||||||
filepath
|
filepath
|
||||||
@@ -54,6 +55,7 @@ with haskellPackages; [
|
|||||||
megaparsec
|
megaparsec
|
||||||
microlens
|
microlens
|
||||||
monad-logger
|
monad-logger
|
||||||
|
monad-memo
|
||||||
mono-traversable
|
mono-traversable
|
||||||
mtl
|
mtl
|
||||||
network
|
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 = [
|
environment.systemPackages = [
|
||||||
(pkgs.python3.withPackages (py: [
|
(pkgs.python3.withPackages (py: [
|
||||||
py.black
|
py.black
|
||||||
py.python-language-server
|
# py.python-language-server
|
||||||
py.pyls-mypy
|
# py.pyls-mypy
|
||||||
py.pyls-black
|
# py.pyls-black
|
||||||
py.pyls-isort
|
# py.pyls-isort
|
||||||
py.flake8
|
py.flake8
|
||||||
py.pygments
|
py.pygments
|
||||||
py.schema
|
py.schema
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{ pkgs, lib, config, ... }:
|
{ pkgs, lib, config, ... }:
|
||||||
let
|
let
|
||||||
|
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
|
||||||
|
|
||||||
zoteroStyle = { name, sha256 }: {
|
zoteroStyle = { name, sha256 }: {
|
||||||
name = "${name}.csl";
|
name = "${name}.csl";
|
||||||
path = pkgs.fetchurl {
|
path = pkgs.fetchurl {
|
||||||
@@ -63,13 +65,14 @@ in {
|
|||||||
latexrun
|
latexrun
|
||||||
(aspellWithDicts (dict: [ dict.de dict.en dict.en-computers ]))
|
(aspellWithDicts (dict: [ dict.de dict.en dict.en-computers ]))
|
||||||
# haskellPackages.pandoc-citeproc
|
# haskellPackages.pandoc-citeproc
|
||||||
nur.repos.kmein.text2pdf
|
scripts.text2pdf
|
||||||
lowdown
|
lowdown
|
||||||
glow # markdown to term
|
glow # markdown to term
|
||||||
libreoffice
|
libreoffice
|
||||||
# gnumeric
|
# gnumeric
|
||||||
dia
|
dia
|
||||||
pandoc
|
pandoc
|
||||||
|
pandoc-doc
|
||||||
# proselint
|
# proselint
|
||||||
asciidoctor
|
asciidoctor
|
||||||
wordnet
|
wordnet
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ let
|
|||||||
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ <stockholm/krebs/3modules/power-action.nix> ];
|
|
||||||
|
|
||||||
krebs.power-action = {
|
krebs.power-action = {
|
||||||
enable = true;
|
enable = true;
|
||||||
plans.suspend = {
|
plans.suspend = {
|
||||||
|
|||||||
@@ -1,19 +1,10 @@
|
|||||||
{ lib, pkgs, config, ... }:
|
{ lib, pkgs, config, ... }:
|
||||||
let
|
let
|
||||||
inherit (import <niveum/lib>) tmpfilesConfig;
|
inherit (import <niveum/lib>) tmpfilesConfig serveHtml;
|
||||||
|
|
||||||
radioStore = "/var/lib/radio";
|
radioStore = "/var/lib/radio";
|
||||||
htgenPort = 8080;
|
htgenPort = 8080;
|
||||||
stations = {
|
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 = {
|
lyrikline = {
|
||||||
streamPort = 8001;
|
streamPort = 8001;
|
||||||
mpdPort = 6601;
|
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 = {
|
krebs.htgen.radio = {
|
||||||
port = htgenPort;
|
port = htgenPort;
|
||||||
@@ -113,25 +108,6 @@ in
|
|||||||
)"
|
)"
|
||||||
url="$(cat ${radioStore}/$hash)"
|
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>"
|
echo "<html><body style='margin:0'><iframe style='width:100%;height:100%;border:0' src="$url"></iframe></body></html>"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
@@ -220,57 +196,12 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
systemd.services.meddl = {
|
services.nginx.virtualHosts."radio.kmein.de" = {
|
||||||
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" = {
|
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
locations = lib.mkMerge (
|
locations = lib.mkMerge (
|
||||||
[
|
[
|
||||||
{
|
{ "/".extraConfig = serveHtml (import ./station-list.nix { inherit pkgs lib stations; }) pkgs; }
|
||||||
"/".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}";
|
|
||||||
}
|
|
||||||
] ++ (lib.mapAttrsToList (name: station: {
|
] ++ (lib.mapAttrsToList (name: station: {
|
||||||
"= /${name}/status".proxyPass = "http://127.0.0.1:${toString htgenPort}";
|
"= /${name}/status".proxyPass = "http://127.0.0.1:${toString htgenPort}";
|
||||||
"= /${name}/listen.ogg".proxyPass = "http://127.0.0.1:${toString station.streamPort}";
|
"= /${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, ... }: {
|
{ config, pkgs, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
<niveum/modules/retiolum.nix>
|
../modules/retiolum.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.hosts = { "42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ]; };
|
networking.hosts = { "42:0:ca48:f98f:63d7:31ce:922b:245d" = [ "go" ]; };
|
||||||
|
|||||||
@@ -4,46 +4,6 @@ let
|
|||||||
in{
|
in{
|
||||||
home-manager.users.me.programs.rofi = {
|
home-manager.users.me.programs.rofi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
separator = "solid";
|
|
||||||
scrollbar = false;
|
|
||||||
borderWidth = 0;
|
|
||||||
lines = 5;
|
|
||||||
font = "Monospace 10";
|
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 {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./literature-quote.nix
|
./literature-quote.nix
|
||||||
|
./astrology.nix
|
||||||
./autorenkalender.nix
|
./autorenkalender.nix
|
||||||
./nachtischsatan.nix
|
./nachtischsatan.nix
|
||||||
./tlg-wotd.nix
|
./tlg-wotd.nix
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ let
|
|||||||
living-room-id = 131090;
|
living-room-id = 131090;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ <niveum/modules/traadfri.nix> ];
|
imports = [ ../modules/traadfri.nix ];
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
(pkgs.writers.writeDashBin "traadfri-party" ''
|
(pkgs.writers.writeDashBin "traadfri-party" ''
|
||||||
|
|||||||
@@ -19,17 +19,15 @@ in
|
|||||||
openDefaultPorts = true;
|
openDefaultPorts = true;
|
||||||
configDir = "${mpd-directory}/.config/syncthing";
|
configDir = "${mpd-directory}/.config/syncthing";
|
||||||
dataDir = "${mpd-directory}/.config/syncthing";
|
dataDir = "${mpd-directory}/.config/syncthing";
|
||||||
declarative = rec {
|
cert = toString <system-secrets/syncthing/cert.pem>;
|
||||||
cert = toString <system-secrets/syncthing/cert.pem>;
|
key = toString <system-secrets/syncthing/key.pem>;
|
||||||
key = toString <system-secrets/syncthing/key.pem>;
|
devices = {
|
||||||
devices = {
|
inherit ((import <niveum/lib>).syncthing.devices) kabsa manakish heym;
|
||||||
inherit ((import <niveum/lib>).syncthing.devices) kabsa manakish heym;
|
};
|
||||||
};
|
folders.${config.services.mpd.musicDirectory} = {
|
||||||
folders.${config.services.mpd.musicDirectory} = {
|
devices = [ "heym" "kabsa" "manakish" ];
|
||||||
devices = [ "heym" "kabsa" "manakish" ];
|
id = "music";
|
||||||
id = "music";
|
type = "receiveonly";
|
||||||
type = "receiveonly";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -97,6 +95,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
@@ -111,4 +110,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,13 +25,26 @@ let
|
|||||||
{
|
{
|
||||||
name = "Tatort";
|
name = "Tatort";
|
||||||
url = "https://www.daserste.de/unterhaltung/krimi/tatort/vorschau/index.html";
|
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";
|
name = "Kratylos";
|
||||||
url = "https://kratylos.reichert-online.org/current_issue/KRATYLOS";
|
url = "https://kratylos.reichert-online.org/current_issue/KRATYLOS";
|
||||||
filter = [ { element-by-id = "content"; } "html2text" "strip" ];
|
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";
|
name = "Indogermanische Forschungen";
|
||||||
url = "https://www.degruyter.com/journal/key/INDO/html";
|
url = "https://www.degruyter.com/journal/key/INDO/html";
|
||||||
@@ -120,8 +133,11 @@ in
|
|||||||
home = urlwatchDir;
|
home = urlwatchDir;
|
||||||
createHome = true;
|
createHome = true;
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
|
group = "urlwatch";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
users.groups.urlwatch = {};
|
||||||
|
|
||||||
systemd.services.urlwatch = {
|
systemd.services.urlwatch = {
|
||||||
enable = true;
|
enable = true;
|
||||||
startAt = "*-*-* 05:00:00";
|
startAt = "*-*-* 05:00:00";
|
||||||
@@ -132,6 +148,7 @@ in
|
|||||||
'';
|
'';
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
User = config.users.extraUsers.urlwatch.name;
|
User = config.users.extraUsers.urlwatch.name;
|
||||||
|
Group = config.users.groups.urlwatch.name;
|
||||||
WorkingDirectory = config.users.extraUsers.urlwatch.home;
|
WorkingDirectory = config.users.extraUsers.urlwatch.home;
|
||||||
PermissionsStartOnly = "true";
|
PermissionsStartOnly = "true";
|
||||||
PrivateTmp = "true";
|
PrivateTmp = "true";
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
{ pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
{
|
{
|
||||||
imports = [ <stockholm/krebs/3modules/fetchWallpaper.nix> ];
|
|
||||||
|
|
||||||
krebs.fetchWallpaper = {
|
krebs.fetchWallpaper = {
|
||||||
enable = true;
|
enable = true;
|
||||||
url = "http://prism.r/realwallpaper-krebs-stars-berlin.png";
|
url = "http://prism.r/realwallpaper-krebs-stars-berlin.png";
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ in {
|
|||||||
'';
|
'';
|
||||||
weechat = pkgs.weechat.override {
|
weechat = pkgs.weechat.override {
|
||||||
configure = { ... }: {
|
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
|
init = let
|
||||||
coolColors = lib.lists.subtractLists (lib.range 52 69 ++ lib.range 231 248) (lib.range 31 254);
|
coolColors = lib.lists.subtractLists (lib.range 52 69 ++ lib.range 231 248) (lib.range 31 254);
|
||||||
nick = "kmein";
|
nick = "kmein";
|
||||||
@@ -43,14 +43,18 @@ in {
|
|||||||
/server add oftc irc.oftc.net/6697 -ssl -ipv6
|
/server add oftc irc.oftc.net/6697 -ssl -ipv6
|
||||||
/server add retiolum irc.r
|
/server add retiolum irc.r
|
||||||
/server add news news.r
|
/server add news news.r
|
||||||
|
/matrix server add nibbana nibbana.jp
|
||||||
|
|
||||||
/alias add mod /quote omode $channel +o $nick
|
/alias add mod /quote omode $channel +o $nick
|
||||||
|
|
||||||
/relay add weechat 9000
|
/relay add weechat 9000
|
||||||
/set relay.network.password ${relayPassword}
|
/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.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.autojoin "#krebs,#nixos,#the_playlist"
|
||||||
/set irc.server.hackint.sasl_mechanism plain
|
/set irc.server.hackint.sasl_mechanism plain
|
||||||
@@ -68,7 +72,7 @@ in {
|
|||||||
/set irc.server.news.command "/oper aids balls"
|
/set irc.server.news.command "/oper aids balls"
|
||||||
/set logger.level.irc.news 0
|
/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 joinquit * irc_join,irc_part,irc_quit,irc_nick *
|
||||||
/filter addreplace playlist_topic irc.*.#the_playlist irc_topic *
|
/filter addreplace playlist_topic irc.*.#the_playlist irc_topic *
|
||||||
/filter addreplace brockman_notice irc.news.* irc_notice *
|
/filter addreplace brockman_notice irc.news.* irc_notice *
|
||||||
@@ -80,6 +84,7 @@ in {
|
|||||||
/connect hackint
|
/connect hackint
|
||||||
/connect retiolum
|
/connect retiolum
|
||||||
/connect news
|
/connect news
|
||||||
|
/matrix connect nibbana
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
88
deploy.nix
88
deploy.nix
@@ -1,68 +1,38 @@
|
|||||||
let
|
let
|
||||||
inherit (import ./lib/default.nix) sshPort;
|
inherit (import ./lib/default.nix) sshPort;
|
||||||
|
|
||||||
gitFromJson = path:
|
krops = builtins.fetchGit { url = "https://cgit.krebsco.de/krops/"; };
|
||||||
let object = importJson path;
|
|
||||||
in {
|
|
||||||
inherit (object) url;
|
|
||||||
ref = object.rev;
|
|
||||||
};
|
|
||||||
krops = builtins.fetchGit (gitFromJson .versions/krops.json);
|
|
||||||
lib = import "${krops}/lib";
|
lib = import "${krops}/lib";
|
||||||
pkgs = import "${krops}/pkgs" { };
|
pkgs = import "${krops}/pkgs" { };
|
||||||
importJson = (import <nixpkgs> { }).lib.importJSON;
|
|
||||||
|
|
||||||
regularSystem = { path, name, address }: {
|
source = name: lib.evalSource [{
|
||||||
source = lib.evalSource [{
|
niveum.file = toString ./.;
|
||||||
niveum.file = toString ./.;
|
system-secrets.pass = {
|
||||||
system.file = toString path;
|
dir = toString ~/.password-store;
|
||||||
nixos-config.symlink = "system/configuration.nix";
|
name = "systems/${name}";
|
||||||
|
};
|
||||||
|
secrets.pass = {
|
||||||
|
dir = toString ~/.password-store;
|
||||||
|
name = "shared";
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
|
||||||
nixpkgs.git = gitFromJson .versions/nixpkgs.json // { shallow = true; };
|
command = targetPath: ''
|
||||||
nixpkgs-unstable.git = gitFromJson .versions/nixpkgs-unstable.json // { shallow = true; };
|
nix-shell -p git --run '
|
||||||
home-manager.git = gitFromJson .versions/home-manager.json;
|
nixos-rebuild switch -v --show-trace --flake ${targetPath}/niveum || \
|
||||||
stockholm.git = gitFromJson .versions/stockholm.json;
|
nixos-rebuild switch -v --flake ${targetPath}/niveum
|
||||||
retiolum.git = gitFromJson .versions/retiolum.json;
|
'
|
||||||
nur.git = gitFromJson .versions/nur.json;
|
'';
|
||||||
nixpkgs-mozilla.git = gitFromJson .versions/nixpkgs-mozilla.json;
|
|
||||||
system-secrets.pass = {
|
createHost = name: target: pkgs.krops.writeCommand "deploy-${name}" {
|
||||||
dir = toString ~/.password-store;
|
source = source name;
|
||||||
name = "systems/${name}";
|
inherit command target;
|
||||||
};
|
|
||||||
secrets.pass = {
|
|
||||||
dir = toString ~/.password-store;
|
|
||||||
name = "shared";
|
|
||||||
};
|
|
||||||
}];
|
|
||||||
target = "root@${address}:${toString sshPort}";
|
|
||||||
};
|
};
|
||||||
inherit (pkgs.krops) writeDeploy;
|
in rec {
|
||||||
in {
|
zaatar = createHost "zaatar" "root@zaatar.r:${toString sshPort}";
|
||||||
zaatar = writeDeploy "deploy-zaatar" (regularSystem {
|
kabsa = createHost "kabsa" "root@kabsa.r:${toString sshPort}";
|
||||||
path = systems/zaatar;
|
makanek = createHost "kabsa" "root@makanek.r:${toString sshPort}";
|
||||||
name = "zaatar";
|
manakish = createHost "kabsa" "root@manakish.r:${toString sshPort}";
|
||||||
address = "zaatar.r";
|
all = pkgs.writeScript "deploy-all"
|
||||||
});
|
(lib.concatStringsSep "\n" [ zaatar kabsa makanek manakish ]);
|
||||||
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";
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|||||||
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");
|
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;
|
sshPort = 22022;
|
||||||
|
|
||||||
colours = import ./colours/mac-os.nix;
|
colours = import ./colours/mac-os.nix;
|
||||||
@@ -28,6 +34,8 @@ rec {
|
|||||||
|
|
||||||
defaultApplications = import ./default-applications.nix;
|
defaultApplications = import ./default-applications.nix;
|
||||||
|
|
||||||
|
retiolumAddresses = import ./retiolum-network.nix;
|
||||||
|
|
||||||
localAddresses = import ./local-network.nix;
|
localAddresses = import ./local-network.nix;
|
||||||
|
|
||||||
email-sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKz33wHtPuIfgXEb0+hybxFGV9ZuPsDTLUZo/+hlcdA";
|
email-sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKz33wHtPuIfgXEb0+hybxFGV9ZuPsDTLUZo/+hlcdA";
|
||||||
|
|||||||
@@ -92,6 +92,43 @@ in {
|
|||||||
units = "metric";
|
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";
|
block = "custom";
|
||||||
interval = 60 * 60;
|
interval = 60 * 60;
|
||||||
@@ -100,17 +137,6 @@ in {
|
|||||||
| ${pkgs.jq}/bin/jq -r '"💉 Ⅰ \(.data.quote * 1000 | floor | . / 10)% Ⅱ \(.data.secondVaccination.quote * 1000 | floor | . / 10)%"'
|
| ${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 {
|
(let service = "openvpn-hu-berlin"; in {
|
||||||
block = "custom";
|
block = "custom";
|
||||||
interval = 5;
|
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.";
|
desc = "Diminutive from lassus (“weary, faint, tired”). A programming human. Doing superior professional art.";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
stream = "https://radio.xn--kiern-0qa.de/meddl/listen.ogg";
|
stream = "https://radio.kmein.de/lyrik/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";
|
|
||||||
station = "Lyrik";
|
station = "Lyrik";
|
||||||
desc = "Lyrik-Lesung rund um die Uhr.";
|
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";
|
station = "Lyrikline";
|
||||||
logo = "https://www.lyrikline.org/themes/lyrik/svg/Logo_lyrikline_pure.svg";
|
logo = "https://www.lyrikline.org/themes/lyrik/svg/Logo_lyrikline_pure.svg";
|
||||||
desc = "24/7 zufällige Wiedergaben von lyrikline.org.";
|
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 *.jq packadd jq.vim
|
||||||
autocmd bufnewfile,bufread *.re packadd vim-reason-plus | set filetype=reason
|
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 *.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 urls,config set filetype=conf
|
||||||
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
|
autocmd bufnewfile,bufread *.elm packadd elm-vim | set filetype=elm shiftwidth=4
|
||||||
autocmd bufnewfile,bufread *.dhall packadd dhall-vim | set filetype=dhall
|
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 = {
|
users.users.moodle-dl = {
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
home = cfg.directory;
|
home = cfg.directory;
|
||||||
|
group = "moodle-dl";
|
||||||
};
|
};
|
||||||
|
|
||||||
users.groups.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}")
|
(name: _: builtins.readFile "${<retiolum/hosts>}/${name}")
|
||||||
(builtins.readDir <retiolum/hosts>);
|
(builtins.readDir <retiolum/hosts>);
|
||||||
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
rsaPrivateKeyFile = toString <system-secrets/retiolum.key>;
|
||||||
|
ed25519PrivateKeyFile = toString <system-secrets/retiolum.ed25519>;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
LocalDiscovery = yes
|
LocalDiscovery = yes
|
||||||
AutoConnect = yes
|
AutoConnect = yes
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ let
|
|||||||
traadfri-package = pkgs.fetchFromGitHub {
|
traadfri-package = pkgs.fetchFromGitHub {
|
||||||
owner = "kmein";
|
owner = "kmein";
|
||||||
repo = "traadfri";
|
repo = "traadfri";
|
||||||
rev = "a55b778cf4c7f124e75070b056c90f5a8043bc45";
|
rev = "cf46bd09cd3263b90a09b0ca979aa705a4c3671c";
|
||||||
sha256 = "10ggqksdbgmcwc2f3xs6abjf9zpvv554xfl3b3bblmfijgr6srv9";
|
sha256 = "0az9q38pl8fqk00488blhn6rhvwsw2wky3dbdlyz7945ggvxnbyd";
|
||||||
};
|
};
|
||||||
in pkgs.callPackage traadfri-package {
|
in pkgs.callPackage traadfri-package {
|
||||||
libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> { tls = true; };
|
libcoap = pkgs.callPackage <niveum/packages/libcoap.nix> { tls = true; };
|
||||||
|
|||||||
@@ -76,7 +76,11 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
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
|
# ref https://github.com/florianheinemann/MPD.FM/blob/9d037cf87597b26ae2f10ba9feea48946ad6cc68/service/MPD.FM.service
|
||||||
systemd.services.tuna = {
|
systemd.services.tuna = {
|
||||||
wantedBy = [ "multi-user.target" ];
|
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, ... }:
|
{ pkgs, lib, ... }:
|
||||||
let
|
let
|
||||||
kpaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/kpaste> { };
|
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 }:
|
wrapScript = { packages ? [ ], name, script }:
|
||||||
pkgs.writers.writeDashBin name ''
|
pkgs.writers.writeDashBin name ''
|
||||||
PATH=$PATH:${
|
PATH=$PATH:${
|
||||||
@@ -15,6 +17,8 @@ let
|
|||||||
sha256 = "0c4hkny4zkknlimc9yi9ljss2cws4zn8lzd8ip9b8mfsm094dlfl";
|
sha256 = "0c4hkny4zkknlimc9yi9ljss2cws4zn8lzd8ip9b8mfsm094dlfl";
|
||||||
};
|
};
|
||||||
in rec {
|
in rec {
|
||||||
|
auc = pkgs.callPackage ./auc.nix {};
|
||||||
|
|
||||||
instaget = wrapScript {
|
instaget = wrapScript {
|
||||||
packages = [ pkgs.jq pkgs.curl pkgs.gnugrep ];
|
packages = [ pkgs.jq pkgs.curl pkgs.gnugrep ];
|
||||||
script = ./instaget.sh;
|
script = ./instaget.sh;
|
||||||
@@ -76,6 +80,12 @@ in rec {
|
|||||||
fi
|
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 =
|
interdimensional-cable =
|
||||||
let nimaid-github-io = pkgs.fetchFromGitHub {
|
let nimaid-github-io = pkgs.fetchFromGitHub {
|
||||||
owner = "nimaid";
|
owner = "nimaid";
|
||||||
@@ -89,7 +99,7 @@ in rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
tag = wrapScript {
|
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";
|
script = "${voidrice}/.local/bin/tag";
|
||||||
name = "tag";
|
name = "tag";
|
||||||
};
|
};
|
||||||
@@ -100,6 +110,12 @@ in rec {
|
|||||||
name = "meteo";
|
name = "meteo";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
kirciuoklis = wrapScript {
|
||||||
|
packages = [ pkgs.curl pkgs.jq ];
|
||||||
|
script = ./kirciuoklis.sh;
|
||||||
|
name = "kirciuoklis";
|
||||||
|
};
|
||||||
|
|
||||||
booksplit = wrapScript {
|
booksplit = wrapScript {
|
||||||
packages = [ pkgs.ffmpeg tag pkgs.glibc.bin ];
|
packages = [ pkgs.ffmpeg tag pkgs.glibc.bin ];
|
||||||
script = "${voidrice}/.local/bin/booksplit";
|
script = "${voidrice}/.local/bin/booksplit";
|
||||||
@@ -122,13 +138,37 @@ in rec {
|
|||||||
packages = [ pkgs.curl pkgs.pup betacode pkgs.gnused pkgs.pandoc pkgs.man ];
|
packages = [ pkgs.curl pkgs.pup betacode pkgs.gnused pkgs.pandoc pkgs.man ];
|
||||||
};
|
};
|
||||||
|
|
||||||
boetlingk = wrapScript {
|
sanskrit-dictionary = pkgs.writers.writeDashBin "sa" ''
|
||||||
name = "boet";
|
set -efu
|
||||||
script = ./boetlingk.sh;
|
|
||||||
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc pkgs.man ];
|
|
||||||
};
|
|
||||||
|
|
||||||
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; };
|
mpv-tv = import ./mpv-tv.nix { inherit pkgs lib; };
|
||||||
|
|
||||||
@@ -138,6 +178,18 @@ in rec {
|
|||||||
script = ./favicon.sh;
|
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 {
|
genius = wrapScript {
|
||||||
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc ];
|
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc ];
|
||||||
name = "genius";
|
name = "genius";
|
||||||
@@ -245,7 +297,7 @@ in rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
betacode = pkgs.writers.writePython3Bin "betacode" {
|
betacode = pkgs.writers.writePython3Bin "betacode" {
|
||||||
libraries = [ pkgs.nur.repos.kmein.python3Packages.betacode ];
|
libraries = [ betacode ];
|
||||||
} ''
|
} ''
|
||||||
import betacode.conv
|
import betacode.conv
|
||||||
import sys
|
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
|
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
|
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