Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2021-06-06 12:14:34 +00:00 committed by GitHub
commit 385224957b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 507 additions and 130 deletions

View File

@ -274,8 +274,29 @@ start_all()
</term> </term>
<listitem> <listitem>
<para> <para>
Execute a shell command, raising an exception if the exit status is not Execute a shell command, raising an exception if the exit status
zero, otherwise returning the standard output. is not zero, otherwise returning the standard output. Commands
are run with <literal>set -euo pipefail</literal> set:
<itemizedlist>
<listitem>
<para>
If several commands are separated by <literal>;</literal>
and one fails, the command as a whole will fail.
</para>
</listitem>
<listitem>
<para>
For pipelines, the last non-zero exit status will be
returned (if there is one, zero will be returned
otherwise).
</para>
</listitem>
<listitem>
<para>
Dereferencing unset variables fail the command.
</para>
</listitem>
</itemizedlist>
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -181,6 +181,15 @@
<para>GNOME desktop environment was upgraded to 40, see the release notes for <link xlink:href="https://help.gnome.org/misc/release-notes/40.0/">40.0</link> and <link xlink:href="https://help.gnome.org/misc/release-notes/3.38/">3.38</link>. The <code>gnome3</code> attribute set has been renamed to <code>gnome</code> and so have been the NixOS options.</para> <para>GNOME desktop environment was upgraded to 40, see the release notes for <link xlink:href="https://help.gnome.org/misc/release-notes/40.0/">40.0</link> and <link xlink:href="https://help.gnome.org/misc/release-notes/3.38/">3.38</link>. The <code>gnome3</code> attribute set has been renamed to <code>gnome</code> and so have been the NixOS options.</para>
</listitem> </listitem>
<listitem>
<para>
Enabling wireless networking now requires specifying at least one network
interface using <xref linkend="opt-networking.wireless.interfaces"/>.
This is to avoid a race condition with the card initialisation (see
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/101963">issue
#101963</link> for more information).
</para>
</listitem>
<listitem> <listitem>
<para> <para>
If you are using <option>services.udev.extraRules</option> to assign If you are using <option>services.udev.extraRules</option> to assign

View File

@ -441,7 +441,7 @@ class Machine:
def execute(self, command: str) -> Tuple[int, str]: def execute(self, command: str) -> Tuple[int, str]:
self.connect() self.connect()
out_command = "( {} ); echo '|!=EOF' $?\n".format(command) out_command = "( set -euo pipefail; {} ); echo '|!=EOF' $?\n".format(command)
self.shell.send(out_command.encode()) self.shell.send(out_command.encode())
output = "" output = ""

View File

@ -40,8 +40,7 @@ in {
default = []; default = [];
example = [ "wlan0" "wlan1" ]; example = [ "wlan0" "wlan1" ];
description = '' description = ''
The interfaces <command>wpa_supplicant</command> will use. If empty, it will The interfaces <command>wpa_supplicant</command> will use.
automatically use all wireless interfaces.
''; '';
}; };
@ -220,7 +219,14 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = flip mapAttrsToList cfg.networks (name: cfg: { assertions = [
{ assertion = cfg.interfaces != [];
message = ''
No network interfaces for wpa_supplicant have been configured.
Please, specify at least one using networking.wireless.interfaces.
'';
}
] ++ flip mapAttrsToList cfg.networks (name: cfg: {
assertion = with cfg; count (x: x != null) [ psk pskRaw auth ] <= 1; assertion = with cfg; count (x: x != null) [ psk pskRaw auth ] <= 1;
message = ''options networking.wireless."${name}".{psk,pskRaw,auth} are mutually exclusive''; message = ''options networking.wireless."${name}".{psk,pskRaw,auth} are mutually exclusive'';
}); });
@ -255,20 +261,7 @@ in {
then echo >&2 "<3>/etc/wpa_supplicant.conf present but ignored. Generated ${configFile} is used instead." then echo >&2 "<3>/etc/wpa_supplicant.conf present but ignored. Generated ${configFile} is used instead."
fi fi
iface_args="-s -u -D${cfg.driver} ${configStr}" iface_args="-s -u -D${cfg.driver} ${configStr}"
${if ifaces == [] then '' args="${concatMapStringsSep " -N " (i: "-i${i} $iface_args") ifaces}"
for i in $(cd /sys/class/net && echo *); do
DEVTYPE=
UEVENT_PATH=/sys/class/net/$i/uevent
if [ -e "$UEVENT_PATH" ]; then
source "$UEVENT_PATH"
if [ "$DEVTYPE" = "wlan" -o -e /sys/class/net/$i/wireless ]; then
args+="''${args:+ -N} -i$i $iface_args"
fi
fi
done
'' else ''
args="${concatMapStringsSep " -N " (i: "-i${i} $iface_args") ifaces}"
''}
exec wpa_supplicant $args exec wpa_supplicant $args
''; '';
}; };

View File

@ -36,7 +36,7 @@ import ./make-test-python.nix (
default.wait_for_unit("calibre-web.service") default.wait_for_unit("calibre-web.service")
default.wait_for_open_port(${toString defaultPort}) default.wait_for_open_port(${toString defaultPort})
default.succeed( default.succeed(
"curl --fail 'http://localhost:${toString defaultPort}/basicconfig' | grep -q 'Basic Configuration'" "curl --fail 'http://localhost:${toString defaultPort}/basicconfig' | grep 'Basic Configuration'"
) )
customized.succeed( customized.succeed(
@ -46,7 +46,7 @@ import ./make-test-python.nix (
customized.wait_for_unit("calibre-web.service") customized.wait_for_unit("calibre-web.service")
customized.wait_for_open_port(${toString port}) customized.wait_for_open_port(${toString port})
customized.succeed( customized.succeed(
"curl --fail -H X-User:admin 'http://localhost:${toString port}' | grep -q test-book" "curl --fail -H X-User:admin 'http://localhost:${toString port}' | grep test-book"
) )
''; '';
} }

View File

@ -23,15 +23,15 @@ import ./make-test-python.nix ({ pkgs, ... }: {
with subtest("includeStorePath"): with subtest("includeStorePath"):
with subtest("assumption"): with subtest("assumption"):
docker.succeed("${examples.helloOnRoot} | docker load") docker.succeed("${examples.helloOnRoot} | docker load")
docker.succeed("set -euo pipefail; docker run --rm hello | grep -i hello") docker.succeed("docker run --rm hello | grep -i hello")
docker.succeed("docker image rm hello:latest") docker.succeed("docker image rm hello:latest")
with subtest("includeStorePath = false; breaks example"): with subtest("includeStorePath = false; breaks example"):
docker.succeed("${examples.helloOnRootNoStore} | docker load") docker.succeed("${examples.helloOnRootNoStore} | docker load")
docker.fail("set -euo pipefail; docker run --rm hello | grep -i hello") docker.fail("docker run --rm hello | grep -i hello")
docker.succeed("docker image rm hello:latest") docker.succeed("docker image rm hello:latest")
with subtest("includeStorePath = false; works with mounted store"): with subtest("includeStorePath = false; works with mounted store"):
docker.succeed("${examples.helloOnRootNoStore} | docker load") docker.succeed("${examples.helloOnRootNoStore} | docker load")
docker.succeed("set -euo pipefail; docker run --rm --volume ${builtins.storeDir}:${builtins.storeDir}:ro hello | grep -i hello") docker.succeed("docker run --rm --volume ${builtins.storeDir}:${builtins.storeDir}:ro hello | grep -i hello")
docker.succeed("docker image rm hello:latest") docker.succeed("docker image rm hello:latest")
with subtest("Ensure Docker images use a stable date by default"): with subtest("Ensure Docker images use a stable date by default"):

View File

@ -38,6 +38,6 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: {
machine.wait_for_unit("doh-proxy-rust.service") machine.wait_for_unit("doh-proxy-rust.service")
machine.wait_for_open_port(53) machine.wait_for_open_port(53)
machine.wait_for_open_port(3000) machine.wait_for_open_port(3000)
machine.succeed(f"curl --fail '{url}?dns={query}' | grep -qF {bin_ip}") machine.succeed(f"curl --fail '{url}?dns={query}' | grep -F {bin_ip}")
''; '';
}) })

View File

@ -178,7 +178,7 @@ let
one.systemctl("stop logstash") one.systemctl("stop logstash")
one.systemctl("start elasticsearch-curator") one.systemctl("start elasticsearch-curator")
one.wait_until_succeeds( one.wait_until_succeeds(
'! curl --silent --show-error "${esUrl}/_cat/indices" | grep logstash | grep -q ^' '! curl --silent --show-error "${esUrl}/_cat/indices" | grep logstash | grep ^'
) )
''; '';
}) {}; }) {};

View File

@ -102,7 +102,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
# `doSetup` is is true. # `doSetup` is is true.
test = doSetup: '' test = doSetup: ''
gitlab.succeed( gitlab.succeed(
"curl -isSf http://gitlab | grep -i location | grep -q http://gitlab/users/sign_in" "curl -isSf http://gitlab | grep -i location | grep http://gitlab/users/sign_in"
) )
gitlab.succeed( gitlab.succeed(
"${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2" "${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"

View File

@ -42,7 +42,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
"curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].uuid" "curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].uuid"
) )
agent.succeed( agent.succeed(
"curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].agent_state | grep -q Idle" "curl ${serverUrl} -H '${header}' | ${pkgs.jq}/bin/jq -e ._embedded.agents[0].agent_state | grep Idle"
) )
''; '';
}) })

View File

@ -74,7 +74,7 @@ in {
declarativePlugins.wait_for_unit("grafana.service") declarativePlugins.wait_for_unit("grafana.service")
declarativePlugins.wait_for_open_port(3000) declarativePlugins.wait_for_open_port(3000)
declarativePlugins.succeed( declarativePlugins.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep -q grafana-clock-panel" "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
) )
declarativePlugins.shutdown() declarativePlugins.shutdown()
@ -82,7 +82,7 @@ in {
sqlite.wait_for_unit("grafana.service") sqlite.wait_for_unit("grafana.service")
sqlite.wait_for_open_port(3000) sqlite.wait_for_open_port(3000)
sqlite.succeed( sqlite.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep -q testadmin\@localhost" "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
) )
sqlite.shutdown() sqlite.shutdown()
@ -92,7 +92,7 @@ in {
postgresql.wait_for_open_port(3000) postgresql.wait_for_open_port(3000)
postgresql.wait_for_open_port(5432) postgresql.wait_for_open_port(5432)
postgresql.succeed( postgresql.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep -q testadmin\@localhost" "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
) )
postgresql.shutdown() postgresql.shutdown()
@ -102,7 +102,7 @@ in {
mysql.wait_for_open_port(3000) mysql.wait_for_open_port(3000)
mysql.wait_for_open_port(3306) mysql.wait_for_open_port(3306)
mysql.succeed( mysql.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep -q testadmin\@localhost" "curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep testadmin\@localhost"
) )
mysql.shutdown() mysql.shutdown()
''; '';

View File

@ -48,23 +48,23 @@ with lib;
default.wait_for_unit("miniflux.service") default.wait_for_unit("miniflux.service")
default.wait_for_open_port(${toString defaultPort}) default.wait_for_open_port(${toString defaultPort})
default.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK") default.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep OK")
default.succeed( default.succeed(
"curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'" "curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep '\"is_admin\":true'"
) )
withoutSudo.wait_for_unit("miniflux.service") withoutSudo.wait_for_unit("miniflux.service")
withoutSudo.wait_for_open_port(${toString defaultPort}) withoutSudo.wait_for_open_port(${toString defaultPort})
withoutSudo.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK") withoutSudo.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep OK")
withoutSudo.succeed( withoutSudo.succeed(
"curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'" "curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep '\"is_admin\":true'"
) )
customized.wait_for_unit("miniflux.service") customized.wait_for_unit("miniflux.service")
customized.wait_for_open_port(${toString port}) customized.wait_for_open_port(${toString port})
customized.succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep -q OK") customized.succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep OK")
customized.succeed( customized.succeed(
"curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep -q '\"is_admin\":true'" "curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep '\"is_admin\":true'"
) )
''; '';
}) })

View File

@ -29,5 +29,5 @@ builtins.listToAttrs (
}; };
} }
) )
[ "nginxStable" "nginxUnstable" "nginxShibboleth" "openresty" "tengine" ] [ "nginxStable" "nginxMainline" "nginxShibboleth" "openresty" "tengine" ]
) )

View File

@ -56,11 +56,11 @@ import ./make-test-python.nix ({ pkgs, ... }: {
}; };
specialisation.reloadRestartSystem.configuration = { specialisation.reloadRestartSystem.configuration = {
services.nginx.package = pkgs.nginxUnstable; services.nginx.package = pkgs.nginxMainline;
}; };
specialisation.reloadWithErrorsSystem.configuration = { specialisation.reloadWithErrorsSystem.configuration = {
services.nginx.package = pkgs.nginxUnstable; services.nginx.package = pkgs.nginxMainline;
services.nginx.virtualHosts."!@$$(#*%".locations."~@#*$*!)".proxyPass = ";;;"; services.nginx.virtualHosts."!@$$(#*%".locations."~@#*$*!)".proxyPass = ";;;";
}; };
}; };

View File

@ -88,15 +88,15 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
with subtest("no authentication required"): with subtest("no authentication required"):
pomerium.succeed( pomerium.succeed(
"curl --resolve my.website:80:127.0.0.1 http://my.website | grep -q 'hello world'" "curl --resolve my.website:80:127.0.0.1 http://my.website | grep 'hello world'"
) )
with subtest("login required"): with subtest("login required"):
pomerium.succeed( pomerium.succeed(
"curl -I --resolve login.required:80:127.0.0.1 http://login.required | grep -q pom-auth" "curl -I --resolve login.required:80:127.0.0.1 http://login.required | grep pom-auth"
) )
pomerium.succeed( pomerium.succeed(
"curl -L --resolve login.required:80:127.0.0.1 http://login.required | grep -q 'hello I am login page'" "curl -L --resolve login.required:80:127.0.0.1 http://login.required | grep 'hello I am login page'"
) )
''; '';
}) })

View File

@ -71,7 +71,7 @@ let
wait_for_open_port(3551) wait_for_open_port(3551)
wait_for_unit("prometheus-apcupsd-exporter.service") wait_for_unit("prometheus-apcupsd-exporter.service")
wait_for_open_port(9162) wait_for_open_port(9162)
succeed("curl -sSf http://localhost:9162/metrics | grep -q 'apcupsd_info'") succeed("curl -sSf http://localhost:9162/metrics | grep 'apcupsd_info'")
''; '';
}; };
@ -85,7 +85,7 @@ let
wait_for_unit("prometheus-artifactory-exporter.service") wait_for_unit("prometheus-artifactory-exporter.service")
wait_for_open_port(9531) wait_for_open_port(9531)
succeed( succeed(
"curl -sSf http://localhost:9531/metrics | grep -q 'artifactory_up'" "curl -sSf http://localhost:9531/metrics | grep 'artifactory_up'"
) )
''; '';
}; };
@ -106,7 +106,7 @@ let
wait_for_unit("prometheus-bind-exporter.service") wait_for_unit("prometheus-bind-exporter.service")
wait_for_open_port(9119) wait_for_open_port(9119)
succeed( succeed(
"curl -sSf http://localhost:9119/metrics | grep -q 'bind_query_recursions_total 0'" "curl -sSf http://localhost:9119/metrics | grep 'bind_query_recursions_total 0'"
) )
''; '';
}; };
@ -135,7 +135,7 @@ let
wait_for_unit("prometheus-bird-exporter.service") wait_for_unit("prometheus-bird-exporter.service")
wait_for_open_port(9324) wait_for_open_port(9324)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf http://localhost:9324/metrics | grep -q 'MyObviousTestString'" "curl -sSf http://localhost:9324/metrics | grep 'MyObviousTestString'"
) )
''; '';
}; };
@ -154,7 +154,7 @@ let
wait_for_unit("prometheus-bitcoin-exporter.service") wait_for_unit("prometheus-bitcoin-exporter.service")
wait_for_unit("bitcoind-default.service") wait_for_unit("bitcoind-default.service")
wait_for_open_port(9332) wait_for_open_port(9332)
succeed("curl -sSf http://localhost:9332/metrics | grep -q '^bitcoin_blocks '") succeed("curl -sSf http://localhost:9332/metrics | grep '^bitcoin_blocks '")
''; '';
}; };
@ -172,7 +172,7 @@ let
wait_for_unit("prometheus-blackbox-exporter.service") wait_for_unit("prometheus-blackbox-exporter.service")
wait_for_open_port(9115) wait_for_open_port(9115)
succeed( succeed(
"curl -sSf 'http://localhost:9115/probe?target=localhost&module=icmp_v6' | grep -q 'probe_success 1'" "curl -sSf 'http://localhost:9115/probe?target=localhost&module=icmp_v6' | grep 'probe_success 1'"
) )
''; '';
}; };
@ -204,7 +204,7 @@ let
"curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd" "curl -sSfH 'Content-Type: application/json' -X POST --data @/tmp/data.json localhost:9103/collectd"
) )
succeed( succeed(
"curl -sSf localhost:9103/metrics | grep -q 'collectd_testplugin_gauge{instance=\"testhost\"} 23'" "curl -sSf localhost:9103/metrics | grep 'collectd_testplugin_gauge{instance=\"testhost\"} 23'"
) )
''; '';
}; };
@ -220,7 +220,7 @@ let
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-dnsmasq-exporter.service") wait_for_unit("prometheus-dnsmasq-exporter.service")
wait_for_open_port(9153) wait_for_open_port(9153)
succeed("curl -sSf http://localhost:9153/metrics | grep -q 'dnsmasq_leases 0'") succeed("curl -sSf http://localhost:9153/metrics | grep 'dnsmasq_leases 0'")
''; '';
}; };
@ -235,7 +235,7 @@ let
wait_for_unit("prometheus-domain-exporter.service") wait_for_unit("prometheus-domain-exporter.service")
wait_for_open_port(9222) wait_for_open_port(9222)
succeed( succeed(
"curl -sSf 'http://localhost:9222/probe?target=nixos.org' | grep -q 'domain_probe_success 0'" "curl -sSf 'http://localhost:9222/probe?target=nixos.org' | grep 'domain_probe_success 0'"
) )
''; '';
}; };
@ -254,7 +254,7 @@ let
wait_for_unit("prometheus-dovecot-exporter.service") wait_for_unit("prometheus-dovecot-exporter.service")
wait_for_open_port(9166) wait_for_open_port(9166)
succeed( succeed(
"curl -sSf http://localhost:9166/metrics | grep -q 'dovecot_up{scope=\"global\"} 1'" "curl -sSf http://localhost:9166/metrics | grep 'dovecot_up{scope=\"global\"} 1'"
) )
''; '';
}; };
@ -268,7 +268,7 @@ let
wait_for_unit("prometheus-fritzbox-exporter.service") wait_for_unit("prometheus-fritzbox-exporter.service")
wait_for_open_port(9133) wait_for_open_port(9133)
succeed( succeed(
"curl -sSf http://localhost:9133/metrics | grep -q 'fritzbox_exporter_collect_errors 0'" "curl -sSf http://localhost:9133/metrics | grep 'fritzbox_exporter_collect_errors 0'"
) )
''; '';
}; };
@ -290,9 +290,9 @@ let
wait_for_unit("prometheus-jitsi-exporter.service") wait_for_unit("prometheus-jitsi-exporter.service")
wait_for_open_port(9700) wait_for_open_port(9700)
wait_until_succeeds( wait_until_succeeds(
'journalctl -eu prometheus-jitsi-exporter.service -o cat | grep -q "key=participants"' 'journalctl -eu prometheus-jitsi-exporter.service -o cat | grep "key=participants"'
) )
succeed("curl -sSf 'localhost:9700/metrics' | grep -q 'jitsi_participants 0'") succeed("curl -sSf 'localhost:9700/metrics' | grep 'jitsi_participants 0'")
''; '';
}; };
@ -321,7 +321,7 @@ let
wait_for_unit("prometheus-json-exporter.service") wait_for_unit("prometheus-json-exporter.service")
wait_for_open_port(7979) wait_for_open_port(7979)
succeed( succeed(
"curl -sSf 'localhost:7979/probe?target=http://localhost' | grep -q 'json_test_metric 1'" "curl -sSf 'localhost:7979/probe?target=http://localhost' | grep 'json_test_metric 1'"
) )
''; '';
}; };
@ -426,7 +426,7 @@ let
wait_for_unit("knot.service") wait_for_unit("knot.service")
wait_for_unit("prometheus-knot-exporter.service") wait_for_unit("prometheus-knot-exporter.service")
wait_for_open_port(9433) wait_for_open_port(9433)
succeed("curl -sSf 'localhost:9433' | grep -q 'knot_server_zone_count 1.0'") succeed("curl -sSf 'localhost:9433' | grep 'knot_server_zone_count 1.0'")
''; '';
}; };
@ -441,10 +441,10 @@ let
wait_for_unit("prometheus-keylight-exporter.service") wait_for_unit("prometheus-keylight-exporter.service")
wait_for_open_port(9288) wait_for_open_port(9288)
succeed( succeed(
"curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics | grep -q '400'" "curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics | grep '400'"
) )
succeed( succeed(
"curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics?target=nosuchdevice | grep -q '500'" "curl -sS --write-out '%{http_code}' -o /dev/null http://localhost:9288/metrics?target=nosuchdevice | grep '500'"
) )
''; '';
}; };
@ -489,7 +489,7 @@ let
wait_for_open_port(10009) wait_for_open_port(10009)
wait_for_unit("prometheus-lnd-exporter.service") wait_for_unit("prometheus-lnd-exporter.service")
wait_for_open_port(9092) wait_for_open_port(9092)
succeed("curl -sSf localhost:9092/metrics | grep -q '^promhttp_metric_handler'") succeed("curl -sSf localhost:9092/metrics | grep '^promhttp_metric_handler'")
''; '';
}; };
@ -531,7 +531,7 @@ let
wait_for_unit("prometheus-mail-exporter.service") wait_for_unit("prometheus-mail-exporter.service")
wait_for_open_port(9225) wait_for_open_port(9225)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf http://localhost:9225/metrics | grep -q 'mail_deliver_success{configname=\"testserver\"} 1'" "curl -sSf http://localhost:9225/metrics | grep 'mail_deliver_success{configname=\"testserver\"} 1'"
) )
''; '';
}; };
@ -571,7 +571,7 @@ let
wait_for_unit("prometheus-mikrotik-exporter.service") wait_for_unit("prometheus-mikrotik-exporter.service")
wait_for_open_port(9436) wait_for_open_port(9436)
succeed( succeed(
"curl -sSf http://localhost:9436/metrics | grep -q 'mikrotik_scrape_collector_success{device=\"router\"} 0'" "curl -sSf http://localhost:9436/metrics | grep 'mikrotik_scrape_collector_success{device=\"router\"} 0'"
) )
''; '';
}; };
@ -596,7 +596,7 @@ let
wait_for_unit("prometheus-modemmanager-exporter.service") wait_for_unit("prometheus-modemmanager-exporter.service")
wait_for_open_port(9539) wait_for_open_port(9539)
succeed( succeed(
"curl -sSf http://localhost:9539/metrics | grep -q 'modemmanager_info'" "curl -sSf http://localhost:9539/metrics | grep 'modemmanager_info'"
) )
''; '';
}; };
@ -634,7 +634,7 @@ let
wait_for_unit("nginx.service") wait_for_unit("nginx.service")
wait_for_unit("prometheus-nextcloud-exporter.service") wait_for_unit("prometheus-nextcloud-exporter.service")
wait_for_open_port(9205) wait_for_open_port(9205)
succeed("curl -sSf http://localhost:9205/metrics | grep -q 'nextcloud_up 1'") succeed("curl -sSf http://localhost:9205/metrics | grep 'nextcloud_up 1'")
''; '';
}; };
@ -653,7 +653,7 @@ let
wait_for_unit("nginx.service") wait_for_unit("nginx.service")
wait_for_unit("prometheus-nginx-exporter.service") wait_for_unit("prometheus-nginx-exporter.service")
wait_for_open_port(9113) wait_for_open_port(9113)
succeed("curl -sSf http://localhost:9113/metrics | grep -q 'nginx_up 1'") succeed("curl -sSf http://localhost:9113/metrics | grep 'nginx_up 1'")
''; '';
}; };
@ -708,12 +708,12 @@ let
succeed("curl http://localhost") succeed("curl http://localhost")
execute("sleep 1") execute("sleep 1")
succeed( succeed(
"curl -sSf http://localhost:9117/metrics | grep 'filelogger_http_response_count_total' | grep -q 1" "curl -sSf http://localhost:9117/metrics | grep 'filelogger_http_response_count_total' | grep 1"
) )
succeed("curl http://localhost:81") succeed("curl http://localhost:81")
execute("sleep 1") execute("sleep 1")
succeed( succeed(
"curl -sSf http://localhost:9117/metrics | grep 'syslogger_http_response_count_total' | grep -q 1" "curl -sSf http://localhost:9117/metrics | grep 'syslogger_http_response_count_total' | grep 1"
) )
''; '';
}; };
@ -726,7 +726,7 @@ let
wait_for_unit("prometheus-node-exporter.service") wait_for_unit("prometheus-node-exporter.service")
wait_for_open_port(9100) wait_for_open_port(9100)
succeed( succeed(
"curl -sSf http://localhost:9100/metrics | grep -q 'node_exporter_build_info{.\\+} 1'" "curl -sSf http://localhost:9100/metrics | grep 'node_exporter_build_info{.\\+} 1'"
) )
''; '';
}; };
@ -786,7 +786,7 @@ let
wait_for_open_port(389) wait_for_open_port(389)
wait_for_open_port(9330) wait_for_open_port(9330)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf http://localhost:9330/metrics | grep -q 'openldap_scrape{result=\"ok\"} 1'" "curl -sSf http://localhost:9330/metrics | grep 'openldap_scrape{result=\"ok\"} 1'"
) )
''; '';
}; };
@ -812,7 +812,7 @@ let
exporterTest = '' exporterTest = ''
wait_for_unit("openvpn-test.service") wait_for_unit("openvpn-test.service")
wait_for_unit("prometheus-openvpn-exporter.service") wait_for_unit("prometheus-openvpn-exporter.service")
succeed("curl -sSf http://localhost:9176/metrics | grep -q 'openvpn_up{.*} 1'") succeed("curl -sSf http://localhost:9176/metrics | grep 'openvpn_up{.*} 1'")
''; '';
}; };
@ -828,9 +828,9 @@ let
wait_for_file("/var/lib/postfix/queue/public/showq") wait_for_file("/var/lib/postfix/queue/public/showq")
wait_for_open_port(9154) wait_for_open_port(9154)
succeed( succeed(
"curl -sSf http://localhost:9154/metrics | grep -q 'postfix_smtpd_connects_total 0'" "curl -sSf http://localhost:9154/metrics | grep 'postfix_smtpd_connects_total 0'"
) )
succeed("curl -sSf http://localhost:9154/metrics | grep -q 'postfix_up{.*} 1'") succeed("curl -sSf http://localhost:9154/metrics | grep 'postfix_up{.*} 1'")
''; '';
}; };
@ -847,20 +847,20 @@ let
wait_for_open_port(9187) wait_for_open_port(9187)
wait_for_unit("postgresql.service") wait_for_unit("postgresql.service")
succeed( succeed(
"curl -sSf http://localhost:9187/metrics | grep -q 'pg_exporter_last_scrape_error 0'" "curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
) )
succeed("curl -sSf http://localhost:9187/metrics | grep -q 'pg_up 1'") succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'")
systemctl("stop postgresql.service") systemctl("stop postgresql.service")
succeed( succeed(
"curl -sSf http://localhost:9187/metrics | grep -qv 'pg_exporter_last_scrape_error 0'" "curl -sSf http://localhost:9187/metrics | grep -v 'pg_exporter_last_scrape_error 0'"
) )
succeed("curl -sSf http://localhost:9187/metrics | grep -q 'pg_up 0'") succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 0'")
systemctl("start postgresql.service") systemctl("start postgresql.service")
wait_for_unit("postgresql.service") wait_for_unit("postgresql.service")
succeed( succeed(
"curl -sSf http://localhost:9187/metrics | grep -q 'pg_exporter_last_scrape_error 0'" "curl -sSf http://localhost:9187/metrics | grep 'pg_exporter_last_scrape_error 0'"
) )
succeed("curl -sSf http://localhost:9187/metrics | grep -q 'pg_up 1'") succeed("curl -sSf http://localhost:9187/metrics | grep 'pg_up 1'")
''; '';
}; };
@ -893,7 +893,7 @@ let
wait_for_unit("prometheus-py-air-control-exporter.service") wait_for_unit("prometheus-py-air-control-exporter.service")
wait_for_open_port(9896) wait_for_open_port(9896)
succeed( succeed(
"curl -sSf http://localhost:9896/metrics | grep -q 'py_air_control_sampling_error_total'" "curl -sSf http://localhost:9896/metrics | grep 'py_air_control_sampling_error_total'"
) )
''; '';
}; };
@ -908,7 +908,7 @@ let
wait_for_unit("prometheus-redis-exporter.service") wait_for_unit("prometheus-redis-exporter.service")
wait_for_open_port(6379) wait_for_open_port(6379)
wait_for_open_port(9121) wait_for_open_port(9121)
wait_until_succeeds("curl -sSf localhost:9121/metrics | grep -q 'redis_up 1'") wait_until_succeeds("curl -sSf localhost:9121/metrics | grep 'redis_up 1'")
''; '';
}; };
@ -926,7 +926,7 @@ let
wait_for_open_port(11334) wait_for_open_port(11334)
wait_for_open_port(7980) wait_for_open_port(7980)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf 'localhost:7980/probe?target=http://localhost:11334/stat' | grep -q 'rspamd_scanned{host=\"rspamd\"} 0'" "curl -sSf 'localhost:7980/probe?target=http://localhost:11334/stat' | grep 'rspamd_scanned{host=\"rspamd\"} 0'"
) )
''; '';
}; };
@ -957,7 +957,7 @@ let
wait_for_unit("prometheus-rtl_433-exporter.service") wait_for_unit("prometheus-rtl_433-exporter.service")
wait_for_open_port(9550) wait_for_open_port(9550)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf localhost:9550/metrics | grep -q '{}'".format( "curl -sSf localhost:9550/metrics | grep '{}'".format(
'rtl_433_temperature_celsius{channel="3",id="55",location="",model="zopieux"} 18' 'rtl_433_temperature_celsius{channel="3",id="55",location="",model="zopieux"} 18'
) )
) )
@ -973,12 +973,12 @@ let
wait_for_unit("prometheus-smokeping-exporter.service") wait_for_unit("prometheus-smokeping-exporter.service")
wait_for_open_port(9374) wait_for_open_port(9374)
wait_until_succeeds( wait_until_succeeds(
"curl -sSf localhost:9374/metrics | grep '{}' | grep -qv ' 0$'".format( "curl -sSf localhost:9374/metrics | grep '{}' | grep -v ' 0$'".format(
'smokeping_requests_total{host="127.0.0.1",ip="127.0.0.1"} ' 'smokeping_requests_total{host="127.0.0.1",ip="127.0.0.1"} '
) )
) )
wait_until_succeeds( wait_until_succeeds(
"curl -sSf localhost:9374/metrics | grep -q '{}'".format( "curl -sSf localhost:9374/metrics | grep '{}'".format(
'smokeping_response_ttl{host="127.0.0.1",ip="127.0.0.1"}' 'smokeping_response_ttl{host="127.0.0.1",ip="127.0.0.1"}'
) )
) )
@ -996,7 +996,7 @@ let
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-snmp-exporter.service") wait_for_unit("prometheus-snmp-exporter.service")
wait_for_open_port(9116) wait_for_open_port(9116)
succeed("curl -sSf localhost:9116/metrics | grep -q 'snmp_request_errors_total 0'") succeed("curl -sSf localhost:9116/metrics | grep 'snmp_request_errors_total 0'")
''; '';
}; };
@ -1040,7 +1040,7 @@ let
exporterTest = '' exporterTest = ''
wait_for_unit("prometheus-sql-exporter.service") wait_for_unit("prometheus-sql-exporter.service")
wait_for_open_port(9237) wait_for_open_port(9237)
succeed("curl http://localhost:9237/metrics | grep -c 'sql_points{' | grep -q 2") succeed("curl http://localhost:9237/metrics | grep -c 'sql_points{' | grep 2")
''; '';
}; };
@ -1063,7 +1063,7 @@ let
wait_for_open_port(80) wait_for_open_port(80)
wait_for_unit("prometheus-surfboard-exporter.service") wait_for_unit("prometheus-surfboard-exporter.service")
wait_for_open_port(9239) wait_for_open_port(9239)
succeed("curl -sSf localhost:9239/metrics | grep -q 'surfboard_up 1'") succeed("curl -sSf localhost:9239/metrics | grep 'surfboard_up 1'")
''; '';
}; };
@ -1076,7 +1076,7 @@ let
wait_for_unit("prometheus-systemd-exporter.service") wait_for_unit("prometheus-systemd-exporter.service")
wait_for_open_port(9558) wait_for_open_port(9558)
succeed( succeed(
"curl -sSf localhost:9558/metrics | grep -q '{}'".format( "curl -sSf localhost:9558/metrics | grep '{}'".format(
'systemd_unit_state{name="basic.target",state="active",type="target"} 1' 'systemd_unit_state{name="basic.target",state="active",type="target"} 1'
) )
) )
@ -1098,7 +1098,7 @@ let
wait_for_open_port(9051) wait_for_open_port(9051)
wait_for_unit("prometheus-tor-exporter.service") wait_for_unit("prometheus-tor-exporter.service")
wait_for_open_port(9130) wait_for_open_port(9130)
succeed("curl -sSf localhost:9130/metrics | grep -q 'tor_version{.\\+} 1'") succeed("curl -sSf localhost:9130/metrics | grep 'tor_version{.\\+} 1'")
''; '';
}; };
@ -1110,7 +1110,7 @@ let
wait_for_unit("prometheus-unifi-poller-exporter.service") wait_for_unit("prometheus-unifi-poller-exporter.service")
wait_for_open_port(9130) wait_for_open_port(9130)
succeed( succeed(
"curl -sSf localhost:9130/metrics | grep -q 'unifipoller_build_info{.\\+} 1'" "curl -sSf localhost:9130/metrics | grep 'unifipoller_build_info{.\\+} 1'"
) )
''; '';
}; };
@ -1134,7 +1134,7 @@ let
wait_for_unit("unbound.service") wait_for_unit("unbound.service")
wait_for_unit("prometheus-unbound-exporter.service") wait_for_unit("prometheus-unbound-exporter.service")
wait_for_open_port(9167) wait_for_open_port(9167)
succeed("curl -sSf localhost:9167/metrics | grep -q 'unbound_up 1'") succeed("curl -sSf localhost:9167/metrics | grep 'unbound_up 1'")
''; '';
}; };
@ -1163,7 +1163,7 @@ let
wait_for_unit("prometheus-varnish-exporter.service") wait_for_unit("prometheus-varnish-exporter.service")
wait_for_open_port(6081) wait_for_open_port(6081)
wait_for_open_port(9131) wait_for_open_port(9131)
succeed("curl -sSf http://localhost:9131/metrics | grep -q 'varnish_up 1'") succeed("curl -sSf http://localhost:9131/metrics | grep 'varnish_up 1'")
''; '';
}; };

View File

@ -28,7 +28,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...}:
machine.wait_for_unit("shiori.service") machine.wait_for_unit("shiori.service")
machine.wait_for_open_port(8080) machine.wait_for_open_port(8080)
machine.succeed("curl --fail http://localhost:8080/") machine.succeed("curl --fail http://localhost:8080/")
machine.succeed("curl --fail --location http://localhost:8080/ | grep -qi shiori") machine.succeed("curl --fail --location http://localhost:8080/ | grep -i shiori")
with subtest("login"): with subtest("login"):
auth_json = machine.succeed( auth_json = machine.succeed(

View File

@ -119,7 +119,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : {
with subtest("Setup"): with subtest("Setup"):
result = machine.succeed( result = machine.succeed(
"set -o pipefail; curl -sSf localhost:3000/finalize -X POST -d " "curl -sSf localhost:3000/finalize -X POST -d "
+ "@${payloads.finalize} -H 'Content-Type: application/json' " + "@${payloads.finalize} -H 'Content-Type: application/json' "
+ "| jq .ok | xargs echo" + "| jq .ok | xargs echo"
) )
@ -132,7 +132,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : {
with subtest("Base functionality"): with subtest("Base functionality"):
auth = machine.succeed( auth = machine.succeed(
"set -o pipefail; curl -sSf localhost:3000/graphql -X POST " "curl -sSf localhost:3000/graphql -X POST "
+ "-d @${payloads.login} -H 'Content-Type: application/json' " + "-d @${payloads.login} -H 'Content-Type: application/json' "
+ "| jq '.[0].data.authentication.login.jwt' | xargs echo" + "| jq '.[0].data.authentication.login.jwt' | xargs echo"
).strip() ).strip()
@ -140,7 +140,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : {
assert auth assert auth
create = machine.succeed( create = machine.succeed(
"set -o pipefail; curl -sSf localhost:3000/graphql -X POST " "curl -sSf localhost:3000/graphql -X POST "
+ "-d @${payloads.content} -H 'Content-Type: application/json' " + "-d @${payloads.content} -H 'Content-Type: application/json' "
+ f"-H 'Authorization: Bearer {auth}' " + f"-H 'Authorization: Bearer {auth}' "
+ "| jq '.[0].data.pages.create.responseResult.succeeded'|xargs echo" + "| jq '.[0].data.pages.create.responseResult.succeeded'|xargs echo"

View File

@ -44,7 +44,7 @@ import ./make-test-python.nix (
xandikos_default.wait_for_open_port(8080) xandikos_default.wait_for_open_port(8080)
xandikos_default.succeed("curl --fail http://localhost:8080/") xandikos_default.succeed("curl --fail http://localhost:8080/")
xandikos_default.succeed( xandikos_default.succeed(
"curl -s --fail --location http://localhost:8080/ | grep -qi Xandikos" "curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
) )
xandikos_client.wait_for_unit("network.target") xandikos_client.wait_for_unit("network.target")
xandikos_client.fail("curl --fail http://xandikos_default:8080/") xandikos_client.fail("curl --fail http://xandikos_default:8080/")
@ -55,15 +55,15 @@ import ./make-test-python.nix (
xandikos_proxy.wait_for_open_port(8080) xandikos_proxy.wait_for_open_port(8080)
xandikos_proxy.succeed("curl --fail http://localhost:8080/") xandikos_proxy.succeed("curl --fail http://localhost:8080/")
xandikos_proxy.succeed( xandikos_proxy.succeed(
"curl -s --fail --location http://localhost:8080/ | grep -qi Xandikos" "curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
) )
xandikos_client.wait_for_unit("network.target") xandikos_client.wait_for_unit("network.target")
xandikos_client.fail("curl --fail http://xandikos_proxy:8080/") xandikos_client.fail("curl --fail http://xandikos_proxy:8080/")
xandikos_client.succeed( xandikos_client.succeed(
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/ | grep -qi Xandikos" "curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/ | grep -i Xandikos"
) )
xandikos_client.succeed( xandikos_client.succeed(
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/user/ | grep -qi Xandikos" "curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/user/ | grep -i Xandikos"
) )
''; '';
} }

View File

@ -0,0 +1,36 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "apheleia";
version = "2021-05-23";
src = fetchFromGitHub {
owner = "raxod502";
repo = "apheleia";
rev = "f865c165dac606187a66b2b25a57d5099b452120";
sha256 = "sha256-n37jJsNOGhSjUtQysG3NVIjjayhbOa52iTXBc8SyKXE=";
};
buildInputs = [ emacs ];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Reformat buffer stably";
homepage = "https://github.com/raxod502/apheleia";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -0,0 +1,46 @@
{ stdenv, fetchFromGitHub, emacs, emacsPackages, lib }:
let
runtimeDeps = with emacsPackages; [
evil
markdown-mode
];
in
stdenv.mkDerivation {
pname = "evil-markdown";
version = "2020-06-01";
src = fetchFromGitHub {
owner = "Somelauw";
repo = "evil-markdown";
rev = "064fe9b4767470472356d20bdd08e2f30ebbc9ac";
sha256 = "sha256-Kt2wxG1XCFowavVWtj0urM/yURKegonpZcxTy/+CrJY=";
};
buildInputs = [
emacs
] ++ runtimeDeps;
propagatedUserEnvPkgs = runtimeDeps;
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Vim-like keybindings for markdown-mode";
homepage = "https://github.com/Somelauw/evil-markdown";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -0,0 +1,36 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "git-undo";
version = "2019-10-13";
src = fetchFromGitHub {
owner = "jwiegley";
repo = "git-undo-el";
rev = "cf31e38e7889e6ade7d2d2b9f8719fd44f52feb5";
sha256 = "sha256-cVkK9EF6qQyVV3uVqnBEjF8e9nEx/8ixnM8PvxqCyYE=";
};
buildInputs = [ emacs ];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Revert region to most recent Git-historical version";
homepage = "https://github.com/jwiegley/git-undo-el";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -0,0 +1,36 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "isearch-plus";
version = "2021-01-01";
src = fetchFromGitHub {
owner = "emacsmirror";
repo = "isearch-plus";
rev = "376a8f9f8a9666d7e61d125abcdb645847cb8619";
sha256 = "sha256-Kd5vpu+mI1tJPcsu7EpnnBcPVdVAijkAeTz+bLB3WlQ=";
};
buildInputs = [ emacs ];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Extensions to isearch";
homepage = "https://www.emacswiki.org/emacs/download/isearch%2b.el";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -0,0 +1,36 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "isearch-prop";
version = "2019-05-01";
src = fetchFromGitHub {
owner = "emacsmirror";
repo = "isearch-prop";
rev = "4a2765f835dd115d472142da05215c4c748809f4";
sha256 = "sha256-A1Kt4nm7iRV9J5yaLupwiNL5g7ddZvQs79dggmqZ7Rk=";
};
buildInputs = [ emacs ];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Search text- or overlay-property contexts";
homepage = "https://www.emacswiki.org/emacs/download/isearch-prop.el";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -65,11 +65,15 @@
}; };
}; };
apheleia = callPackage ./apheleia {};
emacspeak = callPackage ./emacspeak {}; emacspeak = callPackage ./emacspeak {};
ess-R-object-popup = ess-R-object-popup =
callPackage ./ess-R-object-popup { }; callPackage ./ess-R-object-popup { };
evil-markdown = callPackage ./evil-markdown { };
font-lock-plus = callPackage ./font-lock-plus { }; font-lock-plus = callPackage ./font-lock-plus { };
ghc-mod = melpaBuild { ghc-mod = melpaBuild {
@ -88,6 +92,8 @@
}; };
}; };
git-undo = callPackage ./git-undo { };
haskell-unicode-input-method = melpaBuild { haskell-unicode-input-method = melpaBuild {
pname = "emacs-haskell-unicode-input-method"; pname = "emacs-haskell-unicode-input-method";
version = "20110905.2307"; version = "20110905.2307";
@ -111,6 +117,10 @@
helm-words = callPackage ./helm-words { }; helm-words = callPackage ./helm-words { };
isearch-plus = callPackage ./isearch-plus { };
isearch-prop = callPackage ./isearch-prop { };
jam-mode = callPackage ./jam-mode { }; jam-mode = callPackage ./jam-mode { };
llvm-mode = trivialBuild { llvm-mode = trivialBuild {
@ -177,6 +187,8 @@
}; };
mu4e-patch = callPackage ./mu4e-patch { };
org-mac-link = org-mac-link =
callPackage ./org-mac-link { }; callPackage ./org-mac-link { };
@ -206,6 +218,8 @@
tramp = callPackage ./tramp { }; tramp = callPackage ./tramp { };
youtube-dl = callPackage ./youtube-dl { };
zeitgeist = callPackage ./zeitgeist { }; zeitgeist = callPackage ./zeitgeist { };
# From old emacsPackages (pre emacsPackagesNg) # From old emacsPackages (pre emacsPackagesNg)

View File

@ -0,0 +1,38 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "mu4e-patch";
version = "2019-05-09";
src = fetchFromGitHub {
owner = "seanfarley";
repo = "mu4e-patch";
rev = "522da46c1653b1cacc79cde91d6534da7ae9517d";
sha256 = "sha256-1lV4dDuCdyCUXi/In2DzYJPEHuAc9Jfbz2ZecNZwn4I=";
};
buildInputs = [
emacs
];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Colorize patch emails in mu4e";
homepage = "https://github.com/seanfarley/mu4e-patch";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -0,0 +1,36 @@
{ stdenv, fetchFromGitHub, emacs, lib }:
stdenv.mkDerivation {
pname = "youtube-dl";
version = "2018-10-12";
src = fetchFromGitHub {
owner = "skeeto";
repo = "youtube-dl-emacs";
rev = "af877b5bc4f01c04fccfa7d47a2c328926f20ef4";
sha256 = "sha256-Etl95rcoRACDPjcTPQqYK2L+w8OZbOrTrRT0JadMdH4=";
};
buildInputs = [ emacs ];
buildPhase = ''
runHook preBuild
emacs -L . --batch -f batch-byte-compile *.el
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install *.el *.elc $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {
description = "Emacs frontend to the youtube-dl utility";
homepage = "https://github.com/skeeto/youtube-dl-emacs";
license = lib.licenses.unlicense;
maintainers = with lib.maintainers; [ leungbk ];
platforms = emacs.meta.platforms;
};
}

View File

@ -54,11 +54,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnome-boxes"; pname = "gnome-boxes";
version = "40.1"; version = "40.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "seKPLH+3a/T7uGLQ1S6BG5TL6f8W8GdAiWRWhpCILvg="; sha256 = "hzN1mi2GpWNnWWpTSQRjO4HKqlxFpWNtsulZDHFK6Nk=";
}; };
doCheck = true; doCheck = true;

View File

@ -24,11 +24,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnome-calendar"; pname = "gnome-calendar";
version = "40.1"; version = "40.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "2M30n57uHDo8aZHDL4VjxKfE2w23ymPOUcyRjkM7M6U="; sha256 = "njcB/UoOWJgA0iUgN3BkTzHVI0ZV9UqDqF/wVW3X6jM=";
}; };
patches = [ patches = [

View File

@ -29,11 +29,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnome-maps"; pname = "gnome-maps";
version = "40.1"; version = "40.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "sha256-mAXUwFs6NpV0bTdisoFr/+bZ19VuF7y7nZ1B3C0CYxo="; sha256 = "sha256-g+gVAFTQxLWmPJoJvyx9+YmuaQ7Kwb5r97ExKqpjm9Q=";
}; };
doCheck = true; doCheck = true;

View File

@ -37,11 +37,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "epiphany"; pname = "epiphany";
version = "40.1"; version = "40.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "1l0sb1xg16g4wg3z99xb0w2kbyczbn7q4mphs3w4lxq22xml4sk9"; sha256 = "dRGeIgZWV89w7ytgPU9zg1VzvQNPHmGMD2YkeP1saDU=";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -6,13 +6,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "evolution-data-server"; pname = "evolution-data-server";
version = "3.40.1"; version = "3.40.2";
outputs = [ "out" "dev" ]; outputs = [ "out" "dev" ];
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/evolution-data-server/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/evolution-data-server/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "08iykha7zhk21b3axsp3v1jfwda612v0m8rz8zlzppm5i8s5ziza"; sha256 = "7IKVFjnzKlzs6AqLC5qj9mt9MY4+4sHDUjTy4r3opBg=";
}; };
patches = [ patches = [

View File

@ -43,11 +43,11 @@ in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnome-software"; pname = "gnome-software";
version = "40.1"; version = "40.2";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/gnome-software/${lib.versions.major version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/gnome-software/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "16q2902swxsjdxb1nj335sv1bb76rvq4w6dn4yszkwf3s0fd86in"; sha256 = "y9HdKguvw/U93kIAPEpKA3RsuNZNxdJ+uNvmc27nJ5Y=";
}; };
patches = [ patches = [

View File

@ -0,0 +1,71 @@
diff --git a/lib/sanitizer_common/sanitizer_mac.cpp b/lib/sanitizer_common/sanitizer_mac.cpp
--- a/lib/sanitizer_common/sanitizer_mac.cpp
+++ b/lib/sanitizer_common/sanitizer_mac.cpp
@@ -613,9 +613,15 @@ HandleSignalMode GetHandleSignalMode(int signum) {
// Offset example:
// XNU 17 -- macOS 10.13 -- iOS 11 -- tvOS 11 -- watchOS 4
constexpr u16 GetOSMajorKernelOffset() {
- if (TARGET_OS_OSX) return 4;
- if (TARGET_OS_IOS || TARGET_OS_TV) return 6;
- if (TARGET_OS_WATCH) return 13;
+#if TARGET_OS_OSX
+ return 4;
+#endif
+#if TARGET_OS_IOS || TARGET_OS_TV
+ return 6;
+#endif
+#if TARGET_OS_WATCH
+ return 13;
+#endif
}
using VersStr = char[64];
@@ -627,13 +633,13 @@ static uptr ApproximateOSVersionViaKernelVersion(VersStr vers) {
u16 os_major = kernel_major - offset;
const char *format = "%d.0";
- if (TARGET_OS_OSX) {
- if (os_major >= 16) { // macOS 11+
- os_major -= 5;
- } else { // macOS 10.15 and below
- format = "10.%d";
- }
+#if TARGET_OS_OSX
+ if (os_major >= 16) { // macOS 11+
+ os_major -= 5;
+ } else { // macOS 10.15 and below
+ format = "10.%d";
}
+#endif
return internal_snprintf(vers, sizeof(VersStr), format, os_major);
}
@@ -681,15 +687,14 @@ void ParseVersion(const char *vers, u16 *major, u16 *minor) {
// Aligned versions example:
// macOS 10.15 -- iOS 13 -- tvOS 13 -- watchOS 6
static void MapToMacos(u16 *major, u16 *minor) {
- if (TARGET_OS_OSX)
- return;
-
- if (TARGET_OS_IOS || TARGET_OS_TV)
+#if !TARGET_OS_OSX
+#if TARGET_OS_IOS || TARGET_OS_TV
*major += 2;
- else if (TARGET_OS_WATCH)
+#elif TARGET_OS_WATCH
*major += 9;
- else
+#else
UNREACHABLE("unsupported platform");
+#endif
if (*major >= 16) { // macOS 11+
*major -= 5;
@@ -697,6 +702,7 @@ static void MapToMacos(u16 *major, u16 *minor) {
*minor = *major;
*major = 10;
}
+#endif
}
static MacosVersion GetMacosAlignedVersionInternal() {

View File

@ -59,6 +59,8 @@ stdenv.mkDerivation {
# extra `/`. # extra `/`.
./normalize-var.patch ./normalize-var.patch
]# ++ lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch ]# ++ lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch
# Prevent a compilation error on darwin
++ lib.optional stdenv.hostPlatform.isDarwin ./darwin-targetconditionals.patch
++ lib.optional stdenv.hostPlatform.isAarch32 ./armv7l.patch; ++ lib.optional stdenv.hostPlatform.isAarch32 ./armv7l.patch;
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks # TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks

View File

@ -1,6 +1,6 @@
{ mkDerivation }: { mkDerivation }:
mkDerivation { mkDerivation {
version = "21.3.8.23"; version = "21.3.8.24";
sha256 = "sha256-zIEXn2HuXeRKHfXmm0AAv9rEqqc4gIgaYek0hSUK5YU="; sha256 = "sha256-FNs+M4KFFKzfb4EG513HtyQ9eRRtxSPMpYq0bmRgY3g=";
} }

View File

@ -7,13 +7,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "cpp-utilities"; pname = "cpp-utilities";
version = "5.10.3"; version = "5.10.4";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Martchus"; owner = "Martchus";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-bEdDRvm5W12wJnW4xC+AcRLevZ0H7C625eknKzNrLLU="; sha256 = "sha256-pZh/NbTzQR2kjMeauv1HcRn0hDBaCNRbaZ3+1qs5rxU=";
}; };
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [ cmake ];

View File

@ -2,13 +2,13 @@
buildGoPackage rec { buildGoPackage rec {
pname = "go-toml"; pname = "go-toml";
version = "1.9.1"; version = "1.9.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "pelletier"; owner = "pelletier";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-O3gfQon8ktObLVED4A5sCSOw8K1NIXP3a5AsLq3Svb4="; sha256 = "sha256-x740f6I+szhq4mEsed4bsXcC8PvzF6PKFJNJ9SKMGIE=";
}; };
goPackagePath = "github.com/pelletier/go-toml"; goPackagePath = "github.com/pelletier/go-toml";

View File

@ -2,13 +2,13 @@
buildGoModule rec { buildGoModule rec {
pname = "lazygit"; pname = "lazygit";
version = "0.28.1"; version = "0.28.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "jesseduffield"; owner = "jesseduffield";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-tan8ksSyMIeDL7oRAWd3Qtz/sKbhAAfY7IknfwjyvgQ="; sha256 = "sha256-s5Ou0FhL9+2/xm7lKMG/3ya5P8idI0cgtJ28cV37pJQ=";
}; };
vendorSha256 = null; vendorSha256 = null;

View File

@ -1,5 +1,7 @@
{ stdenv { stdenv
, tree-sitter , tree-sitter
, libcxx
, lib
}: }:
# Build a parser grammar and put the resulting shared object in `$out/parser` # Build a parser grammar and put the resulting shared object in `$out/parser`
@ -27,6 +29,7 @@ stdenv.mkDerivation {
"${source}/${location}" "${source}/${location}"
; ;
NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${lib.getDev libcxx}/include/c++/v1";
buildInputs = [ tree-sitter ]; buildInputs = [ tree-sitter ];
dontUnpack = true; dontUnpack = true;

View File

@ -12,13 +12,13 @@ let
if stdenv.isi686 then "x86-32" else if stdenv.isi686 then "x86-32" else
if stdenv.isAarch64 then "armv8" else if stdenv.isAarch64 then "armv8" else
"unknown"; "unknown";
version = "12"; version = "13";
nnueFile = "nn-82215d0fd0df.nnue"; nnueFile = "nn-62ef826d1a6d.nnue";
nnue = fetchurl { nnue = fetchurl {
name = nnueFile; name = nnueFile;
url = "https://tests.stockfishchess.org/api/nn/${nnueFile}"; url = "https://tests.stockfishchess.org/api/nn/${nnueFile}";
sha256 = "1r4yqrh4di05syyhl84hqcz84djpbd605b27zhbxwg6zs07ms8c2"; sha256 = "0qsy9rr4zgxrpgwhwbi96z01a2560am2b00q2klbj4bd39nq5vv2";
}; };
in in
@ -28,7 +28,7 @@ stdenv.mkDerivation {
src = fetchurl { src = fetchurl {
url = "https://github.com/official-stockfish/Stockfish/archive/sf_${version}.tar.gz"; url = "https://github.com/official-stockfish/Stockfish/archive/sf_${version}.tar.gz";
sha256 = "16980aicm5i6i9252239q4f9bcxg1gnqkv6nphrmpz4drg8i3v6i"; sha256 = "0qhxp2w543psanzhzn8jhfafx8aip57v9nsvafbwa5xynchlgl8m";
}; };
# This addresses a linker issue with Darwin # This addresses a linker issue with Darwin

View File

@ -18,16 +18,16 @@
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "silicon"; pname = "silicon";
version = "0.4.1"; version = "0.4.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Aloxaf"; owner = "Aloxaf";
repo = "silicon"; repo = "silicon";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-ci0gq4rOQHBmFPvhXZseIlwnqAWd06/qg/i/luhV79s="; sha256 = "sha256-k+p8AEEL1BBJTmPc58QoIk7EOzu8QKdG00RQ58EN3bg=";
}; };
cargoSha256 = "sha256-sUPOf9er+BOMqDJ8C6+Xjjqj6NQUV2JTzGA4yUWtDWM="; cargoSha256 = "sha256-vpegobS7lpRkt/oZePW9WggYeg0JXDte8fQP/bf7oAI=";
buildInputs = [ llvmPackages.libclang expat freetype fira-code ] buildInputs = [ llvmPackages.libclang expat freetype fira-code ]
++ lib.optionals stdenv.isLinux [ libxcb ] ++ lib.optionals stdenv.isLinux [ libxcb ]