Merge remote-tracking branch 'ni/master'
This commit is contained in:
commit
591c8be9d0
@ -71,7 +71,7 @@ let
|
|||||||
description = "URL to watch.";
|
description = "URL to watch.";
|
||||||
example = [
|
example = [
|
||||||
https://nixos.org/channels/nixos-unstable/git-revision
|
https://nixos.org/channels/nixos-unstable/git-revision
|
||||||
{ url = http://localhost ; filter = "grep:important.*stuff"; }
|
{ url = http://localhost ; filter = [ (grep "important.*stuff") ]; }
|
||||||
];
|
];
|
||||||
apply = map (x: getAttr (typeOf x) {
|
apply = map (x: getAttr (typeOf x) {
|
||||||
set = x;
|
set = x;
|
||||||
@ -177,12 +177,15 @@ let
|
|||||||
echo Date: $(date -R)
|
echo Date: $(date -R)
|
||||||
echo From: ${shell.escape cfg.from}
|
echo From: ${shell.escape cfg.from}
|
||||||
echo Subject: $(
|
echo Subject: $(
|
||||||
sed -n 's/^\(CHANGED\|ERROR\|NEW\): //p' changes \
|
sed -nr 's/^(CHANGED|ERROR|NEW): //p' changes |
|
||||||
| tr '\n' ' '
|
sed '1!s/^ //'
|
||||||
)
|
)
|
||||||
echo To: ${shell.escape cfg.mailto}
|
echo To: ${shell.escape cfg.mailto}
|
||||||
|
echo Mime-Version: 1.0
|
||||||
|
echo Content-Type: text/plain\; charset=UTF-8
|
||||||
|
echo Content-Transfer-Encoding: base64
|
||||||
echo
|
echo
|
||||||
cat changes
|
base64 changes
|
||||||
} | /run/wrappers/bin/sendmail -t
|
} | /run/wrappers/bin/sendmail -t
|
||||||
fi
|
fi
|
||||||
''}
|
''}
|
||||||
@ -211,7 +214,9 @@ let
|
|||||||
};
|
};
|
||||||
filter = mkOption {
|
filter = mkOption {
|
||||||
default = null;
|
default = null;
|
||||||
type = with types; nullOr str; # TODO nullOr subtypes.filter
|
type =
|
||||||
|
with types;
|
||||||
|
nullOr (either str (listOf (pkgs.formats.json {}).type));
|
||||||
};
|
};
|
||||||
ignore_cached = mkOption {
|
ignore_cached = mkOption {
|
||||||
default = null;
|
default = null;
|
||||||
|
107
krebs/5pkgs/simple/nixos-format-error.nix
Normal file
107
krebs/5pkgs/simple/nixos-format-error.nix
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeGawkBin "nixos-format-error" ''
|
||||||
|
# usage: nixos-rebuild ... 2>&1 | nixos-format-error
|
||||||
|
|
||||||
|
function out() {
|
||||||
|
print
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
IDLE = 0
|
||||||
|
ACTIVE = 1
|
||||||
|
PASSIVE = 2
|
||||||
|
ERROR = 3
|
||||||
|
|
||||||
|
start_state = IDLE
|
||||||
|
|
||||||
|
state = start_state
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
if (trace_count)
|
||||||
|
for (i = trace_count - 1; i >= 0; i--)
|
||||||
|
print trace[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
state == PASSIVE {
|
||||||
|
out()
|
||||||
|
}
|
||||||
|
|
||||||
|
state == IDLE {
|
||||||
|
if ($0 ~ /^building the system configuration\.\.\.
?$/) {
|
||||||
|
state = ACTIVE
|
||||||
|
}
|
||||||
|
out()
|
||||||
|
}
|
||||||
|
|
||||||
|
state == ACTIVE {
|
||||||
|
if ($1 ~ /(\[[0-9;]+m)?error:(\[[0-9;]m)?/) {
|
||||||
|
state = ERROR
|
||||||
|
sub(/^/,"\x1b[31;1m"); sub(/$/,"\x1b[m")
|
||||||
|
trace[trace_count++] = $0
|
||||||
|
|
||||||
|
"stty -F /dev/tty size" |& getline
|
||||||
|
COLUMNS = gensub(/.* ([0-9]+)$/, "\\1", "1")
|
||||||
|
|
||||||
|
next
|
||||||
|
}
|
||||||
|
if ($0 ~ /^these [0-9]+ derivations will be built:/) {
|
||||||
|
state = PASSIVE
|
||||||
|
}
|
||||||
|
if ($0 == "activating the configuration...") {
|
||||||
|
state = PASSIVE
|
||||||
|
}
|
||||||
|
out()
|
||||||
|
}
|
||||||
|
|
||||||
|
state == ERROR {
|
||||||
|
sub(/
$/, "")
|
||||||
|
gsub(/\[[0-9;]*m/, "")
|
||||||
|
|
||||||
|
if ($0 ~ /^\s*at /) {
|
||||||
|
location = gensub(/^\s*at (.*):$/,"\\1","1")
|
||||||
|
content = ""
|
||||||
|
lnumcol = gensub(/^.*:([0-9]+:[0-9]+)$/,"\\1","1",location)
|
||||||
|
lnum = gensub(/:.*/,"","1",lnumcol)
|
||||||
|
col = gensub(/.*:/,"","1",lnumcol)
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($1 == lnum "|") {
|
||||||
|
content = gensub(/^\s*[0-9]+\|(.*)/,"\\1","1")
|
||||||
|
|
||||||
|
location = sprintf("%50s", location)
|
||||||
|
|
||||||
|
preview_size = COLUMNS - length(location " ")
|
||||||
|
|
||||||
|
prefix = gensub(/^\s*/,"","1",substr(content, 1, col))
|
||||||
|
infix = gensub(/^([0-9a-zA-Z]+|.).*$/, "\\1", "1", substr(content, col + 1))
|
||||||
|
suffix = substr(content, col + length(infix) + 1)
|
||||||
|
|
||||||
|
if (length(prefix infix suffix) > preview_size) {
|
||||||
|
n = (preview_size - length(infix)) / 2 - length(" ")
|
||||||
|
prefix = substr(prefix, length(prefix) - n + 1)
|
||||||
|
if (prefix != "") { prefix = "…" prefix }
|
||||||
|
suffix = substr(suffix, 1, n)
|
||||||
|
if (suffix != "") { suffix = suffix "…" }
|
||||||
|
}
|
||||||
|
|
||||||
|
preview = \
|
||||||
|
"\x1b[38;5;244m" prefix "\x1b[m" \
|
||||||
|
"\x1b[38;5;230m" infix "\x1b[m" \
|
||||||
|
"\x1b[38;5;244m" suffix "\x1b[m"
|
||||||
|
|
||||||
|
trace[trace_count++] = location " " preview
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($0 == "") next
|
||||||
|
if ($0 ~ /^\s*… (from|while)/) next
|
||||||
|
if ($0 ~ /^\s*([0-9]*)\|/) next
|
||||||
|
|
||||||
|
trace[trace_count++] = $0
|
||||||
|
next
|
||||||
|
}
|
||||||
|
''
|
@ -1 +1 @@
|
|||||||
Subproject commit 0c8de150426476b5287cf2787bbd85263691a802
|
Subproject commit d1424777b5f2e12cbd80efd1b55335dcba7c32bd
|
@ -13,8 +13,6 @@ with import ./lib;
|
|||||||
|
|
||||||
krebs.build.host = config.krebs.hosts.bu;
|
krebs.build.host = config.krebs.hosts.bu;
|
||||||
|
|
||||||
networking.hostId = lib.mkDefault "00000000";
|
|
||||||
|
|
||||||
networking.wireless.enable = true;
|
networking.wireless.enable = true;
|
||||||
networking.useDHCP = false;
|
networking.useDHCP = false;
|
||||||
networking.interfaces.enp0s25.useDHCP = true;
|
networking.interfaces.enp0s25.useDHCP = true;
|
||||||
|
@ -6,6 +6,7 @@ with import ./lib;
|
|||||||
|
|
||||||
krebs.build.user = config.krebs.users.tv;
|
krebs.build.user = config.krebs.users.tv;
|
||||||
|
|
||||||
|
networking.hostId = mkDefault (hashToLength 8 config.networking.hostName);
|
||||||
networking.hostName = config.krebs.build.host.name;
|
networking.hostName = config.krebs.build.host.name;
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
@ -2,12 +2,16 @@ with import ./lib;
|
|||||||
{ config, pkgs, ... }: let
|
{ config, pkgs, ... }: let
|
||||||
exec = filename: args: url: {
|
exec = filename: args: url: {
|
||||||
inherit url;
|
inherit url;
|
||||||
filter = "system:${
|
filter = singleton {
|
||||||
concatMapStringsSep " " shell.escape ([filename] ++ toList args)
|
system =
|
||||||
}";
|
concatMapStringsSep " " shell.escape ([filename] ++ toList args);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
json = json' ["."];
|
json = json' ["."];
|
||||||
json' = exec "${pkgs.jq}/bin/jq";
|
json' = exec "${pkgs.jq}/bin/jq";
|
||||||
|
urigrep' = exec (pkgs.writeDash "urigrep" ''
|
||||||
|
${pkgs.urix}/bin/urix | ${pkgs.gnugrep}/bin/grep -E "$1"
|
||||||
|
'');
|
||||||
xml = xml' ["--format" "-"];
|
xml = xml' ["--format" "-"];
|
||||||
xml' = exec "${pkgs.libxml2}/bin/xmllint";
|
xml' = exec "${pkgs.libxml2}/bin/xmllint";
|
||||||
in {
|
in {
|
||||||
@ -68,22 +72,30 @@ in {
|
|||||||
https://raw.githubusercontent.com/NixOS/nixpkgs/master/nixos/modules/services/x11/xserver.nix
|
https://raw.githubusercontent.com/NixOS/nixpkgs/master/nixos/modules/services/x11/xserver.nix
|
||||||
|
|
||||||
https://www.rabbitmq.com/changelog.html
|
https://www.rabbitmq.com/changelog.html
|
||||||
|
|
||||||
|
(urigrep' ["software-resources"] https://semiconductor.samsung.com/consumer-storage/support/tools/)
|
||||||
];
|
];
|
||||||
hooksFile = toFile "hooks.py" ''
|
hooksFile = toFile "hooks.py" ''
|
||||||
import subprocess
|
import subprocess
|
||||||
import urlwatch
|
import urlwatch
|
||||||
|
|
||||||
class CaseFilter(urlwatch.filters.FilterBase):
|
class SystemFilter(urlwatch.filters.FilterBase):
|
||||||
"""Filter for piping data through an external process"""
|
"""Filter for piping data through an external process"""
|
||||||
|
|
||||||
__kind__ = 'system'
|
__kind__ = 'system'
|
||||||
|
|
||||||
|
__supported_subfilters__ = {
|
||||||
|
'command': 'shell command line to tranform data',
|
||||||
|
}
|
||||||
|
|
||||||
|
__default_subfilter__ = 'command'
|
||||||
|
|
||||||
def filter(self, data, subfilter=None):
|
def filter(self, data, subfilter=None):
|
||||||
if subfilter is None:
|
if 'command' not in subfilter:
|
||||||
raise ValueError('The system filter needs a command')
|
raise ValueError('{} filter needs a command'.format(self.__kind__))
|
||||||
|
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
subfilter,
|
subfilter['command'],
|
||||||
shell=True,
|
shell=True,
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
|
37
tv/2configs/wiregrill.nix
Normal file
37
tv/2configs/wiregrill.nix
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
with import ./lib;
|
||||||
|
{ config, pkgs, ... }: let
|
||||||
|
cfg = {
|
||||||
|
enable = cfg.net != null;
|
||||||
|
net = config.krebs.build.host.nets.wiregrill or null;
|
||||||
|
};
|
||||||
|
toCidrNotation = ip: "${ip.addr}/${toString ip.prefixLength}";
|
||||||
|
in
|
||||||
|
mkIf cfg.enable {
|
||||||
|
networking.wireguard.interfaces.wiregrill = {
|
||||||
|
ips =
|
||||||
|
optional (cfg.net.ip4 != null) cfg.net.ip4.addr ++
|
||||||
|
optional (cfg.net.ip6 != null) cfg.net.ip6.addr;
|
||||||
|
listenPort = 51820;
|
||||||
|
privateKeyFile = (toString <secrets>) + "/wiregrill.key";
|
||||||
|
allowedIPsAsRoutes = true;
|
||||||
|
peers = mapAttrsToList
|
||||||
|
(_: host: {
|
||||||
|
allowedIPs = host.nets.wiregrill.wireguard.subnets;
|
||||||
|
endpoint =
|
||||||
|
mkIf (host.nets.wiregrill.via != null) (host.nets.wiregrill.via.ip4.addr + ":${toString host.nets.wiregrill.wireguard.port}");
|
||||||
|
persistentKeepalive = mkIf (host.nets.wiregrill.via != null) 61;
|
||||||
|
publicKey =
|
||||||
|
replaceStrings ["\n"] [""] host.nets.wiregrill.wireguard.pubkey;
|
||||||
|
})
|
||||||
|
(filterAttrs (_: h: hasAttr "wiregrill" h.nets) config.krebs.hosts);
|
||||||
|
};
|
||||||
|
systemd.network.networks.wiregrill = {
|
||||||
|
matchConfig.Name = "wiregrill";
|
||||||
|
address =
|
||||||
|
optional (!isNull cfg.net.ip4) (toCidrNotation cfg.net.ip4) ++
|
||||||
|
optional (!isNull cfg.net.ip6) (toCidrNotation cfg.net.ip6);
|
||||||
|
};
|
||||||
|
tv.iptables.extra.filter.INPUT = [
|
||||||
|
"-p udp --dport ${toString cfg.net.wireguard.port} -j ACCEPT"
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user