1
0
mirror of https://github.com/kmein/niveum synced 2026-03-22 21:01:07 +01:00

1 Commits

Author SHA1 Message Date
Kierán Meinhardt
3a31717c27 WIP: develop mail config 2019-08-18 19:16:56 +02:00
335 changed files with 2600 additions and 13204 deletions

View File

@@ -1,38 +0,0 @@
#! /bin/sh
set -euf
pl() {
for i in $(seq $1 $(expr $2 - 1)); do
printf '\e[38;5;%sm%03i\e[m ' $i $i
done
printf '\e[38;5;%sm%03i\e[m\n' $2 $2
}
p() {
printf '\e[38;5;%sm%03i\e[m ' $1 $1
}
pn() {
printf '\e[38;5;%sm%03i\e[m\n' $1 $1
}
p6x6() {
for i in $(seq 0 5); do
for j in $(seq 0 5); do
p $(expr $1 + $i + $j \* 6)
done
echo
done
}
pl 0 7
pl 8 15
p6x6 16
p6x6 52
p6x6 88
p6x6 124
p6x6 160
p6x6 196
pl 232 243
pl 244 255

View File

@@ -1,24 +0,0 @@
#!/bin/sh -e
#
# Usage: browser
# pipe html to a browser
# e.g.
# $ echo '<h1>hi mom!</h1>' | browser
# $ ron -5 man/rip.5.ron | browser
if [ -t 0 ]; then
if [ -n "$1" ]; then
open $1
else
cat <<usage
Usage: browser
pipe html to a browser
$ echo '<h1>hi mom!</h1>' | browser
$ ron -5 man/rip.5.ron | browser
usage
fi
else
f="/tmp/browser.$RANDOM.html"
cat /dev/stdin > $f
xdg-open $f
fi

View File

@@ -1,46 +0,0 @@
#!/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")
))
'

View File

@@ -1,25 +0,0 @@
#!/bin/sh
set -efu
usage() {
echo >&2 "$0 add-{reddit,telegram,youtube,twitch,twitter} NAME"
exit 1
}
candyman() {
curl -fsSv http://news.r/api -H content-type:application/json -d "$(jq -n "
{
command: \"PRIVMSG\",
params: [\"#all\", \"candyman: $1 $2\"]
}
")"
}
[ $# -ge 2 ] || usage
case "$1" in
add-reddit|add-telegram|add-youtube|add-twitter|add-twitch)
candyman "$@"
;;
*) usage;;
esac

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env -S awk -f
function z() {
getline < "/proc/uptime"
close("/proc/uptime")
return $0
}
BEGIN {
x = z()
while (1) {
y = z()
printf "%02d:%05.2f\r", (y - x) / 60, (y - x) % 60
}
}

View File

@@ -1,14 +0,0 @@
#!/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)

View File

@@ -1,7 +0,0 @@
#! /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 "$@"

View File

@@ -1,34 +0,0 @@
#!/bin/sh
set -efu
# Berlin: -d lodeg=13 -d lomin=22 -d losec=41 -d lodir=E -d ladeg=52 -d lamin=27 -d lasec=42 -d ladir=N -d usecoords=1 \
# Kassel: -d lodeg=9 -d lomin=32 -d losec=5 -d lodir=E -d ladeg=51 -d lamin=18 -d lasec=17 -d ladir=N -d usecoords=1 \
[ $# -eq 1 ] || {
echo >&2 Usage: "$0" TIMESTAMP
exit 1
}
export TZ=UTC
chart_path="$(mktemp /tmp/chart_XXX.pdf)"
timestamp="$1"
year="$(date -d "@$timestamp" +%Y)"
month="$(date -d "@$timestamp" +%m)"
day="$(date -d "@$timestamp" +%d)"
hour="$(date -d "@$timestamp" +%H)"
minute="$(date -d "@$timestamp" +%M)"
curl -sSL 'https://edifyingfellowship.org/astro/' \
-d lodeg=9 -d lomin=32 -d losec=5 -d lodir=E -d ladeg=51 -d lamin=18 -d lasec=17 -d ladir=N -d usecoords=1 \
-d ybyr="$year" -d ybmo="$month" -d ybdy="$day" -d ybhr="$hour" -d ybmi="$minute" -d ybsc=0 -d ybtz="$TZ" \
-d currenttime=0 \
-d title="$timestamp" \
-d options[]=VancouverWheel -d options[]=Arrow -d options[]=XBold -d options[]=HouseLabels -d options[]=Placidus \
-d options[]=Sun -d options[]=Moon -d options[]=Mercury -d options[]=Venus -d options[]=Mars -d options[]=Jupiter -d options[]=Saturn -d options[]=Uranus -d options[]=Neptune -d options[]=Pluto -d options[]=Ascendant -d options[]=MC -d options[]=Lilith -d options[]=MeanNode -d options[]=TrueNode \
-d aspectpct=100 -d format=PDF -d Submit= -o "$chart_path"
zathura "$chart_path"

View File

@@ -1,24 +0,0 @@
#!/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)

View File

@@ -1,15 +0,0 @@
#!/usr/bin/env bash
session_id=7b638c194d9bda74f80043045018cc9e
declare -A libraries
libraries["Literatur"]=344428
libraries["Sprache"]=344160
libraries["Miscellanea"]=344427
libraries["Wissenschaft"]=344429
libraries["Relicta"]=565920
for library in ${!libraries[@]}
do
curl -sSL 'https://www.libib.com/library/functions/csv-export.php' -H "Cookie: PHPSESSID=$session_id" -d export="${libraries[$library]}" > "$library.csv"
done

View File

@@ -1,81 +0,0 @@
#!/bin/sh
set -efu
if echo "$1" | grep -Eq '[[:digit:]]{5}'; then
PLZ="$1"
else
echo >&2 "Usage: $0 PLZ"
exit 1
fi
lieferando_dir=/tmp/lieferando
mkdir -p "$lieferando_dir/$PLZ"
fetch_restaurants() {
cache_path="$lieferando_dir/$PLZ.json"
if [ -r "$cache_path" ]; then
cat "$cache_path"
else
w3m -dump_source "http://www.lieferando.de/$PLZ" \
| gunzip \
| sed -n '/var restaurants/,/];$/p' \
| sed 's/var restaurants =//;$s/;$//' \
| prettier --parser=json \
| jq '
map({
name: .[30] | .name,
category: .[30] |.categories | split(", "),
url: "http://lieferando.de\(.[30] | .url)",
minutes: .[19],
minimum: .[10],
delivery: .[14]
})' \
| tee "$cache_path"
fi
}
fetch_menu() {
[ $# -eq 1 ] || exit 1
slug="$(echo "$1" | sed 's!.*/!!')"
cache_path="$lieferando_dir/$PLZ/$slug.json"
if [ -r "$cache_path" ]; then
cat "$cache_path"
else
w3m -dump_source "$1" \
| gunzip \
| sed -n '/var MenucardProducts/,/\];/p' \
| sed 's/var MenucardProducts =//;s/;$//' \
| jq -r '
unique_by(.productId)
| group_by(.categoryId)
| flatten
' \
| tee "$cache_path"
fi
}
data="$(fetch_restaurants)"
# echo "$data" | jq -c '.[]' | while read -r restaurant; do
# fetch_menu "$(echo "$restaurant" | jq -r .url)"
# done
selected_categories="$(echo "$data" | jq -r 'map(.category) | flatten | unique | .[]' | fzf -m)"
selected_restaurant_url="$(echo "$selected_categories" | jq --argjson restaurants "$data" -sRr '
split("\n")[:-1] as $categories
| $restaurants[]
| select(.category - $categories != .category)
| "\(.name) [🚴\(.minutes)min 💰\(.minimum)€ + \(.delivery)€] (\(.url))"
' \
| fzf \
| sed 's/.*(//;s/)$//'
)"
fetch_menu "$selected_restaurant_url" \
| jq -r '.[] | "\(.price)\t\(.name)"' \
| fzf -m \
| awk '{print $0; sum += $1} END {print "-----"; print sum}'

View File

@@ -1,17 +0,0 @@
BEGIN {
if (!comment) comment = "--";
if (!begin) begin = "\\begin{code}";
if (!end) end = "\\end{code}";
}
{
if ($0 == begin) {
code = 1;
print comment, $0;
} else if ($0 == end) {
code = 0;
print comment, $0;
} else {
if (code) print $0;
else print comment, $0;
}
}

View File

@@ -1,3 +0,0 @@
#! /bin/sh
set -efu
exec curl -fSs --unix-socket /tmp/much.api.sock http://localhost/current/part

View File

@@ -1,27 +0,0 @@
#! /bin/sh
# usage: mail-current-query-find-part-by-name NAME
set -efu
name=$1
query=$(mail-current-query)
result=$(notmuch show --entire-thread=false --format=json "$query")
part_id=$(printf %s "$result" | jq --arg name "$name" '
[
recurse |
select(type == "object") |
{ id, name: .filename } |
select(.id != null and .name != null)
] |
map(select(.name == $name))[0].id
')
if test "$part_id" = null; then
printf 'error: could not find part with name %s\n' \
"$name" \
>&2
exit 1
fi
exec notmuch show --part="$part_id" "$query"

View File

@@ -1,39 +0,0 @@
#! /bin/sh
# usage: mail-current-query-find-part-by-type TYPE
set -efu
type=$1
query=$(mail-current-query)
result=$(notmuch show --entire-thread=false --format=json "$query")
part_id=$(printf %s "$result" | jq --arg type "$type" '
#flatten|map(select(.!=null))[0].body[0] |
#
#if .["content-type"] == $type then
# .id
#elif .["content-type"] | test("^multipart/") then
# .content|map(select(.["content-type"]==$type))[0].id
#else
# null
#end
[
recurse |
select(type == "object") |
{ id, type: .["content-type"] } |
select(.id != null and .type != null)
] |
map(select(.type == $type))[0].id
')
if test "$part_id" = null; then
printf 'error: could not find part with type %s\n' \
"$type" \
>&2
exit 1
fi
exec notmuch show --part="$part_id" "$query"

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p poppler_utils tesseract4
set -eu
pdf_path="$(realpath "$1")"
[ -f "$pdf_path" ] || {
echo "Usage: $0 FILE.pdf" >&2
exit 1
}
tmpdir="$(mktemp -d)"
trap 'rm -rf $tmpdir' EXIT
cd "$tmpdir"
pdftoppm -png "$pdf_path" pdf-ocr
for png in pdf-ocr*.png; do
tesseract "$png" "$png.txt" 2>/dev/null
done
cat pdf-ocr-*.txt

View File

@@ -1,2 +0,0 @@
#!/bin/sh
youtube-dl -ij "$*" | jq -sr '.[] | .webpage_url'

View File

@@ -1,17 +0,0 @@
#!/bin/sh
curl -sSL https://www.netzwelt.de/proxy/index.html \
| pup ".tblc" \
| xml-to-json /dev/stdin \
| jq '
.div.table.tbody.tr
| map(
.td
| {
ip: .[0].a.value,
port: .[1],
country: .[2] | (if type == "string" then . else .a.value end),
security: .[3],
protocol: .[4]
}
)
'

View File

@@ -1,4 +0,0 @@
#!/bin/sh
curl -sSL "https://raw.githubusercontent.com/$*/master/README.md" \
| pandoc -f gfm -t man -s \
| man -l -

View File

@@ -1,6 +0,0 @@
#!/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"

6
.gitignore vendored
View File

@@ -1,6 +1,2 @@
secrets.nix
result result
.direnv
.envrc
.history
.todo
node_modules

9
.gitmodules vendored
View File

@@ -1,9 +0,0 @@
[submodule "submodules/menstruation-telegram"]
path = submodules/menstruation-telegram
url = https://github.com/kmein/menstruation-telegram
[submodule "submodules/menstruation-backend"]
path = submodules/menstruation-backend
url = https://github.com/kmein/menstruation.rs
[submodule "submodules/nur-packages"]
path = submodules/nur-packages
url = git@github.com:kmein/nur-packages.git

View File

@@ -1,11 +0,0 @@
{
"url": "https://github.com/nix-community/home-manager.git",
"rev": "697cc8c68ed6a606296efbbe9614c32537078756",
"date": "2021-12-19T00:59:29+01:00",
"path": "/nix/store/fb46bv10azrag2jjlzhil6j11f4x8glw-home-manager",
"sha256": "1c8gxm86zshr2zj9dvr02qs7y3m46gqavr6wyv01r09jfd99dxz9",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://cgit.krebsco.de/krops",
"rev": "cccebf3ff7a53336b3f106cb96dddd5892d427ed",
"date": "2021-03-23T22:47:37+01:00",
"path": "/nix/store/mz13xxnil35lwsf90hwnrm2agir7hb51-krops",
"sha256": "07mg3iaqjf1w49vmwfchi7b1w55bh7rvsbgicp2m47gnj9alwdb6",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"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
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://github.com/mozilla/nixpkgs-mozilla",
"rev": "7c1e8b1dd6ed0043fb4ee0b12b815256b0b9de6f",
"date": "2021-12-07T09:28:33-05:00",
"path": "/nix/store/pqwcw589i2y2w2116wn3ifl834adjsa0-nixpkgs-mozilla",
"sha256": "1a71nfw7d36vplf89fp65vgj3s66np1dc0hqnqgj5gbdnpm1bihl",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://github.com/NixOS/nixpkgs.git",
"rev": "f01adc7b35a8f80e82f3466e6d873b8b9c8f1b28",
"date": "2021-12-22T23:05:28+01:00",
"path": "/nix/store/zhfrvg77dzpc3hq02v9zv20dfgqwpzk6-nixpkgs",
"sha256": "17iyf2iiizi7c1wr71day3wvgalbkkm2zgc9lpy7y42rl4frq9sf",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://github.com/NixOS/nixpkgs.git",
"rev": "9ab7d12287ced0e1b4c03b61c781901f178d9d77",
"date": "2021-12-21T10:09:48+01:00",
"path": "/nix/store/minmlh0avkwvvc3p7flhpbglp13kr585-nixpkgs",
"sha256": "0bbd2pgcyavqn5wgq0xp8p67lha0kv9iqnh49i9w5fb5g29q7i30",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://github.com/krebs/retiolum",
"rev": "b72b0a987767b587c79cba8499b5114d69fceeef",
"date": "2021-12-28T19:46:45+00:00",
"path": "/nix/store/kyaqwf89v6id9mda92x4b0hf778j987x-retiolum",
"sha256": "19hjzzlfk1m9ign33w4ppqgmg23v7c6k8l0fm7f33spq8982w7rb",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,11 +0,0 @@
{
"url": "https://cgit.lassul.us/stockholm",
"rev": "576c05cf3a0ceddefa29c2d0073108177c3cfa52",
"date": "2021-12-22T13:59:46+01:00",
"path": "/nix/store/yx1j5pardgd9114f0cf3c4xjfq6r4yfv-stockholm",
"sha256": "18napi4k8i2iizrismlp9ha3ga6c3n2dvrhijy59kl1jxqrsaq9l",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,
"leaveDotGit": false
}

View File

@@ -1,10 +0,0 @@
# 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)

BIN
art/.haskell-grey.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

BIN
art/file (1).jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
art/file.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

View File

@@ -1,45 +0,0 @@
{ pkgs, lib, config, ... }:
{
environment.variables.TERMINAL = "alacritty";
environment.systemPackages = [
pkgs.alacritty
];
home-manager.users.me.xdg.configFile =
let
inherit (import <niveum/lib>) colours;
colourNames = [ "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white" ];
colourPairs = lib.getAttrs colourNames colours;
in {
"alacritty/alacritty.yml".source = (pkgs.formats.yaml {}).generate "alacritty.yml" {
background_opacity = 0.9;
colors = {
primary = { inherit (colours) background foreground; };
normal = lib.mapAttrs (_: colour: colour.dark) colourPairs;
bright = lib.mapAttrs (_: colour: colour.bright) colourPairs;
};
font = {
normal.family = "Monospace";
size = 6;
};
key_bindings = [
{
key = "Plus";
mods = "Control";
action = "IncreaseFontSize";
}
{
key = "Minus";
mods = "Control";
action = "DecreaseFontSize";
}
{
key = "Key0";
mods = "Control";
action = "ResetFontSize";
}
];
};
};
}

View File

@@ -1,7 +1,6 @@
{ {
programs.bash = { programs.bash = {
promptInit = '' promptInit = ''PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) "'';
PS1="$(tput bold)\w \$([[ \$? == 0 ]] && echo \"\[\033[1;32m\]\" || echo \"\[\033[1;31m\]\")\$$(tput sgr0) "'';
interactiveShellInit = '' interactiveShellInit = ''
set -o vi set -o vi
''; '';

View File

@@ -1,17 +0,0 @@
{ config, pkgs, ... }:
{
boot.extraModulePackages = with config.boot.kernelPackages; [
tp_smapi
acpi_call
];
boot.kernelModules = [ "tp_smapi" "acpi_call" ];
environment.systemPackages = [ pkgs.tpacpi-bat ];
services.tlp = {
enable = true;
settings = {
START_CHARGE_THRESH_BAT0 = 80;
STOP_CHARGE_THRESH_BAT0 = 95;
};
};
}

View File

@@ -1,11 +0,0 @@
{ lib, pkgs, ... }:
{
environment.systemPackages = [ pkgs.beets ];
home-manager.users.me.xdg.configFile = {
"beets/config.yaml".source = (pkgs.formats.yaml {}).generate "config.yaml" {
directory = "~/cloud/syncthing/music";
library = "~/cloud/syncthing/common/music.db";
plugins = toString [ "fetchart" "lastgenre" ];
};
};
}

View File

@@ -1,11 +1,16 @@
{ pkgs, lib, ... }: { { pkgs, ... }:
{
hardware.bluetooth = { hardware.bluetooth = {
enable = true; enable = true;
settings.General.Enable = extraConfig = ''
lib.concatStringsSep "," [ "Source" "Sink" "Media" "Socket" ]; [General]
Enable=Source,Sink,Media,Socket
'';
}; };
environment.systemPackages = [ pkgs.blueman ]; environment.systemPackages = [ pkgs.blueman ];
home-manager.users.me = { services.blueman-applet.enable = false; }; home-manager.users.me = {
services.blueman-applet.enable = true;
};
} }

View File

@@ -1,28 +0,0 @@
{ pkgs, ... }:
# https://paste.sr.ht/~erictapen/11716989e489b600f237041b6d657fdf0ee17b34
let
certificate = pkgs.stdenv.mkDerivation rec {
name = "dst-root-ca-x3.pem";
src = builtins.toFile "${name}.sed" ''
1,/DST Root CA X3/d
1,/-----END CERTIFICATE-----/p
'';
nativeBuildInputs = with pkgs; [ cacert gnused ];
phases = "installPhase";
installPhase = ''
${pkgs.gnused}/bin/sed -n -f $src ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt > $out
'';
};
in {
networking.wireless.networks."36C3" = {
auth = ''
key_mgmt=WPA-EAP
eap=TTLS
identity="kmein"
password=" "
ca_cert="${certificate}"
altsubject_match="DNS:radius.c3noc.net"
phase2="auth=PAP"
'';
};
}

View File

@@ -1,16 +1,17 @@
{ pkgs, ... }: { { pkgs, ... }:
{
programs.chromium = { programs.chromium = {
enable = true; enable = true;
extensions = [ extensions = [
"nngceckbapebfimnlniiiahkandclblb" # BitWarden "hdokiejnpimakedhajhdlcegeplioahd" # LastPass
# "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim "ihlenndgcmojhcghmfjfneahoeklbjjh" # cVim
# "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine "fpnmgdkabkmnadcjpehmlllkndpkmiak" # Wayback Machine
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin "cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
"khncfooichmfjbepaaaebmommgaepoid" # Remove YouTube Recommended Videos "iaalpfgpbocpdfblpnhhgllgbdbchmia" # asciidoctor
]; ];
}; };
environment.systemPackages = [ pkgs.chromium pkgs.brave ]; environment.systemPackages = [ pkgs.chromium ];
environment.variables.BROWSER = "brave"; niveum.applications.browser = "chromium";
} }

View File

@@ -1,41 +1,26 @@
{ config, lib, pkgs, ... }: { { config, lib, pkgs, ... }:
{
imports = [ imports = [
<niveum/modules/dropbox.nix> <modules/seafile.nix>
<modules/google-drive.nix>
<modules/dropbox.nix>
<stockholm/krebs/3modules/syncthing.nix>
]; ];
niveum = { niveum.dropbox = {
dropbox.enable = false; enable = true;
user = config.users.users.me;
}; };
system.activationScripts.home-symlinks = '' niveum.seafile = {
ln -sfn ${config.users.users.me.home}/cloud/syncthing/common/mahlzeit ${config.users.users.me.home}/mahlzeit enable = true;
ln -sfn ${config.users.users.me.home}/cloud/Seafile/Wiki ${config.users.users.me.home}/notes user = config.users.users.me;
ln -sfn ${config.users.users.me.home}/cloud/Seafile/Uni ${config.users.users.me.home}/uni
'';
home-manager.users.me = {
services.nextcloud-client.enable = true;
}; };
environment.systemPackages = [ niveum.google-drive = rec {
(pkgs.writers.writeDashBin "book" '' enable = true;
set -efu directory = "${user.home}/cloud/gdrive";
book="$({ user = config.users.users.me;
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/syncthing/library -type f
${pkgs.findutils}/bin/find ${config.users.users.me.home}/cloud/Seafile/Books -type f
} | ${pkgs.fzf}/bin/fzf)"
${pkgs.zathura}/bin/zathura "$book"
'')
];
fileSystems."/media/moodle" = {
device = "zaatar.r:/moodle";
fsType = "nfs";
options = [
"x-systemd.idle-timeout=600"
"noauto"
"x-systemd.automount"
];
}; };
services.syncthing = rec { services.syncthing = rec {
@@ -44,19 +29,20 @@
openDefaultPorts = true; openDefaultPorts = true;
configDir = "/home/kfm/.config/syncthing"; configDir = "/home/kfm/.config/syncthing";
dataDir = "/home/kfm/.config/syncthing"; dataDir = "/home/kfm/.config/syncthing";
cert = toString <system-secrets/syncthing/cert.pem>;
key = toString <system-secrets/syncthing/key.pem>;
inherit ((import <niveum/lib>).syncthing) devices;
folders =
let cloud-dir = "${config.users.users.me.home}/cloud";
in {
"${cloud-dir}/syncthing/common".devices = [ "kabsa" "manakish" ];
"${cloud-dir}/syncthing/library".devices = [ "kabsa" "manakish" "heym" ];
"${cloud-dir}/syncthing/mundoiu".devices = [ "kabsa" "manakish" "heym" ];
"${cloud-dir}/syncthing/music" = {
devices = [ "kabsa" "manakish" "heym" "zaatar" ];
id = "music";
}; };
krebs.syncthing = rec {
enable = true;
key = toString <secrets/syncthing/key.pem>;
cert = toString <secrets/syncthing/cert.pem>;
peers = {
homeros.id = "HSOL72W-MMN346W-C3WCWCH-OTRKJYG-MY2WWV6-P7JUHN7-5WYYYRV-ZMH4KAA";
scardanelli.id = "7CZYHEX-3CSFDQU-PEEMYHG-6XGQ2ZD-KGVUWH5-GFRB2XK-FP57ERX-7APZUQU";
rilke.id = "NYNNHXP-7JMSTXG-SVNOPWD-RWXCCCL-CBOVBEI-X4QPLF4-NJA5G2P-RSGYRQQ";
wilde.id = "R6DEBD7-G5RYDKN-VFA3HPO-WX4DNVI-373F7OQ-AW5MZTT-3L4BDVW-Y6ROEAF";
}; };
folders."${config.users.users.me.home}/cloud/syncthing/common".peers = [ "homeros" "scardanelli" "wilde" ];
folders."${config.users.users.me.home}/cloud/syncthing/library".peers = lib.attrNames peers;
folders."${config.users.users.me.home}/cloud/syncthing/mundoiu".peers = lib.attrNames peers;
}; };
} }

View File

@@ -2,7 +2,7 @@
services.compton = { services.compton = {
enable = true; enable = true;
shadow = true; shadow = true;
menuOpacity = 0.9; menuOpacity = "0.9";
shadowOpacity = 0.3; shadowOpacity = "0.3";
}; };
} }

View File

@@ -1,37 +0,0 @@
{ 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;
};
};
}

View File

@@ -1,250 +1,274 @@
{ pkgs, lib, config, options, ... }: { pkgs, lib, config, ... }:
let {
inherit (lib.strings) makeBinPath;
inherit (import <niveum/lib>) localAddresses kieran;
in {
imports = [ imports = [
<modules/constants.nix>
{
services.dbus.packages = [ pkgs.gnome3.dconf ];
}
<home-manager/nixos> <home-manager/nixos>
<niveum/modules/system-dependent.nix> # <configs/mopidy.nix>
<configs/bash.nix>
<configs/bluetooth.nix>
<configs/chromium.nix>
<configs/cloud.nix>
<configs/compton.nix>
<configs/default.nix>
# <configs/home-assistant.nix>
<configs/distrobump.nix>
<configs/docker.nix>
<configs/dunst.nix>
<configs/fonts.nix>
<configs/git.nix>
<configs/haskell>
<configs/hledger.nix>
<configs/htop.nix>
<configs/hu-berlin.nix>
<configs/i3.nix>
<configs/kdeconnect.nix>
<configs/keybase.nix>
<configs/keyboard.nix>
<configs/mail.nix>
<configs/mpv.nix>
<configs/nano.nix>
<configs/neovim.nix>
<configs/nixpkgs-unstable.nix>
<configs/packages>
<configs/printing.nix>
<configs/python.nix>
<configs/random-background.nix>
<configs/redshift.nix>
<configs/retiolum.nix>
<configs/rofi.nix>
<configs/sncli.nix>
<configs/ssh.nix>
<configs/sudo.nix>
<configs/themes/owickstrom-dark.nix>
<configs/theming.nix>
<configs/tmux.nix>
<configs/todo-txt.nix>
<configs/traadfri.nix>
<configs/unclutter.nix>
<configs/urxvt.nix>
<configs/vscode.nix>
<configs/xautolock.nix>
<configs/xresources.nix>
<configs/zsh.nix>
{ {
boot.supportedFilesystems = [ "ntfs" ]; niveum.user = {
github = "kmein";
email = "kieran.meinhardt@gmail.com";
name = "Kierán Meinhardt";
};
niveum.applications = rec {
fileManager = "${config.niveum.applications.terminal} -e ${pkgs.ranger}/bin/ranger";
};
niveum.theme = {
gtk = { name = "Arc"; package = pkgs.arc-theme; };
icon = { name = "Arc"; package = pkgs.arc-icon-theme; };
cursor = { name = "capitaine-cursors"; package = pkgs.capitaine-cursors; };
};
} }
{ {
nix.nixPath = [ nixpkgs.config = {
"/var/src"
"nixpkgs-overlays=${toString ../overlays}"
];
}
{
nixpkgs = {
config = {
allowUnfree = true; allowUnfree = true;
packageOverrides = pkgs: { packageOverrides = pkgs: {
gfs-fonts = pkgs.callPackage <niveum/packages/gfs-fonts.nix> {}; python3Packages = pkgs.python3Packages.override {
iolanguage = pkgs.callPackage <niveum/packages/iolanguage.nix> { }; overrides = new: old: {
ix = pkgs.callPackage <niveum/packages/ix.nix> { }; spotify-cli-linux = new.callPackage <packages/spotify-cli-linux.nix> {};
instaloader = new.callPackage <packages/instaloader.nix> {};
sncli = new.callPackage <packages/sncli.nix> {};
};
};
haskellPackages = pkgs.haskellPackages.override {
overrides = new: old: {
blessings = new.callPackage <packages/blessings.nix> {};
scanner = new.callPackage <stockholm/krebs/5pkgs/haskell/scanner.nix> {};
};
};
git-quick-stats = pkgs.callPackage <packages/git-quick-stats.nix> {};
writeDash = pkgs.writers.writeDash;
writeDashBin = pkgs.writers.writeDashBin;
iolanguage = pkgs.callPackage <packages/iolanguage.nix> {};
nix-git = pkgs.callPackage <packages/nix-git.nix> {};
kmein = {
autorenkalender = pkgs.callPackage <packages/autorenkalender.nix> {};
bvg = pkgs.callPackage <packages/bvg.nix> {};
daybook = pkgs.callPackage <packages/daybook.nix> {};
font-size = pkgs.callPackage <packages/font-size.nix> { font = config.niveum.fonts.terminal; };
genius = pkgs.callPackage <packages/genius.nix> {};
instaget = pkgs.callPackage <packages/instaget.nix> {};
literature-quote = pkgs.callPackage <packages/literature-quote.nix> {};
n = pkgs.callPackage <packages/n.nix> {};
depp = pkgs.callPackage <packages/depp.nix> {};
odyssey = pkgs.callPackage <packages/odyssey.nix> {};
wttr = pkgs.callPackage <packages/wttr.nix> {};
nav = pkgs.callPackage <packages/nav.nix> {};
slide =
let slide-package = pkgs.fetchFromGitHub {
owner = "kmein";
repo = "slide";
rev = "0470583d22212745eab4f46076267addf4d2346c";
sha256 = "0skcp3va9v4hmxy5ramghpz53gnyxv10wsacgmc2jr0v1wrqlzbh";
};
in pkgs.callPackage slide-package {};
haskellPackages.mnemosyne =
let mnemosyne-package = pkgs.fetchFromGitHub {
repo = "mnemosyne";
owner = "kmein";
rev = "6bfa13c88db176af80be90840ff03573d67d679f";
sha256 = "1rimv5c5q9602y501hbkgkfbimqnmdkcr5hp1434q06gcazhjhca";
};
in pkgs.haskellPackages.callPackage mnemosyne-package {};
}; };
}; };
overlays = [
(self: super: {
scripts = import <niveum/packages/scripts> { pkgs = super; lib = super.lib; };
})
];
}; };
} }
{ {
boot.cleanTmpDir = true; boot.cleanTmpDir = true;
boot.loader.timeout = 1; boot.loader.timeout = 1;
boot.extraModulePackages = [ config.boot.kernelPackages.exfat-nofuse ];
}
{
time.timeZone = "Europe/Berlin";
} }
{ {
home-manager.users.me = { home-manager.users.me = {
programs.zathura = { programs.zathura = {
enable = true; enable = true;
options = { options.selection-clipboard = "clipboard";
selection-clipboard = "clipboard";
# first-page-column = "1:1"; # makes side-by-side mode start on the left side
};
}; };
}; };
} }
{ {
users.mutableUsers = false; users.mutableUsers = false;
users.defaultUserShell = pkgs.zsh;
users.users.me = { users.users.me = {
name = "kfm"; name = "kfm";
description = kieran.name; description = config.niveum.user.name;
hashedPassword = home = "/home/kfm";
"$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/"; createHome = true;
isNormalUser = true; group = "users";
uid = 1000; hashedPassword = "$6$w9hXyGFl/.IZBXk$5OiWzS1G.5hImhh1YQmZiCXYNAJhi3X6Y3uSLupJNYYXPLMsQpx2fwF4Xr2uYzGMV8Foqh8TgUavx1APD9rcb/";
shell = pkgs.zsh;
}; };
home-manager.users.me.xdg.enable = true;
home-manager.users.me.dconf.enable = false;
} }
{ {
sound.enable = true; sound.enable = true;
hardware.pulseaudio = { hardware.pulseaudio = {
enable = true; enable = true;
package = pkgs.pulseaudioFull; package = pkgs.pulseaudioFull; # for bluetooth sound output
extraModules = [ pkgs.pulseaudio-modules-bt ];
# copy server:/run/pulse/.config/pulse/cookie to client:~/.config/pulse/cookie to authenticate a client machine
zeroconf.discovery.enable = true;
extraConfig = ''
load-module ${toString [
"module-tunnel-sink-new"
"server=zaatar.r"
"sink_name=zaatar"
"channels=2"
"rate=44100"
]}
'';
}; };
users.users.me.extraGroups = [ "audio" ]; users.users.me.extraGroups = [ "audio" ];
environment.systemPackages = [ pkgs.pavucontrol pkgs.ncpamixer pkgs.pamixer pkgs.pulsemixer ]; environment.systemPackages = [ pkgs.pavucontrol pkgs.pamixer ];
} }
{ {
environment.interactiveShellInit = environment.systemPackages = [
"export PATH=$PATH:$HOME/projects/niveum"; (pkgs.writers.writeDashBin "niveum-deploy" ''
environment.shellAliases = let NIVEUM_DIR=/home/kfm/prog/git/niveum
wcd = pkgs.writers.writeDash "wcd" ''
cd "$(readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname)/.." [ $# -eq 1 ] || echo >&2 "Usage: niveum-deploy SYSTEM"
'';
where = pkgs.writers.writeDash "where" '' eval $(nix-build --no-out-link "$NIVEUM_DIR/deploy.nix" -A "$1")
readlink "$(${pkgs.which}/bin/which --skip-alias "$1")" | xargs dirname '')
''; (pkgs.writers.writeDashBin "niveum-update" ''
take = pkgs.writers.writeDash "take" '' NIVEUM_DIR=/home/kfm/prog/git/niveum
mkdir "$1" && cd "$1"
''; nix-prefetch-git --url https://github.com/NixOS/nixpkgs-channels --rev refs/heads/nixos-${config.system.stateVersion} > "$NIVEUM_DIR/nixpkgs.json"
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; '')
in { ];
"ß" = "${pkgs.utillinux}/bin/setsid"; }
cat = "${pkgs.bat}/bin/bat --style=plain"; {
chromium-incognito = environment.interactiveShellInit = "export PATH=$PATH:$HOME/.cargo/bin";
"chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito"; environment.shellAliases = {
cp = "cp --interactive"; clipboard = "${pkgs.xclip}/bin/xclip -se c";
ip = "${pkgs.iproute}/bin/ip -c";
l = "ls --color=auto --time-style=long-iso --almost-all";
ls = "ls --color=auto --time-style=long-iso";
ll = "ls --color=auto --time-style=long-iso -l";
la = "ls --color=auto --time-style=long-iso --almost-all -l";
mv = "mv --interactive";
nixi = "nix repl '<nixpkgs>'";
ns = "nix-shell --run zsh";
o = "${pkgs.xdg_utils}/bin/xdg-open"; o = "${pkgs.xdg_utils}/bin/xdg-open";
pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in";
pbpaste = "${pkgs.xclip}/bin/xclip -selection clipboard -out";
rm = "rm --interactive";
s = "${pkgs.systemd}/bin/systemctl";
take = "source ${take}";
tmux = "${pkgs.tmux}/bin/tmux -2"; tmux = "${pkgs.tmux}/bin/tmux -2";
sxiv = swallow "${pkgs.sxiv}/bin/sxiv"; ip = "${pkgs.iproute}/bin/ip -c";
zathura = swallow "${pkgs.zathura}/bin/zathura"; ns = "nix-shell --run zsh";
us = "${pkgs.systemd}/bin/systemctl --user"; nixi = ''nix repl "<nixpkgs>"'';
wcd = "source ${wcd}"; rm = "rm -i";
im = "${pkgs.openssh}/bin/ssh weechat@makanek -t tmux attach-session -t IM"; cp = "cp -i";
where = "source ${where}"; mv = "mv -i";
yt = l = "${pkgs.exa}/bin/exa -a";
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -ic"; # Download video link ls = "${pkgs.exa}/bin/exa";
yta = ll = "${pkgs.exa}/bin/exa -l";
"${pkgs.youtube-dl}/bin/youtube-dl --add-metadata -xic"; # Download with audio la = "${pkgs.exa}/bin/exa -la";
dig = "dig +short";
}; };
} }
{ i18n.defaultLocale = "en_GB.UTF-8"; } {
networking.wireless = {
enable = true;
userControlled.enable = true;
networks = {
"Aether".pskRaw = "e1b18af54036c5c9a747fe681c6a694636d60a5f8450f7dec0d76bc93e2ec85a";
"Asoziales Netzwerk".pskRaw = "8e234041ec5f0cd1b6a14e9adeee9840ed51b2f18856a52137485523e46b0cb6";
"EasyBox-927376".pskRaw = "dbd490ab69b39bd67cfa06daf70fc3ef3ee90f482972a668ed758f90f5577c22";
"FlixBus Wi-Fi" = {};
"FlixBus" = {};
"FlixTrain" = {};
"Libertarian WiFi".pskRaw = "e9beaae6ffa55d10e80b8a2e7d997411d676a3cc6f1f29d0b080391f04555050";
"Ni/Schukajlow".pskRaw = "ffc47f6829da59c48aea878a32252223303f5c47a3859edc90971ffc63346781";
"WIFIonICE" = {};
"WLAN-914742".psk = "67647139648174545446";
"WLAN-XVMU6T".pskRaw = "46ea807283255a3d7029233bd79c18837df582666c007c86a8d591f65fae17cc";
"c-base-public" = {};
"discord".psk = "baraustrinken";
"security-by-obscurity".psk = "44629828256481964386";
};
};
environment.systemPackages = [ pkgs.wpa_supplicant_gui ];
}
{
networking.hosts = {
"192.168.178.1" = [ "fritz.box" ];
"192.168.178.21" = [ "scardanelli" ];
"192.168.178.22" = [ "homeros" ];
"192.168.178.24" = [ "catullus" ];
};
}
{
i18n.defaultLocale = "en_GB.UTF-8";
}
{
services.illum.enable = true;
}
{ {
services.xserver = { services.xserver = {
enable = true; enable = true;
displayManager = { displayManager.lightdm = {
autoLogin = {
enable = true;
user = config.users.users.me.name;
};
lightdm = {
enable = true; enable = true;
autoLogin.enable = true;
autoLogin.user = config.users.users.me.name;
greeters.gtk = { greeters.gtk = {
enable = true; enable = true;
indicators = [ "~spacer" "~host" "~spacer" "~session" "~power" ]; indicators = [ "~spacer" "~host" "~spacer" "~session" "~power" ];
}; };
}; };
}; desktopManager.default = "none";
}; };
} }
{ {
security.wrappers = { security.wrappers = {
pmount = { pmount.source = "${pkgs.pmount}/bin/pmount";
owner = "root"; pumount.source = "${pkgs.pmount}/bin/pumount";
group = "users";
source = "${pkgs.pmount}/bin/pmount";
};
pumount = {
owner = "root";
group = "users";
source = "${pkgs.pmount}/bin/pumount";
};
};
}
{ programs.command-not-found.enable = true; }
{
programs.gnupg.agent.enable = true;
environment.systemPackages = [
pkgs.gnupg
(pkgs.pass.withExtensions (e: [e.pass-otp]))
];
}
{
services.atd.enable = true;
}
{
services.getty = {
greetingLine = lib.mkForce "";
helpLine = lib.mkForce "";
}; };
} }
{ {
networking.hosts = lib.mapAttrs' (name: address: { programs.command-not-found.enable = true;
name = address; }
value = [ "${name}.local" ]; {
}) localAddresses; programs.java = {
enable = true;
package = pkgs.openjdk;
};
} }
./alacritty.nix
./bash.nix
./beets.nix
./bluetooth.nix
./ccc.nix
./khal.nix
./engiadina.nix
./chromium.nix
./cloud.nix
./copyq.nix
./compton.nix
./direnv.nix
./distrobump.nix
./docker.nix
./dunst.nix
./flix.nix
./fonts.nix
./fzf.nix
./git.nix
./hledger.nix
./htop.nix
./hu-berlin.nix
./i3.nix
./keyboard.nix
./lb.nix
./mpv.nix
./mime.nix
./neovim.nix
./neomutt.nix
./nix.nix
./newsboat.nix
./flameshot-once.nix
./packages
./power-action.nix
./printing.nix
./openweathermap.nix
./wallpaper.nix
./redshift.nix
./retiolum.nix
./rofi.nix
./spacetime.nix
./seafile.nix
./ssh.nix
./sshd.nix
./sudo.nix
./sxiv.nix
./theming.nix
./tmux.nix
./traadfri.nix
./unclutter.nix
./version.nix
./vscode.nix
./watson.nix
./zsh.nix
]; ];
} }

View File

@@ -1,38 +0,0 @@
{ pkgs, ... }:
let
nixify = pkgs.writers.writeDashBin "nixify" ''
set -efuC
if [ ! -e ./.envrc ]; then
echo use_nix > .envrc
direnv allow
fi
if [ ! -e shell.nix ]; then
cat > shell.nix <<'EOF'
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [];
}
EOF
''${EDITOR:-vim} shell.nix
fi
'';
in {
environment.systemPackages = [ pkgs.direnv nixify ];
home-manager.users.me.programs.direnv = {
enable = true;
stdlib = builtins.readFile ("${
pkgs.fetchFromGitHub {
owner = "Mic92";
repo = "dotfiles";
rev = "a0a9b7e358fa70a85cd468f8ca1fbb02ae0a91df";
sha256 = "1y9h5s1lf59sczsm0ksq2x1yhl98ba9lwk5yil3q53rg7n4574pg";
}
}/home/.direnvrc");
};
programs.zsh.interactiveShellInit = ''
eval "$(${pkgs.direnv}/bin/direnv hook zsh)"
'';
}

View File

@@ -1,10 +1,13 @@
{ lib, config, pkgs, ... }: { { lib, config, pkgs, ... }:
{
imports = [ imports = [
(import <stockholm/makefu/3modules/bump-distrowatch.nix> { (import <stockholm/makefu/3modules/bump-distrowatch.nix> {
inherit lib config; inherit lib config;
pkgs = pkgs // { writeDash = pkgs.writers.writeDash; }; pkgs = pkgs // {
writeDash = pkgs.writers.writeDash;
};
}) })
]; ];
makefu.distrobump.enable = false; makefu.distrobump.enable = true;
} }

View File

@@ -1,12 +1,6 @@
{ lib, pkgs, ... }: { { pkgs, ... }:
virtualisation.docker = { {
enable = true; virtualisation.docker.enable = true;
# for ICE wifi, ref https://gist.github.com/sunsided/7840e89ff4e11b64a2d7503fafa0290c
extraOptions = lib.concatStringsSep " " [
"--bip=172.39.1.5/24"
"--fixed-cidr=172.39.1.0/25"
];
};
users.users.me.extraGroups = [ "docker" ]; users.users.me.extraGroups = [ "docker" ];
environment.systemPackages = [ pkgs.docker pkgs.docker_compose ]; environment.systemPackages = [ pkgs.docker pkgs.docker_compose ];
} }

View File

@@ -1,14 +1,12 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
let with config.niveum; {
inherit (import <niveum/lib>) defaultApplications colours theme;
in {
home-manager.users.me.services.dunst = { home-manager.users.me.services.dunst = {
enable = true; enable = true;
iconTheme = (theme pkgs).icon; iconTheme = theme.icon;
settings = { settings = {
global = { global = {
transparency = 10; transparency = 10;
font = "Monospace 8"; font = "${fonts.terminal.name} ${toString fonts.terminal.size}";
geometry = "200x5-30+20"; geometry = "200x5-30+20";
frame_color = colours.foreground; frame_color = colours.foreground;
follow = "mouse"; follow = "mouse";
@@ -20,7 +18,7 @@ in {
separator_color = "auto"; separator_color = "auto";
sort = true; sort = true;
markup = "full"; markup = "full";
format = "%a\\n<b>%s</b>\\n%b"; format = ''%a\n<b>%s</b>\n%b'';
alignment = "left"; alignment = "left";
show_age_threshold = 60; show_age_threshold = 60;
bounce_freq = 0; bounce_freq = 0;
@@ -33,7 +31,7 @@ in {
sticky_history = true; sticky_history = true;
history_length = 20; history_length = 20;
dmenu = "${pkgs.rofi}/bin/rofi -display-run dunst -show run"; dmenu = "${pkgs.rofi}/bin/rofi -display-run dunst -show run";
browser = (defaultApplications pkgs).browser; browser = applications.browser;
verbosity = "mesg"; verbosity = "mesg";
corner_radius = 0; corner_radius = 0;
mouse_left_click = "do_action"; mouse_left_click = "do_action";

View File

@@ -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";
};
}

View File

@@ -1,24 +0,0 @@
{ lib, pkgs, ... }:
let
inherit (import <niveum/lib>) defaultApplications;
flameshot-once = pkgs.callPackage <stockholm/krebs/5pkgs/simple/flameshot-once> {};
in {
nixpkgs.overlays = [
(self: super: {
write =
super.callPackage <stockholm/krebs/5pkgs/simple/xwaitforwindow.nix> { };
})
];
environment.systemPackages = [
(flameshot-once.override {
config.imgur = {
enable = true;
createUrl = "http://p.r/image";
deleteUrl = "http://p.r/image/delete/%1";
xdg-open.browser = (defaultApplications pkgs).browser;
};
config.timeout = 1000;
})
];
}

View File

@@ -1,79 +0,0 @@
{ config, pkgs, ... }:
let
flixLocation = "/media/flix";
cacheLocation = "/var/cache/flix";
indexFilename = "index";
flixUser = "flix";
flixGroup = "users";
inherit (import <niveum/lib>) tmpfilesConfig;
in {
fileSystems.${flixLocation} = {
device = "prism.r:/export";
fsType = "nfs";
options = [
"noauto"
"noatime"
"nodiratime"
"x-systemd.automount"
"x-systemd.device-timeout=1"
"x-systemd.idle-timeout=1min"
"x-systemd.requires=tinc.retiolum.service"
"x-systemd.requires=wpa_supplicant.service"
"user"
"_netdev"
];
};
systemd.tmpfiles.rules = [
(tmpfilesConfig {
type = "d";
path = cacheLocation;
mode = "0750";
user = flixUser;
group = flixGroup;
})
];
systemd.services.flix-index = {
description = "Flix indexing service";
wants = [ "network-online.target" ];
script = "cp ${flixLocation}/download/index ./${indexFilename}";
startAt = "hourly";
serviceConfig = {
Type = "oneshot";
User = flixUser;
Group = flixGroup;
WorkingDirectory = cacheLocation;
};
};
users.extraUsers.${flixUser} = {
isSystemUser = true;
createHome = true;
home = cacheLocation;
group = flixGroup;
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "mpv-simpsons" ''
set -efu
cd "${flixLocation}/download"
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
cat "${cacheLocation}/${indexFilename}" \
| ${pkgs.gnugrep}/bin/grep -i 'simpsons.*mkv' \
| shuf \
| ${pkgs.findutils}/bin/xargs -d '\n' ${pkgs.mpv}/bin/mpv
'')
(pkgs.writers.writeDashBin "flixmenu" ''
set -efu
cd "${flixLocation}/download"
[ -f "${cacheLocation}/${indexFilename}" ] || exit 1
${pkgs.dmenu}/bin/dmenu -i -p flix -l 5 "$@" < ${cacheLocation}/${indexFilename} \
| ${pkgs.findutils}/bin/xargs -I '{}' ${pkgs.utillinux}/bin/setsid ${pkgs.xdg_utils}/bin/xdg-open '{}'
'')
];
}

View File

@@ -1,41 +1,19 @@
{ pkgs, ... }: { { pkgs, ... }:
nixpkgs.config.joypixels.acceptLicense = true; {
niveum.fonts = {
ui = {
name = "Sans";
size = 9;
};
terminal = {
name = "Monospace";
size = 9;
};
};
fonts = { fonts = {
enableDefaultFonts = true; enableDefaultFonts = true;
fontDir.enable = true; enableFontDir = true;
fonts = with pkgs; [ fonts = with pkgs; [ corefonts eb-garamond fira libertine lmodern noto-fonts roboto ubuntu_font_family ];
alegreya
alegreya-sans
corefonts
eb-garamond
fira
font-awesome-ttf
ibm-plex
inconsolata
iosevka
libertine
lmodern
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
roboto
roboto-mono
roboto-slab
source-code-pro
source-serif-pro
source-sans-pro
ubuntu_font_family
gfs-fonts
jetbrains-mono
twemoji-color-font
joypixels
];
fontconfig.defaultFonts = {
monospace = [ "JetBrains Mono" "JoyPixels" ];
serif = [ "Roboto Slab" ];
sansSerif = [ "Roboto" "Noto Sans" ];
emoji = [ "JoyPixels" ];
};
}; };
} }

View File

@@ -1,32 +0,0 @@
{ pkgs, lib, ... }: {
environment = {
systemPackages = [ pkgs.fzf ];
variables = {
FZF_DEFAULT_OPTS =
lib.escapeShellArgs [ "--height=40%" "--layout=reverse" ];
FZF_ALT_C_COMMAND = "${pkgs.fd}/bin/fd --type d";
FZF_ALT_C_OPTS = lib.escapeShellArgs [
"--preview='${pkgs.tree}/bin/tree -L 1 \"{}\"'"
"--bind=space:toggle-preview"
"--preview-window=hidden"
];
FZF_CTRL_T_COMMAND = "${pkgs.fd}/bin/fd --type f";
FZF_CTRL_T_OPTS =
lib.escapeShellArgs [ "--preview='${pkgs.bat}/bin/bat \"{}\"'" ];
};
};
programs.zsh.interactiveShellInit = ''
if [[ $options[zle] = on ]]; then
. ${pkgs.fzf}/share/fzf/completion.zsh
. ${pkgs.fzf}/share/fzf/key-bindings.zsh
fi
'';
programs.bash.interactiveShellInit = ''
if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
. ${pkgs.fzf}/share/fzf/completion.bash
. ${pkgs.fzf}/share/fzf/key-bindings.bash
fi
'';
}

View File

@@ -1,64 +1,25 @@
{ pkgs, config, lib, ... }: { pkgs, config, ... }:
let
inherit (import <niveum/lib>) kieran ignorePaths;
in
{ {
environment.systemPackages = [ environment.systemPackages = [
pkgs.mr pkgs.mr
pkgs.git pkgs.git
pkgs.gitAndTools.gitflow
pkgs.gitAndTools.hub pkgs.gitAndTools.hub
pkgs.gitAndTools.gh
pkgs.gitAndTools.git-extras pkgs.gitAndTools.git-extras
pkgs.gitAndTools.git-trim
pkgs.gitstats pkgs.gitstats
pkgs.patch pkgs.patch
pkgs.patchutils pkgs.patchutils
pkgs.git-quick-stats
pkgs.git-preview pkgs.git-preview
]; ];
environment.shellAliases = {
gf = "git-flow";
g = "git";
};
home-manager.users.me = { home-manager.users.me = {
home.file.".mrconfig".text = let home.file.".mrconfig".text = builtins.readFile <dot/mrconfig.ini>;
prependPath = prefix:
lib.attrsets.mapAttrs'
(path: lib.attrsets.nameValuePair "${prefix}/${path}");
git = url: { checkout = "git clone ${url}"; };
github = owner: repo: git "git@github.com:${owner}/${repo}";
keybase = owner: repo: git "keybase://private/${owner}/${repo}";
in lib.generators.toINI { } ({
DEFAULT = { git_gc = ''git gc "$@"''; };
} // prependPath "projects" {
"menstruation.rs" = github "kmein" "menstruation.rs";
brockman = github "kmein" "brockman";
challenges = github "kmein" "challenges";
conlangs = github "kmein" "conlangs";
ledger = keybase "kmein" "ledger";
mahlzeit = github "kmein" "mahlzeit";
menstruation-telegram = github "kmein" "menstruation-telegram";
meteora = github "kmein" "meteora";
modernizr = github "kmein" "modernizr";
niveum = github "kmein" "niveum";
nixpkgs = github "NixOS" "nixpkgs";
poetry = github "kmein" "poetry";
quotes = github "kmein" "quotes";
sphinx = github "kmein" "sphinx";
stockholm = git "https://cgit.krebsco.de/stockholm";
telebots = github "kmein" "telebots";
traadfri = github "kmein" "traadfri";
wissen = github "kmein" "wissen";
zen = github "kmein" "zen";
});
programs.git = { programs.git = {
enable = true; enable = true;
package = pkgs.gitAndTools.gitFull; package = pkgs.gitAndTools.gitFull;
userName = kieran.name; userName = config.niveum.user.name;
userEmail = kieran.email; userEmail = config.niveum.user.email;
aliases = { aliases = {
br = "branch"; br = "branch";
co = "checkout"; co = "checkout";
@@ -70,34 +31,9 @@ in
diffs = "diff --staged"; diffs = "diff --staged";
last = "log -1 HEAD"; last = "log -1 HEAD";
logs = "log --pretty=oneline"; logs = "log --pretty=oneline";
graph = graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
"log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all";
};
ignores = ignorePaths;
extraConfig = {
pull.ff = "only";
rebase.autoStash = true;
merge.autoStash = true;
core.pager =
"${pkgs.gitAndTools.diff-so-fancy}/bin/diff-so-fancy | ${pkgs.less}/bin/less --tabs=4 -RFX";
color = {
ui = true;
diff = {
meta = "11";
frag = "magenta bold";
commit = "yellow bold";
old = "red bold";
new = "green bold";
whitespace = "red reverse";
};
diff-highlight = {
oldNormal = "red bold";
oldHighlight = "red bold 52";
newNormal = "green bold";
newHighlight = "green bold 22";
};
};
}; };
ignores = config.niveum.ignore;
}; };
}; };
} }

5
configs/gollum.nix Normal file
View File

@@ -0,0 +1,5 @@
{
services.gollum = {
enable = true;
};
}

View File

@@ -0,0 +1,46 @@
{ config, pkgs, ... }:
{
home-manager.users.me.home.file = {
".ghc/ghci.conf".text = ''
:set editor vim
:def hoogle \s -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle search --color -l --count=15 \"" ++ s ++ "\""
:def doc \s -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle search --color -l --info \"" ++ s ++ "\""
:def pl \x -> return $ ":!${pkgs.haskellPackages.pointfree}/bin/pointfree -v \"" ++ x ++ "\""
:set prompt "\o033[1m%s\o033[1;34m λ\o033[0m "
:set -Wall
'';
# :def unpl \x -> return $ ":!${pkgs.haskellPackages.pointful}/bin/pointful \"" ++ x ++ "\""
".stack/config.yaml".text = let user = config.niveum.user; in ''
templates:
params:
author-name: ${user.name}
author-email: ${user.email}
copyright: 'Copyright: (c) 2019 ${user.name}'
github-username: ${user.github}
'';
};
services.hoogle = {
enable = true;
packages = import ./packages.nix;
port = 8091;
};
environment.systemPackages = with pkgs; [
cabal2nix
stack2nix
cabal-install
hlint
# haskellPackages.brittany
(haskellPackages.ghcWithHoogle (import ./packages.nix))
] ++ map haskell.lib.justStaticExecutables [
haskellPackages.ghcid
haskellPackages.hakyll
# haskellPackages.hfmt
haskellPackages.hasktags
haskellPackages.hindent
haskellPackages.pointfree
# haskellPackages.pointful
haskellPackages.hpack
];
}

View File

@@ -1,5 +1,7 @@
haskellPackages: haskellPackages:
with haskellPackages; [ with haskellPackages; [
blessings
scanner
HTTP HTTP
HUnit HUnit
MissingH MissingH
@@ -36,7 +38,6 @@ with haskellPackages; [
directory directory
dlist dlist
either either
edit-distance
exceptions exceptions
extra extra
filepath filepath
@@ -55,18 +56,16 @@ with haskellPackages; [
megaparsec megaparsec
microlens microlens
monad-logger monad-logger
monad-memo
mono-traversable mono-traversable
mtl mtl
network network
pandoc
parallel parallel
parsec parsec
persistent persistent
pipes pipes
pointed pointed
pretty
pretty-show pretty-show
prettyprinter
primitive primitive
process process
profunctors profunctors
@@ -89,9 +88,11 @@ with haskellPackages; [
time time
transformers transformers
turtle turtle
type-unary
unix-time unix-time
unordered-containers unordered-containers
vector vector
vinyl
void void
vty vty
warp warp

View File

@@ -1,14 +1,15 @@
{ config, pkgs, ... }: { { config, pkgs, ... }:
imports = [ <niveum/modules/hledger.nix> ]; {
imports = [ <modules/hledger.nix> ];
niveum.hledger = { niveum.hledger = {
enable = true; enable = true;
ledgerFile = "$HOME/projects/ledger/all.journal"; ledgerFile = "$HOME/prog/git/ledger/current.journal";
server = { server = {
enable = false; enable = false;
user = config.users.users.me; user = config.users.users.me;
package = pkgs.hledger-web; package = pkgs.unstable.hledger-web;
}; };
package = pkgs.hledger; package = pkgs.unstable.hledger;
}; };
} }

View File

@@ -0,0 +1,7 @@
{
services.home-assistant = {
enable = true;
configWritable = true;
lovelaceConfigWritable = true;
};
}

View File

@@ -2,28 +2,33 @@
home-manager.users.me = { home-manager.users.me = {
programs.htop = { programs.htop = {
enable = true; enable = true;
settings = { colorScheme = 0;
color_scheme = 0; accountGuestInCpuMeter = true;
account_guest_in_cpu_meter = true; cpuCountFromZero = false;
cpu_count_from_zero = false;
delay = 15; delay = 15;
detailed_cpu_time = false; detailedCpuTime = false;
header_margin = true; headerMargin = true;
hide_kernel_threads = true; hideKernelThreads = true;
hide_threads = true; hideThreads = false;
hide_userland_threads = true; hideUserlandThreads = false;
highlight_base_name = true; highlightBaseName = true;
highlight_megabytes = true; highlightMegabytes = true;
highlight_threads = true; highlightThreads = true;
shadow_other_users = true; shadowOtherUsers = true;
show_program_path = false; showProgramPath = false;
show_thread_names = false; showThreadNames = true;
sort_descending = true; sortDescending = true;
sort_key = "PERCENT_CPU"; sortKey = "PERCENT_CPU";
tree_view = true; treeView = true;
update_process_names = false; updateProcessNames = false;
right_meters = [ "Uptime" "Tasks" "LoadAverage" "Battery" ]; meters = {
left_meters = [ "LeftCPUs2" "RightCPUs2" "Memory" "Swap" ]; left = [
{ kind = "LeftCPUs2"; mode = 1; }
{ kind = "RightCPUs2"; mode = 1; }
{ kind = "Memory"; mode = 1; }
{ kind = "Swap"; mode = 1; }
];
right = [ "Uptime" "Tasks" "LoadAverage" "Battery" ];
}; };
}; };
}; };

View File

@@ -1,90 +1,43 @@
{ config, pkgs, lib, ... }: { pkgs, lib, ... }:
let let
inherit (lib.strings) fileContents;
inherit (import <niveum/lib>) sshPort;
eduroam = { eduroam = {
identity = fileContents <secrets/eduroam/identity>; identity = lib.strings.removeSuffix "\n" (builtins.readFile <shared-secrets/eduroam/identity>);
password = fileContents <secrets/eduroam/password>; password = lib.strings.removeSuffix "\n" (builtins.readFile <shared-secrets/eduroam/password>);
}; };
hu-berlin-cifs-options = [ eduroamAuth = ''
"uid=${toString config.users.users.me.uid}" key_mgmt=WPA-EAP
"gid=${toString config.users.groups.users.gid}" eap=TTLS
"sec=ntlmv2" proto=RSN
"workgroup=german" identity="${eduroam.identity}"
"username=meinhaki" anonymous_identity="anonymous@wlan.hu-berlin.de"
"password=${lib.strings.fileContents <secrets/mail/meinhaki>}" altsubject_match="DNS:srv1-radius.cms.hu-berlin.de;DNS:srv2-radius.cms.hu-berlin.de"
"noauto" password="${eduroam.password}"
"x-systemd.requires=openvpn-hu-berlin.service" ca_cert="${pkgs.fetchurl {
"x-systemd.automount" url = https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/t-telesec_globalroot_class_2.pem;
"x-systemd.device-timeout=1" sha256 = "0if8aqd06sid7a0vw009zpa087wxcgdd2x6z2zs4pis5kvyqj2dk";
"x-systemd.idle-timeout=1min" }}"
]; phase2="auth=PAP"
in {
fileSystems."/media/hu-berlin/germpro2" = {
device = "//hugerm31c.user.hu-berlin.de/germpro2/ling";
fsType = "cifs";
options = hu-berlin-cifs-options;
};
fileSystems."/media/hu-berlin/germhome" = {
device = "//hugerm31c.user.hu-berlin.de/germhome/ling/meinhaki";
fsType = "cifs";
options = hu-berlin-cifs-options;
};
home-manager.users.me.programs.ssh = {
matchBlocks = {
"alew.hu-berlin.de" = {
user = "centos";
hostname = "141.20.187.219";
};
};
};
environment.systemPackages = [
(pkgs.writers.writeDashBin "hu-ip" ''
${pkgs.w3m}/bin/w3m -dump meineip.hu-berlin.de | head --lines=-4 | tail --lines=+3
'')
(pkgs.writers.writePython3Bin "hu-eduroam-install"
{
libraries = with pkgs.python3Packages; [ distro pyopenssl dbus-python ];
flakeIgnore = [ "E501" "E123" "W504" "E722" "F821" "E226" "E126" "E265" "W291" ];
}
(builtins.readFile (builtins.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/linux-installer/eduroam-linux-hub.py";
sha256 = "19x2kvwxx13265b2hj5fjf53g0liw6dw7xf9j9cav67cswmz60kf";
}))
)
];
systemd.services.hu-vpn = {
enable = true;
wants = [ "network-online.target" ];
conflicts = [ "openvpn-hu-berlin.service" ];
script = ''
${pkgs.openfortivpn}/bin/openfortivpn -c ${pkgs.writeText "hu-berlin.config" ''
host = forti-ssl.vpn.hu-berlin.de
port = 443
trusted-cert = 42193a913d276d9eb86217612956e1e6464d6f07bed5393a4787c87adc4bd359
username = ${eduroam.identity}
password = ${eduroam.password}
''}
''; '';
in {
networking.wireless.networks = {
eduroam_5GHz.auth = eduroamAuth;
eduroam.auth = eduroamAuth;
}; };
systemd.services.openvpn-hu-berlin.conflicts = [ "hu-vpn.service" ]; services.openvpn.servers = {
hu-berlin = {
services.openvpn.servers.hu-berlin = { config = ''
autoStart = false; config ${pkgs.fetchurl {
url = https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn;
sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h";
}}
# route-nopull
# route 141.20.0.0 255.255.0.0
'';
authUserPass = { authUserPass = {
username = eduroam.identity; username = eduroam.identity;
password = eduroam.password; password = eduroam.password;
}; };
config = fileContents (pkgs.fetchurl { };
url =
"https://www.cms.hu-berlin.de/de/dl/netze/vpn/openvpn/hu-berlin.ovpn";
sha256 = "15b55aibik5460svjq2gwxrcyh6ay4k8savd6cd5lncgndmd8p8h";
});
}; };
} }

View File

@@ -1,124 +1,41 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
inherit (import <niveum/lib>) defaultApplications colours; new-workspace = pkgs.unstable.writers.writeDash "new-workspace" ''
klem = import <niveum/packages/scripts/klem.nix> {
inherit pkgs lib;
config.scripts = {
"p.r" = pkgs.writers.writeDash "p.r" ''
${pkgs.curl}/bin/curl -fSs http://p.r --data-binary @- \
| ${pkgs.coreutils}/bin/tail --lines=1 \
| ${pkgs.gnused}/bin/sed 's/\\<r\\>/krebsco.de/'
'';
"ix.io" = pkgs.writers.writeDash "ix.io" ''
${pkgs.curl}/bin/curl -fSs -F 'f:1=<-' ix.io
'';
"go.r" = pkgs.writers.writeDash "go.r" ''
${pkgs.curl}/bin/curl -fSs http://go.r -F "uri=$(${pkgs.coreutils}/bin/cat)"
'';
"0x0.st" = pkgs.writers.writeDash "0x0.st" ''
${pkgs.curl}/bin/curl -fSs https://0x0.st -F "shorten=$(${pkgs.coreutils}/bin/cat)"
'';
"rot13" = pkgs.writers.writeDash "rot13" ''
${pkgs.coreutils}/bin/tr '[A-Za-z]' '[N-ZA-Mn-za-m]'
'';
"ipa" = pkgs.writers.writeDash "ipa" ''
${pkgs.scripts.ipa}/bin/ipa
'';
"betacode" = pkgs.writers.writeDash "betacode" ''
${pkgs.scripts.betacode}/bin/betacode
'';
"devanagari" = pkgs.writers.writeDash "devanagari" ''
${pkgs.scripts.devanagari}/bin/devanagari
'';
"curl" = pkgs.writers.writeDash "curl" ''
${pkgs.curl}/bin/curl -fSs "$(${pkgs.coreutils}/bin/cat)"
'';
};
};
new-workspace = pkgs.writers.writeDash "new-workspace" ''
i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1)) i3-msg workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
''; '';
move-to-new-workspace = pkgs.writers.writeDash "new-workspace" '' move-to-new-workspace = pkgs.unstable.writers.writeDash "new-workspace" ''
i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1)) i3-msg move container to workspace $(($(i3-msg -t get_workspaces | tr , '\n' | grep '"num":' | cut -d : -f 2 | sort -rn | head -1) + 1))
''; '';
in with config.niveum; {
in {
services.xserver = { services.xserver = {
displayManager.defaultSession = "none+i3"; windowManager.default = "i3";
windowManager.i3 = { windowManager.i3.enable = true;
enable = true;
package = pkgs.i3-gaps;
};
};
services.xserver = {
monitorSection = ''Option "DPMS" "false"'';
serverFlagsSection = ''
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
'';
extraConfig = ''
Section "Extensions"
Option "DPMS" "Disable"
EndSection
'';
}; };
home-manager.users.me.xsession.windowManager.i3 = { home-manager.users.me.xsession.windowManager.i3 = {
enable = true; enable = true;
config = rec { config = rec {
fonts = {names = ["Sans"]; size = 10.0;}; fonts = [ "${config.niveum.fonts.ui.name} ${toString config.niveum.fonts.ui.size}" ];
modifier = "Mod4"; modifier = "Mod4";
window = { window = {
titlebar = false; titlebar = false;
border = 1; border = 1;
hideEdgeBorders = "smart"; hideEdgeBorders = "smart";
commands = [
{
criteria = { class = "floating"; };
command = "floating enable";
}
{
criteria = { class = "fzfmenu"; };
command = "floating enable";
}
{
criteria = { class = "mpv"; };
command = lib.strings.concatStringsSep ", " [
"floating enable"
"sticky enable"
"fullscreen disable"
"resize set 640 480"
"move position mouse"
];
}
];
}; };
gaps.inner = 4;
floating = { floating = {
titlebar = false; titlebar = false;
border = 1; border = 1;
}; };
colors = let colors =
scheme = { let scheme = { background = colours.background; text = colours.foreground; };
background = colours.background;
text = colours.foreground;
};
in rec { in rec {
focused = scheme // { focused = scheme // {
border = colours.cyan.bright;
indicator = colours.cyan.bright;
childBorder = colours.cyan.bright;
};
unfocused = scheme // {
border = colours.background; border = colours.background;
indicator = colours.background; indicator = colours.background;
childBorder = colours.background; childBorder = colours.background;
}; };
focusedInactive = unfocused; focusedInactive = focused;
unfocused = focused;
urgent = scheme // { urgent = scheme // {
border = colours.red.bright; border = colours.red.bright;
indicator = colours.red.bright; indicator = colours.red.bright;
@@ -132,9 +49,8 @@ in {
}; };
bars = [{ bars = [{
workspaceButtons = false; workspaceButtons = false;
fonts = {names = ["Sans"]; size = 8.0;}; fonts = [ "${config.niveum.fonts.terminal.name} ${toString config.niveum.fonts.terminal.size}" ];
mode = "hide"; # "dock" mode = "hide";
position = "bottom";
colors = rec { colors = rec {
background = colours.background; background = colours.background;
separator = background; separator = background;
@@ -145,121 +61,108 @@ in {
text = colours.foreground; text = colours.foreground;
}; };
}; };
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ${ statusCommand = "${pkgs.i3status}/bin/i3status -c ${pkgs.writeText "i3status.conf" ''
(pkgs.formats.toml {}).generate "i3status-rust.toml" (import <niveum/lib/i3status-rust.nix> { general {
inherit (config.niveum) batteryName wirelessInterface; colors = true
inherit colours; color_good = "${colours.green.dark}"
inherit pkgs; color_bad = "${colours.red.dark}"
}) color_degraded = "${colours.white.dark}"
}"; interval = 5
separator = " "
}
# order += "run_watch retiolum"
order += "path_exists openvpn"
order += "wireless ${networkInterfaces.wireless}"
order += "battery all"
order += "volume master"
order += "load"
order += "tztime local"
wireless ${networkInterfaces.wireless} {
format_up = "%essid"
format_down = "offline"
}
# run_watch retiolum {
# pidfile = "/var/run/tinc.retiolum.pid"
# format = "%title"
# }
path_exists openvpn {
path = "/proc/sys/net/ipv4/conf/tun0"
format = "%title"
}
battery all {
format = "%status%percentage"
format_down = "No battery"
status_chr = ""
status_bat = ""
status_unk = ""
status_full = ""
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 15
threshold_type = "percentage"
integer_battery_capacity = true
}
volume master {
format = "%volume"
format_muted = "%volume"
device = "default"
mixer = "Master"
mixer_idx = 0
}
tztime local {
format = "%Y-%m-%d %H:%M"
}
load {
format = "%1min"
}''}";
}]; }];
modes.resize = {
"Escape" = ''mode "default"'';
"Return" = ''mode "default"'';
"h" = "resize shrink width 10 px or 5 ppt";
"j" = "resize grow height 10 px or 5 ppt";
"k" = "resize shrink height 10 px or 5 ppt";
"l" = "resize grow width 10 px or 5 ppt";
};
keybindings = { keybindings = {
"${modifier}+Shift+h" = "move left 25 px"; "${modifier}+Down" = "focus down";
"${modifier}+Shift+j" = "move down 25 px"; "${modifier}+Left" = "focus left";
"${modifier}+Shift+k" = "move up 25 px"; "${modifier}+Return" = "exec ${applications.terminal}";
"${modifier}+Shift+l" = "move right 25 px"; "${modifier}+Right" = "focus right";
"${modifier}+Shift+Down" = "move down";
"${modifier}+Shift+Left" = "move left";
"${modifier}+Shift+Right" = "move right";
"${modifier}+Shift+Up" = "move up";
"${modifier}+Shift+b" = "move window to workspace prev";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+n" = "move window to workspace next";
"${modifier}+Shift+q" = "kill";
"${modifier}+Shift+r" = "restart";
"${modifier}+Shift+w" = "exec ${pkgs.xautolock}/bin/xautolock -locknow";
"${modifier}+Shift+x" = "exec --no-startup-id ${move-to-new-workspace}";
"${modifier}+Shift+z" = "floating toggle";
"${modifier}+Up" = "focus up";
"${modifier}+a" = "exec ${pkgs.rofi}/bin/rofi -display-window -show window";
"${modifier}+b" = "workspace prev";
"${modifier}+c" = "split h";
"${modifier}+d" = "exec ${pkgs.rofi}/bin/rofi -display-run -show run";
"${modifier}+e" = "layout toggle split";
"${modifier}+f" = "fullscreen toggle";
"${modifier}+h" = "focus left"; "${modifier}+h" = "focus left";
"${modifier}+j" = "focus down"; "${modifier}+j" = "focus down";
"${modifier}+k" = "focus up"; "${modifier}+k" = "focus up";
"${modifier}+l" = "focus right"; "${modifier}+l" = "focus right";
"${modifier}+Shift+b" = "move window to workspace prev";
"${modifier}+Shift+n" = "move window to workspace next";
"${modifier}+Shift+x" = "exec --no-startup-id ${move-to-new-workspace}";
"${modifier}+b" = "workspace prev";
"${modifier}+n" = "workspace next"; "${modifier}+n" = "workspace next";
"${modifier}+x" = "exec --no-startup-id ${new-workspace}"; "${modifier}+p" = "exec ${pkgs.rofi-pass}/bin/rofi-pass";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+q" = "kill";
"${modifier}+Shift+r" = "restart";
"${modifier}+z" = "sticky toggle";
"${modifier}+Shift+z" = "floating toggle";
"${modifier}+s" = "scratchpad show";
"${modifier}+Shift+s" = "move scratchpad";
"${modifier}+c" = "split h";
"${modifier}+e" = "layout toggle split";
"${modifier}+f" = "fullscreen toggle";
"${modifier}+r" = "mode resize"; "${modifier}+r" = "mode resize";
"${modifier}+s" = "layout stacking";
"${modifier}+t" = "exec ${applications.fileManager}";
"${modifier}+v" = "split v"; "${modifier}+v" = "split v";
"${modifier}+w" = "layout tabbed"; "${modifier}+w" = "layout tabbed";
"${modifier}+x" = "exec --no-startup-id ${new-workspace}";
# "${modifier}+Shift+y" = "exec ${pkgs.qutebrowser}/bin/qutebrowser"; "${modifier}+y" = "exec ${applications.browser}";
"${modifier}+Return" = "exec ${(defaultApplications pkgs).terminal}";
"${modifier}+t" = "exec ${(defaultApplications pkgs).fileManager}";
"${modifier}+y" = "exec ${(defaultApplications pkgs).browser}";
"${modifier}+0" = "exec ${pkgs.scripts.menu-calc}/bin/=";
"${modifier}+Shift+w" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"${modifier}+a" =
"exec --no-startup-id ${pkgs.rofi}/bin/rofi -display-window -show window";
"${modifier}+d" = "exec --no-startup-id ${pkgs.dmenu}/bin/dmenu_run";
"${modifier}+Shift+d" = "exec ${
pkgs.writers.writeDash "notemenu" ''
set -efu
PATH=$PATH:${
lib.makeBinPath [ pkgs.dmenu pkgs.findutils pkgs.coreutils ]
}
cd ~/notes
note_file=$({
echo diary/$(date -I).md
echo diary/$(date -I -d yesterday).md
find . -type f -printf "%T@ %p\n" | sort --reverse --numeric-sort | cut --delimiter=" " --fields=2
} | dmenu -i)
if test "$note_file"
then
i3-sensible-terminal -e "$EDITOR" "$note_file"
fi
''
}";
"${modifier}+p" = "exec --no-startup-id ${pkgs.pass}/bin/passmenu -l 5";
"${modifier}+u" = "exec ${pkgs.scripts.unicodmenu}/bin/unicodmenu";
"${modifier}+F7" = "exec ${pkgs.scripts.showkeys-toggle}/bin/showkeys-toggle";
"${modifier}+F8" = "exec ${pkgs.xorg.xkill}/bin/xkill";
"${modifier}+F9" = "exec ${pkgs.redshift}/bin/redshift -O 4000 -b 0.85";
"${modifier}+F10" = "exec ${pkgs.redshift}/bin/redshift -x";
"${modifier}+F11" = "exec ${pkgs.xcalib}/bin/xcalib -invert -alter";
"${modifier}+F12" = "exec ${klem}/bin/klem";
"Print" = "exec flameshot-once";
"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";
"XF86Calculator" = "exec ${pkgs.st}/bin/st -c floating -e ${pkgs.bc}/bin/bc";
"XF86AudioPause" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl pause";
"XF86AudioPlay" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioNext" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioStop" = "exec --no-startup-id ${pkgs.playerctl}/bin/playerctl stop";
"XF86ScreenSaver" = "exec ${pkgs.scripts.k-lock}/bin/k-lock";
"XF86Display" = "exec ${pkgs.scripts.dmenurandr}/bin/dmenurandr";
# key names detected with xorg.xev:
# XF86WakeUp (fn twice)
# XF86Battery (fn f3)
# XF86Sleep (fn f4) - actually suspends
# XF86WLAN
# XF86WebCam (fn f6)
# XF86TouchpadToggle (fn f8)
# XF86Suspend (fn f12) - actually suspends to disk
# Num_Lock (fn Roll) - numlocks
# XF86Audio{Prev,Next,Mute,Play,Stop}
# XF86Forward
# XF86Back
# XF86Launch1 (thinkvantage)
}; };
}; };
}; };

View File

@@ -1,13 +1,7 @@
{ {
networking.firewall = { networking.firewall = {
allowedTCPPortRanges = [{ allowedTCPPortRanges = [ { from = 1714; to = 1764; } ];
from = 1714; allowedUDPPortRanges = [ { from = 1714; to = 1764; } ];
to = 1764;
}];
allowedUDPPortRanges = [{
from = 1714;
to = 1764;
}];
}; };
home-manager.users.me = { home-manager.users.me = {

9
configs/keybase.nix Normal file
View File

@@ -0,0 +1,9 @@
{ config, ... }:
{
services.keybase.enable = true;
services.kbfs = {
enable = true;
mountPoint = "%h/cloud/keybase";
};
}

View File

@@ -1,17 +1,11 @@
{ pkgs, lib, ... }: with import <lib>;
let commaSep = builtins.concatStringsSep ","; {
in {
services.xserver = { services.xserver = {
layout = commaSep [ "de" "gr" "ru" ]; layout = commaSep [ "de" "gr" "ru" ];
xkbVariant = commaSep [ "T3" "polytonic" "phonetic" ]; xkbVariant = commaSep [ "T3" "polytonic" "phonetic_winkeys" ];
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;
}; };
console.keyMap = "de"; i18n.consoleKeyMap = "de";
# improve held key rate
services.xserver.displayManager.sessionCommands =
"${pkgs.xorg.xset}/bin/xset r rate 300 50";
} }

View File

@@ -1,168 +0,0 @@
{ config, pkgs, lib, ... }:
let
davHome = "~/.local/share/dav";
kmeinCloud = {
davEndpoint = "https://cloud.xn--kiern-0qa.de/remote.php/dav";
username = "kieran";
password = lib.fileContents <secrets/nextcloud/password>;
};
fysiCloud = {
davEndpoint = "https://nextcloud.fysi.dev/remote.php/dav";
username = "kmein";
password = lib.fileContents <secrets/nextcloud-fysi/password>;
};
in
{
environment.systemPackages = [ pkgs.khal pkgs.vdirsyncer pkgs.khard pkgs.todoman ];
systemd.user.services.vdirsyncer = {
enable = true;
wants = [ "network-online.target" ];
wantedBy = [ "default.target" ];
startAt = "*:00/10";
script = ''
${pkgs.vdirsyncer}/bin/vdirsyncer sync
${pkgs.khal}/bin/khal printcalendars # https://lostpackets.de/khal/configure.html#syncing
'';
serviceConfig = {
Type = "oneshot";
Restart = "on-failure";
};
};
home-manager.users.me = {
xdg.configFile = {
"khard/khard.conf".text = ''
[addressbooks]
[[contacts]]
path = ${davHome}/contacts/contacts/
[general]
debug = no
default_action = list
editor = ${config.environment.variables.EDITOR}
merge_editor = ${pkgs.vim}/bin/vimdiff
[contact table]
display = first_name
group_by_addressbook = no
reverse = no
show_nicknames = no
show_uids = no
sort = last_name
localize_dates = yes
preferred_phone_number_type = pref, cell, home
preferred_email_address_type = pref, work, home
[vcard]
search_in_source_files = no
skip_unparsable = no
'';
"todoman/config.py".text = ''
path = "${davHome}/calendar/*"
date_format = "%Y-%m-%d"
time_format = "%H:%M"
default_due = 0
default_list = "Personal"
startable = True
'';
"khal/config".text = ''
[calendars]
[[alew]]
path = ${davHome}/calendar/alew
color = "light gray"
[[personal]]
path = ${davHome}/calendar/personal
color = "light cyan"
[[uni]]
path = ${davHome}/calendar/uni-1
color = "yellow"
[[fysi]]
path = ${davHome}/calendar/fysi-1
color = "light magenta"
[[fysi_team]]
path = ${davHome}/calendar/personal_shared_by_fdf
color = "light red"
[[birthdays]]
path = ${davHome}/contacts/contacts
type = birthdays
color = "light green"
[default]
highlight_event_days = True
timedelta = 5d
print_new = path
default_calendar = personal
[locale]
timeformat = %H:%M
dateformat = %Y-%m-%d
longdateformat = %Y-%m-%d
datetimeformat = %Y-%m-%d %H:%M
longdatetimeformat = %Y-%m-%d %H:%M
local_timezone = ${config.time.timeZone}
default_timezone = ${config.time.timeZone}
weeknumbers = left
'';
"vdirsyncer/config".text = ''
[general]
status_path = "~/.local/share/vdirsyncer/status/"
[pair kontakte]
a = "kontakte_local"
b = "kontakte_cloud"
collections = ["contacts"]
conflict_resolution = "b wins"
[pair kalender]
a = "kalender_local"
b = "kalender_cloud"
collections = ["personal", "alew", "uni-1"]
conflict_resolution = "b wins"
[pair fysi]
a = "kalender_local"
b = "fysi_cloud"
collections = ["fysi-1", "personal_shared_by_fdf"]
conflict_resolution = "b wins"
[storage kontakte_local]
type = "filesystem"
path = "${davHome}/contacts/"
fileext = ".vcf"
[storage kalender_local]
type = "filesystem"
path = "${davHome}/calendar/"
fileext = ".ics"
[storage kontakte_cloud]
type = "carddav"
url = "${kmeinCloud.davEndpoint}/addressbooks/users/${kmeinCloud.username}/"
username = "${kmeinCloud.username}"
password = "${kmeinCloud.password}"
[storage kalender_cloud]
type = "caldav"
url = "${kmeinCloud.davEndpoint}/calendars/${kmeinCloud.username}/"
username = "${kmeinCloud.username}"
password = "${kmeinCloud.password}"
[storage fysi_cloud]
type = "caldav"
url = "${fysiCloud.davEndpoint}/calendars/${fysiCloud.username}/"
username = "${fysiCloud.username}"
password = "${fysiCloud.password}"
'';
};
};
}

View File

@@ -1,27 +0,0 @@
{ 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
'';
};
}

58
configs/mail.nix Normal file
View File

@@ -0,0 +1,58 @@
{ config, pkgs, ... }:
{
environment.systemPackages = [
pkgs.notmuch
pkgs.offlineimap
pkgs.msmtp
pkgs.neomutt
];
home-manager.users.me = {
programs.astroid = {
enable = true;
externalEditor = "urxvt -embed %3 -e nvim %1";
pollScript = "offlineimap";
};
accounts.email.maildirBasePath = "${config.users.users.me.home}/mail";
accounts.email.accounts.amroplay = {
astroid.enable = true;
address = "amroplay@gmail.com";
userName = "amroplay";
flavor = "gmail.com";
realName = config.niveum.user.name;
msmtp.enable = true;
notmuch.enable = true;
offlineimap = {
enable = true;
postSyncHookCommand = "notmuch new";
};
};
accounts.email.accounts.hu-berlin = {
astroid.enable = true;
address = "meinhark@hu-berlin.de";
userName = "meinhark";
realName = config.niveum.user.name;
imap = {
host = "mailbox.cms.hu-berlin.de";
port = 993;
tls.enable = true;
};
smtp = {
host = "mailhost.cms.hu-berlin.de";
port = 25;
tls.enable = true;
};
msmtp.enable = true;
notmuch.enable = true;
offlineimap = {
enable = true;
postSyncHookCommand = "notmuch new";
};
primary = true;
};
programs.offlineimap.enable = true;
};
}

View File

@@ -1,27 +0,0 @@
{
home-manager.users.me = {
xdg.mimeApps = {
enable = true;
defaultApplications = {
"application/epub+zip" = "org.pwmt.zathura.desktop";
"application/pdf" = "org.pwmt.zathura.desktop";
"application/vnd.oasis.opendocument.text" = "writer.desktop";
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "writer.desktop";
"image/jpeg" = "sxiv.desktop";
"image/png" = "sxiv.desktop";
"image/vnd.djvu+multipage" = "org.pwmt.zathura.desktop";
"text/html" = "brave-browser.desktop";
"text/markdown" = "nvim.desktop";
"text/plain" = "nvim.desktop";
"x-scheme-handler/about" = "brave-browser.desktop";
"x-scheme-handler/http" = "brave-browser.desktop";
"x-scheme-handler/https" = "brave-browser.desktop";
"x-scheme-handler/mailto" = "brave-browser.desktop";
"x-scheme-handler/unknown" = "brave-browser.desktop";
"x-scheme-handler/webcal" = "brave-browser.desktop";
"inode/directory" = "pcmanfm.desktop";
};
};
};
}

View File

@@ -1,75 +0,0 @@
{ config, pkgs, ... }:
{
services.nginx.virtualHosts.default = {
locations."= /stub_status".extraConfig = "stub_status;";
};
services.prometheus = {
enable = true;
port = 9001;
exporters = {
nginx.enable = false;
node = {
enable = true;
enabledCollectors = [
"conntrack"
"diskstats"
"entropy"
"filefd"
"filesystem"
"loadavg"
"mdadm"
"meminfo"
"netdev"
"netstat"
"stat"
"time"
"vmstat"
"systemd"
"logind"
"interrupts"
"ksmd"
];
port = 9002;
};
};
};
networking.firewall.allowedTCPPorts = [ config.services.prometheus.exporters.node.port ];
systemd.services.promtail = {
description = "Promtail service for Loki";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = ''
${pkgs.grafana-loki}/bin/promtail --config.file ${(pkgs.formats.yaml {}).generate "promtail.yaml" {
server = {
http_listen_port = 28183;
grpc_listen_port = 0;
};
positions.filename = "/tmp/positions.yaml";
clients = [
{ url = "http://${if config.networking.hostName == "makanek" then "127.0.0.1" else "makanek.r"}:3100/loki/api/v1/push"; }
];
scrape_configs = [
{
job_name = "journal";
journal = {
max_age = "12h";
labels.job = "systemd-journal";
labels.host = config.networking.hostName;
};
relabel_configs = [
{
source_labels = [ "__journal__systemd_unit" ];
target_label = "unit";
}
];
}
];
}}
'';
};
};
}

30
configs/mopidy.nix Normal file
View File

@@ -0,0 +1,30 @@
{ pkgs, ... }:
let secrets = import <dot/secrets.nix>;
in {
services.mopidy = {
enable = true;
extensionPackages = [
pkgs.mopidy-gmusic
pkgs.mopidy-iris
pkgs.mopidy-moped
pkgs.mopidy-mopify
pkgs.mopidy-soundcloud
pkgs.mopidy-spotify
pkgs.mopidy-spotify-tunigo
pkgs.mopidy-youtube
];
configuration = ''
[mpd]
hostname = ::
[spotify]
username = ${secrets.spotify.username}
password = ${secrets.spotify.password}
client_id = ${secrets.spotify.clientId}
client_secret = ${secrets.spotify.clientSecret}
[soundcloud]
auth_token = ${secrets.soundcloud.authToken}
'';
};
}

View File

@@ -1,29 +1,17 @@
{ pkgs, lib, ... }: let { pkgs, ... }:
swallow = command: "${pkgs.scripts.swallow}/bin/swallow ${command}"; {
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; }; environment.systemPackages = [ pkgs.mpv pkgs.mpv-poll ];
in {
environment.shellAliases.smpv = swallow "mpv";
home-manager.users.me = { home-manager.users.me.xdg.configFile = {
programs.mpv = { "mpv/input.conf".text = ''
enable = true; Alt+RIGHT add video-rotate 90
config = { Alt+LEFT add video-rotate -90
ytdl-raw-options = lib.concatStringsSep "," [ ''sub-lang="de,en"'' "write-sub=" "write-auto-sub=" ]; Alt+- add video-zoom -0.25
screenshot-template = "%F-%wH%wM%wS-%#04n"; Alt+= add video-zoom 0.25
}; Alt+l add video-pan-x -0.05
bindings = { Alt+h add video-pan-x 0.05
"Alt+RIGHT" = "add video-rotate 90"; Alt+k add video-pan-y 0.05
"Alt+LEFT" = "add video-rotate -90"; Alt+j add video-pan-y -0.05
"Alt+-" = "add video-zoom -0.25"; '';
"Alt+=" = "add video-zoom 0.25";
"Alt+l" = "add video-pan-x -0.05";
"Alt+h" = "add video-pan-x 0.05";
"Alt+k" = "add video-pan-y 0.05";
"Alt+j" = "add video-pan-y -0.05";
};
scripts = [
nixpkgs-unstable.mpvScripts.youtube-quality
];
};
}; };
} }

10
configs/nano.nix Normal file
View File

@@ -0,0 +1,10 @@
{
programs.nano.nanorc = ''
set autoindent
set boldtext
set morespace
set smarthome
set tabsize 4
set tabstospaces
'';
}

View File

@@ -1,248 +0,0 @@
{ 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<>\"]"
''}
'';
}

View File

@@ -1,71 +1,109 @@
{ pkgs, ... }: { { pkgs, ... }:
{
environment.variables.EDITOR = pkgs.lib.mkForce "nvim"; environment.variables.EDITOR = pkgs.lib.mkForce "nvim";
environment.shellAliases.vi = "nvim"; environment.shellAliases.vi = "nvim";
environment.shellAliases.vim = "nvim"; environment.shellAliases.vim = "nvim";
environment.shellAliases.view = "nvim -R"; environment.shellAliases.view = "nvim -R";
nixpkgs.config.packageOverrides = pkgs: {
vimPlugins = pkgs.vimPlugins // {
cheat-sh-vim = pkgs.callPackage <niveum/packages/vimPlugins/cheat-sh.nix> { };
vim-fetch = pkgs.callPackage <niveum/packages/vimPlugins/vim-fetch.nix> { };
vim-colors-paramount = pkgs.callPackage <niveum/packages/vimPlugins/vim-colors-paramount.nix> { };
vim-256noir = pkgs.callPackage <niveum/packages/vimPlugins/vim-256noir.nix> { };
icalendar-vim = pkgs.callPackage <niveum/packages/vimPlugins/icalendar-vim.nix> { };
jq-vim = pkgs.callPackage <niveum/packages/vimPlugins/jq-vim.nix> { };
vim-fsharp = pkgs.callPackage <niveum/packages/vimPlugins/vim-fsharp.nix> { };
vim-reason-plus = pkgs.callPackage <niveum/packages/vimPlugins/vim-reason-plus.nix> { };
vim-mail = pkgs.callPackage <niveum/packages/vimPlugins/vim-mail.nix> { };
};
};
environment.systemPackages = [ environment.systemPackages = [
(pkgs.writers.writeDashBin "vim" ''neovim "$@"'')
(pkgs.neovim.override { (pkgs.neovim.override {
configure = { configure = {
customRC = builtins.readFile <niveum/lib/vim/init.vim>; customRC = builtins.readFile <dot/vimrc>;
packages.nvim = with pkgs.vimPlugins; { packages.nvim = with pkgs.vimPlugins; {
start = [ start = with pkgs.vimPlugins; [
ale ale
deoplete-nvim
fzf-vim fzf-vim
fzfWrapper fzfWrapper
supertab supertab
undotree
tabular tabular
vimwiki vim-abolish
vim-colors-paramount
vim-commentary vim-commentary
vim-css-color
vim-eunuch vim-eunuch
vim-fetch
vim-fugitive vim-fugitive
vim-gitgutter vim-gitgutter
vim-pandoc vim-pandoc-after vim-pandoc-syntax
vim-repeat vim-repeat
vim-sensible vim-sensible
vim-startify
vim-surround vim-surround
(pkgs.vimUtils.buildVimPluginFrom2Nix rec {
name = "vim-fetch";
src = pkgs.fetchFromGitHub {
owner = "wsdjeg";
repo = "vim-fetch";
rev = "76c08586e15e42055c9c21321d9fca0677442ecc";
sha256 = "0avcqjcqvxgj00r477ps54rjrwvmk5ygqm3qrzghbj9m1gpyp2kz";
};
})
(pkgs.vimUtils.buildVimPluginFrom2Nix rec {
name = "vim-colors-paramount";
src = pkgs.fetchFromGitHub {
owner = "owickstrom";
repo = "vim-colors-paramount";
rev = "a5601d36fb6932e8d1a6f8b37b179a99b1456798";
sha256 = "0rjn9vjb0xrxbiqyfclda2ridcbl3nfn4svs32mvmv8als6crncg";
};
})
(pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "vim-256noir";
src = pkgs.fetchFromGitHub {
owner = "andreasvc";
repo = "vim-256noir";
rev = "e8668a18a4a90272c1cae87e655f8bddc5ac3665";
sha256 = "1kpn379f5dgbsgb73g6d1nlmz9vz0j3ihi500mcdx4yg56fvkr0x";
};
})
]; ];
opt = [ opt = [
csv csv
dhall-vim dhall-vim
elm-vim elm-vim
emmet-vim
haskell-vim haskell-vim
icalendar-vim
idris-vim idris-vim
nim-vim
jq-vim
purescript-vim
rust-vim rust-vim
typescript-vim typescript-vim
vim-fsharp
vim-javascript vim-javascript
vim-ledger
vim-nix vim-nix
vim-reason-plus
vim-toml vim-toml
vimtex vimtex
vim-pandoc vim-ledger
vim-pandoc-syntax # vim-pandoc-after (pkgs.vimUtils.buildVimPluginFrom2Nix {
vim-256noir name = "todo.txt-vim";
src = pkgs.fetchFromGitHub {
owner = "freitass";
repo = "todo.txt-vim";
rev = "6845221d45bd62e604c2024bc511a56e79d1118b";
sha256 = "08m9q5f2pz6gjp0vkmm7glfsrbnldxi1j59dm5d7any6y96xxd6v";
};
})
(pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "jq.vim";
src = pkgs.fetchFromGitHub {
owner = "vito-c";
repo = "jq.vim";
rev = "5baf8ed192cf267d30b84e3243d9aab3d4912e60";
sha256 = "1ykaxlli7b9wmhr8lpdalqxh7l4940jwhwm9pwlraga425h4r6z4";
};
})
(pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "vim-fsharp";
src = pkgs.fetchFromGitHub {
owner = "fsharp";
repo = "vim-fsharp";
rev = "627db7d701747e8fd7924b6505c61e16a369fb72";
sha256 = "00hhgn2p54faysx1ddccyhl9jnvddgxsczhv0np3mgzza6ls4838";
};
})
(pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "emmet-vim";
src = pkgs.fetchFromGitHub {
owner = "mattn";
repo = "emmet-vim";
rev = "d698f1658770ca5fa58c87e80421c8d65bbe9065";
sha256 = "0vl4267hh8g1vkvc3awlqyypgz4m1r43d47sldl80yamiafiviaj";
};
})
]; ];
}; };
}; };

View File

@@ -1,100 +0,0 @@
{ lib, pkgs, ... }:
let
autowifi = pkgs.writers.writePython3Bin "autowifi" { flakeIgnore = [ "E501" ]; } <stockholm/lass/5pkgs/autowifi/autowifi.py>;
profile = name: custom: lib.recursiveUpdate {
connection.id = name;
connection.type = "wifi";
connection.interface-name = "wlp3s0";
connection.permissions = "";
wifi.mac-address-blacklist = "";
wifi.ssid = name;
wifi.mode = "infrastructure";
ipv4.dns-search = "";
ipv4.method = "auto";
ipv6.addr-gen-mode = "stable-privacy";
ipv6.dns-search = "";
ipv6.method = "auto";
proxy = {};
} custom;
eduroamProfile = {
connection.uuid = "eae9fee6-a7d2-4120-a609-440b457d6fcf";
wifi-security = {
group = "ccmp;tkip;";
key-mgmt = "wpa-eap";
pairwise = "ccmp;";
proto = "rsn;";
};
"802-1x" = {
altsubject-matches = "DNS:srv1-radius.cms.hu-berlin.de;DNS:srv2-radius.cms.hu-berlin.de;";
anonymous-identity = "anonymous@wlan.hu-berlin.de";
ca-cert = pkgs.fetchurl {
url = "https://www.cms.hu-berlin.de/de/dl/netze/wlan/config/eduroam/t-telesec_globalroot_class_2.pem";
sha256 = "0if8aqd06sid7a0vw009zpa087wxcgdd2x6z2zs4pis5kvyqj2dk";
};
eap = "ttls;";
identity = lib.strings.fileContents <secrets/eduroam/identity>;
password = lib.strings.fileContents <secrets/eduroam/password>;
phase2-auth = "pap";
};
};
in
{
imports = [ <niveum/modules/networkmanager-declarative.nix> ];
networking.networkmanager = {
enable = true;
wifi.macAddress = "random";
ethernet.macAddress = "random";
unmanaged = [ "docker*" ];
profiles = lib.mapAttrs profile {
Aether = {
connection.uuid = "7138bb0f-1aeb-4905-890e-a6628427aa21";
ipv6.addr-gen-mode = "stable";
wifi.cloned-mac-address = "stable";
wifi-security = {
psk = lib.strings.fileContents <secrets/wifi/Aether.psk>;
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
FactoryCommunityGuest = {
connection.uuid = "fb1f2e52-651e-48b5-a72c-1accddf31afb";
connection.timestamp = "1631885129";
wifi.seen-bssids = "54:EC:2F:19:30:DC;54:EC:2F:19:5C:9C;54:EC:2F:58:E4:3C;";
wifi-security = {
psk = "Factory4ever";
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
o2-WLAN66 = {
connection.uuid = "c563aec3-f344-4ffb-8d1c-60a6cdac8fe0";
wifi-security = {
psk = "PK3468KV488T934U";
auth-alg = "open";
key-mgmt = "wpa-psk";
};
};
"WIFI@DB".connection.uuid = "4eff4e94-8850-4e9f-a338-1787d0d90479";
eduroam = eduroamProfile;
eduroam_5GHz = eduroamProfile;
};
};
users.users.me.extraGroups = [ "networkmanager" ];
systemd.services.autowifi = {
enable = false;
description = "Automatic wifi connector";
wantedBy = [ "multi-user.target" ];
path = [ pkgs.networkmanager ];
serviceConfig = {
Type = "simple";
Restart = "always";
RestartSec = "10s";
ExecStart = "${autowifi}/bin/autowifi";
};
};
environment.systemPackages = [ pkgs.speedtest-cli ];
}

View File

@@ -1,81 +0,0 @@
{ pkgs, config, ... }:
let
ytdl-format = "'bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best'";
youtube-download = "${pkgs.ts}/bin/ts ${pkgs.youtube-dl}/bin/youtube-dl -f ${ytdl-format} --add-metadata";
newsboat-home =
"${config.users.users.me.home}/cloud/Seafile/Documents/newsboat";
linkhandler-bin = "${pkgs.scripts.linkhandler}/bin/linkhandler";
newsboat-config = pkgs.writeText "config" ''
auto-reload no
prepopulate-query-feeds yes
# dont keep a search history
history-limit 0
datetime-format %F
text-width 85
external-url-viewer "${pkgs.urlscan}/bin/urlscan -dc -r '${linkhandler-bin} {}'"
browser ${linkhandler-bin}
macro , open-in-browser
macro c set browser "${pkgs.xsel}/bin/xsel -b <<<" ; open-in-browser ; set browser ${linkhandler-bin}
macro v set browser "${pkgs.utillinux}/bin/setsid -f ${pkgs.mpv}/bin/mpv" ; open-in-browser ; set browser ${linkhandler-bin}
macro y set browser "${youtube-download}" ; open-in-browser ; set browser ${linkhandler-bin}
bind-key j down
bind-key k up
bind-key j next articlelist
bind-key k prev articlelist
bind-key J next-feed articlelist
bind-key K prev-feed articlelist
bind-key G end
bind-key g home
bind-key d pagedown
bind-key u pageup
bind-key l open
bind-key h quit
bind-key a toggle-article-read
bind-key n next-unread
bind-key N prev-unread
bind-key D pb-download
bind-key U show-urls
bind-key x pb-delete
save-path ${newsboat-home}/saved/
highlight all "---.*---" yellow default
highlight feedlist ".*(0/0))" black default
highlight article "^Title:.*" yellow default bold
highlight article "^Author:.*" yellow default
highlight article "^Flags:.*" red default
highlight article "\\[[0-9][0-9]*\\]" color66 default bold
highlight article "\\[image [0-9][0-9]*\\]" color109 default bold
highlight article "\\[embedded flash: [0-9][0-9]*\\]" color66 default bold
color background white default
color listnormal white default
color listnormal_unread white default bold
color listfocus blue default
color listfocus_unread blue default bold
color info red default bold
color article white default
'';
in {
nixpkgs.config.packageOverrides = pkgs: {
newsboat = pkgs.writers.writeDashBin "newsboat" ''
${pkgs.newsboat}/bin/newsboat -C ${newsboat-config} -c ${newsboat-home}/cache.db -u ${newsboat-home}/urls "$@"
'';
};
environment.systemPackages = [
pkgs.newsboat
(pkgs.writers.writeDashBin "mpv-watch-later" ''
${pkgs.sqlite}/bin/sqlite3 ${newsboat-home}/cache.db "SELECT url FROM rss_item WHERE flags='e' AND deleted=0 ORDER BY pubDate DESC" \
| ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv
'')
];
}

View File

@@ -1,15 +0,0 @@
{ pkgs, ... }:
{
nixpkgs = {
config.allowUnfree = true;
overlays = [
(import <nix-writers/pkgs>)
(import <stockholm/krebs/5pkgs>)
];
};
# enable `nix flake`
nix = {
package = pkgs.nixFlakes;
extraOptions = "experimental-features = nix-command flakes";
};
}

View File

@@ -0,0 +1,8 @@
{ config, ... }:
{
nixpkgs.config.packageOverrides = pkgs: {
unstable = import <nixos-unstable> {
config = config.nixpkgs.config;
};
};
}

View File

@@ -1,19 +0,0 @@
{ pkgs, lib, ... }:
let
openweathermap-repo = pkgs.fetchFromGitHub {
owner = "ip1981";
repo = "openweathermap";
rev = "9cfef7b14ac5af7109449b54b1cb352b4c76167a";
sha256 = "0sm43wicvw2fy7nq65s8vch6jjb5bszqr4ilnhibayamj4jcpw53";
};
openweathermap = pkgs.haskellPackages.callCabal2nix "openweathermap" openweathermap-repo {};
openweathermap-key = lib.strings.fileContents <secrets/openweathermap.key>;
in {
nixpkgs.config.packageOverrides = pkgs: {
weather = pkgs.writers.writeDashBin "weather" ''
${openweathermap}/bin/openweathermap --api-key ${openweathermap-key} "$@"
'';
};
environment.systemPackages = [ pkgs.weather ];
}

View File

@@ -1,227 +1,107 @@
{ pkgs, lib, ... }: { pkgs, ... }:
let {
hc = pkgs.callPackage <stockholm/tv/5pkgs/simple/hc.nix> {};
worldradio = pkgs.callPackage <niveum/packages/worldradio.nix> {};
menstruation = pkgs.callPackage <niveum/submodules/menstruation-backend> {};
nixpkgs-unstable = import <nixpkgs-unstable> { config.allowUnfree = true; };
astrolog = nixpkgs-unstable.astrolog.overrideAttrs (old: old // {
installPhase = ''
${old.installPhase}
# set sensible defaults
sed -i '
/^-z /s/8:00W/1:00E/ # timezone
/^-zl /s/122W19:59 47N36:35/13E22:42 52N27:42/ # default location
/^-zj /s/"Current moment now"/Now/ # default name
/^-zj /s/"Seattle, WA, USA"/Berlin/ # default location
/^_k/s/_k/=k/ # use color
/^_Yd/s/_Yd/=Yd/ # sensible date format
/^_Yt/s/_Yt/=Yt/ # sensible time format
/^_Yv/s/_Yv/=Yv/ # sensible length format
/^:Xbw/s/:Xbw/:Xbn/ # set X11 bitmap format
/^:I /s/80/120/ # wider text output
' $out/astrolog/astrolog.as
'';
});
recht = pkgs.callPackage (pkgs.fetchFromGitHub {
owner = "kmein";
repo = "recht";
rev = "0.6.2";
sha256 = "08gnrnz3lwh8h6fyga56yfy9qryzm89xbshm7wpxfyxf2pmp1qfx";
}) {};
in {
imports = [ imports = [
./krebs.nix
./programming.nix
./writing.nix ./writing.nix
./python.nix
./haskell
{ {
environment.systemPackages = let
# nightly = pkgs.rustChannelOf {
# date = "2019-12-27";
# channel = "nightly";
# };
in with pkgs; [
htmlTidy
nodePackages.csslint
nodePackages.jsonlint
nodePackages.prettier
nodePackages.typescript
nodePackages.yarn
nodejs
nodePackages.javascript-typescript-langserver
tokei # count lines of code
gnumake
binutils # for strip, ld, ...
# nightly.rust
shellcheck
];
}
];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# INTERNET ] ++ [ # internet
aria2 aria2
firefox firefox
tor-browser-bundle-bin
thunderbird
tdesktop tdesktop
w3m w3m
wget wget
httpie
whois whois
ix ddgr
dnsutils python3Packages.instaloader
# mtr # my traceroute mtr # my traceroute
# FILE MANAGERS ] ++ [ # media
ranger
pcmanfm
# MEDIA
ffmpeg ffmpeg
imagemagick imagemagick
exiftool sxiv
scrot ] ++ [ # archive
# ARCHIVE TOOLS
unzip unzip
unrar unrar
p7zip p7zip
zip zip
# MONITORS ] ++ [ # monitor
htop htop
iotop # I/O load monitor iotop
iftop # interface bandwidth monitor iftop
lsof # list open files lsof
psmisc # for killall, pstree psmisc
# SHELL ] ++ [ # shell
bat # better cat bat
fd # better find
file # determine file type
dos2unix dos2unix
ncdu # ncurses disk usage ncdu
python3Packages.jsonschema # json validation du-dust
jq # json toolkit fd
pup # html toolkit file
nixpkgs-unstable.htmlq jq # json manipulation
xsv # csv toolkit jo # json creation
xmlstarlet # xml toolkit kmein.nav # json navigation
xsv
xmlstarlet
manpages manpages
posix_man_pages posix_man_pages
# moreutils # for parallel, sponge, combine moreutils
tree ranger
fuse_exfat # to mount windows drives ripgrep
parallel # for parallel, since moreutils shadows task spooler
ripgrep # better grep
rlwrap rlwrap
progress # display progress bars for pipes progress # display progress bars for pipes
up # universal plumber (piping tool) up # universal plumber (piping tool)
# HARDWARE TOOLS ] ++ [ # hardware
usbutils # for lsusb usbutils
pciutils # for lspci pciutils
lshw # for lshw lshw
arandr # xrandr for noobs ] ++ [ # graphical
libnotify # for notify-send arandr
xclip # clipboard CLI libnotify
dragon-drop # drag and drop xclip
xorg.xkill # kill by clicking xorg.xkill
] ++ [ # programming
nix-prefetch-git
] ++ [ # media
audacity audacity
calibre calibre
inkscape inkscape
astrolog # astrolog xpdf
anki # flashcards pdfgrep
nixpkgs-unstable.zoom-us # video conferencing pdftk
pdfgrep # search in pdf spotify
pdftk # pdf toolkit python3Packages.spotify-cli-linux
poppler_utils # pdf toolkit
foxitreader # for viewing pdf annotations
xournalpp # for annotating pdfs
pdfpc # presenter console for pdf slides
hc # print files as qr codes
youtubeDL youtubeDL
bc # calculator ] ++ [ # math
pari # gp -- better calculator bc
scripts.auc ] ++ [ # shell
scripts.infschmv (pass.withExtensions (ext: [ext.pass-otp]))
scripts.qrpaste fzf
scripts.new-mac # get a new mac address gnupg
scripts.scanned kmein.haskellPackages.mnemosyne
scripts.default-gateway kmein.autorenkalender
scripts.showkeys-toggle kmein.bvg
scripts.kirciuoklis kmein.daybook
scripts.favicon kmein.depp
scripts.ipa # XSAMPA to IPA converter kmein.font-size
scripts.playlist kmein.genius
scripts.mpv-tv kmein.instaget
scripts.devanagari kmein.literature-quote
scripts.betacode # ancient greek betacode to unicode converter kmein.n
scripts.meteo kmein.odyssey
scripts.mahlzeit kmein.wttr
recht kmein.slide
scripts.vimv memo
scripts.swallow # window swallowing nix-git
scripts.genius
scripts.instaget
scripts.literature-quote
scripts.nav # json navigation
scripts.n
scripts.notetags
scripts.booksplit
scripts.dmenurandr
scripts.interdimensional-cable
scripts.dmenubluetooth
scripts.manual-sort
scripts.much-scripts
scripts.dns-sledgehammer
ts
scripts.vg
scripts.fkill
scripts.wttr
scripts.sanskrit-dictionary
scripts.unicodmenu
scripts.horoscope
scripts.closest
scripts.trans
scripts.liddel-scott-jones
scripts.mpv-radio
# kmein.slide
scripts.tolino-screensaver
scripts.rfc
scripts.tag
scripts.menu-calc
nix-prefetch-git
scripts.nix-git
nixfmt
par par
qrencode qrencode
unstable.hugo
unstable.zola
wtf wtf
menstruation
(pkgs.writers.writeDashBin "worldradio" ''
shuf ${worldradio} | ${pkgs.findutils}/bin/xargs ${pkgs.mpv}/bin/mpv --no-video
'')
(pkgs.writers.writeDashBin "chats" ''
${pkgs.openssh}/bin/ssh makanek "cd /var/lib/weechat/logs && grep --ignore-case --color=always --recursive $@" | ${pkgs.less}/bin/less --raw-control-chars
'')
(pkgs.writers.writeDashBin "ncmpcpp-zaatar" ''MPD_HOST=${(import <niveum/lib/local-network.nix>).zaatar} exec ${pkgs.ncmpcpp}/bin/ncmpcpp "$@"'')
(pkgs.writers.writeDashBin "mpc-zaatar" ''MPD_HOST=${(import <niveum/lib/local-network.nix>).zaatar} exec ${pkgs.mpc_cli}/bin/mpc "$@"'')
nixpkgs-unstable.spotify
ncspot
playerctl
nix-index
scripts.nix-index-update
#krebs
dic
cyberlocker-tools
untilport
kpaste
irc-announce
git-preview
ircaids
]; ];
}
];
} }

View File

@@ -1,46 +0,0 @@
{ config, pkgs, ... }: {
home-manager.users.me.home.file = {
".ghc/ghci.conf".text = ''
:set editor vim
:def hoogle \s -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle search --color -l --count=15 \"" ++ s ++ "\""
:def doc \s -> return $ ":!${pkgs.haskellPackages.hoogle}/bin/hoogle search --color -l --info \"" ++ s ++ "\""
:set prompt "\o033[1m%s\o033[1;34m λ\o033[0m "
:set -Wall
:set -XOverloadedStrings
'';
# :def unpl \x -> return $ ":!${pkgs.haskellPackages.pointful}/bin/pointful \"" ++ x ++ "\""
# :def pl \x -> return $ ":!${pkgs.haskellPackages.pointfree}/bin/pointfree -v \"" ++ x ++ "\""
".stack/config.yaml".source =
let inherit (import <niveum/lib>) kieran;
in (pkgs.formats.yaml {}).generate "config.yaml" {
templates.params = {
author-name = kieran.name;
author-email = kieran.email;
copyright = "Copyright: (c) 2020 ${kieran.name}";
github-username = kieran.github;
};
};
};
services.hoogle = {
enable = false;
packages = import ./packages.nix;
port = 8091;
};
environment.systemPackages = with pkgs;
[
cabal2nix
cabal-install
hlint
haskellPackages.ormolu
(haskellPackages.ghcWithHoogle (import ./packages.nix))
] ++ map haskell.lib.justStaticExecutables [
haskellPackages.ghcid
haskellPackages.hasktags
# haskellPackages.hindent
# haskellPackages.pointfree
# haskellPackages.pointful
haskellPackages.hpack
];
}

View File

@@ -0,0 +1,19 @@
{ 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> {};
untilport = pkgs.callPackage <stockholm/krebs/5pkgs/simple/untilport> {};
kpaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/kpaste> {};
krebspaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/krebspaste> {};
bepasty-client-cli = pkgs.callPackage <stockholm/krebs/5pkgs/simple/bepasty-client-cli> {};
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));
}

View File

@@ -0,0 +1,28 @@
{ pkgs, ... }:
{
imports = [
{
environment.systemPackages = with pkgs; [
htmlTidy
nodePackages_10_x.csslint
nodePackages_10_x.jsonlint
nodePackages_10_x.prettier
nodePackages_10_x.typescript
nodePackages_10_x.yarn
nodejs-10_x
];
}
];
environment.systemPackages = with pkgs; [
tokei # count lines of code
gnumake
gcc
binutils # strip, ld, ...
iolanguage
ruby
rubocop
rustup
shellcheck
];
}

View File

@@ -1,20 +0,0 @@
{ pkgs, ... }: {
environment.systemPackages = [
(pkgs.python3.withPackages (py: [
py.black
# py.python-language-server
# py.pyls-mypy
# py.pyls-black
# py.pyls-isort
py.flake8
py.pygments
py.schema
]))
pkgs.python3Packages.poetry
];
home-manager.users.me.xdg.configFile."pycodestyle".text = ''
[pycodestyle]
max-line-length = 110
'';
}

View File

@@ -1,81 +1,17 @@
{ pkgs, lib, config, ... }: { pkgs, ... }:
let {
pandoc-doc = pkgs.callPackage <niveum/packages/man/pandoc.nix> {};
zoteroStyle = { name, sha256 }: {
name = "${name}.csl";
path = pkgs.fetchurl {
url = "https://www.zotero.org/styles/${name}";
inherit sha256;
};
};
cslDirectory = pkgs.linkFarm "citation-styles" [
(zoteroStyle {
name = "chicago-author-date-de";
sha256 = "0fz0xn46rkciblr34a7x2v60j0lbq9l3fmzi43iphph27m0czn6s";
})
(zoteroStyle {
name = "din-1505-2";
sha256 = "1pvy1b7qm13mnph7z365rrz1j082bl2y8ih73rhzd0zd6dz1jyjq";
})
(zoteroStyle {
name = "apa";
sha256 = "1878vxp0y0h05yzaghnd51n981623mxskw3lsdyzmffqhihvv111";
})
];
makeStardictDataDir = dicts:
pkgs.linkFarm "dictionaries" (map ({ name, path }: {
name = "dic/${name}";
inherit path;
}) dicts);
in {
environment.variables.STARDICT_DATA_DIR = toString (makeStardictDataDir [
{
name = "gr-de";
path = pkgs.fetchurl {
url = "http://tovotu.de/data/stardict/pape_gr-de.zip";
sha256 = "1d705y47b40vp0mg79vbwasw4y0i8fmnlwvf4x4ri0dkfqng9sky";
};
}
{
name = "la-de";
path = pkgs.fetchurl {
url = "http://tovotu.de/data/stardict/georges_lat-de.zip";
sha256 = "12n26nzwg28wn4zwv45mv0wkgy1jh1d8p0k6haamz9601cqq7hkj";
};
}
{
name = "de-la";
path = pkgs.fetchurl {
url = "http://tovotu.de/data/stardict/georges_de-lat.zip";
sha256 = "0inm6xn1lcnb851cj329n0v2vbfc1z1bxwhgsd8fnm0zxy3f3ifq";
};
}
]);
home-manager.users.me.home.file = {
".csl".source = cslDirectory;
".local/share/pandoc/csl".source = cslDirectory; # as of pandoc 2.11, it includes citeproc
};
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
texlive.combined.scheme-full (texlive.combine {
latexrun inherit (pkgs.texlive) scheme-full texdoc latex2e-help-texinfo;
(aspellWithDicts (dict: [ dict.de dict.en dict.en-computers ])) pkgFilter = pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "latex2e-help-texinfo";
# haskellPackages.pandoc-citeproc })
scripts.text2pdf # haskellPackages.patat
lowdown (aspellWithDicts (dict: [dict.de dict.en dict.la dict.en-computers dict.ru]))
glow # markdown to term haskellPackages.pandoc-citeproc
libreoffice libreoffice
# gnumeric
dia
pandoc pandoc
pandoc-doc proselint
# proselint unstable.asciidoctor
asciidoctor
wordnet wordnet
# sdcv # stardict cli
]; ];
} }

View File

@@ -1,24 +0,0 @@
{ pkgs, config, ... }:
let
suspend = pkgs.writers.writeDash "suspend" "${pkgs.systemd}/bin/systemctl suspend";
in
{
imports = [ <stockholm/krebs/3modules/power-action.nix> ];
krebs.power-action = {
enable = true;
plans.suspend = {
upperLimit = 7;
lowerLimit = 0;
charging = false;
action = pkgs.writeDash "suspend-wrapper" ''
/run/wrappers/bin/sudo ${suspend}
'';
};
user = config.users.users.me.name;
};
security.sudo.extraConfig = ''
${config.krebs.power-action.user} ALL= (root) NOPASSWD: ${suspend}
'';
}

View File

@@ -1,33 +1,9 @@
{ pkgs, ... }: { pkgs, ... }:
let {
inherit (import <niveum/lib>) localAddresses;
hp-driver = pkgs.hplipWithPlugin;
in {
services.printing = { services.printing = {
enable = true; enable = true;
drivers = [ hp-driver ]; drivers = [ pkgs.hplipWithPlugin ];
}; };
hardware.sane = { networking.hosts."192.168.178.27" = [ "officejet" ];
enable = true;
extraBackends = [ hp-driver ];
};
hardware.printers.ensurePrinters = [{
name = "OfficeJet";
location = "Zimmer";
deviceUri = "https://${localAddresses.officejet}";
model = "drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd";
ppdOptions = {
Duplex = "DuplexNoTumble"; # DuplexNoTumble DuplexTumble None
PageSize = "A4"; # A4 A4.FB A4.Duplex
MediaType = "Plain";
OutputMode = "Normal";
ColorModel = "KGray"; # RGB CMYGray KGray
};
}];
} }
/* HP/hp-officejet_4650_series.ppd.gz
drv:///hp/hpcups.drv/hp-officejet_4650_series.ppd
*/

Some files were not shown because too many files have changed in this diff Show More