Merge remote-tracking branch 'lass/master'

This commit is contained in:
makefu 2022-09-23 22:25:15 +02:00
commit 57eceb7c05
No known key found for this signature in database
GPG Key ID: 36F7711F3FC0F225
32 changed files with 546 additions and 262 deletions

View File

@ -61,7 +61,7 @@ let
];
hooks.PRIVMSG = [
{
pattern = "^bier bal(an(ce)?)?$";
pattern = "^bier (ballern|bal(an(ce)?)?)$";
activate = "match";
command = {
env = {
@ -90,6 +90,10 @@ let
amt=$2
unit=$3
printf '%s\n %s %d %s\n %s %d %s\n' "$(date -Id)" "$tonick" "$amt" "$unit" "$_from" "$(expr 0 - "''${amt#+}")" "$unit" >> $state_file
${pkgs.hledger}/bin/hledger -f $state_file bal -N -O csv \
| ${pkgs.coreutils}/bin/tail +2 \
| ${pkgs.miller}/bin/mlr --icsv --opprint cat \
| ${pkgs.gnugrep}/bin/grep "$_from"
'';
};
}

View File

@ -138,41 +138,54 @@ let
let inherit (config.krebs.build.host.ssh) privkey; in
mkIf (privkey != null) [privkey];
# TODO use imports for merging
services.openssh.knownHosts =
(let inherit (config.krebs.build.host.ssh) pubkey; in
optionalAttrs (pubkey != null) {
localhost = {
hostNames = ["localhost" "127.0.0.1" "::1"];
publicKey = pubkey;
};
})
//
mapAttrs
(name: host: {
hostNames =
concatLists
(mapAttrsToList
(net-name: net:
let
longs = net.aliases;
shorts =
optionals
(cfg.dns.search-domain != null)
(map (removeSuffix ".${cfg.dns.search-domain}")
(filter (hasSuffix ".${cfg.dns.search-domain}")
longs));
add-port = a:
if net.ssh.port != 22
then "[${a}]:${toString net.ssh.port}"
else a;
in
map add-port (shorts ++ longs ++ net.addrs))
host.nets);
publicKey = host.ssh.pubkey;
})
(filterAttrs (_: host: host.ssh.pubkey != null) cfg.hosts);
filterAttrs
(knownHostName: knownHost:
knownHost.publicKey != null &&
knownHost.hostNames != []
)
(mapAttrs
(hostName: host: {
hostNames =
concatLists
(mapAttrsToList
(netName: net:
let
aliases =
concatLists [
shortAliases
net.aliases
net.addrs
];
shortAliases =
optionals
(cfg.dns.search-domain != null)
(map (removeSuffix ".${cfg.dns.search-domain}")
(filter (hasSuffix ".${cfg.dns.search-domain}")
net.aliases));
addPort = alias:
if net.ssh.port != 22
then "[${alias}]:${toString net.ssh.port}"
else alias;
in
map addPort aliases
)
host.nets);
publicKey = host.ssh.pubkey;
})
(foldl' mergeAttrs {} [
cfg.hosts
{
localhost = {
nets.local = {
addrs = [ "127.0.0.1" "::1" ];
aliases = [ "localhost" ];
ssh.port = 22;
};
ssh.pubkey = config.krebs.build.host.ssh.pubkey;
};
}
]));
programs.ssh.extraConfig = concatMapStrings
(net: ''

View File

@ -588,6 +588,31 @@ in {
};
};
};
aland = {
owner = config.krebs.users.xkey;
nets = {
retiolum = {
ip4.addr = "10.243.12.34";
aliases = [ "aland.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAwR1e8/4Lx7gqSyFhA5WpfT4LsnXqYARR6y+gYAOSre6wMvBm/OBY
CKEYCCfqQD3naukID9FqleXaZdIxp6xxBIYZ1yi1Xn032MPP0S37oZAxJlXvlEaU
plG9ct6Zh6qTzpghP2UyYD4RxhLwvsRTycwLF93D+a1z1/CNNDLSoTS11BLtvhDb
DmxTVY/1hWJUiVR4KyRsYnJ3N1Heg/4R/Su4oFm+DatfFYdzhaNsk9q3YYIRdRcx
aHLF65ygVTjG/rUJp/OvkeU1G5rc0ldpd7zR8N8kkjgI1lmZe50mUGghKr1zexV+
OkIjXGrwTk4RZk3kZO6PZu56rrsR8HZirfrtJWRy7UgAm3S/lZku7X4SN3+7pfL1
ero6/XB4CHeQ9OpQemcR5o6AR0ncE0TApqeoLd1U710XmwM09ifawAO3jm9ER19X
TKFHeBzqsToPmternXnAKgg2NYyKStkavQu6JTl/uOXdfqfMc9TU6mzV8aBo7ZDa
aLdlg0phcFCcZT8zJGzA3des70AHWmQ7G49pBysnXk8p+1l3SPazGAlIWBCT6oZX
zUUauGEgsuTkDC+JijUm/1HrrMfiigHeBTZKPLqe/75MkumukXqTzd3zfUEcA5Vf
VgEnL2jNVFfocJtmhLQdkmnSiIQslRSOHMC94ZWa0ku0kHZ3XawwwY0CAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "gOEzoUsuJyaGIjoZIyS9uZa+zLYfN6BEZrbCTeAWW7A";
};
};
};
papawhakaaro = {
owner = config.krebs.users.feliks;
nets = {
@ -613,6 +638,31 @@ in {
};
};
};
iti = {
owner = config.krebs.users.feliks;
nets = {
retiolum = {
ip4.addr = "10.243.10.244";
aliases = [ "iti.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEA5TXEmw3F3lCekITBPW8QYF1ciKHN8RSi47k1vW+jXb6gdWcVo5KL
Ithq3T2+jWJJQoOJEDl5Tvo9ilF0oE0AqSNnvfgS/t8xfFVEsNvHodbonXXku5cF
N7oFooAgQRXAUJpEQLtcfx9kJutSYgGeEvoRGZkWaqY6tzPL45U2WEna+MJ/P1Cd
57JMOLeJJEjZKtC/XqPOQ81KNcm161RKekHas5ZNK30QEVP9QsjTDoLesYwm1ywt
4LiHRHSSHd65pKXJvi1haEYw25BxIun7kY4IQHrfEuK3DNs0kyYJj2rKL4C9kHgT
hYd+fFl1i/X1BjPzo+ZY91ahLVX3UPpOsB8vC9Q7Ctm1Nkc/bCfKRUNbamkS0Bwf
tngak3heGvuek6Y7qWQUkvMkPLhZwZUXUz+DBXGWXabP5LL8Z/y3V+Qqj0snEsZ3
9iOF+eeDw2/9hBzRzBPGtwL1DREgd+1J/XlHLcjF4jzkMhweIXw2Yh0Jq7D5Nqf3
kPF9n/50zbQneSGEiKFeHm1ykag/KV0ebWHUOy1Gydbs7+RxT9GUiZofI6kyjJUI
g1w1ajkZYIIqhIvhMHudLay5h4kLkdGN9yuRNO/BG5sGk5MywZHyMploIX0ZRVui
+H3Sx2y268r/Fs6JcaddmzFwFqNmdRTRv/KBp91QGnjcaJDzQPKg/IsCAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "uG9D7hrWNx+9otDFlZ8Yi31L6xxC7dzGlqXBLkzJCwE";
};
};
};
hydrogen = {
owner = config.krebs.users.sandro;
nets = rec {

View File

@ -10,66 +10,6 @@ with import <stockholm/lib>;
});
in {
hosts = mapAttrs hostDefaults {
amy = {
owner = config.krebs.users.mic92;
nets = rec {
internet = {
ip4.addr = "129.215.165.57";
ip6.addr = "2001:630:3c1:164:b62e:99ff:fe3e:d369";
aliases = [ "amy.i" ];
};
retiolum = {
ip4.addr = "10.243.29.181";
aliases = [ "amy.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAr3jQRA1+hLKYVgHJA2ax5W8J3GVMTnaGpYw9Q2xXXrX/jxLZ6Ia8
hBjIcCBDVL5Q3FnyrKB9NJeeIvCOKg8WG+8O0+wKcePKd0Vhbsx4Whog/6PWs6qh
q2sURs2tp1hjHks4kZo2WtiYD7Ue9HHdV6FlUO6yuBV0bW2RzHdLPCDSGxnQVkBM
tSwAvMCZwvVBiv4m6RyMXqmpdbAPBzgJcmJS0FY+zGxpiwsR/AdoVvnzYyFMCVpG
iFl5+k9OGhUJq72MwAXzjW5ZdCPrG+2Dd+QBhhtIMJGA2sJiJteT8vdvpTNCiHJ/
HnW7movliN2mW86qwo7QqB5v0c9f9TjfpOld7sS/4vE3zlGi/Stf6SQWaoXez/u3
/P9GzupcYgj76m8Z3j7BMHXCBw8iwP2pZpL9hnLdIyCcyLrzXDIzq4hlt60DPhSU
klTDBUA/cUdSJGcSn2N+WHLOTfI6qeBNKqcTk70OQsa69jAJeAtA+I9OprNYOXqb
MmQakNNlrTaNtGQxfQqEL+wqHlo8CVDGm3O9pQSNF309P4TLNU1EYm+ItScNiVCE
DKhcgvE6xHCwZnVyJN8MMy1CVyDmnHVYoaTEZ2cCvNi/hXIXgO9KWjSpAv5tP764
UkOE4dlDpEW6G1pNf84BERfRYGDj29A/Jk9LJC/6D09QJXNu18HR0sUCAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "6VktF9Fg9E0hCW5g+rwGnrPACPSx/8vkl+hPNaFYeND";
};
};
};
clara = {
owner = config.krebs.users.mic92;
nets = rec {
internet = {
ip4.addr = "129.215.165.58";
ip6.addr = "2001:630:3c1:164:b62e:99ff:fe3d:70f2";
aliases = [ "clara.i" ];
};
retiolum = {
ip4.addr = "10.243.29.182";
aliases = [ "clara.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEA07G1n2sA804nnjWQzq0Fi9i6kxJUo+jVJjtkm5unw3hjflAAd/3d
WN+01GdJCk/gr7DfU/Xr5KnR39Z3ADoT1tbUb+i5AJZ5/8VHUwWM8D8mQAam6LBf
UEeLxhVH8rG6lHaKwVi9oe4gPhgptUOzX/YIlJOMYDlYRxc7Wbj7YQOAKlPuTAjY
Z5bLswfkqTMO0cioJNwwMCNWSMJf3jbKi3eTQ36sf7TDMEneNGSBUpeSjGddoNT/
rrVIDDT8tGmtACKr+3Y0H+EA2K5IxdQKKfnPRR31RBWiTkEXBbaJzYO/ZV5/xlbN
wmblskwq9d9IwDY7qeMctci+ZUZ3epG8MUwYa4faOrgmmkQpa5B+6UOMzw/WDJEc
jTfvSzfPo4anoj8C+MOQYzRvYmp60YEZKomv2BQdBvpGIpUul8WAR2aV0K+wz66e
mUamljAXmLiPxgGKduX5VFVuXzYxeMiBBujQCLTjc+xTB2EdwihxNX1rkxz10BDc
WrgPV+/VVyThKhOvVCifWARHtT2VGcZazfQOW/y3ZmEPOYuc5ZvrSEiMeG3f64+v
UU8cQZ3yBLIhTtC+38pRlsdBQHt526q0j0rrnd30JXVAUdWBunP2UJ5QGtA8/mWn
cWSlvRf5sfbyrISz6+mLPM2qGHnCkKwORNxmv/1DY07O3Rn6hX0OY4ECAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "qnJmS6W7QSKG3mjW1kPnHGeVmKzhGkyP9xBLGwH5XvD";
};
};
};
dimitrios = {
owner = config.krebs.users.mic92;
nets = {
@ -111,37 +51,6 @@ in {
};
};
};
donna = {
owner = config.krebs.users.mic92;
nets = rec {
internet = {
ip4.addr = "129.215.165.54";
ip6.addr = "2001:630:3c1:164:30a2:6e7b:c58b:cafd";
aliases = [ "donna.i" ];
};
retiolum = {
via = internet;
ip4.addr = "10.243.29.180";
aliases = [ "donna.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAnv5zVPwjHk5Q72D3tv2rlQkp7SOsZD7Wvz8l1yI/mWkxoriJ9MVa
x8RziSB3KF8sF1lRWIKmuynkgLI3w0X/YFs/fAvtayxk6Qf8DOl23Vd8Is0h/i3I
0fCmCEIHhHboKsREW6NxY7w5WAI2+SFNmGef1P7vzrAv7iLyPbo9nQ8wlrAmc+PJ
Ao3BOf4U7kP778fhsPA4dlGtF2v9CBhygeGVI/DQR8jcvzeiPd2Dr0k/JvrVMYtf
wJW4xUwZkIpws/yfI8b4VJOFl2X/Yw9712Z8Jvga0rR32OG4YbnggvuCMum1g94k
YwMjaSckv1XTalvPQuf1Od96XzwL2hjPFpEK3Tdl4AitMnArgj9HNzhcRL+eGonf
U24zk52OToHnoP3palNpodi7DziIBeXIaIMl7VMXku2ymbOUJsI6zeew+uZahJkv
QIWjxveQ8N40BoTc8Yg6pea1AId3l4f3brtwJbQOVbb3bVQ5VcrxM9Q/TBvyADYR
Knwszxw3uBw5Za1FMbwCPwd8/y/Ar19qGCx25xK0QnsyqZZT/cHsbBOTzh6BBWwI
IzbYu49VO/B1rktYzZ2l2ENQy6OILXWbvFjC8Pt8f1ZZQ4A21PyNA1AdyJ/rbVj7
awm3OnnvKSvMCXWnwHPFHjksb3qMx96Aep1cw3ZBx0sQQ41UWBoOsi8CAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "ikUmx5IC1dvfaHFhpZM9xotwF2LH6EkvpcPTRm6TjeD";
};
};
};
herbert = {
owner = config.krebs.users.mic92;
nets = rec {
@ -497,37 +406,6 @@ in {
};
};
};
rose = {
owner = config.krebs.users.mic92;
nets = rec {
internet = {
ip4.addr = "129.215.165.52";
ip6.addr = "2001:630:3c1:164:6d4:c4ff:fe04:4e4b";
aliases = [ "rose.i" ];
};
retiolum = {
via = internet;
ip4.addr = "10.243.29.178";
aliases = [ "rose.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEA0h88uEcgVFhggGh3xqHySt8T+oDdoSN8ve4ZPmMzrGCD4dnlWcUO
6uMiwE7XG667wvjB0J2RbCJ8n8/r6eQgp6sRfPzSQL/Mc74J+py+sOVOjjjL5wJX
btrYmASO3GKUSMhGmM0IiwHMIPrmUViaREDrweF3bUwK45d/ocqpBkc+nF27kksd
DMYjHMWRIkKuQaj592zo/kY1pAJ/yAvDPess0x1CLL6uDNbjTr2S/L7JHdzZs9Xq
1+SGdVtqD0sWgSBKA0PC/Mi+Divd4PC1SoSL7wZRWD0Y2DNgj3+xUc7hAWRCw2Gs
5wofK+qiwnyYAmeNYcyQfDLosKZF9hOM8U3UbxptkPLsOK3cfZoGoLQCuOryVDBe
6GfJkJ49WfuSSNWs3WPWL6/6zmVPeGR0TvoMt02VQ3cKTmeIkWyTIzSVoC7wYv5D
Dl8Xt3aFr9UFI2GxenesViyuDLi8cy2fOsM3r+gowXQtgEKoXc9W2vyPwIIlcWUJ
QrKVsyNlkKKL0YjsnGazaEvqdiE30/Iq7f7VBnXnWXRLnZhr85HbTdDQnpT4GcEv
W3jpl1y5zShr5Hz90QoYcUTsxg9uk/+yqKpwUySZ6Gh4q0bo5k7nkM9i8mCMfNGZ
0UU94QmwS9RoV4Mt4pSLYRcCs0mVeEjLuIfTFHkXc6LCjBWMn8ICfeMCAwEAAQ==
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "0O1LrgXAFOuei1NfU0vow+qUfim3htBOyCJvPrQFwHE";
};
};
};
turingmachine = {
owner = config.krebs.users.mic92;
nets = rec {
@ -661,26 +539,6 @@ in {
};
};
};
doctor = {
owner = config.krebs.users.mic92;
nets = rec {
retiolum = {
ip4.addr = "10.243.29.186";
aliases = [ "doctor.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAx0zdjPX9C0fBQR+8kdlsBTuMr4KxWhqw4ARqW02oSGKJxY+D57oO
ORVfjBhrvIiZJfXaY0M+/n+M4Bvt4r5ol3N1NxkT7vc0bAbz9Kk/0M8dlspNoSO9
WW+mITVfxg/DgzDegjj4TOrsWC1jBjo4PVrvA+PnxZC4VucnqZZ55JHWAk/mPtzs
PUc3mkn3e9pwwrJMQRy7qg9fbatljHCb/fJoDk6DiQP4ZRE/pCf4OYCx7huHibsd
EMp7y5QJySmKwJ/XsS6yiHeYXLFwWvfReja/IRFL4RiDSW+6ES4PTEXxoLVDpqgv
KF44qim4UBabCMTPVtZcU3Rr+ufBALKJCwIDAQAB
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "PmZ8i6lB0Ij/d8qjA0y3QI2rMAlrTZn1ES/hUSNNWMP";
};
};
};
bernie = {
owner = config.krebs.users.mic92;
nets = rec {
@ -1048,6 +906,27 @@ in {
};
};
};
blob64 = {
owner = config.krebs.users.mic92;
nets = rec {
retiolum = {
aliases = [ "blob64.r" ];
tinc.pubkey = ''
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsl8LfS/l8zhkF9wqUTXndGZovIdIeZXeH/AZ3VopHn2yMn7HN3sy
sM+p0ypXgV02h8faWgQsKzbhZI1XNl8vK5jo0snb9wO0qTiIViSeVfcGJN3rMvsW
FmgcoVX7Juf3RD+oHbBc9CM7+vRbk6aIKyr3zRbGF1Ge9x/N2HSqjhYYKZ74JzJf
kTbN/t05gvzYcQCa6ueR1K+jysALC2SCbRNXMLDQtgMc9Jv+oPJfxxCxZUJR2/M6
E/+sfbJ+oOl/EviXzM/HH14sOeO1v1xbw0ih75BWAOC1zvrIPg/Cr3y+RmDsK53K
eWa+2bvT7quaBLsVh9N51RSORUlXKdd2lwIDAQAB
-----END RSA PUBLIC KEY-----
'';
tinc.pubkey_ed25519 = "m6YO0REcHjSORwOJCUBLciavYTNewcbxdt2TJnGz9xE";
};
};
};
hal9000 = {
owner = config.krebs.users.mic92;
nets = rec {

View File

@ -164,15 +164,26 @@ in {
extraZones = {
"krebsco.de" = ''
ni 60 IN A ${config.krebs.hosts.ni.nets.internet.ip4.addr}
ni 60 IN AAAA ${config.krebs.hosts.ni.nets.internet.ip6.addr}
cgit 60 IN A ${config.krebs.hosts.ni.nets.internet.ip4.addr}
cgit 60 IN AAAA ${config.krebs.hosts.ni.nets.internet.ip6.addr}
cgit.ni 60 IN A ${config.krebs.hosts.ni.nets.internet.ip4.addr}
cgit.ni 60 IN AAAA ${config.krebs.hosts.ni.nets.internet.ip6.addr}
krebsco.de. 60 IN MX 5 ni
krebsco.de. 60 IN TXT v=spf1 mx -all
tv 300 IN NS ni
'';
};
nets = {
internet = {
ip4.addr = "188.68.36.196";
ip4 = rec {
addr = "188.68.36.196";
prefix = "${addr}/32";
};
ip6 = rec {
addr = "2a03:4000:13:4c::1";
prefix = "${addr}/64";
};
aliases = [
"ni.i"
"cgit.ni.i"

View File

@ -1,22 +1,103 @@
with import <stockholm/lib>;
{ config, ... }: {
{ config, pkgs, ... }: {
config = {
# Implements environment.etc."zones/<zone-name>"
environment.etc = let
stripEmptyLines = s: (concatStringsSep "\n"
(remove "\n" (remove "" (splitString "\n" s)))) + "\n";
all-zones = foldAttrs (sum: current: sum + "\n" +current ) ""
([config.krebs.zone-head-config] ++ combined-hosts);
combined-hosts =
mapAttrsToList (name: getAttr "extraZones") config.krebs.hosts;
in
environment.etc =
mapAttrs'
(name: value: {
(name: pkg: {
name = "zones/${name}";
value.text = stripEmptyLines value;
value.source = pkg;
})
all-zones;
pkgs.krebs.zones;
nixpkgs.overlays = [
# Explicit zones generated from config.krebs.hosts.*.extraZones
(self: super: let
stripEmptyLines = s: (concatStringsSep "\n"
(remove "\n" (remove "" (splitString "\n" s)))) + "\n";
all-zones = foldAttrs (sum: current: sum + "\n" + current) ""
([config.krebs.zone-head-config] ++ combined-hosts);
combined-hosts =
mapAttrsToList (name: getAttr "extraZones") config.krebs.hosts;
in {
krebs = super.krebs or {} // {
zones = super.krebs.zones or {} //
mapAttrs'
(name: value: {
name = name;
value = self.writeText "${name}.zone" (stripEmptyLines value);
})
all-zones;
};
})
# Implicit zones generated from config.krebs.hosts.*.nets.*.ip{4,6}.addr
(self: super: let
# record : { name : str, type : enum [ "A" "AAAA" ], data : str }
# toRecord : record.name -> record.type -> record.data -> record
toRecord = name: type: data:
{ inherit name type data; };
# toRecords : str -> host -> [record]
toRecords = netname: host:
let
net = host.nets.${netname};
in
optionals
(hasAttr netname host.nets)
(filter
(x: x.data != null)
(concatLists [
(map
(name: toRecord name "A" (net.ip4.addr or null))
(concatMap
(name: [ "${name}." "4.${name}." ])
(net.aliases or [])))
(map
(name: toRecord name "AAAA" (net.ip6.addr or null))
(concatMap
(name: [ "${name}." "6.${name}." ])
(net.aliases or [])))
]));
# formatRecord : record -> str
formatRecord = { name, type, data }: "${name} IN ${type} ${data}";
# writeZone : attrs -> package
writeZone =
{ name ? "${domain}.zone"
, domain ? substring 0 1 netname
, nameservers ? [ "ni" ]
, netname
, hosts ? config.krebs.hosts
}:
self.writeText name /* bindzone */ ''
$TTL 60
@ IN SOA ns admin 1 3600 600 86400 60
@ IN NS ns
${concatMapStringsSep "\n"
(name: /* bindzone */ "ns IN CNAME ${name}")
nameservers
}
${concatMapStringsSep
"\n"
formatRecord
(concatMap
(toRecords netname)
(attrValues hosts))
}
'';
in {
krebs = super.krebs or {} // {
zones = super.krebs.zones or {} // {
i = writeZone { netname = "internet"; };
r = writeZone { netname = "retiolum"; };
w = writeZone { netname = "wiregrill"; };
};
};
})
];
};
}

View File

@ -8,11 +8,13 @@ in
haskell = super.haskell // {
packages = mapAttrs (name: value:
if hasAttr "override" value
then value.override { inherit overrides; }
then value.override (old: {
overrides = composeExtensions (old.overrides or (_: _: {})) overrides;
})
else value
) super.haskell.packages;
};
haskellPackages = super.haskellPackages.override {
inherit overrides;
};
haskellPackages = super.haskellPackages.override (old: {
overrides = composeExtensions (old.overrides or (_: _: {})) overrides;
});
}

View File

@ -1,14 +1,14 @@
{ mkDerivation, aeson, aeson-pretty, base, bytestring
, case-insensitive, fetchgit, lens, optparse-applicative
, purebred-email, lib, text, vector, word8
, case-insensitive, fetchgit, lens, lib, optparse-applicative
, purebred-email, text, vector, word8
}:
mkDerivation {
pname = "mailaids";
version = "1.0.0";
version = "1.1.0";
src = fetchgit {
url = "https://cgit.krebsco.de/mailaids";
sha256 = "15h0k82czm89gkwhp1rwdy77jz8dmb626qdz7c2narvz9j7169v5";
rev = "8f11927ea74d6adb332c884502ebd9c486837523";
sha256 = "0mkq3b0j28h7ydg6aaqlqnvajb8nhdc9g7rmil2d4vl5fxxaqspv";
rev = "a25fc32eceefc10a91ef77ff2763b3f1b9324aaf";
fetchSubmodules = true;
};
isLibrary = false;

View File

@ -0,0 +1,30 @@
{ mkDerivation, async, base, base16, base32, bytestring, charset
, fetchgit, http-client, http-types, lib, managed, megaparsec, mtl
, network, nix, optparse-applicative, tasty-bench, temporary, text
, turtle, vector, wai, wai-extra, warp, warp-tls
, boost
}:
mkDerivation {
pname = "nix-serve-ng";
version = "1.0.0";
src = fetchgit {
url = "https://github.com/aristanetworks/nix-serve-ng";
sha256 = "0mqp67z5mi8rsjahdh395n7ppf0b65k8rd3pvnl281g02rbr69y2";
rev = "433f70f4daae156b84853f5aaa11987aa5ce7277";
fetchSubmodules = true;
};
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
base base16 base32 bytestring charset http-types managed megaparsec
mtl network optparse-applicative vector wai wai-extra warp warp-tls
];
executablePkgconfigDepends = [ nix ];
executableSystemDepends = [ boost.dev ];
benchmarkHaskellDepends = [
async base bytestring http-client tasty-bench temporary text turtle
vector
];
description = "A drop-in replacement for nix-serve that's faster and more stable";
license = lib.licenses.bsd3;
}

View File

@ -1,31 +1,27 @@
{ mkDerivation, attoparsec, base, base64-bytestring, bytestring
, case-insensitive, concise, deepseq, fetchgit, hedgehog, lens, lib
, QuickCheck, quickcheck-instances, semigroupoids, semigroups
, QuickCheck, quickcheck-instances, random, semigroupoids
, stringsearch, tasty, tasty-golden, tasty-hedgehog, tasty-hunit
, tasty-quickcheck, text, time
}:
mkDerivation {
pname = "purebred-email";
version = "0.4.3";
version = "0.5.1";
src = fetchgit {
url = "https://github.com/purebred-mua/purebred-email";
sha256 = "06xhccavrdzfsvg65mzdnp0a7b1ilk2rqpnyvkr171ir6mqdpb19";
rev = "769b360643f699c0a8cd6f1c3a3de36cf0479834";
sha256 = "0iilyy5dkbzbiazyyfjdz585c3x8b7c2piynmycm7krkc48993vw";
rev = "7ba346e10ad1521a923bc04a4ffeca479d8dd071";
fetchSubmodules = true;
};
patches = [
./untweak-mime-version-header.patch
];
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
attoparsec base base64-bytestring bytestring case-insensitive
concise deepseq lens semigroupoids semigroups stringsearch text
time
concise deepseq lens random semigroupoids stringsearch text time
];
testHaskellDepends = [
attoparsec base bytestring case-insensitive hedgehog lens
QuickCheck quickcheck-instances semigroups tasty tasty-golden
QuickCheck quickcheck-instances random tasty tasty-golden
tasty-hedgehog tasty-hunit tasty-quickcheck text time
];
homepage = "https://github.com/purebred-mua/purebred-email";

View File

@ -0,0 +1,109 @@
{ pkgs }:
pkgs.write "certaids" {
"/bin/cert2json".link = pkgs.writeDash "cert2json" ''
# usage: cert2json < CERT > JSON
set -efu
${pkgs.openssl}/bin/openssl crl2pkcs7 -nocrl -certfile /dev/stdin |
${pkgs.openssl}/bin/openssl pkcs7 -print_certs -text |
${pkgs.gawk}/bin/awk -F, -f ${pkgs.writeText "cert2json.awk" ''
function abort(msg) {
print(msg) > "/dev/stderr"
exit 1
}
function toJSON(x, type, ret) {
type = typeof(x)
switch (type) {
case "array":
if (isArray(x)) return arrayToJSON(x)
if (isObject(x)) return objectToJSON(x)
abort("cannot render array to JSON", x)
case "number":
return numberToJSON(x)
case "string":
return stringToJSON(x)
case "strnum":
case "unassigned":
case "regexp":
case "untyped":
default:
abort("cannot render type: " type)
}
}
function isArray(x, i, k) {
i = 1
for (k in x) {
if (k != i++) return 0
i++
}
return 1
}
function isObject(x, k) {
for (k in x) {
if (typeof(k) != "string") return 0
}
return 1
}
function arrayToJSON(x, k, ret) {
ret = "["
for (k in x) {
ret=ret toJSON(x[k]) ","
}
sub(/,$/,"",ret)
ret=ret "]"
return ret
}
function objectToJSON(x, k,ret) {
ret = "{"
for (k in x) {
ret = ret toJSON(k) ":" toJSON(x[k]) ","
}
sub(/,$/, "", ret)
ret = ret "}"
return ret
}
function numberToJSON(x) {
return x
}
function stringToJSON(x) {
gsub(/\\/, "&&",x)
gsub(/\n/, "\\n", x)
return "\"" x "\""
}
$1 ~ /^ *(Subject|Issuer):/ {
sub(/^ */, "")
sub(/: */, ",")
key=tolower($1)
sub(/[^,]*,/, "")
# Normalize separators between relative distinguished names.
# [1]: RFC2253, 3. Parsing a String back to a Distinguished Name
# TODO support any distinguished name
gsub(/ *[;,] */, ",")
for(i = 0; i <= NF; i++) {
split($i, a, "=")
cache[key][a[1]] = a[2]
}
}
/BEGIN CERTIFICATE/,/END CERTIFICATE/{
cache["certificate"] = cache["certificate"] $0 "\n"
}
/END CERTIFICATE/{
print toJSON(cache)
delete cache
}
''}
'';
}

View File

@ -1,9 +1,9 @@
{
"url": "https://github.com/NixOS/nixpkgs",
"rev": "f034b5693a26625f56068af983ed7727a60b5f8b",
"date": "2022-08-24T10:06:14+02:00",
"path": "/nix/store/8rr2y7lwwm09a5cvr26a2yc019b13zxb-nixpkgs",
"sha256": "05x3bjz1af4liwsgha3r85kqa60j22vldp8g0p7nr51zz6jjwqqq",
"rev": "c97e777ff06fcb8d37dcdf5e21e9eff1f34f0e90",
"date": "2022-09-11T12:47:08-03:00",
"path": "/nix/store/ixhh3xyag61ps64dgbclgkz80hgv36qv-nixpkgs",
"sha256": "1h4g8hf7zi6an5j2lnwf7kbmmbrwp6hhqdf87gd14y24d43sp4x0",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,

View File

@ -1,9 +1,9 @@
{
"url": "https://github.com/NixOS/nixpkgs",
"rev": "e732e1fdbf79bec59f7ade4a3675b091b4a9f6d6",
"date": "2022-07-19T15:32:15+02:00",
"path": "/nix/store/4dcxnk4xplx79xrwxg2m6pqh8b5k6ya0-nixpkgs",
"sha256": "1j73j17g852zfc75b7ll4avp30pnyvm37pgm66cz844phkv5ywfg",
"rev": "bf014cad818ecd1b28e68c1e7138fb988f504fdc",
"date": "2022-09-12T09:29:23+02:00",
"path": "/nix/store/cpp120bajfgdb8sb1nmm316pav16cjk4-nixpkgs",
"sha256": "0xdf1xclck8j8zxlnhkjgci4a4405rh9n6wx9c3vmk0dvb31lvi9",
"fetchLFS": false,
"fetchSubmodules": false,
"deepClone": false,

View File

@ -10,6 +10,7 @@ with import <stockholm/lib>;
<stockholm/lass/2configs/git.nix>
<stockholm/lass/2configs/exim-retiolum.nix>
<stockholm/lass/2configs/baseX.nix>
<stockholm/lass/2configs/pipewire.nix>
<stockholm/lass/2configs/browsers.nix>
<stockholm/lass/2configs/programs.nix>
<stockholm/lass/2configs/fetchWallpaper.nix>
@ -21,6 +22,7 @@ with import <stockholm/lib>;
#<stockholm/lass/2configs/prism-share.nix>
<stockholm/lass/2configs/network-manager.nix>
<stockholm/lass/2configs/home-media.nix>
<stockholm/lass/2configs/snapclient.nix>
];
krebs.build.host = config.krebs.hosts.icarus;

View File

@ -8,6 +8,7 @@ with import <stockholm/lib>;
<stockholm/lass/2configs/mouse.nix>
<stockholm/lass/2configs/retiolum.nix>
<stockholm/lass/2configs/baseX.nix>
<stockholm/lass/2configs/pipewire.nix>
<stockholm/lass/2configs/exim-retiolum.nix>
<stockholm/lass/2configs/browsers.nix>
<stockholm/lass/2configs/programs.nix>
@ -21,6 +22,7 @@ with import <stockholm/lib>;
<stockholm/lass/2configs/home-media.nix>
<stockholm/lass/2configs/syncthing.nix>
<stockholm/lass/2configs/sync/sync.nix>
<stockholm/lass/2configs/snapclient.nix>
];
krebs.build.host = config.krebs.hosts.shodan;

View File

@ -8,6 +8,7 @@ with import <stockholm/lib>;
<stockholm/lass/2configs/mouse.nix>
<stockholm/lass/2configs/retiolum.nix>
<stockholm/lass/2configs/baseX.nix>
<stockholm/lass/2configs/pipewire.nix>
<stockholm/lass/2configs/exim-retiolum.nix>
<stockholm/lass/2configs/browsers.nix>
<stockholm/lass/2configs/programs.nix>
@ -23,6 +24,8 @@ with import <stockholm/lib>;
<stockholm/lass/2configs/sync/sync.nix>
# <stockholm/lass/2configs/idc.nix>
<stockholm/lass/2configs/ppp/umts-stick.nix>
<stockholm/lass/2configs/snapserver.nix>
<stockholm/lass/2configs/snapclient.nix>
];
krebs.build.host = config.krebs.hosts.styx;

View File

@ -1,6 +1,8 @@
{ config, lib, pkgs, stockholm, ...}:
{ config, lib, pkgs, ...}:
{
nixpkgs.config.packageOverrides = p: {
nix-serve = p.haskellPackages.nix-serve-ng;
};
# generate private key with:
# nix-store --generate-binary-cache-key my-secret-key my-public-key
services.nix-serve = {

View File

@ -70,10 +70,10 @@ in {
# steam-run
# scummvm
# dolphinEmu
# doom1
# doom2
doom1
doom2
# protontricks
# vdoom1
vdoom1
# vdoom2
# vdoomserver
retroarchBare

View File

@ -20,4 +20,15 @@ with import <stockholm/lib>;
krebs.iptables.tables.filter.INPUT.rules = [
{ predicate = "-p tcp --dport 4713"; target = "ACCEPT"; } # pulseaudio
];
environment.systemPackages = [
(pkgs.writers.writeDashBin "snapmpv" ''
/run/current-system/sw/bin/mpv \
--audio-display=no --audio-channels=stereo \
--audio-samplerate=48000 --audio-format=s16 \
--ao-pcm-file=/run/snapserver/snapfifo --ao=pcm \
--audio-delay=-1 \
"$@"
'')
];
}

View File

@ -61,6 +61,11 @@ with import <stockholm/lib>;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.paste.port};
'';
locations."/form".extraConfig = ''
client_max_body_size 4G;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.paste-form.port};
'';
locations."/image".extraConfig = ''
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -86,6 +91,43 @@ with import <stockholm/lib>;
". ${pkgs.htgen}/examples/paste"
];
};
systemd.services.paste-gc = {
startAt = "daily";
serviceConfig = {
ExecStart = ''
${pkgs.findutils}/bin/find /var/lib/htgen-paste/items -type f -mtime '+30' -exec rm {} \;
'';
User = "htgen-paste";
};
};
krebs.htgen.paste-form = {
port = 7770;
script = /* sh */ ''
export PATH=${makeBinPath [
pkgs.curl
pkgs.gnused
]}:$PATH
(. ${pkgs.writeScript "paste-form" ''
case "$Method" in
'POST')
ref=$(head -c $req_content_length | sed '0,/^\r$/d;$d' | curl -fSs --data-binary @- https://p.krebsco.de | sed '1d;s/^http:/https:/')
printf 'HTTP/1.1 200 OK\r\n'
printf 'Content-Type: text/plain; charset=UTF-8\r\n'
printf 'Server: %s\r\n' "$Server"
printf 'Connection: close\r\n'
printf 'Content-Length: %d\r\n' $(expr ''${#ref} + 1)
printf '\r\n'
printf '%s\n' "$ref"
exit
;;
esac
''})
'';
};
krebs.htgen.imgur = {
port = 7771;
script = /* sh */ ''

View File

@ -0,0 +1,12 @@
{ config, lib, pkgs, ... }:
{
systemd.services.snapclient = {
wantedBy = [ "multi-user.target" ];
path = [ pkgs.snapcast ];
script = "snapclient -h 10.42.0.1";
serviceConfig = {
DynamicUser = true;
Group = "pipewire";
};
};
}

View File

@ -0,0 +1,13 @@
{ config, lib, pkgs, ... }:
{
services.snapserver = {
enable = true;
openFirewall = true;
streams = {
pipewire = {
type = "pipe";
location = "/run/snapserver/snapfifo";
};
};
};
}

@ -1 +1 @@
Subproject commit 3aa04be96f19cc5f4866b2b36a351f88f6667bd2
Subproject commit 3ebbfc62615d4ba253a4dd96bac0f4b2128a2b6d

View File

@ -69,13 +69,12 @@ with import <stockholm/lib>;
enable = true;
twoFingerScroll = true;
};
desktopManager.xfce.enable = true;
displayManager.lightdm.autoLogin.enable = true;
displayManager.lightdm.autoLogin.user = "dv";
displayManager.lightdm.enable = true;
};
services.xserver.desktopManager.plasma5.enable = true;
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "dv";
system.stateVersion = "22.05";
users.users.dv = {
inherit (config.krebs.users.dv) home uid;

View File

@ -6,7 +6,7 @@ with import <stockholm/lib>;
programs.bash = {
interactiveShellInit = /* sh */ ''
HISTCONTROL='erasedups:ignorespace'
HISTSIZE=65536
HISTSIZE=900001
HISTFILESIZE=$HISTSIZE
HISTTIMEFORMAT=

View File

@ -3,24 +3,15 @@
environment.etc."binary-cache.pubkey".text =
config.krebs.build.host.binary-cache.pubkey;
nixpkgs.overlays = [
(self: super: {
nix-serve = self.haskellPackages.nix-serve-ng;
})
];
services.nix-serve = {
enable = true;
secretKeyFile = config.krebs.secret.files.binary-cache-seckey.path;
};
systemd.services.nix-serve = {
after = [
config.krebs.secret.files.binary-cache-seckey.service
];
partOf = [
config.krebs.secret.files.binary-cache-seckey.service
];
};
krebs.secret.files.binary-cache-seckey = {
path = "/run/secret/nix-serve.key";
owner.name = "nix-serve";
source-path = toString <secrets> + "/nix-serve.key";
secretKeyFile = toString <secrets> + "/nix-serve.key";
};
services.nginx = {
@ -28,6 +19,7 @@
virtualHosts.nix-serve = {
serverAliases = [
"cache.${config.krebs.build.host.name}.hkw"
"cache.${config.krebs.build.host.name}.r"
];
locations."/".extraConfig = ''
proxy_pass http://localhost:${toString config.services.nix-serve.port};

View File

@ -109,7 +109,6 @@ let {
};
q = {};
reaktor2 = {};
regfish = {};
stockholm = {
cgit.desc = "NixOS configuration";
};
@ -156,6 +155,7 @@ let {
painload = {};
push = {};
Reaktor = {};
regfish = {};
with-tmpdir = {};
get = {};
load-env = {};

View File

@ -4,22 +4,19 @@ with import <stockholm/lib>;
{
services.nginx = {
enableReload = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedTlsSettings = true;
virtualHosts._http = {
virtualHosts.${toJSON ""} = {
default = true;
extraConfig = ''
return 404;
'';
};
virtualHosts.default = {
locations."= /etc/os-release".extraConfig = ''
default_type text/plain;
alias /etc/os-release;
error_page 400 =444 /;
return 444;
'';
rejectSSL = true;
};
};
tv.iptables = {

View File

@ -71,7 +71,7 @@ in {
export PATH=${lib.makeSearchPath "bin" [
pkgs.tmux
pkgs.gnugrep
pkgs.weechat
pkgs.weechat-tv
]}
if tmux list-sessions -F\#S | grep -q '^im''$'; then
exec tmux attach -t im

View File

@ -10,11 +10,15 @@ in
haskell = super.haskell // {
packages = mapAttrs (name: value:
if hasAttr "override" value
then value.override { inherit overrides; }
then value.override (old: {
overrides =
composeExtensions (old.overrides or (_: _: { })) overrides;
})
else value
) super.haskell.packages;
};
haskellPackages = super.haskellPackages.override {
inherit overrides;
};
haskellPackages = super.haskellPackages.override (old: {
overrides =
composeExtensions (old.overrides or (_: _: { })) overrides;
});
}

21
tv/5pkgs/override/jc.nix Normal file
View File

@ -0,0 +1,21 @@
self: super:
let
version = "1.21.0";
in
# Prevent downgrades.
assert self.lib.versionAtLeast version super.jc.version;
self.python3.pkgs.toPythonApplication
(self.python3.pkgs.jc.overrideAttrs
(oldAttrs: {
name = "jc-${version}";
version = version;
src = self.fetchFromGitHub {
owner = "kellyjonbrazil";
repo = "jc";
rev = "v${version}";
sha256 = "sha256-kS42WokR7ZIqIPi8LbX4tmtjn37tckea2ELbuqzTm2o";
};
}))

View File

@ -0,0 +1,9 @@
{ lib, pkgs }:
pkgs.wrapWeechat pkgs.weechat-unwrapped {
configure = { availablePlugins, ... }: {
scripts = [
pkgs.weechatScripts.weechat-matrix
];
};
}