Merge branch 'master' into ohmyzsh-cleanups
This commit is contained in:
commit
63a726d847
|
@ -57,10 +57,13 @@ indent_size = unset
|
|||
[deps.nix]
|
||||
insert_final_newline = unset
|
||||
|
||||
[eggs.nix]
|
||||
trim_trailing_whitespace = unset
|
||||
|
||||
[gemset.nix]
|
||||
insert_final_newline = unset
|
||||
|
||||
[node-packages.nix]
|
||||
[node-{composition,packages}.nix]
|
||||
insert_final_newline = unset
|
||||
|
||||
[nixos/modules/services/networking/ircd-hybrid/*.{conf,in}]
|
||||
|
@ -102,5 +105,8 @@ insert_final_newline = unset
|
|||
indent_size = unset
|
||||
trim_trailing_whitespace = unset
|
||||
|
||||
[pkgs/top-level/emscripten-packages.nix]
|
||||
trim_trailing_whitespace = unset
|
||||
|
||||
[pkgs/top-level/perl-packages.nix]
|
||||
indent_size = unset
|
||||
|
|
27
.github/workflows/editorconfig.yml
vendored
Normal file
27
.github/workflows/editorconfig.yml
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
name: "Checking EditorConfig"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: technote-space/get-diff-action@v3.1.0
|
||||
- name: Fetch editorconfig-checker
|
||||
if: env.GIT_DIFF
|
||||
env:
|
||||
ECC_VERSION: "2.1.0"
|
||||
ECC_URL: "https://github.com/editorconfig-checker/editorconfig-checker/releases/download"
|
||||
run: |
|
||||
curl -sSf -O -L -C - "$ECC_URL/$ECC_VERSION/ec-linux-amd64.tar.gz" && \
|
||||
tar xzf ec-linux-amd64.tar.gz && \
|
||||
mv ./bin/ec-linux-amd64 ./bin/editorconfig-checker
|
||||
- name: Checking EditorConfig
|
||||
if: env.GIT_DIFF
|
||||
run: |
|
||||
./bin/editorconfig-checker -disable-indentation \
|
||||
${{ env.GIT_DIFF }}
|
|
@ -46,7 +46,7 @@ rec {
|
|||
|
||||
armv7a-android-prebuilt = {
|
||||
config = "armv7a-unknown-linux-androideabi";
|
||||
sdkVer = "24";
|
||||
sdkVer = "29";
|
||||
ndkVer = "18b";
|
||||
platform = platforms.armv7a-android;
|
||||
useAndroidPrebuilt = true;
|
||||
|
@ -54,7 +54,7 @@ rec {
|
|||
|
||||
aarch64-android-prebuilt = {
|
||||
config = "aarch64-unknown-linux-android";
|
||||
sdkVer = "24";
|
||||
sdkVer = "29";
|
||||
ndkVer = "18b";
|
||||
platform = platforms.aarch64-multiplatform;
|
||||
useAndroidPrebuilt = true;
|
||||
|
|
|
@ -2879,6 +2879,12 @@
|
|||
githubId = 5918766;
|
||||
name = "Franz Thoma";
|
||||
};
|
||||
fooker = {
|
||||
email = "fooker@lab.sh";
|
||||
github = "fooker";
|
||||
githubId = 405105;
|
||||
name = "Dustin Frisch";
|
||||
};
|
||||
forkk = {
|
||||
email = "forkk@forkk.net";
|
||||
github = "forkk";
|
||||
|
@ -7355,6 +7361,12 @@
|
|||
githubId = 1153271;
|
||||
name = "Sander van der Burg";
|
||||
};
|
||||
sarcasticadmin = {
|
||||
email = "rob@sarcasticadmin.com";
|
||||
github = "sarcasticadmin";
|
||||
githubId = 30531572;
|
||||
name = "Robert James Hernandez";
|
||||
};
|
||||
sargon = {
|
||||
email = "danielehlers@mindeye.net";
|
||||
github = "sargon";
|
||||
|
@ -7989,6 +8001,12 @@
|
|||
githubId = 65870;
|
||||
name = "Сухарик";
|
||||
};
|
||||
SuperSandro2000 = {
|
||||
email = "sandro.jaeckel@gmail.com";
|
||||
github = "SuperSandro2000";
|
||||
githubId = 7258858;
|
||||
name = "Sandro Jäckel";
|
||||
};
|
||||
SuprDewd = {
|
||||
email = "suprdewd@gmail.com";
|
||||
github = "SuprDewd";
|
||||
|
@ -9488,6 +9506,12 @@
|
|||
github = "fzakaria";
|
||||
githubId = 605070;
|
||||
};
|
||||
nagisa = {
|
||||
name = "Simonas Kazlauskas";
|
||||
email = "nixpkgs@kazlauskas.me";
|
||||
github = "nagisa";
|
||||
githubId = 679122;
|
||||
};
|
||||
yevhenshymotiuk = {
|
||||
name = "Yevhen Shymotiuk";
|
||||
email = "yevhenshymotiuk@gmail.com";
|
||||
|
|
|
@ -35,6 +35,10 @@ lua-cmsgpack,,,,,
|
|||
lua-iconv,,,,,
|
||||
lua-lsp,,http://luarocks.org/dev,,,
|
||||
lua-messagepack,,,,,
|
||||
lua-resty-http,,,,,
|
||||
lua-resty-jwt,,,,,
|
||||
lua-resty-openidc,,,,,
|
||||
lua-resty-session,,,,,
|
||||
lua-term,,,,,
|
||||
lua-toml,,,,,
|
||||
lua-zlib,,,,,koral
|
||||
|
|
|
|
@ -204,6 +204,16 @@ GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;
|
|||
Note: Password support is only avaiable in GRUB version 2.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Following its deprecation in 20.03, the Perl NixOS test driver has been removed.
|
||||
All remaining tests have been ported to the Python test framework.
|
||||
Code outside nixpkgs using <filename>make-test.nix</filename> or
|
||||
<filename>testing.nix</filename> needs to be ported to
|
||||
<filename>make-test-python.nix</filename> and
|
||||
<filename>testing-python.nix</filename> respectively.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
@ -223,6 +233,11 @@ GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;
|
|||
<para>
|
||||
There is a new <xref linkend="opt-security.doas.enable"/> module that provides <command>doas</command>, a lighter alternative to <command>sudo</command> with many of the same features.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<link xlink:href="https://hercules-ci.com">Hercules CI</link> Agent is a specialized build agent for projects built with Nix. See the <link xlink:href="https://nixos.org/nixos/options.html#services.hercules-ci-agent">options</link> and <link xlink:href="https://docs.hercules-ci.com/hercules-ci/getting-started/#deploy-agent">setup</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
package Logger;
|
||||
|
||||
use strict;
|
||||
use Thread::Queue;
|
||||
use XML::Writer;
|
||||
use Encode qw(decode encode);
|
||||
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
|
||||
|
||||
sub new {
|
||||
my ($class) = @_;
|
||||
|
||||
my $logFile = defined $ENV{LOGFILE} ? "$ENV{LOGFILE}" : "/dev/null";
|
||||
my $log = new XML::Writer(OUTPUT => new IO::File(">$logFile"));
|
||||
|
||||
my $self = {
|
||||
log => $log,
|
||||
logQueue => Thread::Queue->new()
|
||||
};
|
||||
|
||||
$self->{log}->startTag("logfile");
|
||||
|
||||
bless $self, $class;
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub close {
|
||||
my ($self) = @_;
|
||||
$self->{log}->endTag("logfile");
|
||||
$self->{log}->end;
|
||||
}
|
||||
|
||||
sub drainLogQueue {
|
||||
my ($self) = @_;
|
||||
while (defined (my $item = $self->{logQueue}->dequeue_nb())) {
|
||||
$self->{log}->dataElement("line", sanitise($item->{msg}), 'machine' => $item->{machine}, 'type' => 'serial');
|
||||
}
|
||||
}
|
||||
|
||||
sub maybePrefix {
|
||||
my ($msg, $attrs) = @_;
|
||||
$msg = $attrs->{machine} . ": " . $msg if defined $attrs->{machine};
|
||||
return $msg;
|
||||
}
|
||||
|
||||
sub nest {
|
||||
my ($self, $msg, $coderef, $attrs) = @_;
|
||||
print STDERR maybePrefix("$msg\n", $attrs);
|
||||
$self->{log}->startTag("nest");
|
||||
$self->{log}->dataElement("head", $msg, %{$attrs});
|
||||
my $now = clock_gettime(CLOCK_MONOTONIC);
|
||||
$self->drainLogQueue();
|
||||
eval { &$coderef };
|
||||
my $res = $@;
|
||||
$self->drainLogQueue();
|
||||
$self->log(sprintf("(%.2f seconds)", clock_gettime(CLOCK_MONOTONIC) - $now));
|
||||
$self->{log}->endTag("nest");
|
||||
die $@ if $@;
|
||||
}
|
||||
|
||||
sub sanitise {
|
||||
my ($s) = @_;
|
||||
$s =~ s/[[:cntrl:]\xff]//g;
|
||||
$s = decode('UTF-8', $s, Encode::FB_DEFAULT);
|
||||
return encode('UTF-8', $s, Encode::FB_CROAK);
|
||||
}
|
||||
|
||||
sub log {
|
||||
my ($self, $msg, $attrs) = @_;
|
||||
chomp $msg;
|
||||
print STDERR maybePrefix("$msg\n", $attrs);
|
||||
$self->drainLogQueue();
|
||||
$self->{log}->dataElement("line", $msg, %{$attrs});
|
||||
}
|
||||
|
||||
1;
|
|
@ -1,734 +0,0 @@
|
|||
package Machine;
|
||||
|
||||
use strict;
|
||||
use threads;
|
||||
use Socket;
|
||||
use IO::Handle;
|
||||
use POSIX qw(dup2);
|
||||
use FileHandle;
|
||||
use Cwd;
|
||||
use File::Basename;
|
||||
use File::Path qw(make_path);
|
||||
use File::Slurp;
|
||||
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
|
||||
|
||||
|
||||
my $showGraphics = defined $ENV{'DISPLAY'};
|
||||
|
||||
my $sharedDir;
|
||||
|
||||
|
||||
sub new {
|
||||
my ($class, $args) = @_;
|
||||
|
||||
my $startCommand = $args->{startCommand};
|
||||
|
||||
my $name = $args->{name};
|
||||
if (!$name) {
|
||||
$startCommand =~ /run-(.*)-vm$/ if defined $startCommand;
|
||||
$name = $1 || "machine";
|
||||
}
|
||||
|
||||
if (!$startCommand) {
|
||||
# !!! merge with qemu-vm.nix.
|
||||
my $netBackend = "-netdev user,id=net0";
|
||||
my $netFrontend = "-device virtio-net-pci,netdev=net0";
|
||||
|
||||
$netBackend .= "," . $args->{netBackendArgs}
|
||||
if defined $args->{netBackendArgs};
|
||||
|
||||
$netFrontend .= "," . $args->{netFrontendArgs}
|
||||
if defined $args->{netFrontendArgs};
|
||||
|
||||
$startCommand =
|
||||
"qemu-kvm -m 384 $netBackend $netFrontend \$QEMU_OPTS ";
|
||||
|
||||
if (defined $args->{hda}) {
|
||||
if ($args->{hdaInterface} eq "scsi") {
|
||||
$startCommand .= "-drive id=hda,file="
|
||||
. Cwd::abs_path($args->{hda})
|
||||
. ",werror=report,if=none "
|
||||
. "-device scsi-hd,drive=hda ";
|
||||
} else {
|
||||
$startCommand .= "-drive file=" . Cwd::abs_path($args->{hda})
|
||||
. ",if=" . $args->{hdaInterface}
|
||||
. ",werror=report ";
|
||||
}
|
||||
}
|
||||
|
||||
$startCommand .= "-cdrom $args->{cdrom} "
|
||||
if defined $args->{cdrom};
|
||||
$startCommand .= "-device piix3-usb-uhci -drive id=usbdisk,file=$args->{usb},if=none,readonly -device usb-storage,drive=usbdisk "
|
||||
if defined $args->{usb};
|
||||
$startCommand .= "-bios $args->{bios} "
|
||||
if defined $args->{bios};
|
||||
$startCommand .= $args->{qemuFlags} || "";
|
||||
}
|
||||
|
||||
my $tmpDir = $ENV{'TMPDIR'} || "/tmp";
|
||||
unless (defined $sharedDir) {
|
||||
$sharedDir = $tmpDir . "/xchg-shared";
|
||||
make_path($sharedDir, { mode => 0700, owner => $< });
|
||||
}
|
||||
|
||||
my $allowReboot = 0;
|
||||
$allowReboot = $args->{allowReboot} if defined $args->{allowReboot};
|
||||
|
||||
my $self = {
|
||||
startCommand => $startCommand,
|
||||
name => $name,
|
||||
allowReboot => $allowReboot,
|
||||
booted => 0,
|
||||
pid => 0,
|
||||
connected => 0,
|
||||
socket => undef,
|
||||
stateDir => "$tmpDir/vm-state-$name",
|
||||
monitor => undef,
|
||||
log => $args->{log},
|
||||
redirectSerial => $args->{redirectSerial} // 1,
|
||||
};
|
||||
|
||||
mkdir $self->{stateDir}, 0700;
|
||||
|
||||
bless $self, $class;
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
sub log {
|
||||
my ($self, $msg) = @_;
|
||||
$self->{log}->log($msg, { machine => $self->{name} });
|
||||
}
|
||||
|
||||
|
||||
sub nest {
|
||||
my ($self, $msg, $coderef, $attrs) = @_;
|
||||
$self->{log}->nest($msg, $coderef, { %{$attrs || {}}, machine => $self->{name} });
|
||||
}
|
||||
|
||||
|
||||
sub name {
|
||||
my ($self) = @_;
|
||||
return $self->{name};
|
||||
}
|
||||
|
||||
|
||||
sub stateDir {
|
||||
my ($self) = @_;
|
||||
return $self->{stateDir};
|
||||
}
|
||||
|
||||
|
||||
sub start {
|
||||
my ($self) = @_;
|
||||
return if $self->{booted};
|
||||
|
||||
$self->log("starting vm");
|
||||
|
||||
# Create a socket pair for the serial line input/output of the VM.
|
||||
my ($serialP, $serialC);
|
||||
socketpair($serialP, $serialC, PF_UNIX, SOCK_STREAM, 0) or die;
|
||||
|
||||
# Create a Unix domain socket to which QEMU's monitor will connect.
|
||||
my $monitorPath = $self->{stateDir} . "/monitor";
|
||||
unlink $monitorPath;
|
||||
my $monitorS;
|
||||
socket($monitorS, PF_UNIX, SOCK_STREAM, 0) or die;
|
||||
bind($monitorS, sockaddr_un($monitorPath)) or die "cannot bind monitor socket: $!";
|
||||
listen($monitorS, 1) or die;
|
||||
|
||||
# Create a Unix domain socket to which the root shell in the guest will connect.
|
||||
my $shellPath = $self->{stateDir} . "/shell";
|
||||
unlink $shellPath;
|
||||
my $shellS;
|
||||
socket($shellS, PF_UNIX, SOCK_STREAM, 0) or die;
|
||||
bind($shellS, sockaddr_un($shellPath)) or die "cannot bind shell socket: $!";
|
||||
listen($shellS, 1) or die;
|
||||
|
||||
# Start the VM.
|
||||
my $pid = fork();
|
||||
die if $pid == -1;
|
||||
|
||||
if ($pid == 0) {
|
||||
close $serialP;
|
||||
close $monitorS;
|
||||
close $shellS;
|
||||
if ($self->{redirectSerial}) {
|
||||
open NUL, "</dev/null" or die;
|
||||
dup2(fileno(NUL), fileno(STDIN));
|
||||
dup2(fileno($serialC), fileno(STDOUT));
|
||||
dup2(fileno($serialC), fileno(STDERR));
|
||||
}
|
||||
$ENV{TMPDIR} = $self->{stateDir};
|
||||
$ENV{SHARED_DIR} = $sharedDir;
|
||||
$ENV{USE_TMPDIR} = 1;
|
||||
$ENV{QEMU_OPTS} =
|
||||
($self->{allowReboot} ? "" : "-no-reboot ") .
|
||||
"-monitor unix:./monitor -chardev socket,id=shell,path=./shell " .
|
||||
"-device virtio-serial -device virtconsole,chardev=shell " .
|
||||
"-device virtio-rng-pci " .
|
||||
($showGraphics ? "-serial stdio" : "-nographic") . " " . ($ENV{QEMU_OPTS} || "");
|
||||
chdir $self->{stateDir} or die;
|
||||
exec $self->{startCommand};
|
||||
die "running VM script: $!";
|
||||
}
|
||||
|
||||
# Process serial line output.
|
||||
close $serialC;
|
||||
|
||||
threads->create(\&processSerialOutput, $self, $serialP)->detach;
|
||||
|
||||
sub processSerialOutput {
|
||||
my ($self, $serialP) = @_;
|
||||
while (<$serialP>) {
|
||||
chomp;
|
||||
s/\r$//;
|
||||
print STDERR $self->{name}, "# $_\n";
|
||||
$self->{log}->{logQueue}->enqueue({msg => $_, machine => $self->{name}}); # !!!
|
||||
}
|
||||
}
|
||||
|
||||
eval {
|
||||
local $SIG{CHLD} = sub { die "QEMU died prematurely\n"; };
|
||||
|
||||
# Wait until QEMU connects to the monitor.
|
||||
accept($self->{monitor}, $monitorS) or die;
|
||||
|
||||
# Wait until QEMU connects to the root shell socket. QEMU
|
||||
# does so immediately; this doesn't mean that the root shell
|
||||
# has connected yet inside the guest.
|
||||
accept($self->{socket}, $shellS) or die;
|
||||
$self->{socket}->autoflush(1);
|
||||
};
|
||||
die "$@" if $@;
|
||||
|
||||
$self->waitForMonitorPrompt;
|
||||
|
||||
$self->log("QEMU running (pid $pid)");
|
||||
|
||||
$self->{pid} = $pid;
|
||||
$self->{booted} = 1;
|
||||
}
|
||||
|
||||
|
||||
# Send a command to the monitor and wait for it to finish. TODO: QEMU
|
||||
# also has a JSON-based monitor interface now, but it doesn't support
|
||||
# all commands yet. We should use it once it does.
|
||||
sub sendMonitorCommand {
|
||||
my ($self, $command) = @_;
|
||||
$self->log("sending monitor command: $command");
|
||||
syswrite $self->{monitor}, "$command\n";
|
||||
return $self->waitForMonitorPrompt;
|
||||
}
|
||||
|
||||
|
||||
# Wait until the monitor sends "(qemu) ".
|
||||
sub waitForMonitorPrompt {
|
||||
my ($self) = @_;
|
||||
my $res = "";
|
||||
my $s;
|
||||
while (sysread($self->{monitor}, $s, 1024)) {
|
||||
$res .= $s;
|
||||
last if $res =~ s/\(qemu\) $//;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
# Call the given code reference repeatedly, with 1 second intervals,
|
||||
# until it returns 1 or a timeout is reached.
|
||||
sub retry {
|
||||
my ($coderef) = @_;
|
||||
my $n;
|
||||
for ($n = 899; $n >=0; $n--) {
|
||||
return if &$coderef($n);
|
||||
sleep 1;
|
||||
}
|
||||
die "action timed out after $n seconds";
|
||||
}
|
||||
|
||||
|
||||
sub connect {
|
||||
my ($self) = @_;
|
||||
return if $self->{connected};
|
||||
|
||||
$self->nest("waiting for the VM to finish booting", sub {
|
||||
|
||||
$self->start;
|
||||
|
||||
my $now = clock_gettime(CLOCK_MONOTONIC);
|
||||
local $SIG{ALRM} = sub { die "timed out waiting for the VM to connect\n"; };
|
||||
alarm 600;
|
||||
readline $self->{socket} or die "the VM quit before connecting\n";
|
||||
alarm 0;
|
||||
|
||||
$self->log("connected to guest root shell");
|
||||
# We're interested in tracking how close we are to `alarm`.
|
||||
$self->log(sprintf("(connecting took %.2f seconds)", clock_gettime(CLOCK_MONOTONIC) - $now));
|
||||
$self->{connected} = 1;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub waitForShutdown {
|
||||
my ($self) = @_;
|
||||
return unless $self->{booted};
|
||||
|
||||
$self->nest("waiting for the VM to power off", sub {
|
||||
waitpid $self->{pid}, 0;
|
||||
$self->{pid} = 0;
|
||||
$self->{booted} = 0;
|
||||
$self->{connected} = 0;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub isUp {
|
||||
my ($self) = @_;
|
||||
return $self->{booted} && $self->{connected};
|
||||
}
|
||||
|
||||
|
||||
sub execute_ {
|
||||
my ($self, $command) = @_;
|
||||
|
||||
$self->connect;
|
||||
|
||||
print { $self->{socket} } ("( $command ); echo '|!=EOF' \$?\n");
|
||||
|
||||
my $out = "";
|
||||
|
||||
while (1) {
|
||||
my $line = readline($self->{socket});
|
||||
die "connection to VM lost unexpectedly" unless defined $line;
|
||||
#$self->log("got line: $line");
|
||||
if ($line =~ /^(.*)\|\!\=EOF\s+(\d+)$/) {
|
||||
$out .= $1;
|
||||
$self->log("exit status $2");
|
||||
return ($2, $out);
|
||||
}
|
||||
$out .= $line;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub execute {
|
||||
my ($self, $command) = @_;
|
||||
my @res;
|
||||
$self->nest("running command: $command", sub {
|
||||
@res = $self->execute_($command);
|
||||
});
|
||||
return @res;
|
||||
}
|
||||
|
||||
|
||||
sub succeed {
|
||||
my ($self, @commands) = @_;
|
||||
|
||||
my $res;
|
||||
foreach my $command (@commands) {
|
||||
$self->nest("must succeed: $command", sub {
|
||||
my ($status, $out) = $self->execute_($command);
|
||||
if ($status != 0) {
|
||||
$self->log("output: $out");
|
||||
die "command `$command' did not succeed (exit code $status)\n";
|
||||
}
|
||||
$res .= $out;
|
||||
});
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
sub mustSucceed {
|
||||
succeed @_;
|
||||
}
|
||||
|
||||
|
||||
sub waitUntilSucceeds {
|
||||
my ($self, $command) = @_;
|
||||
$self->nest("waiting for success: $command", sub {
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute($command);
|
||||
return 1 if $status == 0;
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub waitUntilFails {
|
||||
my ($self, $command) = @_;
|
||||
$self->nest("waiting for failure: $command", sub {
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute($command);
|
||||
return 1 if $status != 0;
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub fail {
|
||||
my ($self, $command) = @_;
|
||||
$self->nest("must fail: $command", sub {
|
||||
my ($status, $out) = $self->execute_($command);
|
||||
die "command `$command' unexpectedly succeeded"
|
||||
if $status == 0;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub mustFail {
|
||||
fail @_;
|
||||
}
|
||||
|
||||
|
||||
sub getUnitInfo {
|
||||
my ($self, $unit, $user) = @_;
|
||||
my ($status, $lines) = $self->systemctl("--no-pager show \"$unit\"", $user);
|
||||
return undef if $status != 0;
|
||||
my $info = {};
|
||||
foreach my $line (split '\n', $lines) {
|
||||
$line =~ /^([^=]+)=(.*)$/ or next;
|
||||
$info->{$1} = $2;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
sub systemctl {
|
||||
my ($self, $q, $user) = @_;
|
||||
if ($user) {
|
||||
$q =~ s/'/\\'/g;
|
||||
return $self->execute("su -l $user -c \$'XDG_RUNTIME_DIR=/run/user/`id -u` systemctl --user $q'");
|
||||
}
|
||||
|
||||
return $self->execute("systemctl $q");
|
||||
}
|
||||
|
||||
# Fail if the given systemd unit is not in the "active" state.
|
||||
sub requireActiveUnit {
|
||||
my ($self, $unit) = @_;
|
||||
$self->nest("checking if unit ‘$unit’ has reached state 'active'", sub {
|
||||
my $info = $self->getUnitInfo($unit);
|
||||
my $state = $info->{ActiveState};
|
||||
if ($state ne "active") {
|
||||
die "Expected unit ‘$unit’ to to be in state 'active' but it is in state ‘$state’\n";
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
# Wait for a systemd unit to reach the "active" state.
|
||||
sub waitForUnit {
|
||||
my ($self, $unit, $user) = @_;
|
||||
$self->nest("waiting for unit ‘$unit’", sub {
|
||||
retry sub {
|
||||
my $info = $self->getUnitInfo($unit, $user);
|
||||
my $state = $info->{ActiveState};
|
||||
die "unit ‘$unit’ reached state ‘$state’\n" if $state eq "failed";
|
||||
if ($state eq "inactive") {
|
||||
# If there are no pending jobs, then assume this unit
|
||||
# will never reach active state.
|
||||
my ($status, $jobs) = $self->systemctl("list-jobs --full 2>&1", $user);
|
||||
if ($jobs =~ /No jobs/) { # FIXME: fragile
|
||||
# Handle the case where the unit may have started
|
||||
# between the previous getUnitInfo() and
|
||||
# list-jobs.
|
||||
my $info2 = $self->getUnitInfo($unit);
|
||||
die "unit ‘$unit’ is inactive and there are no pending jobs\n"
|
||||
if $info2->{ActiveState} eq $state;
|
||||
}
|
||||
}
|
||||
return 1 if $state eq "active";
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub waitForJob {
|
||||
my ($self, $jobName) = @_;
|
||||
return $self->waitForUnit($jobName);
|
||||
}
|
||||
|
||||
|
||||
# Wait until the specified file exists.
|
||||
sub waitForFile {
|
||||
my ($self, $fileName) = @_;
|
||||
$self->nest("waiting for file ‘$fileName’", sub {
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute("test -e $fileName");
|
||||
return 1 if $status == 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sub startJob {
|
||||
my ($self, $jobName, $user) = @_;
|
||||
$self->systemctl("start $jobName", $user);
|
||||
# FIXME: check result
|
||||
}
|
||||
|
||||
sub stopJob {
|
||||
my ($self, $jobName, $user) = @_;
|
||||
$self->systemctl("stop $jobName", $user);
|
||||
}
|
||||
|
||||
|
||||
# Wait until the machine is listening on the given TCP port.
|
||||
sub waitForOpenPort {
|
||||
my ($self, $port) = @_;
|
||||
$self->nest("waiting for TCP port $port", sub {
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute("nc -z localhost $port");
|
||||
return 1 if $status == 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
# Wait until the machine is not listening on the given TCP port.
|
||||
sub waitForClosedPort {
|
||||
my ($self, $port) = @_;
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute("nc -z localhost $port");
|
||||
return 1 if $status != 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub shutdown {
|
||||
my ($self) = @_;
|
||||
return unless $self->{booted};
|
||||
|
||||
print { $self->{socket} } ("poweroff\n");
|
||||
|
||||
$self->waitForShutdown;
|
||||
}
|
||||
|
||||
|
||||
sub crash {
|
||||
my ($self) = @_;
|
||||
return unless $self->{booted};
|
||||
|
||||
$self->log("forced crash");
|
||||
|
||||
$self->sendMonitorCommand("quit");
|
||||
|
||||
$self->waitForShutdown;
|
||||
}
|
||||
|
||||
|
||||
# Make the machine unreachable by shutting down eth1 (the multicast
|
||||
# interface used to talk to the other VMs). We keep eth0 up so that
|
||||
# the test driver can continue to talk to the machine.
|
||||
sub block {
|
||||
my ($self) = @_;
|
||||
$self->sendMonitorCommand("set_link virtio-net-pci.1 off");
|
||||
}
|
||||
|
||||
|
||||
# Make the machine reachable.
|
||||
sub unblock {
|
||||
my ($self) = @_;
|
||||
$self->sendMonitorCommand("set_link virtio-net-pci.1 on");
|
||||
}
|
||||
|
||||
|
||||
# Take a screenshot of the X server on :0.0.
|
||||
sub screenshot {
|
||||
my ($self, $filename) = @_;
|
||||
my $dir = $ENV{'out'} || Cwd::abs_path(".");
|
||||
$filename = "$dir/${filename}.png" if $filename =~ /^\w+$/;
|
||||
my $tmp = "${filename}.ppm";
|
||||
my $name = basename($filename);
|
||||
$self->nest("making screenshot ‘$name’", sub {
|
||||
$self->sendMonitorCommand("screendump $tmp");
|
||||
system("pnmtopng $tmp > ${filename}") == 0
|
||||
or die "cannot convert screenshot";
|
||||
unlink $tmp;
|
||||
}, { image => $name } );
|
||||
}
|
||||
|
||||
# Get the text of TTY<n>
|
||||
sub getTTYText {
|
||||
my ($self, $tty) = @_;
|
||||
|
||||
my ($status, $out) = $self->execute("fold -w\$(stty -F /dev/tty${tty} size | awk '{print \$2}') /dev/vcs${tty}");
|
||||
return $out;
|
||||
}
|
||||
|
||||
# Wait until TTY<n>'s text matches a particular regular expression
|
||||
sub waitUntilTTYMatches {
|
||||
my ($self, $tty, $regexp) = @_;
|
||||
|
||||
$self->nest("waiting for $regexp to appear on tty $tty", sub {
|
||||
retry sub {
|
||||
my ($retries_remaining) = @_;
|
||||
if ($retries_remaining == 0) {
|
||||
$self->log("Last chance to match /$regexp/ on TTY$tty, which currently contains:");
|
||||
$self->log($self->getTTYText($tty));
|
||||
}
|
||||
|
||||
return 1 if $self->getTTYText($tty) =~ /$regexp/;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
# Debugging: Dump the contents of the TTY<n>
|
||||
sub dumpTTYContents {
|
||||
my ($self, $tty) = @_;
|
||||
|
||||
$self->execute("fold -w 80 /dev/vcs${tty} | systemd-cat");
|
||||
}
|
||||
|
||||
# Take a screenshot and return the result as text using optical character
|
||||
# recognition.
|
||||
sub getScreenText {
|
||||
my ($self) = @_;
|
||||
|
||||
system("command -v tesseract &> /dev/null") == 0
|
||||
or die "getScreenText used but enableOCR is false";
|
||||
|
||||
my $text;
|
||||
$self->nest("performing optical character recognition", sub {
|
||||
my $tmpbase = Cwd::abs_path(".")."/ocr";
|
||||
my $tmpin = $tmpbase."in.ppm";
|
||||
|
||||
$self->sendMonitorCommand("screendump $tmpin");
|
||||
|
||||
my $magickArgs = "-filter Catrom -density 72 -resample 300 "
|
||||
. "-contrast -normalize -despeckle -type grayscale "
|
||||
. "-sharpen 1 -posterize 3 -negate -gamma 100 "
|
||||
. "-blur 1x65535";
|
||||
my $tessArgs = "-c debug_file=/dev/null --psm 11 --oem 2";
|
||||
|
||||
$text = `convert $magickArgs $tmpin tiff:- | tesseract - - $tessArgs`;
|
||||
my $status = $? >> 8;
|
||||
unlink $tmpin;
|
||||
|
||||
die "OCR failed with exit code $status" if $status != 0;
|
||||
});
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
# Wait until a specific regexp matches the textual contents of the screen.
|
||||
sub waitForText {
|
||||
my ($self, $regexp) = @_;
|
||||
$self->nest("waiting for $regexp to appear on the screen", sub {
|
||||
retry sub {
|
||||
my ($retries_remaining) = @_;
|
||||
if ($retries_remaining == 0) {
|
||||
$self->log("Last chance to match /$regexp/ on the screen, which currently contains:");
|
||||
$self->log($self->getScreenText);
|
||||
}
|
||||
|
||||
return 1 if $self->getScreenText =~ /$regexp/;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
# Wait until it is possible to connect to the X server. Note that
|
||||
# testing the existence of /tmp/.X11-unix/X0 is insufficient.
|
||||
sub waitForX {
|
||||
my ($self, $regexp) = @_;
|
||||
$self->nest("waiting for the X11 server", sub {
|
||||
retry sub {
|
||||
my ($status, $out) = $self->execute("journalctl -b SYSLOG_IDENTIFIER=systemd | grep 'Reached target Current graphical'");
|
||||
return 0 if $status != 0;
|
||||
($status, $out) = $self->execute("[ -e /tmp/.X11-unix/X0 ]");
|
||||
return 1 if $status == 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub getWindowNames {
|
||||
my ($self) = @_;
|
||||
my $res = $self->mustSucceed(
|
||||
q{xwininfo -root -tree | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'});
|
||||
return split /\n/, $res;
|
||||
}
|
||||
|
||||
|
||||
sub waitForWindow {
|
||||
my ($self, $regexp) = @_;
|
||||
$self->nest("waiting for a window to appear", sub {
|
||||
retry sub {
|
||||
my @names = $self->getWindowNames;
|
||||
|
||||
my ($retries_remaining) = @_;
|
||||
if ($retries_remaining == 0) {
|
||||
$self->log("Last chance to match /$regexp/ on the the window list, which currently contains:");
|
||||
$self->log(join(", ", @names));
|
||||
}
|
||||
|
||||
foreach my $n (@names) {
|
||||
return 1 if $n =~ /$regexp/;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub copyFileFromHost {
|
||||
my ($self, $from, $to) = @_;
|
||||
my $s = `cat $from` or die;
|
||||
$s =~ s/'/'\\''/g;
|
||||
$self->mustSucceed("echo '$s' > $to");
|
||||
}
|
||||
|
||||
|
||||
my %charToKey = (
|
||||
'A' => "shift-a", 'N' => "shift-n", '-' => "0x0C", '_' => "shift-0x0C", '!' => "shift-0x02",
|
||||
'B' => "shift-b", 'O' => "shift-o", '=' => "0x0D", '+' => "shift-0x0D", '@' => "shift-0x03",
|
||||
'C' => "shift-c", 'P' => "shift-p", '[' => "0x1A", '{' => "shift-0x1A", '#' => "shift-0x04",
|
||||
'D' => "shift-d", 'Q' => "shift-q", ']' => "0x1B", '}' => "shift-0x1B", '$' => "shift-0x05",
|
||||
'E' => "shift-e", 'R' => "shift-r", ';' => "0x27", ':' => "shift-0x27", '%' => "shift-0x06",
|
||||
'F' => "shift-f", 'S' => "shift-s", '\'' => "0x28", '"' => "shift-0x28", '^' => "shift-0x07",
|
||||
'G' => "shift-g", 'T' => "shift-t", '`' => "0x29", '~' => "shift-0x29", '&' => "shift-0x08",
|
||||
'H' => "shift-h", 'U' => "shift-u", '\\' => "0x2B", '|' => "shift-0x2B", '*' => "shift-0x09",
|
||||
'I' => "shift-i", 'V' => "shift-v", ',' => "0x33", '<' => "shift-0x33", '(' => "shift-0x0A",
|
||||
'J' => "shift-j", 'W' => "shift-w", '.' => "0x34", '>' => "shift-0x34", ')' => "shift-0x0B",
|
||||
'K' => "shift-k", 'X' => "shift-x", '/' => "0x35", '?' => "shift-0x35",
|
||||
'L' => "shift-l", 'Y' => "shift-y", ' ' => "spc",
|
||||
'M' => "shift-m", 'Z' => "shift-z", "\n" => "ret",
|
||||
);
|
||||
|
||||
|
||||
sub sendKeys {
|
||||
my ($self, @keys) = @_;
|
||||
foreach my $key (@keys) {
|
||||
$key = $charToKey{$key} if exists $charToKey{$key};
|
||||
$self->sendMonitorCommand("sendkey $key");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub sendChars {
|
||||
my ($self, $chars) = @_;
|
||||
$self->nest("sending keys ‘$chars’", sub {
|
||||
$self->sendKeys(split //, $chars);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
# Sleep N seconds (in virtual guest time, not real time).
|
||||
sub sleep {
|
||||
my ($self, $time) = @_;
|
||||
$self->succeed("sleep $time");
|
||||
}
|
||||
|
||||
|
||||
# Forward a TCP port on the host to a TCP port on the guest. Useful
|
||||
# during interactive testing.
|
||||
sub forwardPort {
|
||||
my ($self, $hostPort, $guestPort) = @_;
|
||||
$hostPort = 8080 unless defined $hostPort;
|
||||
$guestPort = 80 unless defined $guestPort;
|
||||
$self->sendMonitorCommand("hostfwd_add tcp::$hostPort-:$guestPort");
|
||||
}
|
||||
|
||||
|
||||
1;
|
|
@ -1,191 +0,0 @@
|
|||
#! /somewhere/perl -w
|
||||
|
||||
use strict;
|
||||
use Machine;
|
||||
use Term::ReadLine;
|
||||
use IO::File;
|
||||
use IO::Pty;
|
||||
use Logger;
|
||||
use Cwd;
|
||||
use POSIX qw(_exit dup2);
|
||||
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
|
||||
|
||||
$SIG{PIPE} = 'IGNORE'; # because Unix domain sockets may die unexpectedly
|
||||
|
||||
STDERR->autoflush(1);
|
||||
|
||||
my $log = new Logger;
|
||||
|
||||
|
||||
# Start vde_switch for each network required by the test.
|
||||
my %vlans;
|
||||
foreach my $vlan (split / /, $ENV{VLANS} || "") {
|
||||
next if defined $vlans{$vlan};
|
||||
# Start vde_switch as a child process. We don't run it in daemon
|
||||
# mode because we want the child process to be cleaned up when we
|
||||
# die. Since we have to make sure that the control socket is
|
||||
# ready, we send a dummy command to vde_switch (via stdin) and
|
||||
# wait for a reply. Note that vde_switch requires stdin to be a
|
||||
# TTY, so we create one.
|
||||
$log->log("starting VDE switch for network $vlan");
|
||||
my $socket = Cwd::abs_path "./vde$vlan.ctl";
|
||||
my $pty = new IO::Pty;
|
||||
my ($stdoutR, $stdoutW); pipe $stdoutR, $stdoutW;
|
||||
my $pid = fork(); die "cannot fork" unless defined $pid;
|
||||
if ($pid == 0) {
|
||||
dup2(fileno($pty->slave), 0);
|
||||
dup2(fileno($stdoutW), 1);
|
||||
exec "vde_switch -s $socket --dirmode 0700" or _exit(1);
|
||||
}
|
||||
close $stdoutW;
|
||||
print $pty "version\n";
|
||||
readline $stdoutR or die "cannot start vde_switch";
|
||||
$ENV{"QEMU_VDE_SOCKET_$vlan"} = $socket;
|
||||
$vlans{$vlan} = $pty;
|
||||
die unless -e "$socket/ctl";
|
||||
}
|
||||
|
||||
|
||||
my %vms;
|
||||
my $context = "";
|
||||
|
||||
sub createMachine {
|
||||
my ($args) = @_;
|
||||
my $vm = Machine->new({%{$args}, log => $log, redirectSerial => ($ENV{USE_SERIAL} // "0") ne "1"});
|
||||
$vms{$vm->name} = $vm;
|
||||
$context .= "my \$" . $vm->name . " = \$vms{'" . $vm->name . "'}; ";
|
||||
return $vm;
|
||||
}
|
||||
|
||||
foreach my $vmScript (@ARGV) {
|
||||
my $vm = createMachine({startCommand => $vmScript});
|
||||
}
|
||||
|
||||
|
||||
sub startAll {
|
||||
$log->nest("starting all VMs", sub {
|
||||
$_->start foreach values %vms;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
# Wait until all VMs have terminated.
|
||||
sub joinAll {
|
||||
$log->nest("waiting for all VMs to finish", sub {
|
||||
$_->waitForShutdown foreach values %vms;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
# In interactive tests, this allows the non-interactive test script to
|
||||
# be executed conveniently.
|
||||
sub testScript {
|
||||
eval "$context $ENV{testScript};\n";
|
||||
warn $@ if $@;
|
||||
}
|
||||
|
||||
|
||||
my $nrTests = 0;
|
||||
my $nrSucceeded = 0;
|
||||
|
||||
|
||||
sub subtest {
|
||||
my ($name, $coderef) = @_;
|
||||
$log->nest("subtest: $name", sub {
|
||||
$nrTests++;
|
||||
eval { &$coderef };
|
||||
if ($@) {
|
||||
$log->log("error: $@", { error => 1 });
|
||||
} else {
|
||||
$nrSucceeded++;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
sub runTests {
|
||||
if (defined $ENV{tests}) {
|
||||
$log->nest("running the VM test script", sub {
|
||||
eval "$context $ENV{tests}";
|
||||
if ($@) {
|
||||
$log->log("error: $@", { error => 1 });
|
||||
die $@;
|
||||
}
|
||||
}, { expanded => 1 });
|
||||
} else {
|
||||
my $term = Term::ReadLine->new('nixos-vm-test');
|
||||
$term->ReadHistory;
|
||||
while (defined ($_ = $term->readline("> "))) {
|
||||
eval "$context $_\n";
|
||||
warn $@ if $@;
|
||||
}
|
||||
$term->WriteHistory;
|
||||
}
|
||||
|
||||
# Copy the kernel coverage data for each machine, if the kernel
|
||||
# has been compiled with coverage instrumentation.
|
||||
$log->nest("collecting coverage data", sub {
|
||||
foreach my $vm (values %vms) {
|
||||
my $gcovDir = "/sys/kernel/debug/gcov";
|
||||
|
||||
next unless $vm->isUp();
|
||||
|
||||
my ($status, $out) = $vm->execute("test -e $gcovDir");
|
||||
next if $status != 0;
|
||||
|
||||
# Figure out where to put the *.gcda files so that the
|
||||
# report generator can find the corresponding kernel
|
||||
# sources.
|
||||
my $kernelDir = $vm->mustSucceed("echo \$(dirname \$(readlink -f /run/current-system/kernel))/.build/linux-*");
|
||||
chomp $kernelDir;
|
||||
my $coverageDir = "/tmp/xchg/coverage-data/$kernelDir";
|
||||
|
||||
# Copy all the *.gcda files.
|
||||
$vm->execute("for d in $gcovDir/nix/store/*/.build/linux-*; do for i in \$(cd \$d && find -name '*.gcda'); do echo \$i; mkdir -p $coverageDir/\$(dirname \$i); cp -v \$d/\$i $coverageDir/\$i; done; done");
|
||||
}
|
||||
});
|
||||
|
||||
$log->nest("syncing", sub {
|
||||
foreach my $vm (values %vms) {
|
||||
next unless $vm->isUp();
|
||||
$vm->execute("sync");
|
||||
}
|
||||
});
|
||||
|
||||
if ($nrTests != 0) {
|
||||
$log->log("$nrSucceeded out of $nrTests tests succeeded",
|
||||
($nrSucceeded < $nrTests ? { error => 1 } : { }));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Create an empty raw virtual disk with the given name and size (in
|
||||
# MiB).
|
||||
sub createDisk {
|
||||
my ($name, $size) = @_;
|
||||
system("qemu-img create -f raw $name ${size}M") == 0
|
||||
or die "cannot create image of size $size";
|
||||
}
|
||||
|
||||
|
||||
END {
|
||||
$log->nest("cleaning up", sub {
|
||||
foreach my $vm (values %vms) {
|
||||
if ($vm->{pid}) {
|
||||
$log->log("killing " . $vm->{name} . " (pid " . $vm->{pid} . ")");
|
||||
kill 9, $vm->{pid};
|
||||
}
|
||||
}
|
||||
});
|
||||
$log->close();
|
||||
}
|
||||
|
||||
my $now1 = clock_gettime(CLOCK_MONOTONIC);
|
||||
|
||||
runTests;
|
||||
|
||||
my $now2 = clock_gettime(CLOCK_MONOTONIC);
|
||||
|
||||
printf STDERR "test script finished in %.2fs\n", $now2 - $now1;
|
||||
|
||||
exit ($nrSucceeded < $nrTests ? 1 : 0);
|
|
@ -1,14 +1,19 @@
|
|||
#! /somewhere/python3
|
||||
from contextlib import contextmanager, _GeneratorContextManager
|
||||
from queue import Queue, Empty
|
||||
from typing import Tuple, Any, Callable, Dict, Iterator, Optional, List
|
||||
from xml.sax.saxutils import XMLGenerator
|
||||
import queue
|
||||
import io
|
||||
import _thread
|
||||
import argparse
|
||||
import atexit
|
||||
import base64
|
||||
import io
|
||||
import itertools
|
||||
import logging
|
||||
import codecs
|
||||
import os
|
||||
import pathlib
|
||||
import ptpython.repl
|
||||
import pty
|
||||
import queue
|
||||
import re
|
||||
import shlex
|
||||
import shutil
|
||||
|
@ -16,12 +21,9 @@ import socket
|
|||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import _thread
|
||||
import time
|
||||
from contextlib import contextmanager
|
||||
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple
|
||||
|
||||
import ptpython.repl
|
||||
import traceback
|
||||
import unicodedata
|
||||
|
||||
CHAR_TO_KEY = {
|
||||
"A": "shift-a",
|
||||
|
@ -86,24 +88,13 @@ CHAR_TO_KEY = {
|
|||
")": "shift-0x0B",
|
||||
}
|
||||
|
||||
# Forward reference
|
||||
# Forward references
|
||||
log: "Logger"
|
||||
machines: "List[Machine]"
|
||||
|
||||
logging.basicConfig(format="%(message)s")
|
||||
logger = logging.getLogger("test-driver")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
machine_colours_iter = (
|
||||
"\x1b[{}m".format(x) for x in itertools.cycle(reversed(range(31, 37)))
|
||||
)
|
||||
|
||||
|
||||
class MachineLogAdapter(logging.LoggerAdapter):
|
||||
def process(self, msg: str, kwargs: Any) -> Tuple[str, Any]:
|
||||
return (
|
||||
f"{self.extra['colour_code']}{self.extra['machine']}\x1b[39m: {msg}",
|
||||
kwargs,
|
||||
)
|
||||
def eprint(*args: object, **kwargs: Any) -> None:
|
||||
print(*args, file=sys.stderr, **kwargs)
|
||||
|
||||
|
||||
def make_command(args: list) -> str:
|
||||
|
@ -111,7 +102,8 @@ def make_command(args: list) -> str:
|
|||
|
||||
|
||||
def create_vlan(vlan_nr: str) -> Tuple[str, str, "subprocess.Popen[bytes]", Any]:
|
||||
logger.info(f"starting VDE switch for network {vlan_nr}")
|
||||
global log
|
||||
log.log("starting VDE switch for network {}".format(vlan_nr))
|
||||
vde_socket = tempfile.mkdtemp(
|
||||
prefix="nixos-test-vde-", suffix="-vde{}.ctl".format(vlan_nr)
|
||||
)
|
||||
|
@ -150,6 +142,70 @@ def retry(fn: Callable) -> None:
|
|||
raise Exception("action timed out")
|
||||
|
||||
|
||||
class Logger:
|
||||
def __init__(self) -> None:
|
||||
self.logfile = os.environ.get("LOGFILE", "/dev/null")
|
||||
self.logfile_handle = codecs.open(self.logfile, "wb")
|
||||
self.xml = XMLGenerator(self.logfile_handle, encoding="utf-8")
|
||||
self.queue: "Queue[Dict[str, str]]" = Queue()
|
||||
|
||||
self.xml.startDocument()
|
||||
self.xml.startElement("logfile", attrs={})
|
||||
|
||||
def close(self) -> None:
|
||||
self.xml.endElement("logfile")
|
||||
self.xml.endDocument()
|
||||
self.logfile_handle.close()
|
||||
|
||||
def sanitise(self, message: str) -> str:
|
||||
return "".join(ch for ch in message if unicodedata.category(ch)[0] != "C")
|
||||
|
||||
def maybe_prefix(self, message: str, attributes: Dict[str, str]) -> str:
|
||||
if "machine" in attributes:
|
||||
return "{}: {}".format(attributes["machine"], message)
|
||||
return message
|
||||
|
||||
def log_line(self, message: str, attributes: Dict[str, str]) -> None:
|
||||
self.xml.startElement("line", attributes)
|
||||
self.xml.characters(message)
|
||||
self.xml.endElement("line")
|
||||
|
||||
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
|
||||
eprint(self.maybe_prefix(message, attributes))
|
||||
self.drain_log_queue()
|
||||
self.log_line(message, attributes)
|
||||
|
||||
def enqueue(self, message: Dict[str, str]) -> None:
|
||||
self.queue.put(message)
|
||||
|
||||
def drain_log_queue(self) -> None:
|
||||
try:
|
||||
while True:
|
||||
item = self.queue.get_nowait()
|
||||
attributes = {"machine": item["machine"], "type": "serial"}
|
||||
self.log_line(self.sanitise(item["msg"]), attributes)
|
||||
except Empty:
|
||||
pass
|
||||
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
|
||||
eprint(self.maybe_prefix(message, attributes))
|
||||
|
||||
self.xml.startElement("nest", attrs={})
|
||||
self.xml.startElement("head", attributes)
|
||||
self.xml.characters(message)
|
||||
self.xml.endElement("head")
|
||||
|
||||
tic = time.time()
|
||||
self.drain_log_queue()
|
||||
yield
|
||||
self.drain_log_queue()
|
||||
toc = time.time()
|
||||
self.log("({:.2f} seconds)".format(toc - tic))
|
||||
|
||||
self.xml.endElement("nest")
|
||||
|
||||
|
||||
class Machine:
|
||||
def __init__(self, args: Dict[str, Any]) -> None:
|
||||
if "name" in args:
|
||||
|
@ -179,11 +235,8 @@ class Machine:
|
|||
self.pid: Optional[int] = None
|
||||
self.socket = None
|
||||
self.monitor: Optional[socket.socket] = None
|
||||
self.logger: Logger = args["log"]
|
||||
self.allow_reboot = args.get("allowReboot", False)
|
||||
self.logger = MachineLogAdapter(
|
||||
logger,
|
||||
extra=dict(machine=self.name, colour_code=next(machine_colours_iter)),
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def create_startcommand(args: Dict[str, str]) -> str:
|
||||
|
@ -239,6 +292,14 @@ class Machine:
|
|||
def is_up(self) -> bool:
|
||||
return self.booted and self.connected
|
||||
|
||||
def log(self, msg: str) -> None:
|
||||
self.logger.log(msg, {"machine": self.name})
|
||||
|
||||
def nested(self, msg: str, attrs: Dict[str, str] = {}) -> _GeneratorContextManager:
|
||||
my_attrs = {"machine": self.name}
|
||||
my_attrs.update(attrs)
|
||||
return self.logger.nested(msg, my_attrs)
|
||||
|
||||
def wait_for_monitor_prompt(self) -> str:
|
||||
assert self.monitor is not None
|
||||
answer = ""
|
||||
|
@ -253,7 +314,7 @@ class Machine:
|
|||
|
||||
def send_monitor_command(self, command: str) -> str:
|
||||
message = ("{}\n".format(command)).encode()
|
||||
self.logger.info(f"sending monitor command: {command}")
|
||||
self.log("sending monitor command: {}".format(command))
|
||||
assert self.monitor is not None
|
||||
self.monitor.send(message)
|
||||
return self.wait_for_monitor_prompt()
|
||||
|
@ -320,19 +381,16 @@ class Machine:
|
|||
return self.execute("systemctl {}".format(q))
|
||||
|
||||
def require_unit_state(self, unit: str, require_state: str = "active") -> None:
|
||||
self.logger.info(
|
||||
f"checking if unit ‘{unit}’ has reached state '{require_state}'"
|
||||
)
|
||||
info = self.get_unit_info(unit)
|
||||
state = info["ActiveState"]
|
||||
if state != require_state:
|
||||
raise Exception(
|
||||
"Expected unit ‘{}’ to to be in state ".format(unit)
|
||||
+ "'{}' but it is in state ‘{}’".format(require_state, state)
|
||||
)
|
||||
|
||||
def log(self, message: str) -> None:
|
||||
self.logger.info(message)
|
||||
with self.nested(
|
||||
"checking if unit ‘{}’ has reached state '{}'".format(unit, require_state)
|
||||
):
|
||||
info = self.get_unit_info(unit)
|
||||
state = info["ActiveState"]
|
||||
if state != require_state:
|
||||
raise Exception(
|
||||
"Expected unit ‘{}’ to to be in state ".format(unit)
|
||||
+ "'{}' but it is in state ‘{}’".format(require_state, state)
|
||||
)
|
||||
|
||||
def execute(self, command: str) -> Tuple[int, str]:
|
||||
self.connect()
|
||||
|
@ -356,25 +414,27 @@ class Machine:
|
|||
"""Execute each command and check that it succeeds."""
|
||||
output = ""
|
||||
for command in commands:
|
||||
self.logger.info(f"must succeed: {command}")
|
||||
(status, out) = self.execute(command)
|
||||
if status != 0:
|
||||
self.logger.info(f"output: {out}")
|
||||
raise Exception(
|
||||
"command `{}` failed (exit code {})".format(command, status)
|
||||
)
|
||||
output += out
|
||||
with self.nested("must succeed: {}".format(command)):
|
||||
(status, out) = self.execute(command)
|
||||
if status != 0:
|
||||
self.log("output: {}".format(out))
|
||||
raise Exception(
|
||||
"command `{}` failed (exit code {})".format(command, status)
|
||||
)
|
||||
output += out
|
||||
return output
|
||||
|
||||
def fail(self, *commands: str) -> str:
|
||||
"""Execute each command and check that it fails."""
|
||||
output = ""
|
||||
for command in commands:
|
||||
self.logger.info(f"must fail: {command}")
|
||||
(status, out) = self.execute(command)
|
||||
if status == 0:
|
||||
raise Exception("command `{}` unexpectedly succeeded".format(command))
|
||||
output += out
|
||||
with self.nested("must fail: {}".format(command)):
|
||||
(status, out) = self.execute(command)
|
||||
if status == 0:
|
||||
raise Exception(
|
||||
"command `{}` unexpectedly succeeded".format(command)
|
||||
)
|
||||
output += out
|
||||
return output
|
||||
|
||||
def wait_until_succeeds(self, command: str) -> str:
|
||||
|
@ -388,9 +448,9 @@ class Machine:
|
|||
status, output = self.execute(command)
|
||||
return status == 0
|
||||
|
||||
self.logger.info(f"waiting for success: {command}")
|
||||
retry(check_success)
|
||||
return output
|
||||
with self.nested("waiting for success: {}".format(command)):
|
||||
retry(check_success)
|
||||
return output
|
||||
|
||||
def wait_until_fails(self, command: str) -> str:
|
||||
"""Wait until a command returns failure.
|
||||
|
@ -403,21 +463,21 @@ class Machine:
|
|||
status, output = self.execute(command)
|
||||
return status != 0
|
||||
|
||||
self.logger.info(f"waiting for failure: {command}")
|
||||
retry(check_failure)
|
||||
return output
|
||||
with self.nested("waiting for failure: {}".format(command)):
|
||||
retry(check_failure)
|
||||
return output
|
||||
|
||||
def wait_for_shutdown(self) -> None:
|
||||
if not self.booted:
|
||||
return
|
||||
|
||||
self.logger.info("waiting for the VM to power off")
|
||||
sys.stdout.flush()
|
||||
self.process.wait()
|
||||
with self.nested("waiting for the VM to power off"):
|
||||
sys.stdout.flush()
|
||||
self.process.wait()
|
||||
|
||||
self.pid = None
|
||||
self.booted = False
|
||||
self.connected = False
|
||||
self.pid = None
|
||||
self.booted = False
|
||||
self.connected = False
|
||||
|
||||
def get_tty_text(self, tty: str) -> str:
|
||||
status, output = self.execute(
|
||||
|
@ -435,19 +495,19 @@ class Machine:
|
|||
def tty_matches(last: bool) -> bool:
|
||||
text = self.get_tty_text(tty)
|
||||
if last:
|
||||
self.logger.info(
|
||||
self.log(
|
||||
f"Last chance to match /{regexp}/ on TTY{tty}, "
|
||||
f"which currently contains: {text}"
|
||||
)
|
||||
return len(matcher.findall(text)) > 0
|
||||
|
||||
self.logger.info(f"waiting for {regexp} to appear on tty {tty}")
|
||||
retry(tty_matches)
|
||||
with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)):
|
||||
retry(tty_matches)
|
||||
|
||||
def send_chars(self, chars: List[str]) -> None:
|
||||
self.logger.info(f"sending keys ‘{chars}‘")
|
||||
for char in chars:
|
||||
self.send_key(char)
|
||||
with self.nested("sending keys ‘{}‘".format(chars)):
|
||||
for char in chars:
|
||||
self.send_key(char)
|
||||
|
||||
def wait_for_file(self, filename: str) -> None:
|
||||
"""Waits until the file exists in machine's file system."""
|
||||
|
@ -456,16 +516,16 @@ class Machine:
|
|||
status, _ = self.execute("test -e {}".format(filename))
|
||||
return status == 0
|
||||
|
||||
self.logger.info(f"waiting for file ‘{filename}‘")
|
||||
retry(check_file)
|
||||
with self.nested("waiting for file ‘{}‘".format(filename)):
|
||||
retry(check_file)
|
||||
|
||||
def wait_for_open_port(self, port: int) -> None:
|
||||
def port_is_open(_: Any) -> bool:
|
||||
status, _ = self.execute("nc -z localhost {}".format(port))
|
||||
return status == 0
|
||||
|
||||
self.logger.info(f"waiting for TCP port {port}")
|
||||
retry(port_is_open)
|
||||
with self.nested("waiting for TCP port {}".format(port)):
|
||||
retry(port_is_open)
|
||||
|
||||
def wait_for_closed_port(self, port: int) -> None:
|
||||
def port_is_closed(_: Any) -> bool:
|
||||
|
@ -487,17 +547,17 @@ class Machine:
|
|||
if self.connected:
|
||||
return
|
||||
|
||||
self.logger.info("waiting for the VM to finish booting")
|
||||
self.start()
|
||||
with self.nested("waiting for the VM to finish booting"):
|
||||
self.start()
|
||||
|
||||
tic = time.time()
|
||||
self.shell.recv(1024)
|
||||
# TODO: Timeout
|
||||
toc = time.time()
|
||||
tic = time.time()
|
||||
self.shell.recv(1024)
|
||||
# TODO: Timeout
|
||||
toc = time.time()
|
||||
|
||||
self.logger.info("connected to guest root shell")
|
||||
self.logger.info(f"(connecting took {toc - tic:.2f} seconds)")
|
||||
self.connected = True
|
||||
self.log("connected to guest root shell")
|
||||
self.log("(connecting took {:.2f} seconds)".format(toc - tic))
|
||||
self.connected = True
|
||||
|
||||
def screenshot(self, filename: str) -> None:
|
||||
out_dir = os.environ.get("out", os.getcwd())
|
||||
|
@ -506,12 +566,15 @@ class Machine:
|
|||
filename = os.path.join(out_dir, "{}.png".format(filename))
|
||||
tmp = "{}.ppm".format(filename)
|
||||
|
||||
self.logger.info(f"making screenshot {filename}")
|
||||
self.send_monitor_command("screendump {}".format(tmp))
|
||||
ret = subprocess.run("pnmtopng {} > {}".format(tmp, filename), shell=True)
|
||||
os.unlink(tmp)
|
||||
if ret.returncode != 0:
|
||||
raise Exception("Cannot convert screenshot")
|
||||
with self.nested(
|
||||
"making screenshot {}".format(filename),
|
||||
{"image": os.path.basename(filename)},
|
||||
):
|
||||
self.send_monitor_command("screendump {}".format(tmp))
|
||||
ret = subprocess.run("pnmtopng {} > {}".format(tmp, filename), shell=True)
|
||||
os.unlink(tmp)
|
||||
if ret.returncode != 0:
|
||||
raise Exception("Cannot convert screenshot")
|
||||
|
||||
def copy_from_host_via_shell(self, source: str, target: str) -> None:
|
||||
"""Copy a file from the host into the guest by piping it over the
|
||||
|
@ -587,18 +650,20 @@ class Machine:
|
|||
|
||||
tess_args = "-c debug_file=/dev/null --psm 11 --oem 2"
|
||||
|
||||
self.logger.info("performing optical character recognition")
|
||||
with tempfile.NamedTemporaryFile() as tmpin:
|
||||
self.send_monitor_command("screendump {}".format(tmpin.name))
|
||||
with self.nested("performing optical character recognition"):
|
||||
with tempfile.NamedTemporaryFile() as tmpin:
|
||||
self.send_monitor_command("screendump {}".format(tmpin.name))
|
||||
|
||||
cmd = "convert {} {} tiff:- | tesseract - - {}".format(
|
||||
magick_args, tmpin.name, tess_args
|
||||
)
|
||||
ret = subprocess.run(cmd, shell=True, capture_output=True)
|
||||
if ret.returncode != 0:
|
||||
raise Exception("OCR failed with exit code {}".format(ret.returncode))
|
||||
cmd = "convert {} {} tiff:- | tesseract - - {}".format(
|
||||
magick_args, tmpin.name, tess_args
|
||||
)
|
||||
ret = subprocess.run(cmd, shell=True, capture_output=True)
|
||||
if ret.returncode != 0:
|
||||
raise Exception(
|
||||
"OCR failed with exit code {}".format(ret.returncode)
|
||||
)
|
||||
|
||||
return ret.stdout.decode("utf-8")
|
||||
return ret.stdout.decode("utf-8")
|
||||
|
||||
def wait_for_text(self, regex: str) -> None:
|
||||
def screen_matches(last: bool) -> bool:
|
||||
|
@ -606,15 +671,15 @@ class Machine:
|
|||
matches = re.search(regex, text) is not None
|
||||
|
||||
if last and not matches:
|
||||
self.logger.info(f"Last OCR attempt failed. Text was: {text}")
|
||||
self.log("Last OCR attempt failed. Text was: {}".format(text))
|
||||
|
||||
return matches
|
||||
|
||||
self.logger.info(f"waiting for {regex} to appear on screen")
|
||||
retry(screen_matches)
|
||||
with self.nested("waiting for {} to appear on screen".format(regex)):
|
||||
retry(screen_matches)
|
||||
|
||||
def wait_for_console_text(self, regex: str) -> None:
|
||||
self.logger.info(f"waiting for {regex} to appear on console")
|
||||
self.log("waiting for {} to appear on console".format(regex))
|
||||
# Buffer the console output, this is needed
|
||||
# to match multiline regexes.
|
||||
console = io.StringIO()
|
||||
|
@ -637,7 +702,7 @@ class Machine:
|
|||
if self.booted:
|
||||
return
|
||||
|
||||
self.logger.info("starting vm")
|
||||
self.log("starting vm")
|
||||
|
||||
def create_socket(path: str) -> socket.socket:
|
||||
if os.path.exists(path):
|
||||
|
@ -694,7 +759,7 @@ class Machine:
|
|||
|
||||
# Store last serial console lines for use
|
||||
# of wait_for_console_text
|
||||
self.last_lines: queue.Queue = queue.Queue()
|
||||
self.last_lines: Queue = Queue()
|
||||
|
||||
def process_serial_output() -> None:
|
||||
assert self.process.stdout is not None
|
||||
|
@ -702,7 +767,8 @@ class Machine:
|
|||
# Ignore undecodable bytes that may occur in boot menus
|
||||
line = _line.decode(errors="ignore").replace("\r", "").rstrip()
|
||||
self.last_lines.put(line)
|
||||
self.logger.info(line)
|
||||
eprint("{} # {}".format(self.name, line))
|
||||
self.logger.enqueue({"msg": line, "machine": self.name})
|
||||
|
||||
_thread.start_new_thread(process_serial_output, ())
|
||||
|
||||
|
@ -711,10 +777,10 @@ class Machine:
|
|||
self.pid = self.process.pid
|
||||
self.booted = True
|
||||
|
||||
self.logger.info(f"QEMU running (pid {self.pid})")
|
||||
self.log("QEMU running (pid {})".format(self.pid))
|
||||
|
||||
def cleanup_statedir(self) -> None:
|
||||
self.logger.info("delete the VM state directory")
|
||||
self.log("delete the VM state directory")
|
||||
if os.path.isfile(self.state_dir):
|
||||
shutil.rmtree(self.state_dir)
|
||||
|
||||
|
@ -729,7 +795,7 @@ class Machine:
|
|||
if not self.booted:
|
||||
return
|
||||
|
||||
self.logger.info("forced crash")
|
||||
self.log("forced crash")
|
||||
self.send_monitor_command("quit")
|
||||
self.wait_for_shutdown()
|
||||
|
||||
|
@ -749,8 +815,8 @@ class Machine:
|
|||
status, _ = self.execute("[ -e /tmp/.X11-unix/X0 ]")
|
||||
return status == 0
|
||||
|
||||
self.logger.info("waiting for the X11 server")
|
||||
retry(check_x)
|
||||
with self.nested("waiting for the X11 server"):
|
||||
retry(check_x)
|
||||
|
||||
def get_window_names(self) -> List[str]:
|
||||
return self.succeed(
|
||||
|
@ -763,17 +829,19 @@ class Machine:
|
|||
def window_is_visible(last_try: bool) -> bool:
|
||||
names = self.get_window_names()
|
||||
if last_try:
|
||||
self.logger.info(
|
||||
f"Last chance to match {regexp} on the window list, "
|
||||
+ f"which currently contains: {', '.join(names)}"
|
||||
self.log(
|
||||
"Last chance to match {} on the window list,".format(regexp)
|
||||
+ " which currently contains: "
|
||||
+ ", ".join(names)
|
||||
)
|
||||
return any(pattern.search(name) for name in names)
|
||||
|
||||
self.logger.info("Waiting for a window to appear")
|
||||
retry(window_is_visible)
|
||||
with self.nested("Waiting for a window to appear"):
|
||||
retry(window_is_visible)
|
||||
|
||||
def sleep(self, secs: int) -> None:
|
||||
time.sleep(secs)
|
||||
# We want to sleep in *guest* time, not *host* time.
|
||||
self.succeed(f"sleep {secs}")
|
||||
|
||||
def forward_port(self, host_port: int = 8080, guest_port: int = 80) -> None:
|
||||
"""Forward a TCP port on the host to a TCP port on the guest.
|
||||
|
@ -798,22 +866,23 @@ class Machine:
|
|||
|
||||
def create_machine(args: Dict[str, Any]) -> Machine:
|
||||
global log
|
||||
args["log"] = log
|
||||
args["redirectSerial"] = os.environ.get("USE_SERIAL", "0") == "1"
|
||||
return Machine(args)
|
||||
|
||||
|
||||
def start_all() -> None:
|
||||
global machines
|
||||
logger.info("starting all VMs")
|
||||
for machine in machines:
|
||||
machine.start()
|
||||
with log.nested("starting all VMs"):
|
||||
for machine in machines:
|
||||
machine.start()
|
||||
|
||||
|
||||
def join_all() -> None:
|
||||
global machines
|
||||
logger.info("waiting for all VMs to finish")
|
||||
for machine in machines:
|
||||
machine.wait_for_shutdown()
|
||||
with log.nested("waiting for all VMs to finish"):
|
||||
for machine in machines:
|
||||
machine.wait_for_shutdown()
|
||||
|
||||
|
||||
def test_script() -> None:
|
||||
|
@ -824,12 +893,13 @@ def run_tests() -> None:
|
|||
global machines
|
||||
tests = os.environ.get("tests", None)
|
||||
if tests is not None:
|
||||
logger.info("running the VM test script")
|
||||
try:
|
||||
exec(tests, globals())
|
||||
except Exception:
|
||||
logging.exception("error:")
|
||||
sys.exit(1)
|
||||
with log.nested("running the VM test script"):
|
||||
try:
|
||||
exec(tests, globals())
|
||||
except Exception as e:
|
||||
eprint("error: ")
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
else:
|
||||
ptpython.repl.embed(locals(), globals())
|
||||
|
||||
|
@ -842,19 +912,18 @@ def run_tests() -> None:
|
|||
|
||||
@contextmanager
|
||||
def subtest(name: str) -> Iterator[None]:
|
||||
logger.info(name)
|
||||
try:
|
||||
yield
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.info(f'Test "{name}" failed with error: "{e}"')
|
||||
raise e
|
||||
with log.nested(name):
|
||||
try:
|
||||
yield
|
||||
return True
|
||||
except Exception as e:
|
||||
log.log(f'Test "{name}" failed with error: "{e}"')
|
||||
raise e
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def main() -> None:
|
||||
global machines
|
||||
if __name__ == "__main__":
|
||||
arg_parser = argparse.ArgumentParser()
|
||||
arg_parser.add_argument(
|
||||
"-K",
|
||||
|
@ -864,6 +933,8 @@ def main() -> None:
|
|||
)
|
||||
(cli_args, vm_scripts) = arg_parser.parse_known_args()
|
||||
|
||||
log = Logger()
|
||||
|
||||
vlan_nrs = list(dict.fromkeys(os.environ.get("VLANS", "").split()))
|
||||
vde_sockets = [create_vlan(v) for v in vlan_nrs]
|
||||
for nr, vde_socket, _, _ in vde_sockets:
|
||||
|
@ -874,27 +945,23 @@ def main() -> None:
|
|||
if not cli_args.keep_vm_state:
|
||||
machine.cleanup_statedir()
|
||||
machine_eval = [
|
||||
"global {0}; {0} = machines[{1}]".format(m.name, idx)
|
||||
for idx, m in enumerate(machines)
|
||||
"{0} = machines[{1}]".format(m.name, idx) for idx, m in enumerate(machines)
|
||||
]
|
||||
exec("\n".join(machine_eval))
|
||||
|
||||
@atexit.register
|
||||
def clean_up() -> None:
|
||||
logger.info("cleaning up")
|
||||
for machine in machines:
|
||||
if machine.pid is None:
|
||||
continue
|
||||
logger.info(f"killing {machine.name} (pid {machine.pid})")
|
||||
machine.process.kill()
|
||||
for _, _, process, _ in vde_sockets:
|
||||
process.terminate()
|
||||
with log.nested("cleaning up"):
|
||||
for machine in machines:
|
||||
if machine.pid is None:
|
||||
continue
|
||||
log.log("killing {} (pid {})".format(machine.name, machine.pid))
|
||||
machine.process.kill()
|
||||
for _, _, process, _ in vde_sockets:
|
||||
process.terminate()
|
||||
log.close()
|
||||
|
||||
tic = time.time()
|
||||
run_tests()
|
||||
toc = time.time()
|
||||
print("test script finished in {:.2f}s".format(toc - tic))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
@ -62,7 +62,7 @@ rec {
|
|||
''
|
||||
mkdir -p $out
|
||||
|
||||
tests='exec(os.environ["testScript"])' ${driver}/bin/nixos-test-driver
|
||||
LOGFILE=/dev/null tests='exec(os.environ["testScript"])' ${driver}/bin/nixos-test-driver
|
||||
|
||||
for i in */xchg/coverage-data; do
|
||||
mkdir -p $out/coverage-data
|
||||
|
|
|
@ -1,258 +0,0 @@
|
|||
{ system
|
||||
, pkgs ? import ../.. { inherit system config; }
|
||||
# Use a minimal kernel?
|
||||
, minimal ? false
|
||||
# Ignored
|
||||
, config ? {}
|
||||
# Modules to add to each VM
|
||||
, extraConfigurations ? [] }:
|
||||
|
||||
with import ./build-vms.nix { inherit system pkgs minimal extraConfigurations; };
|
||||
with pkgs;
|
||||
|
||||
rec {
|
||||
|
||||
inherit pkgs;
|
||||
|
||||
|
||||
testDriver = lib.warn ''
|
||||
Perl VM tests are deprecated and will be removed for 20.09.
|
||||
Please update your tests to use the python test driver.
|
||||
See https://github.com/NixOS/nixpkgs/pull/71684 for details.
|
||||
'' stdenv.mkDerivation {
|
||||
name = "nixos-test-driver";
|
||||
|
||||
buildInputs = [ makeWrapper perl ];
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
preferLocalBuild = true;
|
||||
|
||||
installPhase =
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
cp ${./test-driver/test-driver.pl} $out/bin/nixos-test-driver
|
||||
chmod u+x $out/bin/nixos-test-driver
|
||||
|
||||
libDir=$out/${perl.libPrefix}
|
||||
mkdir -p $libDir
|
||||
cp ${./test-driver/Machine.pm} $libDir/Machine.pm
|
||||
cp ${./test-driver/Logger.pm} $libDir/Logger.pm
|
||||
|
||||
wrapProgram $out/bin/nixos-test-driver \
|
||||
--prefix PATH : "${lib.makeBinPath [ qemu_test vde2 netpbm coreutils ]}" \
|
||||
--prefix PERL5LIB : "${with perlPackages; makePerlPath [ TermReadLineGnu XMLWriter IOTty FileSlurp ]}:$out/${perl.libPrefix}"
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
# Run an automated test suite in the given virtual network.
|
||||
# `driver' is the script that runs the network.
|
||||
runTests = driver:
|
||||
stdenv.mkDerivation {
|
||||
name = "vm-test-run-${driver.testName}";
|
||||
|
||||
requiredSystemFeatures = [ "kvm" "nixos-test" ];
|
||||
|
||||
buildCommand =
|
||||
''
|
||||
mkdir -p $out
|
||||
|
||||
LOGFILE=/dev/null tests='eval $ENV{testScript}; die $@ if $@;' ${driver}/bin/nixos-test-driver
|
||||
|
||||
for i in */xchg/coverage-data; do
|
||||
mkdir -p $out/coverage-data
|
||||
mv $i $out/coverage-data/$(dirname $(dirname $i))
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
makeTest =
|
||||
{ testScript
|
||||
, makeCoverageReport ? false
|
||||
, enableOCR ? false
|
||||
, name ? "unnamed"
|
||||
, ...
|
||||
} @ t:
|
||||
|
||||
let
|
||||
# A standard store path to the vm monitor is built like this:
|
||||
# /tmp/nix-build-vm-test-run-$name.drv-0/vm-state-machine/monitor
|
||||
# The max filename length of a unix domain socket is 108 bytes.
|
||||
# This means $name can at most be 50 bytes long.
|
||||
maxTestNameLen = 50;
|
||||
testNameLen = builtins.stringLength name;
|
||||
|
||||
testDriverName = with builtins;
|
||||
if testNameLen > maxTestNameLen then
|
||||
abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " +
|
||||
"it's currently ${toString testNameLen} characters long.")
|
||||
else
|
||||
"nixos-test-driver-${name}";
|
||||
|
||||
nodes = buildVirtualNetwork (
|
||||
t.nodes or (if t ? machine then { machine = t.machine; } else { }));
|
||||
|
||||
testScript' =
|
||||
# Call the test script with the computed nodes.
|
||||
if lib.isFunction testScript
|
||||
then testScript { inherit nodes; }
|
||||
else testScript;
|
||||
|
||||
vlans = map (m: m.config.virtualisation.vlans) (lib.attrValues nodes);
|
||||
|
||||
vms = map (m: m.config.system.build.vm) (lib.attrValues nodes);
|
||||
|
||||
ocrProg = tesseract4.override { enableLanguages = [ "eng" ]; };
|
||||
|
||||
imagemagick_tiff = imagemagick_light.override { inherit libtiff; };
|
||||
|
||||
# Generate onvenience wrappers for running the test driver
|
||||
# interactively with the specified network, and for starting the
|
||||
# VMs from the command line.
|
||||
driver = runCommand testDriverName
|
||||
{ buildInputs = [ makeWrapper];
|
||||
testScript = testScript';
|
||||
preferLocalBuild = true;
|
||||
testName = name;
|
||||
}
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
echo "$testScript" > $out/test-script
|
||||
ln -s ${testDriver}/bin/nixos-test-driver $out/bin/
|
||||
vms=($(for i in ${toString vms}; do echo $i/bin/run-*-vm; done))
|
||||
wrapProgram $out/bin/nixos-test-driver \
|
||||
--add-flags "''${vms[*]}" \
|
||||
${lib.optionalString enableOCR
|
||||
"--prefix PATH : '${ocrProg}/bin:${imagemagick_tiff}/bin'"} \
|
||||
--run "export testScript=\"\$(cat $out/test-script)\"" \
|
||||
--set VLANS '${toString vlans}'
|
||||
ln -s ${testDriver}/bin/nixos-test-driver $out/bin/nixos-run-vms
|
||||
wrapProgram $out/bin/nixos-run-vms \
|
||||
--add-flags "''${vms[*]}" \
|
||||
${lib.optionalString enableOCR "--prefix PATH : '${ocrProg}/bin'"} \
|
||||
--set tests 'startAll; joinAll;' \
|
||||
--set VLANS '${toString vlans}' \
|
||||
${lib.optionalString (builtins.length vms == 1) "--set USE_SERIAL 1"}
|
||||
''; # "
|
||||
|
||||
passMeta = drv: drv // lib.optionalAttrs (t ? meta) {
|
||||
meta = (drv.meta or {}) // t.meta;
|
||||
};
|
||||
|
||||
test = passMeta (runTests driver);
|
||||
report = passMeta (releaseTools.gcovReport { coverageRuns = [ test ]; });
|
||||
|
||||
nodeNames = builtins.attrNames nodes;
|
||||
invalidNodeNames = lib.filter
|
||||
(node: builtins.match "^[A-z_][A-z0-9_]+$" node == null) nodeNames;
|
||||
|
||||
in
|
||||
if lib.length invalidNodeNames > 0 then
|
||||
throw ''
|
||||
Cannot create machines out of (${lib.concatStringsSep ", " invalidNodeNames})!
|
||||
All machines are referenced as perl variables in the testing framework which will break the
|
||||
script when special characters are used.
|
||||
|
||||
Please stick to alphanumeric chars and underscores as separation.
|
||||
''
|
||||
else
|
||||
(if makeCoverageReport then report else test) // {
|
||||
inherit nodes driver test;
|
||||
};
|
||||
|
||||
runInMachine =
|
||||
{ drv
|
||||
, machine
|
||||
, preBuild ? ""
|
||||
, postBuild ? ""
|
||||
, ... # ???
|
||||
}:
|
||||
let
|
||||
vm = buildVM { }
|
||||
[ machine
|
||||
{ key = "run-in-machine";
|
||||
networking.hostName = "client";
|
||||
nix.readOnlyStore = false;
|
||||
virtualisation.writableStore = false;
|
||||
}
|
||||
];
|
||||
|
||||
buildrunner = writeText "vm-build" ''
|
||||
source $1
|
||||
|
||||
${coreutils}/bin/mkdir -p $TMPDIR
|
||||
cd $TMPDIR
|
||||
|
||||
exec $origBuilder $origArgs
|
||||
'';
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
$client->waitForUnit("multi-user.target");
|
||||
${preBuild}
|
||||
$client->succeed("env -i ${bash}/bin/bash ${buildrunner} /tmp/xchg/saved-env >&2");
|
||||
${postBuild}
|
||||
$client->succeed("sync"); # flush all data before pulling the plug
|
||||
'';
|
||||
|
||||
vmRunCommand = writeText "vm-run" ''
|
||||
xchg=vm-state-client/xchg
|
||||
${coreutils}/bin/mkdir $out
|
||||
${coreutils}/bin/mkdir -p $xchg
|
||||
|
||||
for i in $passAsFile; do
|
||||
i2=''${i}Path
|
||||
_basename=$(${coreutils}/bin/basename ''${!i2})
|
||||
${coreutils}/bin/cp ''${!i2} $xchg/$_basename
|
||||
eval $i2=/tmp/xchg/$_basename
|
||||
${coreutils}/bin/ls -la $xchg
|
||||
done
|
||||
|
||||
unset i i2 _basename
|
||||
export | ${gnugrep}/bin/grep -v '^xchg=' > $xchg/saved-env
|
||||
unset xchg
|
||||
|
||||
export tests='${testScript}'
|
||||
${testDriver}/bin/nixos-test-driver ${vm.config.system.build.vm}/bin/run-*-vm
|
||||
''; # */
|
||||
|
||||
in
|
||||
lib.overrideDerivation drv (attrs: {
|
||||
requiredSystemFeatures = [ "kvm" ];
|
||||
builder = "${bash}/bin/sh";
|
||||
args = ["-e" vmRunCommand];
|
||||
origArgs = attrs.args;
|
||||
origBuilder = attrs.builder;
|
||||
});
|
||||
|
||||
|
||||
runInMachineWithX = { require ? [], ... } @ args:
|
||||
let
|
||||
client =
|
||||
{ ... }:
|
||||
{
|
||||
inherit require;
|
||||
imports = [
|
||||
../tests/common/auto.nix
|
||||
];
|
||||
virtualisation.memorySize = 1024;
|
||||
services.xserver.enable = true;
|
||||
test-support.displayManager.auto.enable = true;
|
||||
services.xserver.displayManager.defaultSession = "none+icewm";
|
||||
services.xserver.windowManager.icewm.enable = true;
|
||||
};
|
||||
in
|
||||
runInMachine ({
|
||||
machine = client;
|
||||
preBuild =
|
||||
''
|
||||
$client->waitForX;
|
||||
'';
|
||||
} // args);
|
||||
|
||||
|
||||
simpleTest = as: (makeTest as).test;
|
||||
|
||||
}
|
|
@ -288,7 +288,10 @@ fi
|
|||
if [ "$action" = edit ]; then
|
||||
if [[ -z $flake ]]; then
|
||||
NIXOS_CONFIG=${NIXOS_CONFIG:-$(nix-instantiate --find-file nixos-config)}
|
||||
exec "${EDITOR:-nano}" "$NIXOS_CONFIG"
|
||||
if [[ -d $NIXOS_CONFIG ]]; then
|
||||
NIXOS_CONFIG=$NIXOS_CONFIG/default.nix
|
||||
fi
|
||||
exec ${EDITOR:-nano} "$NIXOS_CONFIG"
|
||||
else
|
||||
exec nix edit "${lockFlags[@]}" -- "$flake#$flakeAttr"
|
||||
fi
|
||||
|
|
|
@ -262,6 +262,7 @@
|
|||
./services/continuous-integration/buildbot/worker.nix
|
||||
./services/continuous-integration/buildkite-agents.nix
|
||||
./services/continuous-integration/hail.nix
|
||||
./services/continuous-integration/hercules-ci-agent/default.nix
|
||||
./services/continuous-integration/hydra/default.nix
|
||||
./services/continuous-integration/gitlab-runner.nix
|
||||
./services/continuous-integration/gocd-agent/default.nix
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
|
||||
This file is for options that NixOS and nix-darwin have in common.
|
||||
|
||||
Platform-specific code is in the respective default.nix files.
|
||||
|
||||
*/
|
||||
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkOption mkIf types filterAttrs literalExample mkRenamedOptionModule;
|
||||
|
||||
cfg =
|
||||
config.services.hercules-ci-agent;
|
||||
|
||||
format = pkgs.formats.toml {};
|
||||
|
||||
settingsModule = { config, ... }: {
|
||||
freeformType = format.type;
|
||||
options = {
|
||||
baseDirectory = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/hercules-ci-agent";
|
||||
description = ''
|
||||
State directory (secrets, work directory, etc) for agent
|
||||
'';
|
||||
};
|
||||
concurrentTasks = mkOption {
|
||||
description = ''
|
||||
Number of tasks to perform simultaneously, such as evaluations, derivations.
|
||||
|
||||
You must have a total capacity across agents of at least 2 concurrent tasks on <literal>x86_64-linux</literal>
|
||||
to allow for import from derivation.
|
||||
'';
|
||||
type = types.int;
|
||||
default = 4;
|
||||
};
|
||||
workDirectory = mkOption {
|
||||
description = ''
|
||||
The directory in which temporary subdirectories are created for task state. This includes sources for Nix evaluation.
|
||||
'';
|
||||
type = types.path;
|
||||
default = config.baseDirectory + "/work";
|
||||
defaultText = literalExample ''baseDirectory + "/work"'';
|
||||
};
|
||||
staticSecretsDirectory = mkOption {
|
||||
description = ''
|
||||
This is the default directory to look for statically configured secrets like <literal>cluster-join-token.key</literal>.
|
||||
'';
|
||||
type = types.path;
|
||||
default = config.baseDirectory + "/secrets";
|
||||
defaultText = literalExample ''baseDirectory + "/secrets"'';
|
||||
};
|
||||
clusterJoinTokenPath = mkOption {
|
||||
description = ''
|
||||
Location of the cluster-join-token.key file.
|
||||
'';
|
||||
type = types.path;
|
||||
default = config.staticSecretsDirectory + "/cluster-join-token.key";
|
||||
defaultText = literalExample ''staticSecretsDirectory + "/cluster-join-token.key"'';
|
||||
# internal: It's a bit too detailed to show by default in the docs,
|
||||
# but useful to define explicitly to allow reuse by other modules.
|
||||
internal = true;
|
||||
};
|
||||
binaryCachesPath = mkOption {
|
||||
description = ''
|
||||
Location of the binary-caches.json file.
|
||||
'';
|
||||
type = types.path;
|
||||
default = config.staticSecretsDirectory + "/binary-caches.json";
|
||||
defaultText = literalExample ''staticSecretsDirectory + "/binary-caches.json"'';
|
||||
# internal: It's a bit too detailed to show by default in the docs,
|
||||
# but useful to define explicitly to allow reuse by other modules.
|
||||
internal = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
checkNix =
|
||||
if !cfg.checkNix
|
||||
then ""
|
||||
else if lib.versionAtLeast config.nix.package.version "2.4.0"
|
||||
then ""
|
||||
else pkgs.stdenv.mkDerivation {
|
||||
name = "hercules-ci-check-system-nix-src";
|
||||
inherit (config.nix.package) src patches;
|
||||
configurePhase = ":";
|
||||
buildPhase = ''
|
||||
echo "Checking in-memory pathInfoCache expiry"
|
||||
if ! grep 'struct PathInfoCacheValue' src/libstore/store-api.hh >/dev/null; then
|
||||
cat 1>&2 <<EOF
|
||||
|
||||
You are deploying Hercules CI Agent on a system with an incompatible
|
||||
nix-daemon. Please
|
||||
- either upgrade Nix to version 2.4.0 (when released),
|
||||
- or set option services.hercules-ci-agent.patchNix = true;
|
||||
- or set option nix.package to a build of Nix 2.3 with this patch applied:
|
||||
https://github.com/NixOS/nix/pull/3405
|
||||
|
||||
The patch is required for Nix-daemon clients that expect a change in binary
|
||||
cache contents while running, like the agent's evaluator. Without it, import
|
||||
from derivation will fail if your cluster has more than one machine.
|
||||
We are conservative with changes to the overall system, which is why we
|
||||
keep changes to a minimum and why we ask for confirmation in the form of
|
||||
services.hercules-ci-agent.patchNix = true before applying.
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
installPhase = "touch $out";
|
||||
};
|
||||
|
||||
patchedNix = lib.mkIf (!lib.versionAtLeast pkgs.nix.version "2.4.0") (
|
||||
if lib.versionAtLeast pkgs.nix.version "2.4pre"
|
||||
then lib.warn "Hercules CI Agent module will not patch 2.4 pre-release. Make sure it includes (equivalently) PR #3043, commit d048577909 or is no older than 2020-03-13." pkgs.nix
|
||||
else pkgs.nix.overrideAttrs (
|
||||
o: {
|
||||
patches = (o.patches or []) ++ [ backportNix3398 ];
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
backportNix3398 = pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/hercules-ci/hercules-ci-agent/hercules-ci-agent-0.7.3/for-upstream/issue-3398-path-info-cache-ttls-backport-2.3.patch";
|
||||
sha256 = "0jfckqjir9il2il7904yc1qyadw366y7xqzg81sp9sl3f1pw70ib";
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
(mkRenamedOptionModule ["services" "hercules-ci-agent" "extraOptions"] ["services" "hercules-ci-agent" "settings"])
|
||||
(mkRenamedOptionModule ["services" "hercules-ci-agent" "baseDirectory"] ["services" "hercules-ci-agent" "settings" "baseDirectory"])
|
||||
(mkRenamedOptionModule ["services" "hercules-ci-agent" "concurrentTasks"] ["services" "hercules-ci-agent" "settings" "concurrentTasks"])
|
||||
];
|
||||
|
||||
options.services.hercules-ci-agent = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable to run Hercules CI Agent as a system service.
|
||||
|
||||
<link xlink:href="https://hercules-ci.com">Hercules CI</link> is a
|
||||
continuous integation service that is centered around Nix.
|
||||
|
||||
Support is available at <link xlink:href="mailto:help@hercules-ci.com">help@hercules-ci.com</link>.
|
||||
'';
|
||||
};
|
||||
patchNix = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Fix Nix 2.3 cache path metadata caching behavior. Has the effect of <literal>nix.package = patch pkgs.nix;</literal>
|
||||
|
||||
This option will be removed when Hercules CI Agent moves to Nix 2.4 (upcoming Nix release).
|
||||
'';
|
||||
};
|
||||
checkNix = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to make sure that the system's Nix (nix-daemon) is compatible.
|
||||
|
||||
If you set this to false, please keep up with the change log.
|
||||
'';
|
||||
};
|
||||
package = mkOption {
|
||||
description = ''
|
||||
Package containing the bin/hercules-ci-agent executable.
|
||||
'';
|
||||
type = types.package;
|
||||
default = pkgs.hercules-ci-agent;
|
||||
defaultText = literalExample "pkgs.hercules-ci-agent";
|
||||
};
|
||||
settings = mkOption {
|
||||
description = ''
|
||||
These settings are written to the <literal>agent.toml</literal> file.
|
||||
|
||||
Not all settings are listed as options, can be set nonetheless.
|
||||
|
||||
For the exhaustive list of settings, see <link xlink:href="https://docs.hercules-ci.com/hercules-ci/reference/agent-config/"/>.
|
||||
'';
|
||||
type = types.submoduleWith { modules = [ settingsModule ]; };
|
||||
};
|
||||
|
||||
/*
|
||||
Internal and/or computed values.
|
||||
|
||||
These are written as options instead of let binding to allow sharing with
|
||||
default.nix on both NixOS and nix-darwin.
|
||||
*/
|
||||
tomlFile = mkOption {
|
||||
type = types.path;
|
||||
internal = true;
|
||||
defaultText = "generated hercules-ci-agent.toml";
|
||||
description = ''
|
||||
The fully assembled config file.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
nix.extraOptions = lib.addContextFrom checkNix ''
|
||||
# A store path that was missing at first may well have finished building,
|
||||
# even shortly after the previous lookup. This *also* applies to the daemon.
|
||||
narinfo-cache-negative-ttl = 0
|
||||
'';
|
||||
nix.package = mkIf cfg.patchNix patchedNix;
|
||||
services.hercules-ci-agent.tomlFile =
|
||||
format.generate "hercules-ci-agent.toml" cfg.settings;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
|
||||
This file is for NixOS-specific options and configs.
|
||||
|
||||
Code that is shared with nix-darwin goes in common.nix.
|
||||
|
||||
*/
|
||||
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
inherit (lib) mkIf mkDefault;
|
||||
|
||||
cfg = config.services.hercules-ci-agent;
|
||||
|
||||
command = "${cfg.package}/bin/hercules-ci-agent --config ${cfg.tomlFile}";
|
||||
testCommand = "${command} --test-configuration";
|
||||
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./common.nix
|
||||
(lib.mkRenamedOptionModule ["services" "hercules-ci-agent" "user"] ["systemd" "services" "hercules-ci-agent" "serviceConfig" "User"])
|
||||
];
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
systemd.services.hercules-ci-agent = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
path = [ config.nix.package ];
|
||||
serviceConfig = {
|
||||
User = "hercules-ci-agent";
|
||||
ExecStart = command;
|
||||
ExecStartPre = testCommand;
|
||||
Restart = "on-failure";
|
||||
RestartSec = 120;
|
||||
StartLimitBurst = 30 * 1000000; # practically infinite
|
||||
};
|
||||
};
|
||||
|
||||
# Changes in the secrets do not affect the unit in any way that would cause
|
||||
# a restart, which is currently necessary to reload the secrets.
|
||||
systemd.paths.hercules-ci-agent-restart-files = {
|
||||
wantedBy = [ "hercules-ci-agent.service" ];
|
||||
pathConfig = {
|
||||
Unit = "hercules-ci-agent-restarter.service";
|
||||
PathChanged = [ cfg.settings.clusterJoinTokenPath cfg.settings.binaryCachesPath ];
|
||||
};
|
||||
};
|
||||
systemd.services.hercules-ci-agent-restarter = {
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = ''
|
||||
# Wait a bit, with the effect of bundling up file changes into a single
|
||||
# run of this script and hopefully a single restart.
|
||||
sleep 10
|
||||
if systemctl is-active --quiet hercules-ci-agent.service; then
|
||||
if ${testCommand}; then
|
||||
systemctl restart hercules-ci-agent.service
|
||||
else
|
||||
echo 1>&2 "WARNING: Not restarting agent because config is not valid at this time."
|
||||
fi
|
||||
else
|
||||
echo 1>&2 "Not restarting hercules-ci-agent despite config file update, because it is not already active."
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
# Trusted user allows simplified configuration and better performance
|
||||
# when operating in a cluster.
|
||||
nix.trustedUsers = [ config.systemd.services.hercules-ci-agent.serviceConfig.User ];
|
||||
services.hercules-ci-agent.settings.nixUserIsTrusted = true;
|
||||
|
||||
users.users.hercules-ci-agent = {
|
||||
home = cfg.settings.baseDirectory;
|
||||
createHome = true;
|
||||
group = "hercules-ci-agent";
|
||||
description = "Hercules CI Agent system user";
|
||||
isSystemUser = true;
|
||||
};
|
||||
|
||||
users.groups.hercules-ci-agent = {};
|
||||
};
|
||||
}
|
|
@ -11,23 +11,23 @@ let
|
|||
then cfg.package
|
||||
else cfg.package.withPackages (_: cfg.extraPlugins);
|
||||
|
||||
toStr = value:
|
||||
if true == value then "yes"
|
||||
else if false == value then "no"
|
||||
else if isString value then "'${lib.replaceStrings ["'"] ["''"] value}'"
|
||||
else toString value;
|
||||
|
||||
# The main PostgreSQL configuration file.
|
||||
configFile = pkgs.writeText "postgresql.conf"
|
||||
''
|
||||
hba_file = '${pkgs.writeText "pg_hba.conf" cfg.authentication}'
|
||||
ident_file = '${pkgs.writeText "pg_ident.conf" cfg.identMap}'
|
||||
log_destination = 'stderr'
|
||||
log_line_prefix = '${cfg.logLinePrefix}'
|
||||
listen_addresses = '${if cfg.enableTCPIP then "*" else "localhost"}'
|
||||
port = ${toString cfg.port}
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
configFile = pkgs.writeText "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings));
|
||||
|
||||
groupAccessAvailable = versionAtLeast postgresql.version "11.0";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "services" "postgresql" "extraConfig" ] "Use services.postgresql.settings instead.")
|
||||
];
|
||||
|
||||
###### interface
|
||||
|
||||
|
@ -212,10 +212,28 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = "Additional text to be appended to <filename>postgresql.conf</filename>.";
|
||||
settings = mkOption {
|
||||
type = with types; attrsOf (oneOf [ bool float int str ]);
|
||||
default = {};
|
||||
description = ''
|
||||
PostgreSQL configuration. Refer to
|
||||
<link xlink:href="https://www.postgresql.org/docs/11/config-setting.html#CONFIG-SETTING-CONFIGURATION-FILE"/>
|
||||
for an overview of <literal>postgresql.conf</literal>.
|
||||
|
||||
<note><para>
|
||||
String values will automatically be enclosed in single quotes. Single quotes will be
|
||||
escaped with two single quotes as described by the upstream documentation linked above.
|
||||
</para></note>
|
||||
'';
|
||||
example = literalExample ''
|
||||
{
|
||||
log_connections = true;
|
||||
log_statement = "all";
|
||||
logging_collector = true
|
||||
log_disconnections = true
|
||||
log_destination = lib.mkForce "syslog";
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
recoveryConfig = mkOption {
|
||||
|
@ -245,6 +263,16 @@ in
|
|||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.postgresql.settings =
|
||||
{
|
||||
hba_file = "${pkgs.writeText "pg_hba.conf" cfg.authentication}";
|
||||
ident_file = "${pkgs.writeText "pg_ident.conf" cfg.identMap}";
|
||||
log_destination = "stderr";
|
||||
log_line_prefix = cfg.logLinePrefix;
|
||||
listen_addresses = if cfg.enableTCPIP then "*" else "localhost";
|
||||
port = cfg.port;
|
||||
};
|
||||
|
||||
services.postgresql.package =
|
||||
# Note: when changing the default, make it conditional on
|
||||
# ‘system.stateVersion’ to maintain compatibility with existing
|
||||
|
|
|
@ -500,13 +500,6 @@ in
|
|||
|
||||
config = {
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = config.nix.distributedBuilds || config.nix.buildMachines == [];
|
||||
message = "You must set `nix.distributedBuilds = true` to use nix.buildMachines";
|
||||
}
|
||||
];
|
||||
|
||||
nix.binaryCachePublicKeys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ];
|
||||
nix.binaryCaches = [ "https://cache.nixos.org/" ];
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkDefault mkEnableOption mkIf mkOption types;
|
||||
inherit (lib) mkBefore mkDefault mkEnableOption mkIf mkOption mkRemovedOptionModule types;
|
||||
inherit (lib) concatStringsSep literalExample mapAttrsToList;
|
||||
inherit (lib) optional optionalAttrs optionalString singleton versionAtLeast;
|
||||
inherit (lib) optional optionalAttrs optionalString;
|
||||
|
||||
cfg = config.services.redmine;
|
||||
|
||||
format = pkgs.formats.yaml {};
|
||||
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
||||
|
||||
databaseYml = pkgs.writeText "database.yml" ''
|
||||
|
@ -20,24 +20,8 @@ let
|
|||
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
||||
'';
|
||||
|
||||
configurationYml = pkgs.writeText "configuration.yml" ''
|
||||
default:
|
||||
scm_subversion_command: ${pkgs.subversion}/bin/svn
|
||||
scm_mercurial_command: ${pkgs.mercurial}/bin/hg
|
||||
scm_git_command: ${pkgs.gitAndTools.git}/bin/git
|
||||
scm_cvs_command: ${pkgs.cvs}/bin/cvs
|
||||
scm_bazaar_command: ${pkgs.breezy}/bin/bzr
|
||||
scm_darcs_command: ${pkgs.darcs}/bin/darcs
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
additionalEnvironment = pkgs.writeText "additional_environment.rb" ''
|
||||
config.logger = Logger.new("${cfg.stateDir}/log/production.log", 14, 1048576)
|
||||
config.logger.level = Logger::INFO
|
||||
|
||||
${cfg.extraEnv}
|
||||
'';
|
||||
configurationYml = format.generate "configuration.yml" cfg.settings;
|
||||
additionalEnvironment = pkgs.writeText "additional_environment.rb" cfg.extraEnv;
|
||||
|
||||
unpackTheme = unpack "theme";
|
||||
unpackPlugin = unpack "plugin";
|
||||
|
@ -56,8 +40,13 @@ let
|
|||
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "postgresql";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "services" "redmine" "extraConfig" ] "Use services.redmine.settings instead.")
|
||||
(mkRemovedOptionModule [ "services" "redmine" "database" "password" ] "Use services.redmine.database.passwordFile instead.")
|
||||
];
|
||||
|
||||
# interface
|
||||
options = {
|
||||
services.redmine = {
|
||||
enable = mkEnableOption "Redmine";
|
||||
|
@ -93,21 +82,24 @@ in
|
|||
description = "The state directory, logs and plugins are stored here.";
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
settings = mkOption {
|
||||
type = format.type;
|
||||
default = {};
|
||||
description = ''
|
||||
Extra configuration in configuration.yml.
|
||||
|
||||
See <link xlink:href="https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration"/>
|
||||
Redmine configuration (<filename>configuration.yml</filename>). Refer to
|
||||
<link xlink:href="https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration"/>
|
||||
for details.
|
||||
'';
|
||||
example = literalExample ''
|
||||
email_delivery:
|
||||
delivery_method: smtp
|
||||
smtp_settings:
|
||||
address: mail.example.com
|
||||
port: 25
|
||||
{
|
||||
email_delivery = {
|
||||
delivery_method = "smtp";
|
||||
smtp_settings = {
|
||||
address = "mail.example.com";
|
||||
port = 25;
|
||||
};
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -186,16 +178,6 @@ in
|
|||
description = "Database user.";
|
||||
};
|
||||
|
||||
password = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
description = ''
|
||||
The password corresponding to <option>database.user</option>.
|
||||
Warning: this is stored in cleartext in the Nix store!
|
||||
Use <option>database.passwordFile</option> instead.
|
||||
'';
|
||||
};
|
||||
|
||||
passwordFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
|
@ -226,11 +208,12 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
# implementation
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.password != "" || cfg.database.socket != null;
|
||||
message = "one of services.redmine.database.socket, services.redmine.database.passwordFile, or services.redmine.database.password must be set";
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||
message = "one of services.redmine.database.socket or services.redmine.database.passwordFile must be set";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
|
||||
message = "services.redmine.database.user must be set to ${cfg.user} if services.redmine.database.createLocally is set true";
|
||||
|
@ -243,6 +226,22 @@ in
|
|||
}
|
||||
];
|
||||
|
||||
services.redmine.settings = {
|
||||
production = {
|
||||
scm_subversion_command = "${pkgs.subversion}/bin/svn";
|
||||
scm_mercurial_command = "${pkgs.mercurial}/bin/hg";
|
||||
scm_git_command = "${pkgs.gitAndTools.git}/bin/git";
|
||||
scm_cvs_command = "${pkgs.cvs}/bin/cvs";
|
||||
scm_bazaar_command = "${pkgs.breezy}/bin/bzr";
|
||||
scm_darcs_command = "${pkgs.darcs}/bin/darcs";
|
||||
};
|
||||
};
|
||||
|
||||
services.redmine.extraEnv = mkBefore ''
|
||||
config.logger = Logger.new("${cfg.stateDir}/log/production.log", 14, 1048576)
|
||||
config.logger.level = Logger::INFO
|
||||
'';
|
||||
|
||||
services.mysql = mkIf mysqlLocal {
|
||||
enable = true;
|
||||
package = mkDefault pkgs.mariadb;
|
||||
|
@ -338,7 +337,7 @@ in
|
|||
|
||||
|
||||
# handle database.passwordFile & permissions
|
||||
DBPASS=$(head -n1 ${cfg.database.passwordFile})
|
||||
DBPASS=${optionalString (cfg.database.passwordFile != null) "$(head -n1 ${cfg.database.passwordFile})"}
|
||||
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
chmod 440 "${cfg.stateDir}/config/database.yml"
|
||||
|
@ -379,17 +378,6 @@ in
|
|||
redmine.gid = config.ids.gids.redmine;
|
||||
};
|
||||
|
||||
warnings = optional (cfg.database.password != "")
|
||||
''config.services.redmine.database.password will be stored as plaintext
|
||||
in the Nix store. Use database.passwordFile instead.'';
|
||||
|
||||
# Create database passwordFile default when password is configured.
|
||||
services.redmine.database.passwordFile =
|
||||
(mkDefault (toString (pkgs.writeTextFile {
|
||||
name = "redmine-database-password";
|
||||
text = cfg.database.password;
|
||||
})));
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -458,7 +458,7 @@ in {
|
|||
|
||||
systemd.services.NetworkManager-dispatcher = {
|
||||
wantedBy = [ "network.target" ];
|
||||
restartTriggers = [ configFile ];
|
||||
restartTriggers = [ configFile overrideNameserversScript ];
|
||||
|
||||
# useful binaries for user-specified hooks
|
||||
path = [ pkgs.iproute pkgs.utillinux pkgs.coreutils ];
|
||||
|
|
|
@ -34,8 +34,8 @@ let
|
|||
User tor
|
||||
DataDirectory ${torDirectory}
|
||||
${optionalString cfg.enableGeoIP ''
|
||||
GeoIPFile ${pkgs.tor.geoip}/share/tor/geoip
|
||||
GeoIPv6File ${pkgs.tor.geoip}/share/tor/geoip6
|
||||
GeoIPFile ${cfg.package.geoip}/share/tor/geoip
|
||||
GeoIPv6File ${cfg.package.geoip}/share/tor/geoip6
|
||||
''}
|
||||
|
||||
${optint "ControlPort" cfg.controlPort}
|
||||
|
@ -123,6 +123,16 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.tor;
|
||||
defaultText = "pkgs.tor";
|
||||
example = literalExample "pkgs.tor";
|
||||
description = ''
|
||||
Tor package to use
|
||||
'';
|
||||
};
|
||||
|
||||
enableGeoIP = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
|
@ -749,8 +759,8 @@ in
|
|||
serviceConfig =
|
||||
{ Type = "simple";
|
||||
# Translated from the upstream contrib/dist/tor.service.in
|
||||
ExecStartPre = "${pkgs.tor}/bin/tor -f ${torRcFile} --verify-config";
|
||||
ExecStart = "${pkgs.tor}/bin/tor -f ${torRcFile}";
|
||||
ExecStartPre = "${cfg.package}/bin/tor -f ${torRcFile} --verify-config";
|
||||
ExecStart = "${cfg.package}/bin/tor -f ${torRcFile}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
KillSignal = "SIGINT";
|
||||
TimeoutSec = 30;
|
||||
|
@ -773,7 +783,7 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.tor ];
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
services.privoxy = mkIf (cfg.client.enable && cfg.client.privoxy.enable) {
|
||||
enable = true;
|
||||
|
|
|
@ -121,12 +121,13 @@ let
|
|||
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
|
||||
|
||||
# Copy udev.
|
||||
copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd
|
||||
copy_bin_and_libs ${udev}/lib/systemd/systemd-sysctl
|
||||
copy_bin_and_libs ${udev}/bin/udevadm
|
||||
copy_bin_and_libs ${udev}/lib/systemd/systemd-sysctl
|
||||
for BIN in ${udev}/lib/udev/*_id; do
|
||||
copy_bin_and_libs $BIN
|
||||
done
|
||||
# systemd-udevd is only a symlink to udevadm these days
|
||||
ln -sf udevadm $out/bin/systemd-udevd
|
||||
|
||||
# Copy modprobe.
|
||||
copy_bin_and_libs ${pkgs.kmod}/bin/kmod
|
||||
|
|
|
@ -903,11 +903,9 @@ in
|
|||
)
|
||||
]);
|
||||
passwd = (mkMerge [
|
||||
[ "mymachines" ]
|
||||
(mkAfter [ "systemd" ])
|
||||
]);
|
||||
group = (mkMerge [
|
||||
[ "mymachines" ]
|
||||
(mkAfter [ "systemd" ])
|
||||
]);
|
||||
};
|
||||
|
|
|
@ -106,11 +106,29 @@ in rec {
|
|||
(onFullSupported "nixos.tests.networking.scripted.bridge")
|
||||
(onFullSupported "nixos.tests.networking.scripted.dhcpOneIf")
|
||||
(onFullSupported "nixos.tests.networking.scripted.dhcpSimple")
|
||||
(onFullSupported "nixos.tests.networking.scripted.link")
|
||||
(onFullSupported "nixos.tests.networking.scripted.loopback")
|
||||
(onFullSupported "nixos.tests.networking.scripted.macvlan")
|
||||
(onFullSupported "nixos.tests.networking.scripted.privacy")
|
||||
(onFullSupported "nixos.tests.networking.scripted.routes")
|
||||
(onFullSupported "nixos.tests.networking.scripted.sit")
|
||||
(onFullSupported "nixos.tests.networking.scripted.static")
|
||||
(onFullSupported "nixos.tests.networking.scripted.virtual")
|
||||
(onFullSupported "nixos.tests.networking.scripted.vlan")
|
||||
(onFullSupported "nixos.tests.networking.networkd.bond")
|
||||
(onFullSupported "nixos.tests.networking.networkd.bridge")
|
||||
(onFullSupported "nixos.tests.networking.networkd.dhcpOneIf")
|
||||
(onFullSupported "nixos.tests.networking.networkd.dhcpSimple")
|
||||
(onFullSupported "nixos.tests.networking.networkd.link")
|
||||
(onFullSupported "nixos.tests.networking.networkd.loopback")
|
||||
# Fails nondeterministically (https://github.com/NixOS/nixpkgs/issues/96709)
|
||||
#(onFullSupported "nixos.tests.networking.networkd.macvlan")
|
||||
(onFullSupported "nixos.tests.networking.networkd.privacy")
|
||||
(onFullSupported "nixos.tests.networking.networkd.routes")
|
||||
(onFullSupported "nixos.tests.networking.networkd.sit")
|
||||
(onFullSupported "nixos.tests.networking.networkd.static")
|
||||
(onFullSupported "nixos.tests.networking.networkd.virtual")
|
||||
(onFullSupported "nixos.tests.networking.networkd.vlan")
|
||||
(onFullSupported "nixos.tests.systemd-networkd-ipv6-prefix-delegation")
|
||||
(onFullSupported "nixos.tests.nfs3.simple")
|
||||
(onFullSupported "nixos.tests.nfs4.simple")
|
||||
|
|
|
@ -49,6 +49,7 @@ in
|
|||
ceph-multi-node = handleTestOn ["x86_64-linux"] ./ceph-multi-node.nix {};
|
||||
certmgr = handleTest ./certmgr.nix {};
|
||||
cfssl = handleTestOn ["x86_64-linux"] ./cfssl.nix {};
|
||||
charliecloud = handleTest ./charliecloud.nix {};
|
||||
chromium = (handleTestOn ["x86_64-linux"] ./chromium.nix {}).stable or {};
|
||||
cjdns = handleTest ./cjdns.nix {};
|
||||
clickhouse = handleTest ./clickhouse.nix {};
|
||||
|
|
43
nixos/tests/charliecloud.nix
Normal file
43
nixos/tests/charliecloud.nix
Normal file
|
@ -0,0 +1,43 @@
|
|||
# This test checks charliecloud image construction and run
|
||||
|
||||
import ./make-test-python.nix ({ pkgs, ...} : let
|
||||
|
||||
dockerfile = pkgs.writeText "Dockerfile" ''
|
||||
FROM nix
|
||||
RUN mkdir /home /tmp
|
||||
RUN touch /etc/passwd /etc/group
|
||||
CMD ["true"]
|
||||
'';
|
||||
|
||||
in {
|
||||
name = "charliecloud";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ bzizou ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
host = { ... }: {
|
||||
environment.systemPackages = [ pkgs.charliecloud ];
|
||||
virtualisation.docker.enable = true;
|
||||
users.users.alice = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "docker" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
host.start()
|
||||
host.wait_for_unit("docker.service")
|
||||
host.succeed(
|
||||
'su - alice -c "docker load --input=${pkgs.dockerTools.examples.nix}"'
|
||||
)
|
||||
host.succeed(
|
||||
"cp ${dockerfile} /home/alice/Dockerfile"
|
||||
)
|
||||
host.succeed('su - alice -c "ch-build -t hello ."')
|
||||
host.succeed('su - alice -c "ch-builder2tar hello /var/tmp"')
|
||||
host.succeed('su - alice -c "ch-tar2dir /var/tmp/hello.tar.gz /var/tmp"')
|
||||
host.succeed('su - alice -c "ch-run /var/tmp/hello -- echo Running_From_Container_OK"')
|
||||
'';
|
||||
})
|
|
@ -59,7 +59,8 @@ pkgs.runCommand "acme-snakeoil-ca" {
|
|||
openssl genrsa -out snakeoil.key 4096
|
||||
openssl req -new -key snakeoil.key -out snakeoil.csr
|
||||
openssl x509 -req -in snakeoil.csr -sha256 -set_serial 666 \
|
||||
-CA ca.pem -CAkey ca.key -out snakeoil.pem -days 36500
|
||||
-CA ca.pem -CAkey ca.key -out snakeoil.pem -days 36500 \
|
||||
-extfile "$OPENSSL_CONF" -extensions req_ext
|
||||
addpem snakeoil.key ${lib.escapeShellArg fqdn} key
|
||||
addpem snakeoil.pem ${lib.escapeShellArg fqdn} cert
|
||||
'') domains}
|
||||
|
|
|
@ -2,170 +2,171 @@
|
|||
{
|
||||
ca.key = builtins.toFile "ca.key" ''
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDCnVZGEn68ezXl
|
||||
DWE5gjsCPqutR4nxw/wvIbAxB2Vk2WeQ6HGvt2Jdrz5qer2IXd76YtpQeqd+ffet
|
||||
aLtMeFTr+Xy9yqEpx2AfvmEEcLnuiWbsUGZzsHwW7/4kPgAFBy9TwJn/k892lR6u
|
||||
QYa0QS39CX85kLMZ/LZXUyClIBa+IxT1OovmGqMOr4nGASRQP6d/nnyn41Knat/d
|
||||
tpyaa5zgfYwA6YW6UxcywvBSpMOXM0/82BFZGyALt3nQ+ffmrtKcvMjsNLBFaslV
|
||||
+zYO1PMbLbTCW8SmJTjhzuapXtBHruvoe24133XWlvcP1ylaTx0alwiQWJr1XEOU
|
||||
WLEFTgOTeRyiVDxDunpz+7oGcwzcdOG8nCgd6w0aYaECz1zvS3FYTQz+MiqmEkx6
|
||||
s4bj1U90I0kwUJbeWjjrGO7Y9Qq4i19GafDg7cAMn9eHCiNbNrPj6t/gfaVbCrbk
|
||||
m3ZVjkvLTQ2mb2lv7+tVii45227iNPuNS6lx2FVlr/DXiRrOVfghPvoOxUfXzogJ
|
||||
hZLV4Zki+ycbGQa5w8YMDYCv4c08dKA7AatVhNS60c1zgQNjuWF3BvocSySyGUon
|
||||
VT6h1DYlJ9YAqgqNpedgNR9kpp034SMhB7dj9leB6LRMA+c1fG/T+1lDbkA+vope
|
||||
pt4+30oDcCTYfEifl1HwqNw/bXDm1wIDAQABAoICABPbd/UYaAQVUk93yQbUKe81
|
||||
s9CvbvzTMYUhm9e02Hyszitz/D2gqZHDksvMkFA8u8aylXIGwdZfRglUmV/ZG1kk
|
||||
kLzQ0xbvN/ilNUL9uYsETBMqtPly9YZloHnUNa5NqF+UVGJGk7GWz5WaLANybx3V
|
||||
fTzDbfLl3TkVy0vt9UQbUkUfXyzwZNjXwmgIr8rcY9vasP90a3eXqRX3Tw1Wk6A4
|
||||
TzO8oB994O0WBO150Fc6Lhwvc72yzddENlLDXq8UAXtqq9mmGqJKnhZ+1mo3AkMw
|
||||
q7P1JyCIxcAMm26GtRvLVljXV0x5640kxDrCin6jeeW/qWkJEW6dpmuZjR5scmLI
|
||||
/9n8H+fGzdZH8bOPPotMy12doj3vJqvew3p0eIkmVctYMJKD0j/CWjvKJNE3Yx4O
|
||||
Ls47X/dEypX6anR1HQUXcpd6JfRWdIJANo2Duaz+HYbyA88bHcJL9shFYcjLs3sX
|
||||
R/TvnnKHvw/ud7XBgvLGwGAf/cDEuLI2tv+V7tkMGrMUv+gUJNZaJaCpdt+1iUwO
|
||||
QFq8APyBNn6FFw54TwXWfSjfSNh3geIMLHuErYVu9MIXvB7Yhh+ZvLcfLbmckhAX
|
||||
wb39RRHnCWvnw5Bm9hnsDhqfDsIoP+2wvUkViyHOmrKi8nSJhSk19C8AuQtSVcJg
|
||||
5op+epEmjt70GHt52nuBAoIBAQD2a4Ftp4QxWE2d6oAFI6WPrX7nAwI5/ezCbO/h
|
||||
yoYAn6ucTVnn5/5ITJ8V4WTWZ4lkoZP3YSJiCyBhs8fN63J+RaJ/bFRblHDns1HA
|
||||
2nlMVdNLg6uOfjgUJ8Y6xVM0J2dcFtwIFyK5pfZ7loxMZfvuovg74vDOi2vnO3dO
|
||||
16DP3zUx6B/yIt57CYn8NWTq+MO2bzKUnczUQRx0yEzPOfOmVbcqGP8f7WEdDWXm
|
||||
7scjjN53OPyKzLOVEhOMsUhIMBMO25I9ZpcVkyj3/nj+fFLf/XjOTM00M/S/KnOj
|
||||
RwaWffx6mSYS66qNc5JSsojhIiYyiGVEWIznBpNWDU35y/uXAoIBAQDKLj0dyig2
|
||||
kj1r3HvdgK4sRULqBQFMqE9ylxDmpJxAj6/A8hJ0RCBR57vnIIZMzK4+6K0l3VBJ
|
||||
ukzXJHJLPkZ0Uuo2zLuRLkyjBECH6KYznyTkUVRn50Oq6IoP6WTCfd3Eg+7AKYY1
|
||||
VFo2iR8sxeSQQ+AylFy6QcQ1xPIW30Jj1/LFjrRdRggapPEekpJec0pEqhasT8rR
|
||||
UFhRL2NdZnL5b7ZlsJc7gZKEJgNfxgzaCzloqLcjCgGpOhLKx0fFsNOqHcbIGMwG
|
||||
6wQCOyNghQJ6AZtRD5TYCJow92FchWjoTIaMJ8RjMKQmxpiwM6wQG4J78Hd3mbhf
|
||||
q0hiQhPHaNbBAoIBAFeIeMFq8BpXM7sUwcURlI4lIx8Mgo33FVM7PzsFpfQyw9MR
|
||||
5w3p6vnjvd8X4aoHvVZxzw3hA0WwjiAmrKMJL/KK6d45rP2bDUBBAplvAgeLtTLt
|
||||
4tMLIwCF4HSgA55TIPQlaqO1FDC+M4BTSiMZVxS970/WnZPBEuNgzFDFZ+pvb4X6
|
||||
3t40ZLNwAAQHM4IEPAFiHqWMKGZ9eo5BWIeEHnjHmfjqSDYfLJAVYk1WJIcMUzom
|
||||
lA76CBC8CxW/I94AtcRhWuFUv/Z5/+OYEYLUxtuqPm+J+JrCmf4OJmWppT1wI2+p
|
||||
V00BSeRVWXTm1piieM8ahF5y1hp6y3uV3k0NmKECggEBAMC42Ms3s6NpPSE+99eJ
|
||||
3P0YPJOkl7uByNGbTKH+kW89SDRsy8iGVCSe9892gm5cwU/4LWyljO3qp2qBNG2i
|
||||
/DfP/bCk8bqPXsAZwoWK8DrO3bTCDepJWYhlx40pVkHLBwVXGdOVAXh+YswPY2cj
|
||||
cB9QhDrSj52AKU9z36yLvtY7uBA3Wph6tCjpx2n0H4/m6AmR9LDmEpf5tWYV/OrA
|
||||
SKKaqUw/y7kOZyKOtbKqr/98qYmpIYFF/ZVZZSZkVXcNeoZzgdOlR37ksVqLEsrj
|
||||
nxu7wli/uItBj/FTLjyqcvjUUYDyO1KtwBuyPUPgzYhBIN2Rt9+K6WRQelwnToFL
|
||||
30ECggEBALzozykZj2sr3z8tQQRZuXLGotUFGsQCB8ikeqoeB8FbNNkC+qgflQGv
|
||||
zLRB2KWOvnboc94wVgBJH43xG0HBibZnBhUO8/HBI/WlmyEj9KQ/ZskUK4GVZkB6
|
||||
r/81ASLwH+P/rqrLEjcp1SIPPevjzCWD9VYR5m/qPHLNxStwGSrPjtPzgaFxhq84
|
||||
Jl+YVmNqVlrOKYYfIPh8exPLiTti3wfM61pVYFv56PI2gd5ysMWYnuN+vK0sbmZh
|
||||
cIWwykcKlODIngI7IzYqt8NuIJI0jrYyHgtUw4jaJzdF4mEOplGONxdz15jAGHtg
|
||||
JUsBXFNz132nP4iIr3UKrPedQZijSi4=
|
||||
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
|
||||
s9o9Sr49cibZ3CbMjCSNE3AOeVE1/Q==
|
||||
-----END PRIVATE KEY-----
|
||||
'';
|
||||
ca.cert = builtins.toFile "ca.cert" ''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFDzCCAvegAwIBAgIUTRDYSWJvmlhwIR3pzVrIQfnboLEwDQYJKoZIhvcNAQEL
|
||||
BQAwFjEUMBIGA1UEAwwLU25ha2VvaWwgQ0EwIBcNMjAwMzIyMjI1NjE3WhgPMjEy
|
||||
MDAyMjcyMjU2MTdaMBYxFDASBgNVBAMMC1NuYWtlb2lsIENBMIICIjANBgkqhkiG
|
||||
9w0BAQEFAAOCAg8AMIICCgKCAgEAwp1WRhJ+vHs15Q1hOYI7Aj6rrUeJ8cP8LyGw
|
||||
MQdlZNlnkOhxr7diXa8+anq9iF3e+mLaUHqnfn33rWi7THhU6/l8vcqhKcdgH75h
|
||||
BHC57olm7FBmc7B8Fu/+JD4ABQcvU8CZ/5PPdpUerkGGtEEt/Ql/OZCzGfy2V1Mg
|
||||
pSAWviMU9TqL5hqjDq+JxgEkUD+nf558p+NSp2rf3bacmmuc4H2MAOmFulMXMsLw
|
||||
UqTDlzNP/NgRWRsgC7d50Pn35q7SnLzI7DSwRWrJVfs2DtTzGy20wlvEpiU44c7m
|
||||
qV7QR67r6HtuNd911pb3D9cpWk8dGpcIkFia9VxDlFixBU4Dk3kcolQ8Q7p6c/u6
|
||||
BnMM3HThvJwoHesNGmGhAs9c70txWE0M/jIqphJMerOG49VPdCNJMFCW3lo46xju
|
||||
2PUKuItfRmnw4O3ADJ/XhwojWzaz4+rf4H2lWwq25Jt2VY5Ly00Npm9pb+/rVYou
|
||||
Odtu4jT7jUupcdhVZa/w14kazlX4IT76DsVH186ICYWS1eGZIvsnGxkGucPGDA2A
|
||||
r+HNPHSgOwGrVYTUutHNc4EDY7lhdwb6HEskshlKJ1U+odQ2JSfWAKoKjaXnYDUf
|
||||
ZKadN+EjIQe3Y/ZXgei0TAPnNXxv0/tZQ25APr6KXqbePt9KA3Ak2HxIn5dR8Kjc
|
||||
P21w5tcCAwEAAaNTMFEwHQYDVR0OBBYEFCIoeYSYjtMiPrmxfHmcrsZkyTpvMB8G
|
||||
A1UdIwQYMBaAFCIoeYSYjtMiPrmxfHmcrsZkyTpvMA8GA1UdEwEB/wQFMAMBAf8w
|
||||
DQYJKoZIhvcNAQELBQADggIBAHPdwOgAxyhIhbqFObNftW8K3sptorB/Fj6jwYCm
|
||||
mHleFueqQnjTHMWsflOjREvQp1M307FWooGj+KQkjwvAyDc/Hmy7WgJxBg9p3vc+
|
||||
/Xf/e7ZfBl8rv7vH8VXW/BC1vVsILdFncrgTrP8/4psV50/cl1F4+nPBiekvvxwZ
|
||||
k+R7SgeSvcWT7YlOG8tm1M3al4F4mWzSRkYjkrXmwRCKAiya9xcGSt0Bob+LoM/O
|
||||
mpDGV/PMC1WAoDc1mMuXN2hSc0n68xMcuFs+dj/nQYn8uL5pzOxpX9560ynKyLDv
|
||||
yOzQlM2VuZ7H2hSIeYOFgrtHJJwhDtzjmUNDQpQdp9Fx+LONQTS1VLCTXND2i/3F
|
||||
10X6PkdnLEn09RiPt5qy20pQkICxoEydmlwpFs32musYfJPdBPkZqZWrwINBv2Wb
|
||||
HfOmEB4xUvXufZ5Ju5icgggBkyNA3PCLo0GZFRrMtvA7i9IXOcXNR+njhKa9246V
|
||||
QQfeWiz05RmIvgShJYVsnZWtael8ni366d+UXypBYncohimyNlAD1n+Bh3z0PvBB
|
||||
+FK4JgOSeouM4SuBHdwmlZ/H0mvfUG81Y8Jbrw0yuRHtuCtX5HpN5GKpZPHDE7aQ
|
||||
fEShVB/GElC3n3DvgK9OJBeVVhYQgUEfJi4rsSxt3cdEI0NrdckUoZbApWVJ3CBc
|
||||
F8Y7
|
||||
MIIFDzCCAvegAwIBAgIUX0P6NfX4gRUpFz+TNV/f26GHokgwDQYJKoZIhvcNAQEL
|
||||
BQAwFjEUMBIGA1UEAwwLU25ha2VvaWwgQ0EwIBcNMjAwODI0MDc0MjEyWhgPMjEy
|
||||
MDA3MzEwNzQyMTJaMBYxFDASBgNVBAMMC1NuYWtlb2lsIENBMIICIjANBgkqhkiG
|
||||
9w0BAQEFAAOCAg8AMIICCgKCAgEA3dRuzhaVyKB5668XcPoYiVQ2Op0AwyhbfRQS
|
||||
sJb+8doQr1+258rx2i+x+tXPvNDHBjyEq0J9/jI7kWbqsGsePQ3XTV2xreFqhpce
|
||||
CwHiN+zoDVFM/X6Da9qww1e+OL8KdePzw9X956qVnzoM87IfK8WnNJmeUnvR8TiK
|
||||
SOzUTbhyY4+x1meGMXjr4tvPa5qbtCT3KduZ48O4ehTXx7vBhqd+FI+sAMbm3Ucn
|
||||
1YlfM/RTH24JS7gPYtTokstzUKavFcARvrv9Iguz0LEI8Uq2oELtubHwE2CKxSUO
|
||||
GQr4dJ8aijHsjzwYunQHDKWtgGQKrar/gsFnaN+gbUuV4gu6wKYGJ/srXikB0m5w
|
||||
ohtlv26Em34PZUZN8ONXREhDQgA1Woy29xKL76dLQTvwQC7nb1o8wD26V5XlTa+p
|
||||
4FrRpbGUwuy1w4AanVtipc6WRnM/j1twE5cIqf2RUbewNebuXVZFj1aD7kNMNU8P
|
||||
oPXcVhUzZN4ftneyvOyMUG3L6sXiA0hFRTK8aNHuAhtrnTHHpWcAEZeojUwBE2ts
|
||||
yVtF7QHRlTPh2NUv5FOlPSd57mw7bQJADAAYz8Moyxu4X8lqlB3/cj7OPRrH7QFb
|
||||
yMvFyHrtLIQ9QRtdf1c78KVAokXPm7blotnq2eGXz6EOWKEvYLeEviKc+0zxgZfg
|
||||
FJPRztkCAwEAAaNTMFEwHQYDVR0OBBYEFNhBZxryvykCjfPO85xB3wof2enAMB8G
|
||||
A1UdIwQYMBaAFNhBZxryvykCjfPO85xB3wof2enAMA8GA1UdEwEB/wQFMAMBAf8w
|
||||
DQYJKoZIhvcNAQELBQADggIBAEZwlsQ+3yd1MVxLRy9RjoA8hI7iWBNmvPUyNjlb
|
||||
l/L9N+dZgdx9G5h/KPRUyzvUc/uk/ZxTWVPIOp13WI65qwsBKrwvYKiXiwzjt+9V
|
||||
CKDRc1sOghTSXk4FD3L5UcKvTQ2lRcFsqxbkopEwQWhoCuhe4vFyt3Nx8ZGLCBUD
|
||||
3I5zMHtO8FtpZWKJPw46Yc1kasv0nlfly/vUbnErYfgjWX1hgWUcRgYdKwO4sOZ7
|
||||
KbNma0WUsX5mWhXo4Kk7D15wATHO+j9s+j8m86duBL3A4HzpTo1DhHvBi0dkg0CO
|
||||
XuSdByIzVLIPh3yhCHN1loRCP2rbzKM8IQeU/X5Q4UJeC/x9ew8Kk+RKXoHc8Y2C
|
||||
JQO1DxuidyDJRhbb98wZo2YfIsdWQGjYZBe1XQRwBD28JnB+Rb9shml6lORWQn9y
|
||||
P/STo9uWm5zvOCfqwbnCoetljDweItINx622G9SafBwPZc3o79oL7QSl8DgCtN6g
|
||||
p0wGIlIBx+25w/96PqZcrYb8B7/uBHJviiKjBXDoIJWNiNRhW5HaFjeJdSKq7KIL
|
||||
I/PO9KuHafif36ksG69X02Rio2/cTjgjEW1hGHcDRyyJWWaj7bd2eWuouh6FF22b
|
||||
PA6FGY4vewDPnbLKLaix2ZIKxtedUDOH/qru3Mv58IFXmQ4iyM8oC8aOxYSQLZDn
|
||||
1yJD
|
||||
-----END CERTIFICATE-----
|
||||
'';
|
||||
"acme.test".key = builtins.toFile "acme.test.key" ''
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
'';
|
||||
"acme.test".cert = builtins.toFile "acme.test.cert" ''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
NbjvWnP8lDU8j2l3eSG58S14iGs=
|
||||
-----END CERTIFICATE-----
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
f: {
|
||||
system ? builtins.currentSystem,
|
||||
pkgs ? import ../.. { inherit system; config = {}; },
|
||||
...
|
||||
} @ args:
|
||||
|
||||
with import ../lib/testing.nix { inherit system pkgs; };
|
||||
|
||||
makeTest (if pkgs.lib.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f)
|
|
@ -14,13 +14,10 @@ let
|
|||
baseBackupDir = "/tmp/pg_basebackup";
|
||||
walBackupDir = "/tmp/pg_wal";
|
||||
atLeast12 = lib.versionAtLeast pkg.version "12.0";
|
||||
restoreCommand = ''
|
||||
restore_command = 'cp ${walBackupDir}/%f %p'
|
||||
'';
|
||||
|
||||
recoveryFile = if atLeast12
|
||||
then pkgs.writeTextDir "recovery.signal" ""
|
||||
else pkgs.writeTextDir "recovery.conf" "${restoreCommand}";
|
||||
else pkgs.writeTextDir "recovery.conf" "restore_command = 'cp ${walBackupDir}/%f %p'";
|
||||
|
||||
in {
|
||||
name = "postgresql-wal-receiver-${postgresqlPackage}";
|
||||
|
@ -30,14 +27,17 @@ let
|
|||
services.postgresql = {
|
||||
package = pkg;
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
wal_level = archive # alias for replica on pg >= 9.6
|
||||
max_wal_senders = 10
|
||||
max_replication_slots = 10
|
||||
'' + lib.optionalString atLeast12 ''
|
||||
${restoreCommand}
|
||||
recovery_end_command = 'touch recovery.done'
|
||||
'';
|
||||
settings = lib.mkMerge [
|
||||
{
|
||||
wal_level = "archive"; # alias for replica on pg >= 9.6
|
||||
max_wal_senders = 10;
|
||||
max_replication_slots = 10;
|
||||
}
|
||||
(lib.mkIf atLeast12 {
|
||||
restore_command = "cp ${walBackupDir}/%f %p";
|
||||
recovery_end_command = "touch recovery.done";
|
||||
})
|
||||
];
|
||||
authentication = ''
|
||||
host replication ${replicationUser} all trust
|
||||
'';
|
||||
|
|
|
@ -7,18 +7,19 @@ let generateNodeConf = { lib, pkgs, config, privk, pubk, peerId, nodeId, ...}: {
|
|||
virtualisation.vlans = [ 1 ];
|
||||
environment.systemPackages = with pkgs; [ wireguard-tools ];
|
||||
boot.extraModulePackages = [ config.boot.kernelPackages.wireguard ];
|
||||
systemd.tmpfiles.rules = [
|
||||
"f /run/wg_priv 0640 root systemd-network - ${privk}"
|
||||
];
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
netdevs = {
|
||||
"90-wg0" = {
|
||||
netdevConfig = { Kind = "wireguard"; Name = "wg0"; };
|
||||
wireguardConfig = {
|
||||
PrivateKeyFile = "/run/wg_priv";
|
||||
# NOTE: we're storing the wireguard private key in the
|
||||
# store for this test. Do not do this in the real
|
||||
# world. Keep in mind the nix store is
|
||||
# world-readable.
|
||||
PrivateKeyFile = pkgs.writeText "wg0-priv" privk;
|
||||
ListenPort = 51820;
|
||||
FwMark = 42;
|
||||
FirewallMark = 42;
|
||||
};
|
||||
wireguardPeers = [ {wireguardPeerConfig={
|
||||
Endpoint = "192.168.1.${peerId}:51820";
|
||||
|
|
|
@ -144,9 +144,10 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
|||
)
|
||||
|
||||
output = machine.succeed("systemctl show | grep Watchdog")
|
||||
assert "RuntimeWatchdogUSec=30s" in output
|
||||
assert "RebootWatchdogUSec=10m" in output
|
||||
assert "KExecWatchdogUSec=5m" in output
|
||||
# assert "RuntimeWatchdogUSec=30s" in output
|
||||
# for some reason RuntimeWatchdogUSec, doesn't seem to be updated in here.
|
||||
assert "RebootWatchdogUSec=10min" in output
|
||||
assert "KExecWatchdogUSec=5min" in output
|
||||
|
||||
# Test systemd cryptsetup support
|
||||
with subtest("systemd successfully reads /etc/crypttab and unlocks volumes"):
|
||||
|
|
|
@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
|
|||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Sound editor with graphical UI";
|
||||
homepage = "http://audacityteam.org/";
|
||||
homepage = "https://www.audacityteam.org/";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ lheckemann ];
|
||||
platforms = intersectLists platforms.linux platforms.x86; # fails on ARM
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, pkgconfig, systemd ? null, libobjc, IOKit, fetchpatch }:
|
||||
{ stdenv, lib, fetchurl, pkgconfig, systemd ? null, libobjc, IOKit, fetchpatch }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libusb-1.0.19";
|
||||
|
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
|||
NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
|
||||
|
||||
preFixup = stdenv.lib.optionalString stdenv.isLinux ''
|
||||
sed 's,-ludev,-L${systemd.lib}/lib -ludev,' -i $out/lib/libusb-1.0.la
|
||||
sed 's,-ludev,-L${lib.getLib systemd}/lib -ludev,' -i $out/lib/libusb-1.0.la
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
, pkgconfig
|
||||
, cmake
|
||||
, llvm
|
||||
# TODO: put back when it builds again
|
||||
# , emscripten
|
||||
, emscripten
|
||||
, openssl
|
||||
, libsndfile
|
||||
, libmicrohttpd
|
||||
|
@ -47,7 +46,7 @@ let
|
|||
inherit src;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper pkgconfig cmake vim which ];
|
||||
buildInputs = [ llvm /*emscripten*/ openssl libsndfile libmicrohttpd gnutls libtasn1 p11-kit ];
|
||||
buildInputs = [ llvm emscripten openssl libsndfile libmicrohttpd gnutls libtasn1 p11-kit ];
|
||||
|
||||
|
||||
passthru = {
|
||||
|
|
|
@ -14,7 +14,7 @@ python3Packages.buildPythonApplication rec {
|
|||
] ++ (with python3Packages; [
|
||||
configobj
|
||||
requests
|
||||
tornado_4
|
||||
tornado
|
||||
]);
|
||||
|
||||
# no tests implemented
|
||||
|
|
|
@ -21,7 +21,7 @@ pythonPackages.buildPythonApplication rec {
|
|||
];
|
||||
|
||||
propagatedBuildInputs = with pythonPackages; [
|
||||
gst-python pygobject3 pykka tornado_4 requests setuptools
|
||||
gst-python pygobject3 pykka tornado requests setuptools
|
||||
] ++ stdenv.lib.optional (!stdenv.isDarwin) dbus-python;
|
||||
|
||||
# There are no tests
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
, faacSupport ? false, faac ? null
|
||||
, flacSupport ? true, flac ? null
|
||||
, soxSupport ? true, sox ? null
|
||||
, vorbisSupport ? true, vorbisTools ? null
|
||||
, vorbisSupport ? true, vorbis-tools ? null
|
||||
}:
|
||||
|
||||
assert mp3Support -> lame != null;
|
||||
|
@ -12,7 +12,7 @@ assert opusSupport -> opusTools != null;
|
|||
assert faacSupport -> faac != null;
|
||||
assert flacSupport -> flac != null;
|
||||
assert soxSupport -> sox != null;
|
||||
assert vorbisSupport -> vorbisTools != null;
|
||||
assert vorbisSupport -> vorbis-tools != null;
|
||||
|
||||
let
|
||||
zeroconf = pythonPackages.callPackage ./zeroconf.nix { };
|
||||
|
@ -37,7 +37,7 @@ pythonPackages.buildPythonApplication {
|
|||
++ stdenv.lib.optional faacSupport faac
|
||||
++ stdenv.lib.optional flacSupport flac
|
||||
++ stdenv.lib.optional soxSupport sox
|
||||
++ stdenv.lib.optional vorbisSupport vorbisTools;
|
||||
++ stdenv.lib.optional vorbisSupport vorbis-tools;
|
||||
|
||||
# upstream has no tests
|
||||
checkPhase = ''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ stdenv, fetchFromGitHub, pkgconfig, gettext, intltool, wrapGAppsHook
|
||||
, python3Packages, gnome3, gtk3, gsettings-desktop-schemas, gobject-introspection }:
|
||||
{ stdenv, fetchFromGitHub, wrapGAppsHook, gettext
|
||||
, python3Packages, gnome3, gtk3, glib, gdk-pixbuf, gsettings-desktop-schemas, gobject-introspection }:
|
||||
|
||||
let
|
||||
inherit (python3Packages) buildPythonApplication isPy3k dbus-python pygobject3 mpd2 setuptools;
|
||||
|
@ -16,26 +16,38 @@ in buildPythonApplication rec {
|
|||
|
||||
disabled = !isPy3k;
|
||||
|
||||
nativeBuildInputs = [ pkgconfig gettext ];
|
||||
nativeBuildInputs = [
|
||||
gettext
|
||||
gobject-introspection
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
intltool wrapGAppsHook
|
||||
glib
|
||||
gnome3.adwaita-icon-theme
|
||||
gsettings-desktop-schemas
|
||||
gtk3
|
||||
gdk-pixbuf
|
||||
];
|
||||
|
||||
# The optional tagpy dependency (for editing metadata) is not yet
|
||||
# included because it's difficult to build.
|
||||
pythonPath = [
|
||||
dbus-python
|
||||
mpd2
|
||||
pygobject3
|
||||
setuptools
|
||||
];
|
||||
|
||||
# Otherwise the setup hook for gobject-introspection is not run:
|
||||
# https://github.com/NixOS/nixpkgs/issues/56943
|
||||
strictDeps = false;
|
||||
|
||||
postPatch = ''
|
||||
# Remove "Local MPD" tab which is not suitable for NixOS.
|
||||
sed -i '/localmpd/d' sonata/consts.py
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [
|
||||
gobject-introspection gtk3 pygobject3 setuptools
|
||||
];
|
||||
|
||||
# The optional tagpy dependency (for editing metadata) is not yet
|
||||
# included because it's difficult to build.
|
||||
pythonPath = [ dbus-python pygobject3 mpd2 ];
|
||||
|
||||
meta = {
|
||||
description = "An elegant client for the Music Player Daemon";
|
||||
longDescription = ''
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# TODO add plugins having various licenses, see http://www.vamp-plugins.org/download.html
|
||||
|
||||
{ stdenv, fetchurl, alsaLib, bzip2, fftw, libjack2, libX11, liblo
|
||||
, libmad, libogg, lrdf, librdf_raptor, librdf_rasqal, libsamplerate
|
||||
, libsndfile, pkgconfig, libpulseaudio, qtbase, qtsvg, redland
|
||||
, libmad, lrdf, librdf_raptor, librdf_rasqal, libsamplerate
|
||||
, libsndfile, pkg-config, libpulseaudio, qtbase, qtsvg, redland
|
||||
, rubberband, serd, sord, vamp-plugin-sdk, fftwFloat
|
||||
, capnproto, liboggz, libfishsound, libid3tag, opusfile
|
||||
, wrapQtAppsHook
|
||||
|
@ -10,13 +10,14 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sonic-visualiser";
|
||||
version = "4.0.1";
|
||||
version = "4.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://code.soundsoftware.ac.uk/attachments/download/2607/${pname}-${version}.tar.gz";
|
||||
sha256 = "14674adzp3chilymna236qyvci3b1zmi3wyz696wk7bcd3ndpsg6";
|
||||
url = "https://code.soundsoftware.ac.uk/attachments/download/2755/${pname}-${version}.tar.gz";
|
||||
sha256 = "1wsvranhvdl21ksbinbgb55qvs3g2d4i57ssj1vx2aln6m01ms9q";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config wrapQtAppsHook ];
|
||||
buildInputs =
|
||||
[ libsndfile qtbase qtsvg fftw fftwFloat bzip2 lrdf rubberband
|
||||
libsamplerate vamp-plugin-sdk alsaLib librdf_raptor librdf_rasqal redland
|
||||
|
@ -27,7 +28,6 @@ stdenv.mkDerivation rec {
|
|||
# portaudio
|
||||
libpulseaudio
|
||||
libmad
|
||||
libogg # ?
|
||||
libfishsound
|
||||
liblo
|
||||
libX11
|
||||
|
@ -37,15 +37,13 @@ stdenv.mkDerivation rec {
|
|||
opusfile
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkgconfig wrapQtAppsHook ];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
# comment out the tests
|
||||
preConfigure = ''
|
||||
sed -i 's/sub_test_svcore_/#sub_test_svcore_/' sonic-visualiser.pro
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "View and analyse contents of music audio files";
|
||||
homepage = "https://www.sonicvisualiser.org/";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# currently needs to be installed into an environment and needs a `kbuildsycoca5` run afterwards for plugin discovery
|
||||
{
|
||||
mkDerivation, fetchFromGitHub, lib, makeWrapper,
|
||||
mkDerivation, fetchFromGitHub, fetchpatch, lib, makeWrapper,
|
||||
cmake, extra-cmake-modules, pkgconfig,
|
||||
libkcddb, kconfig, kconfigwidgets, ki18n, kdelibs4support, kio, solid, kwidgetsaddons, kxmlgui,
|
||||
qtbase, phonon,
|
||||
|
@ -53,6 +53,15 @@ mkDerivation rec {
|
|||
rev = "v" + version;
|
||||
sha256 = "1g2khdsjmsi4zzynkq8chd11cbdhjzmi37r9jhpal0b730nq9x7l";
|
||||
};
|
||||
patches = [
|
||||
# already merged into master, so it can go during the next release
|
||||
(fetchpatch {
|
||||
url = "https://patch-diff.githubusercontent.com/raw/dfaust/soundkonverter/pull/87.patch";
|
||||
sha256 = "sha256-XIpD4ZMTZVcu+F27OtpRy51H+uQgpd5l22IZ6XsD64w=";
|
||||
name = "soundkonverter_taglib.patch";
|
||||
stripLen = 1;
|
||||
})
|
||||
];
|
||||
enableParallelBuilding = true;
|
||||
nativeBuildInputs = [ cmake extra-cmake-modules pkgconfig kdelibs4support makeWrapper ];
|
||||
propagatedBuildInputs = [ libkcddb kconfig kconfigwidgets ki18n kdelibs4support kio solid kwidgetsaddons kxmlgui qtbase phonon];
|
||||
|
|
|
@ -19,9 +19,9 @@ let
|
|||
sha256Hash = "11lkwcbzdl86cyz4lci65cx9z5jjhrc4z40maqx2r5hw1xka9290";
|
||||
};
|
||||
latestVersion = { # canary & dev
|
||||
version = "4.2.0.7"; # "Android Studio 4.2 Canary 7"
|
||||
build = "201.6720134";
|
||||
sha256Hash = "1c9s6rd0z596qr7hbil5rl3fqby7c8h7ma52d1qj5rxra73k77nz";
|
||||
version = "4.2.0.8"; # "Android Studio 4.2 Canary 8"
|
||||
build = "202.6787931";
|
||||
sha256Hash = "0y5fzr22dknzxay1bhd1ymhdnmdrpccdw8dswy2z9bxjsvq65n62";
|
||||
};
|
||||
in {
|
||||
# Attributes are named by their corresponding release channels
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, gtk2, glib, gdk-pixbuf, alsaLib, nss, nspr, gconf
|
||||
{ stdenv, lib, fetchurl, gtk2, glib, gdk-pixbuf, alsaLib, nss, nspr, gconf
|
||||
, cups, libgcrypt_1_5, systemd, dbus, libXdamage, expat }:
|
||||
with stdenv.lib;
|
||||
|
||||
|
@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
|
|||
rmdir $out/usr
|
||||
ln -sf $out/opt/brackets/brackets $out/bin/brackets
|
||||
|
||||
ln -s ${systemd.lib}/lib/libudev.so.1 $out/opt/brackets/lib/libudev.so.0
|
||||
ln -s ${lib.getLib systemd}/lib/libudev.so.1 $out/opt/brackets/lib/libudev.so.0
|
||||
|
||||
substituteInPlace $out/opt/brackets/brackets.desktop \
|
||||
--replace "Exec=/opt/brackets/brackets" "Exec=brackets"
|
||||
|
|
|
@ -531,6 +531,12 @@ let
|
|||
(attrs.nativeBuildInputs or [ ]) ++ [ external.git ];
|
||||
}));
|
||||
|
||||
orgit-forge = super.orgit-forge.overrideAttrs (attrs: {
|
||||
# searches for Git at build time
|
||||
nativeBuildInputs =
|
||||
(attrs.nativeBuildInputs or [ ]) ++ [ external.git ];
|
||||
});
|
||||
|
||||
# tries to write to $HOME
|
||||
php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
|
||||
HOME = "/tmp";
|
||||
|
|
26
pkgs/applications/editors/gophernotes/default.nix
Normal file
26
pkgs/applications/editors/gophernotes/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ lib
|
||||
, buildGoModule
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "gophernotes";
|
||||
version = "0.7.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gopherdata";
|
||||
repo = "gophernotes";
|
||||
rev = "v${version}";
|
||||
sha256 = "0hs92bdrsjqafdkhg2fk3z16h307i32mvbm9f6bb80bgsciysh27";
|
||||
};
|
||||
|
||||
vendorSha256 = "1ylqf1sx0h2kixnq9f3prn3sha43q3ybd5ay57yy5z79qr8zqvxs";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Go kernel for Jupyter notebooks";
|
||||
homepage = "https://github.com/gopherdata/gophernotes";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.costrouc ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, zlib, glib, alsaLib, makeDesktopItem
|
||||
{ stdenv, lib, fetchurl, zlib, glib, alsaLib, makeDesktopItem
|
||||
, dbus, gtk2, atk, pango, freetype, fontconfig, libgnome-keyring3, gdk-pixbuf
|
||||
, cairo, cups, expat, libgpgerror, nspr, gnome2, nss, xorg, systemd, libnotify
|
||||
}:
|
||||
|
@ -45,9 +45,9 @@ stdenv.mkDerivation rec {
|
|||
|
||||
mv $out/share/LightTable/light $out/bin/light
|
||||
|
||||
ln -sf ${systemd.lib}/lib/libudev.so.1 $out/share/LightTable/libudev.so.0
|
||||
ln -sf ${lib.getLib systemd}/lib/libudev.so.1 $out/share/LightTable/libudev.so.0
|
||||
substituteInPlace $out/bin/light \
|
||||
--replace "/usr/lib/x86_64-linux-gnu" "${systemd.lib}/lib" \
|
||||
--replace "/usr/lib/x86_64-linux-gnu" "${lib.getLib systemd}/lib" \
|
||||
--replace "/lib/x86_64-linux-gnu" "$out/share/LightTable" \
|
||||
--replace 'HERE=`dirname $(readlink -f $0)`' "HERE=$out/share/LightTable"
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ let
|
|||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Neovim client library and GUI, in Qt5";
|
||||
homepage = "https://github.com/equalsraf/neovim-qt";
|
||||
license = licenses.isc;
|
||||
maintainers = with maintainers; [ peterhoeg ];
|
||||
inherit (neovim.meta) platforms;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
, lib
|
||||
, fetchurl
|
||||
, makeWrapper
|
||||
, electron_8
|
||||
, electron_9
|
||||
, dpkg
|
||||
, gtk3
|
||||
, glib
|
||||
|
@ -13,15 +13,15 @@
|
|||
}:
|
||||
|
||||
let
|
||||
electron = electron_8;
|
||||
electron = electron_9;
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "typora";
|
||||
version = "0.9.89";
|
||||
version = "0.9.95";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://www.typora.io/linux/typora_${version}_amd64.deb";
|
||||
sha256 = "0gk8j13z1ymad34zzcy4vqwyjgd5khgyw5xjj9rbzm5v537kqmx6";
|
||||
sha256 = "0kgzk7z707vlbjrvykrnw2h6wscmc3h5hxycyz1z1j2cz26fns4p";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -62,7 +62,7 @@ in
|
|||
else [ gtk2 at-spi2-atk wrapGAppsHook ] ++ atomEnv.packages)
|
||||
++ [ libsecret libXScrnSaver ];
|
||||
|
||||
runtimeDependencies = lib.optional (stdenv.isLinux) [ systemd.lib fontconfig.lib ];
|
||||
runtimeDependencies = lib.optional (stdenv.isLinux) [ (lib.getLib systemd) fontconfig.lib ];
|
||||
|
||||
nativeBuildInputs = lib.optional (!stdenv.isDarwin) autoPatchelfHook;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ let
|
|||
[ qscintilla-qt5 gdal jinja2 numpy psycopg2
|
||||
chardet dateutil pyyaml pytz requests urllib3 pygments pyqt5 sip owslib six ];
|
||||
in mkDerivation rec {
|
||||
version = "3.10.7";
|
||||
version = "3.10.9";
|
||||
pname = "qgis";
|
||||
name = "${pname}-unwrapped-${version}";
|
||||
|
||||
|
@ -18,7 +18,7 @@ in mkDerivation rec {
|
|||
owner = "qgis";
|
||||
repo = "QGIS";
|
||||
rev = "final-${lib.replaceStrings ["."] ["_"] version}";
|
||||
sha256 = "0z593n5g3zwhlzhs0z7nlpblz6z2rl3y7y3j1wf1rdx76i8p3qgf";
|
||||
sha256 = "0d646hvrhhgsw789qc2g3iblmsvr64qh15jck1jkaljzrj3qbml6";
|
||||
};
|
||||
|
||||
passthru = {
|
||||
|
|
|
@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
|
|||
];
|
||||
|
||||
runtimeDependencies = [
|
||||
systemd.lib
|
||||
(lib.getLib systemd)
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{ lib
|
||||
{ stdenv
|
||||
, lib
|
||||
, mkDerivation
|
||||
, fetchurl
|
||||
, cmake
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, extra-cmake-modules
|
||||
|
||||
# common deps
|
||||
|
@ -9,6 +10,7 @@
|
|||
|
||||
# client deps
|
||||
, qtbase
|
||||
, qtkeychain
|
||||
, qtmultimedia
|
||||
, qtsvg
|
||||
, qttools
|
||||
|
@ -23,6 +25,8 @@
|
|||
# optional server deps
|
||||
, libmicrohttpd
|
||||
, libsodium
|
||||
, withSystemd ? stdenv.isLinux
|
||||
, systemd ? null
|
||||
|
||||
# options
|
||||
, buildClient ? true
|
||||
|
@ -35,11 +39,9 @@
|
|||
with lib;
|
||||
|
||||
let
|
||||
commonDeps = [
|
||||
karchive
|
||||
];
|
||||
clientDeps = [
|
||||
qtbase
|
||||
qtkeychain
|
||||
qtmultimedia
|
||||
qtsvg
|
||||
qttools
|
||||
|
@ -49,40 +51,57 @@ let
|
|||
libvpx # WebM video export
|
||||
miniupnpc # automatic port forwarding
|
||||
];
|
||||
|
||||
serverDeps = [
|
||||
# optional:
|
||||
libmicrohttpd # HTTP admin api
|
||||
libsodium # ext-auth support
|
||||
];
|
||||
] ++ optional withSystemd systemd;
|
||||
|
||||
kisDeps = [
|
||||
qtx11extras
|
||||
];
|
||||
|
||||
boolToFlag = bool:
|
||||
if bool then "ON" else "OFF";
|
||||
|
||||
in mkDerivation rec {
|
||||
pname = "drawpile";
|
||||
version = "2.1.17";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://drawpile.net/files/src/drawpile-${version}.tar.gz";
|
||||
sha256 = "11lhn1mymhqk9g5sh384xhj3qw8h9lv88pr768y9q6kg3sl7nzzf";
|
||||
src = fetchFromGitHub {
|
||||
owner = "drawpile";
|
||||
repo = "drawpile";
|
||||
rev = "${version}";
|
||||
sha256 = "sha256-AFFY+FcY9ExAur13OoWR9285RZtBe6jnRIrwi5raiCM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
extra-cmake-modules
|
||||
patches = [
|
||||
# fix for libmicrohttpd 0.9.71
|
||||
(fetchpatch {
|
||||
url = "https://github.com/drawpile/Drawpile/commit/ed1a75deb113da2d1df91a28f557509c4897130e.diff";
|
||||
sha256 = "sha256-54wabH5F3Hf+6vv9rpCwCRdhjSaUFtuF/mE1/U+CpOA=";
|
||||
name = "mhdfix.patch"; })
|
||||
];
|
||||
buildInputs =
|
||||
commonDeps ++
|
||||
optionals buildClient clientDeps ++
|
||||
optionals buildServer serverDeps ++
|
||||
optionals enableKisTablet kisDeps ;
|
||||
|
||||
cmakeFlags =
|
||||
optional (!buildClient ) "-DCLIENT=off" ++
|
||||
optional (!buildServer ) "-DSERVER=off" ++
|
||||
optional (!buildServerGui ) "-DSERVERGUI=off" ++
|
||||
optional ( buildExtraTools) "-DTOOLS=on" ++
|
||||
optional ( enableKisTablet) "-DKIS_TABLET=on";
|
||||
nativeBuildInputs = [ extra-cmake-modules ];
|
||||
|
||||
buildInputs = [
|
||||
karchive
|
||||
]
|
||||
++ optionals buildClient clientDeps
|
||||
++ optionals buildServer serverDeps
|
||||
++ optionals enableKisTablet kisDeps;
|
||||
|
||||
cmakeFlags = [
|
||||
"-Wno-dev"
|
||||
"-DINITSYS=systemd"
|
||||
"-DCLIENT=${boolToFlag buildClient}"
|
||||
"-DSERVER=${boolToFlag buildServer}"
|
||||
"-DSERVERGUI=${boolToFlag buildServerGui}"
|
||||
"-DTOOLS=${boolToFlag buildExtraTools}"
|
||||
"-DKIS_TABLET=${boolToFlag enableKisTablet}"
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "A collaborative drawing program that allows multiple users to sketch on the same canvas simultaneously";
|
||||
|
|
|
@ -7,11 +7,11 @@ with stdenv.lib;
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "feh";
|
||||
version = "3.4.1";
|
||||
version = "3.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://feh.finalrewind.org/${pname}-${version}.tar.bz2";
|
||||
sha256 = "0yvvj1s7ayn0lwils582smwkmckdk0gij5c58g45n4xh981n693q";
|
||||
sha256 = "07jklibpi4ig9pbdrwhllsfffxn2h8xf4ma36qii00w4hb69v3rq";
|
||||
};
|
||||
|
||||
outputs = [ "out" "man" "doc" ];
|
||||
|
|
|
@ -1,31 +1,40 @@
|
|||
{ stdenv, fetchFromGitLab, meson, ninja, gettext, pkgconfig, libxml2, gtk3, hicolor-icon-theme, wrapGAppsHook
|
||||
, fetchpatch }:
|
||||
{ stdenv
|
||||
, fetchFromGitLab
|
||||
, meson
|
||||
, ninja
|
||||
, gettext
|
||||
, pkg-config
|
||||
, libxml2
|
||||
, gtk3
|
||||
, libportal
|
||||
, wrapGAppsHook
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2.3.1";
|
||||
in stdenv.mkDerivation {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gcolor3";
|
||||
inherit version;
|
||||
version = "2.4.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.gnome.org";
|
||||
owner = "World";
|
||||
repo = "gcolor3";
|
||||
rev = "v${version}";
|
||||
sha256 = "10cfzlkflwkb7f51rnrxmgxpfryh1qzvqaydj6lffjq9zvnhigg7";
|
||||
sha256 = "rHIAjk2m3Lkz11obgNZaapa1Zr2GDH7XzgzuAJmq+MU=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Remove useage of deprecrated G_PARAM_PRIVATE
|
||||
(fetchpatch {
|
||||
url = "https://gitlab.gnome.org/World/gcolor3/commit/96612cdd6c2cc71e28eb97ee17956004a05e5140.patch";
|
||||
sha256 = "134wv5x15bd7k0fjzifrddwssaq213sx2l38r3xw6x1j625qwzq9";
|
||||
})
|
||||
nativeBuildInputs = [
|
||||
meson
|
||||
ninja
|
||||
gettext
|
||||
pkg-config
|
||||
libxml2 # xml-stripblanks preprocessing of GResource
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ meson ninja gettext pkgconfig libxml2 wrapGAppsHook ];
|
||||
|
||||
buildInputs = [ gtk3 hicolor-icon-theme ];
|
||||
buildInputs = [
|
||||
gtk3
|
||||
libportal
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
chmod +x meson_install.sh # patchShebangs requires executable file
|
||||
|
@ -34,7 +43,7 @@ in stdenv.mkDerivation {
|
|||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A simple color chooser written in GTK3";
|
||||
homepage = "https://www.hjdskes.nl/projects/gcolor3/";
|
||||
homepage = "https://gitlab.gnome.org/World/gcolor3";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ jtojnar ];
|
||||
platforms = platforms.unix;
|
||||
|
|
53
pkgs/applications/graphics/odafileconverter/default.nix
Normal file
53
pkgs/applications/graphics/odafileconverter/default.nix
Normal file
|
@ -0,0 +1,53 @@
|
|||
{ lib, stdenv, mkDerivation, dpkg, fetchurl, qtbase }:
|
||||
|
||||
let
|
||||
# To obtain the version you will need to run the following command:
|
||||
#
|
||||
# dpkg-deb -I ${odafileconverter.src} | grep Version
|
||||
version = "21.7.0.0";
|
||||
rpath = "$ORIGIN:${lib.makeLibraryPath [ stdenv.cc.cc qtbase ]}";
|
||||
|
||||
in mkDerivation {
|
||||
pname = "oda-file-converter";
|
||||
inherit version;
|
||||
nativeBuildInputs = [ dpkg ];
|
||||
|
||||
src = fetchurl {
|
||||
# NB: this URL is not stable (i.e. the underlying file and the corresponding version will change over time)
|
||||
url = "https://download.opendesign.com/guestfiles/ODAFileConverter/ODAFileConverter_QT5_lnxX64_7.2dll.deb";
|
||||
sha256 = "0sa21nnwzqb6g7gl0z43smqgcd9h3xipj3cq2cl7ybfh3cvcxfi9";
|
||||
};
|
||||
|
||||
unpackPhase = ''
|
||||
dpkg -x $src oda_unpacked
|
||||
sourceRoot=$PWD/oda_unpacked
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/lib
|
||||
cp -vr $sourceRoot/usr/bin/ODAFileConverter_${version} $out/libexec
|
||||
cp -vr $sourceRoot/usr/share $out/share
|
||||
'';
|
||||
|
||||
dontWrapQtApps = true;
|
||||
fixupPhase = ''
|
||||
echo "setting interpreter"
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/libexec/ODAFileConverter
|
||||
patchelf --set-rpath '${rpath}' $out/libexec/ODAFileConverter
|
||||
wrapQtApp $out/libexec/ODAFileConverter
|
||||
mv $out/libexec/ODAFileConverter $out/bin
|
||||
|
||||
find $out/libexec -type f -executable | while read file; do
|
||||
echo "patching $file"
|
||||
patchelf --set-rpath '${rpath}' $file
|
||||
done
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "For converting between different versions of .dwg and .dxf";
|
||||
homepage = "https://www.opendesign.com/guestfiles/oda_file_converter";
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ nagisa ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
|
@ -91,7 +91,7 @@ in stdenv.mkDerivation rec {
|
|||
$out/opt/pencil/pencil
|
||||
|
||||
# fix missing libudev
|
||||
ln -s ${systemd.lib}/lib/libudev.so.1 $out/opt/pencil/libudev.so.1
|
||||
ln -s ${lib.getLib systemd}/lib/libudev.so.1 $out/opt/pencil/libudev.so.1
|
||||
wrapProgram $out/opt/pencil/pencil \
|
||||
--prefix LD_LIBRARY_PATH : $out/opt/pencil
|
||||
'';
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
mkDerivation, lib, kdepimTeam,
|
||||
extra-cmake-modules, kdoctools,
|
||||
akonadi, akonadi-calendar, akonadi-mime, kcalutils, kdepim-apps-libs,
|
||||
akonadi, akonadi-calendar, akonadi-mime, akonadi-notes, kcalutils, kdepim-apps-libs,
|
||||
kholidays, kidentitymanagement, kmime, pimcommon, qttools,
|
||||
}:
|
||||
|
||||
|
@ -13,7 +13,7 @@ mkDerivation {
|
|||
};
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
akonadi akonadi-mime kcalutils kdepim-apps-libs kholidays pimcommon qttools
|
||||
akonadi akonadi-mime akonadi-notes kcalutils kdepim-apps-libs kholidays pimcommon qttools
|
||||
];
|
||||
propagatedBuildInputs = [ akonadi-calendar kidentitymanagement kmime ];
|
||||
outputs = [ "out" "dev" ];
|
||||
|
|
|
@ -100,7 +100,6 @@ let
|
|||
kcalutils = callPackage ./kcalutils.nix {};
|
||||
kcharselect = callPackage ./kcharselect.nix {};
|
||||
kcolorchooser = callPackage ./kcolorchooser.nix {};
|
||||
kdav = callPackage ./kdav.nix {};
|
||||
kdebugsettings = callPackage ./kdebugsettings.nix {};
|
||||
kdegraphics-mobipocket = callPackage ./kdegraphics-mobipocket.nix {};
|
||||
kdegraphics-thumbnailers = callPackage ./kdegraphics-thumbnailers.nix {};
|
||||
|
|
|
@ -1 +1 @@
|
|||
WGET_ARGS=(http://download.kde.org/stable/release-service/20.04.3/src)
|
||||
WGET_ARGS=(http://download.kde.org/stable/release-service/20.08.0/src)
|
||||
|
|
|
@ -11,7 +11,6 @@ mkDerivation {
|
|||
maintainers = kdepimTeam;
|
||||
};
|
||||
output = [ "out" "dev" ];
|
||||
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
grantlee ki18n kiconthemes knewstuff kservice kxmlgui qtbase
|
||||
|
|
|
@ -1,155 +0,0 @@
|
|||
diff --git a/src/grantleetheme.cpp b/src/grantleetheme.cpp
|
||||
index 27d5bc8..8d43140 100644
|
||||
--- a/src/grantleetheme.cpp
|
||||
+++ b/src/grantleetheme.cpp
|
||||
@@ -46,7 +46,7 @@ ThemePrivate::ThemePrivate(const ThemePrivate &other)
|
||||
, description(other.description)
|
||||
, name(other.name)
|
||||
, dirName(other.dirName)
|
||||
- , absolutePath(other.absolutePath)
|
||||
+ , absolutePaths(other.absolutePaths)
|
||||
, author(other.author)
|
||||
, email(other.email)
|
||||
, loader(other.loader)
|
||||
@@ -64,12 +64,15 @@ void ThemePrivate::setupEngine()
|
||||
|
||||
void ThemePrivate::setupLoader()
|
||||
{
|
||||
- // Get the parent dir with themes, we set the theme directory separately
|
||||
- QDir dir(absolutePath);
|
||||
- dir.cdUp();
|
||||
+ QStringList templateDirs;
|
||||
+ for (const QString& path : absolutePaths) {
|
||||
+ QDir dir(path);
|
||||
+ dir.cdUp();
|
||||
+ templateDirs << dir.absolutePath();
|
||||
+ }
|
||||
|
||||
loader = QSharedPointer<GrantleeTheme::QtResourceTemplateLoader>::create();
|
||||
- loader->setTemplateDirs({ dir.absolutePath() });
|
||||
+ loader->setTemplateDirs(templateDirs);
|
||||
loader->setTheme(dirName);
|
||||
|
||||
if (!sEngine) {
|
||||
@@ -121,7 +124,7 @@ Theme::Theme(const QString &themePath, const QString &dirName, const QString &de
|
||||
KConfigGroup group(&config, QStringLiteral("Desktop Entry"));
|
||||
if (group.isValid()) {
|
||||
d->dirName = dirName;
|
||||
- d->absolutePath = themePath;
|
||||
+ d->absolutePaths = QStringList(themePath);
|
||||
d->name = group.readEntry("Name", QString());
|
||||
d->description = group.readEntry("Description", QString());
|
||||
d->themeFileName = group.readEntry("FileName", QString());
|
||||
@@ -140,7 +143,7 @@ Theme::~Theme()
|
||||
|
||||
bool Theme::operator==(const Theme &other) const
|
||||
{
|
||||
- return isValid() && other.isValid() && d->absolutePath == other.absolutePath();
|
||||
+ return isValid() && other.isValid() && d->absolutePaths == other.absolutePaths();
|
||||
}
|
||||
|
||||
Theme &Theme::operator=(const Theme &other)
|
||||
@@ -184,7 +187,12 @@ QString Theme::dirName() const
|
||||
|
||||
QString Theme::absolutePath() const
|
||||
{
|
||||
- return d->absolutePath;
|
||||
+ return d->absolutePaths.first();
|
||||
+}
|
||||
+
|
||||
+QStringList Theme::absolutePaths() const
|
||||
+{
|
||||
+ return d->absolutePaths;
|
||||
}
|
||||
|
||||
QString Theme::author() const
|
||||
@@ -223,6 +231,13 @@ QString Theme::render(const QString &templateName, const QVariantHash &data, con
|
||||
return result;
|
||||
}
|
||||
|
||||
+void Theme::addThemeDir(const QString& path)
|
||||
+{
|
||||
+ QDir dir(path);
|
||||
+ dir.cdUp();
|
||||
+ d->absolutePaths << dir.absolutePath();
|
||||
+}
|
||||
+
|
||||
void Theme::addPluginPath(const QString &path)
|
||||
{
|
||||
if (!ThemePrivate::sEngine) {
|
||||
diff --git a/src/grantleetheme.h b/src/grantleetheme.h
|
||||
index a25c27b..be38299 100644
|
||||
--- a/src/grantleetheme.h
|
||||
+++ b/src/grantleetheme.h
|
||||
@@ -48,11 +48,14 @@ public:
|
||||
Q_REQUIRED_RESULT QStringList displayExtraVariables() const;
|
||||
Q_REQUIRED_RESULT QString dirName() const;
|
||||
Q_REQUIRED_RESULT QString absolutePath() const;
|
||||
+ Q_REQUIRED_RESULT QStringList absolutePaths() const;
|
||||
Q_REQUIRED_RESULT QString author() const;
|
||||
Q_REQUIRED_RESULT QString authorEmail() const;
|
||||
|
||||
Q_REQUIRED_RESULT QString render(const QString &templateName, const QVariantHash &data, const QByteArray &applicationDomain = QByteArray());
|
||||
|
||||
+ void addThemeDir(const QString&);
|
||||
+
|
||||
static void addPluginPath(const QString &path);
|
||||
|
||||
private:
|
||||
diff --git a/src/grantleetheme_p.h b/src/grantleetheme_p.h
|
||||
index eb73dcb..00510e9 100644
|
||||
--- a/src/grantleetheme_p.h
|
||||
+++ b/src/grantleetheme_p.h
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
QString description;
|
||||
QString name;
|
||||
QString dirName;
|
||||
- QString absolutePath;
|
||||
+ QStringList absolutePaths;
|
||||
QString author;
|
||||
QString email;
|
||||
|
||||
diff --git a/src/grantleethememanager.cpp b/src/grantleethememanager.cpp
|
||||
index 606d717..dc99041 100644
|
||||
--- a/src/grantleethememanager.cpp
|
||||
+++ b/src/grantleethememanager.cpp
|
||||
@@ -125,25 +125,18 @@ public:
|
||||
|
||||
for (const QString &directory : qAsConst(themesDirectories)) {
|
||||
QDirIterator dirIt(directory, QStringList(), QDir::AllDirs | QDir::NoDotAndDotDot);
|
||||
- QStringList alreadyLoadedThemeName;
|
||||
while (dirIt.hasNext()) {
|
||||
dirIt.next();
|
||||
const QString dirName = dirIt.fileName();
|
||||
GrantleeTheme::Theme theme = q->loadTheme(dirIt.filePath(), dirName, defaultDesktopFileName);
|
||||
if (theme.isValid()) {
|
||||
QString themeName = theme.name();
|
||||
- if (alreadyLoadedThemeName.contains(themeName)) {
|
||||
- int i = 2;
|
||||
- const QString originalName(theme.name());
|
||||
- while (alreadyLoadedThemeName.contains(themeName)) {
|
||||
- themeName = originalName + QStringLiteral(" (%1)").arg(i);
|
||||
- ++i;
|
||||
- }
|
||||
- theme.d->name = themeName;
|
||||
+ QMap<QString, GrantleeTheme::Theme>::iterator i = themes.find(dirName);
|
||||
+ if (i != themes.end()) {
|
||||
+ i.value().addThemeDir(dirIt.filePath());
|
||||
+ } else {
|
||||
+ themes.insert(dirName, theme);
|
||||
}
|
||||
- alreadyLoadedThemeName << themeName;
|
||||
- themes.insert(dirName, theme);
|
||||
- //qDebug()<<" theme.name()"<<theme.name();
|
||||
}
|
||||
}
|
||||
watch->addDir(directory);
|
||||
@@ -366,7 +359,7 @@ QString ThemeManager::pathFromThemes(const QString &themesRelativePath, const QS
|
||||
GrantleeTheme::Theme theme = loadTheme(dirIt.filePath(), dirName, defaultDesktopFileName);
|
||||
if (theme.isValid()) {
|
||||
if (dirName == themeName) {
|
||||
- return theme.absolutePath();
|
||||
+ return theme.absolutePaths().first();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
grantlee-merge-theme-dirs.patch
|
|
@ -2,7 +2,7 @@
|
|||
mkDerivation, lib, kdepimTeam,
|
||||
extra-cmake-modules, kdoctools,
|
||||
akonadi, akonadi-mime, calendarsupport, eventviews, kdepim-apps-libs,
|
||||
kdiagram, kldap, kmime, qtbase,
|
||||
kdiagram, kldap, kmime, pimcommon, qtbase
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
|
@ -14,7 +14,7 @@ mkDerivation {
|
|||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
akonadi akonadi-mime calendarsupport eventviews kdepim-apps-libs kdiagram
|
||||
kldap kmime qtbase
|
||||
kldap kmime pimcommon qtbase
|
||||
];
|
||||
outputs = [ "out" "dev" ];
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ mkDerivation {
|
|||
license = with lib.licenses; [ gpl2 lgpl21 fdl12 ];
|
||||
maintainers = kdepimTeam;
|
||||
};
|
||||
patches = copyPathsToStore (lib.readPathsFromFile ./. ./series);
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
akonadi akonadi-contacts grantlee grantleetheme kconfig kconfigwidgets
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
Index: kdepim-apps-libs-17.04.0/kaddressbookgrantlee/src/formatter/grantleecontactgroupformatter.cpp
|
||||
===================================================================
|
||||
--- kdepim-apps-libs-17.04.0.orig/kaddressbookgrantlee/src/formatter/grantleecontactgroupformatter.cpp
|
||||
+++ kdepim-apps-libs-17.04.0/kaddressbookgrantlee/src/formatter/grantleecontactgroupformatter.cpp
|
||||
@@ -50,9 +50,9 @@ public:
|
||||
mTemplateLoader.clear();
|
||||
}
|
||||
|
||||
- void changeGrantleePath(const QString &path)
|
||||
+ void changeGrantleePath(const QStringList &paths)
|
||||
{
|
||||
- mTemplateLoader->setTemplateDirs(QStringList() << path);
|
||||
+ mTemplateLoader->setTemplateDirs(paths);
|
||||
mEngine->addTemplateLoader(mTemplateLoader);
|
||||
|
||||
mSelfcontainedTemplate = mEngine->loadByName(QStringLiteral("contactgroup.html"));
|
||||
@@ -86,12 +86,12 @@ GrantleeContactGroupFormatter::~Grantlee
|
||||
|
||||
void GrantleeContactGroupFormatter::setAbsoluteThemePath(const QString &path)
|
||||
{
|
||||
- d->changeGrantleePath(path);
|
||||
+ d->changeGrantleePath(QStringList(path));
|
||||
}
|
||||
|
||||
void GrantleeContactGroupFormatter::setGrantleeTheme(const GrantleeTheme::Theme &theme)
|
||||
{
|
||||
- d->changeGrantleePath(theme.absolutePath());
|
||||
+ d->changeGrantleePath(theme.absolutePaths());
|
||||
}
|
||||
|
||||
inline static void setHashField(QVariantHash &hash, const QString &name, const QString &value)
|
||||
Index: kdepim-apps-libs-17.04.0/kaddressbookgrantlee/src/formatter/grantleecontactformatter.cpp
|
||||
===================================================================
|
||||
--- kdepim-apps-libs-17.04.0.orig/kaddressbookgrantlee/src/formatter/grantleecontactformatter.cpp
|
||||
+++ kdepim-apps-libs-17.04.0/kaddressbookgrantlee/src/formatter/grantleecontactformatter.cpp
|
||||
@@ -74,9 +74,9 @@ public:
|
||||
mTemplateLoader.clear();
|
||||
}
|
||||
|
||||
- void changeGrantleePath(const QString &path)
|
||||
+ void changeGrantleePath(const QStringList &paths)
|
||||
{
|
||||
- mTemplateLoader->setTemplateDirs(QStringList() << path);
|
||||
+ mTemplateLoader->setTemplateDirs(paths);
|
||||
mEngine->addTemplateLoader(mTemplateLoader);
|
||||
|
||||
mSelfcontainedTemplate = mEngine->loadByName(QStringLiteral("contact.html"));
|
||||
@@ -112,12 +112,12 @@ GrantleeContactFormatter::~GrantleeConta
|
||||
|
||||
void GrantleeContactFormatter::setAbsoluteThemePath(const QString &path)
|
||||
{
|
||||
- d->changeGrantleePath(path);
|
||||
+ d->changeGrantleePath(QStringList(path));
|
||||
}
|
||||
|
||||
void GrantleeContactFormatter::setGrantleeTheme(const GrantleeTheme::Theme &theme)
|
||||
{
|
||||
- d->changeGrantleePath(theme.absolutePath());
|
||||
+ d->changeGrantleePath(theme.absolutePaths());
|
||||
}
|
||||
|
||||
void GrantleeContactFormatter::setForceDisableQRCode(bool b)
|
|
@ -1 +0,0 @@
|
|||
kdepim-apps-libs-grantlee-merge-theme-dirs.patch
|
|
@ -4,8 +4,8 @@
|
|||
shared-mime-info,
|
||||
akonadi, akonadi-calendar, akonadi-contacts, akonadi-mime, akonadi-notes,
|
||||
kalarmcal, kcalutils, kcontacts, kdav, kdelibs4support, kidentitymanagement,
|
||||
kimap, kmailtransport, kmbox, kmime, knotifications, knotifyconfig,
|
||||
pimcommon, qtwebengine, libkgapi, qtnetworkauth, qtspeech, qtxmlpatterns,
|
||||
kimap, kldap, kmailtransport, kmbox, kmime, knotifications, knotifyconfig,
|
||||
pimcommon, qtwebengine, libkgapi, qca-qt5, qtnetworkauth, qtspeech, qtxmlpatterns,
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
|
@ -18,7 +18,7 @@ mkDerivation {
|
|||
buildInputs = [
|
||||
akonadi akonadi-calendar akonadi-contacts akonadi-mime akonadi-notes
|
||||
kalarmcal kcalutils kcontacts kdav kdelibs4support kidentitymanagement kimap
|
||||
kmailtransport kmbox kmime knotifications knotifyconfig qtwebengine
|
||||
pimcommon libkgapi qtnetworkauth qtspeech qtxmlpatterns
|
||||
kldap kmailtransport kmbox kmime knotifications knotifyconfig qtwebengine
|
||||
pimcommon libkgapi qca-qt5 qtnetworkauth qtspeech qtxmlpatterns
|
||||
];
|
||||
}
|
||||
|
|
|
@ -27,5 +27,4 @@ mkDerivation {
|
|||
kdepim-addons
|
||||
];
|
||||
propagatedUserEnvPkgs = [ kdepim-runtime kwallet akonadi ];
|
||||
patches = [ ./kmail.patch ];
|
||||
}
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
diff --git a/agents/archivemailagent/CMakeLists.txt b/agents/archivemailagent/CMakeLists.txt
|
||||
index 48ed076..9c56896 100644
|
||||
--- a/agents/archivemailagent/CMakeLists.txt
|
||||
+++ b/agents/archivemailagent/CMakeLists.txt
|
||||
@@ -22,6 +22,7 @@ ki18n_wrap_ui(libarchivemailagent_SRCS ui/archivemailwidget.ui )
|
||||
add_library(archivemailagent STATIC ${libarchivemailagent_SRCS})
|
||||
target_link_libraries(archivemailagent
|
||||
KF5::MailCommon
|
||||
+ KF5::Libkdepim
|
||||
KF5::I18n
|
||||
KF5::Notifications
|
||||
KF5::IconThemes
|
||||
diff --git a/agents/followupreminderagent/CMakeLists.txt b/agents/followupreminderagent/CMakeLists.txt
|
||||
index a56b730..83604cf 100644
|
||||
--- a/agents/followupreminderagent/CMakeLists.txt
|
||||
+++ b/agents/followupreminderagent/CMakeLists.txt
|
||||
@@ -23,6 +23,7 @@ target_link_libraries(followupreminderagent
|
||||
KF5::AkonadiMime
|
||||
KF5::AkonadiAgentBase
|
||||
KF5::DBusAddons
|
||||
+ KF5::FollowupReminder
|
||||
KF5::XmlGui
|
||||
KF5::KIOWidgets
|
||||
KF5::Notifications
|
|
@ -4,7 +4,7 @@
|
|||
qtwebengine,
|
||||
kcmutils, kcrash, kdbusaddons, kparts, kwindowsystem,
|
||||
akonadi, grantleetheme, kdepim-apps-libs, kontactinterface, kpimtextedit,
|
||||
mailcommon, libkdepim
|
||||
mailcommon, libkdepim, pimcommon
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
|
@ -18,6 +18,6 @@ mkDerivation {
|
|||
qtwebengine
|
||||
kcmutils kcrash kdbusaddons kparts kwindowsystem
|
||||
akonadi grantleetheme kdepim-apps-libs kontactinterface kpimtextedit
|
||||
mailcommon libkdepim
|
||||
mailcommon libkdepim pimcommon
|
||||
];
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
mkDerivation, lib, kdepimTeam,
|
||||
extra-cmake-modules, kdoctools,
|
||||
akonadi, akonadi-mime, karchive, kcompletion, kconfig, kcoreaddons, ki18n,
|
||||
kmime, kxmlgui, libkdepim
|
||||
kmime, kxmlgui, libkdepim, pimcommon
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
|
@ -14,6 +14,6 @@ mkDerivation {
|
|||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
akonadi akonadi-mime karchive kcompletion kconfig kcoreaddons ki18n kmime
|
||||
kxmlgui libkdepim
|
||||
kxmlgui libkdepim pimcommon
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
mkDerivation, lib, kdepimTeam,
|
||||
extra-cmake-modules, kdoctools,
|
||||
akonadi, akonadi-contacts, akonadi-mime, grantlee, karchive, kcodecs,
|
||||
akonadi, akonadi-contacts, akonadi-mime, akonadi-search, grantlee, karchive, kcmutils, kcodecs,
|
||||
kcompletion, kconfig, kconfigwidgets, kcontacts, kdbusaddons,
|
||||
kiconthemes, kimap, kio, kitemmodels, kjobwidgets, knewstuff, kpimtextedit,
|
||||
kiconthemes, kimap, kio, kitemmodels, kjobwidgets, kldap, knewstuff, kpimtextedit,
|
||||
kpurpose, kwallet, kwindowsystem, libkdepim, qtwebengine
|
||||
}:
|
||||
|
||||
|
@ -15,12 +15,12 @@ mkDerivation {
|
|||
};
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [
|
||||
akonadi-mime grantlee karchive kcodecs kcompletion kconfigwidgets
|
||||
kdbusaddons kiconthemes kio kitemmodels kjobwidgets knewstuff kpimtextedit
|
||||
akonadi-mime grantlee karchive kcmutils kcodecs kcompletion kconfigwidgets
|
||||
kdbusaddons kiconthemes kio kitemmodels kjobwidgets knewstuff kldap kpimtextedit
|
||||
kpurpose kwallet kwindowsystem libkdepim qtwebengine
|
||||
];
|
||||
propagatedBuildInputs = [
|
||||
akonadi akonadi-contacts kconfig kcontacts kimap
|
||||
akonadi akonadi-contacts akonadi-search kconfig kcontacts kimap
|
||||
];
|
||||
outputs = [ "out" "dev" ];
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,6 @@
|
|||
, fetchFromGitHub
|
||||
, wrapQtAppsHook
|
||||
, python3
|
||||
, python3Packages
|
||||
, zbar
|
||||
, secp256k1
|
||||
, enableQt ? true
|
||||
|
@ -22,6 +21,20 @@
|
|||
let
|
||||
version = "4.0.2";
|
||||
|
||||
# electrum is not compatible with dnspython 2.0.0 yet
|
||||
# use the latest 1.x release instead
|
||||
py = python3.override {
|
||||
packageOverrides = self: super: {
|
||||
dnspython = super.dnspython.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "1.16.0";
|
||||
src = oldAttrs.src.override {
|
||||
inherit version;
|
||||
sha256 = "36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01";
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
libsecp256k1_name =
|
||||
if stdenv.isLinux then "libsecp256k1.so.0"
|
||||
else if stdenv.isDarwin then "libsecp256k1.0.dylib"
|
||||
|
@ -45,7 +58,7 @@ let
|
|||
};
|
||||
in
|
||||
|
||||
python3Packages.buildPythonApplication {
|
||||
py.pkgs.buildPythonApplication {
|
||||
pname = "electrum";
|
||||
inherit version;
|
||||
|
||||
|
@ -61,7 +74,7 @@ python3Packages.buildPythonApplication {
|
|||
|
||||
nativeBuildInputs = stdenv.lib.optionals enableQt [ wrapQtAppsHook ];
|
||||
|
||||
propagatedBuildInputs = with python3Packages; [
|
||||
propagatedBuildInputs = with py.pkgs; [
|
||||
aiohttp
|
||||
aiohttp-socks
|
||||
aiorpcx
|
||||
|
@ -116,7 +129,7 @@ python3Packages.buildPythonApplication {
|
|||
wrapQtApp $out/bin/electrum
|
||||
'';
|
||||
|
||||
checkInputs = with python3Packages; [ pytest ];
|
||||
checkInputs = with py.pkgs; [ pytest ];
|
||||
|
||||
checkPhase = ''
|
||||
py.test electrum/tests
|
||||
|
|
|
@ -23,6 +23,8 @@ in mkDerivation rec {
|
|||
|
||||
propagatedBuildInputs = [ kconfig kcrash kinit kjsembed ];
|
||||
|
||||
NIX_LDFLAGS = "-ltag";
|
||||
|
||||
meta = with lib; {
|
||||
description = "A powerful batch renamer for KDE";
|
||||
homepage = "https://kde.org/applications/utilities/krename/";
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "navi";
|
||||
version = "2.8.0";
|
||||
version = "2.9.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "denisidoro";
|
||||
repo = "navi";
|
||||
rev = "v${version}";
|
||||
sha256 = "0w63yx4c60r05nfswv61jw3l3zbl5n1s396a6f4ayn52fb6rxwg1";
|
||||
sha256 = "16rwhpyk0zqks9z9bv2a1a8vww2m6867kg33bjbr29hawjg68jql";
|
||||
};
|
||||
|
||||
cargoSha256 = "06xpk04nxkm7h4nn235x8a4gi0qhscj8kkl2f9gqphlfmm56kjfn";
|
||||
cargoSha256 = "19w9gm389lj1zwhyjifhc2fzkvrvqvyc80lwxz070cnj11ir2l9m";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchurl
|
||||
, libxkbcommon
|
||||
, systemd
|
||||
|
@ -50,7 +51,7 @@ stdenv.mkDerivation rec {
|
|||
postFixup = ''
|
||||
makeWrapper ${electron}/bin/electron $out/bin/${pname} \
|
||||
--add-flags $out/opt/obinskit/resources/app.asar \
|
||||
--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc.lib libxkbcommon systemd.lib xorg.libXt ]}"
|
||||
--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc.lib libxkbcommon (lib.getLib systemd) xorg.libXt ]}"
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
|
|
@ -35,13 +35,13 @@
|
|||
|
||||
buildPythonApplication rec {
|
||||
pname = "orca";
|
||||
version = "3.36.4";
|
||||
version = "3.36.5";
|
||||
|
||||
format = "other";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "1s6qrmbn3pywidwwfa24ly21c1cz6fnnsipi9vlp3sxswbdcwiwz";
|
||||
sha256 = "0nyb33p4y6nmln41pi70c8hiyjyasaryy10mazi7b2s6fy9pk25x";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
, fetchurl
|
||||
, makeDesktopItem
|
||||
, makeWrapper
|
||||
, lib
|
||||
, stdenv
|
||||
, udev
|
||||
, wrapGAppsHook
|
||||
|
@ -82,7 +83,7 @@ let
|
|||
'';
|
||||
|
||||
runtimeDependencies = [
|
||||
udev.lib
|
||||
(lib.getLib udev)
|
||||
];
|
||||
|
||||
postFixup = ''
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, gnutar
|
||||
{ stdenv, lib, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, gnutar
|
||||
|
||||
# default dependencies
|
||||
, bzip2, flac, speex, libopus
|
||||
|
@ -197,7 +197,7 @@ let
|
|||
sed -i -e 's@"\(#!\)\?.*xdg-@"\1${xdg_utils}/bin/xdg-@' \
|
||||
chrome/browser/shell_integration_linux.cc
|
||||
|
||||
sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${systemd.lib}/lib/\1!' \
|
||||
sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
|
||||
device/udev_linux/udev?_loader.cc
|
||||
|
||||
sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -141,6 +141,14 @@ stdenv.mkDerivation ({
|
|||
|
||||
postPatch = ''
|
||||
rm -rf obj-x86_64-pc-linux-gnu
|
||||
'' + lib.optionalString (lib.versionAtLeast ffversion "80") ''
|
||||
substituteInPlace dom/system/IOUtils.h \
|
||||
--replace '#include "nspr/prio.h"' '#include "prio.h"'
|
||||
|
||||
substituteInPlace dom/system/IOUtils.cpp \
|
||||
--replace '#include "nspr/prio.h"' '#include "prio.h"' \
|
||||
--replace '#include "nspr/private/pprio.h"' '#include "private/pprio.h"' \
|
||||
--replace '#include "nspr/prtypes.h"' '#include "prtypes.h"'
|
||||
'';
|
||||
|
||||
nativeBuildInputs =
|
||||
|
|
|
@ -7,10 +7,10 @@ in
|
|||
rec {
|
||||
firefox = common rec {
|
||||
pname = "firefox";
|
||||
ffversion = "79.0";
|
||||
ffversion = "80.0";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
|
||||
sha512 = "0zgf7wdcz992a4dy1rj0ax0k65an7h9p9iihka3jy4jd7w4g2d0x4mxz5iqn2y26hmgnkvjb921zh28biikahgygqja3z2pcx26ic0r";
|
||||
sha512 = "3rw30gs1wvd6m2sgsp1wm29rrbkxyf3jsdy8i0azfz9w7hqcfwnv76j3cdf18xghh954hpn3q6w1hr7pgab3z9zjxzyfcnh2mbabyvc";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -35,10 +35,10 @@ rec {
|
|||
|
||||
firefox-esr-78 = common rec {
|
||||
pname = "firefox-esr";
|
||||
ffversion = "78.1.0esr";
|
||||
ffversion = "78.2.0esr";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
|
||||
sha512 = "223v796vjsvgs3yw442c8qbsbh43l1aniial05rl70hx44rh9sg108ripj8q83p5l9m0sp67x6ixd2xvifizv6461a1zra1rvbb1caa";
|
||||
sha512 = "1dnvr9nyvnv5dkpnjnadff38lf9r7g37gk401c1i22d661ib5xj0gm2rnz1rjyrkvzrnr6p9f7liy3i41varja00g0x1racccj1my9q";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -63,10 +63,10 @@ rec {
|
|||
|
||||
firefox-esr-68 = (common rec {
|
||||
pname = "firefox-esr";
|
||||
ffversion = "68.11.0esr";
|
||||
ffversion = "68.12.0esr";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
|
||||
sha512 = "0zg41jnbnpsa07xaizwfsmfav0cgxdqnh8i4yanxy49a45gigk895zqrx2if7pfsmdnj9zpwj9prj8cpnpsfhv6p62f3g2596aa9kvx";
|
||||
sha512 = "169y4prlb4mi31jciz89kp35rpb1p2gxrk93qkwfzdk4imi9hk8mi2yvxknpr0rni3bn2x0zgrrc6ccr8swv5895sqvv1sc5r1056w3";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
|
|
@ -104,7 +104,7 @@ in stdenv.mkDerivation rec {
|
|||
# This is a little tricky. Without it the app starts then crashes. Then it
|
||||
# brings up the crash report, which also crashes. `strace -f` hints at a
|
||||
# missing libudev.so.0.
|
||||
systemd.lib
|
||||
(lib.getLib systemd)
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
@ -91,19 +91,19 @@ let
|
|||
fteLibPath = makeLibraryPath [ stdenv.cc.cc gmp ];
|
||||
|
||||
# Upstream source
|
||||
version = "9.5.3";
|
||||
version = "9.5.4";
|
||||
|
||||
lang = "en-US";
|
||||
|
||||
srcs = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz";
|
||||
sha256 = "1kqvr0sag94xdkq85k426qq1hz2b52m315yz51w6hvc87d8332b4";
|
||||
sha256 = "sha256-XW2B2wTgqMU2w9XhPJNcUjGLrHykQIngMcG/fFTWb04=";
|
||||
};
|
||||
|
||||
i686-linux = fetchurl {
|
||||
url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz";
|
||||
sha256 = "179g00xw964d6x11wvzs84r7d6rcczx7ganqrxrs499yklscc46b";
|
||||
sha256 = "sha256-EyDyAxB5Og1Cn04tuBF9ob8BxqULy2Ur07BuDxZlmqQ=";
|
||||
};
|
||||
};
|
||||
in
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, gnutar
|
||||
{ stdenv, lib, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, gnutar
|
||||
|
||||
# default dependencies
|
||||
, bzip2, flac, speex, libopus
|
||||
|
@ -197,7 +197,7 @@ let
|
|||
sed -i -e 's@"\(#!\)\?.*xdg-@"\1${xdg_utils}/bin/xdg-@' \
|
||||
chrome/browser/shell_integration_linux.cc
|
||||
|
||||
sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${systemd.lib}/lib/\1!' \
|
||||
sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
|
||||
device/udev_linux/udev?_loader.cc
|
||||
|
||||
sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
{ lib, python3Packages }:
|
||||
{ lib, python3 }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
let
|
||||
python = python3.override {
|
||||
self = python;
|
||||
packageOverrides = self: super: {
|
||||
tornado = super.tornado_5;
|
||||
};
|
||||
};
|
||||
in with python.pkgs; buildPythonApplication rec {
|
||||
pname = "luigi";
|
||||
version = "3.0.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "02c480f5pjgqsvqnkaw7f6n4nhdspmhq5w7lw8sgg2v3jghg8n7i";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = with python3Packages; [ dateutil tornado_4 python-daemon boto3 ];
|
||||
propagatedBuildInputs = [ dateutil tornado_5 python-daemon boto3 ];
|
||||
|
||||
# Requires tox, hadoop, and google cloud
|
||||
doCheck = false;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchurl
|
||||
, rpmextract
|
||||
, libnotify
|
||||
|
@ -62,7 +63,7 @@ stdenv.mkDerivation rec {
|
|||
expat
|
||||
gdk-pixbuf
|
||||
dbus
|
||||
udev.lib
|
||||
(lib.getLib udev)
|
||||
freetype
|
||||
nspr
|
||||
glib
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, makeWrapper
|
||||
, wrapGAppsHook
|
||||
, autoPatchelfHook
|
||||
|
@ -64,7 +65,7 @@ stdenv.mkDerivation {
|
|||
expat
|
||||
stdenv.cc.cc
|
||||
];
|
||||
runtimeDependencies = [ udev.lib libnotify ];
|
||||
runtimeDependencies = [ (lib.getLib udev) libnotify ];
|
||||
|
||||
unpackPhase = "dpkg-deb -x $src .";
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, xdg_utils, dpkg, makeWrapper, autoPatchelfHook
|
||||
{ stdenv, lib, fetchurl, xdg_utils, dpkg, makeWrapper, autoPatchelfHook
|
||||
, libXtst, libXScrnSaver, gtk3, nss, alsaLib, udev, libnotify, wrapGAppsHook
|
||||
}:
|
||||
|
||||
|
@ -20,7 +20,7 @@ in stdenv.mkDerivation rec {
|
|||
|
||||
nativeBuildInputs = [ dpkg makeWrapper autoPatchelfHook wrapGAppsHook ];
|
||||
buildInputs = [ libXtst libXScrnSaver gtk3 nss alsaLib ];
|
||||
runtimeDependencies = [ udev.lib libnotify ];
|
||||
runtimeDependencies = [ (lib.getLib udev) libnotify ];
|
||||
|
||||
unpackPhase = "dpkg-deb -x $src .";
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ in stdenv.mkDerivation rec {
|
|||
];
|
||||
|
||||
runtimeDependencies = [
|
||||
systemd.lib
|
||||
(lib.getLib systemd)
|
||||
libnotify
|
||||
libdbusmenu
|
||||
];
|
||||
|
|
|
@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
|
|||
];
|
||||
|
||||
runtimeDependencies = [
|
||||
systemd.lib
|
||||
(lib.getLib systemd)
|
||||
pulseaudio
|
||||
];
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, rpmextract, autoPatchelfHook
|
||||
{ stdenv, lib, fetchurl, rpmextract, autoPatchelfHook
|
||||
, xorg, gtk3, gnome2, nss, alsaLib, udev, libnotify
|
||||
, wrapGAppsHook }:
|
||||
|
||||
|
@ -24,7 +24,7 @@ in stdenv.mkDerivation {
|
|||
]) ++ [
|
||||
gtk3 nss alsaLib
|
||||
];
|
||||
runtimeDependencies = [ udev.lib libnotify ];
|
||||
runtimeDependencies = [ (lib.getLib udev) libnotify ];
|
||||
|
||||
unpackPhase = ''
|
||||
rpmextract $src
|
||||
|
|
|
@ -40,7 +40,7 @@ in stdenv.mkDerivation {
|
|||
alsaLib gtk3 nss
|
||||
];
|
||||
|
||||
runtimeDependencies = [ udev.lib libnotify ];
|
||||
runtimeDependencies = [ (getLib udev) libnotify ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/opt/wavebox
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
, makeDesktopItem
|
||||
, makeWrapper
|
||||
, stdenv
|
||||
, lib
|
||||
, udev
|
||||
, wrapGAppsHook
|
||||
, cpio
|
||||
|
@ -107,7 +108,7 @@ let
|
|||
'';
|
||||
|
||||
runtimeDependencies = [
|
||||
udev.lib
|
||||
(lib.getLib udev)
|
||||
];
|
||||
|
||||
postFixup = ''
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchurl
|
||||
, autoPatchelfHook
|
||||
, alsaLib
|
||||
|
@ -45,7 +46,7 @@ stdenv.mkDerivation rec {
|
|||
runtimeDependencies = [
|
||||
coreutils
|
||||
openssl
|
||||
udev.lib
|
||||
(lib.getLib udev)
|
||||
];
|
||||
|
||||
unpackPhase = ''
|
||||
|
|
|
@ -1,615 +1,615 @@
|
|||
{
|
||||
version = "68.11.0";
|
||||
version = "68.12.0";
|
||||
sources = [
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ar/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ar/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ar";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "878336931005573f76fb15c25fcf2593bfabde16356ec6b1f9b8913663b5fcaa";
|
||||
sha256 = "70cfb9e6a7a1f285f37a8f13c9a010237e6aabf815b77a12f54ee0deedd36400";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ast/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ast/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ast";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5e3f29fb47ccb059d983946d6efec14b8ab00695fdd84a5cc7baa0cc40657cc5";
|
||||
sha256 = "5645657f20d37ffdb11f383f164f03c66ed2024244849b09bfa60075d5d07490";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/be/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/be/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "be";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5cd4c3a3d6ac865b727b58cbb51def60779c0d731a9f6b8f01d4b8cdc90d42b5";
|
||||
sha256 = "d38cdcc2ba4534c23a1bb42b93f271623c497f48e1d255a23bf12a368ff339bd";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/bg/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/bg/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "bg";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "f359cf1bd12f14bd6636fdb0bd885ed829235559c20c86bd361668f057039f34";
|
||||
sha256 = "c8883242683dec57f9db502d96d2036ec46753f474a33c0f1ae31f97f2c3113c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/br/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/br/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "br";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "6cfc9608b392b1e604eaefda5a5dcdc346bd88a1bc411532e8864a04631cf6f8";
|
||||
sha256 = "cfb669e2378f97689a14f23e2c55ef4987e2508695eb195be3af75ed1d648345";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ca/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ca/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ca";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "9068b49e2d8a6f5e82b70ddda1b0a048d094328c96cf21848eefa431d358e6ca";
|
||||
sha256 = "9ae4b43e0d5d9edd83291f0be7d53d07e5c84f1d0ad4348654136543b7b53a54";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/cak/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cak/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cak";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b3aef7c88302e2b9d0fcff8daa0d8ad4e2893d41e54ec29b746e79d5b03128b2";
|
||||
sha256 = "d6d635a15b913679ed943c3501dd03140d099ff36b48c8731a47eacda1b5232b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/cs/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cs/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cs";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a2338c8ac38a4cef41d8fab1e7857c290afa30af0b131a31e675368944d69ba9";
|
||||
sha256 = "616fbf24e36d63ce3cbc957d69b8972d517524c613a22bedcf5b57534f9a9a41";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/cy/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cy/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cy";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b02118f945ee76653df0364da6b2b8c597fff2bf52f4e20b64f2b8ac69aaf60a";
|
||||
sha256 = "548c51228d2f3003bb94e1bee91cea0d2edb95bd0f86ee4259c8daef90a2dca8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/da/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/da/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "da";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a565beeaf67c01edf83a2478732fa9e245645d6e6b4fb566affe552762b8bc86";
|
||||
sha256 = "ad0e4b7a693d881b8875a5b8cc3e607a3883df759278129f0933522b9a6acd24";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/de/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/de/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "de";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "00a8f51254b2152ba37d964bfaca77cc06b9d778ef750eb6500e01510e298fb4";
|
||||
sha256 = "bf9b70b345ffe5df03365d819c5abc3339ed3af4d8a716cdfe7099134864a9b4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/dsb/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/dsb/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "dsb";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "7cfcafbf7f46a4be23003a59390b0404d04ee344c883c29a18f42accb5fddc4c";
|
||||
sha256 = "a2cd7ffb0e8b4c3d1715c18e636d0dcd5efa245200d6d0f14048fc4b399b8121";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/el/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/el/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "el";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b0d0865f8b64de26af8eeff6eb84f159f585e3f9f7590dab413e04167215dcf3";
|
||||
sha256 = "07836ce122936848e26cd5a1522967760bee67654582076c53e4ec183cc4c40e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/en-GB/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/en-GB/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "en-GB";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "eb6731a9baaa1cd99584aec7c6dcce8f819d41106ac6ed4f42f02f747cb2afe4";
|
||||
sha256 = "c89fa35af79eca3cc26b492c602a3f8af0dbaf6ce4ee3af93d93f10daf4e9d6e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/en-US/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/en-US/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "en-US";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "6ddd72732957282280a7209f2d5137229ca8af4ad7f02e112187fe333cc79a7f";
|
||||
sha256 = "6eeea0de838909f91da7270e42ae1513d2b801f412fc758f2f8c682d260a7c24";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/es-AR/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/es-AR/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "es-AR";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "0d620d929ed41ffd16cfd8297ec70e8cb9105e726af99d2cd207de50920a1f93";
|
||||
sha256 = "e9d84032a91f7feb2db3d22a500c564f273c2b637f97aaab2edf3209b93dda1d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/es-ES/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/es-ES/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "es-ES";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "28bac94492c7444caab029f3cc3995275000496aab854f20368f941514cd7b11";
|
||||
sha256 = "a986e8a48b59354421193f2dd01e3c291fb6c98031af43531e723dc217a43d4a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/et/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/et/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "et";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "49fe0adb4fc5c5135083ba53369030faa95d3a530e8eb49180f81e359229bf81";
|
||||
sha256 = "2f7508e83aba4fd64a817c7eb4b44d4ea9371956339a009ba541bf3a349693cf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/eu/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/eu/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "eu";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a422935f96d5a3033c6c2a7bd39f19e3f84211d99b57d3996b31e404414703e4";
|
||||
sha256 = "edbc5ff4ba45106233cdbf5255405c4ee52ba7e6811736958323a616881b943f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/fi/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fi/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fi";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "649c3908ecccc8466e555aa76aac47bf7153da8b6f45ddf83f36f6ac676cb4c3";
|
||||
sha256 = "f4ad740a724efdbfec54445304ca75e9a16e0881bc18789b8ea35632d8857d4b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/fr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "8270cf0e0acfb7280b8616462cd87a1d8d929c7c5fd4839f9607cb588a97c025";
|
||||
sha256 = "ebf60a227c9fe5237eff22fb81f3c8bc02a593de823d6f0ad9b67f07af129dea";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/fy-NL/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fy-NL/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fy-NL";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "177a9f337719b2902ae964525803cd437b2cbcc8c7b85c7881e14f7e0d207875";
|
||||
sha256 = "b12983077a62c5bf7353f50dd951348a457ce07f5beb2a579f199c4d77ed0906";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ga-IE/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ga-IE/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ga-IE";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "80d3625a04d027382ec3fdfdabd45d501fa4b451c82ec5cfdf5c3352a395a6ba";
|
||||
sha256 = "aa7c3a4b54fd6fef0f120a6748c45a3f379268f31e087cb3df07d270bf060bad";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/gd/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/gd/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "gd";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "0b2fc2582ef518529f204b5096601047b5b3406201b1fc9f7ea88736d1ce1e0a";
|
||||
sha256 = "39fadb2bd4c01da0eb188cb9f52ccd726ec9f7eb5ced44e2a30ee0cfac2527bf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/gl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/gl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "gl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "d1cfc4e646fa6ce03765a56ea4cc2ad3936ec8224f1a7f5e74a34c189be11721";
|
||||
sha256 = "b4ee1f89b0326b22fc7a5b980b857c2652d6881d096060a8bc083015b47762d8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/he/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/he/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "he";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "588f22ff9dd4dea7c808c4786f2c897842dedbf2a04c0b4d28b3aa162f88773c";
|
||||
sha256 = "cefbc742672942e310dc9f4dbcefc8b66cf01d58ac64448ac8c0dc33fdace5ae";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/hr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "126ae387a1c97d253c4ca60441a192d6a00f63f0483b2888371624337e4fd2a9";
|
||||
sha256 = "9e132811cb6bd98faee86e298b78e845727bfded84c0cdab41608ed1565f1aee";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/hsb/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hsb/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hsb";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "456c323f61f77c07ae73a260a3ad2641190f165d14c75da1dba33ed1f8d2a3d5";
|
||||
sha256 = "2a41d1e188fd5fed93a37a1bedc67cb745367447504a76836f79928194730d3b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/hu/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hu/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hu";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4790f014d95fe3ae00433e27fa291f7e4657b8062538ca52c46dd46ea41a05cb";
|
||||
sha256 = "9196df7850b9cff69f52b5db69ec3b64cfa312bba5669380c137b95a8140cf39";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/hy-AM/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hy-AM/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hy-AM";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "7d81493a67e27eb485c1cb702cb8305788733e133bcb22659026737cc2afe1e9";
|
||||
sha256 = "4a08137a9a714677ecf86a24f165047b809e22eff50d196b92c153e59f943c30";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/id/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/id/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "id";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "9f558c85ba88c6350da0445ca2d2b63205c8c1e6700388e1d4f7de0978321667";
|
||||
sha256 = "39784aab0bc3253af47cdcd95824eccdecae4dac819bacf6a04daa7b5c86d6e3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/is/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/is/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "is";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "1f1f65bb573fb4fb563e890c043ff8c3283687575892853dd3e076473072b63f";
|
||||
sha256 = "a041d1af23e9c64967e4d014b6a84ddc80ad24e852146e448f6b380cdd672e67";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/it/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/it/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "it";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "de6c3adf83745370241c8935edccc412a60642ec758bd891d03c098b40b8792f";
|
||||
sha256 = "b0e3161c801fbaee2f589b1bc61a4fba9968f5f363a62cf0f8af855d23e4782c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ja/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ja/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ja";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "8b2ce4598af7323f59a31269c24bd05e369d9898266dc6e8cfa360dae7609273";
|
||||
sha256 = "ad416d47930d81be9ac2f20b3699f4c74471c36e08b14f9d5c6ee1af97c7c9d4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ka/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ka/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ka";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "be74a3edf9a1d931124c4351b51147be2e7a74f453d07482bce4f7721de701ce";
|
||||
sha256 = "3b30bc5f0971310d71e1909b4ed891481457ac8baf11c1e505c3400b2a7cfb63";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/kab/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/kab/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "kab";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "1be81ab7bb429b44e0c63c81ebf249b66a79d43a3dba39ba0af6242db165d6d3";
|
||||
sha256 = "abdc58d5d5ef251e63c0c40a48460f90e299a4420cbe4e290d519fbed4c335b8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/kk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/kk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "kk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "ee308381b1e0643b7e0683c365c763beb4afcaf21c9b0a1e8c8c2ec3c218c965";
|
||||
sha256 = "08018b951de59b1a92717fc82bd98a0c324a019ee0ae14888f09c5351a586284";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ko/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ko/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ko";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "af2d7ee49a6295e41dbfcc7b8e19b8f146890f12baa36ffddbc7dfbfa39a8eb3";
|
||||
sha256 = "1178adc42b3a2ddac46dd50ad8436d1be50db409963e8fac3beb22a431f885fe";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/lt/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/lt/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "lt";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "8d384844274d048772fbc35da75f91ab6398ca64e26f089c4da116065584acf1";
|
||||
sha256 = "18d88a8cbb24d2a78af0de282187a743e707136fdb61912e5f64bf75730e3a76";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ms/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ms/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ms";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "6e447b3ed1903a20001963021598d957270c88980ff04d3da6c819ab106a2210";
|
||||
sha256 = "e1754cfbf20e286fd6304b8d75337e3794893c5ebd9b242cf624090e6fc6e9ee";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/nb-NO/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nb-NO/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nb-NO";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "710a982216120cbec822d7a9f74d8ae789b4a234fb3a192797604c9a47a23a62";
|
||||
sha256 = "6379f6dca3d8bacb466044f0a7d11b32eb61166d3f14c37431f77843eb884c90";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/nl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "2b02b7e3b5e310e5b7935cb72e59d6a385567100d22e87d196c4b4700851d439";
|
||||
sha256 = "66a56e218365bb260980848427609d390674e2ba3c70b9adc4121f73c861d9b8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/nn-NO/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nn-NO/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nn-NO";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "128807f651cc0b09618bad42703970c391c17f5ff883c3ab11d115d0878fe1aa";
|
||||
sha256 = "ccdb135d43f5542151fe2c99a8e13cebfbc032367abb0308213433b753dc8125";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/pl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "181721ac04e9911f57ec7b4f36a5db82e261da71a310dc502efab75a101bec03";
|
||||
sha256 = "5dc2151d1bb956c4b6fbd1b6185d9328f7091e60fdcd51bad5a9ebaa8fcbb7d7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/pt-BR/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pt-BR/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pt-BR";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "e82f40343e28ecd0abafb71f421c6d7df40b7cfca4898503b32fb0500686d7c4";
|
||||
sha256 = "5ebf77d47bf45b058aaeca857060c908dbf7036bae2c2c5812ff145aed840203";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/pt-PT/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pt-PT/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pt-PT";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "96bea893919ff89441dd47e027a7d83aa691cc99abf4eaa342c941777ecf319a";
|
||||
sha256 = "73baa68f79b4a15795fc426dfc9a8d573a05e4ab8a663d122cfd802f93941825";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/rm/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/rm/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "rm";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "544f666af94043737503a30551ad5832f22ae529bc32495bef9d7443c8869072";
|
||||
sha256 = "29f8ba57d9000803bae795c2ff977347af9a1f0df123337eaab3bdcc20786734";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ro/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ro/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ro";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4c6e7793c206999e0a9510b390e4b47d82e19dc2da1cae8b4341b8afee440191";
|
||||
sha256 = "b8233ad81c6620c26a02457b9235ce0be0c5d93b81f88d9ddc84bc12f869dbad";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/ru/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ru/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ru";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "66e951339323a3a44326cada8c572d7040d33057a3a487d8078eb27efa791eb8";
|
||||
sha256 = "f959f786dbbb7d06cb33eca24efd9e2763c5ca73fc4ba47e9b933b6298d7f026";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/si/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/si/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "si";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "3ef89e462359d09d95216a132c462f0529948073a4f0aef6358362d0457e747e";
|
||||
sha256 = "dcf59c0c1ea0acdcc894463b04c54339a72dcceb25fe5478608265eb3ead226a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/sk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "476641e4d45cd114dca94f59ddee15fda5fbd432c50e4f29af09eb3298782854";
|
||||
sha256 = "2a06329fd4a9dd6333e2d73a44fca7eaf593032e8ace33736a03dbfffb2920a0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/sl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5e85ff37554f47f585a155db65ae9e782c8604fa44db8d0dc9c3e2741704909d";
|
||||
sha256 = "f7bd3e3a407dbab07836342ff29fc143fe3904e7f878ea719522ade3fc4f6b84";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/sq/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sq/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sq";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "fc4f839973d6986979089c1dcc1e9b219007c34ecd2d587538db706e4b01eccd";
|
||||
sha256 = "0edc58751a6794494efab8b0a2ce852374a747ccb73b38455475f0099ea0f238";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/sr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "85a32f352d2b535366dd10a49116e65de4c8ec87886b37e34ac55082c4c310fd";
|
||||
sha256 = "91ac5cc0646c062b00b3b064af53ba03c7e034b75afa13dca7586eb80578d377";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/sv-SE/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sv-SE/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sv-SE";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "19af3a847c9e28baed2db8f6b025dcfb0e688932b0483bae461c86861bfa67ea";
|
||||
sha256 = "5aa21e4b78f4294835197f784a651f17453d83fce98e7140e49c6da117464fd9";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/tr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/tr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "tr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "deea2513814df3e7a9004316dc50f6fa2bac46e0d9456cf124e33e6e03a9b4c8";
|
||||
sha256 = "3ab2639dd126e3ed9b031fc10f4396c7d98ffa7b7ffca6a9b3f2f47590e3b83c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/uk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/uk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "uk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "22b34b43ccc74eb2dc565a0c63bde89ff0d22f710bd26868341be91f51489f94";
|
||||
sha256 = "59be2ddc7c65405e0b3854c2a551dab73df9736842ee362b2a20dc9088242a96";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/uz/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/uz/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "uz";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "26bb8336c617dc6fe485339b3c8da814f7aa0b46eb0a821db36309305ea87e58";
|
||||
sha256 = "ae196683b283525511fbd2e3ad428339672f2f1339566a323e01f6f649d333c1";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/vi/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/vi/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "vi";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "88705691ae084991c198865f1e93d1ed127496245313cb8f28dafac0a64793a5";
|
||||
sha256 = "9d66b8e4eefbb6b8c0d9893b056fc684310ae583921d626cb676cd8a7b4b39de";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/zh-CN/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/zh-CN/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "zh-CN";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5ebf1ad54acb6d6d17985d80bff9a0b39726d1f62eea30ad9ca0f04577f640a1";
|
||||
sha256 = "2839f2f076a8a6e283a3ffdd6100986a11d19b9108fce074f8e7f127cb0f375e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-x86_64/zh-TW/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/zh-TW/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "zh-TW";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b795b0127cf922f65a2ad2d8f17ebe64089c6d06fe7a701c289b7af5afe7c371";
|
||||
sha256 = "02ef645a7de8abc1c5dd92eb685d64570cf1db971cfe7e248111d6a17b3ddcd9";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ar/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ar/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ar";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d19d082b55d76862977b9357e9cf245697c24d207a6d6b3aacd81abf1443747b";
|
||||
sha256 = "5c4d899245a38626fa18d849bcf01d50125dee60d715d76224ca0bb4623f73be";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ast/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ast/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ast";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6cd6c484888fe96fb08eab2b6b2a4dc8495823efee6a373536c26e9679fc664e";
|
||||
sha256 = "f657bdc5b43b75e43578251abccf5c7b9e6d0848fd55c6105060daba33c36721";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/be/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/be/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "be";
|
||||
arch = "linux-i686";
|
||||
sha256 = "bdd2ac4571d6444ff9a3ffd72c1b55cf5f564c740b5ceafce7a2e2268f482dda";
|
||||
sha256 = "669a2cbfe600727b9d9a8ed5046272a1f19b80b6af9a6a6977ce1b89f60fa36e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/bg/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/bg/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "bg";
|
||||
arch = "linux-i686";
|
||||
sha256 = "3354c7e4b505e99a53a10cdbeac5b6425b13182def27a82c839eaee6ba6e2f86";
|
||||
sha256 = "e1b33857544c10c0191316f6e3d16b34957196b35a922c884315714fe851389b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/br/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/br/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "br";
|
||||
arch = "linux-i686";
|
||||
sha256 = "27339c12c5cdabea7a9a057cad70fa02cf4f69860e71b604f81a60f891345268";
|
||||
sha256 = "b9e4a530529449446fe5a302277878c4d2192ef7bb48206f8528024087f520ea";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ca/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ca/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ca";
|
||||
arch = "linux-i686";
|
||||
sha256 = "b65b6d20d7251795e0a9f0ce88f8133d7742c6361375e4897a0bb2e043dd8c97";
|
||||
sha256 = "aa5e4ae20fa9e5dbb8c0ba275ba18d1ba94900094ba3186aac40ffb27396a96f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/cak/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cak/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cak";
|
||||
arch = "linux-i686";
|
||||
sha256 = "173a85565dfb7b9d44b5757245f8b5f8a62fd15a8a15bfee0680a96ef8f84625";
|
||||
sha256 = "a812c9150feec48e2ebfb1786f5e30ade33203160fa4102382435641caeaf3b8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/cs/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cs/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cs";
|
||||
arch = "linux-i686";
|
||||
sha256 = "9cb5def4eca0bb103516a66f90baf91f7b4e962d5ed59b4f09ae9f19e7f95b47";
|
||||
sha256 = "75813ad7dd0ae5c073964296dd687e5c1289178491adc98d40e853ed812bdca9";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/cy/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cy/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "cy";
|
||||
arch = "linux-i686";
|
||||
sha256 = "8b51e01daf38091d3b1b32a249f3c6fb220ad8075bbfd16914cb72b24435d8bb";
|
||||
sha256 = "b3894f05cf905aa96612860dcef0bdb4bb9564901ef84172e11856a9fa9e0ca4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/da/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/da/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "da";
|
||||
arch = "linux-i686";
|
||||
sha256 = "1269600ab71c691563482c6d5787a7670fdceeda3a07c61d7cf2477aa16fe075";
|
||||
sha256 = "a4f21bd2017043872a962167f98db358b824ae1821fcf03e2df1bef7783e07c0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/de/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/de/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "de";
|
||||
arch = "linux-i686";
|
||||
sha256 = "46c5fcae1b11b7e31fff2e70397a560c502bb3360ed646dd09945fcee81efad7";
|
||||
sha256 = "3a079685f75d2ec0320ec9e366b4e037954d67fa3f9e3bda055b8cd7de8fbdd0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/dsb/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/dsb/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "dsb";
|
||||
arch = "linux-i686";
|
||||
sha256 = "4dc661243d99edb84d0bafd45300bf18d86d5289ede3db066ff89cc4094afed1";
|
||||
sha256 = "295a0f56429b3638dd0dcbf8d97a6376636b67e22d493ce8dfaceeb579466d18";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/el/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/el/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "el";
|
||||
arch = "linux-i686";
|
||||
sha256 = "efd5f7f46d53bf34146a6f39149abb2aed9c47b735339cf767e32e6387ba50bb";
|
||||
sha256 = "86e4b98ede80cc07cc1aec043af82068a73b7c76820f70df8314e3b91c108d18";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/en-GB/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/en-GB/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "en-GB";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ce97a84ba103a7e5bedba43ee47a5c603c1b5d9bf3bc1a8cab4c26ec9ace21c7";
|
||||
sha256 = "2cb03a17f88e3826181911ec6a7455528d1e4c051b065252c964c6c0794175e4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/en-US/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/en-US/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "en-US";
|
||||
arch = "linux-i686";
|
||||
sha256 = "632f078407322995eef93db134f1da753a1b35696a668a5b8be29f908a34c223";
|
||||
sha256 = "11fe953ede0d99656534ac676f118e939024744c5301d378acbeac6792e668e5";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/es-AR/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/es-AR/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "es-AR";
|
||||
arch = "linux-i686";
|
||||
sha256 = "88b67f07b6069adcb82c04f818493e25bd145b5d874a7503453e88ea14200499";
|
||||
sha256 = "596264396a25adb873320222697e7f1a58aaab484de9c0d2e85f99962b6d893d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/es-ES/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/es-ES/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "es-ES";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a52a6917d77364e5f7ed06f4484abf7e607c53445ff338e65af6b9bad4626e0d";
|
||||
sha256 = "a9512af30e2b1613a6bd1ae6f4ce785f676b2cf70b80a37d85a5e1566bb2b35f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/et/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/et/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "et";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a0c15f0000a00984760419e6f737840b4637bf5aa014ee88093aa2a7a3258807";
|
||||
sha256 = "b7dcb196881a23e979edb5ae247a7c07b1cf1250cb4c159ce523d1a26be188c2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/eu/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/eu/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "eu";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d69e9af1a381743acc9ee1f800999b015129cba4fc112f312a04884c121535b0";
|
||||
sha256 = "4066164b4c9242a9885bc2de802c4f5b6b594c928db36ac72c94faabaad86679";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/fi/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fi/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fi";
|
||||
arch = "linux-i686";
|
||||
sha256 = "876673de48a047d75e0ac766dca338629069af1872308a7bc6a7e068da026d3a";
|
||||
sha256 = "a7c635cbbbc10725b28052ccc61603fb60b91e06bbf1f240561bdb8f941af55a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/fr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d83d87dca716d4cd3850df1c5923e88f15e35354abc874202c8c12bf8d1a006f";
|
||||
sha256 = "7dba28adb1287e1aa9ae85840fc3aca42aaedd4b2c2aa6cc68d5f793549d19b7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/fy-NL/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fy-NL/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "fy-NL";
|
||||
arch = "linux-i686";
|
||||
sha256 = "0cce3392aaace190f9ea0247d89699f73d534762278f4776146a1f75bbc09996";
|
||||
sha256 = "bd763e264eb684ec3b0b1f2c68ce295d1df86994d15f5c66c487e4742bfef86e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ga-IE/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ga-IE/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ga-IE";
|
||||
arch = "linux-i686";
|
||||
sha256 = "83b7e660e8098718bd4b205ad2de53522bd94e7a602afb960b6381fe4c11a395";
|
||||
sha256 = "52f9b5694efbdd8ecc76aef58695423c6a4b547b5b0cfedca313386b7500685e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/gd/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/gd/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "gd";
|
||||
arch = "linux-i686";
|
||||
sha256 = "447a887ef76e57b9c12a0991d7eaf903ce29d7621d4f9143edd18b56bdab81d3";
|
||||
sha256 = "6c9c1b0f11ad13e0780371d54fedb52d2463713db3bc52adb72c8ea9ff80eb8f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/gl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/gl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "gl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "288b865596e2b8b1087cbca98bd9c55f9aff1f1cb8d432953d20854b0b1e9ab8";
|
||||
sha256 = "608bf5c0d6148cc3014758829ba06135222b462242456ca0984e7dc12654c2cd";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/he/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/he/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "he";
|
||||
arch = "linux-i686";
|
||||
sha256 = "9d801a18324849e4a6faf3266c09eb5898c8122e89b020e35ea25a6b3899a4d2";
|
||||
sha256 = "f92d569a53f34bfdda4dac185834e5692526f13f20853d1943f165af33b54a37";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/hr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "f20210372b36b43cdae8f7f1294927dfb364d1ca4db21ee8af1c059a06f3e45e";
|
||||
sha256 = "60d2f184219f8d17c2739ee3cc8463bed474142bd2caad74157b97db2306b27f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/hsb/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hsb/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hsb";
|
||||
arch = "linux-i686";
|
||||
sha256 = "54daf67c97f2e7496fabe6bef2d1d9a60baccfee35d7331444d48fc6fe675c26";
|
||||
sha256 = "40ffece26101b2f6a7789511b026d99234bd34ec78e566e7e25065ae3201d693";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/hu/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hu/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hu";
|
||||
arch = "linux-i686";
|
||||
sha256 = "0791aa7bec49ff1bfe862f9114ed4b0013361f2f1fa0e4745ad49c8c0e0a9f84";
|
||||
sha256 = "e74da0bdb27fe3375dfbd1ab042892de3ded84f33a6f6d46e209fdcaa28183d0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/hy-AM/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hy-AM/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "hy-AM";
|
||||
arch = "linux-i686";
|
||||
sha256 = "e64bacff30d0b2b2a5038aa11d719c9ef3124d64b9923d52a9c5856f6584f9c2";
|
||||
sha256 = "fd93972c11842b56453449e72617deb3177d020c8f25cf4d5fb687f4a3ddb5c0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/id/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/id/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "id";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ba6108ba9b4f31f49e7c925a6051738276c67545f7f8d2b3cb378e8834dbd0ce";
|
||||
sha256 = "546825968ad86e4c5c6effefd0f924cc1d10489fff7968f17401e3f84c4d1ab0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/is/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/is/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "is";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a3eac36b640a61f2fc6bd62350bd8aaf020636035547c2b9d687df2bd2d7174b";
|
||||
sha256 = "1f2e2228c685be2d65d6e0b92eef8ff3e58d7b772f846d0707a9b02e6d0ad306";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/it/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/it/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "it";
|
||||
arch = "linux-i686";
|
||||
sha256 = "bf3cc19a7d1c1415cad867b72c5765dfced27511616a8cbd230516adf8d3f20a";
|
||||
sha256 = "41b27c8195432e1412e3c4645b823b8dd1f673eabf07ddc72f3d792d3f7488da";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ja/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ja/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ja";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d4788294f5e91c033c3c3251cfb614e50843631252a2b1fcc6389d099b1fee1e";
|
||||
sha256 = "68940d44d933bb7228d6f9a03406ca01903c54fdf57eb5a1e1033b12ef507df6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ka/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ka/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ka";
|
||||
arch = "linux-i686";
|
||||
sha256 = "8735be035cf0ab5d4b2102aab8b207c1cc686da8843b45f15c1be91931850968";
|
||||
sha256 = "ce0aff0fd47b00803ea66278b3514dcf65ecb5547878f8081f7ec6c1f411ce10";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/kab/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/kab/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "kab";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a570fd29e5eacdc08ed484bce7336f90ae74744e80d8f2ac0f05395cb3363e51";
|
||||
sha256 = "3936b56eaa1e05a96626f7d10c8fcc3ba9014b1385b21243c049b133b923ddef";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/kk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/kk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "kk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "186b7457a96a64da0564c1b411bb04598de1067362a6238f7327abe780cc6aa3";
|
||||
sha256 = "7fa0aa64d0f0dcc6f71d6a21647cc4fccef935b783deb5d19b88f5b96b4b4ec4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ko/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ko/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ko";
|
||||
arch = "linux-i686";
|
||||
sha256 = "3c9513362c6b7a64bf6e74bbfad6ef586b0085baeb9a8ad8eb2fbc73461e9f67";
|
||||
sha256 = "4bddd0ccb747bb12cdc6d88c2c9544354293000c586454bb5932f4d81afbf400";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/lt/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/lt/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "lt";
|
||||
arch = "linux-i686";
|
||||
sha256 = "e90df1606ec0e875fa02f7bf5a52b14d84f758bdc18ab0f395703c0129a18e57";
|
||||
sha256 = "f1a3514188c1b887afd2c662a1b6abf6fe37b558864be0cc79e87ed147188461";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ms/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ms/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ms";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ea686adcfb5cf4b1642e7dcb21053090ffb57d344b27269d807cebcf8469934c";
|
||||
sha256 = "7ea045d6db78ec7d6ebf164c8e3d28c2540a573238de518e934646573aec71dc";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/nb-NO/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nb-NO/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nb-NO";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6f827fee307917b590b99b5c85b16337865f027059f52bc9ab12da33f80448b9";
|
||||
sha256 = "d2c0e2099ea60b9da95ebd9bd79a5d0a6a1ebc84b8b490511a68c81355f97761";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/nl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "b88843831b982d1317e8bf64df99a8c7a1fa9f67461aa966b2737f12715c9cf3";
|
||||
sha256 = "48741be79422d80140ec862d004fa75a407f67490f67a3e440c01e0defe1f85f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/nn-NO/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nn-NO/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "nn-NO";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ab8383a432f55944d417108b59d891953f2d322ec81d09e971ec63d1883d4b46";
|
||||
sha256 = "b40f0d7112cadab322c8b71cacce5d6df87fb80f40cc55ca22c279016c3ea805";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/pl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "0f8c0feb68b090598a3db9295d4b4e09d9ffdedb69a73914228d7ef76b768414";
|
||||
sha256 = "e64b10526cb460f437427cc4a7ea90959cc693a75fd6a61b43e9d3fd76ded618";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/pt-BR/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pt-BR/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pt-BR";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ca78fad9dce15534754571b14d82ede798b123210599ade352016420faf0db5a";
|
||||
sha256 = "bdb558f9430c06871954ec6c7d54267625184a0cba914a87ad199e8f32b03de2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/pt-PT/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pt-PT/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "pt-PT";
|
||||
arch = "linux-i686";
|
||||
sha256 = "cf79430e02259d9117feeaebb5fe02139c3e3d95013e48fe290550814200cf6e";
|
||||
sha256 = "4631e8247446653e91f239fdb5ad3c8531f3d007dbdc83818178a4cdc525edf4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/rm/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/rm/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "rm";
|
||||
arch = "linux-i686";
|
||||
sha256 = "cc7d9614130f24969356b3496f4d322a9f73cafa5c7b60302ca8f2e2efe1f6ec";
|
||||
sha256 = "13e6aca7139fd89e83e7ae9b71253731f0954b0a83cc3560ecc00500b9bc1df7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ro/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ro/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ro";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a8fcc2c6e0755fe701a56c2fa3bbf2d288d6351179ee74b8aa3da3180f14cdd1";
|
||||
sha256 = "023a567c42dad9bdbd465c8b99f12cf5f667ef4691e16971e09496c4a7db0f12";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/ru/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ru/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "ru";
|
||||
arch = "linux-i686";
|
||||
sha256 = "b9f68985e70f8aa47c36cd4a4fc0fb41918d43f089cc760ace8ec879e2561770";
|
||||
sha256 = "9ec35bbce5f026a4262a5d708b53a767f47ac8e90314513d36a587d1a49dbb6b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/si/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/si/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "si";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a2563b3c9d0ecb567c366aa41cb6a10bde8d09b8c1065cd3934c8c221afee056";
|
||||
sha256 = "c540b94a45deeddf1f7f5a8cca8de7e944ee8ad9f8595a308836c159901ec0b6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/sk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "566906f011283fd27abf55e1e9a1bf7504e4028f7c4a631716ba590c07fe9d91";
|
||||
sha256 = "5296241664023773d2c0c4fa55e74eb6470482389c834d1934c252f79e79ebff";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/sl/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sl/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "8b74b751b3ee706be9aeb06726ffd3a989a57a1dc9794112262fa2aac45498ad";
|
||||
sha256 = "cd0376137d8018875873332fdfae3bc3c0d6b2a2b881dfa970d7d7999e8b312b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/sq/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sq/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sq";
|
||||
arch = "linux-i686";
|
||||
sha256 = "9f7bcc51d4bb3f7c8d6ae49c61b88c17a7a59f6de8d2f62e0ee3fb3a68d30791";
|
||||
sha256 = "6fbf47759ca8c4d7cf30ca3af8a3fd35a01b7738422d29448cfd9eed81eba49b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/sr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "809c22c379c0c9943acb23de8b7023843ad6ecfedb9cf89006d6889ac1214203";
|
||||
sha256 = "636708320247c7c45622fd9179d5689da97472a9308f11810623129cf5a0e8d7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/sv-SE/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sv-SE/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "sv-SE";
|
||||
arch = "linux-i686";
|
||||
sha256 = "9381345ab9229f4b8465c183c936c17ab73680fa6aca27535daff9a2f9a133a3";
|
||||
sha256 = "9550c173b047e3ff774f4c3faf2c1f125b3abc34e6feb5801c108fda94e54e4e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/tr/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/tr/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "tr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "0f08bc1e65a8bccf8765cf26af5c09ebf6b77ff463af2f8f133dd2499c1d935c";
|
||||
sha256 = "ffe82a300c7fa7a0e826d11613f5187c003b009efa29f4755f17af0f88d9e73b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/uk/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/uk/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "uk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "37a1fee3bcf2fca901c542295d01a32545e814217985414419a270ad9576c14c";
|
||||
sha256 = "b018769149c0a4ff323b90b5d51465733629e7c527b39381ba9696cb077ad767";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/uz/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/uz/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "uz";
|
||||
arch = "linux-i686";
|
||||
sha256 = "50668670b10f3171b9033306d43c51ce24f1a48286c4156eff369530ae6d93d1";
|
||||
sha256 = "b0b59ac4d08c9f385f4ed7980065ce99ef24874734390a83af6e8fbd18173d99";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/vi/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/vi/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "vi";
|
||||
arch = "linux-i686";
|
||||
sha256 = "3588d2ed7c67459f5c091a1881821eaba72c9f3307624f7890549fcd1da120f6";
|
||||
sha256 = "901b40a99d84e7c7360fd5be6a14aa04ef6cc04fe1275cac26824b310bbd26e0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/zh-CN/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/zh-CN/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "zh-CN";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d8f2976535ef60e62c94338fd049365234a7b2a8658b32df231d1faa22529c0e";
|
||||
sha256 = "509478710f7c4fb404eec9fed0b6d22f4c5d76fee09ed833dffcefdacc53d55c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.11.0/linux-i686/zh-TW/thunderbird-68.11.0.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/zh-TW/thunderbird-68.12.0.tar.bz2";
|
||||
locale = "zh-TW";
|
||||
arch = "linux-i686";
|
||||
sha256 = "aca4a8410429bde9926f6ce6a183439750f490fd68dda229531b2e16bb7068ef";
|
||||
sha256 = "a12dd777cc3eaf629cc7a6f4b8d4744cf63c3e778e559d9b3ce332414e509515";
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,665 +1,665 @@
|
|||
{
|
||||
version = "78.1.1";
|
||||
version = "78.2.1";
|
||||
sources = [
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/af/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/af/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "af";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "540aa91a70379c4d6975820649abbe3063515bae031229f01ed7e794cf87395d";
|
||||
sha256 = "de73b113e488e76caca47b90abb4fa3f1c4d6ce04885d036f2e6aed81fe34038";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ar/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ar/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ar";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "18d1b4f33895b5c4b17199ca8412f8060f40660c7e45e024d0dda486ad290044";
|
||||
sha256 = "d6eeb95b1bd8e53663bd48570a0c2a03f570f906ca715ddf1d9f2cb8de37f3b7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ast/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ast/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ast";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "dd87c494ef5f142517aeec3d8890bc553664b323f2cadb46bca597101b275c91";
|
||||
sha256 = "f244c41515a2382d15697a47b88781120c649e319d86a1c6350fd20cade25809";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/be/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/be/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "be";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "90e0d5354f41244e2ebaeeeb65959d64fcef52f914a15af7b9808125e6e25639";
|
||||
sha256 = "188c8850324bbc04535d4a1dfe1ef1f2e52de8cc2e1df7432623f6afcf8dbf1f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/bg/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/bg/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "bg";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4e8f53fc2e1c3b8dddec3d62bfa104a458943c1b0794fcca3a1658b812359b97";
|
||||
sha256 = "3e7ab29fc795b577aa3bd2ac3df872c31a7ed22960e987d9bca6f348becb69a3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/br/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/br/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "br";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "068c48e37b4d921cb33e2df27b32a8e9abfc29698c30779b1771f2ab61697f27";
|
||||
sha256 = "c1138c59275149aaa6071cf128e7b480b7f74fa0d8f237552a5c54ce1ae573e0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ca/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ca/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ca";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "1f09e12e53d7bc76551c47995b0fa5ff649db94013a66e4ee445e6901352ead6";
|
||||
sha256 = "4d18b0b11710ab3427bf917ebe17cdf5e98508f517cf5cc4c97822d42a019dd1";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/cak/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/cak/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cak";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "e917249cbc16e1ccaf630a5335577e76d971f422fb7c7d9b7c7f05805de18d78";
|
||||
sha256 = "5231c3b6c9b57ab528905184b740dd23de470f8bc4814a13000c8fc1fe4877cc";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/cs/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/cs/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cs";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "89926439c396b64a701d688b2520eb1364e5f2a348a645651396e7f91a4b774a";
|
||||
sha256 = "04d1614000f1854b5d82e0d1740beb43ed9bef440b43f7bedce32cccec48fd59";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/cy/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/cy/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cy";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "65a124a1840efdc33b0426a0a8ab8426423425326f7905844c74f7503c6e60f4";
|
||||
sha256 = "0ef895fdc1878b77650846d2ea4624a50d06838a3c51a91523019bb4d00a1322";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/da/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/da/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "da";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a572014192e6ba98994f8693b062400b7909bdcede065dd363a3ab182cf40293";
|
||||
sha256 = "e909f7ba1890cebcac435c2cfaab7db1791785e6b5b1e8b205ee3b9962624c8d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/de/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/de/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "de";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a0eeef52d89bee326402354eb1de3f531c9c255d31840ed91e93110c9f170aaa";
|
||||
sha256 = "cce1e0acc3c61a66e5eaa065e81e01edb298b6dbf07a2376bf5a96ad2c1e784d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/dsb/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/dsb/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "dsb";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "35d0295ebd60415457a7defa40c5bdee2dbf40b08dad387aef0557dc511ce489";
|
||||
sha256 = "a5acad173a15e77e21057e7450d997387f88a608dd602df7509fa13743758445";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/el/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/el/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "el";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "135fe2424a1731e24c9602c40e0ae4f8fc551ed058fcd17516ce8f39a7d88bbe";
|
||||
sha256 = "7cb4dd233037415d9de96e0c292bd0a288ea62bc875b79a138aaf9639a8f8896";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/en-CA/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/en-CA/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-CA";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b5741a82e8d59300c1f2046b4a4deaa2804d90ad8e8cda7cda9a39b7d6293b87";
|
||||
sha256 = "158547432a7f38ab87ac5334b891921ef54f199896fe459cf65c81344d900edc";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/en-GB/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/en-GB/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-GB";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "61b0e85a24f56b1b7ad03e9d8206313d50cfc6480627cd377a4a4b1bfdd9f13a";
|
||||
sha256 = "1f434d2aa74143eb8695fe54f031fdc7270b1dfe7365896b08f9a55c9dcc8197";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/en-US/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/en-US/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-US";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "9f0cc0edd2b23bc67824d3e8ed19b8c0a331e69a307b6d48c20e0e29e756e7e7";
|
||||
sha256 = "f5004ba1ac64911aec7dec3ec60a415500adfb0bfd566197f0f4fb139c71ff2a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/es-AR/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/es-AR/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "es-AR";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b0390addfb6133074aab52d1b6b73eccb9fae9031967fc94d57f95be30cce54d";
|
||||
sha256 = "49063e6e19b9c4ee1cd63826fda1c969d9739759a57ffabba5e2f93fc11de06a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/es-ES/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/es-ES/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "es-ES";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4d9f115bba5f9f32247465398e8ccd2f279776fadc3961f79b9fcc923c9cc363";
|
||||
sha256 = "216fe2514dc21190532b19af814b825d8a39c7dfe91a120848491f98c49f8ec4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/et/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/et/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "et";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "6db8f8c69d8452e402724bf3fc6fb42242d2839307f6ad387f813a97286f4773";
|
||||
sha256 = "5a89262ffbdc536abf9d780d5d30ce7d0c626a4cf75bfe957689640f94323a34";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/eu/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/eu/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "eu";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "7c8165bc0a0feffd71431f3dd30ce99092a0816581363c2d317c6f40149234e1";
|
||||
sha256 = "f59c050361c617e4b2ca92f8e7081a135e976bb99ea4b650b80064aedef2c698";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/fa/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/fa/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fa";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "9537892fa5e9ba5b3f79b96fafef1e8e37c4813f0515f965ce05b410bc7c9448";
|
||||
sha256 = "b9764595b4cb08584ccce801c08fa19dbbced21c3f89045800d83d531b0c825a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/fi/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/fi/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fi";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "31ca37c4d0f13d1a30b2d7541fa9fbe80add66c6d787bbec069cb904d1157e18";
|
||||
sha256 = "98169b3018a61ae6c2303300c1942c7d1d14a5318147a08a883b5a7b7042eba6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/fr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/fr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "c7507fd9096e9c47632be197054be68631c9d1812b7242b4de06774dbc9c3b1b";
|
||||
sha256 = "49563e87d9543c52d33b7168c78adaab0483f14ceef22759541e927c13620657";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/fy-NL/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/fy-NL/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fy-NL";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "0a3d9d62861eb11bf409ac20905e787fdb273dd1d74b754f10790ff7deb7160d";
|
||||
sha256 = "1f3444faf91c24f8608ec59a4f705b42c7520079e4ad6756e693e92cdc8b142d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ga-IE/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ga-IE/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ga-IE";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4bd0b50313e9a85a83d5b5a032710478feb2df52936bcdfd2621cf30a4d02efb";
|
||||
sha256 = "28b27f73016f0a4d53a6c47248c26458ca2bdceb46ae231f16086b8cabed5210";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/gd/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/gd/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "gd";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a72ed3ea99e863f4a6150cfeeaa0052adf84f8f5ad52388b8bc30bf15d58a310";
|
||||
sha256 = "b81b247ebecd1727d27b64f96ba08b08cf59921e9b2e8ae732407b27e233c971";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/gl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/gl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "gl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5d9bae1205ac9490821b1b6d5b700a540bccbb21a3d41943d7f3ccb8576e2087";
|
||||
sha256 = "ea019d11fed7d87173b218d86fcee0dea7d4e20200bc73171fa8c1bc8f7288fe";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/he/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/he/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "he";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "7cd6417391db27934b6945edcdd9d14b46a69052af7bccd5a62fed588c77894a";
|
||||
sha256 = "6308a7e4e2cc35e48bbd67a1a7b8ab37112f47ab228c703a6db681ac7af79cb6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/hr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/hr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b641cb7393e1e655adff946c82c43edf580e9fe3852b5c0cffe8f6d12759d190";
|
||||
sha256 = "3fb27f1e001817260981567fdb9949ad2f34818e9c919bd16fa0e939cf993cb4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/hsb/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/hsb/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hsb";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "39a27b797117eaed4e939e1c38ade2da13486f9050b5c4d87219cdd46abb67c4";
|
||||
sha256 = "2240e34fd713b39b410b584a8a6d06525f6abe0db2ee7b76b740a7252ec85e36";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/hu/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/hu/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hu";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "5c9795de2316add4e482f9e074c861ef2e05411ea3792d6256d3c43359dc692f";
|
||||
sha256 = "f303a1f1219c7b23d71471a00174e6084cee3773af72e855faa63a5384b08aee";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/hy-AM/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/hy-AM/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hy-AM";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "be1ba0a8fecf9a577cd63de519f92f48ddaf7c4b68fd629f94bb2ebff3cf16fb";
|
||||
sha256 = "3e74775e459ebdca2661e2e2f55307429dcc4d4a6623bbb8447946a75c94dd20";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/id/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/id/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "id";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "15eb3d6acda87645da2874cc92366fb50e821d7ec7885f87951366ddc66db2a0";
|
||||
sha256 = "0c9baf8cff28193f774e13c3a49cfd0ebcf27d8ef73ade151d2371ea69cbafac";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/is/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/is/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "is";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "06549f464526e931f23c0925b402eb3da6fbd9bd16595387604fe7edc62c4672";
|
||||
sha256 = "5c505948333d9259d87aa5f2b53f33ade1bbbfd29b9d5438c2688d34891e29bf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/it/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/it/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "it";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "d81344b5dc0e131d1796f63de559a18b59dc70403a957eab737354ab05fd31c4";
|
||||
sha256 = "a99896e8ccf8d01099834ee502601cb9de993fd7101e426cb87c240a744f2f88";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ja/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ja/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ja";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "48bd5534bfebd6c6f976ea4230ac7d364544c1467b2912f0db46fd23944d0908";
|
||||
sha256 = "83be10be5e946b785ac61e9a51c7054357c69af0a8e7bca524e27961dea4eef8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ka/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ka/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ka";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "8f581c4d9f6c2e8f79bf7be92bf06a69d0dfed017346e1c380a31f541c5155fa";
|
||||
sha256 = "585a1d805663225b1c154e27b54aa1aa5d8a1b96576c0f8ea36bde7844921474";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/kab/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/kab/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "kab";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "2cbcf1e64dcb914af8dfa0f8dab462d59d37992b3f4e22159e2edd340cb6e73a";
|
||||
sha256 = "85128be7e4c28a526d0a395e38e86e5e85dc6c154be6b16fb2df6675effe3d0d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/kk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/kk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "kk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "1fd067e9751c60dc6c6dcf1e5cfee3650758ae6593cb20fa5e6103cd01e6e6b7";
|
||||
sha256 = "09538c022bbcfcb2a77a7ab11b5569eb56b483817d199cfd0ede68ad556601d0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ko/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ko/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ko";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "efdd154ad42d1b8f257d0cf619afc4bdea44d7014882c82847cb5f21d7037469";
|
||||
sha256 = "3e6f472e69d40d46f388096e1d13bc6735860021fc655e3efd4e5b93b1a83240";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/lt/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/lt/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "lt";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4256ec374ea5a22553469393e7fde51b46cd2ade5a620e9b0fc442e9d524494f";
|
||||
sha256 = "8b85c0874306afd3a39d8cf851d378f5f1bfce74129b16b02230c516001adc92";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ms/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ms/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ms";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "40f6fc9fb01a83288a6952b7a6e625bd00659594f7fa21ee883c16501407b8be";
|
||||
sha256 = "b14e7baa06a2d4f98313a7f363b0d998f902164abad13a992878812cc5a0b6c3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/nb-NO/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/nb-NO/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nb-NO";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b3f363ccbc5946c6e0e87ca4b75e12e4e4372688ae7a034c9cf37fd401794840";
|
||||
sha256 = "c3718581db153ad8b171b3c454e9d156e3d55ff0969217ac36435d13ac0c7c3a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/nl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/nl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "6963f3f09cf8a3370b06c894aa744c4ddbaa7c11df4e41f540a21427ec391135";
|
||||
sha256 = "802417acdc722e34c21936f840cd347ae86cf5ac8ad2ae05bd1e1ae078c4518c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/nn-NO/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/nn-NO/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nn-NO";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "da647b3c85db5ebbfbc530dd8d8fb1005928430775cd5c8a2999709614f4e35c";
|
||||
sha256 = "5034f1fe526cab8de8091d5f20851a678e742ed37fa80e8491f3891ed89c43a8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/pa-IN/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/pa-IN/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pa-IN";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "9df18348eedd3b43a13ac991b875fe12678929faa58712b09ee7364a8dedbd2e";
|
||||
sha256 = "01ae1e84d990433b7cbb12dc637deec37b32998803cb60f5834d386e080505f7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/pl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/pl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "7f60d5a0a819f6b69cd3f8444c12758f7cee17a681859c03cbea29ec27e1221e";
|
||||
sha256 = "84b877dba77c8be4400f4fc76128a85878781c4d8ff7845d265225211092674e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/pt-BR/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/pt-BR/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pt-BR";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "229073650b742b4566350ce82ea65f93f639a2b502bf706de4038c3c13ead354";
|
||||
sha256 = "4daabc0cad02b878d8e17af4402b6b52fdd7783f89192909a43bed09f8aae196";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/pt-PT/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/pt-PT/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pt-PT";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "f8596511964a688747ce51cf0ca6bb6da65ea78b9b3ef70ced4f69fae8edbeb0";
|
||||
sha256 = "6ce92a7a1ea62398d22ee4e4fbdc383daa5d35d38c83cf1852953757563d17ba";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/rm/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/rm/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "rm";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "fb101dae4058f2cf804aacaf60c1354415cb0287432bb367a83e2ef8109375ce";
|
||||
sha256 = "d876eb51534d8a5796b486f22f9602bcb9c4cd9c99042583f95c4464f7ee99f8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ro/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ro/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ro";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "1cb1fc985122dea685fc1998764c60979a7c357d5e1e0646b8c4f45e856b4f00";
|
||||
sha256 = "ab4bfaea0914401188d486554963c9ab3014237e7116afdf274dce6e55725cae";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/ru/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/ru/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ru";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "d89b9a418c78422e2a715e7e1c5d2bf57e90c2293ad63dc5e9f2645fdc910103";
|
||||
sha256 = "e722a13113896bde97dd72d0c7182c26734d7d546d8fe210bbce900854ac925c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/si/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/si/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "si";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "584cd0dca877163073824e9dfbee4d6146e0ef8bd0b23cd2325462a1a72a41a4";
|
||||
sha256 = "595588d25de16c3781c85a9ed5e3c767d4df85f0820d4503770468b1669e9411";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/sk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/sk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "cbb2b5678d11eef244a175d88207e00fc59584afd0b788a82319987368ff19c2";
|
||||
sha256 = "f30929cad216539754842c0d938b4d5b8ec5f4e813b3ff0d5108d9c4a0fc6df2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/sl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/sl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sl";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "e8727e9942c4555d6413a3ebe1d4b2ab2ea39da4f5b3b2ad7baaeb8abf49fd47";
|
||||
sha256 = "65d716b3fb5cad93d17704b62fd035a86ef6838cfff6ad95e571cedbb9e0974d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/sq/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/sq/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sq";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "31141f45121dab9c5ce3f3d6195264df91e61e434ee993c409c3cac164215737";
|
||||
sha256 = "38c652f6aae768ab7a8b0c1e975c676a3724ae22f5f7e3ffc6224ee032a9dc47";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/sr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/sr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "dc9a868b1345da0633d090877ae6cddaa3a1b2bb1fc3113bc9de2aac1c30366c";
|
||||
sha256 = "7f73bcc8efb4452fedb0f9707c5e2b1d0db936fda4c6b9582207043aeddf8747";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/sv-SE/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/sv-SE/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sv-SE";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "fab7e11f8de1fcd2e8719d20e818d8bd2c39f7539328fb79f2cce56d4f312a78";
|
||||
sha256 = "221974d62563b49f6c030b7a1f6307a71e60ce2a0e107b551363621320bba485";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/th/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/th/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "th";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "fa3173940d4e7109385d65b479297110545cc7e2e76e8a657f376553e370563a";
|
||||
sha256 = "a8641ee0dc5bcd40ec84a4d4640e74e44710b5ac10d629ea0dd42ad2370e8d3b";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/tr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/tr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "tr";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a8cf6b95a6b890892d034c0b014a62f710bbafa34f3282a80e17828ad9365513";
|
||||
sha256 = "1d80d967b5ef98f0e642390c55618d454f2d82acec36bfd56db21e872490ff66";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/uk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/uk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "uk";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "a5086a87a87ccb605154aad5bc2986d6fe995391189b3e452640210e2016b08f";
|
||||
sha256 = "fcc24a9885db5511c0b2859e6472d436769da2670573177f7bf332fb363a3ee3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/uz/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/uz/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "uz";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "b5bea650b678808b7fbcca432c1de0121dc19886b2f32e764e4fe1a797d1e8ab";
|
||||
sha256 = "b0f62e8fc5c6da398ad2e1a3488ddb37f0075c90ad54e6028293be7cfcd2f6f0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/vi/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/vi/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "vi";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "8b8b57417b1d6faeb283b1b6037eac92841029bd73769d5cb8bc6c227e87efbf";
|
||||
sha256 = "0e38a1b645894ff81a481250ed434157fa2b70792b423c31dab61288612a82f2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/zh-CN/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/zh-CN/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "zh-CN";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "4a0c8629e2a5e5f95799169dba4ee9c10b728bf503e090ed829cdd11fbeb57d1";
|
||||
sha256 = "04f37793bd17df88573d9d3f8c8412c26cfb3332395689a06f5fca6efb02b2ad";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-x86_64/zh-TW/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-x86_64/zh-TW/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "zh-TW";
|
||||
arch = "linux-x86_64";
|
||||
sha256 = "11a892d8ec3ec6e2dccbad4b97ce2fe7cb0a0b1dc309bef9819432f0be9d510c";
|
||||
sha256 = "6c1e5b71bb2a9e005971050c9643c52090828e1ecb3910d66d2d0dbaa107011c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/af/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/af/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "af";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a254eecebf45c16f55b7d72cc38da2c4d22f49704cdb5db72d2adfc199a7a78c";
|
||||
sha256 = "2601d98ad27a2ed7277f673876c2a7d206fe1cfd8c7c8febdead85884031a416";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ar/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ar/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ar";
|
||||
arch = "linux-i686";
|
||||
sha256 = "3e735d996bb3bf2674f1c04f035489893169ab632208af1427756bc3c15b1600";
|
||||
sha256 = "5d126b1152b42b6bd6c29ac602b59ab88f3491b0b6f2a69aa1e6ae3d9ded04d6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ast/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ast/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ast";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a8fe0f85c250b0f71b0bac30cd51e10e5d1ded4265775afe93f986ccde4fbc49";
|
||||
sha256 = "7b22fbd980df00d6b1a2c0f14d68a3a7daf06dcb6a13033ca2619371b098445c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/be/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/be/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "be";
|
||||
arch = "linux-i686";
|
||||
sha256 = "279a98d38f6c33945ddd1e86c9263e72f9a52555e7f26c56a2f3062696436bbb";
|
||||
sha256 = "bd59d2a9e70944a736e8e5db100b2cbe937fb8021577fdd912087e2cbe38723f";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/bg/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/bg/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "bg";
|
||||
arch = "linux-i686";
|
||||
sha256 = "cb23b56841818af2e3e8dc922cace29c8538d22977ee951dee744bbc490c24a6";
|
||||
sha256 = "ce3906cafce8ce00c4b69f2b1b584f7e4148d2d40ac12916f1108f78d7d3cdae";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/br/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/br/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "br";
|
||||
arch = "linux-i686";
|
||||
sha256 = "f729274b064205cb9baf57be3732268a2c56893ac6b17ae6ddc0aed3269fda15";
|
||||
sha256 = "2f41237e0dd3dff4e0e4b196f8d02b988d7e5db3ac1984ea5577ce5052d43514";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ca/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ca/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ca";
|
||||
arch = "linux-i686";
|
||||
sha256 = "eb434c12d8d841eb8426b95663591f742a9e62b630cadb7afebfa79ab1142a38";
|
||||
sha256 = "0ec94acd77cca38d37dd23fb240c3c9e3840defccb491704d01072c1cab1f543";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/cak/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/cak/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cak";
|
||||
arch = "linux-i686";
|
||||
sha256 = "daa19634d796f849ab9b3a575bc53e451453902f82ce7384a7ae5ae4f99a2165";
|
||||
sha256 = "1c77ebb51a83c57c7d81ef278f9fceae07f98330a8ccf8f863c2f0b613141e23";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/cs/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/cs/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cs";
|
||||
arch = "linux-i686";
|
||||
sha256 = "181cc3c70985d41a806395b353ccd98475c37ae8151fd5f59adbe25bf2059457";
|
||||
sha256 = "adf8c11ff60e697fc5087698088c42c95a15766ccebf24d77141a53dc255c366";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/cy/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/cy/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "cy";
|
||||
arch = "linux-i686";
|
||||
sha256 = "4cb93a1b38582e6fd4e4fc514c36e469b88bedf0bd36bee4d7a66d9c33c3c8ca";
|
||||
sha256 = "9b7c51652714c116c9bb22fab4f0fc6dcbce6ad2133cc860067898841d01b5b7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/da/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/da/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "da";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6eb46018b763d22e62739ec9dd98d5f3804f85b5b65ca3092c42d5d9a1a258ee";
|
||||
sha256 = "e7245ea0909efccaa9b94701061410437f16273c935484dd3638f5f4fa65aad9";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/de/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/de/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "de";
|
||||
arch = "linux-i686";
|
||||
sha256 = "dff12cffa89c1ad5666b92b66361e17c604f0ca34305fb0e3b06be5fa8fb0f96";
|
||||
sha256 = "302394d24f919b0a24dc574001458b265bfc90024bf21b3d98a43b31ae50adf7";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/dsb/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/dsb/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "dsb";
|
||||
arch = "linux-i686";
|
||||
sha256 = "efa2f9449703fc0941620650f1ca1332682b2866339413aa03f2438580d18f78";
|
||||
sha256 = "18ea8d27387581d49dd156957a089f1dbbe05f2772811aeddb1ebe81d26961e6";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/el/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/el/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "el";
|
||||
arch = "linux-i686";
|
||||
sha256 = "675cfc628dd02fe874a701e0e16986c797adac263605b304c1c69bb01552037f";
|
||||
sha256 = "bcec06d4b01268ca90d99a98a45c2ef5927ae4152b6b2d356332f3690de08f62";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/en-CA/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/en-CA/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-CA";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a710c91df20b4b25d9e363b585344e1595ab96b9cc1df35e973e485834942957";
|
||||
sha256 = "475a1393917665c17bc5e787ef29dd886f1480d544f55d1caacb2a89503da685";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/en-GB/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/en-GB/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-GB";
|
||||
arch = "linux-i686";
|
||||
sha256 = "3acd3020cb6116588a0f061aa9ba5d620477e3265eefac3dc22f4705757fe025";
|
||||
sha256 = "dda5664fd8d843f3f29b85b855d54e00d15188c57e80c01d79a8be0a2eaa0be1";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/en-US/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/en-US/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "en-US";
|
||||
arch = "linux-i686";
|
||||
sha256 = "bf9ebc54aff457654b5ea1fc81437281f70d78de96d5a4d3586ae83fb8135d39";
|
||||
sha256 = "b299267b8a113dcd325bc6a928c561fe872535e1e876518e3075b85043aa7b23";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/es-AR/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/es-AR/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "es-AR";
|
||||
arch = "linux-i686";
|
||||
sha256 = "cf1c278a36c9303956ac8dc29a51226a42ea17cf64559c34bef318c79ba6ed74";
|
||||
sha256 = "e3e7cb829b07b7db95cad09c8887b9c91123665cd4601b685e3c7a7b0036992d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/es-ES/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/es-ES/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "es-ES";
|
||||
arch = "linux-i686";
|
||||
sha256 = "4a9356476a18f292f763f1647611189ebe89ee368a3f01a7c75ef8dce48d91af";
|
||||
sha256 = "be8428e1cce22aff5000bdc11f632adfc4c1096060a7456d36230ebd6040d12d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/et/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/et/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "et";
|
||||
arch = "linux-i686";
|
||||
sha256 = "03d3a43153b714f334a8f5d7d23e9080624488ec54400451b508c6aa50bcd594";
|
||||
sha256 = "deb81a63704b12ad2a945f5f0dcec878c3b7ec46f551f2d0122c03c52c031f73";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/eu/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/eu/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "eu";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a7cca16186f0e2627dc6e06164b3cb2bb691cf798f7c41378ae90349521d9199";
|
||||
sha256 = "8a2935dd5f83854b4d98bdab67e7b376a7e1d19a2ff790234516ba8211ed7345";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/fa/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/fa/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fa";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6a19a79d409acdc25c69b5c8d75a18f2de665a7d18244d578e4ef0f65597daea";
|
||||
sha256 = "c39189bc1f740a1e5a372eaf3c6e99090f04ed8b1e86016c54ed25612d16f341";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/fi/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/fi/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fi";
|
||||
arch = "linux-i686";
|
||||
sha256 = "4b82f0fadfb5f388948e33fd3408e9f6ece6737c8e5e4b53c164a124f017e553";
|
||||
sha256 = "4f23c9941975e67e6e40d7a504a24e4058a27786c5989dd3e25cfc4fab4c4c0e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/fr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/fr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "bc4fb423664576d4d94eb24383e3f4f23c199e52f1c985fd3bfccc947212f82a";
|
||||
sha256 = "4de9885664bf4828355d09ceae11fc7cfb603d4514255b4de464c0653ddd45b0";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/fy-NL/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/fy-NL/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "fy-NL";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6eb76c3a4d3b31160dc0d0b807596095354c7c0740f5593f86042af1e1b03d48";
|
||||
sha256 = "82ae68d970a02ad57aa9c3dfb6c1ef7783c25211e9228c0bad515c3fef385f88";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ga-IE/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ga-IE/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ga-IE";
|
||||
arch = "linux-i686";
|
||||
sha256 = "5321fff3eb4d341307233976de74624f6002abb8662f40ecbf77e3bdb5757add";
|
||||
sha256 = "e6035d81bfa5c58ab79e71b9895638f23e47e8ab2990794786c5e9f590bb70e2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/gd/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/gd/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "gd";
|
||||
arch = "linux-i686";
|
||||
sha256 = "515207242fffd0513a550017f8bfb53061f0a0e3d795a111adf0154b55363d38";
|
||||
sha256 = "2c628c5ed8ad0c00c42b384f8b925887e624f6a6dee69c86800a9b5137f04886";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/gl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/gl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "gl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "84c32bd92a783c680343aa5b01dbf58e37eda9ee466b16f817a79a135e37fbe5";
|
||||
sha256 = "49b8e22610f8e602a3870f541209251b61da8cb81df7f0a762d01002fef568e2";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/he/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/he/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "he";
|
||||
arch = "linux-i686";
|
||||
sha256 = "96d07263578fb16068e0f48309552ea9237d3dd5a46fc63e3293326778cb7af1";
|
||||
sha256 = "5bb7193eb498d1edd713e18bbac630ba881b0a9b7fca9b05c9b8e4dd1ea1edbf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/hr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/hr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "9c612aad3a12530052dd609c2f20a3739c458b3c7f3d761e7c00754f9b43db95";
|
||||
sha256 = "c31022ae9a1665cc0b22ab0e911730ccf5cd0dd24614fbd8d3bd51624760baa3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/hsb/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/hsb/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hsb";
|
||||
arch = "linux-i686";
|
||||
sha256 = "376e4d8eadb9bb8f301053d30260ab0cbeb3dc9f590564583f07547585105fe0";
|
||||
sha256 = "3e286b3ccf66300ead4d6b98a88a370fa1bac96244b143005c4974f075ceca92";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/hu/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/hu/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hu";
|
||||
arch = "linux-i686";
|
||||
sha256 = "4e7e51dbbe359ec542e553f5b0691f1d191343261094828b2572dd5a03ec2c8a";
|
||||
sha256 = "6d0c88c46d0f4ffb296638e4e8217041d8fdaec3abaa6bda7b7cf97c4bcabc2a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/hy-AM/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/hy-AM/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "hy-AM";
|
||||
arch = "linux-i686";
|
||||
sha256 = "735624e30d1986d6c822fcbee4694389cf8a0061eba40926265bd4ac998e2186";
|
||||
sha256 = "aac23dfa8c299623bca2e3b0501a636c630fbf3f5b08689911569a568b3ad060";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/id/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/id/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "id";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ce6d668f38d1e74e7c8bbfc7408edc749eed9449908044bdd57b2dcd868cb89f";
|
||||
sha256 = "5bd5597cb6e91613a39c288d694f3af4f5686dcab1573e3b58c04dce3d1de865";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/is/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/is/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "is";
|
||||
arch = "linux-i686";
|
||||
sha256 = "589369ce68b6c78ad7753ddd14412eb68f438dbd7cae449f828288d25ee3f795";
|
||||
sha256 = "bcd926c704177945aa7b917fe12940e058d12e6cf8a3eedbf1ab205fb9c41b80";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/it/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/it/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "it";
|
||||
arch = "linux-i686";
|
||||
sha256 = "fd909d5aaa68a208050a0812f15024ef115b99fbde0edb0afe995c3b766c0d76";
|
||||
sha256 = "04ca02a4fed6e8d904173d9ce52c16e47d7e9b3d16f5483d986f8188ec79d65c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ja/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ja/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ja";
|
||||
arch = "linux-i686";
|
||||
sha256 = "160c2a1c36ef34339270abd59fed13b37414f8c37edd60463e0945e6751a0c74";
|
||||
sha256 = "1dbdc30ec3a06f2e7e7d38d9036fb90a2fdaad42356e9386ecc710d9a51f94b3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ka/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ka/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ka";
|
||||
arch = "linux-i686";
|
||||
sha256 = "e822a28e62aae6d6e84e6788d5311af45396248f48cc60152b4273d75359dd8f";
|
||||
sha256 = "2db1fa86ac87e0b8001b99c0eea30589db515c58e10548565533014481b1be9a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/kab/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/kab/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "kab";
|
||||
arch = "linux-i686";
|
||||
sha256 = "2ea58cc79b80966b5bbc310fa32bd27621f95d4ffbd3646bf9e04f922c36ca6e";
|
||||
sha256 = "8499d0d8a0372617800b039c9198cc372783b8ff4ce385fc692e39b1dca22576";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/kk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/kk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "kk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "a874bc02f065be73a54b70567b7a04be5fc6a9f766f3b054b12555763361ea2a";
|
||||
sha256 = "29b228042a7f06c22300b123cc0fcdf7a86005d0d4c3c282c97635ebc25ce826";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ko/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ko/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ko";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d9678f72569dfde84544fcb9afa7cb8d5a4a35baa52d4e560aa2b082a418ab00";
|
||||
sha256 = "a7af79975107cb32b408c7dd26827793c3c11f998705bc711c60f3dd6b7a1173";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/lt/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/lt/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "lt";
|
||||
arch = "linux-i686";
|
||||
sha256 = "1d7ec489dc52fae0f7597e40f8505bdd6a57a717389c75b66481749e85e2fab6";
|
||||
sha256 = "7a5010761d0af24a6852f32b1ebd6b543b1e1011888ded3f4a4297fc35f455b5";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ms/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ms/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ms";
|
||||
arch = "linux-i686";
|
||||
sha256 = "5d0c7cc00139c39a69dfc9ba1dc5c83b56973f26679860d048952bcf09baa737";
|
||||
sha256 = "8573dc35bd69ff20d05aa06484a2243f5a35ec78c1c31dbccc067f0cb9e6617a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/nb-NO/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/nb-NO/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nb-NO";
|
||||
arch = "linux-i686";
|
||||
sha256 = "e72a25e7d53e6e0d470632c487d31e08afdb6c27543d50c93ff72ecac3f70bc6";
|
||||
sha256 = "722c0a4ce2a0d774f8971707ff553d9f2e62af10267ef491e670b020a2d8a49c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/nl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/nl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "19efd7323e671fe25b64ee44c85f698f608e6c2b18fdbfc9f0cc95b9cd8cd149";
|
||||
sha256 = "63a08123e795ab8e51a2c98f33b0b6424c1f5f2c09a5d1683585f9762813afaf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/nn-NO/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/nn-NO/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "nn-NO";
|
||||
arch = "linux-i686";
|
||||
sha256 = "b4be21281c6a13de05e5d0b96e43454bab662140a00d3837f609e23f14360c90";
|
||||
sha256 = "8968de35faf9fe304631ece4e08a9944342a08dc518ac1eec0ba2d5c1ff268ed";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/pa-IN/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/pa-IN/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pa-IN";
|
||||
arch = "linux-i686";
|
||||
sha256 = "f2795a504616404616f7d22022e105e9e4ea54025d60e262c405b867cb9c7936";
|
||||
sha256 = "57685a05321195019ef4d3c489dbb14ac0f1bd5ce51fda1f7573392de215e4e3";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/pl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/pl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "52f80b074dc168ec00d0fd78f6376c1dfd357c2b7e7ed78bb1b9cf17536508a6";
|
||||
sha256 = "d98967c9d54f9314faae53472b9d1506576761cd3de09747d3b407e1f26931e4";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/pt-BR/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/pt-BR/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pt-BR";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d02867899a54eebffb2b6e600f7e6260b960d686a8bcd61ce705e9d0bbebe377";
|
||||
sha256 = "14fa89b2d8f659a90e19068130ce1a2da83137b7fb9a5a009d2363ccc2415009";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/pt-PT/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/pt-PT/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "pt-PT";
|
||||
arch = "linux-i686";
|
||||
sha256 = "659a7ff3a0dcbb4f3fec32eda6b5a2087191c8d49ea310662ad540433d869180";
|
||||
sha256 = "279f325e75157e0cedffe6a455e731373b077078f70b89bba76e12e2439350d8";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/rm/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/rm/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "rm";
|
||||
arch = "linux-i686";
|
||||
sha256 = "d9ee3c5e3cf2d7eedced9d12bf4d499ae931c262be166af6a14bbd4a2538788a";
|
||||
sha256 = "7432093e7516625957c3dcb90e8668fab1e22c0edba0411e3e2106d49e052fdf";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ro/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ro/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ro";
|
||||
arch = "linux-i686";
|
||||
sha256 = "c3db9965a25d52d25cde0b52bffcc274ae32862fb29be368f27b102774d0971b";
|
||||
sha256 = "f5d5f564cf56c66d1f2f9717df7c7f021532dc1912384c9921ca286030f7d82c";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/ru/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/ru/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "ru";
|
||||
arch = "linux-i686";
|
||||
sha256 = "f0356ef5eadccfcdfc694d0bed9b1e4027e4883095f9c117403a68f1cb2810c8";
|
||||
sha256 = "4c4e31e74c4d10d88044fc49c24b3ae3ffb0b18e4a23295b60ac2d38d723753a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/si/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/si/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "si";
|
||||
arch = "linux-i686";
|
||||
sha256 = "5b5d17a2b098fbe1c2d8686ab0e1adb7c72efedc38365ca9b39b1e122302c85c";
|
||||
sha256 = "689be324633f6a872a09d6498d8772562dceca9bca96f7029830c965ad2e4138";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/sk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/sk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "b39bd41a38947ea467e1a89c5a173fd07cbce09562c10e6a60adb2150b04c9cf";
|
||||
sha256 = "194ff5a23a3a40ba98fb1968965c79f99246c6d93b81254d11df5d22530f1d86";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/sl/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/sl/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sl";
|
||||
arch = "linux-i686";
|
||||
sha256 = "602e0feffc5b786930005c376ca3e8819b834a0cfc9a649bc46d86c27999144d";
|
||||
sha256 = "9746db435fe3dbf5ab51603780d52862a6afda0e40c1ebc915b309ac93e75e25";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/sq/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/sq/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sq";
|
||||
arch = "linux-i686";
|
||||
sha256 = "fb265490d00c3a844f73e8f531b7c73f3787cb4e4ddc7cdcde72017fd7f3d612";
|
||||
sha256 = "86f675921cdf0de41855d5e2c3d2d56c163d915ac8a0f8cc9678d1a55f87e069";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/sr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/sr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "1574eaee6effc4df2c88fc94597e295f352455a9f68501080385c08cb4ab7e35";
|
||||
sha256 = "587e4c867dd43621c8e5e04461c4a2dcf2b0f256476b5b72d8fc6722e573e347";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/sv-SE/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/sv-SE/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "sv-SE";
|
||||
arch = "linux-i686";
|
||||
sha256 = "8d55df4937fe28f7b9d0fcaebcde3fb9650de9f0b74f677111f339ae2365b822";
|
||||
sha256 = "a46294d3dafc8bfaaa7f5376c2db2402f31f24664e73045c653ea8660079b879";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/th/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/th/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "th";
|
||||
arch = "linux-i686";
|
||||
sha256 = "6a872a6c332c7b3bfc24721bf1114c85475a73ae5c7b16d8637b0eb0045e112d";
|
||||
sha256 = "6105278c11c3e586240d50c9612730e75caecd08765b5b5cfe010f37d71c971d";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/tr/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/tr/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "tr";
|
||||
arch = "linux-i686";
|
||||
sha256 = "26d2b8493a1508591b45f9ecc43598e244856c0d9bc3c185721a7239679c4e63";
|
||||
sha256 = "4bdd2c91e8f361d1b2ade88cec06accb244adf3d7f1d714feea3e4004ed31968";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/uk/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/uk/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "uk";
|
||||
arch = "linux-i686";
|
||||
sha256 = "ddb4b5fab55ded8f7bc2ae914f41af42b3b69c738727b055efd5e05b253ac872";
|
||||
sha256 = "40e2012a5b5dc05cb887a6c4cbb0c8f7bbc25cebd2de1247e5e8dc355cad78fe";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/uz/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/uz/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "uz";
|
||||
arch = "linux-i686";
|
||||
sha256 = "dce93fab320f90ece938ae2b2343c1d27a1143b0183318a9d9e0cbbcfb607982";
|
||||
sha256 = "15f4aafba6b2bcb102683d9a665d208ab21c5767cf6d59c45d996fa26ef1e12a";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/vi/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/vi/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "vi";
|
||||
arch = "linux-i686";
|
||||
sha256 = "cf1b4f96ef1a510d21b232e748ace6e567d27e382393a7d7f51ab392f026d55c";
|
||||
sha256 = "32640a1c8e42cc79774a3b75539010dfb65e32c703992001eb03916d4fb46e91";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/zh-CN/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/zh-CN/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "zh-CN";
|
||||
arch = "linux-i686";
|
||||
sha256 = "574acd0743a1202b6629883618278eb3ce113c518bc9c39f3d90e2dc12d4f644";
|
||||
sha256 = "09b52b6ebf0033738444bacfb53b84b1c98f7d3e10b32c001356083afbe4e89e";
|
||||
}
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.1.1/linux-i686/zh-TW/thunderbird-78.1.1.tar.bz2";
|
||||
{ url = "http://archive.mozilla.org/pub/thunderbird/releases/78.2.1/linux-i686/zh-TW/thunderbird-78.2.1.tar.bz2";
|
||||
locale = "zh-TW";
|
||||
arch = "linux-i686";
|
||||
sha256 = "51ccc5a4696841b3391a5dd9fb9ff1f55a9f6ccd6fbd86587ffb86c5f664f10f";
|
||||
sha256 = "606e416a158023f674eda141bf67f9b3956e3e231ba85605173d73cad0d22a59";
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -71,13 +71,13 @@ assert waylandSupport -> gtk3Support == true;
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "thunderbird";
|
||||
version = "68.11.0";
|
||||
version = "68.12.0";
|
||||
|
||||
src = fetchurl {
|
||||
url =
|
||||
"mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
|
||||
sha512 =
|
||||
"1rdxizg1mpagh17fhnrbkilyv1i2zfcr6z62jf3ng31ns94za9kdg9f580srkp63png67jaj3b1kc33v5vb8wavl09n5d38g113x2m9";
|
||||
"33350vjgzvsg6sdhdld92z75k1xcf1wmngdcvzsj4f3y3aal73pyw03mlvgg6y36bm0j8fhaxvgbbg5zm7hxhn779z78970m4v9amg7";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -307,7 +307,7 @@ stdenv.mkDerivation rec {
|
|||
# package a Thunderbird >=71.0 since XUL shouldn't be anymore (in use)?
|
||||
postFixup = ''
|
||||
local xul="$out/lib/thunderbird/libxul.so"
|
||||
patchelf --set-rpath "${libnotify}/lib:${systemd.lib}/lib:$(patchelf --print-rpath $xul)" $xul
|
||||
patchelf --set-rpath "${libnotify}/lib:${lib.getLib systemd}/lib:$(patchelf --print-rpath $xul)" $xul
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
|
|
|
@ -69,13 +69,13 @@ assert waylandSupport -> gtk3Support == true;
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "thunderbird";
|
||||
version = "78.1.1";
|
||||
version = "78.2.1";
|
||||
|
||||
src = fetchurl {
|
||||
url =
|
||||
"mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
|
||||
sha512 =
|
||||
"1lf15zl3p8y1vxv4s04y088flkspf0r0c6j8gfrlfzla5ckfcsbad3zbygh6y73m35j882g7fbacby5a4hiw891zq2kji5dn3nbahyi";
|
||||
"2iya9a5qaini524wrdrnxx6wsrgb8fa2b1m42mlypskxjjgb7n66vpxlbpi9x9mqzc63ca2ag36fjpbpsvbv5ppxvpfwk2j1zbfvb5w";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -301,7 +301,7 @@ stdenv.mkDerivation rec {
|
|||
# package a Thunderbird >=71.0 since XUL shouldn't be anymore (in use)?
|
||||
postFixup = ''
|
||||
local xul="$out/lib/thunderbird/libxul.so"
|
||||
patchelf --set-rpath "${libnotify}/lib:${systemd.lib}/lib:$(patchelf --print-rpath $xul)" $xul
|
||||
patchelf --set-rpath "${libnotify}/lib:${lib.getLib systemd}/lib:$(patchelf --print-rpath $xul)" $xul
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue