mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 14:10:33 +03:00
Merge staging-next into staging
This commit is contained in:
commit
fe694bcc39
151 changed files with 20644 additions and 2189 deletions
|
@ -3201,6 +3201,12 @@
|
|||
githubId = 77934086;
|
||||
keys = [ { fingerprint = "4CA3 48F6 8FE1 1777 8EDA 3860 B9A2 C1B0 25EC 2C55"; } ];
|
||||
};
|
||||
blenderfreaky = {
|
||||
name = "blenderfreaky";
|
||||
email = "nix@blenderfreaky.de";
|
||||
github = "blenderfreaky";
|
||||
githubId = 14351657;
|
||||
};
|
||||
blinry = {
|
||||
name = "blinry";
|
||||
email = "mail@blinry.org";
|
||||
|
@ -23962,6 +23968,12 @@
|
|||
matrix = "@titaniumtown:envs.net";
|
||||
keys = [ { fingerprint = "D15E 4754 FE1A EDA1 5A6D 4702 9AB2 8AC1 0ECE 533D"; } ];
|
||||
};
|
||||
tjkeller = {
|
||||
email = "tjk@tjkeller.xyz";
|
||||
github = "tjkeller-xyz";
|
||||
githubId = 36288711;
|
||||
name = "Tim Keller";
|
||||
};
|
||||
tjni = {
|
||||
email = "43ngvg@masqt.com";
|
||||
matrix = "@tni:matrix.org";
|
||||
|
|
|
@ -444,6 +444,7 @@ with lib.maintainers;
|
|||
members = [
|
||||
globin
|
||||
krav
|
||||
leona
|
||||
talyz
|
||||
yayayayaka
|
||||
];
|
||||
|
|
|
@ -75,6 +75,7 @@ in
|
|||
config = mkIf cfg.enable {
|
||||
systemd.services.hddtemp = {
|
||||
description = "HDD/SSD temperature";
|
||||
documentation = [ "man:hddtemp(8)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "forking";
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
systemd.services.auditd = {
|
||||
description = "Linux Audit daemon";
|
||||
documentation = [ "man:auditd(8)" ];
|
||||
wantedBy = [ "sysinit.target" ];
|
||||
after = [
|
||||
"local-fs.target"
|
||||
|
|
|
@ -128,6 +128,7 @@ in
|
|||
systemd.services.isolate = {
|
||||
description = "Isolate control group hierarchy daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
documentation = [ "man:isolate(1)" ];
|
||||
serviceConfig = {
|
||||
Type = "notify";
|
||||
ExecStart = "${isolate}/bin/isolate-cg-keeper";
|
||||
|
|
|
@ -70,6 +70,7 @@ in
|
|||
};
|
||||
|
||||
systemd.services.torque-server = {
|
||||
documentation = [ "man:pbs_server(8)" ];
|
||||
path = [ torque ];
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
@ -93,6 +94,7 @@ in
|
|||
};
|
||||
|
||||
systemd.services.torque-scheduler = {
|
||||
documentation = [ "man:pbs_sched(8)" ];
|
||||
path = [ torque ];
|
||||
|
||||
requires = [ "torque-server-init.service" ];
|
||||
|
|
|
@ -127,5 +127,7 @@
|
|||
services.libeufin.nexus.settings.libeufin-nexusdb-postgres.CONFIG = lib.mkIf (
|
||||
cfgMain.bank.enable && cfgMain.bank.createLocalDatabase
|
||||
) "postgresql:///libeufin-bank";
|
||||
|
||||
systemd.services.libeufin-nexus.documentation = [ "man:libeufin-nexus(1)" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -68,11 +68,19 @@ in
|
|||
requires = [ "taler-${talerComponent}-dbinit.service" ];
|
||||
after = [ "taler-${talerComponent}-dbinit.service" ];
|
||||
wantedBy = [ "multi-user.target" ]; # TODO slice?
|
||||
documentation = [
|
||||
"man:taler-${talerComponent}-${name}(1)"
|
||||
"info:taler-${talerComponent}"
|
||||
];
|
||||
}))
|
||||
# Database Initialisation
|
||||
{
|
||||
"taler-${talerComponent}-dbinit" = {
|
||||
path = [ config.services.postgresql.package ];
|
||||
documentation = [
|
||||
"man:taler-${talerComponent}-dbinit(1)"
|
||||
"info:taler-${talerComponent}"
|
||||
];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
DynamicUser = true;
|
||||
|
|
|
@ -148,7 +148,7 @@ in {
|
|||
};
|
||||
|
||||
package = lib.mkPackageOption pkgs "minecraft-server" {
|
||||
example = "minecraft-server_1_12_2";
|
||||
example = "pkgs.minecraft-server_1_12_2";
|
||||
};
|
||||
|
||||
jvmOpts = lib.mkOption {
|
||||
|
|
|
@ -49,6 +49,7 @@ in
|
|||
|
||||
systemd.services.thermald = {
|
||||
description = "Thermal Daemon Service";
|
||||
documentation = [ "man:thermald(8)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
PrivateNetwork = true;
|
||||
|
|
|
@ -122,6 +122,7 @@ in
|
|||
systemd.services.triggerhappy = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
description = "Global hotkey daemon";
|
||||
documentation = [ "man:thd(1)" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.triggerhappy}/bin/thd ${
|
||||
lib.optionalString (cfg.user != "root") "--user ${cfg.user}"
|
||||
|
|
|
@ -871,6 +871,7 @@ in
|
|||
systemd.services.postfix = {
|
||||
description = "Postfix mail server";
|
||||
|
||||
documentation = [ "man:postfix(1)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [
|
||||
"network.target"
|
||||
|
|
|
@ -68,6 +68,7 @@ in
|
|||
|
||||
systemd.services."glances" = {
|
||||
description = "Glances";
|
||||
documentation = [ "man:glances(1)" ];
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
|
|
|
@ -218,6 +218,7 @@ in
|
|||
in
|
||||
lib.nameValuePair "tahoe.introducer-${node}" {
|
||||
description = "Tahoe LAFS node ${node}";
|
||||
documentation = [ "info:tahoe-lafs" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ settings.package ];
|
||||
restartTriggers = [
|
||||
|
@ -329,6 +330,7 @@ in
|
|||
in
|
||||
lib.nameValuePair "tahoe.${node}" {
|
||||
description = "Tahoe LAFS node ${node}";
|
||||
documentation = [ "info:tahoe-lafs" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ settings.package ];
|
||||
restartTriggers = [
|
||||
|
|
|
@ -305,6 +305,12 @@ in
|
|||
description = "Avahi mDNS/DNS-SD Stack";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "avahi-daemon.socket" ];
|
||||
documentation = [
|
||||
"man:avahi-daemon(8)"
|
||||
"man:avahi-daemon.conf(5)"
|
||||
"man:avahi.hosts(5)"
|
||||
"man:avahi.service(5)"
|
||||
];
|
||||
|
||||
# Make NSS modules visible so that `avahi_nss_support ()' can
|
||||
# return a sensible value.
|
||||
|
|
|
@ -209,6 +209,8 @@ in
|
|||
in
|
||||
{ description = "DHCP Client";
|
||||
|
||||
documentation = [ "man:dhcpcd(8)" ];
|
||||
|
||||
wantedBy = [ "multi-user.target" ] ++ lib.optional (!hasDefaultGatewaySet) "network-online.target";
|
||||
wants = [ "network.target" "resolvconf.service" ];
|
||||
after = [ "resolvconf.service" ];
|
||||
|
|
|
@ -149,6 +149,7 @@ in
|
|||
|
||||
systemd.services.gnunet = {
|
||||
description = "GNUnet";
|
||||
documentation = [ "info:gnunet" ];
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = [ config.environment.etc."gnunet.conf".source ];
|
||||
|
|
|
@ -114,6 +114,10 @@ in
|
|||
config = mkIf cfg.enable {
|
||||
systemd.services.gvpe = {
|
||||
description = "GNU Virtual Private Ethernet node";
|
||||
documentation = [
|
||||
"info:gvpe"
|
||||
"man:gvpe(8)"
|
||||
];
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
|
|
|
@ -229,6 +229,7 @@ in
|
|||
|
||||
systemd.services.privoxy = {
|
||||
description = "Filtering web proxy";
|
||||
documentation = [ "man:privoxy(8)" ];
|
||||
after = [
|
||||
"network.target"
|
||||
"nss-lookup.target"
|
||||
|
|
|
@ -142,6 +142,7 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
documentation = [ "man:soju(1)" ];
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
Restart = "always";
|
||||
|
|
|
@ -366,6 +366,10 @@ in
|
|||
("tinc.${network}")
|
||||
(let version = getVersion data.package; in {
|
||||
description = "Tinc Daemon - ${network}";
|
||||
documentation = [
|
||||
"info:tinc"
|
||||
"man:tincd(8)"
|
||||
];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ data.package ];
|
||||
reloadTriggers = mkIf (versionAtLeast version "1.1pre") [ (builtins.toJSON etcConfig) ];
|
||||
|
|
|
@ -82,6 +82,7 @@ in
|
|||
|
||||
systemd.services.atd = {
|
||||
description = "Job Execution Daemon (atd)";
|
||||
documentation = [ "man:atd(8)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
path = [ at ];
|
||||
|
|
|
@ -169,6 +169,7 @@ in
|
|||
|
||||
systemd.services.clamav-daemon = lib.mkIf cfg.daemon.enable {
|
||||
description = "ClamAV daemon (clamd)";
|
||||
documentation = [ "man:clamd(8)" ];
|
||||
after = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
wants = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
@ -199,6 +200,7 @@ in
|
|||
|
||||
systemd.services.clamav-freshclam = lib.mkIf cfg.updater.enable {
|
||||
description = "ClamAV virus database updater (freshclam)";
|
||||
documentation = [ "man:freshclam(1)" ];
|
||||
restartTriggers = [ freshclamConfigFile ];
|
||||
requires = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
@ -276,6 +278,7 @@ in
|
|||
|
||||
systemd.services.clamdscan = lib.mkIf cfg.scanner.enable {
|
||||
description = "ClamAV virus scanner";
|
||||
documentation = [ "man:clamdscan(1)" ];
|
||||
after = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
wants = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ in
|
|||
config = lib.mkIf cfg.enable {
|
||||
systemd.services.endlessh = {
|
||||
description = "SSH tarpit";
|
||||
documentation = [ "man:endlessh(1)" ];
|
||||
requires = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig =
|
||||
|
|
|
@ -46,6 +46,10 @@ in
|
|||
users.groups.munge = { };
|
||||
|
||||
systemd.services.munged = {
|
||||
documentation = [
|
||||
"man:munged(8)"
|
||||
"man:mungekey(8)"
|
||||
];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [
|
||||
"network-online.target"
|
||||
|
|
|
@ -116,6 +116,7 @@ in
|
|||
|
||||
systemd.services.physlock = {
|
||||
enable = true;
|
||||
documentation = [ "man:physlock(1)" ];
|
||||
description = "Physlock";
|
||||
wantedBy =
|
||||
lib.optional cfg.lockOn.suspend "suspend.target"
|
||||
|
|
|
@ -119,6 +119,7 @@ in
|
|||
{
|
||||
sks-db = {
|
||||
description = "SKS database server";
|
||||
documentation = [ "man:sks(8)" ];
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
preStart = ''
|
||||
|
|
|
@ -1324,6 +1324,7 @@ in
|
|||
|
||||
systemd.services.tor = {
|
||||
description = "Tor Daemon";
|
||||
documentation = [ "man:tor(8)" ];
|
||||
path = [ pkgs.tor ];
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
|
|
@ -128,7 +128,11 @@ in
|
|||
in
|
||||
{
|
||||
description = "hledger-web - web-app for the hledger accounting tool.";
|
||||
documentation = [ "https://hledger.org/hledger-web.html" ];
|
||||
documentation = [
|
||||
"info:hledger-web"
|
||||
"man:hledger-web(1)"
|
||||
"https://hledger.org/hledger-web.html"
|
||||
];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "networking.target" ];
|
||||
serviceConfig = mkMerge [
|
||||
|
|
|
@ -254,6 +254,7 @@ in {
|
|||
after = [ "network.target" ];
|
||||
wantedBy = [ "phpfpm.target" ];
|
||||
partOf = [ "phpfpm.target" ];
|
||||
documentation = [ "man:php-fpm(8)" ];
|
||||
serviceConfig = let
|
||||
cfgFile = fpmCfgFile pool poolOpts;
|
||||
iniFile = phpIni poolOpts;
|
||||
|
|
|
@ -166,6 +166,7 @@ in
|
|||
in
|
||||
nameValuePair "btrfs-scrub-${fs'}" {
|
||||
description = "btrfs scrub on ${fs}";
|
||||
documentation = [ "man:btrfs-scrub(8)" ];
|
||||
# scrub prevents suspend2ram or proper shutdown
|
||||
conflicts = [
|
||||
"shutdown.target"
|
||||
|
|
|
@ -51,6 +51,7 @@ in
|
|||
config = mkIf (cfg.enable) {
|
||||
systemd.services = {
|
||||
powertop = {
|
||||
documentation = [ "man:powertop(8)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "multi-user.target" ];
|
||||
description = "Powertop tunings";
|
||||
|
|
|
@ -87,7 +87,7 @@ with lib;
|
|||
# ec2-get-console-output.
|
||||
echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
||||
for i in /etc/ssh/ssh_host_*_key.pub; do
|
||||
${config.programs.ssh.package}/bin/ssh-keygen -l -f "$i" || true > /dev/console
|
||||
${config.programs.ssh.package}/bin/ssh-keygen -l -f "$i" > /dev/console || true
|
||||
done
|
||||
echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
||||
'';
|
||||
|
|
|
@ -1300,26 +1300,26 @@ in {
|
|||
wrappers = handleTest ./wrappers.nix {};
|
||||
writefreely = handleTest ./web-apps/writefreely.nix {};
|
||||
wstunnel = runTest ./wstunnel.nix;
|
||||
xandikos = handleTest ./xandikos.nix {};
|
||||
xautolock = handleTest ./xautolock.nix {};
|
||||
xfce = handleTest ./xfce.nix {};
|
||||
xfce-wayland = handleTest ./xfce-wayland.nix {};
|
||||
xmonad = handleTest ./xmonad.nix {};
|
||||
xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
|
||||
xpadneo = handleTest ./xpadneo.nix {};
|
||||
xrdp = handleTest ./xrdp.nix {};
|
||||
xrdp-with-audio-pulseaudio = handleTest ./xrdp-with-audio-pulseaudio.nix {};
|
||||
xandikos = runTest ./xandikos.nix;
|
||||
xautolock = runTest ./xautolock.nix;
|
||||
xfce = runTest ./xfce.nix;
|
||||
xfce-wayland = runTest ./xfce-wayland.nix;
|
||||
xmonad = runTest ./xmonad.nix;
|
||||
xmonad-xdg-autostart = runTest ./xmonad-xdg-autostart.nix;
|
||||
xpadneo = runTest ./xpadneo.nix;
|
||||
xrdp = runTest ./xrdp.nix;
|
||||
xrdp-with-audio-pulseaudio = runTest ./xrdp-with-audio-pulseaudio.nix;
|
||||
xscreensaver = handleTest ./xscreensaver.nix {};
|
||||
xss-lock = handleTest ./xss-lock.nix {};
|
||||
xterm = handleTest ./xterm.nix {};
|
||||
xxh = handleTest ./xxh.nix {};
|
||||
yabar = handleTest ./yabar.nix {};
|
||||
xss-lock = runTest ./xss-lock.nix;
|
||||
xterm = runTest ./xterm.nix;
|
||||
xxh = runTest ./xxh.nix;
|
||||
yabar = runTest ./yabar.nix;
|
||||
ydotool = handleTest ./ydotool.nix {};
|
||||
yggdrasil = handleTest ./yggdrasil.nix {};
|
||||
your_spotify = handleTest ./your_spotify.nix {};
|
||||
zammad = handleTest ./zammad.nix {};
|
||||
zenohd = handleTest ./zenohd.nix {};
|
||||
zeronet-conservancy = handleTest ./zeronet-conservancy.nix {};
|
||||
yggdrasil = runTest ./yggdrasil.nix;
|
||||
your_spotify = runTest ./your_spotify.nix;
|
||||
zammad = runTest ./zammad.nix;
|
||||
zenohd = runTest ./zenohd.nix;
|
||||
zeronet-conservancy = runTest ./zeronet-conservancy.nix;
|
||||
zfs = handleTest ./zfs.nix {};
|
||||
zigbee2mqtt_1 = runTest {
|
||||
imports = [ ./zigbee2mqtt.nix ];
|
||||
|
@ -1329,12 +1329,12 @@ in {
|
|||
imports = [ ./zigbee2mqtt.nix ];
|
||||
_module.args.package = pkgs.zigbee2mqtt_2;
|
||||
};
|
||||
zipline = handleTest ./zipline.nix {};
|
||||
zoneminder = handleTest ./zoneminder.nix {};
|
||||
zookeeper = handleTest ./zookeeper.nix {};
|
||||
zram-generator = handleTest ./zram-generator.nix {};
|
||||
zrepl = handleTest ./zrepl.nix {};
|
||||
zsh-history = handleTest ./zsh-history.nix {};
|
||||
zwave-js = handleTest ./zwave-js.nix {};
|
||||
zwave-js-ui = handleTest ./zwave-js-ui.nix {};
|
||||
zipline = runTest ./zipline.nix;
|
||||
zoneminder = runTest ./zoneminder.nix;
|
||||
zookeeper = runTest ./zookeeper.nix;
|
||||
zram-generator = runTest ./zram-generator.nix;
|
||||
zrepl = runTest ./zrepl.nix;
|
||||
zsh-history = runTest ./zsh-history.nix;
|
||||
zwave-js = runTest ./zwave-js.nix;
|
||||
zwave-js-ui = runTest ./zwave-js-ui.nix;
|
||||
}
|
||||
|
|
|
@ -1,73 +1,71 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
name = "xandikos";
|
||||
{
|
||||
name = "xandikos";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ _0x4A6F ];
|
||||
meta.maintainers = with lib.maintainers; [ _0x4A6F ];
|
||||
|
||||
nodes = {
|
||||
xandikos_client = { };
|
||||
xandikos_default = {
|
||||
networking.firewall.allowedTCPPorts = [ 8080 ];
|
||||
services.xandikos.enable = true;
|
||||
};
|
||||
xandikos_proxy = {
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
8080
|
||||
];
|
||||
services.xandikos.enable = true;
|
||||
services.xandikos.address = "localhost";
|
||||
services.xandikos.port = 8080;
|
||||
services.xandikos.routePrefix = "/xandikos-prefix/";
|
||||
services.xandikos.extraOptions = [
|
||||
"--defaults"
|
||||
];
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedProxySettings = true;
|
||||
virtualHosts."xandikos" = {
|
||||
serverName = "xandikos.local";
|
||||
basicAuth.xandikos = "snakeOilPassword";
|
||||
locations."/xandikos/" = {
|
||||
proxyPass = "http://localhost:8080/xandikos-prefix/";
|
||||
};
|
||||
nodes = {
|
||||
xandikos_client = { };
|
||||
xandikos_default = {
|
||||
networking.firewall.allowedTCPPorts = [ 8080 ];
|
||||
services.xandikos.enable = true;
|
||||
};
|
||||
xandikos_proxy = {
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
8080
|
||||
];
|
||||
services.xandikos.enable = true;
|
||||
services.xandikos.address = "localhost";
|
||||
services.xandikos.port = 8080;
|
||||
services.xandikos.routePrefix = "/xandikos-prefix/";
|
||||
services.xandikos.extraOptions = [
|
||||
"--defaults"
|
||||
];
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedProxySettings = true;
|
||||
virtualHosts."xandikos" = {
|
||||
serverName = "xandikos.local";
|
||||
basicAuth.xandikos = "snakeOilPassword";
|
||||
locations."/xandikos/" = {
|
||||
proxyPass = "http://localhost:8080/xandikos-prefix/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
with subtest("Xandikos default"):
|
||||
xandikos_default.wait_for_unit("multi-user.target")
|
||||
xandikos_default.wait_for_unit("xandikos.service")
|
||||
xandikos_default.wait_for_open_port(8080)
|
||||
xandikos_default.succeed("curl --fail http://localhost:8080/")
|
||||
xandikos_default.succeed(
|
||||
"curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.wait_for_unit("network.target")
|
||||
xandikos_client.fail("curl --fail http://xandikos_default:8080/")
|
||||
with subtest("Xandikos default"):
|
||||
xandikos_default.wait_for_unit("multi-user.target")
|
||||
xandikos_default.wait_for_unit("xandikos.service")
|
||||
xandikos_default.wait_for_open_port(8080)
|
||||
xandikos_default.succeed("curl --fail http://localhost:8080/")
|
||||
xandikos_default.succeed(
|
||||
"curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.wait_for_unit("network.target")
|
||||
xandikos_client.fail("curl --fail http://xandikos_default:8080/")
|
||||
|
||||
with subtest("Xandikos proxy"):
|
||||
xandikos_proxy.wait_for_unit("multi-user.target")
|
||||
xandikos_proxy.wait_for_unit("xandikos.service")
|
||||
xandikos_proxy.wait_for_open_port(8080)
|
||||
xandikos_proxy.succeed("curl --fail http://localhost:8080/")
|
||||
xandikos_proxy.succeed(
|
||||
"curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.wait_for_unit("network.target")
|
||||
xandikos_client.fail("curl --fail http://xandikos_proxy:8080/")
|
||||
xandikos_client.succeed(
|
||||
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.succeed(
|
||||
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/user/ | grep -i Xandikos"
|
||||
)
|
||||
'';
|
||||
}
|
||||
)
|
||||
with subtest("Xandikos proxy"):
|
||||
xandikos_proxy.wait_for_unit("multi-user.target")
|
||||
xandikos_proxy.wait_for_unit("xandikos.service")
|
||||
xandikos_proxy.wait_for_open_port(8080)
|
||||
xandikos_proxy.succeed("curl --fail http://localhost:8080/")
|
||||
xandikos_proxy.succeed(
|
||||
"curl -s --fail --location http://localhost:8080/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.wait_for_unit("network.target")
|
||||
xandikos_client.fail("curl --fail http://xandikos_proxy:8080/")
|
||||
xandikos_client.succeed(
|
||||
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/ | grep -i Xandikos"
|
||||
)
|
||||
xandikos_client.succeed(
|
||||
"curl -s --fail -u xandikos:snakeOilPassword -H 'Host: xandikos.local' http://xandikos_proxy/xandikos/user/ | grep -i Xandikos"
|
||||
)
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,27 +1,23 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "xautolock";
|
||||
meta.maintainers = [ ];
|
||||
|
||||
{
|
||||
name = "xautolock";
|
||||
meta.maintainers = [ ];
|
||||
nodes.machine = {
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
|
||||
nodes.machine = {
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "bob";
|
||||
services.xserver.xautolock.enable = true;
|
||||
services.xserver.xautolock.time = 1;
|
||||
};
|
||||
|
||||
test-support.displayManager.auto.user = "bob";
|
||||
services.xserver.xautolock.enable = true;
|
||||
services.xserver.xautolock.time = 1;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
machine.fail("pgrep xlock")
|
||||
machine.sleep(120)
|
||||
machine.succeed("pgrep xlock")
|
||||
'';
|
||||
}
|
||||
)
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
machine.fail("pgrep xlock")
|
||||
machine.sleep(120)
|
||||
machine.succeed("pgrep xlock")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,71 +1,68 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xfce-wayland";
|
||||
{
|
||||
name = "xfce-wayland";
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./common/user-account.nix
|
||||
];
|
||||
{
|
||||
imports = [
|
||||
./common/user-account.nix
|
||||
];
|
||||
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.lightdm.enable = true;
|
||||
services.displayManager = {
|
||||
defaultSession = "xfce-wayland";
|
||||
autoLogin = {
|
||||
enable = true;
|
||||
user = "alice";
|
||||
};
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.lightdm.enable = true;
|
||||
services.displayManager = {
|
||||
defaultSession = "xfce-wayland";
|
||||
autoLogin = {
|
||||
enable = true;
|
||||
user = "alice";
|
||||
};
|
||||
|
||||
services.xserver.desktopManager.xfce.enable = true;
|
||||
services.xserver.desktopManager.xfce.enableWaylandSession = true;
|
||||
environment.systemPackages = [ pkgs.wlrctl ];
|
||||
};
|
||||
|
||||
enableOCR = true;
|
||||
services.xserver.desktopManager.xfce.enable = true;
|
||||
services.xserver.desktopManager.xfce.enableWaylandSession = true;
|
||||
environment.systemPackages = [ pkgs.wlrctl ];
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
rtdir = "XDG_RUNTIME_DIR=/run/user/${toString user.uid}";
|
||||
in
|
||||
''
|
||||
machine.wait_for_unit("display-manager.service")
|
||||
enableOCR = true;
|
||||
|
||||
with subtest("Wait for Wayland server"):
|
||||
machine.wait_for_file("/run/user/${toString user.uid}/wayland-0")
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
rtdir = "XDG_RUNTIME_DIR=/run/user/${toString user.uid}";
|
||||
in
|
||||
''
|
||||
machine.wait_for_unit("display-manager.service")
|
||||
|
||||
with subtest("Check that logging in has given the user ownership of devices"):
|
||||
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
|
||||
with subtest("Wait for Wayland server"):
|
||||
machine.wait_for_file("/run/user/${toString user.uid}/wayland-0")
|
||||
|
||||
with subtest("Check if Xfce components actually start"):
|
||||
for p in ["labwc", "xfdesktop", "xfce4-notifyd", "xfconfd", "xfce4-panel"]:
|
||||
machine.wait_until_succeeds(f"pgrep {p}")
|
||||
with subtest("Check that logging in has given the user ownership of devices"):
|
||||
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
|
||||
|
||||
with subtest("Open Xfce terminal"):
|
||||
machine.succeed("su - ${user.name} -c '${rtdir} xfce4-terminal >&2 &'")
|
||||
machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep xfce4-terminal'")
|
||||
with subtest("Check if Xfce components actually start"):
|
||||
for p in ["labwc", "xfdesktop", "xfce4-notifyd", "xfconfd", "xfce4-panel"]:
|
||||
machine.wait_until_succeeds(f"pgrep {p}")
|
||||
|
||||
with subtest("Open Thunar"):
|
||||
machine.succeed("su - ${user.name} -c '${rtdir} thunar >&2 &'")
|
||||
machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep Thunar'")
|
||||
machine.wait_for_text('(Pictures|Public|Templates|Videos)')
|
||||
with subtest("Open Xfce terminal"):
|
||||
machine.succeed("su - ${user.name} -c '${rtdir} xfce4-terminal >&2 &'")
|
||||
machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep xfce4-terminal'")
|
||||
|
||||
with subtest("Check if various environment variables are set"):
|
||||
cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf xfce4-panel)/environ"
|
||||
machine.succeed(f"{cmd} | grep 'XDG_SESSION_TYPE' | grep 'wayland'")
|
||||
machine.succeed(f"{cmd} | grep 'XFCE4_SESSION_COMPOSITOR' | grep 'labwc'")
|
||||
machine.succeed(f"{cmd} | grep 'XDG_CURRENT_DESKTOP' | grep 'XFCE'")
|
||||
with subtest("Open Thunar"):
|
||||
machine.succeed("su - ${user.name} -c '${rtdir} thunar >&2 &'")
|
||||
machine.wait_until_succeeds("su - ${user.name} -c '${rtdir} wlrctl toplevel list | grep Thunar'")
|
||||
machine.wait_for_text('(Pictures|Public|Templates|Videos)')
|
||||
|
||||
with subtest("Check if any coredumps are found"):
|
||||
machine.succeed("(coredumpctl --json=short 2>&1 || true) | grep 'No coredumps found'")
|
||||
machine.sleep(10)
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
)
|
||||
with subtest("Check if various environment variables are set"):
|
||||
cmd = "xargs --null --max-args=1 echo < /proc/$(pgrep -xf xfce4-panel)/environ"
|
||||
machine.succeed(f"{cmd} | grep 'XDG_SESSION_TYPE' | grep 'wayland'")
|
||||
machine.succeed(f"{cmd} | grep 'XFCE4_SESSION_COMPOSITOR' | grep 'labwc'")
|
||||
machine.succeed(f"{cmd} | grep 'XDG_CURRENT_DESKTOP' | grep 'XFCE'")
|
||||
|
||||
with subtest("Check if any coredumps are found"):
|
||||
machine.succeed("(coredumpctl --json=short 2>&1 || true) | grep 'No coredumps found'")
|
||||
machine.sleep(10)
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,76 +1,73 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xfce";
|
||||
{
|
||||
name = "xfce";
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./common/user-account.nix
|
||||
];
|
||||
{
|
||||
imports = [
|
||||
./common/user-account.nix
|
||||
];
|
||||
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.lightdm.enable = true;
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.lightdm.enable = true;
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "alice";
|
||||
};
|
||||
|
||||
services.xserver.desktopManager.xfce.enable = true;
|
||||
environment.systemPackages = [ pkgs.xfce.xfce4-whiskermenu-plugin ];
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "alice";
|
||||
};
|
||||
|
||||
enableOCR = true;
|
||||
services.xserver.desktopManager.xfce.enable = true;
|
||||
environment.systemPackages = [ pkgs.xfce.xfce4-whiskermenu-plugin ];
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${toString user.uid}/bus";
|
||||
in
|
||||
''
|
||||
with subtest("Wait for login"):
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/.Xauthority")
|
||||
machine.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
enableOCR = true;
|
||||
|
||||
with subtest("Check that logging in has given the user ownership of devices"):
|
||||
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${toString user.uid}/bus";
|
||||
in
|
||||
''
|
||||
with subtest("Wait for login"):
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/.Xauthority")
|
||||
machine.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
|
||||
with subtest("Check if Xfce components actually start"):
|
||||
machine.wait_for_window("xfce4-panel")
|
||||
machine.wait_for_window("Desktop")
|
||||
for i in ["xfwm4", "xfsettingsd", "xfdesktop", "xfce4-screensaver", "xfce4-notifyd", "xfconfd"]:
|
||||
machine.wait_until_succeeds(f"pgrep -f {i}")
|
||||
with subtest("Check that logging in has given the user ownership of devices"):
|
||||
machine.succeed("getfacl -p /dev/snd/timer | grep -q ${user.name}")
|
||||
|
||||
with subtest("Open whiskermenu"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfconf-query -c xfce4-panel -p /plugins/plugin-1 -t string -s whiskermenu -n >&2 &'")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfconf-query -c xfce4-panel -p /plugins/plugin-1/stay-on-focus-out -t bool -s true -n >&2 &'")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-panel -r >&2 &'")
|
||||
machine.wait_until_succeeds("journalctl -b --grep 'xfce4-panel: Restarting' -t xsession")
|
||||
machine.sleep(5)
|
||||
machine.wait_until_succeeds("pgrep -f libwhiskermenu")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-popup-whiskermenu >&2 &'")
|
||||
machine.wait_for_text('Mail Reader')
|
||||
# Close the menu.
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-popup-whiskermenu >&2 &'")
|
||||
with subtest("Check if Xfce components actually start"):
|
||||
machine.wait_for_window("xfce4-panel")
|
||||
machine.wait_for_window("Desktop")
|
||||
for i in ["xfwm4", "xfsettingsd", "xfdesktop", "xfce4-screensaver", "xfce4-notifyd", "xfconfd"]:
|
||||
machine.wait_until_succeeds(f"pgrep -f {i}")
|
||||
|
||||
with subtest("Open Xfce terminal"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 xfce4-terminal >&2 &'")
|
||||
machine.wait_for_window("Terminal")
|
||||
with subtest("Open whiskermenu"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfconf-query -c xfce4-panel -p /plugins/plugin-1 -t string -s whiskermenu -n >&2 &'")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfconf-query -c xfce4-panel -p /plugins/plugin-1/stay-on-focus-out -t bool -s true -n >&2 &'")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-panel -r >&2 &'")
|
||||
machine.wait_until_succeeds("journalctl -b --grep 'xfce4-panel: Restarting' -t xsession")
|
||||
machine.sleep(5)
|
||||
machine.wait_until_succeeds("pgrep -f libwhiskermenu")
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-popup-whiskermenu >&2 &'")
|
||||
machine.wait_for_text('Mail Reader')
|
||||
# Close the menu.
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 ${bus} xfce4-popup-whiskermenu >&2 &'")
|
||||
|
||||
with subtest("Open Thunar"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 thunar >&2 &'")
|
||||
machine.wait_for_window("Thunar")
|
||||
machine.wait_for_text('(Pictures|Public|Templates|Videos)')
|
||||
with subtest("Open Xfce terminal"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 xfce4-terminal >&2 &'")
|
||||
machine.wait_for_window("Terminal")
|
||||
|
||||
with subtest("Check if any coredumps are found"):
|
||||
machine.succeed("(coredumpctl --json=short 2>&1 || true) | grep 'No coredumps found'")
|
||||
machine.sleep(10)
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
)
|
||||
with subtest("Open Thunar"):
|
||||
machine.succeed("su - ${user.name} -c 'DISPLAY=:0 thunar >&2 &'")
|
||||
machine.wait_for_window("Thunar")
|
||||
machine.wait_for_text('(Pictures|Public|Templates|Videos)')
|
||||
|
||||
with subtest("Check if any coredumps are found"):
|
||||
machine.succeed("(coredumpctl --json=short 2>&1 || true) | grep 'No coredumps found'")
|
||||
machine.sleep(10)
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,44 +1,42 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "xmonad-xdg-autostart";
|
||||
meta.maintainers = with lib.maintainers; [ oxalica ];
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "xmonad-xdg-autostart";
|
||||
meta.maintainers = with lib.maintainers; [ oxalica ];
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, config, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
services.displayManager.defaultSession = "none+xmonad";
|
||||
services.xserver.windowManager.xmonad.enable = true;
|
||||
services.xserver.desktopManager.runXdgAutostartIfNone = true;
|
||||
nodes.machine =
|
||||
{ pkgs, config, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
services.displayManager.defaultSession = "none+xmonad";
|
||||
services.xserver.windowManager.xmonad.enable = true;
|
||||
services.xserver.desktopManager.runXdgAutostartIfNone = true;
|
||||
|
||||
environment.systemPackages = [
|
||||
(pkgs.writeTextFile {
|
||||
name = "test-xdg-autostart";
|
||||
destination = "/etc/xdg/autostart/test-xdg-autostart.desktop";
|
||||
text = ''
|
||||
[Desktop Entry]
|
||||
Name=test-xdg-autoatart
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=${pkgs.coreutils}/bin/touch ${config.users.users.alice.home}/xdg-autostart-executed
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
environment.systemPackages = [
|
||||
(pkgs.writeTextFile {
|
||||
name = "test-xdg-autostart";
|
||||
destination = "/etc/xdg/autostart/test-xdg-autostart.desktop";
|
||||
text = ''
|
||||
[Desktop Entry]
|
||||
Name=test-xdg-autoatart
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=${pkgs.coreutils}/bin/touch ${config.users.users.alice.home}/xdg-autostart-executed
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.config.users.users.alice;
|
||||
in
|
||||
''
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/xdg-autostart-executed")
|
||||
'';
|
||||
}
|
||||
)
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
in
|
||||
''
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/xdg-autostart-executed")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,131 +1,129 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
mkConfig = name: keys: ''
|
||||
import XMonad
|
||||
import XMonad.Operations (restart)
|
||||
import XMonad.Util.EZConfig
|
||||
import XMonad.Util.SessionStart
|
||||
import Control.Monad (when)
|
||||
import Text.Printf (printf)
|
||||
import System.Posix.Process (executeFile)
|
||||
import System.Info (arch,os)
|
||||
import System.Environment (getArgs)
|
||||
import System.FilePath ((</>))
|
||||
let
|
||||
mkConfig = name: keys: ''
|
||||
import XMonad
|
||||
import XMonad.Operations (restart)
|
||||
import XMonad.Util.EZConfig
|
||||
import XMonad.Util.SessionStart
|
||||
import Control.Monad (when)
|
||||
import Text.Printf (printf)
|
||||
import System.Posix.Process (executeFile)
|
||||
import System.Info (arch,os)
|
||||
import System.Environment (getArgs)
|
||||
import System.FilePath ((</>))
|
||||
|
||||
main = do
|
||||
dirs <- getDirectories
|
||||
launch (def { startupHook = startup } `additionalKeysP` myKeys) dirs
|
||||
main = do
|
||||
dirs <- getDirectories
|
||||
launch (def { startupHook = startup } `additionalKeysP` myKeys) dirs
|
||||
|
||||
startup = isSessionStart >>= \sessInit ->
|
||||
spawn "touch /tmp/${name}"
|
||||
>> if sessInit then setSessionStarted else spawn "xterm"
|
||||
startup = isSessionStart >>= \sessInit ->
|
||||
spawn "touch /tmp/${name}"
|
||||
>> if sessInit then setSessionStarted else spawn "xterm"
|
||||
|
||||
myKeys = [${builtins.concatStringsSep ", " keys}]
|
||||
myKeys = [${builtins.concatStringsSep ", " keys}]
|
||||
|
||||
compiledConfig = printf "xmonad-%s-%s" arch os
|
||||
compiledConfig = printf "xmonad-%s-%s" arch os
|
||||
|
||||
compileRestart resume = do
|
||||
dirs <- asks directories
|
||||
compileRestart resume = do
|
||||
dirs <- asks directories
|
||||
|
||||
whenX (recompile dirs True) $
|
||||
when resume writeStateToFile
|
||||
*> catchIO
|
||||
( do
|
||||
args <- getArgs
|
||||
executeFile (cacheDir dirs </> compiledConfig) False args Nothing
|
||||
)
|
||||
'';
|
||||
whenX (recompile dirs True) $
|
||||
when resume writeStateToFile
|
||||
*> catchIO
|
||||
( do
|
||||
args <- getArgs
|
||||
executeFile (cacheDir dirs </> compiledConfig) False args Nothing
|
||||
)
|
||||
'';
|
||||
|
||||
oldKeys = [
|
||||
''("M-C-x", spawn "xterm")''
|
||||
''("M-q", restart "xmonad" True)''
|
||||
''("M-C-q", compileRestart True)''
|
||||
''("M-C-t", spawn "touch /tmp/somefile")'' # create somefile
|
||||
oldKeys = [
|
||||
''("M-C-x", spawn "xterm")''
|
||||
''("M-q", restart "xmonad" True)''
|
||||
''("M-C-q", compileRestart True)''
|
||||
''("M-C-t", spawn "touch /tmp/somefile")'' # create somefile
|
||||
];
|
||||
|
||||
newKeys = [
|
||||
''("M-C-x", spawn "xterm")''
|
||||
''("M-q", restart "xmonad" True)''
|
||||
''("M-C-q", compileRestart True)''
|
||||
''("M-C-r", spawn "rm /tmp/somefile")'' # delete somefile
|
||||
];
|
||||
|
||||
newConfig = pkgs.writeText "xmonad.hs" (mkConfig "newXMonad" newKeys);
|
||||
in
|
||||
{
|
||||
name = "xmonad";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
nequissimus
|
||||
ivanbrennan
|
||||
];
|
||||
};
|
||||
|
||||
newKeys = [
|
||||
''("M-C-x", spawn "xterm")''
|
||||
''("M-q", restart "xmonad" True)''
|
||||
''("M-C-q", compileRestart True)''
|
||||
''("M-C-r", spawn "rm /tmp/somefile")'' # delete somefile
|
||||
];
|
||||
|
||||
newConfig = pkgs.writeText "xmonad.hs" (mkConfig "newXMonad" newKeys);
|
||||
in
|
||||
{
|
||||
name = "xmonad";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
nequissimus
|
||||
ivanbrennan
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
services.displayManager.defaultSession = "none+xmonad";
|
||||
services.xserver.windowManager.xmonad = {
|
||||
enable = true;
|
||||
enableConfiguredRecompile = true;
|
||||
enableContribAndExtras = true;
|
||||
extraPackages = with pkgs.haskellPackages; haskellPackages: [ xmobar ];
|
||||
config = mkConfig "oldXMonad" oldKeys;
|
||||
};
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
services.displayManager.defaultSession = "none+xmonad";
|
||||
services.xserver.windowManager.xmonad = {
|
||||
enable = true;
|
||||
enableConfiguredRecompile = true;
|
||||
enableContribAndExtras = true;
|
||||
extraPackages = with pkgs.haskellPackages; haskellPackages: [ xmobar ];
|
||||
config = mkConfig "oldXMonad" oldKeys;
|
||||
};
|
||||
};
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
in
|
||||
''
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/.Xauthority")
|
||||
machine.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
machine.send_key("alt-ctrl-x")
|
||||
machine.wait_for_window("${user.name}.*machine")
|
||||
machine.sleep(1)
|
||||
machine.screenshot("terminal1")
|
||||
machine.succeed("rm /tmp/oldXMonad")
|
||||
machine.send_key("alt-q")
|
||||
machine.wait_for_file("/tmp/oldXMonad")
|
||||
machine.wait_for_window("${user.name}.*machine")
|
||||
machine.sleep(1)
|
||||
machine.screenshot("terminal2")
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.config.users.users.alice;
|
||||
in
|
||||
''
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("${user.home}/.Xauthority")
|
||||
machine.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
machine.send_key("alt-ctrl-x")
|
||||
machine.wait_for_window("${user.name}.*machine")
|
||||
machine.sleep(1)
|
||||
machine.screenshot("terminal1")
|
||||
machine.succeed("rm /tmp/oldXMonad")
|
||||
machine.send_key("alt-q")
|
||||
machine.wait_for_file("/tmp/oldXMonad")
|
||||
machine.wait_for_window("${user.name}.*machine")
|
||||
machine.sleep(1)
|
||||
machine.screenshot("terminal2")
|
||||
# /tmp/somefile should not exist yet
|
||||
machine.fail("stat /tmp/somefile")
|
||||
|
||||
# /tmp/somefile should not exist yet
|
||||
machine.fail("stat /tmp/somefile")
|
||||
# original config has a keybinding that creates somefile
|
||||
machine.send_key("alt-ctrl-t")
|
||||
machine.wait_for_file("/tmp/somefile")
|
||||
|
||||
# original config has a keybinding that creates somefile
|
||||
machine.send_key("alt-ctrl-t")
|
||||
machine.wait_for_file("/tmp/somefile")
|
||||
# set up the new config
|
||||
machine.succeed("mkdir -p ${user.home}/.xmonad")
|
||||
machine.copy_from_host("${newConfig}", "${user.home}/.config/xmonad/xmonad.hs")
|
||||
|
||||
# set up the new config
|
||||
machine.succeed("mkdir -p ${user.home}/.xmonad")
|
||||
machine.copy_from_host("${newConfig}", "${user.home}/.config/xmonad/xmonad.hs")
|
||||
# recompile xmonad using the new config
|
||||
machine.send_key("alt-ctrl-q")
|
||||
machine.wait_for_file("/tmp/newXMonad")
|
||||
|
||||
# recompile xmonad using the new config
|
||||
machine.send_key("alt-ctrl-q")
|
||||
machine.wait_for_file("/tmp/newXMonad")
|
||||
# new config has a keybinding that deletes somefile
|
||||
machine.send_key("alt-ctrl-r")
|
||||
machine.wait_until_fails("stat /tmp/somefile", timeout=30)
|
||||
|
||||
# new config has a keybinding that deletes somefile
|
||||
machine.send_key("alt-ctrl-r")
|
||||
machine.wait_until_fails("stat /tmp/somefile", timeout=30)
|
||||
|
||||
# restart with the old config, and confirm the old keybinding is back
|
||||
machine.succeed("rm /tmp/oldXMonad")
|
||||
machine.send_key("alt-q")
|
||||
machine.wait_for_file("/tmp/oldXMonad")
|
||||
machine.send_key("alt-ctrl-t")
|
||||
machine.wait_for_file("/tmp/somefile")
|
||||
'';
|
||||
}
|
||||
)
|
||||
# restart with the old config, and confirm the old keybinding is back
|
||||
machine.succeed("rm /tmp/oldXMonad")
|
||||
machine.send_key("alt-q")
|
||||
machine.wait_for_file("/tmp/oldXMonad")
|
||||
machine.send_key("alt-ctrl-t")
|
||||
machine.wait_for_file("/tmp/somefile")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,21 +1,19 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "xpadneo";
|
||||
meta.maintainers = with lib.maintainers; [ kira-bruneau ];
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "xpadneo";
|
||||
meta.maintainers = with lib.maintainers; [ kira-bruneau ];
|
||||
|
||||
nodes = {
|
||||
machine = {
|
||||
config.hardware.xpadneo.enable = true;
|
||||
};
|
||||
nodes = {
|
||||
machine = {
|
||||
config.hardware.xpadneo.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# This is just a sanity check to make sure the module was
|
||||
# loaded. We'd have to find some way to mock an xbox controller if
|
||||
# we wanted more in-depth testing.
|
||||
testScript = ''
|
||||
machine.start();
|
||||
machine.succeed("modinfo hid_xpadneo | grep 'version:\s\+${pkgs.linuxPackages.xpadneo.version}'")
|
||||
'';
|
||||
}
|
||||
)
|
||||
# This is just a sanity check to make sure the module was
|
||||
# loaded. We'd have to find some way to mock an xbox controller if
|
||||
# we wanted more in-depth testing.
|
||||
testScript = ''
|
||||
machine.start();
|
||||
machine.succeed("modinfo hid_xpadneo | grep 'version:\s\+${pkgs.linuxPackages.xpadneo.version}'")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,110 +1,108 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# How to interactively test this module if the audio actually works
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# How to interactively test this module if the audio actually works
|
||||
|
||||
# - nix run .#pulseaudio-module-xrdp.tests.xrdp-with-audio-pulseaudio.driverInteractive
|
||||
# - test_script() # launches the terminal and the tests itself
|
||||
# - server.send_monitor_command("hostfwd_add tcp::3389-:3389") # forward the RDP port to the host
|
||||
# - Connect with the RDP client you like (ex: Remmina)
|
||||
# - Don't forget to enable audio support. In remmina: Advanced -> Audio output mode to Local (default is Off)
|
||||
# - Open a browser or something that plays sound. Ex: chromium
|
||||
# - nix run .#pulseaudio-module-xrdp.tests.xrdp-with-audio-pulseaudio.driverInteractive
|
||||
# - test_script() # launches the terminal and the tests itself
|
||||
# - server.send_monitor_command("hostfwd_add tcp::3389-:3389") # forward the RDP port to the host
|
||||
# - Connect with the RDP client you like (ex: Remmina)
|
||||
# - Don't forget to enable audio support. In remmina: Advanced -> Audio output mode to Local (default is Off)
|
||||
# - Open a browser or something that plays sound. Ex: chromium
|
||||
|
||||
name = "xrdp-with-audio-pulseaudio";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ lucasew ];
|
||||
};
|
||||
name = "xrdp-with-audio-pulseaudio";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ lucasew ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./common/user-account.nix ];
|
||||
nodes = {
|
||||
server =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./common/user-account.nix ];
|
||||
|
||||
environment.etc."xrdp/test.txt".text = "Shouldn't conflict";
|
||||
environment.etc."xrdp/test.txt".text = "Shouldn't conflict";
|
||||
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.audio.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.xterm}/bin/xterm";
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.audio.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.xterm}/bin/xterm";
|
||||
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
};
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
systemd.user.services.pactl-list = {
|
||||
script = ''
|
||||
while [ ! -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]; do
|
||||
sleep 1
|
||||
done
|
||||
systemd.user.services.pactl-list = {
|
||||
script = ''
|
||||
while [ ! -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]; do
|
||||
sleep 1
|
||||
${pkgs.pulseaudio}/bin/pactl list
|
||||
echo Source:
|
||||
${pkgs.pulseaudio}/bin/pactl get-default-source | tee /tmp/pulseaudio-source
|
||||
echo Sink:
|
||||
${pkgs.pulseaudio}/bin/pactl get-default-sink | tee /tmp/pulseaudio-sink
|
||||
done
|
||||
sleep 1
|
||||
${pkgs.pulseaudio}/bin/pactl list
|
||||
echo Source:
|
||||
${pkgs.pulseaudio}/bin/pactl get-default-source | tee /tmp/pulseaudio-source
|
||||
echo Sink:
|
||||
${pkgs.pulseaudio}/bin/pactl get-default-sink | tee /tmp/pulseaudio-sink
|
||||
|
||||
'';
|
||||
wantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 3389 ];
|
||||
'';
|
||||
wantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
networking.firewall.allowedTCPPorts = [ 3389 ];
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.freerdp ];
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.audio.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.icewm}/bin/icewm";
|
||||
environment.systemPackages = [ pkgs.freerdp ];
|
||||
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
};
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.audio.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.icewm}/bin/icewm";
|
||||
|
||||
services.pulseaudio = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.client.config.users.users.alice;
|
||||
in
|
||||
''
|
||||
start_all()
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.client.config.users.users.alice;
|
||||
in
|
||||
''
|
||||
start_all()
|
||||
|
||||
client.wait_for_x()
|
||||
client.wait_for_file("${user.home}/.Xauthority")
|
||||
client.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
client.wait_for_x()
|
||||
client.wait_for_file("${user.home}/.Xauthority")
|
||||
client.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
|
||||
client.sleep(5)
|
||||
client.sleep(5)
|
||||
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:127.0.0.1 /u:${user.name} /p:${user.password} /sound\n")
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:127.0.0.1 /u:${user.name} /p:${user.password} /sound\n")
|
||||
|
||||
client.sleep(10)
|
||||
client.sleep(10)
|
||||
|
||||
client.succeed("[ -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]") # checks if it's a socket
|
||||
client.sleep(5)
|
||||
client.screenshot("localrdp")
|
||||
client.succeed("[ -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]") # checks if it's a socket
|
||||
client.sleep(5)
|
||||
client.screenshot("localrdp")
|
||||
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:server /u:${user.name} /p:${user.password} /sound\n")
|
||||
client.sleep(10)
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:server /u:${user.name} /p:${user.password} /sound\n")
|
||||
client.sleep(10)
|
||||
|
||||
server.succeed("[ -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]") # checks if it's a socket
|
||||
server.succeed('[ "$(cat /tmp/pulseaudio-source)" == "xrdp-source" ]')
|
||||
server.succeed('[ "$(cat /tmp/pulseaudio-sink)" == "xrdp-sink" ]')
|
||||
client.screenshot("remoterdp")
|
||||
'';
|
||||
}
|
||||
)
|
||||
server.succeed("[ -S /tmp/.xrdp/xrdp_chansrv_audio_in_socket_* ]") # checks if it's a socket
|
||||
server.succeed('[ "$(cat /tmp/pulseaudio-source)" == "xrdp-source" ]')
|
||||
server.succeed('[ "$(cat /tmp/pulseaudio-sink)" == "xrdp-sink" ]')
|
||||
client.screenshot("remoterdp")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,60 +1,58 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xrdp";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ ];
|
||||
};
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xrdp";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./common/user-account.nix ];
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.xterm}/bin/xterm";
|
||||
networking.firewall.allowedTCPPorts = [ 3389 ];
|
||||
};
|
||||
nodes = {
|
||||
server =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./common/user-account.nix ];
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.xterm}/bin/xterm";
|
||||
networking.firewall.allowedTCPPorts = [ 3389 ];
|
||||
};
|
||||
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
environment.systemPackages = [ pkgs.freerdp ];
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.icewm}/bin/icewm";
|
||||
};
|
||||
};
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
environment.systemPackages = [ pkgs.freerdp ];
|
||||
services.xrdp.enable = true;
|
||||
services.xrdp.defaultWindowManager = "${pkgs.icewm}/bin/icewm";
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.client.config.users.users.alice;
|
||||
in
|
||||
''
|
||||
start_all()
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.client.users.users.alice;
|
||||
in
|
||||
''
|
||||
start_all()
|
||||
|
||||
client.wait_for_x()
|
||||
client.wait_for_file("${user.home}/.Xauthority")
|
||||
client.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
client.wait_for_x()
|
||||
client.wait_for_file("${user.home}/.Xauthority")
|
||||
client.succeed("xauth merge ${user.home}/.Xauthority")
|
||||
|
||||
client.sleep(5)
|
||||
client.sleep(5)
|
||||
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:127.0.0.1 /u:${user.name} /p:${user.password}\n")
|
||||
client.sleep(5)
|
||||
client.screenshot("localrdp")
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:127.0.0.1 /u:${user.name} /p:${user.password}\n")
|
||||
client.sleep(5)
|
||||
client.screenshot("localrdp")
|
||||
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:server /u:${user.name} /p:${user.password}\n")
|
||||
client.sleep(5)
|
||||
client.screenshot("remoterdp")
|
||||
'';
|
||||
}
|
||||
)
|
||||
client.execute("xterm >&2 &")
|
||||
client.sleep(1)
|
||||
client.send_chars("xfreerdp /cert-tofu /w:640 /h:480 /v:server /u:${user.name} /p:${user.password}\n")
|
||||
client.sleep(5)
|
||||
client.screenshot("remoterdp")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,54 +1,51 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "xss-lock";
|
||||
meta.maintainers = [ ];
|
||||
{
|
||||
name = "xss-lock";
|
||||
meta.maintainers = [ ];
|
||||
|
||||
nodes = {
|
||||
simple = {
|
||||
nodes = {
|
||||
simple = {
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
programs.xss-lock.enable = true;
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
};
|
||||
|
||||
custom_lockcmd =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
programs.xss-lock.enable = true;
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
};
|
||||
|
||||
custom_lockcmd =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
programs.xss-lock = {
|
||||
enable = true;
|
||||
extraOptions = [
|
||||
"-n"
|
||||
"${pkgs.libnotify}/bin/notify-send 'About to sleep!'"
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
|
||||
programs.xss-lock = {
|
||||
enable = true;
|
||||
extraOptions = [
|
||||
"-n"
|
||||
"${pkgs.libnotify}/bin/notify-send 'About to sleep!'"
|
||||
];
|
||||
lockerCommand = "${pkgs.xlockmore}/bin/xlock -mode ant";
|
||||
};
|
||||
lockerCommand = "${pkgs.xlockmore}/bin/xlock -mode ant";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
def perform_xsslock_test(machine, lockCmd):
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_unit("xss-lock.service", "alice")
|
||||
machine.fail(f"pgrep {lockCmd}")
|
||||
machine.succeed("su -l alice -c 'xset dpms force standby'")
|
||||
machine.wait_until_succeeds(f"pgrep {lockCmd}")
|
||||
testScript = ''
|
||||
def perform_xsslock_test(machine, lockCmd):
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_unit("xss-lock.service", "alice")
|
||||
machine.fail(f"pgrep {lockCmd}")
|
||||
machine.succeed("su -l alice -c 'xset dpms force standby'")
|
||||
machine.wait_until_succeeds(f"pgrep {lockCmd}")
|
||||
|
||||
|
||||
with subtest("simple"):
|
||||
perform_xsslock_test(simple, "i3lock")
|
||||
with subtest("simple"):
|
||||
perform_xsslock_test(simple, "i3lock")
|
||||
|
||||
with subtest("custom_cmd"):
|
||||
perform_xsslock_test(custom_lockcmd, "xlock")
|
||||
'';
|
||||
}
|
||||
)
|
||||
with subtest("custom_cmd"):
|
||||
perform_xsslock_test(custom_lockcmd, "xlock")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,26 +1,22 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xterm";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ nequissimus ];
|
||||
};
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "xterm";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ nequissimus ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ ./common/x11.nix ];
|
||||
services.xserver.desktopManager.xterm.enable = false;
|
||||
};
|
||||
nodes.machine = {
|
||||
imports = [ ./common/x11.nix ];
|
||||
services.xserver.desktopManager.xterm.enable = false;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_x()
|
||||
machine.succeed("DISPLAY=:0 xterm -title testterm -class testterm -fullscreen >&2 &")
|
||||
machine.sleep(2)
|
||||
machine.send_chars("echo $XTERM_VERSION >> /tmp/xterm_version\n")
|
||||
machine.wait_for_file("/tmp/xterm_version")
|
||||
assert "${pkgs.xterm.version}" in machine.succeed("cat /tmp/xterm_version")
|
||||
machine.screenshot("window")
|
||||
'';
|
||||
}
|
||||
)
|
||||
testScript = ''
|
||||
machine.wait_for_x()
|
||||
machine.succeed("DISPLAY=:0 xterm -title testterm -class testterm -fullscreen >&2 &")
|
||||
machine.sleep(2)
|
||||
machine.send_chars("echo $XTERM_VERSION >> /tmp/xterm_version\n")
|
||||
machine.wait_for_file("/tmp/xterm_version")
|
||||
assert "${pkgs.xterm.version}" in machine.succeed("cat /tmp/xterm_version")
|
||||
machine.screenshot("window")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,76 +1,74 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
|
||||
xxh-shell-zsh = pkgs.stdenv.mkDerivation {
|
||||
pname = "xxh-shell-zsh";
|
||||
version = "";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "xxh";
|
||||
repo = "xxh-shell-zsh";
|
||||
# gets rarely updated, we can then just replace the hash
|
||||
rev = "91e1f84f8d6e0852c3235d4813f341230cac439f";
|
||||
sha256 = "sha256-Y1FrIRxTd0yooK+ZzKcCd6bLSy5E2fRXYAzrIsm7rIc=";
|
||||
let
|
||||
inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
|
||||
xxh-shell-zsh = pkgs.stdenv.mkDerivation {
|
||||
pname = "xxh-shell-zsh";
|
||||
version = "";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "xxh";
|
||||
repo = "xxh-shell-zsh";
|
||||
# gets rarely updated, we can then just replace the hash
|
||||
rev = "91e1f84f8d6e0852c3235d4813f341230cac439f";
|
||||
sha256 = "sha256-Y1FrIRxTd0yooK+ZzKcCd6bLSy5E2fRXYAzrIsm7rIc=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace build.sh \
|
||||
--replace "echo Install wget or curl" "cp ${zsh-portable-binary} zsh-5.8-linux-x86_64.tar.gz" \
|
||||
--replace "command -v curl" "command -v this-should-not-trigger"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
mv * $out/
|
||||
'';
|
||||
};
|
||||
|
||||
zsh-portable-binary = pkgs.fetchurl {
|
||||
# kept in sync with https://github.com/xxh/xxh-shell-zsh/tree/master/build.sh#L27
|
||||
url = "https://github.com/romkatv/zsh-bin/releases/download/v3.0.1/zsh-5.8-linux-x86_64.tar.gz";
|
||||
sha256 = "sha256-i8flMd2Isc0uLoeYQNDnOGb/kK3oTFVqQgIx7aOAIIo=";
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "xxh";
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ lom ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server =
|
||||
{ ... }:
|
||||
{
|
||||
services.openssh.enable = true;
|
||||
users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace build.sh \
|
||||
--replace "echo Install wget or curl" "cp ${zsh-portable-binary} zsh-5.8-linux-x86_64.tar.gz" \
|
||||
--replace "command -v curl" "command -v this-should-not-trigger"
|
||||
'';
|
||||
client =
|
||||
{ ... }:
|
||||
{
|
||||
programs.zsh.enable = true;
|
||||
users.users.root.shell = pkgs.zsh;
|
||||
environment.systemPackages = with pkgs; [
|
||||
xxh
|
||||
git
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
mv * $out/
|
||||
'';
|
||||
};
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
zsh-portable-binary = pkgs.fetchurl {
|
||||
# kept in sync with https://github.com/xxh/xxh-shell-zsh/tree/master/build.sh#L27
|
||||
url = "https://github.com/romkatv/zsh-bin/releases/download/v3.0.1/zsh-5.8-linux-x86_64.tar.gz";
|
||||
sha256 = "sha256-i8flMd2Isc0uLoeYQNDnOGb/kK3oTFVqQgIx7aOAIIo=";
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "xxh";
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ lom ];
|
||||
};
|
||||
client.succeed("mkdir -m 700 /root/.ssh")
|
||||
|
||||
nodes = {
|
||||
server =
|
||||
{ ... }:
|
||||
{
|
||||
services.openssh.enable = true;
|
||||
users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
||||
};
|
||||
client.succeed(
|
||||
"cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa"
|
||||
)
|
||||
client.succeed("chmod 600 /root/.ssh/id_ecdsa")
|
||||
|
||||
client =
|
||||
{ ... }:
|
||||
{
|
||||
programs.zsh.enable = true;
|
||||
users.users.root.shell = pkgs.zsh;
|
||||
environment.systemPackages = with pkgs; [
|
||||
xxh
|
||||
git
|
||||
];
|
||||
};
|
||||
};
|
||||
server.wait_for_unit("sshd")
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
client.succeed("mkdir -m 700 /root/.ssh")
|
||||
|
||||
client.succeed(
|
||||
"cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa"
|
||||
)
|
||||
client.succeed("chmod 600 /root/.ssh/id_ecdsa")
|
||||
|
||||
server.wait_for_unit("sshd")
|
||||
|
||||
client.succeed("xxh server -i /root/.ssh/id_ecdsa +hc \'echo $0\' +i +s zsh +I xxh-shell-zsh+path+${xxh-shell-zsh} | grep -Fq '/root/.xxh/.xxh/shells/xxh-shell-zsh/build/zsh-bin/bin/zsh'")
|
||||
'';
|
||||
}
|
||||
)
|
||||
client.succeed("xxh server -i /root/.ssh/id_ecdsa +hc \'echo $0\' +i +s zsh +I xxh-shell-zsh+path+${xxh-shell-zsh} | grep -Fq '/root/.xxh/.xxh/shells/xxh-shell-zsh/build/zsh-bin/bin/zsh'")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,33 +1,30 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "yabar";
|
||||
meta.maintainers = [ ];
|
||||
{
|
||||
name = "yabar";
|
||||
meta.maintainers = [ ];
|
||||
|
||||
nodes.machine = {
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
nodes.machine = {
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
|
||||
test-support.displayManager.auto.user = "bob";
|
||||
test-support.displayManager.auto.user = "bob";
|
||||
|
||||
programs.yabar.enable = true;
|
||||
programs.yabar.bars = {
|
||||
top.indicators.date.exec = "YABAR_DATE";
|
||||
};
|
||||
programs.yabar.enable = true;
|
||||
programs.yabar.bars = {
|
||||
top.indicators.date.exec = "YABAR_DATE";
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
|
||||
# confirm proper startup
|
||||
machine.wait_for_unit("yabar.service", "bob")
|
||||
machine.sleep(10)
|
||||
machine.wait_for_unit("yabar.service", "bob")
|
||||
# confirm proper startup
|
||||
machine.wait_for_unit("yabar.service", "bob")
|
||||
machine.sleep(10)
|
||||
machine.wait_for_unit("yabar.service", "bob")
|
||||
|
||||
machine.screenshot("top_bar")
|
||||
'';
|
||||
}
|
||||
)
|
||||
machine.screenshot("top_bar")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -25,173 +25,169 @@ let
|
|||
danIp6 = bobPrefix + "::2";
|
||||
|
||||
in
|
||||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "yggdrasil";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ gazally ];
|
||||
};
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "yggdrasil";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ gazally ];
|
||||
};
|
||||
|
||||
nodes = rec {
|
||||
# Alice is listening for peerings on a specified port,
|
||||
# but has multicast peering disabled. Alice has part of her
|
||||
# yggdrasil config in Nix and part of it in a file.
|
||||
alice =
|
||||
{ ... }:
|
||||
{
|
||||
networking = {
|
||||
interfaces.eth1.ipv4.addresses = [
|
||||
{
|
||||
address = "192.168.1.200";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
firewall.allowedTCPPorts = [
|
||||
80
|
||||
12345
|
||||
];
|
||||
nodes = {
|
||||
# Alice is listening for peerings on a specified port,
|
||||
# but has multicast peering disabled. Alice has part of her
|
||||
# yggdrasil config in Nix and part of it in a file.
|
||||
alice =
|
||||
{ ... }:
|
||||
{
|
||||
networking = {
|
||||
interfaces.eth1.ipv4.addresses = [
|
||||
{
|
||||
address = "192.168.1.200";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
firewall.allowedTCPPorts = [
|
||||
80
|
||||
12345
|
||||
];
|
||||
};
|
||||
services.httpd.enable = true;
|
||||
services.httpd.adminAddr = "foo@example.org";
|
||||
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
settings = {
|
||||
Listen = [ "tcp://0.0.0.0:12345" ];
|
||||
MulticastInterfaces = [ ];
|
||||
};
|
||||
services.httpd.enable = true;
|
||||
services.httpd.adminAddr = "foo@example.org";
|
||||
configFile = toString (
|
||||
pkgs.writeTextFile {
|
||||
name = "yggdrasil-alice-conf";
|
||||
text = builtins.toJSON aliceKeys;
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
settings = {
|
||||
Listen = [ "tcp://0.0.0.0:12345" ];
|
||||
MulticastInterfaces = [ ];
|
||||
};
|
||||
configFile = toString (
|
||||
pkgs.writeTextFile {
|
||||
name = "yggdrasil-alice-conf";
|
||||
text = builtins.toJSON aliceKeys;
|
||||
# Bob is set up to peer with Alice, and also to do local multicast
|
||||
# peering. Bob's yggdrasil config is in a file.
|
||||
bob =
|
||||
{ ... }:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [ 54321 ];
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
openMulticastPort = true;
|
||||
configFile = toString (
|
||||
pkgs.writeTextFile {
|
||||
name = "yggdrasil-bob-conf";
|
||||
text = builtins.toJSON bobConfig;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = 1;
|
||||
|
||||
networking = {
|
||||
bridges.br0.interfaces = [ ];
|
||||
interfaces.br0 = {
|
||||
ipv6.addresses = [
|
||||
{
|
||||
address = bobPrefix + "::1";
|
||||
prefixLength = 64;
|
||||
}
|
||||
);
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Bob is set up to peer with Alice, and also to do local multicast
|
||||
# peering. Bob's yggdrasil config is in a file.
|
||||
bob =
|
||||
{ ... }:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [ 54321 ];
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
openMulticastPort = true;
|
||||
configFile = toString (
|
||||
pkgs.writeTextFile {
|
||||
name = "yggdrasil-bob-conf";
|
||||
text = builtins.toJSON bobConfig;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = 1;
|
||||
|
||||
networking = {
|
||||
bridges.br0.interfaces = [ ];
|
||||
interfaces.br0 = {
|
||||
ipv6.addresses = [
|
||||
# dan is a node inside a container running on bob's host.
|
||||
containers.dan = {
|
||||
autoStart = true;
|
||||
privateNetwork = true;
|
||||
hostBridge = "br0";
|
||||
config = {
|
||||
networking.interfaces.eth0.ipv6 = {
|
||||
addresses = [
|
||||
{
|
||||
address = bobPrefix + "::1";
|
||||
address = bobPrefix + "::2";
|
||||
prefixLength = 64;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# dan is a node inside a container running on bob's host.
|
||||
containers.dan = {
|
||||
autoStart = true;
|
||||
privateNetwork = true;
|
||||
hostBridge = "br0";
|
||||
config =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
networking.interfaces.eth0.ipv6 = {
|
||||
addresses = [
|
||||
{
|
||||
address = bobPrefix + "::2";
|
||||
prefixLength = 64;
|
||||
}
|
||||
];
|
||||
routes = [
|
||||
{
|
||||
address = "200::";
|
||||
prefixLength = 7;
|
||||
via = bobPrefix + "::1";
|
||||
}
|
||||
];
|
||||
};
|
||||
services.httpd.enable = true;
|
||||
services.httpd.adminAddr = "foo@example.org";
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Carol only does local peering. Carol's yggdrasil config is all Nix.
|
||||
carol =
|
||||
{ ... }:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [ 43210 ];
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
extraArgs = [
|
||||
"-loglevel"
|
||||
"error"
|
||||
];
|
||||
denyDhcpcdInterfaces = [ "ygg0" ];
|
||||
settings = {
|
||||
IfTAPMode = true;
|
||||
IfName = "ygg0";
|
||||
MulticastInterfaces = [
|
||||
routes = [
|
||||
{
|
||||
Port = 43210;
|
||||
address = "200::";
|
||||
prefixLength = 7;
|
||||
via = bobPrefix + "::1";
|
||||
}
|
||||
];
|
||||
openMulticastPort = true;
|
||||
};
|
||||
persistentKeys = true;
|
||||
services.httpd.enable = true;
|
||||
services.httpd.adminAddr = "foo@example.org";
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import re
|
||||
# Carol only does local peering. Carol's yggdrasil config is all Nix.
|
||||
carol =
|
||||
{ ... }:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [ 43210 ];
|
||||
services.yggdrasil = {
|
||||
enable = true;
|
||||
extraArgs = [
|
||||
"-loglevel"
|
||||
"error"
|
||||
];
|
||||
denyDhcpcdInterfaces = [ "ygg0" ];
|
||||
settings = {
|
||||
IfTAPMode = true;
|
||||
IfName = "ygg0";
|
||||
MulticastInterfaces = [
|
||||
{
|
||||
Port = 43210;
|
||||
}
|
||||
];
|
||||
openMulticastPort = true;
|
||||
};
|
||||
persistentKeys = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Give Alice a head start so she is ready when Bob calls.
|
||||
alice.start()
|
||||
alice.wait_for_unit("yggdrasil.service")
|
||||
testScript = ''
|
||||
import re
|
||||
|
||||
bob.start()
|
||||
carol.start()
|
||||
bob.wait_for_unit("default.target")
|
||||
carol.wait_for_unit("yggdrasil.service")
|
||||
# Give Alice a head start so she is ready when Bob calls.
|
||||
alice.start()
|
||||
alice.wait_for_unit("yggdrasil.service")
|
||||
|
||||
ip_addr_show = "ip -o -6 addr show dev ygg0 scope global"
|
||||
carol.wait_until_succeeds(f"[ `{ip_addr_show} | grep -v tentative | wc -l` -ge 1 ]")
|
||||
carol_ip6 = re.split(" +|/", carol.succeed(ip_addr_show))[3]
|
||||
bob.start()
|
||||
carol.start()
|
||||
bob.wait_for_unit("default.target")
|
||||
carol.wait_for_unit("yggdrasil.service")
|
||||
|
||||
# If Alice can talk to Carol, then Bob's outbound peering and Carol's
|
||||
# local peering have succeeded and everybody is connected.
|
||||
alice.wait_until_succeeds(f"ping -c 1 {carol_ip6}")
|
||||
alice.succeed("ping -c 1 ${bobIp6}")
|
||||
ip_addr_show = "ip -o -6 addr show dev ygg0 scope global"
|
||||
carol.wait_until_succeeds(f"[ `{ip_addr_show} | grep -v tentative | wc -l` -ge 1 ]")
|
||||
carol_ip6 = re.split(" +|/", carol.succeed(ip_addr_show))[3]
|
||||
|
||||
bob.succeed("ping -c 1 ${aliceIp6}")
|
||||
bob.succeed(f"ping -c 1 {carol_ip6}")
|
||||
# If Alice can talk to Carol, then Bob's outbound peering and Carol's
|
||||
# local peering have succeeded and everybody is connected.
|
||||
alice.wait_until_succeeds(f"ping -c 1 {carol_ip6}")
|
||||
alice.succeed("ping -c 1 ${bobIp6}")
|
||||
|
||||
carol.succeed("ping -c 1 ${aliceIp6}")
|
||||
carol.succeed("ping -c 1 ${bobIp6}")
|
||||
carol.succeed("ping -c 1 ${bobPrefix}::1")
|
||||
carol.succeed("ping -c 8 ${danIp6}")
|
||||
bob.succeed("ping -c 1 ${aliceIp6}")
|
||||
bob.succeed(f"ping -c 1 {carol_ip6}")
|
||||
|
||||
carol.fail("journalctl -u dhcpcd | grep ygg0")
|
||||
carol.succeed("ping -c 1 ${aliceIp6}")
|
||||
carol.succeed("ping -c 1 ${bobIp6}")
|
||||
carol.succeed("ping -c 1 ${bobPrefix}::1")
|
||||
carol.succeed("ping -c 8 ${danIp6}")
|
||||
|
||||
alice.wait_for_unit("httpd.service")
|
||||
carol.succeed("curl --fail -g http://[${aliceIp6}]")
|
||||
carol.succeed("curl --fail -g http://[${danIp6}]")
|
||||
'';
|
||||
}
|
||||
)
|
||||
carol.fail("journalctl -u dhcpcd | grep ygg0")
|
||||
|
||||
alice.wait_for_unit("httpd.service")
|
||||
carol.succeed("curl --fail -g http://[${aliceIp6}]")
|
||||
carol.succeed("curl --fail -g http://[${danIp6}]")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,36 +1,34 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "your_spotify";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ patrickdag ];
|
||||
};
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "your_spotify";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ patrickdag ];
|
||||
};
|
||||
|
||||
nodes.machine = {
|
||||
services.your_spotify = {
|
||||
enable = true;
|
||||
spotifySecretFile = pkgs.writeText "spotifySecretFile" "deadbeef";
|
||||
settings = {
|
||||
CLIENT_ENDPOINT = "http://localhost";
|
||||
API_ENDPOINT = "http://localhost:3000";
|
||||
SPOTIFY_PUBLIC = "beefdead";
|
||||
};
|
||||
enableLocalDB = true;
|
||||
nginxVirtualHost = "localhost";
|
||||
nodes.machine = {
|
||||
services.your_spotify = {
|
||||
enable = true;
|
||||
spotifySecretFile = pkgs.writeText "spotifySecretFile" "deadbeef";
|
||||
settings = {
|
||||
CLIENT_ENDPOINT = "http://localhost";
|
||||
API_ENDPOINT = "http://localhost:3000";
|
||||
SPOTIFY_PUBLIC = "beefdead";
|
||||
};
|
||||
enableLocalDB = true;
|
||||
nginxVirtualHost = "localhost";
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("your_spotify.service")
|
||||
testScript = ''
|
||||
machine.wait_for_unit("your_spotify.service")
|
||||
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.wait_for_open_port(80)
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.wait_for_open_port(80)
|
||||
|
||||
out = machine.succeed("curl --fail -X GET 'http://localhost:3000/'")
|
||||
assert "Hello !" in out
|
||||
out = machine.succeed("curl --fail -X GET 'http://localhost:3000/'")
|
||||
assert "Hello !" in out
|
||||
|
||||
out = machine.succeed("curl --fail -X GET 'http://localhost:80/'")
|
||||
assert "<title>Your Spotify</title>" in out
|
||||
'';
|
||||
}
|
||||
)
|
||||
out = machine.succeed("curl --fail -X GET 'http://localhost:80/'")
|
||||
assert "<title>Your Spotify</title>" in out
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,42 +1,38 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, pkgs, ... }:
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
name = "zammad";
|
||||
{
|
||||
name = "zammad";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
taeer
|
||||
netali
|
||||
];
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
taeer
|
||||
netali
|
||||
];
|
||||
|
||||
nodes.machine =
|
||||
{ config, ... }:
|
||||
{
|
||||
virtualisation = {
|
||||
memorySize = 2048;
|
||||
};
|
||||
nodes.machine = {
|
||||
virtualisation = {
|
||||
memorySize = 2048;
|
||||
};
|
||||
|
||||
services.zammad.enable = true;
|
||||
services.zammad.secretKeyBaseFile = pkgs.writeText "secret" ''
|
||||
52882ef142066e09ab99ce816ba72522e789505caba224a52d750ec7dc872c2c371b2fd19f16b25dfbdd435a4dd46cb3df9f82eb63fafad715056bdfe25740d6
|
||||
'';
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("postgresql.service")
|
||||
machine.wait_for_unit("redis-zammad.service")
|
||||
machine.wait_for_unit("zammad-web.service")
|
||||
machine.wait_for_unit("zammad-websocket.service")
|
||||
machine.wait_for_unit("zammad-worker.service")
|
||||
# wait for zammad to fully come up
|
||||
machine.sleep(120)
|
||||
|
||||
# without the grep the command does not produce valid utf-8 for some reason
|
||||
with subtest("welcome screen loads"):
|
||||
machine.succeed(
|
||||
"curl -sSfL http://localhost:3000/ | grep '<title>Zammad Helpdesk</title>'"
|
||||
)
|
||||
services.zammad.enable = true;
|
||||
services.zammad.secretKeyBaseFile = pkgs.writeText "secret" ''
|
||||
52882ef142066e09ab99ce816ba72522e789505caba224a52d750ec7dc872c2c371b2fd19f16b25dfbdd435a4dd46cb3df9f82eb63fafad715056bdfe25740d6
|
||||
'';
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_unit("postgresql.service")
|
||||
machine.wait_for_unit("redis-zammad.service")
|
||||
machine.wait_for_unit("zammad-web.service")
|
||||
machine.wait_for_unit("zammad-websocket.service")
|
||||
machine.wait_for_unit("zammad-worker.service")
|
||||
# wait for zammad to fully come up
|
||||
machine.sleep(120)
|
||||
|
||||
# without the grep the command does not produce valid utf-8 for some reason
|
||||
with subtest("welcome screen loads"):
|
||||
machine.succeed(
|
||||
"curl -sSfL http://localhost:3000/ | grep '<title>Zammad Helpdesk</title>'"
|
||||
)
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,71 +1,68 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
name = "zenohd";
|
||||
meta.maintainers = [ lib.maintainers.markuskowa ];
|
||||
{
|
||||
name = "zenohd";
|
||||
meta.maintainers = [ lib.maintainers.markuskowa ];
|
||||
|
||||
nodes = {
|
||||
router =
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
7447 # zenohd default port
|
||||
config.services.zenohd.settings.plugins.mqtt.port
|
||||
config.services.zenohd.settings.plugins.webserver.http_port
|
||||
nodes = {
|
||||
router =
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
7447 # zenohd default port
|
||||
config.services.zenohd.settings.plugins.mqtt.port
|
||||
config.services.zenohd.settings.plugins.webserver.http_port
|
||||
];
|
||||
|
||||
services.zenohd = {
|
||||
enable = true;
|
||||
|
||||
plugins = with pkgs; [
|
||||
zenoh-plugin-mqtt
|
||||
zenoh-plugin-webserver
|
||||
];
|
||||
|
||||
services.zenohd = {
|
||||
enable = true;
|
||||
backends = with pkgs; [
|
||||
zenoh-backend-filesystem
|
||||
zenoh-backend-rocksdb
|
||||
];
|
||||
|
||||
plugins = with pkgs; [
|
||||
zenoh-plugin-mqtt
|
||||
zenoh-plugin-webserver
|
||||
];
|
||||
|
||||
backends = with pkgs; [
|
||||
zenoh-backend-filesystem
|
||||
zenoh-backend-rocksdb
|
||||
];
|
||||
|
||||
settings = {
|
||||
plugins = {
|
||||
mqtt = {
|
||||
port = 1883;
|
||||
allow = ".*";
|
||||
settings = {
|
||||
plugins = {
|
||||
mqtt = {
|
||||
port = 1883;
|
||||
allow = ".*";
|
||||
};
|
||||
webserver.http_port = 8000;
|
||||
storage_manager = {
|
||||
volumes = {
|
||||
fs = { };
|
||||
rocksdb = { };
|
||||
};
|
||||
webserver.http_port = 8000;
|
||||
storage_manager = {
|
||||
volumes = {
|
||||
fs = { };
|
||||
rocksdb = { };
|
||||
storages = {
|
||||
mem = {
|
||||
key_expr = "mem/**";
|
||||
volume = "memory";
|
||||
};
|
||||
storages = {
|
||||
mem = {
|
||||
key_expr = "mem/**";
|
||||
volume = "memory";
|
||||
fs = {
|
||||
key_expr = "fs/**";
|
||||
volume = {
|
||||
id = "fs";
|
||||
dir = "zenoh-fs";
|
||||
strip_prefix = "fs";
|
||||
};
|
||||
fs = {
|
||||
key_expr = "fs/**";
|
||||
volume = {
|
||||
id = "fs";
|
||||
dir = "zenoh-fs";
|
||||
strip_prefix = "fs";
|
||||
};
|
||||
};
|
||||
rocksdb = {
|
||||
key_expr = "rocksdb/**";
|
||||
volume = {
|
||||
id = "rocksdb";
|
||||
dir = "zenoh-rocksdb";
|
||||
strip_prefix = "rocksdb";
|
||||
create_db = true;
|
||||
};
|
||||
};
|
||||
rocksdb = {
|
||||
key_expr = "rocksdb/**";
|
||||
volume = {
|
||||
id = "rocksdb";
|
||||
dir = "zenoh-rocksdb";
|
||||
strip_prefix = "rocksdb";
|
||||
create_db = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -73,21 +70,21 @@ import ./make-test-python.nix (
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
client = {
|
||||
environment.systemPackages = [
|
||||
pkgs.mosquitto
|
||||
];
|
||||
};
|
||||
|
||||
client = {
|
||||
environment.systemPackages = [
|
||||
pkgs.mosquitto
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
router.wait_for_unit("zenohd.service")
|
||||
client.wait_for_unit("multi-user.target")
|
||||
testScript = ''
|
||||
router.wait_for_unit("zenohd.service")
|
||||
client.wait_for_unit("multi-user.target")
|
||||
|
||||
for be in ["fs", "rocksdb", "mem" ]:
|
||||
client.succeed(f"mosquitto_pub -h router -t {be}/test -m hello")
|
||||
client.succeed(f"curl router:8000/{be}/test | grep hello")
|
||||
'';
|
||||
}
|
||||
)
|
||||
for be in ["fs", "rocksdb", "mem" ]:
|
||||
client.succeed(f"mosquitto_pub -h router -t {be}/test -m hello")
|
||||
client.succeed(f"curl router:8000/{be}/test | grep hello")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
port = 43110;
|
||||
in
|
||||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "zeronet-conservancy";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ fgaz ];
|
||||
{
|
||||
name = "zeronet-conservancy";
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ fgaz ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.zeronet = {
|
||||
enable = true;
|
||||
package = pkgs.zeronet-conservancy;
|
||||
inherit port;
|
||||
};
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
services.zeronet = {
|
||||
enable = true;
|
||||
package = pkgs.zeronet-conservancy;
|
||||
inherit port;
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
machine.wait_for_unit("zeronet.service")
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("zeronet.service")
|
||||
machine.wait_for_open_port(${toString port})
|
||||
|
||||
machine.wait_for_open_port(${toString port})
|
||||
|
||||
machine.succeed("curl --fail -H 'Accept: text/html, application/xml, */*' localhost:${toString port}/Stats")
|
||||
'';
|
||||
}
|
||||
)
|
||||
machine.succeed("curl --fail -H 'Accept: text/html, application/xml, */*' localhost:${toString port}/Stats")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,44 +1,42 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "zipline";
|
||||
meta.maintainers = with lib.maintainers; [ defelo ];
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "zipline";
|
||||
meta.maintainers = with lib.maintainers; [ defelo ];
|
||||
|
||||
nodes.machine = {
|
||||
services.zipline = {
|
||||
enable = true;
|
||||
settings = {
|
||||
CORE_HOSTNAME = "127.0.0.1";
|
||||
CORE_PORT = 8000;
|
||||
};
|
||||
environmentFiles = [
|
||||
(builtins.toFile "zipline.env" ''
|
||||
CORE_SECRET=DMlouex3W0QLRbVwkUafNnNws5jpgRDX
|
||||
'')
|
||||
];
|
||||
nodes.machine = {
|
||||
services.zipline = {
|
||||
enable = true;
|
||||
settings = {
|
||||
CORE_HOSTNAME = "127.0.0.1";
|
||||
CORE_PORT = 8000;
|
||||
};
|
||||
|
||||
networking.hosts."127.0.0.1" = [ "zipline.local" ];
|
||||
environmentFiles = [
|
||||
(builtins.toFile "zipline.env" ''
|
||||
CORE_SECRET=DMlouex3W0QLRbVwkUafNnNws5jpgRDX
|
||||
'')
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import json
|
||||
import re
|
||||
networking.hosts."127.0.0.1" = [ "zipline.local" ];
|
||||
};
|
||||
|
||||
machine.wait_for_unit("zipline.service")
|
||||
machine.wait_for_open_port(8000)
|
||||
testScript = ''
|
||||
import json
|
||||
import re
|
||||
|
||||
resp = machine.succeed("curl zipline.local:8000/api/setup -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
||||
data = json.loads(resp.splitlines()[-1])
|
||||
assert data["firstSetup"] is True
|
||||
assert data["user"]["username"] == "administrator"
|
||||
assert data["user"]["role"] == "SUPERADMIN"
|
||||
machine.wait_for_unit("zipline.service")
|
||||
machine.wait_for_open_port(8000)
|
||||
|
||||
resp = machine.succeed("curl zipline.local:8000/api/auth/login -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
||||
resp = machine.succeed("curl zipline.local:8000/api/setup -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
||||
data = json.loads(resp.splitlines()[-1])
|
||||
assert data["firstSetup"] is True
|
||||
assert data["user"]["username"] == "administrator"
|
||||
assert data["user"]["role"] == "SUPERADMIN"
|
||||
|
||||
assert (cookie := re.search(r"(?m)^< set-cookie: ([^;]*)", resp))
|
||||
resp = machine.succeed(f"curl zipline.local:8000/api/user -H 'Cookie: {cookie[1]}'")
|
||||
assert json.loads(resp)["user"]["id"] == data["user"]["id"]
|
||||
'';
|
||||
}
|
||||
)
|
||||
resp = machine.succeed("curl zipline.local:8000/api/auth/login -v -X POST -H 'Content-Type: application/json' -d '{\"username\": \"administrator\", \"password\": \"password\"}' 2>&1")
|
||||
|
||||
assert (cookie := re.search(r"(?m)^< set-cookie: ([^;]*)", resp))
|
||||
resp = machine.succeed(f"curl zipline.local:8000/api/user -H 'Cookie: {cookie[1]}'")
|
||||
assert json.loads(resp)["user"]["id"] == data["user"]["id"]
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,26 +1,24 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
name = "zoneminder";
|
||||
meta.maintainers = with lib.maintainers; [ danielfullmer ];
|
||||
{
|
||||
name = "zoneminder";
|
||||
meta.maintainers = with lib.maintainers; [ danielfullmer ];
|
||||
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
services.zoneminder = {
|
||||
enable = true;
|
||||
database.createLocally = true;
|
||||
database.username = "zoneminder";
|
||||
};
|
||||
time.timeZone = "America/New_York";
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
services.zoneminder = {
|
||||
enable = true;
|
||||
database.createLocally = true;
|
||||
database.username = "zoneminder";
|
||||
};
|
||||
time.timeZone = "America/New_York";
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("zoneminder.service")
|
||||
machine.wait_for_unit("nginx.service")
|
||||
machine.wait_for_open_port(8095)
|
||||
machine.succeed("curl --fail http://localhost:8095/")
|
||||
'';
|
||||
}
|
||||
)
|
||||
testScript = ''
|
||||
machine.wait_for_unit("zoneminder.service")
|
||||
machine.wait_for_unit("nginx.service")
|
||||
machine.wait_for_open_port(8095)
|
||||
machine.succeed("curl --fail http://localhost:8095/")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,54 +1,52 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
|
||||
perlEnv = pkgs.perl.withPackages (p: [ p.NetZooKeeper ]);
|
||||
perlEnv = pkgs.perl.withPackages (p: [ p.NetZooKeeper ]);
|
||||
|
||||
in
|
||||
{
|
||||
name = "zookeeper";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
nequissimus
|
||||
ztzg
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "zookeeper";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
nequissimus
|
||||
ztzg
|
||||
];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server =
|
||||
{ ... }:
|
||||
{
|
||||
services.zookeeper = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 2181 ];
|
||||
nodes = {
|
||||
server =
|
||||
{ ... }:
|
||||
{
|
||||
services.zookeeper = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
networking.firewall.allowedTCPPorts = [ 2181 ];
|
||||
};
|
||||
};
|
||||
|
||||
server.wait_for_unit("zookeeper")
|
||||
server.wait_for_unit("network.target")
|
||||
server.wait_for_open_port(2181)
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 create /foo bar"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 set /foo hello"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 get /foo | grep hello"
|
||||
)
|
||||
server.wait_for_unit("zookeeper")
|
||||
server.wait_for_unit("network.target")
|
||||
server.wait_for_open_port(2181)
|
||||
|
||||
server.wait_until_succeeds(
|
||||
"${perlEnv}/bin/perl -E 'use Net::ZooKeeper qw(:acls); $z=Net::ZooKeeper->new(q(localhost:2181)); $z->create(qw(/perl foo acl), ZOO_OPEN_ACL_UNSAFE) || die $z->get_error()'"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${perlEnv}/bin/perl -E 'use Net::ZooKeeper qw(:acls); $z=Net::ZooKeeper->new(q(localhost:2181)); $z->get(qw(/perl)) eq qw(foo) || die $z->get_error()'"
|
||||
)
|
||||
'';
|
||||
}
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 create /foo bar"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 set /foo hello"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${pkgs.zookeeper}/bin/zkCli.sh -server localhost:2181 get /foo | grep hello"
|
||||
)
|
||||
|
||||
server.wait_until_succeeds(
|
||||
"${perlEnv}/bin/perl -E 'use Net::ZooKeeper qw(:acls); $z=Net::ZooKeeper->new(q(localhost:2181)); $z->create(qw(/perl foo acl), ZOO_OPEN_ACL_UNSAFE) || die $z->get_error()'"
|
||||
)
|
||||
server.wait_until_succeeds(
|
||||
"${perlEnv}/bin/perl -E 'use Net::ZooKeeper qw(:acls); $z=Net::ZooKeeper->new(q(localhost:2181)); $z->get(qw(/perl)) eq qw(foo) || die $z->get_error()'"
|
||||
)
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import ./make-test-python.nix {
|
||||
{
|
||||
name = "zram-generator";
|
||||
|
||||
nodes = {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import ./make-test-python.nix ({
|
||||
{
|
||||
name = "zrepl";
|
||||
|
||||
nodes.host =
|
||||
{ config, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
config = {
|
||||
# Prerequisites for ZFS and tests.
|
||||
|
@ -73,4 +73,4 @@ import ./make-test-python.nix ({
|
|||
"zrepl_zfs_snapshot_duration_count{filesystem=\"test\"}" in out
|
||||
), "zrepl snapshot counter for test was not found in Prometheus output"
|
||||
'';
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,40 +1,38 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "zsh-history";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ ];
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "zsh-history";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
nodes.default =
|
||||
{ ... }:
|
||||
{
|
||||
programs = {
|
||||
zsh.enable = true;
|
||||
};
|
||||
environment.systemPackages = [ pkgs.zsh-history ];
|
||||
programs.zsh.interactiveShellInit = ''
|
||||
source ${pkgs.zsh-history.out}/share/zsh/init.zsh
|
||||
'';
|
||||
users.users.root.shell = "${pkgs.zsh}/bin/zsh";
|
||||
};
|
||||
|
||||
nodes.default =
|
||||
{ ... }:
|
||||
{
|
||||
programs = {
|
||||
zsh.enable = true;
|
||||
};
|
||||
environment.systemPackages = [ pkgs.zsh-history ];
|
||||
programs.zsh.interactiveShellInit = ''
|
||||
source ${pkgs.zsh-history.out}/share/zsh/init.zsh
|
||||
'';
|
||||
users.users.root.shell = "${pkgs.zsh}/bin/zsh";
|
||||
};
|
||||
testScript = ''
|
||||
start_all()
|
||||
default.wait_for_unit("multi-user.target")
|
||||
default.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
default.wait_for_unit("multi-user.target")
|
||||
default.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
|
||||
# Login
|
||||
default.wait_until_tty_matches("1", "login: ")
|
||||
default.send_chars("root\n")
|
||||
default.wait_until_tty_matches("1", r"\nroot@default\b")
|
||||
|
||||
# Login
|
||||
default.wait_until_tty_matches("1", "login: ")
|
||||
default.send_chars("root\n")
|
||||
default.wait_until_tty_matches("1", r"\nroot@default\b")
|
||||
# Generate some history
|
||||
default.send_chars("echo foobar\n")
|
||||
default.wait_until_tty_matches("1", "foobar")
|
||||
|
||||
# Generate some history
|
||||
default.send_chars("echo foobar\n")
|
||||
default.wait_until_tty_matches("1", "foobar")
|
||||
|
||||
# Ensure that command was recorded in history
|
||||
default.succeed("/run/current-system/sw/bin/history list | grep -q foobar")
|
||||
'';
|
||||
}
|
||||
)
|
||||
# Ensure that command was recorded in history
|
||||
default.succeed("/run/current-system/sw/bin/history list | grep -q foobar")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,31 +1,29 @@
|
|||
import ./make-test-python.nix (
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "zwave-js-ui";
|
||||
meta.maintainers = with lib.maintainers; [ cdombroski ];
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "zwave-js-ui";
|
||||
meta.maintainers = with lib.maintainers; [ cdombroski ];
|
||||
|
||||
nodes = {
|
||||
machine =
|
||||
{ ... }:
|
||||
{
|
||||
services.zwave-js-ui = {
|
||||
enable = true;
|
||||
serialPort = "/dev/null";
|
||||
settings = {
|
||||
HOST = "::";
|
||||
PORT = "9999";
|
||||
};
|
||||
nodes = {
|
||||
machine =
|
||||
{ ... }:
|
||||
{
|
||||
services.zwave-js-ui = {
|
||||
enable = true;
|
||||
serialPort = "/dev/null";
|
||||
settings = {
|
||||
HOST = "::";
|
||||
PORT = "9999";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
machine.wait_for_unit("zwave-js-ui.service")
|
||||
machine.wait_for_open_port(9999)
|
||||
machine.wait_until_succeeds("journalctl --since -1m --unit zwave-js-ui --grep 'Listening on port 9999host :: protocol HTTP'")
|
||||
machine.wait_for_file("/var/lib/zwave-js-ui/users.json")
|
||||
'';
|
||||
}
|
||||
)
|
||||
machine.wait_for_unit("zwave-js-ui.service")
|
||||
machine.wait_for_open_port(9999)
|
||||
machine.wait_until_succeeds("journalctl --since -1m --unit zwave-js-ui --grep 'Listening on port 9999host :: protocol HTTP'")
|
||||
machine.wait_for_file("/var/lib/zwave-js-ui/users.json")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,38 +1,34 @@
|
|||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
secretsConfigFile = pkgs.writeText "secrets.json" (
|
||||
builtins.toJSON {
|
||||
securityKeys = {
|
||||
"S0_Legacy" = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
||||
};
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
name = "zwave-js";
|
||||
meta.maintainers = with lib.maintainers; [ graham33 ];
|
||||
let
|
||||
secretsConfigFile = pkgs.writeText "secrets.json" (
|
||||
builtins.toJSON {
|
||||
securityKeys = {
|
||||
"S0_Legacy" = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
|
||||
};
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
name = "zwave-js";
|
||||
meta.maintainers = with lib.maintainers; [ graham33 ];
|
||||
|
||||
nodes = {
|
||||
machine =
|
||||
{ config, ... }:
|
||||
{
|
||||
services.zwave-js = {
|
||||
enable = true;
|
||||
serialPort = "/dev/null";
|
||||
extraFlags = [ "--mock-driver" ];
|
||||
inherit secretsConfigFile;
|
||||
};
|
||||
};
|
||||
nodes = {
|
||||
machine = {
|
||||
services.zwave-js = {
|
||||
enable = true;
|
||||
serialPort = "/dev/null";
|
||||
extraFlags = [ "--mock-driver" ];
|
||||
inherit secretsConfigFile;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
machine.wait_for_unit("zwave-js.service")
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.wait_until_succeeds("journalctl --since -1m --unit zwave-js --grep 'ZwaveJS server listening'")
|
||||
'';
|
||||
}
|
||||
)
|
||||
machine.wait_for_unit("zwave-js.service")
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.wait_until_succeeds("journalctl --since -1m --unit zwave-js --grep 'ZwaveJS server listening'")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
liblo,
|
||||
libmad,
|
||||
lrdf,
|
||||
librdf_raptor,
|
||||
librdf_rasqal,
|
||||
libsamplerate,
|
||||
libsndfile,
|
||||
pkg-config,
|
||||
|
@ -65,8 +63,6 @@ stdenv.mkDerivation rec {
|
|||
libsamplerate
|
||||
vamp-plugin-sdk
|
||||
alsa-lib
|
||||
librdf_raptor
|
||||
librdf_rasqal
|
||||
redland
|
||||
serd
|
||||
sord
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
melpaBuild {
|
||||
pname = "edraw";
|
||||
version = "1.2.0-unstable-2025-02-15";
|
||||
version = "1.2.0-unstable-2025-02-21";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "misohena";
|
||||
repo = "el-easydraw";
|
||||
rev = "7d557a3ea1b1308d3fc56607bd00fee1be36007f";
|
||||
hash = "sha256-7quQwBR5dnSkT8HZd/Tng5qQiqL+H6BCuQCWSe0B4Hw=";
|
||||
rev = "f6b0f43138693b73cb65327d28bd2a4ee1b6caa7";
|
||||
hash = "sha256-IU+DMw8q1Si3CJ4FhJVkaRsjkh1Oc3psmbzdUgh0YMI=";
|
||||
};
|
||||
|
||||
propagatedUserEnvPkgs = [ gzip ];
|
||||
|
|
|
@ -718,8 +718,8 @@ let
|
|||
|
||||
bmalehorn.vscode-fish = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-fish";
|
||||
publisher = "bmalehorn";
|
||||
name = "vscode-fish";
|
||||
version = "1.0.38";
|
||||
hash = "sha256-QEifCTlzYMX+5H6+k2o1lsQrhW3vxVpn+KFg/3WVVFo=";
|
||||
};
|
||||
|
@ -1085,26 +1085,26 @@ let
|
|||
sources = {
|
||||
"x86_64-linux" = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-0NSmyu+whQOSqaYQIt2C651k5CW1D9zmdn+0aLJF+CQ=";
|
||||
hash = "sha256-1swpgwNLCMWjzDYziXuvvPv8cox2+8ZaYR4fUDoHRkY=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-Ek5WswTcrHHC3E3zABYz1afC3oic7msq5ddSBLT2+dY=";
|
||||
hash = "sha256-uBSd/6Z2689n0vExoeaEwodLjjeBULo/RaGu8cGgvsQ=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-e/vVKvOdt+mHp9gs+Kse13aFWX6DELeUtPdYLeuh9hE=";
|
||||
hash = "sha256-WdSKNC2DjR3n9VVJh5OBasmVq/sIXiWFajhniSwxPuw=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-1oJ41WBlVUm7AUIwsIOyoucx9EtkReG8pxpYqgdZx5w=";
|
||||
hash = "sha256-cwTUoVai9N2v5VmfYIKC+w8jYLcQhHGK5TLqxOBr05Q=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "continue";
|
||||
publisher = "Continue";
|
||||
version = "0.8.68";
|
||||
version = "1.1.11";
|
||||
}
|
||||
// sources.${stdenv.system};
|
||||
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
|
||||
|
@ -1332,10 +1332,10 @@ let
|
|||
|
||||
denoland.vscode-deno = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-deno";
|
||||
publisher = "denoland";
|
||||
version = "3.43.5";
|
||||
hash = "sha256-GDVOth8IGbRwT47cIpmzYQjhR3ITt57j+ieuK+wn9jg=";
|
||||
name = "vscode-deno";
|
||||
version = "3.43.6";
|
||||
hash = "sha256-bZsPyffCQ++gvlK7MT1Dsrd7HQWACcViwwcEhu9HQfM=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/denoland.vscode-deno/changelog";
|
||||
|
@ -1649,10 +1649,10 @@ let
|
|||
|
||||
editorconfig.editorconfig = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "EditorConfig";
|
||||
publisher = "EditorConfig";
|
||||
version = "0.17.0";
|
||||
hash = "sha256-/NW/0KYVF0sCgat21aR/5nbVyoTHpDoqCPz+6zc0HHs=";
|
||||
publisher = "editorconfig";
|
||||
name = "editorconfig";
|
||||
version = "0.17.2";
|
||||
hash = "sha256-Xi2+mN6zjIKm0HWxfRAFs2vYkZ10Gv6poR2b2d8XCug=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/EditorConfig.EditorConfig/changelog";
|
||||
|
@ -1879,8 +1879,8 @@ let
|
|||
|
||||
firefox-devtools.vscode-firefox-debug = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-firefox-debug";
|
||||
publisher = "firefox-devtools";
|
||||
name = "vscode-firefox-debug";
|
||||
version = "2.15.0";
|
||||
hash = "sha256-hBj0V42k32dj2gvsNStUBNZEG7iRYxeDMbuA15AYQqk=";
|
||||
};
|
||||
|
@ -2169,15 +2169,10 @@ let
|
|||
|
||||
github.vscode-pull-request-github = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-pull-request-github";
|
||||
publisher = "github";
|
||||
# Stable versions are listed on the GitHub releases page and use a
|
||||
# semver scheme, contrary to preview versions which are listed on
|
||||
# the VSCode Marketplace and use a calver scheme. We should avoid
|
||||
# using preview versions, because they can require insider versions
|
||||
# of VS Code
|
||||
version = "0.78.1";
|
||||
hash = "sha256-T9oW6o4ItZfR8E1qrcH3nhMvVB6ihi4kpiDz7YGHOcI=";
|
||||
name = "vscode-pull-request-github";
|
||||
version = "0.107.2025031304";
|
||||
hash = "sha256-BWmcAocEWBE7eeiyMBUcTBmozPWgLkdiDOskhf7drD8=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
@ -2344,8 +2339,8 @@ let
|
|||
|
||||
haskell.haskell = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "haskell";
|
||||
publisher = "haskell";
|
||||
name = "haskell";
|
||||
version = "2.5.3";
|
||||
hash = "sha256-3HbUH5+YCPqypGlsaSDwwyN/PoG9KO0YnZ1Ps7ZLQ48=";
|
||||
};
|
||||
|
@ -2771,8 +2766,8 @@ let
|
|||
|
||||
jnoortheen.nix-ide = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "nix-ide";
|
||||
publisher = "jnoortheen";
|
||||
name = "nix-ide";
|
||||
version = "0.4.12";
|
||||
hash = "sha256-3pXypgAwg/iEBUqPeNsyoX2oYqlKMVdemEhmhy1PuGU=";
|
||||
};
|
||||
|
@ -2863,8 +2858,8 @@ let
|
|||
|
||||
justusadam.language-haskell = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "language-haskell";
|
||||
publisher = "justusadam";
|
||||
name = "language-haskell";
|
||||
version = "3.6.0";
|
||||
hash = "sha256-rZXRzPmu7IYmyRWANtpJp3wp0r/RwB7eGHEJa7hBvoQ=";
|
||||
};
|
||||
|
@ -3048,8 +3043,8 @@ let
|
|||
|
||||
llvm-vs-code-extensions.vscode-clangd = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-clangd";
|
||||
publisher = "llvm-vs-code-extensions";
|
||||
name = "vscode-clangd";
|
||||
version = "0.1.33";
|
||||
hash = "sha256-NAQ7qT99vudcb/R55pKY3M5H6sV32aB4P8IWZKVQJas=";
|
||||
};
|
||||
|
@ -3136,8 +3131,8 @@ let
|
|||
|
||||
matangover.mypy = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "mypy";
|
||||
publisher = "matangover";
|
||||
name = "mypy";
|
||||
version = "0.4.1";
|
||||
hash = "sha256-hCgOclEnjhWTLMZPXJkoxgFN4pqZ1MKTzmRtjeHbLeU=";
|
||||
};
|
||||
|
@ -3298,8 +3293,8 @@ let
|
|||
|
||||
mkhl.direnv = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "direnv";
|
||||
publisher = "mkhl";
|
||||
name = "direnv";
|
||||
version = "0.17.0";
|
||||
hash = "sha256-9sFcfTMeLBGw2ET1snqQ6Uk//D/vcD9AVsZfnUNrWNg=";
|
||||
};
|
||||
|
@ -3332,10 +3327,10 @@ let
|
|||
|
||||
ms-azuretools.vscode-docker = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-docker";
|
||||
publisher = "ms-azuretools";
|
||||
version = "1.29.0";
|
||||
hash = "sha256-mVRsVsolXj31WhbWnt3Xml+NnIq7Q2uHhUUd1zgW42c=";
|
||||
name = "vscode-docker";
|
||||
version = "1.29.4";
|
||||
hash = "sha256-j2ACz2Ww5hddoDLHGdxnuQIqerP5ogZ80/wS+Aa5Gdo=";
|
||||
};
|
||||
meta = {
|
||||
description = "Docker Extension for Visual Studio Code";
|
||||
|
@ -3479,8 +3474,8 @@ let
|
|||
|
||||
ms-toolsai.jupyter-renderers = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "jupyter-renderers";
|
||||
publisher = "ms-toolsai";
|
||||
name = "jupyter-renderers";
|
||||
version = "1.1.2025012901";
|
||||
hash = "sha256-LWKSt0D3iFPKaYphN+8/1KJl1CIS2a3fMqrvoItjsvI=";
|
||||
};
|
||||
|
@ -3491,8 +3486,8 @@ let
|
|||
|
||||
ms-toolsai.vscode-jupyter-cell-tags = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-jupyter-cell-tags";
|
||||
publisher = "ms-toolsai";
|
||||
name = "vscode-jupyter-cell-tags";
|
||||
version = "0.1.9";
|
||||
hash = "sha256-XODbFbOr2kBTzFc0JtjiDUcCDBX1Hd4uajlil7mhqPY=";
|
||||
};
|
||||
|
@ -3503,10 +3498,10 @@ let
|
|||
|
||||
ms-toolsai.vscode-jupyter-slideshow = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-jupyter-slideshow";
|
||||
publisher = "ms-toolsai";
|
||||
version = "0.1.5";
|
||||
sha256 = "1p6r5vkzvwvxif3wxqi9599vplabzig27fzzz0bx9z0awfglzyi7";
|
||||
name = "vscode-jupyter-slideshow";
|
||||
version = "0.1.6";
|
||||
hash = "sha256-fnsMrrcYdz6BzUWMd9pAOQGTjmtEbQeoVYG20VWxCsM=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
@ -3527,10 +3522,10 @@ let
|
|||
|
||||
ms-vscode.cmake-tools = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "cmake-tools";
|
||||
publisher = "ms-vscode";
|
||||
version = "1.21.4";
|
||||
hash = "sha256-T2AcKgedZ/b9VQ1FjGP5/hKme2STFrnF0rS5PxQuH9w=";
|
||||
name = "cmake-tools";
|
||||
version = "1.21.6";
|
||||
hash = "sha256-Y+W5lknMiUTeKLnAIP/wAY9zn3QY+XvdPrl2GsdIb5o=";
|
||||
};
|
||||
meta.license = lib.licenses.mit;
|
||||
};
|
||||
|
@ -3555,8 +3550,8 @@ let
|
|||
|
||||
ms-vscode.hexeditor = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "hexeditor";
|
||||
publisher = "ms-vscode";
|
||||
name = "hexeditor";
|
||||
version = "1.11.1";
|
||||
hash = "sha256-RB5YOp30tfMEzGyXpOwPIHzXqZlRGc+pXiJ3foego7Y=";
|
||||
};
|
||||
|
@ -3582,10 +3577,10 @@ let
|
|||
|
||||
ms-vscode.makefile-tools = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "makefile-tools";
|
||||
publisher = "ms-vscode";
|
||||
version = "0.6.0";
|
||||
sha256 = "07zagq5ib9hd3w67yk2g728vypr4qazw0g9dyd5bax21shnmppa9";
|
||||
name = "makefile-tools";
|
||||
version = "0.12.17";
|
||||
hash = "sha256-chHyYzKNEpyYMQX14pbQ/d9WKC+1QWtm8iKe6M8ZWWI=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
@ -4074,10 +4069,10 @@ let
|
|||
|
||||
redhat.java = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "java";
|
||||
publisher = "redhat";
|
||||
version = "1.41.2025031108";
|
||||
hash = "sha256-wUkZV2ox8zwU+mgagKQPDq/ZZfmlO4RtcWducNaS8+4=";
|
||||
name = "java";
|
||||
version = "1.41.2025031208";
|
||||
hash = "sha256-0VWLkztB7anIs19QN1yPQvVjNim+DICv43IOMwEaM+E=";
|
||||
};
|
||||
buildInputs = [ jdk ];
|
||||
meta = {
|
||||
|
@ -4093,18 +4088,18 @@ let
|
|||
|
||||
redhat.vscode-xml = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-xml";
|
||||
publisher = "redhat";
|
||||
name = "vscode-xml";
|
||||
version = "0.28.2025031108";
|
||||
sha256 = "sha256-SO/Q27v5rzoA5NBp5WJ8S7KcwbGLUmkK2FoaaSb6nYI=";
|
||||
hash = "sha256-SO/Q27v5rzoA5NBp5WJ8S7KcwbGLUmkK2FoaaSb6nYI=";
|
||||
};
|
||||
meta.license = lib.licenses.epl20;
|
||||
};
|
||||
|
||||
redhat.vscode-yaml = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-yaml";
|
||||
publisher = "redhat";
|
||||
name = "vscode-yaml";
|
||||
version = "1.17.0";
|
||||
hash = "sha256-u3smLk5yCT9DMtFnrxh5tKbfDQ2XbL6bl2bXGOD38X0=";
|
||||
};
|
||||
|
@ -4549,10 +4544,10 @@ let
|
|||
|
||||
sonarsource.sonarlint-vscode = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "sonarlint-vscode";
|
||||
publisher = "sonarsource";
|
||||
version = "3.16.0";
|
||||
hash = "sha256-zWgITdvUS9fq1uT6A4Gs3fSTBwCXoEIQ/tVcC7Eigfs=";
|
||||
name = "sonarlint-vscode";
|
||||
version = "4.17.0";
|
||||
hash = "sha256-PPMjOxPKUB5+HrpWZYc1gBaF8z4UQBFdeSbd8dlw7GI=";
|
||||
};
|
||||
meta.license = lib.licenses.lgpl3Only;
|
||||
};
|
||||
|
@ -4573,8 +4568,8 @@ let
|
|||
|
||||
sswg.swift-lang = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "swift-lang";
|
||||
publisher = "sswg";
|
||||
name = "swift-lang";
|
||||
version = "1.12.0";
|
||||
hash = "sha256-Dzf8mJCDWT2pHPJcTywEqnki8aVsMO92+wLQ4fjHzb8=";
|
||||
};
|
||||
|
@ -4640,8 +4635,8 @@ let
|
|||
|
||||
streetsidesoftware.code-spell-checker = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "code-spell-checker";
|
||||
publisher = "streetsidesoftware";
|
||||
name = "code-spell-checker";
|
||||
version = "4.0.41";
|
||||
hash = "sha256-M/uqzU64nqSdRtxxQ1H+pg0YdkqYXEHlxmXrVcn/UqA=";
|
||||
};
|
||||
|
@ -4807,8 +4802,8 @@ let
|
|||
|
||||
tamasfe.even-better-toml = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "even-better-toml";
|
||||
publisher = "tamasfe";
|
||||
name = "even-better-toml";
|
||||
version = "0.21.2";
|
||||
hash = "sha256-IbjWavQoXu4x4hpEkvkhqzbf/NhZpn8RFdKTAnRlCAg=";
|
||||
};
|
||||
|
@ -4883,10 +4878,10 @@ let
|
|||
|
||||
thenuprojectcontributors.vscode-nushell-lang = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-nushell-lang";
|
||||
publisher = "thenuprojectcontributors";
|
||||
version = "1.9.0";
|
||||
hash = "sha256-E9CK/GChd/yZT+P3ttROjL2jHtKPJ0KZzc32/nbuE4w=";
|
||||
name = "vscode-nushell-lang";
|
||||
version = "1.10.0";
|
||||
hash = "sha256-AfClskNZwQIC67VrM8XKxF6nIbXPp576CRmls0WCKwU=";
|
||||
};
|
||||
meta.license = lib.licenses.mit;
|
||||
};
|
||||
|
@ -5013,10 +5008,10 @@ let
|
|||
|
||||
twxs.cmake = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "cmake";
|
||||
publisher = "twxs";
|
||||
name = "cmake";
|
||||
version = "0.0.17";
|
||||
sha256 = "11hzjd0gxkq37689rrr2aszxng5l9fwpgs9nnglq3zhfa1msyn08";
|
||||
hash = "sha256-CFiva1AO/oHpszbpd7lLtDzbv1Yi55yQOQPP/kCTH4Y=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
@ -5267,8 +5262,8 @@ let
|
|||
|
||||
vscjava.vscode-java-debug = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-java-debug";
|
||||
publisher = "vscjava";
|
||||
name = "vscode-java-debug";
|
||||
version = "0.58.2025022807";
|
||||
hash = "sha256-8bzDbCF03U5P15tkVkieOGuuLetUFXjZNrQKZTcKNFA=";
|
||||
};
|
||||
|
@ -5279,8 +5274,8 @@ let
|
|||
|
||||
vscjava.vscode-java-dependency = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-java-dependency";
|
||||
publisher = "vscjava";
|
||||
name = "vscode-java-dependency";
|
||||
version = "0.24.1";
|
||||
hash = "sha256-M0y6/9EPkcXTMxArqLpfSeVKpVF2SvjLtTWvLMIvauY=";
|
||||
};
|
||||
|
@ -5291,8 +5286,8 @@ let
|
|||
|
||||
vscjava.vscode-java-test = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-java-test";
|
||||
publisher = "vscjava";
|
||||
name = "vscode-java-test";
|
||||
version = "0.43.0";
|
||||
hash = "sha256-EM0S1Y4cRMBCRbAZgl9m6fIhANPrvdGVZXOLlDLnVWo=";
|
||||
};
|
||||
|
@ -5319,8 +5314,8 @@ let
|
|||
|
||||
vscjava.vscode-maven = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-maven";
|
||||
publisher = "vscjava";
|
||||
name = "vscode-maven";
|
||||
version = "0.44.2024072906";
|
||||
hash = "sha256-9S8Zzefg9i3nZiPZAtW5aT07dpZnhV0w9DP5vdnEtFc=";
|
||||
};
|
||||
|
|
|
@ -9,6 +9,16 @@
|
|||
src,
|
||||
version,
|
||||
}:
|
||||
let
|
||||
# debugservers on macOS require the 'com.apple.security.cs.debugger'
|
||||
# entitlement which nixpkgs' lldb-server does not yet provide; see
|
||||
# <https://github.com/NixOS/nixpkgs/pull/38624> for details
|
||||
lldbServer =
|
||||
if stdenv.hostPlatform.isDarwin then
|
||||
"/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver"
|
||||
else
|
||||
"${lldb.out}/bin/lldb-server";
|
||||
in
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "${pname}-adapter";
|
||||
inherit version src;
|
||||
|
@ -43,11 +53,13 @@ rustPlatform.buildRustPackage {
|
|||
cp -t $out/share/formatters formatters/*.py
|
||||
ln -s ${lib.getLib lldb} $out/share/lldb
|
||||
makeWrapper $out/share/adapter/codelldb $out/bin/codelldb \
|
||||
--set-default LLDB_DEBUGSERVER_PATH "${lldb.out}/bin/lldb-server"
|
||||
--set-default LLDB_DEBUGSERVER_PATH "${lldbServer}"
|
||||
'';
|
||||
|
||||
patches = [ ./patches/adapter-output-shared_object.patch ];
|
||||
|
||||
# Tests are linked to liblldb but it is not available here.
|
||||
doCheck = false;
|
||||
|
||||
passthru = { inherit lldbServer; };
|
||||
}
|
||||
|
|
|
@ -64,14 +64,6 @@ let
|
|||
}
|
||||
);
|
||||
|
||||
# debugservers on macOS require the 'com.apple.security.cs.debugger'
|
||||
# entitlement which nixpkgs' lldb-server does not yet provide; see
|
||||
# <https://github.com/NixOS/nixpkgs/pull/38624> for details
|
||||
lldbServer =
|
||||
if stdenv.hostPlatform.isDarwin then
|
||||
"/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver"
|
||||
else
|
||||
"${lldb.out}/bin/lldb-server";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "vscode-extension-${publisher}-${pname}";
|
||||
|
@ -130,7 +122,7 @@ stdenv.mkDerivation {
|
|||
cp -t $ext/ -r ${adapter}/share/*
|
||||
wrapProgram $ext/adapter/codelldb \
|
||||
--prefix LD_LIBRARY_PATH : "$ext/lldb/lib" \
|
||||
--set-default LLDB_DEBUGSERVER_PATH "${lldbServer}"
|
||||
--set-default LLDB_DEBUGSERVER_PATH "${adapter.lldbServer}"
|
||||
# Mark that all components are installed.
|
||||
touch $ext/platform.ok
|
||||
|
||||
|
@ -153,7 +145,7 @@ stdenv.mkDerivation {
|
|||
description = "Native debugger extension for VSCode based on LLDB";
|
||||
homepage = "https://github.com/vadimcn/vscode-lldb";
|
||||
license = [ lib.licenses.mit ];
|
||||
maintainers = [ ];
|
||||
maintainers = [ lib.maintainers.r4v3n6101 ];
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
CoreServices,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cobalt";
|
||||
version = "0.19.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cobalt-org";
|
||||
repo = "cobalt.rs";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-neOJ3UqRisCcyarRIXfHyl9nAe2Wl9IXVDNwIYEQYys=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-j2xmEoMV7lVhqj4lKWA3QdEDEGUpRlZc4ikZoDQJlB8=";
|
||||
|
||||
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Static site generator written in Rust";
|
||||
homepage = "https://github.com/cobalt-org/cobalt.rs/";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ ethancedwards8 ];
|
||||
platforms = platforms.unix;
|
||||
mainProgram = "cobalt";
|
||||
};
|
||||
}
|
|
@ -38,14 +38,14 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
version = "1.7.2";
|
||||
version = "1.7.3";
|
||||
pname = "syncthingtray";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Martchus";
|
||||
repo = "syncthingtray";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-pQd6Ngxcn5qJKhjqXXJ6LZLgSI8gJ/d9TNuIAZlWHGA=";
|
||||
hash = "sha256-XmbdLaJzGjgbB4klu8soAV1m2/LjhbWbAczl/mNTMG4=";
|
||||
};
|
||||
|
||||
buildInputs =
|
||||
|
|
|
@ -481,7 +481,9 @@ buildStdenv.mkDerivation {
|
|||
(enableFeature enableDebugSymbols "debug-symbols")
|
||||
]
|
||||
++ lib.optionals enableDebugSymbols [ "--disable-strip" "--disable-install-strip" ]
|
||||
++ lib.optional enableOfficialBranding "--enable-official-branding"
|
||||
# As of Firefox 137 (https://bugzilla.mozilla.org/show_bug.cgi?id=1943009),
|
||||
# the --enable-official-branding flag overrides the --with-branding flag.
|
||||
++ lib.optional (enableOfficialBranding && branding == null) "--enable-official-branding"
|
||||
++ lib.optional (branding != null) "--with-branding=${branding}"
|
||||
++ extraConfigureFlags;
|
||||
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
buildMozillaMach rec {
|
||||
pname = "firefox-beta";
|
||||
binaryName = pname;
|
||||
version = "137.0b2";
|
||||
version = "137.0b6";
|
||||
applicationName = "Firefox Beta";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "ac9d9635ede14506bf579735768cc643843c658122be89bb223f1c08702ee570757fbf091cf8191ad614688fff2330964ce728e51ea2519a801b838df94cc5d2";
|
||||
sha512 = "84c010f6e21957768a6fcebe6ec2f0e6a50b45b6a416cad3701f36d69dff9a448423e5b4f2ce0dc7abe46cb40ec02872027ad855b9afef355006ba32e13f4e27";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
@ -10,20 +10,23 @@
|
|||
buildMozillaMach rec {
|
||||
pname = "firefox-devedition";
|
||||
binaryName = pname;
|
||||
version = "137.0b2";
|
||||
version = "137.0b6";
|
||||
applicationName = "Firefox Developer Edition";
|
||||
requireSigning = false;
|
||||
branding = "browser/branding/aurora";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "a15eded14d6a4ddeb3798ac7bb72a9e8a6541a3ee76dc9051cf6865816079f8794e6defe2f9299f327976eefc1f4ea957d972b56d1f03816296b25f0c0173a12";
|
||||
sha512 = "91fb3e010d62805ec29758bb46b3d520dc3a3e2b0f040de4e284aeb5fe812b5b084563f560a229f54a404a5130429d60b35eac15d89f1cb586fd364b61a7f8be";
|
||||
};
|
||||
|
||||
meta = {
|
||||
changelog = "https://www.mozilla.org/en-US/firefox/${lib.versions.majorMinor version}beta/releasenotes/";
|
||||
description = "Web browser built from Firefox Developer Edition source tree";
|
||||
homepage = "http://www.mozilla.com/en-US/firefox/";
|
||||
maintainers = with lib.maintainers; [ jopejoe1 ];
|
||||
maintainers = with lib.maintainers; [
|
||||
jopejoe1
|
||||
rhendric
|
||||
];
|
||||
platforms = lib.platforms.unix;
|
||||
broken = stdenv.buildPlatform.is32bit;
|
||||
# since Firefox 60, build on 32-bit platforms fails with "out of memory".
|
||||
|
|
|
@ -9,54 +9,54 @@ let
|
|||
versions =
|
||||
if stdenv.hostPlatform.isLinux then
|
||||
{
|
||||
stable = "0.0.87";
|
||||
ptb = "0.0.132";
|
||||
canary = "0.0.594";
|
||||
development = "0.0.68";
|
||||
stable = "0.0.88";
|
||||
ptb = "0.0.134";
|
||||
canary = "0.0.608";
|
||||
development = "0.0.71";
|
||||
}
|
||||
else
|
||||
{
|
||||
stable = "0.0.338";
|
||||
ptb = "0.0.162";
|
||||
canary = "0.0.703";
|
||||
development = "0.0.79";
|
||||
stable = "0.0.341";
|
||||
ptb = "0.0.165";
|
||||
canary = "0.0.717";
|
||||
development = "0.0.82";
|
||||
};
|
||||
version = versions.${branch};
|
||||
srcs = rec {
|
||||
x86_64-linux = {
|
||||
stable = fetchurl {
|
||||
url = "https://stable.dl2.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
|
||||
hash = "sha256-22Pi5rI0fu7A/ZoqkjIODtEnmNQt0pFBmsplh0QK0AQ=";
|
||||
hash = "sha256-lkphzS5Q7UH20rKJ4SfxyyqEGgoLlfO/hcGmoWWLcYY=";
|
||||
};
|
||||
ptb = fetchurl {
|
||||
url = "https://ptb.dl2.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
|
||||
hash = "sha256-h4nFnarW84zP+tbzvqTQKvN0IEQevYuFZplPC2klvA8=";
|
||||
hash = "sha256-KkyFFxg7yuvaj/V7r0ePB2mNz+GNqeoUVvjb9v2/PQY=";
|
||||
};
|
||||
canary = fetchurl {
|
||||
url = "https://canary.dl2.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
|
||||
hash = "sha256-qSmJPKBBLDL2jykRHcuWXJ1Ve/7VE0yAkhL5i+JcR+Q=";
|
||||
hash = "sha256-Nh5CZyLo5Pf5PKV8LDeGH7KZuzQtQbdeKuVEJJqfTdA=";
|
||||
};
|
||||
development = fetchurl {
|
||||
url = "https://development.dl2.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
|
||||
hash = "sha256-Vfsuz7/o2iVssOi4I9MmQc5T8ct8WTaCavvT9/OycPs=";
|
||||
hash = "sha256-lxtkapeYRtKyp60YJC6lCvK0P8MSOlYRmQLR+hLuwws=";
|
||||
};
|
||||
};
|
||||
x86_64-darwin = {
|
||||
stable = fetchurl {
|
||||
url = "https://stable.dl2.discordapp.net/apps/osx/${version}/Discord.dmg";
|
||||
hash = "sha256-PvCeKhbTgPxvR649xPWA/MBW7FZbW1g0WoLi35u1Ys0=";
|
||||
hash = "sha256-FXyF7uWwnNXPe5Qn2WZBXCr392RmHZR3Q2aQTojQ29o=";
|
||||
};
|
||||
ptb = fetchurl {
|
||||
url = "https://ptb.dl2.discordapp.net/apps/osx/${version}/DiscordPTB.dmg";
|
||||
hash = "sha256-C8KTPK6a+Z4pzxc/ORbqOgQVYtI5ggPcyzXTnvrmFu4=";
|
||||
hash = "sha256-M7ApSHRMZ8rzTHVZM32REPRTyaxUmbZfr9pj1uDlS9Y=";
|
||||
};
|
||||
canary = fetchurl {
|
||||
url = "https://canary.dl2.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
|
||||
hash = "sha256-o2faV+mKmgDy7fCzxxMn9meY/afiTA3djTOY0nulBCc=";
|
||||
hash = "sha256-k3iviK146CcitDIKm2huUgGkJy/Qki4z5/VW3EPuaxE=";
|
||||
};
|
||||
development = fetchurl {
|
||||
url = "https://development.dl2.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";
|
||||
hash = "sha256-xBsI5rWsRBxkWEkcAOKz4NEeIRb2SJ/KDp6acpSvBSU=";
|
||||
hash = "sha256-3fPaqm9Tfr3t/96T9EX1oKCfVOw18DIiLWqBIiuSNIg=";
|
||||
};
|
||||
};
|
||||
aarch64-darwin = x86_64-darwin;
|
||||
|
|
|
@ -82,8 +82,7 @@ let
|
|||
|
||||
in
|
||||
rec {
|
||||
# Upstream claims -latest is "for testing purposes only". Stick to -esr until this changes.
|
||||
thunderbird = thunderbird-esr;
|
||||
thunderbird = thunderbird-latest;
|
||||
|
||||
thunderbird-latest = common {
|
||||
version = "136.0";
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "docker-compose";
|
||||
version = "2.33.1";
|
||||
version = "2.34.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "docker";
|
||||
repo = "compose";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-qallG81eGJXrBoC6Ww3Zlq1amovObOGayVzHFTOA0xw=";
|
||||
hash = "sha256-AoYm2gRqNgXTc7ksQeSPVo+gTkxaFwhfLhue3Z8a4Wo=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -16,7 +16,7 @@ buildGoModule rec {
|
|||
rm -rf e2e/
|
||||
'';
|
||||
|
||||
vendorHash = "sha256-1yIWVuI8+2tmS0gg4kebKiFxQASPVcc6XgFyN3LvXJA=";
|
||||
vendorHash = "sha256-ISX+PpjapST9d/rFP0SPlFYyPb5NcwwQT6mhb1H1qEE=";
|
||||
|
||||
ldflags = [ "-X github.com/docker/compose/v2/internal.Version=${version}" "-s" "-w" ];
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
mkHyprlandPlugin hyprland {
|
||||
pluginName = "hypr-dynamic-cursors";
|
||||
version = "0-unstable-2025-02-02";
|
||||
version = "0-unstable-2025-03-06";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "VirtCode";
|
||||
repo = "hypr-dynamic-cursors";
|
||||
rev = "fd6214629937949ecd8a39f4b5ebbce2afac0dd5";
|
||||
hash = "sha256-Fg4+6Yko8V9b19/62jfKH0IWTiiRDMso1P1TnjAcs/8=";
|
||||
rev = "261bc1668f7de45b48ba6a40d5d727025575390b";
|
||||
hash = "sha256-2HSbWe1r5DYulPzMXZYSluiwG/T+5904YmJSrPJ8tEo=";
|
||||
};
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
|
|
@ -7,101 +7,104 @@
|
|||
cctools,
|
||||
}@topLevelArgs:
|
||||
|
||||
{
|
||||
name ? "${args.pname}-${args.version}",
|
||||
src ? null,
|
||||
srcs ? null,
|
||||
sourceRoot ? null,
|
||||
prePatch ? "",
|
||||
patches ? [ ],
|
||||
postPatch ? "",
|
||||
patchFlags ? [ ],
|
||||
nativeBuildInputs ? [ ],
|
||||
buildInputs ? [ ],
|
||||
# The output hash of the dependencies for this project.
|
||||
# Can be calculated in advance with prefetch-npm-deps.
|
||||
npmDepsHash ? "",
|
||||
# Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
|
||||
# Use with care.
|
||||
forceGitDeps ? false,
|
||||
# Whether to force allow an empty dependency cache.
|
||||
# This can be enabled if there are truly no remote dependencies, but generally an empty cache indicates something is wrong.
|
||||
forceEmptyCache ? false,
|
||||
# Whether to make the cache writable prior to installing dependencies.
|
||||
# Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
|
||||
makeCacheWritable ? false,
|
||||
# The script to run to build the project.
|
||||
npmBuildScript ? "build",
|
||||
# Flags to pass to all npm commands.
|
||||
npmFlags ? [ ],
|
||||
# Flags to pass to `npm ci`.
|
||||
npmInstallFlags ? [ ],
|
||||
# Flags to pass to `npm rebuild`.
|
||||
npmRebuildFlags ? [ ],
|
||||
# Flags to pass to `npm run ${npmBuildScript}`.
|
||||
npmBuildFlags ? [ ],
|
||||
# Flags to pass to `npm pack`.
|
||||
npmPackFlags ? [ ],
|
||||
# Flags to pass to `npm prune`.
|
||||
npmPruneFlags ? npmInstallFlags,
|
||||
# Value for npm `--workspace` flag and directory in which the files to be installed are found.
|
||||
npmWorkspace ? null,
|
||||
nodejs ? topLevelArgs.nodejs,
|
||||
npmDeps ? fetchNpmDeps {
|
||||
inherit
|
||||
forceGitDeps
|
||||
forceEmptyCache
|
||||
src
|
||||
srcs
|
||||
sourceRoot
|
||||
prePatch
|
||||
patches
|
||||
postPatch
|
||||
patchFlags
|
||||
;
|
||||
name = "${name}-npm-deps";
|
||||
hash = npmDepsHash;
|
||||
},
|
||||
# Custom npmConfigHook
|
||||
npmConfigHook ? null,
|
||||
# Custom npmBuildHook
|
||||
npmBuildHook ? null,
|
||||
# Custom npmInstallHook
|
||||
npmInstallHook ? null,
|
||||
...
|
||||
}@args:
|
||||
lib.extendMkDerivation {
|
||||
constructDrv = stdenv.mkDerivation;
|
||||
|
||||
let
|
||||
# .override {} negates splicing, so we need to use buildPackages explicitly
|
||||
npmHooks = buildPackages.npmHooks.override {
|
||||
inherit nodejs;
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation (
|
||||
args
|
||||
// {
|
||||
inherit npmDeps npmBuildScript;
|
||||
extendDrvArgs =
|
||||
finalAttrs:
|
||||
{
|
||||
name ? "${args.pname}-${args.version}",
|
||||
src ? null,
|
||||
srcs ? null,
|
||||
sourceRoot ? null,
|
||||
prePatch ? "",
|
||||
patches ? [ ],
|
||||
postPatch ? "",
|
||||
patchFlags ? [ ],
|
||||
nativeBuildInputs ? [ ],
|
||||
buildInputs ? [ ],
|
||||
# The output hash of the dependencies for this project.
|
||||
# Can be calculated in advance with prefetch-npm-deps.
|
||||
npmDepsHash ? "",
|
||||
# Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
|
||||
# Use with care.
|
||||
forceGitDeps ? false,
|
||||
# Whether to force allow an empty dependency cache.
|
||||
# This can be enabled if there are truly no remote dependencies, but generally an empty cache indicates something is wrong.
|
||||
forceEmptyCache ? false,
|
||||
# Whether to make the cache writable prior to installing dependencies.
|
||||
# Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
|
||||
makeCacheWritable ? false,
|
||||
# The script to run to build the project.
|
||||
npmBuildScript ? "build",
|
||||
# Flags to pass to all npm commands.
|
||||
npmFlags ? [ ],
|
||||
# Flags to pass to `npm ci`.
|
||||
npmInstallFlags ? [ ],
|
||||
# Flags to pass to `npm rebuild`.
|
||||
npmRebuildFlags ? [ ],
|
||||
# Flags to pass to `npm run ${npmBuildScript}`.
|
||||
npmBuildFlags ? [ ],
|
||||
# Flags to pass to `npm pack`.
|
||||
npmPackFlags ? [ ],
|
||||
# Flags to pass to `npm prune`.
|
||||
npmPruneFlags ? npmInstallFlags,
|
||||
# Value for npm `--workspace` flag and directory in which the files to be installed are found.
|
||||
npmWorkspace ? null,
|
||||
nodejs ? topLevelArgs.nodejs,
|
||||
npmDeps ? fetchNpmDeps {
|
||||
inherit
|
||||
forceGitDeps
|
||||
forceEmptyCache
|
||||
src
|
||||
srcs
|
||||
sourceRoot
|
||||
prePatch
|
||||
patches
|
||||
postPatch
|
||||
patchFlags
|
||||
;
|
||||
name = "${name}-npm-deps";
|
||||
hash = npmDepsHash;
|
||||
},
|
||||
# Custom npmConfigHook
|
||||
npmConfigHook ? null,
|
||||
# Custom npmBuildHook
|
||||
npmBuildHook ? null,
|
||||
# Custom npmInstallHook
|
||||
npmInstallHook ? null,
|
||||
...
|
||||
}@args:
|
||||
|
||||
nativeBuildInputs =
|
||||
nativeBuildInputs
|
||||
++ [
|
||||
nodejs
|
||||
# Prefer passed hooks
|
||||
(if npmConfigHook != null then npmConfigHook else npmHooks.npmConfigHook)
|
||||
(if npmBuildHook != null then npmBuildHook else npmHooks.npmBuildHook)
|
||||
(if npmInstallHook != null then npmInstallHook else npmHooks.npmInstallHook)
|
||||
nodejs.python
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [ cctools ];
|
||||
buildInputs = buildInputs ++ [ nodejs ];
|
||||
let
|
||||
# .override {} negates splicing, so we need to use buildPackages explicitly
|
||||
npmHooks = buildPackages.npmHooks.override {
|
||||
inherit nodejs;
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit npmDeps npmBuildScript;
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs =
|
||||
nativeBuildInputs
|
||||
++ [
|
||||
nodejs
|
||||
# Prefer passed hooks
|
||||
(if npmConfigHook != null then npmConfigHook else npmHooks.npmConfigHook)
|
||||
(if npmBuildHook != null then npmBuildHook else npmHooks.npmBuildHook)
|
||||
(if npmInstallHook != null then npmInstallHook else npmHooks.npmInstallHook)
|
||||
nodejs.python
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [ cctools ];
|
||||
buildInputs = buildInputs ++ [ nodejs ];
|
||||
|
||||
# Stripping takes way too long with the amount of files required by a typical Node.js project.
|
||||
dontStrip = args.dontStrip or true;
|
||||
strictDeps = true;
|
||||
|
||||
meta = (args.meta or { }) // {
|
||||
platforms = args.meta.platforms or nodejs.meta.platforms;
|
||||
# Stripping takes way too long with the amount of files required by a typical Node.js project.
|
||||
dontStrip = args.dontStrip or true;
|
||||
|
||||
meta = (args.meta or { }) // {
|
||||
platforms = args.meta.platforms or nodejs.meta.platforms;
|
||||
};
|
||||
};
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -346,14 +346,14 @@
|
|||
};
|
||||
|
||||
# Assumes it can run Command::new(env::var("CARGO")).arg("locate-project")
|
||||
# https://github.com/bkchr/proc-macro-crate/blame/master/src/lib.rs#L244
|
||||
# https://github.com/bkchr/proc-macro-crate/blame/master/src/lib.rs#L242
|
||||
proc-macro-crate = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "2.0") {
|
||||
prePatch = (attrs.prePatch or "") + ''
|
||||
postPatch = (attrs.postPatch or "") + ''
|
||||
substituteInPlace \
|
||||
src/lib.rs \
|
||||
--replace-fail \
|
||||
'env::var("CARGO").map_err(|_| Error::CargoEnvVariableNotSet)?' \
|
||||
'"${lib.getBin buildPackages.cargo}/bin/cargo"'
|
||||
'env::var("CARGO")' \
|
||||
'Ok::<_, core::convert::Infallible>("${lib.getBin buildPackages.cargo}/bin/cargo")'
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -20,14 +20,14 @@
|
|||
nix-update-script,
|
||||
}:
|
||||
|
||||
buildNpmPackage rec {
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "ags";
|
||||
version = "1.8.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Aylur";
|
||||
repo = "ags";
|
||||
rev = "v${version}";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-ebnkUaee/pnfmw1KmOZj+MP1g5wA+8BT/TPKmn4Dkwc=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
@ -68,7 +68,7 @@ buildNpmPackage rec {
|
|||
meta = {
|
||||
homepage = "https://github.com/Aylur/ags";
|
||||
description = "EWW-inspired widget system as a GJS library";
|
||||
changelog = "https://github.com/Aylur/ags/releases/tag/v${version}";
|
||||
changelog = "https://github.com/Aylur/ags/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
foo-dogsquared
|
||||
|
@ -77,4 +77,4 @@ buildNpmPackage rec {
|
|||
mainProgram = "ags";
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
|
55
pkgs/by-name/al/alistral/package.nix
Normal file
55
pkgs/by-name/al/alistral/package.nix
Normal file
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
nix-update-script,
|
||||
pkg-config,
|
||||
openssl,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "alistral";
|
||||
version = "0.5.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "RustyNova016";
|
||||
repo = "Alistral";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-bt0WCmnk/DAEuQeEvBe5Vdk/AxpfRAafPiEJ7v8HK8Y=";
|
||||
};
|
||||
|
||||
# remove if updating to rust 1.85
|
||||
postPatch = ''
|
||||
substituteInPlace Cargo.toml \
|
||||
--replace-fail "[package]" ''$'cargo-features = ["edition2024"]\n[package]'\
|
||||
--replace-fail 'rust-version = "1.85.0"' ""
|
||||
'';
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-BxJmoJbnGfsA+YCvzUvgnkoHl/ClrwHoE3NjlctjCxA=";
|
||||
|
||||
env.RUSTC_BOOTSTRAP = 1;
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
];
|
||||
|
||||
# Wants to create config file where it s not allowed
|
||||
doCheck = false;
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
homepage = "https://rustynova016.github.io/Alistral/";
|
||||
changelog = "https://github.com/RustyNova016/Alistral/blob/${finalAttrs.src.tag}/CHANGELOG.md";
|
||||
description = "Power tools for Listenbrainz";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ jopejoe1 ];
|
||||
mainProgram = "alistral";
|
||||
};
|
||||
})
|
|
@ -6,13 +6,13 @@
|
|||
}:
|
||||
buildGoModule rec {
|
||||
pname = "bitrise";
|
||||
version = "2.29.1";
|
||||
version = "2.30.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bitrise-io";
|
||||
repo = "bitrise";
|
||||
rev = version;
|
||||
hash = "sha256-pBaXOGFDmweyJaF+Wp4qAil8yAtUYO6UoKTLAPrq7F8=";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-wQIoNekr4zXjhAp9XnyJ92hJ4usuWBBT1koUguGIIiU=";
|
||||
};
|
||||
|
||||
# many tests rely on writable $HOME/.bitrise and require network access
|
||||
|
|
|
@ -13,13 +13,13 @@
|
|||
|
||||
buildNpmPackage rec {
|
||||
pname = "bitwarden-cli";
|
||||
version = "2025.1.3";
|
||||
version = "2025.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bitwarden";
|
||||
repo = "clients";
|
||||
rev = "cli-v${version}";
|
||||
hash = "sha256-a8OQ/vQCJSjipLnuNWaWqnAJK+Str6FdHPBTbC04VxA=";
|
||||
tag = "cli-v${version}";
|
||||
hash = "sha256-Ls30yeqMDBA4HjQdnICJy0HVHm7VfZarsKUHn3KTatA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -29,7 +29,7 @@ buildNpmPackage rec {
|
|||
|
||||
nodejs = nodejs_20;
|
||||
|
||||
npmDepsHash = "sha256-BoHwgv/1QiIfUPCJ3+ZHvbMelngRSEKlbkpBHRtnoP8=";
|
||||
npmDepsHash = "sha256-V77I2ZzmcCo06vq76lGkRa+NmTEUe2urD0D1HQ/gBJA=";
|
||||
|
||||
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
cctools
|
||||
|
@ -89,12 +89,12 @@ buildNpmPackage rec {
|
|||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
changelog = "https://github.com/bitwarden/clients/releases/tag/${src.rev}";
|
||||
meta = {
|
||||
changelog = "https://github.com/bitwarden/clients/releases/tag/${src.tag}";
|
||||
description = "Secure and free password manager for all of your devices";
|
||||
homepage = "https://bitwarden.com";
|
||||
license = lib.licenses.gpl3Only;
|
||||
mainProgram = "bw";
|
||||
maintainers = with maintainers; [ dotlambda ];
|
||||
maintainers = with lib.maintainers; [ dotlambda ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "bombardier";
|
||||
version = "1.2.6";
|
||||
version = "2.0.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "codesenberg";
|
||||
repo = "bombardier";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-sJ5+nxfyWSN6dFlA4INaqa3UHTY7huYkZhaTidMJFAs=";
|
||||
hash = "sha256-FoaiUky0WcipkGN8KIpSd+iizinlqtHC5lskvNCnx/Y=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-SxW/87l1w86H5cxEhiF/Fj8SxJ/uAfhtc7I1DVvIilk=";
|
||||
vendorHash = "sha256-SezGoDM4xzOj1y/qmvlngYKOVdJnxBD4l9LPVErevUI=";
|
||||
|
||||
subPackages = [
|
||||
"."
|
||||
|
|
49
pkgs/by-name/bs/bsky-cli/package.nix
Normal file
49
pkgs/by-name/bs/bsky-cli/package.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
libpcap,
|
||||
versionCheckHook,
|
||||
nix-update-script,
|
||||
}:
|
||||
let
|
||||
version = "0.0.73";
|
||||
in
|
||||
buildGoModule {
|
||||
pname = "bsky-cli";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mattn";
|
||||
repo = "bsky";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-GTuF/ZbZ84tTcbjp8eXKdpUGCsOkg2rxEcslKTsgpu4=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-dLhrPHjhEHEJOokkjll1Z+zhDlBXuhlJJBtCFXfhyws=";
|
||||
|
||||
buildInputs = [
|
||||
libpcap
|
||||
];
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
];
|
||||
|
||||
doInstallCheck = true;
|
||||
versionCheckProgram = "${placeholder "out"}/bin/bsky";
|
||||
versionCheckProgramArg = [ "--version" ];
|
||||
nativeBuildInputs = [ versionCheckHook ];
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "A cli application for bluesky social";
|
||||
homepage = "https://github.com/mattn/bsky";
|
||||
changelog = "https://github.com/mattn/bsky/releases/tag/v${version}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ isabelroses ];
|
||||
mainProgram = "bsky";
|
||||
};
|
||||
}
|
|
@ -8,17 +8,17 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cairo";
|
||||
version = "2.9.3";
|
||||
version = "2.11.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "starkware-libs";
|
||||
repo = "cairo";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-X6aEyo3VY0C+1w1S7ZuxVKACKDHWaxPMR98ICq6/icg=";
|
||||
hash = "sha256-VOyqKeiPJ3/VOqcdQXC/rZnTriC2ScmAQ4IlouHjvpI=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-yjo7nxt/oAqPRI6I3WlnFC+lfT5HiQJnsjTuijx4ekk=";
|
||||
cargoHash = "sha256-e2Nire1TLcliq5KxoINJIZJdgohHRTXqIZPj1GNIe2A=";
|
||||
|
||||
# openssl crate requires perl during build process
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{ lib, stdenvNoCC, fetchurl, makeBinaryWrapper, jre }:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
version = "10.21.2";
|
||||
version = "10.21.4";
|
||||
pname = "checkstyle";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/checkstyle/checkstyle/releases/download/checkstyle-${version}/checkstyle-${version}-all.jar";
|
||||
sha256 = "sha256-r8uiXoaQFkQpcuxFE6jAbIEu32j1EciO9JfeAMM4ORc=";
|
||||
sha256 = "sha256-PB2U1uzIPgLf9YfJultrTsT+w4x6lY61h+/smyji8xg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeBinaryWrapper ];
|
||||
|
|
40
pkgs/by-name/co/cobalt/package.nix
Normal file
40
pkgs/by-name/co/cobalt/package.nix
Normal file
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
versionCheckHook,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "cobalt";
|
||||
version = "0.19.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cobalt-org";
|
||||
repo = "cobalt.rs";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-neOJ3UqRisCcyarRIXfHyl9nAe2Wl9IXVDNwIYEQYys=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-j2xmEoMV7lVhqj4lKWA3QdEDEGUpRlZc4ikZoDQJlB8=";
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgramArg = "--version";
|
||||
doInstallCheck = true;
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Static site generator written in Rust";
|
||||
homepage = "https://cobalt-org.github.io/";
|
||||
downloadPage = "https://github.com/cobalt-org/cobalt.rs/";
|
||||
changelog = "https://github.com/cobalt-org/cobalt.rs/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ethancedwards8 ];
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "cobalt";
|
||||
};
|
||||
})
|
|
@ -11,7 +11,7 @@
|
|||
let
|
||||
# Wants at least Java 22
|
||||
jdk = openjdk23;
|
||||
version = "5.9.5";
|
||||
version = "5.9.6";
|
||||
in
|
||||
maven.buildMavenPackage {
|
||||
pname = "cratedb";
|
||||
|
@ -21,7 +21,7 @@ maven.buildMavenPackage {
|
|||
owner = "crate";
|
||||
repo = "crate";
|
||||
tag = version;
|
||||
hash = "sha256-T72Cy/jU8l68Res85bcZysRB81IqUF4eqgRxW7TJ+6Q=";
|
||||
hash = "sha256-IBIOxcpd1MXMz+Z2utnjZfN74qX/ZrKVNrIjFaLKBEA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -33,8 +33,9 @@ maven.buildMavenPackage {
|
|||
(replaceVars ./fix-poms.patch { inherit jdk; })
|
||||
];
|
||||
|
||||
mvnHash = "sha256-D5cVCx++99DJWX5UHgJydDDYCYmH1cKQ3EAKktFz+gE=";
|
||||
mvnHash = "sha256-p0LSR6I876/JNfrLp19PnLAx00gL4E2mZK+CO8X2IzU=";
|
||||
mvnJdk = jdk;
|
||||
mvnParameters = "-DskipTests";
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "dssp";
|
||||
version = "4.4.10";
|
||||
version = "4.4.11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "PDB-REDO";
|
||||
repo = "dssp";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-YNYpHjp9kEszXvLF3RrNg6gYd4GPvfRVtdkUwJ89qOc=";
|
||||
hash = "sha256-7L9pdKWDa/g/r+cuou2b0pqS559qwuwHBBhDDhvM7VE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "files-cli";
|
||||
version = "2.13.251";
|
||||
version = "2.13.258";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "files-cli";
|
||||
owner = "files-com";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-6tNee396ki+/ixPD1c3E+1duFTrUL9aGeUCVFzF/WyA=";
|
||||
hash = "sha256-Idd0FJ/zi0S6hFvjKNw1a1cIEhccE+2e9azxaREtdiw=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-Rf2JWCEQYtzhKd7v0usRHDwoJLZFCE5/HXuweXNwvuA=";
|
||||
vendorHash = "sha256-fzDJSvYQkWyPSHrIoOeDHNLM3UWdCv9Wh8E1CxLLNhg=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "flow";
|
||||
pname = "flow-control";
|
||||
version = "0.3.2";
|
||||
|
||||
src = fetchFromGitHub {
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "flyway";
|
||||
version = "11.3.2";
|
||||
version = "11.3.4";
|
||||
src = fetchurl {
|
||||
url =
|
||||
"mirror://maven/org/flywaydb/flyway-commandline/${finalAttrs.version}/flyway-commandline-${finalAttrs.version}.tar.gz";
|
||||
sha256 = "sha256-n3TjM/z9kkMMqFboWT6ISBtYN3cFyhmFRgyUSfWolZs=";
|
||||
sha256 = "sha256-oJ8/PWMN/9BE0waLWbHoUVMuBcwbUltr0hLzilHRqVc=";
|
||||
};
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
dontBuild = true;
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
stdenv.mkDerivation rec {
|
||||
pname = "fortran-fpm";
|
||||
|
||||
version = "0.10.1";
|
||||
version = "0.11.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/fortran-lang/fpm/releases/download/v${version}/fpm-${version}.F90";
|
||||
sha256 = "sha256-dVPQW2DCp+iJojuhCgeEFVFpugG/x+DKhG986QuE4co=";
|
||||
sha256 = "sha256-mIozF+4kSO5yB9CilBDwinnIa92sMxSyoXWAGpz1jSc=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
|
|
@ -16,15 +16,24 @@ let
|
|||
}
|
||||
else
|
||||
throw "${pname}-${version} is not supported on ${stdenv.hostPlatform.system}";
|
||||
|
||||
appimageContents = appimageTools.extractType2 { inherit pname src; };
|
||||
|
||||
appimageContents = appimageTools.extractType2 {
|
||||
inherit pname version src;
|
||||
postExtract = ''
|
||||
substituteInPlace $out/gdevelop.desktop --replace-fail 'Exec=AppRun --no-sandbox %U' 'Exec=gdevelop'
|
||||
'';
|
||||
};
|
||||
dontPatchELF = true;
|
||||
|
||||
in
|
||||
appimageTools.wrapType2 {
|
||||
inherit pname version src;
|
||||
|
||||
extraInstallCommands = ''
|
||||
mkdir -p $out/share/applications
|
||||
cp ${appimageContents}/gdevelop.desktop $out/share/applications
|
||||
mkdir -p $out/share/icons
|
||||
cp -r ${appimageContents}/usr/share/icons/hicolor $out/share/icons
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Graphical Game Development Studio";
|
||||
homepage = "https://gdevelop.io/";
|
||||
|
@ -32,7 +41,7 @@ appimageTools.wrapType2 {
|
|||
license = lib.licenses.mit;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
maintainers = with lib.maintainers; [ tombert ];
|
||||
mainProgram = "gdevelop";
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -28,7 +28,13 @@ buildGoModule rec {
|
|||
meta = with lib; {
|
||||
description = "GitLab Docker toolset to pack, ship, store, and deliver content";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ yayayayaka ] ++ teams.cyberus.members;
|
||||
maintainers =
|
||||
with maintainers;
|
||||
[
|
||||
leona
|
||||
yayayayaka
|
||||
]
|
||||
++ teams.cyberus.members;
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,16 +6,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "gore";
|
||||
version = "0.5.7";
|
||||
version = "0.6.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "motemen";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-J6rXz62y/qj4GFXnUwpfx9UEUQaUVQjf7KQCSzmNsws=";
|
||||
sha256 = "sha256-7mhfegSSRE9FnKz+tWYMEtEKc+hayPQE8EEOEu33CjU=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-MpmDQ++32Rop1yYcibEr7hQJ7YAU1QvITzTSstL5V9w=";
|
||||
vendorHash = "sha256-0eCRDlcqZf+RAbs8oBRr+cd7ncWX6fXk/9jd8/GnAiw=";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "groovy";
|
||||
version = "4.0.25";
|
||||
version = "4.0.26";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://apache/groovy/${version}/distribution/apache-groovy-binary-${version}.zip";
|
||||
sha256 = "sha256-giytjgM4jyO/YT03+ZC4E7tBZf44n9P8wk+LlkdsMO8=";
|
||||
sha256 = "sha256-O+aIDG3nDq2i8/XGnh6UlT4LDE4zxGBMEEDQXd3q7ZI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
stdenv,
|
||||
SDL2_image_2_6,
|
||||
SDL2_image,
|
||||
SDL2_ttf,
|
||||
SDL2_net,
|
||||
fpc,
|
||||
|
@ -8,7 +8,8 @@
|
|||
ffmpeg,
|
||||
libglut,
|
||||
lib,
|
||||
fetchurl,
|
||||
fetchhg,
|
||||
fetchpatch,
|
||||
cmake,
|
||||
pkg-config,
|
||||
lua5_1,
|
||||
|
@ -19,14 +20,13 @@
|
|||
libGL,
|
||||
libGLU,
|
||||
physfs,
|
||||
qtbase,
|
||||
qttools,
|
||||
wrapQtAppsHook,
|
||||
llvm,
|
||||
qt5,
|
||||
withServer ? true,
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (qt5) qtbase qttools wrapQtAppsHook;
|
||||
|
||||
ghc = haskell.packages.ghc94.ghcWithPackages (
|
||||
pkgs: with pkgs; [
|
||||
SHA
|
||||
|
@ -43,19 +43,23 @@ let
|
|||
]
|
||||
);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation {
|
||||
pname = "hedgewars";
|
||||
version = "1.0.2";
|
||||
version = "1.0.2-unstable-2024-03-24";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://www.hedgewars.org/download/releases/hedgewars-src-${version}.tar.bz2";
|
||||
sha256 = "sha256-IB/l5FvYyls9gbGOwGvWu8n6fCxjvwGQBeL4C+W88hI=";
|
||||
src = fetchhg {
|
||||
url = "https://hg.hedgewars.org/hedgewars/";
|
||||
rev = "fcc98c953b5e";
|
||||
hash = "sha256-bUmyYXmhOYjvbd0elyNnaUx3X1QJl3w2/hpxFK9KQCE=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Add support for ffmpeg 6.0
|
||||
# https://github.com/hedgewars/hw/pull/74
|
||||
./support-ffmpeg-6.patch
|
||||
(fetchpatch {
|
||||
# https://github.com/hedgewars/hw/pull/74
|
||||
name = "Add support for ffmpeg 6.0";
|
||||
url = "https://github.com/hedgewars/hw/pull/74/commits/71691fad8654031328f4af077fc32aaf29cdb7d0.patch";
|
||||
hash = "sha256-nPfSQCc4eGCa4lCGl3gDx8fJp47N0lgVeDU5A5qb1yo=";
|
||||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -70,10 +74,9 @@ stdenv.mkDerivation rec {
|
|||
SDL2_net
|
||||
SDL2
|
||||
SDL2_mixer
|
||||
SDL2_image_2_6
|
||||
SDL2_image
|
||||
fpc
|
||||
lua5_1
|
||||
llvm # hard-requirement on aarch64, for some reason not strictly necessary on x86-64
|
||||
ffmpeg
|
||||
libglut
|
||||
physfs
|
||||
|
@ -87,7 +90,7 @@ stdenv.mkDerivation rec {
|
|||
|
||||
NIX_LDFLAGS = lib.concatMapStringsSep " " (e: "-rpath ${e}/lib") [
|
||||
SDL2.out
|
||||
SDL2_image_2_6
|
||||
SDL2_image
|
||||
SDL2_mixer
|
||||
SDL2_net
|
||||
SDL2_ttf
|
||||
|
@ -110,10 +113,19 @@ stdenv.mkDerivation rec {
|
|||
}"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Turn-based strategy artillery game similar to Worms";
|
||||
meta = {
|
||||
description = "Funny turn-based artillery game, featuring fighting hedgehogs!";
|
||||
homepage = "https://hedgewars.org/";
|
||||
license = licenses.gpl2Plus;
|
||||
license = with lib.licenses; [
|
||||
gpl2Only
|
||||
|
||||
# Assets
|
||||
fdl12Only
|
||||
|
||||
# Fonts
|
||||
bitstreamVera
|
||||
asl20
|
||||
];
|
||||
longDescription = ''
|
||||
Each player controls a team of several hedgehogs. During the course of
|
||||
the game, players take turns with one of their hedgehogs. They then use
|
||||
|
@ -137,11 +149,10 @@ stdenv.mkDerivation rec {
|
|||
contact with explosions, to zero (the damage dealt to the attacked
|
||||
hedgehog or hedgehogs after a player's or CPU turn is shown only when
|
||||
all movement on the battlefield has ceased).'';
|
||||
maintainers = with maintainers; [
|
||||
maintainers = with lib.maintainers; [
|
||||
kragniz
|
||||
fpletz
|
||||
];
|
||||
broken = stdenv.hostPlatform.isDarwin;
|
||||
platforms = platforms.linux;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
|
@ -9,11 +9,11 @@
|
|||
|
||||
stdenv.mkDerivation {
|
||||
pname = "heroku";
|
||||
version = "10.0.2";
|
||||
version = "10.2.0";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://cli-assets.heroku.com/versions/10.0.2/7947ef4/heroku-v10.0.2-7947ef4-linux-x64.tar.xz";
|
||||
hash = "sha256-+z+oP4KUhlQuhmvXJ8cxkrDJzllww1gybJCst7RIph0=";
|
||||
url = "https://cli-assets.heroku.com/versions/10.2.0/9d9128b/heroku-v10.2.0-9d9128b-linux-x64.tar.xz";
|
||||
hash = "sha256-RIkRcJc+pFu4czwlNgo8ntmKu/ihY25Q6jBCP6pEIdI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
|
@ -4,21 +4,20 @@
|
|||
fetchurl,
|
||||
stdenv,
|
||||
}:
|
||||
|
||||
appimageTools.wrapType2 rec {
|
||||
pname = "httpie-desktop";
|
||||
version = "2025.1.0";
|
||||
version = "2025.2.0";
|
||||
|
||||
src =
|
||||
if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||
fetchurl {
|
||||
url = "https://github.com/httpie/desktop/releases/download/v${version}/HTTPie-${version}-arm64.AppImage";
|
||||
hash = "sha256-YadVCoBNFFco4773COyJOGHtbFKW1zMzi5kazWqIGbY=";
|
||||
hash = "sha256-FBzjlYwgCULgjaJUPALlqqRj7fZMps7hybt5m5EkeAo=";
|
||||
}
|
||||
else
|
||||
fetchurl {
|
||||
url = "https://github.com/httpie/desktop/releases/download/v${version}/HTTPie-${version}.AppImage";
|
||||
hash = "sha256-8Ecamw+rmY3iun8ytMsJW3gGHLNcyuZ7VkOiNfiDEyk=";
|
||||
hash = "sha256-qFDiFXQbYAhweQhgYfZW/lUMtmw09tqT9t/GPJRtZU8=";
|
||||
};
|
||||
|
||||
extraInstallCommands =
|
||||
|
@ -26,12 +25,10 @@ appimageTools.wrapType2 rec {
|
|||
contents = appimageTools.extractType2 { inherit pname version src; };
|
||||
in
|
||||
''
|
||||
mkdir -p $out/share
|
||||
cp -r ${contents}/usr/share/* $out/share
|
||||
chmod +w $out/share
|
||||
install -Dm644 ${contents}/httpie.desktop $out/share/applications/httpie.desktop
|
||||
substituteInPlace $out/share/applications/httpie.desktop \
|
||||
--replace-fail 'Exec=AppRun' 'Exec=httpie-desktop'
|
||||
cp -r ${contents}/usr/share/* $out/share
|
||||
'';
|
||||
|
||||
meta = {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue