Merge branch 'master' into package-petsc-p4est

This commit is contained in:
Carsten Burstedde 2021-07-05 19:30:59 +02:00
commit 705afbd338
No known key found for this signature in database
GPG Key ID: 94563D7C039E3390
531 changed files with 10492 additions and 6491 deletions

View File

@ -11,7 +11,7 @@ name: "Periodic Merges (24h)"
on:
schedule:
# * is a special character in YAML so you have to quote this string
# Merge every 6 hours
# Merge every 24 hours
- cron: '0 0 * * *'
jobs:

View File

@ -56,16 +56,7 @@ Use `programs.steam.enable = true;` if you want to add steam to systemPackages a
## steam-run {#sec-steam-run}
The FHS-compatible chroot used for steam can also be used to run other linux games that expect a FHS environment. To do it, add
```nix
pkgs.steam.override ({
nativeOnly = true;
newStdcpp = true;
}).run
```
to your configuration, rebuild, and run the game with
The FHS-compatible chroot used for Steam can also be used to run other Linux games that expect a FHS environment. To use it, install the `steam-run-native` package and run the game with
```
steam-run ./foo

View File

@ -241,7 +241,7 @@ let
git
# replace with beam.packages.erlang.elixir_1_11 if you need
beam.packages.erlang.elixir
nodejs-15_x
nodejs
postgresql_13
# only used for frontend dependencies
# you are free to use yarn2nix as well

View File

@ -439,7 +439,7 @@ The following example shows which arguments are given to `buildPythonPackage` in
order to build [`datashape`](https://github.com/blaze/datashape).
```nix
{ lib, buildPythonPackage, fetchPypi, numpy, multipledispatch, dateutil, pytest }:
{ lib, buildPythonPackage, fetchPypi, numpy, multipledispatch, python-dateutil, pytest }:
buildPythonPackage rec {
pname = "datashape";
@ -451,7 +451,7 @@ buildPythonPackage rec {
};
checkInputs = [ pytest ];
propagatedBuildInputs = [ numpy multipledispatch dateutil ];
propagatedBuildInputs = [ numpy multipledispatch python-dateutil ];
meta = with lib; {
homepage = "https://github.com/ContinuumIO/datashape";
@ -463,7 +463,7 @@ buildPythonPackage rec {
```
We can see several runtime dependencies, `numpy`, `multipledispatch`, and
`dateutil`. Furthermore, we have one `checkInputs`, i.e. `pytest`. `pytest` is a
`python-dateutil`. Furthermore, we have one `checkInputs`, i.e. `pytest`. `pytest` is a
test runner and is only used during the `checkPhase` and is therefore not added
to `propagatedBuildInputs`.

View File

@ -95,7 +95,7 @@ rec {
result with the specified separator interspersed between
elements.
Type: concatMapStringsSep :: string -> (string -> string) -> [string] -> string
Type: concatMapStringsSep :: string -> (a -> string) -> [a] -> string
Example:
concatMapStringsSep "-" (x: toUpper x) ["foo" "bar" "baz"]
@ -112,7 +112,7 @@ rec {
/* Same as `concatMapStringsSep`, but the mapping function
additionally receives the position of its argument.
Type: concatIMapStringsSep :: string -> (int -> string -> string) -> [string] -> string
Type: concatIMapStringsSep :: string -> (int -> a -> string) -> [a] -> string
Example:
concatImapStringsSep "-" (pos: x: toString (x / pos)) [ 6 6 6 ]

View File

@ -4061,6 +4061,12 @@
github = "gytis-ivaskevicius";
githubId = 23264966;
};
hagl = {
email = "harald@glie.be";
github = "hagl";
githubId = 1162118;
name = "Harald Gliebe";
};
hakuch = {
email = "hakuch@gmail.com";
github = "hakuch";
@ -8192,6 +8198,12 @@
githubId = 1179566;
name = "Nicolas B. Pierron";
};
pimeys = {
email = "julius@nauk.io";
github = "pimeys";
githubId = 34967;
name = "Julius de Bruijn";
};
pingiun = {
email = "nixos@pingiun.com";
github = "pingiun";
@ -10638,6 +10650,12 @@
github = "totoroot";
githubId = 39650930;
};
ToxicFrog = {
email = "toxicfrog@ancilla.ca";
github = "ToxicFrog";
githubId = 90456;
name = "Rebecca (Bex) Kelly";
};
travisbhartwell = {
email = "nafai@travishartwell.net";
github = "travisbhartwell";
@ -10788,6 +10806,12 @@
githubId = 347983;
name = "Udo Spallek";
};
ulrikstrid = {
email = "ulrik.strid@outlook.com";
github = "ulrikstrid";
githubId = 1607770;
name = "Ulrik Strid";
};
unode = {
email = "alves.rjc@gmail.com";
github = "unode";

View File

@ -17,9 +17,9 @@ trap "rm ${tmpfile}" 0
echo "Remember that you need to manually run 'maintainers/scripts/haskell/hydra-report.hs get-report' sometime before running this script."
echo "Generating a list of broken builds and displaying for manual confirmation ..."
maintainers/scripts/haskell/hydra-report.hs mark-broken-list | sort -i > $tmpfile
maintainers/scripts/haskell/hydra-report.hs mark-broken-list | sort -i > "$tmpfile"
$EDITOR $tmpfile
$EDITOR "$tmpfile"
tail -n +3 "$broken_config" >> "$tmpfile"
@ -28,10 +28,11 @@ broken-packages:
# These packages don't compile.
EOF
# clear environment here to avoid things like allowing broken builds in
sort -iu "$tmpfile" >> "$broken_config"
maintainers/scripts/haskell/regenerate-hackage-packages.sh
maintainers/scripts/haskell/regenerate-transitive-broken-packages.sh
maintainers/scripts/haskell/regenerate-hackage-packages.sh
env -i maintainers/scripts/haskell/regenerate-hackage-packages.sh
env -i maintainers/scripts/haskell/regenerate-transitive-broken-packages.sh
env -i maintainers/scripts/haskell/regenerate-hackage-packages.sh
if [[ "${1:-}" == "--do-commit" ]]; then
git add $broken_config

View File

@ -30,6 +30,12 @@ If NixOS fails to boot, there are a number of kernel command line parameters tha
: Make systemd very verbose and send log messages to the console instead of the journal. For more parameters recognised by systemd, see systemd(1).
In addition, these arguments are recognised by the live image only:
`live.nixos.passwd=password`
: Set the password for the `nixos` live user. This can be used for SSH access if there are issues using the terminal.
Notice that for `boot.shell_on_fail`, `boot.debug1`, `boot.debug1devices`, and `boot.debug1mounts`, if you did **not** select "start the new shell as pid 1", and you `exit` from the new shell, boot will proceed normally from the point where it failed, as if you'd chosen "ignore the error and continue".
If no login prompts or X11 login screens appear (e.g. due to hanging dependencies), you can press Alt+ArrowUp. If youre lucky, this will start rescue mode (described above). (Also note that since most units have a 90-second timeout before systemd gives up on them, the `agetty` login prompts should appear eventually unless something is very wrong.)

View File

@ -13,7 +13,7 @@ xlink:href="https://github.com/NixOS/nixpkgs/tree/master/nixos/tests">nixos/test
one or more virtual machines containing the NixOS system(s) required for the
test.
</para>
<xi:include href="writing-nixos-tests.xml" />
<xi:include href="running-nixos-tests.xml" />
<xi:include href="running-nixos-tests-interactively.xml" />
<xi:include href="../from_md/development/writing-nixos-tests.section.xml" />
<xi:include href="../from_md/development/running-nixos-tests.section.xml" />
<xi:include href="../from_md/development/running-nixos-tests-interactively.section.xml" />
</chapter>

View File

@ -0,0 +1,44 @@
# Running Tests interactively {#sec-running-nixos-tests-interactively}
The test itself can be run interactively. This is particularly useful
when developing or debugging a test:
```ShellSession
$ nix-build nixos/tests/login.nix -A driverInteractive
$ ./result/bin/nixos-test-driver
starting VDE switch for network 1
>
```
You can then take any Python statement, e.g.
```py
> start_all()
> test_script()
> machine.succeed("touch /tmp/foo")
> print(machine.succeed("pwd")) # Show stdout of command
```
The function `test_script` executes the entire test script and drops you
back into the test driver command line upon its completion. This allows
you to inspect the state of the VMs after the test (e.g. to debug the
test script).
To just start and experiment with the VMs, run:
```ShellSession
$ nix-build nixos/tests/login.nix -A driverInteractive
$ ./result/bin/nixos-run-vms
```
The script `nixos-run-vms` starts the virtual machines defined by test.
You can re-use the VM states coming from a previous run by setting the
`--keep-vm-state` flag.
```ShellSession
$ ./result/bin/nixos-run-vms --keep-vm-state
```
The machine state is stored in the `$TMPDIR/vm-state-machinename`
directory.

View File

@ -1,49 +0,0 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="sec-running-nixos-tests-interactively">
<title>Running Tests interactively</title>
<para>
The test itself can be run interactively. This is particularly useful when
developing or debugging a test:
<screen>
<prompt>$ </prompt>nix-build nixos/tests/login.nix -A driverInteractive
<prompt>$ </prompt>./result/bin/nixos-test-driver
starting VDE switch for network 1
<prompt>&gt;</prompt>
</screen>
You can then take any Python statement, e.g.
<screen>
<prompt>&gt;</prompt> start_all()
<prompt>&gt;</prompt> test_script()
<prompt>&gt;</prompt> machine.succeed("touch /tmp/foo")
<prompt>&gt;</prompt> print(machine.succeed("pwd")) # Show stdout of command
</screen>
The function <command>test_script</command> executes the entire test script
and drops you back into the test driver command line upon its completion.
This allows you to inspect the state of the VMs after the test (e.g. to debug
the test script).
</para>
<para>
To just start and experiment with the VMs, run:
<screen>
<prompt>$ </prompt>nix-build nixos/tests/login.nix -A driverInteractive
<prompt>$ </prompt>./result/bin/nixos-run-vms
</screen>
The script <command>nixos-run-vms</command> starts the virtual machines
defined by test.
</para>
<para>
You can re-use the VM states coming from a previous run
by setting the <command>--keep-vm-state</command> flag.
<screen>
<prompt>$ </prompt>./result/bin/nixos-run-vms --keep-vm-state
</screen>
The machine state is stored in the
<filename>$TMPDIR/vm-state-</filename><varname>machinename</varname> directory.
</para>
</section>

View File

@ -0,0 +1,31 @@
# Running Tests {#sec-running-nixos-tests}
You can run tests using `nix-build`. For example, to run the test
[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix),
you just do:
```ShellSession
$ nix-build '<nixpkgs/nixos/tests/login.nix>'
```
or, if you don't want to rely on `NIX_PATH`:
```ShellSession
$ cd /my/nixpkgs/nixos/tests
$ nix-build login.nix
running the VM test script
machine: QEMU running (pid 8841)
6 out of 6 tests succeeded
```
After building/downloading all required dependencies, this will perform
a build that starts a QEMU/KVM virtual machine containing a NixOS
system. The virtual machine mounts the Nix store of the host; this makes
VM creation very fast, as no disk image needs to be created. Afterwards,
you can view a pretty-printed log of the test:
```ShellSession
$ firefox result/log.html
```

View File

@ -1,36 +0,0 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="sec-running-nixos-tests">
<title>Running Tests</title>
<para>
You can run tests using <command>nix-build</command>. For example, to run the
test
<filename
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix">login.nix</filename>,
you just do:
<screen>
<prompt>$ </prompt>nix-build '&lt;nixpkgs/nixos/tests/login.nix>'
</screen>
or, if you dont want to rely on <envar>NIX_PATH</envar>:
<screen>
<prompt>$ </prompt>cd /my/nixpkgs/nixos/tests
<prompt>$ </prompt>nix-build login.nix
running the VM test script
machine: QEMU running (pid 8841)
6 out of 6 tests succeeded
</screen>
After building/downloading all required dependencies, this will perform a
build that starts a QEMU/KVM virtual machine containing a NixOS system. The
virtual machine mounts the Nix store of the host; this makes VM creation very
fast, as no disk image needs to be created. Afterwards, you can view a
pretty-printed log of the test:
<screen>
<prompt>$ </prompt>firefox result/log.html
</screen>
</para>
</section>

View File

@ -0,0 +1,301 @@
# Writing Tests {#sec-writing-nixos-tests}
A NixOS test is a Nix expression that has the following structure:
```nix
import ./make-test-python.nix {
# Either the configuration of a single machine:
machine =
{ config, pkgs, ... }:
{ configuration…
};
# Or a set of machines:
nodes =
{ machine1 =
{ config, pkgs, ... }: { … };
machine2 =
{ config, pkgs, ... }: { … };
};
testScript =
''
Python code…
'';
}
```
The attribute `testScript` is a bit of Python code that executes the
test (described below). During the test, it will start one or more
virtual machines, the configuration of which is described by the
attribute `machine` (if you need only one machine in your test) or by
the attribute `nodes` (if you need multiple machines). For instance,
[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix)
only needs a single machine to test whether users can log in
on the virtual console, whether device ownership is correctly maintained
when switching between consoles, and so on. On the other hand,
[`nfs/simple.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix),
which tests NFS client and server functionality in the
Linux kernel (including whether locks are maintained across server
crashes), requires three machines: a server and two clients.
There are a few special NixOS configuration options for test VMs:
`virtualisation.memorySize`
: The memory of the VM in megabytes.
`virtualisation.vlans`
: The virtual networks to which the VM is connected. See
[`nat.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nat.nix)
for an example.
`virtualisation.writableStore`
: By default, the Nix store in the VM is not writable. If you enable
this option, a writable union file system is mounted on top of the
Nix store to make it appear writable. This is necessary for tests
that run Nix operations that modify the store.
For more options, see the module
[`qemu-vm.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/qemu-vm.nix).
The test script is a sequence of Python statements that perform various
actions, such as starting VMs, executing commands in the VMs, and so on.
Each virtual machine is represented as an object stored in the variable
`name` if this is also the identifier of the machine in the declarative
config. If you didn\'t specify multiple machines using the `nodes`
attribute, it is just `machine`. The following example starts the
machine, waits until it has finished booting, then executes a command
and checks that the output is more-or-less correct:
```py
machine.start()
machine.wait_for_unit("default.target")
if not "Linux" in machine.succeed("uname"):
raise Exception("Wrong OS")
```
The first line is actually unnecessary; machines are implicitly started
when you first execute an action on them (such as `wait_for_unit` or
`succeed`). If you have multiple machines, you can speed up the test by
starting them in parallel:
```py
start_all()
```
The following methods are available on machine objects:
`start`
: Start the virtual machine. This method is asynchronous --- it does
not wait for the machine to finish booting.
`shutdown`
: Shut down the machine, waiting for the VM to exit.
`crash`
: Simulate a sudden power failure, by telling the VM to exit
immediately.
`block`
: Simulate unplugging the Ethernet cable that connects the machine to
the other machines.
`unblock`
: Undo the effect of `block`.
`screenshot`
: Take a picture of the display of the virtual machine, in PNG format.
The screenshot is linked from the HTML log.
`get_screen_text_variants`
: Return a list of different interpretations of what is currently
visible on the machine\'s screen using optical character
recognition. The number and order of the interpretations is not
specified and is subject to change, but if no exception is raised at
least one will be returned.
::: {.note}
This requires passing `enableOCR` to the test attribute set.
:::
`get_screen_text`
: Return a textual representation of what is currently visible on the
machine\'s screen using optical character recognition.
::: {.note}
This requires passing `enableOCR` to the test attribute set.
:::
`send_monitor_command`
: Send a command to the QEMU monitor. This is rarely used, but allows
doing stuff such as attaching virtual USB disks to a running
machine.
`send_key`
: Simulate pressing keys on the virtual keyboard, e.g.,
`send_key("ctrl-alt-delete")`.
`send_chars`
: Simulate typing a sequence of characters on the virtual keyboard,
e.g., `send_chars("foobar\n")` will type the string `foobar`
followed by the Enter key.
`execute`
: Execute a shell command, returning a list `(status, stdout)`.
`succeed`
: Execute a shell command, raising an exception if the exit status is
not zero, otherwise returning the standard output. Commands are run
with `set -euo pipefail` set:
- If several commands are separated by `;` and one fails, the
command as a whole will fail.
- For pipelines, the last non-zero exit status will be returned
(if there is one, zero will be returned otherwise).
- Dereferencing unset variables fail the command.
`fail`
: Like `succeed`, but raising an exception if the command returns a zero
status.
`wait_until_succeeds`
: Repeat a shell command with 1-second intervals until it succeeds.
`wait_until_fails`
: Repeat a shell command with 1-second intervals until it fails.
`wait_for_unit`
: Wait until the specified systemd unit has reached the "active"
state.
`wait_for_file`
: Wait until the specified file exists.
`wait_for_open_port`
: Wait until a process is listening on the given TCP port (on
`localhost`, at least).
`wait_for_closed_port`
: Wait until nobody is listening on the given TCP port.
`wait_for_x`
: Wait until the X11 server is accepting connections.
`wait_for_text`
: Wait until the supplied regular expressions matches the textual
contents of the screen by using optical character recognition (see
`get_screen_text` and `get_screen_text_variants`).
::: {.note}
This requires passing `enableOCR` to the test attribute set.
:::
`wait_for_console_text`
: Wait until the supplied regular expressions match a line of the
serial console output. This method is useful when OCR is not
possibile or accurate enough.
`wait_for_window`
: Wait until an X11 window has appeared whose name matches the given
regular expression, e.g., `wait_for_window("Terminal")`.
`copy_from_host`
: Copies a file from host to machine, e.g.,
`copy_from_host("myfile", "/etc/my/important/file")`.
The first argument is the file on the host. The file needs to be
accessible while building the nix derivation. The second argument is
the location of the file on the machine.
`systemctl`
: Runs `systemctl` commands with optional support for
`systemctl --user`
```py
machine.systemctl("list-jobs --no-pager") # runs `systemctl list-jobs --no-pager`
machine.systemctl("list-jobs --no-pager", "any-user") # spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager`
```
`shell_interact`
: Allows you to directly interact with the guest shell. This should
only be used during test development, not in production tests.
Killing the interactive session with `Ctrl-d` or `Ctrl-c` also ends
the guest session.
To test user units declared by `systemd.user.services` the optional
`user` argument can be used:
```py
machine.start()
machine.wait_for_x()
machine.wait_for_unit("xautolock.service", "x-session-user")
```
This applies to `systemctl`, `get_unit_info`, `wait_for_unit`,
`start_job` and `stop_job`.
For faster dev cycles it\'s also possible to disable the code-linters
(this shouldn\'t be commited though):
```nix
import ./make-test-python.nix {
skipLint = true;
machine =
{ config, pkgs, ... }:
{ configuration…
};
testScript =
''
Python code…
'';
}
```
This will produce a Nix warning at evaluation time. To fully disable the
linter, wrap the test script in comment directives to disable the Black
linter directly (again, don\'t commit this within the Nixpkgs
repository):
```nix
testScript =
''
# fmt: off
Python code…
# fmt: on
'';
```

View File

@ -1,517 +0,0 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="sec-writing-nixos-tests">
<title>Writing Tests</title>
<para>
A NixOS test is a Nix expression that has the following structure:
<programlisting>
import ./make-test-python.nix {
# Either the configuration of a single machine:
machine =
{ config, pkgs, ... }:
{ <replaceable>configuration…</replaceable>
};
# Or a set of machines:
nodes =
{ <replaceable>machine1</replaceable> =
{ config, pkgs, ... }: { <replaceable></replaceable> };
<replaceable>machine2</replaceable> =
{ config, pkgs, ... }: { <replaceable></replaceable> };
};
testScript =
''
<replaceable>Python code…</replaceable>
'';
}
</programlisting>
The attribute <literal>testScript</literal> is a bit of Python code that
executes the test (described below). During the test, it will start one or
more virtual machines, the configuration of which is described by the
attribute <literal>machine</literal> (if you need only one machine in your
test) or by the attribute <literal>nodes</literal> (if you need multiple
machines). For instance,
<filename
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix">login.nix</filename>
only needs a single machine to test whether users can log in on the virtual
console, whether device ownership is correctly maintained when switching
between consoles, and so on. On the other hand,
<filename
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix">nfs/simple.nix</filename>,
which tests NFS client and server functionality in the Linux kernel
(including whether locks are maintained across server crashes), requires
three machines: a server and two clients.
</para>
<para>
There are a few special NixOS configuration options for test VMs:
<!-- FIXME: would be nice to generate this automatically. -->
<variablelist>
<varlistentry>
<term>
<option>virtualisation.memorySize</option>
</term>
<listitem>
<para>
The memory of the VM in megabytes.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>virtualisation.vlans</option>
</term>
<listitem>
<para>
The virtual networks to which the VM is connected. See
<filename
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nat.nix">nat.nix</filename>
for an example.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>virtualisation.writableStore</option>
</term>
<listitem>
<para>
By default, the Nix store in the VM is not writable. If you enable this
option, a writable union file system is mounted on top of the Nix store
to make it appear writable. This is necessary for tests that run Nix
operations that modify the store.
</para>
</listitem>
</varlistentry>
</variablelist>
For more options, see the module
<filename
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/qemu-vm.nix">qemu-vm.nix</filename>.
</para>
<para>
The test script is a sequence of Python statements that perform various
actions, such as starting VMs, executing commands in the VMs, and so on. Each
virtual machine is represented as an object stored in the variable
<literal><replaceable>name</replaceable></literal> if this is also the
identifier of the machine in the declarative config.
If you didn't specify multiple machines using the <literal>nodes</literal>
attribute, it is just <literal>machine</literal>.
The following example starts the machine, waits until it has finished booting,
then executes a command and checks that the output is more-or-less correct:
<programlisting>
machine.start()
machine.wait_for_unit("default.target")
if not "Linux" in machine.succeed("uname"):
raise Exception("Wrong OS")
</programlisting>
The first line is actually unnecessary; machines are implicitly started when
you first execute an action on them (such as <literal>wait_for_unit</literal>
or <literal>succeed</literal>). If you have multiple machines, you can speed
up the test by starting them in parallel:
<programlisting>
start_all()
</programlisting>
</para>
<para>
The following methods are available on machine objects:
<variablelist>
<varlistentry>
<term>
<methodname>start</methodname>
</term>
<listitem>
<para>
Start the virtual machine. This method is asynchronous — it does not
wait for the machine to finish booting.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>shutdown</methodname>
</term>
<listitem>
<para>
Shut down the machine, waiting for the VM to exit.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>crash</methodname>
</term>
<listitem>
<para>
Simulate a sudden power failure, by telling the VM to exit immediately.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>block</methodname>
</term>
<listitem>
<para>
Simulate unplugging the Ethernet cable that connects the machine to the
other machines.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>unblock</methodname>
</term>
<listitem>
<para>
Undo the effect of <methodname>block</methodname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>screenshot</methodname>
</term>
<listitem>
<para>
Take a picture of the display of the virtual machine, in PNG format. The
screenshot is linked from the HTML log.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>get_screen_text_variants</methodname>
</term>
<listitem>
<para>
Return a list of different interpretations of what is currently visible
on the machine's screen using optical character recognition. The number
and order of the interpretations is not specified and is subject to
change, but if no exception is raised at least one will be returned.
</para>
<note>
<para>
This requires passing <option>enableOCR</option> to the test attribute
set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>get_screen_text</methodname>
</term>
<listitem>
<para>
Return a textual representation of what is currently visible on the
machine's screen using optical character recognition.
</para>
<note>
<para>
This requires passing <option>enableOCR</option> to the test attribute
set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>send_monitor_command</methodname>
</term>
<listitem>
<para>
Send a command to the QEMU monitor. This is rarely used, but allows doing
stuff such as attaching virtual USB disks to a running machine.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>send_key</methodname>
</term>
<listitem>
<para>
Simulate pressing keys on the virtual keyboard, e.g.,
<literal>send_key("ctrl-alt-delete")</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>send_chars</methodname>
</term>
<listitem>
<para>
Simulate typing a sequence of characters on the virtual keyboard, e.g.,
<literal>send_chars("foobar\n")</literal> will type the string
<literal>foobar</literal> followed by the Enter key.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>execute</methodname>
</term>
<listitem>
<para>
Execute a shell command, returning a list
<literal>(<replaceable>status</replaceable>,
<replaceable>stdout</replaceable>)</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>succeed</methodname>
</term>
<listitem>
<para>
Execute a shell command, raising an exception if the exit status
is not zero, otherwise returning the standard output. Commands
are run with <literal>set -euo pipefail</literal> set:
<itemizedlist>
<listitem>
<para>
If several commands are separated by <literal>;</literal>
and one fails, the command as a whole will fail.
</para>
</listitem>
<listitem>
<para>
For pipelines, the last non-zero exit status will be
returned (if there is one, zero will be returned
otherwise).
</para>
</listitem>
<listitem>
<para>
Dereferencing unset variables fail the command.
</para>
</listitem>
</itemizedlist>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>fail</methodname>
</term>
<listitem>
<para>
Like <methodname>succeed</methodname>, but raising an exception if the
command returns a zero status.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_until_succeeds</methodname>
</term>
<listitem>
<para>
Repeat a shell command with 1-second intervals until it succeeds.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_until_fails</methodname>
</term>
<listitem>
<para>
Repeat a shell command with 1-second intervals until it fails.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_unit</methodname>
</term>
<listitem>
<para>
Wait until the specified systemd unit has reached the “active” state.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_file</methodname>
</term>
<listitem>
<para>
Wait until the specified file exists.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_open_port</methodname>
</term>
<listitem>
<para>
Wait until a process is listening on the given TCP port (on
<literal>localhost</literal>, at least).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_closed_port</methodname>
</term>
<listitem>
<para>
Wait until nobody is listening on the given TCP port.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_x</methodname>
</term>
<listitem>
<para>
Wait until the X11 server is accepting connections.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_text</methodname>
</term>
<listitem>
<para>
Wait until the supplied regular expressions matches the textual contents
of the screen by using optical character recognition (see
<methodname>get_screen_text</methodname> and
<methodname>get_screen_text_variants</methodname>).
</para>
<note>
<para>
This requires passing <option>enableOCR</option> to the test attribute
set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_console_text</methodname>
</term>
<listitem>
<para>
Wait until the supplied regular expressions match a line of the serial
console output. This method is useful when OCR is not possibile or
accurate enough.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>wait_for_window</methodname>
</term>
<listitem>
<para>
Wait until an X11 window has appeared whose name matches the given
regular expression, e.g., <literal>wait_for_window("Terminal")</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>copy_from_host</methodname>
</term>
<listitem>
<para>
Copies a file from host to machine, e.g.,
<literal>copy_from_host("myfile", "/etc/my/important/file")</literal>.
</para>
<para>
The first argument is the file on the host. The file needs to be
accessible while building the nix derivation. The second argument is the
location of the file on the machine.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>systemctl</methodname>
</term>
<listitem>
<para>
Runs <literal>systemctl</literal> commands with optional support for
<literal>systemctl --user</literal>
</para>
<para>
<programlisting>
machine.systemctl("list-jobs --no-pager") # runs `systemctl list-jobs --no-pager`
machine.systemctl("list-jobs --no-pager", "any-user") # spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager`
</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<methodname>shell_interact</methodname>
</term>
<listitem>
<para>
Allows you to directly interact with the guest shell.
This should only be used during test development, not in production tests.
Killing the interactive session with <literal>Ctrl-d</literal> or <literal>Ctrl-c</literal> also ends the guest session.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
To test user units declared by <literal>systemd.user.services</literal> the
optional <literal>user</literal> argument can be used:
<programlisting>
machine.start()
machine.wait_for_x()
machine.wait_for_unit("xautolock.service", "x-session-user")
</programlisting>
This applies to <literal>systemctl</literal>, <literal>get_unit_info</literal>,
<literal>wait_for_unit</literal>, <literal>start_job</literal> and
<literal>stop_job</literal>.
</para>
<para>
For faster dev cycles it's also possible to disable the code-linters (this shouldn't
be commited though):
<programlisting>
import ./make-test-python.nix {
skipLint = true;
machine =
{ config, pkgs, ... }:
{ <replaceable>configuration…</replaceable>
};
testScript =
''
<replaceable>Python code…</replaceable>
'';
}
</programlisting>
This will produce a Nix warning at evaluation time. To fully disable the
linter, wrap the test script in comment directives to disable the Black linter
directly (again, don't commit this within the Nixpkgs repository):
<programlisting>
testScript =
''
# fmt: off
<replaceable>Python code…</replaceable>
# fmt: on
'';
</programlisting>
</para>
</section>

View File

@ -106,6 +106,23 @@
</listitem>
</varlistentry>
</variablelist>
<para>
In addition, these arguments are recognised by the live image only:
</para>
<variablelist>
<varlistentry>
<term>
<literal>live.nixos.passwd=password</literal>
</term>
<listitem>
<para>
Set the password for the <literal>nixos</literal> live user.
This can be used for SSH access if there are issues using the
terminal.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
Notice that for <literal>boot.shell_on_fail</literal>,
<literal>boot.debug1</literal>,

View File

@ -0,0 +1,50 @@
<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-running-nixos-tests-interactively">
<title>Running Tests interactively</title>
<para>
The test itself can be run interactively. This is particularly
useful when developing or debugging a test:
</para>
<programlisting>
$ nix-build nixos/tests/login.nix -A driverInteractive
$ ./result/bin/nixos-test-driver
starting VDE switch for network 1
&gt;
</programlisting>
<para>
You can then take any Python statement, e.g.
</para>
<programlisting language="python">
&gt; start_all()
&gt; test_script()
&gt; machine.succeed(&quot;touch /tmp/foo&quot;)
&gt; print(machine.succeed(&quot;pwd&quot;)) # Show stdout of command
</programlisting>
<para>
The function <literal>test_script</literal> executes the entire test
script and drops you back into the test driver command line upon its
completion. This allows you to inspect the state of the VMs after
the test (e.g. to debug the test script).
</para>
<para>
To just start and experiment with the VMs, run:
</para>
<programlisting>
$ nix-build nixos/tests/login.nix -A driverInteractive
$ ./result/bin/nixos-run-vms
</programlisting>
<para>
The script <literal>nixos-run-vms</literal> starts the virtual
machines defined by test.
</para>
<para>
You can re-use the VM states coming from a previous run by setting
the <literal>--keep-vm-state</literal> flag.
</para>
<programlisting>
$ ./result/bin/nixos-run-vms --keep-vm-state
</programlisting>
<para>
The machine state is stored in the
<literal>$TMPDIR/vm-state-machinename</literal> directory.
</para>
</section>

View File

@ -0,0 +1,34 @@
<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-running-nixos-tests">
<title>Running Tests</title>
<para>
You can run tests using <literal>nix-build</literal>. For example,
to run the test
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix"><literal>login.nix</literal></link>,
you just do:
</para>
<programlisting>
$ nix-build '&lt;nixpkgs/nixos/tests/login.nix&gt;'
</programlisting>
<para>
or, if you dont want to rely on <literal>NIX_PATH</literal>:
</para>
<programlisting>
$ cd /my/nixpkgs/nixos/tests
$ nix-build login.nix
running the VM test script
machine: QEMU running (pid 8841)
6 out of 6 tests succeeded
</programlisting>
<para>
After building/downloading all required dependencies, this will
perform a build that starts a QEMU/KVM virtual machine containing a
NixOS system. The virtual machine mounts the Nix store of the host;
this makes VM creation very fast, as no disk image needs to be
created. Afterwards, you can view a pretty-printed log of the test:
</para>
<programlisting>
$ firefox result/log.html
</programlisting>
</section>

View File

@ -0,0 +1,526 @@
<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-writing-nixos-tests">
<title>Writing Tests</title>
<para>
A NixOS test is a Nix expression that has the following structure:
</para>
<programlisting language="bash">
import ./make-test-python.nix {
# Either the configuration of a single machine:
machine =
{ config, pkgs, ... }:
{ configuration…
};
# Or a set of machines:
nodes =
{ machine1 =
{ config, pkgs, ... }: { … };
machine2 =
{ config, pkgs, ... }: { … };
};
testScript =
''
Python code…
'';
}
</programlisting>
<para>
The attribute <literal>testScript</literal> is a bit of Python code
that executes the test (described below). During the test, it will
start one or more virtual machines, the configuration of which is
described by the attribute <literal>machine</literal> (if you need
only one machine in your test) or by the attribute
<literal>nodes</literal> (if you need multiple machines). For
instance,
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix"><literal>login.nix</literal></link>
only needs a single machine to test whether users can log in on the
virtual console, whether device ownership is correctly maintained
when switching between consoles, and so on. On the other hand,
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nfs/simple.nix"><literal>nfs/simple.nix</literal></link>,
which tests NFS client and server functionality in the Linux kernel
(including whether locks are maintained across server crashes),
requires three machines: a server and two clients.
</para>
<para>
There are a few special NixOS configuration options for test VMs:
</para>
<variablelist>
<varlistentry>
<term>
<literal>virtualisation.memorySize</literal>
</term>
<listitem>
<para>
The memory of the VM in megabytes.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>virtualisation.vlans</literal>
</term>
<listitem>
<para>
The virtual networks to which the VM is connected. See
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/nat.nix"><literal>nat.nix</literal></link>
for an example.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>virtualisation.writableStore</literal>
</term>
<listitem>
<para>
By default, the Nix store in the VM is not writable. If you
enable this option, a writable union file system is mounted on
top of the Nix store to make it appear writable. This is
necessary for tests that run Nix operations that modify the
store.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
For more options, see the module
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/qemu-vm.nix"><literal>qemu-vm.nix</literal></link>.
</para>
<para>
The test script is a sequence of Python statements that perform
various actions, such as starting VMs, executing commands in the
VMs, and so on. Each virtual machine is represented as an object
stored in the variable <literal>name</literal> if this is also the
identifier of the machine in the declarative config. If you didn't
specify multiple machines using the <literal>nodes</literal>
attribute, it is just <literal>machine</literal>. The following
example starts the machine, waits until it has finished booting,
then executes a command and checks that the output is more-or-less
correct:
</para>
<programlisting language="python">
machine.start()
machine.wait_for_unit(&quot;default.target&quot;)
if not &quot;Linux&quot; in machine.succeed(&quot;uname&quot;):
raise Exception(&quot;Wrong OS&quot;)
</programlisting>
<para>
The first line is actually unnecessary; machines are implicitly
started when you first execute an action on them (such as
<literal>wait_for_unit</literal> or <literal>succeed</literal>). If
you have multiple machines, you can speed up the test by starting
them in parallel:
</para>
<programlisting language="python">
start_all()
</programlisting>
<para>
The following methods are available on machine objects:
</para>
<variablelist>
<varlistentry>
<term>
<literal>start</literal>
</term>
<listitem>
<para>
Start the virtual machine. This method is asynchronous — it
does not wait for the machine to finish booting.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>shutdown</literal>
</term>
<listitem>
<para>
Shut down the machine, waiting for the VM to exit.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>crash</literal>
</term>
<listitem>
<para>
Simulate a sudden power failure, by telling the VM to exit
immediately.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>block</literal>
</term>
<listitem>
<para>
Simulate unplugging the Ethernet cable that connects the
machine to the other machines.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>unblock</literal>
</term>
<listitem>
<para>
Undo the effect of <literal>block</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>screenshot</literal>
</term>
<listitem>
<para>
Take a picture of the display of the virtual machine, in PNG
format. The screenshot is linked from the HTML log.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>get_screen_text_variants</literal>
</term>
<listitem>
<para>
Return a list of different interpretations of what is
currently visible on the machine's screen using optical
character recognition. The number and order of the
interpretations is not specified and is subject to change, but
if no exception is raised at least one will be returned.
</para>
<note>
<para>
This requires passing <literal>enableOCR</literal> to the
test attribute set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>get_screen_text</literal>
</term>
<listitem>
<para>
Return a textual representation of what is currently visible
on the machine's screen using optical character recognition.
</para>
<note>
<para>
This requires passing <literal>enableOCR</literal> to the
test attribute set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>send_monitor_command</literal>
</term>
<listitem>
<para>
Send a command to the QEMU monitor. This is rarely used, but
allows doing stuff such as attaching virtual USB disks to a
running machine.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>send_key</literal>
</term>
<listitem>
<para>
Simulate pressing keys on the virtual keyboard, e.g.,
<literal>send_key(&quot;ctrl-alt-delete&quot;)</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>send_chars</literal>
</term>
<listitem>
<para>
Simulate typing a sequence of characters on the virtual
keyboard, e.g.,
<literal>send_chars(&quot;foobar\n&quot;)</literal> will type
the string <literal>foobar</literal> followed by the Enter
key.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>execute</literal>
</term>
<listitem>
<para>
Execute a shell command, returning a list
<literal>(status, stdout)</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>succeed</literal>
</term>
<listitem>
<para>
Execute a shell command, raising an exception if the exit
status is not zero, otherwise returning the standard output.
Commands are run with <literal>set -euo pipefail</literal>
set:
</para>
<itemizedlist>
<listitem>
<para>
If several commands are separated by <literal>;</literal>
and one fails, the command as a whole will fail.
</para>
</listitem>
<listitem>
<para>
For pipelines, the last non-zero exit status will be
returned (if there is one, zero will be returned
otherwise).
</para>
</listitem>
<listitem>
<para>
Dereferencing unset variables fail the command.
</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>fail</literal>
</term>
<listitem>
<para>
Like <literal>succeed</literal>, but raising an exception if
the command returns a zero status.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_until_succeeds</literal>
</term>
<listitem>
<para>
Repeat a shell command with 1-second intervals until it
succeeds.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_until_fails</literal>
</term>
<listitem>
<para>
Repeat a shell command with 1-second intervals until it fails.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_unit</literal>
</term>
<listitem>
<para>
Wait until the specified systemd unit has reached the
<quote>active</quote> state.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_file</literal>
</term>
<listitem>
<para>
Wait until the specified file exists.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_open_port</literal>
</term>
<listitem>
<para>
Wait until a process is listening on the given TCP port (on
<literal>localhost</literal>, at least).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_closed_port</literal>
</term>
<listitem>
<para>
Wait until nobody is listening on the given TCP port.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_x</literal>
</term>
<listitem>
<para>
Wait until the X11 server is accepting connections.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_text</literal>
</term>
<listitem>
<para>
Wait until the supplied regular expressions matches the
textual contents of the screen by using optical character
recognition (see <literal>get_screen_text</literal> and
<literal>get_screen_text_variants</literal>).
</para>
<note>
<para>
This requires passing <literal>enableOCR</literal> to the
test attribute set.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_console_text</literal>
</term>
<listitem>
<para>
Wait until the supplied regular expressions match a line of
the serial console output. This method is useful when OCR is
not possibile or accurate enough.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>wait_for_window</literal>
</term>
<listitem>
<para>
Wait until an X11 window has appeared whose name matches the
given regular expression, e.g.,
<literal>wait_for_window(&quot;Terminal&quot;)</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>copy_from_host</literal>
</term>
<listitem>
<para>
Copies a file from host to machine, e.g.,
<literal>copy_from_host(&quot;myfile&quot;, &quot;/etc/my/important/file&quot;)</literal>.
</para>
<para>
The first argument is the file on the host. The file needs to
be accessible while building the nix derivation. The second
argument is the location of the file on the machine.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>systemctl</literal>
</term>
<listitem>
<para>
Runs <literal>systemctl</literal> commands with optional
support for <literal>systemctl --user</literal>
</para>
<programlisting language="python">
machine.systemctl(&quot;list-jobs --no-pager&quot;) # runs `systemctl list-jobs --no-pager`
machine.systemctl(&quot;list-jobs --no-pager&quot;, &quot;any-user&quot;) # spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager`
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>
<literal>shell_interact</literal>
</term>
<listitem>
<para>
Allows you to directly interact with the guest shell. This
should only be used during test development, not in production
tests. Killing the interactive session with
<literal>Ctrl-d</literal> or <literal>Ctrl-c</literal> also
ends the guest session.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
To test user units declared by
<literal>systemd.user.services</literal> the optional
<literal>user</literal> argument can be used:
</para>
<programlisting language="python">
machine.start()
machine.wait_for_x()
machine.wait_for_unit(&quot;xautolock.service&quot;, &quot;x-session-user&quot;)
</programlisting>
<para>
This applies to <literal>systemctl</literal>,
<literal>get_unit_info</literal>, <literal>wait_for_unit</literal>,
<literal>start_job</literal> and <literal>stop_job</literal>.
</para>
<para>
For faster dev cycles it's also possible to disable the code-linters
(this shouldn't be commited though):
</para>
<programlisting language="bash">
import ./make-test-python.nix {
skipLint = true;
machine =
{ config, pkgs, ... }:
{ configuration…
};
testScript =
''
Python code…
'';
}
</programlisting>
<para>
This will produce a Nix warning at evaluation time. To fully disable
the linter, wrap the test script in comment directives to disable
the Black linter directly (again, don't commit this within the
Nixpkgs repository):
</para>
<programlisting language="bash">
testScript =
''
# fmt: off
Python code…
# fmt: on
'';
</programlisting>
</section>

View File

@ -101,16 +101,18 @@
<listitem>
<para>
<link xlink:href="https://www.gnuradio.org/">GNURadio</link>
3.8 was
3.8 and 3.9 were
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/82263">finally</link>
packaged, along with a rewrite to the Nix expressions,
allowing users to override the features upstream supports
selecting to compile or not to. Additionally, the attribute
<literal>gnuradio</literal> and <literal>gnuradio3_7</literal>
now point to an externally wrapped by default derivations,
that allow you to also add `extraPythonPackages` to the Python
interpreter used by GNURadio. Missing environmental variables
needed for operational GUI were also added
<literal>gnuradio</literal> (3.9),
<literal>gnuradio3_8</literal> and
<literal>gnuradio3_7</literal> now point to an externally
wrapped by default derivations, that allow you to also add
`extraPythonPackages` to the Python interpreter used by
GNURadio. Missing environmental variables needed for
operational GUI were also added
(<link xlink:href="https://github.com/NixOS/nixpkgs/issues/75478">#75478</link>).
</para>
</listitem>
@ -1026,7 +1028,7 @@ self: super:
<para>
<link xlink:href="https://kodi.tv/">Kodi</link> has been
updated to version 19.1 &quot;Matrix&quot;. See the
<link xlink:href="https://kodi.tv/article/kodi-190-matrix-release">announcement</link>
<link xlink:href="https://kodi.tv/article/kodi-19-0-matrix-release">announcement</link>
for further details.
</para>
</listitem>

View File

@ -25,6 +25,15 @@
<section xml:id="sec-release-21.11-new-services">
<title>New Services</title>
<itemizedlist>
<listitem>
<para>
<link xlink:href="https://digint.ch/btrbk/index.html">btrbk</link>,
a backup tool for btrfs subvolumes, taking advantage of btrfs
specific capabilities to create atomic snapshots and transfer
them incrementally to your backup locations. Available as
<link xlink:href="options.html#opt-services.brtbk.instances">services.btrbk</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/maxmind/geoipupdate">geoipupdate</link>,
@ -64,7 +73,7 @@
<listitem>
<para>
The <literal>staticjinja</literal> package has been upgraded
from 1.0.4 to 2.0.0
from 1.0.4 to 3.0.1
</para>
</listitem>
<listitem>
@ -339,6 +348,126 @@
release instead of the old 2.31.0 version.
</para>
</listitem>
<listitem>
<para>
The <literal>bitwarden_rs</literal> packages and modules were
renamed to <literal>vaultwarden</literal>
<link xlink:href="https://github.com/dani-garcia/vaultwarden/discussions/1642">following
upstream</link>. More specifically,
</para>
<itemizedlist>
<listitem>
<para>
<literal>pkgs.bitwarden_rs</literal>,
<literal>pkgs.bitwarden_rs-sqlite</literal>,
<literal>pkgs.bitwarden_rs-mysql</literal> and
<literal>pkgs.bitwarden_rs-postgresql</literal> were
renamed to <literal>pkgs.vaultwarden</literal>,
<literal>pkgs.vaultwarden-sqlite</literal>,
<literal>pkgs.vaultwarden-mysql</literal> and
<literal>pkgs.vaultwarden-postgresql</literal>,
respectively.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
Old names are preserved as aliases for backwards
compatibility, but may be removed in the future.
</para>
</listitem>
<listitem>
<para>
The <literal>bitwarden_rs</literal> executable was
also renamed to <literal>vaultwarden</literal> in all
packages.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
<literal>pkgs.bitwarden_rs-vault</literal> was renamed to
<literal>pkgs.vaultwarden-vault</literal>.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
<literal>pkgs.bitwarden_rs-vault</literal> is
preserved as an alias for backwards compatibility, but
may be removed in the future.
</para>
</listitem>
<listitem>
<para>
The static files were moved from
<literal>/usr/share/bitwarden_rs</literal> to
<literal>/usr/share/vaultwarden</literal>.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
The <literal>services.bitwarden_rs</literal> config module
was renamed to <literal>services.vaultwarden</literal>.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
<literal>services.bitwarden_rs</literal> is preserved
as an alias for backwards compatibility, but may be
removed in the future.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
<literal>systemd.services.bitwarden_rs</literal>,
<literal>systemd.services.backup-bitwarden_rs</literal>
and <literal>systemd.timers.backup-bitwarden_rs</literal>
were renamed to
<literal>systemd.services.vaultwarden</literal>,
<literal>systemd.services.backup-vaultwarden</literal> and
<literal>systemd.timers.backup-vaultwarden</literal>,
respectively.
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
Old names are preserved as aliases for backwards
compatibility, but may be removed in the future.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
<literal>users.users.bitwarden_rs</literal> and
<literal>users.groups.bitwarden_rs</literal> were renamed
to <literal>users.users.vaultwarden</literal> and
<literal>users.groups.vaultwarden</literal>, respectively.
</para>
</listitem>
<listitem>
<para>
The data directory remains located at
<literal>/var/lib/bitwarden_rs</literal>, for backwards
compatibility.
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<itemizedlist spacing="compact">
<listitem>
<para>
<literal>yggdrasil</literal> was upgraded to a new major
release with breaking changes, see
<link xlink:href="https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.4.0">upstream
changelog</link>.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-21.11-notable-changes">

View File

@ -446,8 +446,8 @@
password for the <literal>root</literal> user, e.g.
<screen>
setting root password...
Enter new UNIX password: ***
Retype new UNIX password: ***</screen>
New password: ***
Retype new password: ***</screen>
<note>
<para>
For unattended installations, it is possible to use

View File

@ -36,7 +36,7 @@ In addition to numerous new and upgraded packages, this release has the followin
The following new services were added since the last release:
- [GNURadio](https://www.gnuradio.org/) 3.8 was [finally](https://github.com/NixOS/nixpkgs/issues/82263) packaged, along with a rewrite to the Nix expressions, allowing users to override the features upstream supports selecting to compile or not to. Additionally, the attribute `gnuradio` and `gnuradio3_7` now point to an externally wrapped by default derivations, that allow you to also add \`extraPythonPackages\` to the Python interpreter used by GNURadio. Missing environmental variables needed for operational GUI were also added ([\#75478](https://github.com/NixOS/nixpkgs/issues/75478)).
- [GNURadio](https://www.gnuradio.org/) 3.8 and 3.9 were [finally](https://github.com/NixOS/nixpkgs/issues/82263) packaged, along with a rewrite to the Nix expressions, allowing users to override the features upstream supports selecting to compile or not to. Additionally, the attribute `gnuradio` (3.9), `gnuradio3_8` and `gnuradio3_7` now point to an externally wrapped by default derivations, that allow you to also add \`extraPythonPackages\` to the Python interpreter used by GNURadio. Missing environmental variables needed for operational GUI were also added ([\#75478](https://github.com/NixOS/nixpkgs/issues/75478)).
- [Keycloak](https://www.keycloak.org/), an open source identity and access management server with support for [OpenID Connect](https://openid.net/connect/), [OAUTH 2.0](https://oauth.net/2/) and [SAML 2.0](https://en.wikipedia.org/wiki/SAML_2.0).
@ -300,7 +300,7 @@ When upgrading from a previous release, please be aware of the following incompa
Regarding the NixOS module, new options for HTTPS inspection have been added and `services.privoxy.extraConfig` has been replaced by the new [services.privoxy.settings](options.html#opt-services.privoxy.settings) (See [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) for the motivation).
- [Kodi](https://kodi.tv/) has been updated to version 19.1 \"Matrix\". See the [announcement](https://kodi.tv/article/kodi-190-matrix-release) for further details.
- [Kodi](https://kodi.tv/) has been updated to version 19.1 \"Matrix\". See the [announcement](https://kodi.tv/article/kodi-19-0-matrix-release) for further details.
- The `services.packagekit.backend` option has been removed as it only supported a single setting which would always be the default. Instead new [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) compliant [services.packagekit.settings](options.html#opt-services.packagekit.settings) and [services.packagekit.vendorSettings](options.html#opt-services.packagekit.vendorSettings) options have been introduced.

View File

@ -10,6 +10,8 @@ In addition to numerous new and upgraded packages, this release has the followin
## New Services {#sec-release-21.11-new-services}
- [btrbk](https://digint.ch/btrbk/index.html), a backup tool for btrfs subvolumes, taking advantage of btrfs specific capabilities to create atomic snapshots and transfer them incrementally to your backup locations. Available as [services.btrbk](options.html#opt-services.brtbk.instances).
- [geoipupdate](https://github.com/maxmind/geoipupdate), a GeoIP database updater from MaxMind. Available as [services.geoipupdate](options.html#opt-services.geoipupdate.enable).
- [sourcehut](https://sr.ht), a collection of tools useful for software development. Available as [services.sourcehut](options.html#opt-services.sourcehut.enable).
@ -20,7 +22,7 @@ In addition to numerous new and upgraded packages, this release has the followin
## Backward Incompatibilities {#sec-release-21.11-incompatibilities}
- The `staticjinja` package has been upgraded from 1.0.4 to 2.0.0
- The `staticjinja` package has been upgraded from 1.0.4 to 3.0.1
- `services.geoip-updater` was broken and has been replaced by [services.geoipupdate](options.html#opt-services.geoipupdate.enable).
@ -85,6 +87,34 @@ In addition to numerous new and upgraded packages, this release has the followin
* The `libwnck` package now defaults to the 3.x release instead of the
old 2.31.0 version.
* The `bitwarden_rs` packages and modules were renamed to `vaultwarden`
[following upstream](https://github.com/dani-garcia/vaultwarden/discussions/1642). More specifically,
* `pkgs.bitwarden_rs`, `pkgs.bitwarden_rs-sqlite`, `pkgs.bitwarden_rs-mysql` and
`pkgs.bitwarden_rs-postgresql` were renamed to `pkgs.vaultwarden`, `pkgs.vaultwarden-sqlite`,
`pkgs.vaultwarden-mysql` and `pkgs.vaultwarden-postgresql`, respectively.
* Old names are preserved as aliases for backwards compatibility, but may be removed in the future.
* The `bitwarden_rs` executable was also renamed to `vaultwarden` in all packages.
* `pkgs.bitwarden_rs-vault` was renamed to `pkgs.vaultwarden-vault`.
* `pkgs.bitwarden_rs-vault` is preserved as an alias for backwards compatibility, but may be removed in the future.
* The static files were moved from `/usr/share/bitwarden_rs` to `/usr/share/vaultwarden`.
* The `services.bitwarden_rs` config module was renamed to `services.vaultwarden`.
* `services.bitwarden_rs` is preserved as an alias for backwards compatibility, but may be removed in the future.
* `systemd.services.bitwarden_rs`, `systemd.services.backup-bitwarden_rs` and `systemd.timers.backup-bitwarden_rs`
were renamed to `systemd.services.vaultwarden`, `systemd.services.backup-vaultwarden` and
`systemd.timers.backup-vaultwarden`, respectively.
* Old names are preserved as aliases for backwards compatibility, but may be removed in the future.
* `users.users.bitwarden_rs` and `users.groups.bitwarden_rs` were renamed to `users.users.vaultwarden` and
`users.groups.vaultwarden`, respectively.
* The data directory remains located at `/var/lib/bitwarden_rs`, for backwards compatibility.
- `yggdrasil` was upgraded to a new major release with breaking changes, see [upstream changelog](https://github.com/yggdrasil-network/yggdrasil-go/releases/tag/v0.4.0).
## Other Notable Changes {#sec-release-21.11-notable-changes}
- The setting [`services.openssh.logLevel`](options.html#opt-services.openssh.logLevel) `"VERBOSE"` `"INFO"`. This brings NixOS in line with upstream and other Linux distributions, and reduces log spam on servers due to bruteforcing botnets.

View File

@ -126,6 +126,14 @@ in
type = types.bool;
};
environment.localBinInPath = mkOption {
description = ''
Add ~/.local/bin/ to $PATH
'';
default = false;
type = types.bool;
};
environment.binsh = mkOption {
default = "${config.system.build.binsh}/bin/sh";
defaultText = "\${config.system.build.binsh}/bin/sh";
@ -198,6 +206,10 @@ in
# ~/bin if it exists overrides other bin directories.
export PATH="$HOME/bin:$PATH"
''}
${optionalString cfg.localBinInPath ''
export PATH="$HOME/.local/bin:$PATH"
''}
'';
system.activationScripts.binsh = stringAfter [ "stdio" ]

View File

@ -30,5 +30,16 @@ with lib;
# Add Memtest86+ to the CD.
boot.loader.grub.memtest86.enable = true;
boot.postBootCommands = ''
for o in $(</proc/cmdline); do
case "$o" in
live.nixos.passwd=*)
set -- $(IFS==; echo $o)
echo "nixos:$2" | ${pkgs.shadow}/bin/chpasswd
;;
esac
done
'';
system.stateVersion = mkDefault "18.03";
}

View File

@ -260,6 +260,7 @@
./services/backup/bacula.nix
./services/backup/borgbackup.nix
./services/backup/borgmatic.nix
./services/backup/btrbk.nix
./services/backup/duplicati.nix
./services/backup/duplicity.nix
./services/backup/mysql-backup.nix
@ -874,7 +875,6 @@
./services/search/hound.nix
./services/search/kibana.nix
./services/search/solr.nix
./services/security/bitwarden_rs/default.nix
./services/security/certmgr.nix
./services/security/cfssl.nix
./services/security/clamav.nix
@ -900,6 +900,7 @@
./services/security/torsocks.nix
./services/security/usbguard.nix
./services/security/vault.nix
./services/security/vaultwarden/default.nix
./services/security/yubikey-agent.nix
./services/system/cloud-init.nix
./services/system/dbus.nix

View File

@ -6,7 +6,7 @@ with lib;
meta.maintainers = pkgs.hamster.meta.maintainers;
options.programs.hamster.enable =
mkEnableOption "Whether to enable hamster time tracking.";
mkEnableOption "hamster, a time tracking program";
config = lib.mkIf config.programs.hamster.enable {
environment.systemPackages = [ pkgs.hamster ];

View File

@ -63,6 +63,7 @@ in {
description = "Slimserver daemon user";
home = cfg.dataDir;
group = "slimserver";
isSystemUser = true;
};
groups.slimserver = {};
};

View File

@ -0,0 +1,220 @@
{ config, pkgs, lib, ... }:
let
cfg = config.services.btrbk;
sshEnabled = cfg.sshAccess != [ ];
serviceEnabled = cfg.instances != { };
attr2Lines = attr:
let
pairs = lib.attrsets.mapAttrsToList (name: value: { inherit name value; }) attr;
isSubsection = value:
if builtins.isAttrs value then true
else if builtins.isString value then false
else throw "invalid type in btrbk config ${builtins.typeOf value}";
sortedPairs = lib.lists.partition (x: isSubsection x.value) pairs;
in
lib.flatten (
# non subsections go first
(
map (pair: [ "${pair.name} ${pair.value}" ]) sortedPairs.wrong
)
++ # subsections go last
(
map
(
pair:
lib.mapAttrsToList
(
childname: value:
[ "${pair.name} ${childname}" ] ++ (map (x: " " + x) (attr2Lines value))
)
pair.value
)
sortedPairs.right
)
)
;
addDefaults = settings: { backend = "btrfs-progs-sudo"; } // settings;
mkConfigFile = settings: lib.concatStringsSep "\n" (attr2Lines (addDefaults settings));
mkTestedConfigFile = name: settings:
let
configFile = pkgs.writeText "btrbk-${name}.conf" (mkConfigFile settings);
in
pkgs.runCommand "btrbk-${name}-tested.conf" { } ''
mkdir foo
cp ${configFile} $out
if (set +o pipefail; ${pkgs.btrbk}/bin/btrbk -c $out ls foo 2>&1 | grep $out);
then
echo btrbk configuration is invalid
cat $out
exit 1
fi;
'';
in
{
options = {
services.btrbk = {
extraPackages = lib.mkOption {
description = "Extra packages for btrbk, like compression utilities for <literal>stream_compress</literal>";
type = lib.types.listOf lib.types.package;
default = [ ];
example = lib.literalExample "[ pkgs.xz ]";
};
niceness = lib.mkOption {
description = "Niceness for local instances of btrbk. Also applies to remote ones connecting via ssh when positive.";
type = lib.types.ints.between (-20) 19;
default = 10;
};
ioSchedulingClass = lib.mkOption {
description = "IO scheduling class for btrbk (see ionice(1) for a quick description). Applies to local instances, and remote ones connecting by ssh if set to idle.";
type = lib.types.enum [ "idle" "best-effort" "realtime" ];
default = "best-effort";
};
instances = lib.mkOption {
description = "Set of btrbk instances. The instance named <literal>btrbk</literal> is the default one.";
type = with lib.types;
attrsOf (
submodule {
options = {
onCalendar = lib.mkOption {
type = lib.types.str;
default = "daily";
description = "How often this btrbk instance is started. See systemd.time(7) for more information about the format.";
};
settings = lib.mkOption {
type = let t = lib.types.attrsOf (lib.types.either lib.types.str (t // { description = "instances of this type recursively"; })); in t;
default = { };
example = {
snapshot_preserve_min = "2d";
snapshot_preserve = "14d";
volume = {
"/mnt/btr_pool" = {
target = "/mnt/btr_backup/mylaptop";
subvolume = {
"rootfs" = { };
"home" = { snapshot_create = "always"; };
};
};
};
};
description = "configuration options for btrbk. Nested attrsets translate to subsections.";
};
};
}
);
default = { };
};
sshAccess = lib.mkOption {
description = "SSH keys that should be able to make or push snapshots on this system remotely with btrbk";
type = with lib.types; listOf (
submodule {
options = {
key = lib.mkOption {
type = str;
description = "SSH public key allowed to login as user <literal>btrbk</literal> to run remote backups.";
};
roles = lib.mkOption {
type = listOf (enum [ "info" "source" "target" "delete" "snapshot" "send" "receive" ]);
example = [ "source" "info" "send" ];
description = "What actions can be performed with this SSH key. See ssh_filter_btrbk(1) for details";
};
};
}
);
default = [ ];
};
};
};
config = lib.mkIf (sshEnabled || serviceEnabled) {
environment.systemPackages = [ pkgs.btrbk ] ++ cfg.extraPackages;
security.sudo.extraRules = [
{
users = [ "btrbk" ];
commands = [
{ command = "${pkgs.btrfs-progs}/bin/btrfs"; options = [ "NOPASSWD" ]; }
{ command = "${pkgs.coreutils}/bin/mkdir"; options = [ "NOPASSWD" ]; }
{ command = "${pkgs.coreutils}/bin/readlink"; options = [ "NOPASSWD" ]; }
# for ssh, they are not the same than the one hard coded in ${pkgs.btrbk}
{ command = "/run/current-system/bin/btrfs"; options = [ "NOPASSWD" ]; }
{ command = "/run/current-system/sw/bin/mkdir"; options = [ "NOPASSWD" ]; }
{ command = "/run/current-system/sw/bin/readlink"; options = [ "NOPASSWD" ]; }
];
}
];
users.users.btrbk = {
isSystemUser = true;
# ssh needs a home directory
home = "/var/lib/btrbk";
createHome = true;
shell = "${pkgs.bash}/bin/bash";
group = "btrbk";
openssh.authorizedKeys.keys = map
(
v:
let
options = lib.concatMapStringsSep " " (x: "--" + x) v.roles;
ioniceClass = {
"idle" = 3;
"best-effort" = 2;
"realtime" = 1;
}.${cfg.ioSchedulingClass};
in
''command="${pkgs.util-linux}/bin/ionice -t -c ${toString ioniceClass} ${lib.optionalString (cfg.niceness >= 1) "${pkgs.coreutils}/bin/nice -n ${toString cfg.niceness}"} ${pkgs.btrbk}/share/btrbk/scripts/ssh_filter_btrbk.sh --sudo ${options}" ${v.key}''
)
cfg.sshAccess;
};
users.groups.btrbk = { };
systemd.tmpfiles.rules = [
"d /var/lib/btrbk 0750 btrbk btrbk"
"d /var/lib/btrbk/.ssh 0700 btrbk btrbk"
"f /var/lib/btrbk/.ssh/config 0700 btrbk btrbk - StrictHostKeyChecking=accept-new"
];
environment.etc = lib.mapAttrs'
(
name: instance: {
name = "btrbk/${name}.conf";
value.source = mkTestedConfigFile name instance.settings;
}
)
cfg.instances;
systemd.services = lib.mapAttrs'
(
name: _: {
name = "btrbk-${name}";
value = {
description = "Takes BTRFS snapshots and maintains retention policies.";
unitConfig.Documentation = "man:btrbk(1)";
path = [ "/run/wrappers" ] ++ cfg.extraPackages;
serviceConfig = {
User = "btrbk";
Group = "btrbk";
Type = "oneshot";
ExecStart = "${pkgs.btrbk}/bin/btrbk -c /etc/btrbk/${name}.conf run";
Nice = cfg.niceness;
IOSchedulingClass = cfg.ioSchedulingClass;
StateDirectory = "btrbk";
};
};
}
)
cfg.instances;
systemd.timers = lib.mapAttrs'
(
name: instance: {
name = "btrbk-${name}";
value = {
description = "Timer to take BTRFS snapshots and maintain retention policies.";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = instance.onCalendar;
AccuracySec = "10min";
Persistent = true;
};
};
}
)
cfg.instances;
};
}

View File

@ -99,9 +99,22 @@ in
LockFile = "/run/geoipupdate/.lock";
};
systemd.services.geoipupdate-create-db-dir = {
serviceConfig.Type = "oneshot";
script = ''
mkdir -p ${cfg.settings.DatabaseDirectory}
chmod 0755 ${cfg.settings.DatabaseDirectory}
'';
};
systemd.services.geoipupdate = {
description = "GeoIP Updater";
after = [ "network-online.target" "nss-lookup.target" ];
requires = [ "geoipupdate-create-db-dir.service" ];
after = [
"geoipupdate-create-db-dir.service"
"network-online.target"
"nss-lookup.target"
];
wants = [ "network-online.target" ];
startAt = cfg.interval;
serviceConfig = {
@ -119,11 +132,9 @@ in
};
};
geoipupdateConf = pkgs.writeText "discourse.conf" (geoipupdateKeyValue cfg.settings);
geoipupdateConf = pkgs.writeText "geoipupdate.conf" (geoipupdateKeyValue cfg.settings);
script = ''
mkdir -p "${cfg.settings.DatabaseDirectory}"
chmod 755 "${cfg.settings.DatabaseDirectory}"
chown geoip "${cfg.settings.DatabaseDirectory}"
cp ${geoipupdateConf} /run/geoipupdate/GeoIP.conf
@ -139,7 +150,38 @@ in
ReadWritePaths = cfg.settings.DatabaseDirectory;
RuntimeDirectory = "geoipupdate";
RuntimeDirectoryMode = 0700;
CapabilityBoundingSet = "";
PrivateDevices = true;
PrivateMounts = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProcSubset = "pid";
SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
RestrictRealtime = true;
RestrictNamespaces = true;
MemoryDenyWriteExecute = true;
LockPersonality = true;
SystemCallArchitectures = "native";
};
};
systemd.timers.geoipupdate-initial-run = {
wantedBy = [ "timers.target" ];
unitConfig.ConditionPathExists = "!${cfg.settings.DatabaseDirectory}";
timerConfig = {
Unit = "geoipupdate.service";
OnActiveSec = 0;
};
};
};
meta.maintainers = [ lib.maintainers.talyz ];
}

View File

@ -16,6 +16,7 @@ ${lib.optionalString cfg.lt-cred-mech "lt-cred-mech"}
${lib.optionalString cfg.no-auth "no-auth"}
${lib.optionalString cfg.use-auth-secret "use-auth-secret"}
${lib.optionalString (cfg.static-auth-secret != null) ("static-auth-secret=${cfg.static-auth-secret}")}
${lib.optionalString (cfg.static-auth-secret-file != null) ("static-auth-secret=#static-auth-secret#")}
realm=${cfg.realm}
${lib.optionalString cfg.no-udp "no-udp"}
${lib.optionalString cfg.no-tcp "no-tcp"}
@ -182,6 +183,13 @@ in {
by a separate program, so this is why that other mode is 'dynamic'.
'';
};
static-auth-secret-file = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Path to the file containing the static authentication secret.
'';
};
realm = mkOption {
type = types.str;
default = config.networking.hostName;
@ -293,42 +301,63 @@ in {
};
};
config = mkIf cfg.enable {
users.users.turnserver =
{ uid = config.ids.uids.turnserver;
description = "coturn TURN server user";
};
users.groups.turnserver =
{ gid = config.ids.gids.turnserver;
members = [ "turnserver" ];
};
config = mkIf cfg.enable (mkMerge ([
{ assertions = [
{ assertion = cfg.static-auth-secret != null -> cfg.static-auth-secret-file == null ;
message = "static-auth-secret and static-auth-secret-file cannot be set at the same time";
}
];}
systemd.services.coturn = {
description = "coturn TURN server";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
{
users.users.turnserver =
{ uid = config.ids.uids.turnserver;
description = "coturn TURN server user";
};
users.groups.turnserver =
{ gid = config.ids.gids.turnserver;
members = [ "turnserver" ];
};
unitConfig = {
Documentation = "man:coturn(1) man:turnadmin(1) man:turnserver(1)";
};
systemd.services.coturn = let
runConfig = "/run/coturn/turnserver.cfg";
in {
description = "coturn TURN server";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.coturn}/bin/turnserver -c ${configFile}";
RuntimeDirectory = "turnserver";
User = "turnserver";
Group = "turnserver";
AmbientCapabilities =
mkIf (
cfg.listening-port < 1024 ||
cfg.alt-listening-port < 1024 ||
cfg.tls-listening-port < 1024 ||
cfg.alt-tls-listening-port < 1024 ||
cfg.min-port < 1024
) "cap_net_bind_service";
Restart = "on-abort";
unitConfig = {
Documentation = "man:coturn(1) man:turnadmin(1) man:turnserver(1)";
};
preStart = ''
cat ${configFile} > ${runConfig}
${optionalString (cfg.static-auth-secret-file != null) ''
STATIC_AUTH_SECRET="$(head -n1 ${cfg.static-auth-secret-file} || :)"
sed -e "s,#static-auth-secret#,$STATIC_AUTH_SECRET,g" \
-i ${runConfig}
'' }
chmod 640 ${runConfig}
'';
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.coturn}/bin/turnserver -c ${runConfig}";
RuntimeDirectory = "turnserver";
User = "turnserver";
Group = "turnserver";
AmbientCapabilities =
mkIf (
cfg.listening-port < 1024 ||
cfg.alt-listening-port < 1024 ||
cfg.tls-listening-port < 1024 ||
cfg.alt-tls-listening-port < 1024 ||
cfg.min-port < 1024
) "cap_net_bind_service";
Restart = "on-abort";
};
};
};
};
systemd.tmpfiles.rules = [
"d /run/coturn 0700 turnserver turnserver - -"
];
}]));
}

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Based on: https://github.com/dani-garcia/bitwarden_rs/wiki/Backing-up-your-vault
# Based on: https://github.com/dani-garcia/vaultwarden/wiki/Backing-up-your-vault
if ! mkdir -p "$BACKUP_FOLDER"; then
echo "Could not create backup folder '$BACKUP_FOLDER'" >&2
exit 1

View File

@ -3,9 +3,9 @@
with lib;
let
cfg = config.services.bitwarden_rs;
user = config.users.users.bitwarden_rs.name;
group = config.users.groups.bitwarden_rs.name;
cfg = config.services.vaultwarden;
user = config.users.users.vaultwarden.name;
group = config.users.groups.vaultwarden.name;
# Convert name from camel case (e.g. disable2FARemember) to upper case snake case (e.g. DISABLE_2FA_REMEMBER).
nameToEnvVar = name:
@ -26,22 +26,26 @@ let
if value != null then [ (nameValuePair (nameToEnvVar name) (if isBool value then boolToString value else toString value)) ] else []
) cfg.config));
in { DATA_FOLDER = "/var/lib/bitwarden_rs"; } // optionalAttrs (!(configEnv ? WEB_VAULT_ENABLED) || configEnv.WEB_VAULT_ENABLED == "true") {
WEB_VAULT_FOLDER = "${pkgs.bitwarden_rs-vault}/share/bitwarden_rs/vault";
WEB_VAULT_FOLDER = "${pkgs.vaultwarden-vault}/share/vaultwarden/vault";
} // configEnv;
configFile = pkgs.writeText "bitwarden_rs.env" (concatStrings (mapAttrsToList (name: value: "${name}=${value}\n") configEnv));
configFile = pkgs.writeText "vaultwarden.env" (concatStrings (mapAttrsToList (name: value: "${name}=${value}\n") configEnv));
bitwarden_rs = pkgs.bitwarden_rs.override { inherit (cfg) dbBackend; };
vaultwarden = pkgs.vaultwarden.override { inherit (cfg) dbBackend; };
in {
options.services.bitwarden_rs = with types; {
enable = mkEnableOption "bitwarden_rs";
imports = [
(mkRenamedOptionModule [ "services" "bitwarden_rs" ] [ "services" "vaultwarden" ])
];
options.services.vaultwarden = with types; {
enable = mkEnableOption "vaultwarden";
dbBackend = mkOption {
type = enum [ "sqlite" "mysql" "postgresql" ];
default = "sqlite";
description = ''
Which database backend bitwarden_rs will be using.
Which database backend vaultwarden will be using.
'';
};
@ -49,7 +53,7 @@ in {
type = nullOr str;
default = null;
description = ''
The directory under which bitwarden_rs will backup its persistent data.
The directory under which vaultwarden will backup its persistent data.
'';
};
@ -65,7 +69,7 @@ in {
}
'';
description = ''
The configuration of bitwarden_rs is done through environment variables,
The configuration of vaultwarden is done through environment variables,
therefore the names are converted from camel case (e.g. disable2FARemember)
to upper case snake case (e.g. DISABLE_2FA_REMEMBER).
In this conversion digits (0-9) are handled just like upper case characters,
@ -75,17 +79,17 @@ in {
This allows working around any potential future conflicting naming conventions.
Based on the attributes passed to this config option an environment file will be generated
that is passed to bitwarden_rs's systemd service.
that is passed to vaultwarden's systemd service.
The available configuration options can be found in
<link xlink:href="https://github.com/dani-garcia/bitwarden_rs/blob/${bitwarden_rs.version}/.env.template">the environment template file</link>.
<link xlink:href="https://github.com/dani-garcia/vaultwarden/blob/${vaultwarden.version}/.env.template">the environment template file</link>.
'';
};
environmentFile = mkOption {
type = with types; nullOr path;
default = null;
example = "/root/bitwarden_rs.env";
example = "/root/vaultwarden.env";
description = ''
Additional environment file as defined in <citerefentry>
<refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum>
@ -95,7 +99,7 @@ in {
may be passed to the service without adding them to the world-readable Nix store.
Note that this file needs to be available on the host on which
<literal>bitwarden_rs</literal> is running.
<literal>vaultwarden</literal> is running.
'';
};
};
@ -106,20 +110,21 @@ in {
message = "Backups for database backends other than sqlite will need customization";
} ];
users.users.bitwarden_rs = {
users.users.vaultwarden = {
inherit group;
isSystemUser = true;
};
users.groups.bitwarden_rs = { };
users.groups.vaultwarden = { };
systemd.services.bitwarden_rs = {
systemd.services.vaultwarden = {
aliases = [ "bitwarden_rs" ];
after = [ "network.target" ];
path = with pkgs; [ openssl ];
serviceConfig = {
User = user;
Group = group;
EnvironmentFile = [ configFile ] ++ optional (cfg.environmentFile != null) cfg.environmentFile;
ExecStart = "${bitwarden_rs}/bin/bitwarden_rs";
ExecStart = "${vaultwarden}/bin/vaultwarden";
LimitNOFILE = "1048576";
PrivateTmp = "true";
PrivateDevices = "true";
@ -131,15 +136,16 @@ in {
wantedBy = [ "multi-user.target" ];
};
systemd.services.backup-bitwarden_rs = mkIf (cfg.backupDir != null) {
description = "Backup bitwarden_rs";
systemd.services.backup-vaultwarden = mkIf (cfg.backupDir != null) {
aliases = [ "backup-bitwarden_rs" ];
description = "Backup vaultwarden";
environment = {
DATA_FOLDER = "/var/lib/bitwarden_rs";
BACKUP_FOLDER = cfg.backupDir;
};
path = with pkgs; [ sqlite ];
serviceConfig = {
SyslogIdentifier = "backup-bitwarden_rs";
SyslogIdentifier = "backup-vaultwarden";
Type = "oneshot";
User = mkDefault user;
Group = mkDefault group;
@ -148,12 +154,13 @@ in {
wantedBy = [ "multi-user.target" ];
};
systemd.timers.backup-bitwarden_rs = mkIf (cfg.backupDir != null) {
description = "Backup bitwarden_rs on time";
systemd.timers.backup-vaultwarden = mkIf (cfg.backupDir != null) {
aliases = [ "backup-bitwarden_rs" ];
description = "Backup vaultwarden on time";
timerConfig = {
OnCalendar = mkDefault "23:00";
Persistent = "true";
Unit = "backup-bitwarden_rs.service";
Unit = "backup-vaultwarden.service";
};
wantedBy = [ "multi-user.target" ];
};

View File

@ -13,7 +13,7 @@ let
# !!! fix this
children = mapAttrs (childName: childConfig:
(import ../../../lib/eval-config.nix {
inherit baseModules specialArgs;
inherit lib baseModules specialArgs;
system = config.nixpkgs.initialSystem;
modules =
(optionals childConfig.inheritParentConfig modules)

View File

@ -621,6 +621,8 @@ in
Whether to allow TRIM requests to the underlying device. This option
has security implications; please read the LUKS documentation before
activating it.
This option is incompatible with authenticated encryption (dm-crypt
stacked over dm-integrity).
'';
};

View File

@ -42,12 +42,12 @@ in
bind = handleTest ./bind.nix {};
bitcoind = handleTest ./bitcoind.nix {};
bittorrent = handleTest ./bittorrent.nix {};
bitwarden = handleTest ./bitwarden.nix {};
blockbook-frontend = handleTest ./blockbook-frontend.nix {};
boot = handleTestOn ["x86_64-linux"] ./boot.nix {}; # syslinux is unsupported on aarch64
boot-stage1 = handleTest ./boot-stage1.nix {};
borgbackup = handleTest ./borgbackup.nix {};
botamusique = handleTest ./botamusique.nix {};
btrbk = handleTest ./btrbk.nix {};
buildbot = handleTest ./buildbot.nix {};
buildkite-agents = handleTest ./buildkite-agents.nix {};
caddy = handleTest ./caddy.nix {};
@ -88,6 +88,7 @@ in
containers-tmpfs = handleTest ./containers-tmpfs.nix {};
convos = handleTest ./convos.nix {};
corerad = handleTest ./corerad.nix {};
coturn = handleTest ./coturn.nix {};
couchdb = handleTest ./couchdb.nix {};
cri-o = handleTestOn ["x86_64-linux"] ./cri-o.nix {};
custom-ca = handleTest ./custom-ca.nix {};
@ -446,6 +447,7 @@ in
v2ray = handleTest ./v2ray.nix {};
vault = handleTest ./vault.nix {};
vault-postgresql = handleTest ./vault-postgresql.nix {};
vaultwarden = handleTest ./vaultwarden.nix {};
vector = handleTest ./vector.nix {};
victoriametrics = handleTest ./victoriametrics.nix {};
virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {};

110
nixos/tests/btrbk.nix Normal file
View File

@ -0,0 +1,110 @@
import ./make-test-python.nix ({ pkgs, ... }:
let
privateKey = ''
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACBx8UB04Q6Q/fwDFjakHq904PYFzG9pU2TJ9KXpaPMcrwAAAJB+cF5HfnBe
RwAAAAtzc2gtZWQyNTUxOQAAACBx8UB04Q6Q/fwDFjakHq904PYFzG9pU2TJ9KXpaPMcrw
AAAEBN75NsJZSpt63faCuaD75Unko0JjlSDxMhYHAPJk2/xXHxQHThDpD9/AMWNqQer3Tg
9gXMb2lTZMn0pelo8xyvAAAADXJzY2h1ZXR6QGt1cnQ=
-----END OPENSSH PRIVATE KEY-----
'';
publicKey = ''
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHHxQHThDpD9/AMWNqQer3Tg9gXMb2lTZMn0pelo8xyv
'';
in
{
name = "btrbk";
meta = with pkgs.lib; {
maintainers = with maintainers; [ symphorien ];
};
nodes = {
archive = { ... }: {
environment.systemPackages = with pkgs; [ btrfs-progs ];
# note: this makes the privateKey world readable.
# don't do it with real ssh keys.
environment.etc."btrbk_key".text = privateKey;
services.btrbk = {
extraPackages = [ pkgs.lz4 ];
instances = {
remote = {
onCalendar = "minutely";
settings = {
ssh_identity = "/etc/btrbk_key";
ssh_user = "btrbk";
stream_compress = "lz4";
volume = {
"ssh://main/mnt" = {
target = "/mnt";
snapshot_dir = "btrbk/remote";
subvolume = "to_backup";
};
};
};
};
};
};
};
main = { ... }: {
environment.systemPackages = with pkgs; [ btrfs-progs ];
services.openssh = {
enable = true;
passwordAuthentication = false;
challengeResponseAuthentication = false;
};
services.btrbk = {
extraPackages = [ pkgs.lz4 ];
sshAccess = [
{
key = publicKey;
roles = [ "source" "send" "info" "delete" ];
}
];
instances = {
local = {
onCalendar = "minutely";
settings = {
volume = {
"/mnt" = {
snapshot_dir = "btrbk/local";
subvolume = "to_backup";
};
};
};
};
};
};
};
};
testScript = ''
start_all()
# create btrfs partition at /mnt
for machine in (archive, main):
machine.succeed("dd if=/dev/zero of=/data_fs bs=120M count=1")
machine.succeed("mkfs.btrfs /data_fs")
machine.succeed("mkdir /mnt")
machine.succeed("mount /data_fs /mnt")
# what to backup and where
main.succeed("btrfs subvolume create /mnt/to_backup")
main.succeed("mkdir -p /mnt/btrbk/{local,remote}")
# check that local snapshots work
with subtest("local"):
main.succeed("echo foo > /mnt/to_backup/bar")
main.wait_until_succeeds("cat /mnt/btrbk/local/*/bar | grep foo")
main.succeed("echo bar > /mnt/to_backup/bar")
main.succeed("cat /mnt/btrbk/local/*/bar | grep foo")
# check that btrfs send/receive works and ssh access works
with subtest("remote"):
archive.wait_until_succeeds("cat /mnt/*/bar | grep bar")
main.succeed("echo baz > /mnt/to_backup/bar")
archive.succeed("cat /mnt/*/bar | grep bar")
'';
})

29
nixos/tests/coturn.nix Normal file
View File

@ -0,0 +1,29 @@
import ./make-test-python.nix ({ ... }: {
name = "coturn";
nodes = {
default = {
services.coturn.enable = true;
};
secretsfile = {
boot.postBootCommands = ''
echo "some-very-secret-string" > /run/coturn-secret
'';
services.coturn = {
enable = true;
static-auth-secret-file = "/run/coturn-secret";
};
};
};
testScript =
''
start_all()
with subtest("by default works without configuration"):
default.wait_for_unit("coturn.service")
with subtest("works with static-auth-secret-file"):
secretsfile.wait_for_unit("coturn.service")
secretsfile.succeed("grep 'some-very-secret-string' /run/coturn/turnserver.cfg")
'';
})

View File

@ -98,7 +98,7 @@ import ./../make-test-python.nix ({ pkgs, ...} : {
}];
services.mysql.settings = {
mysqld = {
plugin-load-add = [ "ha_rocksdb.so" ];
plugin-load-add = [ "ha_mroonga.so" "ha_rocksdb.so" ];
};
};
services.mysql.package = pkgs.mariadb;
@ -172,6 +172,20 @@ import ./../make-test-python.nix ({ pkgs, ...} : {
"echo 'use testdb; select test_id from tests;' | sudo -u testuser mysql -u testuser -N | grep 42"
)
# Check if Mroonga plugin works
mariadb.succeed(
"echo 'use testdb; create table mroongadb (test_id INT, PRIMARY KEY (test_id)) ENGINE = Mroonga;' | sudo -u testuser mysql -u testuser"
)
mariadb.succeed(
"echo 'use testdb; insert into mroongadb values (25);' | sudo -u testuser mysql -u testuser"
)
mariadb.succeed(
"echo 'use testdb; select test_id from mroongadb;' | sudo -u testuser mysql -u testuser -N | grep 25"
)
mariadb.succeed(
"echo 'use testdb; drop table mroongadb;' | sudo -u testuser mysql -u testuser"
)
# Check if RocksDB plugin works
mariadb.succeed(
"echo 'use testdb; create table rocksdb (test_id INT, PRIMARY KEY (test_id)) ENGINE = RocksDB;' | sudo -u testuser mysql -u testuser"

View File

@ -104,6 +104,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
ats.wait_for_open_port(80)
httpbin.wait_for_unit("httpbin")
httpbin.wait_for_open_port(80)
client.wait_for_unit("network-online.target")
with subtest("Traffic Server is running"):
out = ats.succeed("traffic_ctl server status")

View File

@ -4,7 +4,7 @@
}:
# These tests will:
# * Set up a bitwarden-rs server
# * Set up a vaultwarden server
# * Have Firefox use the web vault to create an account, log in, and save a password to the valut
# * Have the bw cli log in and read that password from the vault
#
@ -24,8 +24,8 @@ let
storedPassword = "seeeecret";
makeBitwardenTest = backend: makeTest {
name = "bitwarden_rs-${backend}";
makeVaultwardenTest = backend: makeTest {
name = "vaultwarden-${backend}";
meta = {
maintainers = with pkgs.lib.maintainers; [ jjjollyjim ];
};
@ -45,9 +45,9 @@ let
package = pkgs.mariadb;
};
services.bitwarden_rs.config.databaseUrl = "mysql://bitwardenuser:${dbPassword}@localhost/bitwarden";
services.vaultwarden.config.databaseUrl = "mysql://bitwardenuser:${dbPassword}@localhost/bitwarden";
systemd.services.bitwarden_rs.after = [ "mysql.service" ];
systemd.services.vaultwarden.after = [ "mysql.service" ];
};
postgresql = {
@ -60,9 +60,9 @@ let
'';
};
services.bitwarden_rs.config.databaseUrl = "postgresql://bitwardenuser:${dbPassword}@localhost/bitwarden";
services.vaultwarden.config.databaseUrl = "postgresql://bitwardenuser:${dbPassword}@localhost/bitwarden";
systemd.services.bitwarden_rs.after = [ "postgresql.service" ];
systemd.services.vaultwarden.after = [ "postgresql.service" ];
};
sqlite = { };
@ -71,7 +71,7 @@ let
mkMerge [
backendConfig.${backend}
{
services.bitwarden_rs = {
services.vaultwarden = {
enable = true;
dbBackend = backend;
config.rocketPort = 80;
@ -152,7 +152,7 @@ let
testScript = ''
start_all()
server.wait_for_unit("bitwarden_rs.service")
server.wait_for_unit("vaultwarden.service")
server.wait_for_open_port(80)
with subtest("configure the cli"):
@ -184,6 +184,6 @@ let
in
builtins.listToAttrs (
map
(backend: { name = backend; value = makeBitwardenTest backend; })
(backend: { name = backend; value = makeVaultwardenTest backend; })
backends
)

View File

@ -1,23 +1,19 @@
let
aliceIp6 = "200:3b91:b2d8:e708:fbf3:f06:fdd5:90d0";
aliceIp6 = "202:b70:9b0b:cf34:f93c:8f18:bbfd:7034";
aliceKeys = {
EncryptionPublicKey = "13e23986fe76bc3966b42453f479bc563348b7ff76633b7efcb76e185ec7652f";
EncryptionPrivateKey = "9f86947b15e86f9badac095517a1982e39a2db37ca726357f95987b898d82208";
SigningPublicKey = "e2c43349083bc1e998e4ec4535b4c6a8f44ca9a5a8e07336561267253b2be5f4";
SigningPrivateKey = "fe3add8da35316c05f6d90d3ca79bd2801e6ccab6d37e5339fef4152589398abe2c43349083bc1e998e4ec4535b4c6a8f44ca9a5a8e07336561267253b2be5f4";
PublicKey = "3e91ec9e861960d86e1ce88051f97c435bdf2859640ab681dfa906eb45ad5182";
PrivateKey = "a867f9e078e4ce58d310cf5acd4622d759e2a21df07e1d6fc380a2a26489480d3e91ec9e861960d86e1ce88051f97c435bdf2859640ab681dfa906eb45ad5182";
};
bobIp6 = "201:ebbd:bde9:f138:c302:4afa:1fb6:a19a";
bobPrefix = "301:ebbd:bde9:f138";
bobIp6 = "202:a483:73a4:9f2d:a559:4a19:bc9:8458";
bobPrefix = "302:a483:73a4:9f2d";
bobConfig = {
InterfacePeers = {
eth1 = [ "tcp://192.168.1.200:12345" ];
};
MulticastInterfaces = [ "eth1" ];
LinkLocalTCPPort = 54321;
EncryptionPublicKey = "c99d6830111e12d1b004c52fe9e5a2eef0f6aefca167aca14589a370b7373279";
EncryptionPrivateKey = "2e698a53d3fdce5962d2ff37de0fe77742a5c8b56cd8259f5da6aa792f6e8ba3";
SigningPublicKey = "de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b";
SigningPrivateKey = "2a6c21550f3fca0331df50668ffab66b6dce8237bcd5728e571e8033b363e247de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b";
PublicKey = "2b6f918b6c1a4b54d6bcde86cf74e074fb32ead4ee439b7930df2aa60c825186";
PrivateKey = "0c4a24acd3402722ce9277ed179f4a04b895b49586493c25fbaed60653d857d62b6f918b6c1a4b54d6bcde86cf74e074fb32ead4ee439b7930df2aa60c825186";
};
danIp6 = bobPrefix + "::2";

View File

@ -23,7 +23,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
# Login
default.wait_until_tty_matches(1, "login: ")
default.send_chars("root\n")
default.wait_until_tty_matches(1, "root@default>")
default.wait_until_tty_matches(1, r"\nroot@default\b")
# Generate some history
default.send_chars("echo foobar\n")

View File

@ -0,0 +1,200 @@
{ lib, stdenv, curl, gnugrep, jq, xorg, alsa-lib, freetype, p7zip, autoPatchelfHook, writeShellScript, zlib, libjack2, makeWrapper }:
let
versionForFile = v: builtins.replaceStrings ["."] [""] v;
mkPianoteq = { name, src, version, archdir, ... }:
stdenv.mkDerivation rec {
inherit src version;
pname = "pianoteq-${name}";
unpackPhase = ''
${p7zip}/bin/7z x $src
'';
nativeBuildInputs = [
autoPatchelfHook
makeWrapper
];
buildInputs = [
stdenv.cc.cc.lib
xorg.libX11 # libX11.so.6
xorg.libXext # libXext.so.6
alsa-lib # libasound.so.2
freetype # libfreetype.so.6
];
installPhase = ''
mkdir -p $out/bin
mv -t $out/bin Pianoteq*/${archdir}/*
for f in $out/bin/Pianoteq*; do
if [ -x "$f" ] && [ -f "$f" ]; then
wrapProgram "$f" --prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath (buildInputs ++ [
xorg.libXcursor
xorg.libXinerama
xorg.libXrandr
libjack2
zlib
])
}
fi
done
'';
meta = with lib; {
homepage = "https://www.modartt.com/pianoteq";
description = "Software synthesizer that features real-time MIDI-control of digital physically modeled pianos and related instruments";
license = licenses.unfree;
platforms = [ "x86_64-linux" ]; # TODO extract binary according to each platform?
maintainers = [ maintainers.mausch ];
};
};
fetchWithCurlScript = { name, sha256, script, impureEnvVars ? [] }:
stdenv.mkDerivation {
inherit name;
builder = writeShellScript "builder.sh" ''
source $stdenv/setup
curlVersion=$(${curl}/bin/curl -V | head -1 | cut -d' ' -f2)
# Curl flags to handle redirects, not use EPSV, handle cookies for
# servers to need them during redirects, and work on SSL without a
# certificate (this isn't a security problem because we check the
# cryptographic hash of the output anyway).
curl=(
${curl}/bin/curl
--location
--max-redirs 20
--retry 3
--disable-epsv
--cookie-jar cookies
--insecure
--user-agent "curl/$curlVersion Nixpkgs/${lib.trivial.release}"
$NIX_CURL_FLAGS
)
${script}
'';
nativeBuildInputs = [ curl ];
outputHashAlgo = "sha256";
outputHash = sha256;
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ impureEnvVars ++ [
# This variable allows the user to pass additional options to curl
"NIX_CURL_FLAGS"
];
};
fetchPianoteqTrial = { name, sha256 }:
fetchWithCurlScript {
inherit name sha256;
script = ''
"''${curl[@]}" --silent --request POST \
--cookie cookies \
--header "modartt-json: request" \
--header "origin: https://www.modartt.com" \
--header "content-type: application/json; charset=UTF-8" \
--header "accept: application/json, text/javascript, */*" \
--data-raw '{"file": "${name}", "get": "url"}' \
https://www.modartt.com/json/download -o /dev/null
json=$(
"''${curl[@]}" --silent --request POST \
--cookie cookies \
--header "modartt-json: request" \
--header "origin: https://www.modartt.com" \
--header "content-type: application/json; charset=UTF-8" \
--header "accept: application/json, text/javascript, */*" \
--data-raw '{"file": "${name}", "get": "url"}' \
https://www.modartt.com/json/download
)
url=$(echo $json | ${jq}/bin/jq -r .url)
"''${curl[@]}" --progress-bar --cookie cookies -o $out "$url"
'';
};
fetchPianoteqWithLogin = { name, sha256 }:
fetchWithCurlScript {
inherit name sha256;
impureEnvVars = [ "NIX_MODARTT_USERNAME" "NIX_MODARTT_PASSWORD" ];
script = ''
if [ -z "''${NIX_MODARTT_USERNAME}" -o -z "''${NIX_MODARTT_PASSWORD}" ]; then
echo "Error: Downloading a personal Pianoteq instance requires the nix building process (nix-daemon in multi user mode) to have the NIX_MODARTT_USERNAME and NIX_MODARTT_PASSWORD env vars set." >&2
exit 1
fi
"''${curl[@]}" -s -o /dev/null "https://www.modartt.com/user_area"
${jq}/bin/jq -n "{connect: 1, login: \"''${NIX_MODARTT_USERNAME}\", password: \"''${NIX_MODARTT_PASSWORD}\"}" > login.json
"''${curl[@]}" --silent --request POST \
--cookie cookies \
--referer "https://www.modartt.com/user_area" \
--header "modartt-json: request" \
--header "origin: https://www.modartt.com" \
--header "content-type: application/json; charset=UTF-8" \
--header "accept: application/json, text/javascript, */*" \
--data @login.json \
https://www.modartt.com/json/session
json=$(
"''${curl[@]}" --silent --request POST \
--cookie cookies \
--header "modartt-json: request" \
--header "origin: https://www.modartt.com" \
--header "content-type: application/json; charset=UTF-8" \
--header "accept: application/json, text/javascript, */*" \
--data-raw '{"file": "${name}", "get": "url"}' \
https://www.modartt.com/json/download
)
url=$(echo $json | ${jq}/bin/jq -r .url)
"''${curl[@]}" --progress-bar --cookie cookies -o $out "$url"
'';
};
in {
# TODO currently can't install more than one because `lame` clashes
stage-trial = mkPianoteq rec {
name = "stage-trial";
version = "7.3.0";
archdir = "x86-64bit";
src = fetchPianoteqTrial {
name = "pianoteq_stage_linux_trial_v${versionForFile version}.7z";
sha256 = "12zbr54ng7cb4ngl1qrf5h0gs8c42d6d3j08492xr14m9x9y132k";
};
};
standard-trial = mkPianoteq rec {
name = "standard-trial";
version = "7.3.0";
archdir = "x86-64bit";
src = fetchPianoteqTrial {
name = "pianoteq_linux_trial_v${versionForFile version}.7z";
sha256 = "04sh45hm3y3y6kfj3p32fi6p95r9fc6xf4r5i74laylms4f6gr6d";
};
};
stage-6 = mkPianoteq rec {
name = "stage-6";
version = "6.7.3";
archdir = "amd64";
src = fetchPianoteqWithLogin {
name = "pianoteq_stage_linux_v${versionForFile version}.7z";
sha256 = "0jy0hkdynhwv0zhrqkby0hdphgmcc09wxmy74rhg9afm1pzl91jy";
};
};
stage-7 = mkPianoteq rec {
name = "stage-7";
version = "7.3.0";
archdir = "x86-64bit";
src = fetchPianoteqWithLogin {
name = "pianoteq_stage_linux_v${versionForFile version}.7z";
sha256 = "05w7sv9v38r6ljz9xai816w5z2qqwx88hcfjm241fvgbs54125hx";
};
};
# TODO other paid binaries, I don't own that so I don't know their hash.
}

View File

@ -40,7 +40,7 @@ pythonPackages.buildPythonApplication rec {
propagatedBuildInputs = with pythonPackages; [
chromaprint
dateutil
python-dateutil
discid
fasteners
mutagen

View File

@ -1,30 +1,34 @@
{ lib, stdenv, fetchurl, alsa-lib, gtk2, pkg-config }:
{ lib, stdenv, fetchFromGitHub, pkg-config, wrapGAppsHook, alsa-lib, gtk3, libpulseaudio }:
stdenv.mkDerivation rec {
pname = "praat";
version = "6.0.43";
version = "6.1.50";
src = fetchurl {
url = "https://github.com/praat/praat/archive/v${version}.tar.gz";
sha256 = "1l13bvnl7sv8v6s5z63201bhzavnj6bnqcj446akippsam13z4sf";
src = fetchFromGitHub {
owner = "praat";
repo = "praat";
rev = "v${version}";
sha256 = "11cw4292pml71hdnfy8y91blwyh45dyam1ywr09355zk44c5njpq";
};
configurePhase = ''
cp makefiles/makefile.defs.linux.alsa makefile.defs
cp makefiles/makefile.defs.linux.pulse makefile.defs
'';
installPhase = ''
mkdir -p $out/bin
cp praat $out/bin
install -Dt $out/bin praat
'';
nativeBuildInputs = [ pkg-config ];
buildInputs = [ alsa-lib gtk2 ];
nativeBuildInputs = [ pkg-config wrapGAppsHook ];
buildInputs = [ alsa-lib gtk3 libpulseaudio ];
meta = {
enableParallelBuilding = true;
meta = with lib; {
description = "Doing phonetics by computer";
homepage = "https://www.fon.hum.uva.nl/praat/";
license = lib.licenses.gpl2Plus; # Has some 3rd-party code in it though
platforms = lib.platforms.linux;
license = licenses.gpl2Plus; # Has some 3rd-party code in it though
maintainers = with maintainers; [ orivej ];
platforms = platforms.linux;
};
}

View File

@ -16,8 +16,6 @@ python3Packages.buildPythonApplication rec {
};
patches = [
# tweak version requirements to what's available in Nixpkgs
./dependencies.patch
# Allow later websockets release, https://github.com/Chia-Network/chia-blockchain/pull/6304
(fetchpatch {
name = "later-websockets.patch";
@ -66,6 +64,16 @@ python3Packages.buildPythonApplication rec {
"test_spend_zero_coin"
];
postPatch = ''
# tweak version requirements to what's available in Nixpkgs
substituteInPlace setup.py \
--replace "aiohttp==3.7.4" "aiohttp>=3.7.4" \
--replace "sortedcontainers==2.3.0" "sortedcontainers>=2.3.0" \
--replace "click==7.1.2" "click>=7.1.2" \
--replace "clvm_rs==0.1.7" "clvm_rs>=0.1.7" \
--replace "clvm==0.9.6" "clvm>=0.9.6" \
'';
preCheck = ''
export HOME=`mktemp -d`
'';

View File

@ -1,13 +0,0 @@
diff --git a/setup.py b/setup.py
index c5cf95db..b783a9e6 100644
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,7 @@ dependencies = [
"clvm==0.9.6",
"clvm_rs==0.1.7",
"clvm_tools==0.4.3",
- "aiohttp==3.7.4", # HTTP server for full node rpc
+ "aiohttp==3.7.4.post0", # HTTP server for full node rpc
"aiosqlite==0.17.0", # asyncio wrapper for sqlite, to store blocks
"bitstring==3.1.7", # Binary data management library
"colorlog==5.0.1", # Adds color to logs

View File

@ -640,10 +640,10 @@
elpaBuild {
pname = "consult";
ename = "consult";
version = "0.8";
version = "0.9";
src = fetchurl {
url = "https://elpa.gnu.org/packages/consult-0.8.tar";
sha256 = "0vkq8dsj6k3gsdhiyg6ccv49fqgjw6f0db4wjsvm5zbkadjvlm86";
url = "https://elpa.gnu.org/packages/consult-0.9.tar";
sha256 = "1n3bnvgj92fjd9dai9f95wvyfb20yhaw7b722lkqjg42i10jqzfn";
};
packageRequires = [ emacs ];
meta = {
@ -670,10 +670,10 @@
elpaBuild {
pname = "corfu";
ename = "corfu";
version = "0.8";
version = "0.9";
src = fetchurl {
url = "https://elpa.gnu.org/packages/corfu-0.8.tar";
sha256 = "1qrrky1g4k5vw56435dgkwnmnri7i51gkydd76as3l0ixm4pnp05";
url = "https://elpa.gnu.org/packages/corfu-0.9.tar";
sha256 = "0710bq07j6w6zm49ci1bbx580frdbc62b3hbxwzkwm5204nf78bf";
};
packageRequires = [ emacs ];
meta = {
@ -835,10 +835,10 @@
elpaBuild {
pname = "devdocs";
ename = "devdocs";
version = "0.1";
version = "0.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/devdocs-0.1.tar";
sha256 = "1ps2jpp1ckq9839l63p6npqrf85b8zb5akwvjvv7fkm8nvspdkil";
url = "https://elpa.gnu.org/packages/devdocs-0.2.tar";
sha256 = "1npc7yra7pvf86ahmz1h7hnjxrz15ar1vjcalg4ilizypycpgrwj";
};
packageRequires = [ emacs ];
meta = {
@ -1015,10 +1015,10 @@
elpaBuild {
pname = "ebdb";
ename = "ebdb";
version = "0.6.23";
version = "0.6.24";
src = fetchurl {
url = "https://elpa.gnu.org/packages/ebdb-0.6.23.tar";
sha256 = "0j3jvy9s606qjqcmcjzgck3dp8bhpgly2g00wnswzcgk4makdzld";
url = "https://elpa.gnu.org/packages/ebdb-0.6.24.tar";
sha256 = "0156rh6fkv2yp509h6i8qzh4gsda2mcmfrxl4r6ywn1z5ahijc3r";
};
packageRequires = [ cl-lib emacs seq ];
meta = {
@ -1075,10 +1075,10 @@
elpaBuild {
pname = "eev";
ename = "eev";
version = "20210607";
version = "20210618";
src = fetchurl {
url = "https://elpa.gnu.org/packages/eev-20210607.tar";
sha256 = "0avd58m8630s4d3ys9g84csscdmf2y1swwwkgzjkrrq8q0j5yd3l";
url = "https://elpa.gnu.org/packages/eev-20210618.tar";
sha256 = "13sb9shpj9fhns8sl3dxdgnn8z4wf14mgi4s87k5x4nrr012sscf";
};
packageRequires = [ emacs ];
meta = {
@ -1198,10 +1198,10 @@
elpaBuild {
pname = "emms";
ename = "emms";
version = "7.2";
version = "7.5";
src = fetchurl {
url = "https://elpa.gnu.org/packages/emms-7.2.tar";
sha256 = "11vqqh9rnzibsfw7wx62rgzl8i8ldpf0hv1sj43nhl5c6dlc8d5z";
url = "https://elpa.gnu.org/packages/emms-7.5.tar";
sha256 = "0d7nsx2idzbp6d5im5rrsnwppbr2cimvxgx31bhwsm2aq3ya5v2j";
};
packageRequires = [ cl-lib nadvice seq ];
meta = {
@ -1867,10 +1867,10 @@
elpaBuild {
pname = "ivy-posframe";
ename = "ivy-posframe";
version = "0.6.0";
version = "0.6.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/ivy-posframe-0.6.0.tar";
sha256 = "07dzglrcdl54lkznyphw97xwd9bcwzdcgzkav0vqfk7f5cwh1wkf";
url = "https://elpa.gnu.org/packages/ivy-posframe-0.6.1.tar";
sha256 = "1nay2sfbwm2fkp3f1y89innd9h6j3q70q9y4yddrwa69cxlj9m23";
};
packageRequires = [ emacs ivy posframe ];
meta = {
@ -2017,10 +2017,10 @@
elpaBuild {
pname = "leaf";
ename = "leaf";
version = "4.4.8";
version = "4.5.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/leaf-4.4.8.tar";
sha256 = "0h0ksmgrhn29ci6z8y54dbbzcqlvfs1ra0kmf226gz0dqzk45vb3";
url = "https://elpa.gnu.org/packages/leaf-4.5.2.tar";
sha256 = "0i90shhhkpdcwmfi8zv0008qgmg4g3cqd2yvpycfv9n2axvhag54";
};
packageRequires = [ emacs ];
meta = {
@ -2152,10 +2152,10 @@
elpaBuild {
pname = "marginalia";
ename = "marginalia";
version = "0.6";
version = "0.7";
src = fetchurl {
url = "https://elpa.gnu.org/packages/marginalia-0.6.tar";
sha256 = "05pwaz9643shxnv63l6r9m2c0qf1nc1hy6jiqw01bkvvgg8g4jag";
url = "https://elpa.gnu.org/packages/marginalia-0.7.tar";
sha256 = "1nz55nx6xp72nahs4g6asl5y5yrlnlnza58bjrlwwzmwsf7daz18";
};
packageRequires = [ emacs ];
meta = {
@ -2829,10 +2829,10 @@
elpaBuild {
pname = "posframe";
ename = "posframe";
version = "1.0.3";
version = "1.0.4";
src = fetchurl {
url = "https://elpa.gnu.org/packages/posframe-1.0.3.tar";
sha256 = "0c3lnrydsysv8j25brgc0cckf1hz54yhkginncmw81y1ia43rqmx";
url = "https://elpa.gnu.org/packages/posframe-1.0.4.tar";
sha256 = "0i2pw90gw9zb22gj8yyvcp3b2k1bxxhbjj0idvr5iz1vd9023bc6";
};
packageRequires = [ emacs ];
meta = {
@ -2889,10 +2889,10 @@
elpaBuild {
pname = "pyim";
ename = "pyim";
version = "3.7.9";
version = "3.8.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/pyim-3.7.9.tar";
sha256 = "00ff1izdwcy53dcwpdn18wwndnw2jsw4bhg8gkqaa60xm468xzkl";
url = "https://elpa.gnu.org/packages/pyim-3.8.2.tar";
sha256 = "05sgciqb0hzy07j8pvbg7h2vpa9z5z60m6pknxd3b1kpi45vaihw";
};
packageRequires = [ async emacs xr ];
meta = {
@ -3355,10 +3355,10 @@
elpaBuild {
pname = "setup";
ename = "setup";
version = "0.2.0";
version = "0.2.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/setup-0.2.0.tar";
sha256 = "1xhjkyksilw1vbx12a4yz4bpj0dhl3m02yi8d9nyd19z098cfa9y";
url = "https://elpa.gnu.org/packages/setup-0.2.1.tar";
sha256 = "15paand086g33w2vb6jkyxd3i2pmpp84f31y3j5v8w9ia68pjzms";
};
packageRequires = [ emacs ];
meta = {
@ -3595,10 +3595,10 @@
elpaBuild {
pname = "sql-indent";
ename = "sql-indent";
version = "1.5";
version = "1.6";
src = fetchurl {
url = "https://elpa.gnu.org/packages/sql-indent-1.5.tar";
sha256 = "07k5rn9hbxppnka7nq0a3a6zyqqa1hp8j6qrb344js6zyak0cb63";
url = "https://elpa.gnu.org/packages/sql-indent-1.6.tar";
sha256 = "000pimlg0k4mrv2wpqq8w8l51wpr1lzlaq6ai8iaximm2a92ap5b";
};
packageRequires = [ cl-lib ];
meta = {
@ -3610,10 +3610,10 @@
elpaBuild {
pname = "ssh-deploy";
ename = "ssh-deploy";
version = "3.1.12";
version = "3.1.13";
src = fetchurl {
url = "https://elpa.gnu.org/packages/ssh-deploy-3.1.12.tar";
sha256 = "0fz49l63jfw9zy459f07bq2irdb8ispnx8m2c3wxwiim9yw5xnjg";
url = "https://elpa.gnu.org/packages/ssh-deploy-3.1.13.tar";
sha256 = "006jr8yc5qvxdfk0pn40604a2b7a1ah6l6hi6rhxm3p5b08d9i5w";
};
packageRequires = [ emacs ];
meta = {
@ -3779,10 +3779,10 @@
elpaBuild {
pname = "tramp";
ename = "tramp";
version = "2.5.0.5";
version = "2.5.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/tramp-2.5.0.5.tar";
sha256 = "1dclxffynfacvwi2scpda35sxjb42603yyf2p0477qa9b0i4xha0";
url = "https://elpa.gnu.org/packages/tramp-2.5.1.tar";
sha256 = "1r7wifhzy2ipdlc4fqnx6549fnx45ggz57wh0cp7s6y25761si7q";
};
packageRequires = [ emacs ];
meta = {
@ -3824,10 +3824,10 @@
elpaBuild {
pname = "transient";
ename = "transient";
version = "0.3.4";
version = "0.3.5";
src = fetchurl {
url = "https://elpa.gnu.org/packages/transient-0.3.4.tar";
sha256 = "1m71w52cr8f9wm6lybfa003w408lkrl6q9whs53hpp3pl5phhfvb";
url = "https://elpa.gnu.org/packages/transient-0.3.5.tar";
sha256 = "15dlj21gn0zxywic9wdcp5zc8skm1s170bq7smgkpd3p3lxslf68";
};
packageRequires = [ emacs ];
meta = {
@ -3949,6 +3949,21 @@
license = lib.licenses.free;
};
}) {};
vc-hgcmd = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "vc-hgcmd";
ename = "vc-hgcmd";
version = "1.14";
src = fetchurl {
url = "https://elpa.gnu.org/packages/vc-hgcmd-1.14.tar";
sha256 = "0pg6fg0znsmky3iwdpxn2sx5bbn72kw83s077000ilawi6zqwc2d";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/vc-hgcmd.html";
license = lib.licenses.free;
};
}) {};
vcard = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "vcard";
@ -4015,10 +4030,10 @@
elpaBuild {
pname = "vertico";
ename = "vertico";
version = "0.11";
version = "0.12";
src = fetchurl {
url = "https://elpa.gnu.org/packages/vertico-0.11.tar";
sha256 = "0hzwddkac85i449173az8crlksj9ivrqf969r81kbr45ksgr1ij6";
url = "https://elpa.gnu.org/packages/vertico-0.12.tar";
sha256 = "14qlc438bysg23wfj04zpvpraqzzi4jlz3r11vc56vd0k2hfmvmn";
};
packageRequires = [ emacs ];
meta = {

View File

@ -4,10 +4,10 @@
elpaBuild {
pname = "org";
ename = "org";
version = "20210607";
version = "20210628";
src = fetchurl {
url = "https://orgmode.org/elpa/org-20210607.tar";
sha256 = "178z9bnzcdaymnwxf0kkw1yzlzkj5dmdjjwdklc9qb9iv6rckfji";
url = "https://orgmode.org/elpa/org-20210628.tar";
sha256 = "1sn2yyynndk8qf43ss8bayll33r4ina8xfx4ywzcs3m1lm6xy1zl";
};
packageRequires = [];
meta = {
@ -19,10 +19,10 @@
elpaBuild {
pname = "org-plus-contrib";
ename = "org-plus-contrib";
version = "20210607";
version = "20210628";
src = fetchurl {
url = "https://orgmode.org/elpa/org-plus-contrib-20210607.tar";
sha256 = "03liivgfcmp0lh6p57bh2gyn85n3sc4p91y374kq8kzc7fzrgzyr";
url = "https://orgmode.org/elpa/org-plus-contrib-20210628.tar";
sha256 = "0r4kxp1hbhkwvi7939fglng8db4h4n7vigy8pd2gia3a02xcw8l5";
};
packageRequires = [];
meta = {

View File

@ -255,12 +255,12 @@ in
datagrip = buildDataGrip rec {
name = "datagrip-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "Your Swiss Army Knife for Databases and SQL";
license = lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/datagrip/${name}.tar.gz";
sha256 = "1znb4m7sv7xqi1mq3yw0m51m06wfwmhhxmvck0xkv8s0cfg18qim"; /* updated by script */
sha256 = "0lhi3vwhwb359va4sa17y071i03l4mfwqpsp7haqxjf900dcld7d"; /* updated by script */
};
wmClass = "jetbrains-datagrip";
update-channel = "DataGrip RELEASE";
@ -268,12 +268,12 @@ in
goland = buildGoland rec {
name = "goland-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "Up and Coming Go IDE";
license = lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/go/${name}.tar.gz";
sha256 = "0g20r7yn4r2h08wv3i8bnnma8x4jljixsbmfml8kixk0pzfhv4px"; /* updated by script */
sha256 = "0xy9k90v3kcm9sj48l809qn0vws4ygsxxyqwsg6y9a3r1raqgqxd"; /* updated by script */
};
wmClass = "jetbrains-goland";
update-channel = "GoLand RELEASE";
@ -281,12 +281,12 @@ in
idea-community = buildIdea rec {
name = "idea-community-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "Integrated Development Environment (IDE) by Jetbrains, community edition";
license = lib.licenses.asl20;
src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz";
sha256 = "03i5f6p0abr9yfs9fg90fg7hb1a7zar9q4d4iiag30cmndwpslg2"; /* updated by script */
sha256 = "1phpfa9i3k7g92ankmibp53c1469ifnb12g6s8gklln7v7xxakmi"; /* updated by script */
};
wmClass = "jetbrains-idea-ce";
update-channel = "IntelliJ IDEA RELEASE";
@ -294,12 +294,12 @@ in
idea-ultimate = buildIdea rec {
name = "idea-ultimate-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
license = lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIU-${version}-no-jbr.tar.gz";
sha256 = "0mw4acaik1bkr7gqbwgs3i8f8px8zw95hm1zxgd5gd5kh88n17x5"; /* updated by script */
sha256 = "13c7a96zbw05w1gy4ds4wzac853hdlnbflww2xaz60jnr1k24gnp"; /* updated by script */
};
wmClass = "jetbrains-idea";
update-channel = "IntelliJ IDEA RELEASE";
@ -320,12 +320,12 @@ in
phpstorm = buildPhpStorm rec {
name = "phpstorm-${version}";
version = "2021.1.3"; /* updated by script */
version = "2021.1.4"; /* updated by script */
description = "Professional IDE for Web and PHP developers";
license = lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/webide/PhpStorm-${version}.tar.gz";
sha256 = "05hjv1nz1b82bkakadjvsy23v0qv8fyni6h31lcg9198h1890f7v"; /* updated by script */
sha256 = "0p9a8l2bpjm25x4af1hlqhmw5xsirsfajznd6y723yqmjy8hs46l"; /* updated by script */
};
wmClass = "jetbrains-phpstorm";
update-channel = "PhpStorm RELEASE";
@ -333,12 +333,12 @@ in
pycharm-community = buildPycharm rec {
name = "pycharm-community-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "PyCharm Community Edition";
license = lib.licenses.asl20;
src = fetchurl {
url = "https://download.jetbrains.com/python/${name}.tar.gz";
sha256 = "0sp7w1xrl0y36dai08kqfd0jk06yr7jdbaf1a9f3fgxp5pmspxp1"; /* updated by script */
sha256 = "0c03grsrjydb6jcnbq1qi4158c14vni3znr7vysnbvldi8al6w8m"; /* updated by script */
};
wmClass = "jetbrains-pycharm-ce";
update-channel = "PyCharm RELEASE";
@ -346,12 +346,12 @@ in
pycharm-professional = buildPycharm rec {
name = "pycharm-professional-${version}";
version = "2021.1.2"; /* updated by script */
version = "2021.1.3"; /* updated by script */
description = "PyCharm Professional Edition";
license = lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/python/${name}.tar.gz";
sha256 = "0ny7rbl8g5azpqnlcq8l6bwh6hrp8rgp06lf4a8gdr9rpvw9xsqb"; /* updated by script */
sha256 = "01nwc9nprlyrwyij98px915w66g6vxbznsmmmg56rv3rvjvjp7yl"; /* updated by script */
};
wmClass = "jetbrains-pycharm";
update-channel = "PyCharm RELEASE";

View File

@ -14,7 +14,7 @@ sub semantic_less {
}
sub get_latest_versions {
my @channels = get("http://www.jetbrains.com/updates/updates.xml") =~ /(<channel .+?<\/channel>)/gs;
my @channels = get("https://www.jetbrains.com/updates/updates.xml") =~ /(<channel .+?<\/channel>)/gs;
my %h = {};
for my $ch (@channels) {
my ($id) = $ch =~ /^<channel id="[^"]+" name="([^"]+)"/;

View File

@ -2,6 +2,7 @@
, libuv, lua, ncurses, pkg-config
, unibilium, xsel, gperf
, libvterm-neovim
, tree-sitter
, glibcLocales ? null, procps ? null
# now defaults to false because some tests can be flaky (clipboard etc)
@ -31,13 +32,13 @@ let
in
stdenv.mkDerivation rec {
pname = "neovim-unwrapped";
version = "0.4.4";
version = "0.5.0";
src = fetchFromGitHub {
owner = "neovim";
repo = "neovim";
rev = "v${version}";
sha256 = "11zyj6jvkwas3n6w1ckj3pk6jf81z1g7ngg4smmwm7c27y2a6f2m";
sha256 = "0lgbf90sbachdag1zm9pmnlbn35964l3khs27qy4462qzpqyi9fi";
};
patches = [
@ -58,6 +59,7 @@ in
msgpack
ncurses
neovimLuaEnv
tree-sitter
unibilium
] ++ optional stdenv.isDarwin libiconv
++ optionals doCheck [ glibcLocales procps ]
@ -96,6 +98,7 @@ in
"-DGPERF_PRG=${gperf}/bin/gperf"
"-DLUA_PRG=${neovimLuaEnv.interpreter}"
"-DLIBLUV_LIBRARY=${luvpath}"
"-DUSE_BUNDLED=OFF"
]
++ optional doCheck "-DBUSTED_PRG=${neovimLuaEnv}/bin/busted"
++ optional (!lua.pkgs.isLuaJIT) "-DPREFER_LUA=ON"

View File

@ -1,8 +1,19 @@
{ ripgrep, git, fzf, makeWrapper, vim_configurable, vimPlugins, fetchFromGitHub
, lib, stdenv, formats, runCommand, spacevim_config ? import ./init.nix }:
{ ripgrep
, git
, fzf
, makeWrapper
, vim_configurable
, vimPlugins
, fetchFromGitHub
, lib
, stdenv
, formats
, runCommand
, spacevim_config ? import ./init.nix
}:
let
format = formats.toml {};
format = formats.toml { };
vim-customized = vim_configurable.customize {
name = "vim";
# Not clear at the moment how to import plugins such that
@ -14,17 +25,18 @@ let
mkdir -p $out
cp ${format.generate "init.toml" spacevim_config} $out/init.toml
'';
in stdenv.mkDerivation rec {
in
stdenv.mkDerivation rec {
pname = "spacevim";
version = "1.6.0";
version = "1.7.0";
src = fetchFromGitHub {
owner = "SpaceVim";
repo = "SpaceVim";
rev = "v${version}";
sha256 = "sha256-QQdtjEdbuzmf0Rw+u2ZltLihnJt8LqkfTrLDWLAnCLE=";
sha256 = "sha256-TmfPeaGkH1Wq2b5lB29PUYDVddJVN3mBuPAmu9EtiGY=";
};
nativeBuildInputs = [ makeWrapper vim-customized];
nativeBuildInputs = [ makeWrapper vim-customized ];
buildInputs = [ vim-customized ];
buildPhase = ''

View File

@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
buildInputs = [ flex bison zlib proj gdal libtiff libpng fftw sqlite cairo proj
readline ffmpeg_3 makeWrapper wxGTK30 netcdf geos postgresql libmysqlclient blas
libLAS proj-datumgrid ]
++ (with python2Packages; [ python dateutil wxPython30 numpy ]);
++ (with python2Packages; [ python python-dateutil wxPython30 numpy ]);
# On Darwin the installer tries to symlink the help files into a system
# directory

View File

@ -12,7 +12,7 @@ let
numpy
psycopg2
chardet
dateutil
python-dateutil
pyyaml
pytz
requests

View File

@ -7,12 +7,12 @@
}:
stdenv.mkDerivation rec {
version = "3.4.1";
version = "3.6.0";
pname = "darktable";
src = fetchurl {
url = "https://github.com/darktable-org/darktable/releases/download/release-${version}/darktable-${version}.tar.xz";
sha256 = "sha256-f8P4UdqbzXxQU+zQnyGqPrYQO+mKbFj1IBC28iF0lB4=";
sha256 = "sha256:0f8aqwkgw4gs97b5i4ygiqk5zilwq7ax7zwdd31r72zk98cd1g46";
};
nativeBuildInputs = [ cmake ninja llvm pkg-config intltool perl desktop-file-utils wrapGAppsHook ];

View File

@ -91,7 +91,7 @@ stdenv.mkDerivation rec {
homepage = "https://about.draw.io/";
license = licenses.asl20;
changelog = "https://github.com/jgraph/drawio-desktop/releases/tag/v${version}";
maintainers = with maintainers; [ danieldk ];
maintainers = with maintainers; [ ];
platforms = [ "x86_64-linux" ];
};
}

View File

@ -55,7 +55,7 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
psutil
pyxdg
arrow
dateutil
python-dateutil
easygui
colour
pymediainfo

View File

@ -107,7 +107,7 @@ stdenv.mkDerivation rec {
description = "Multi-platform password manager";
homepage = "https://1password.com/";
license = licenses.unfree;
maintainers = with maintainers; [ danieldk timstott savannidgerinel ];
maintainers = with maintainers; [ timstott savannidgerinel ];
platforms = [ "x86_64-linux" ];
};
}

View File

@ -77,7 +77,7 @@ mkDerivation rec {
cchardet
css-parser
cssselect
dateutil
python-dateutil
dnspython
feedparser
html2text

View File

@ -3,20 +3,20 @@
mkDerivation rec {
pname = "cura";
version = "4.9.0";
version = "4.10.0";
src = fetchFromGitHub {
owner = "Ultimaker";
repo = "Cura";
rev = version;
sha256 = "1q515qwrzla3ikbsjmk91y0nrbwih11jycgmd50lkrmnkh7qj0r2";
sha256 = "0v65xg31rw4kc7f98k8zz0kmhrp9m55k8ahblha9r1vr4krcf30z";
};
materials = fetchFromGitHub {
owner = "Ultimaker";
repo = "fdm_materials";
rev = version;
sha256 = "0hi9w1fsnazlr0vvxdr3alsdb8m1vjjfp5zhmlz4kyyxhsy3bc33";
sha256 = "0ykf14j4yx4cf12qw0d4bff9ixrx96m6wxqvi83sn721y7dsd2rs";
};
buildInputs = [ qtbase qtquickcontrols2 qtgraphicaleffects ];

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "curaengine";
version = "4.9.1";
version = "4.10.0";
src = fetchFromGitHub {
owner = "Ultimaker";
repo = "CuraEngine";
rev = version;
sha256 = "sha256-1hCjtnI1EnfyQ0QfU8qZoSLIjE5pyDYpu8H4J91cWYM=";
sha256 = "sha256-t5i6s0KKcaoMqzDxZ6JL1NyKP33uxWdmyziK3xh8q88=";
};
nativeBuildInputs = [ cmake ];

View File

@ -18,13 +18,13 @@
stdenv.mkDerivation rec {
pname = "dbeaver";
version = "21.1.1"; # When updating also update fetchedMavenDeps.sha256
version = "21.1.2"; # When updating also update fetchedMavenDeps.sha256
src = fetchFromGitHub {
owner = "dbeaver";
repo = "dbeaver";
rev = version;
sha256 = "sha256-enUwX+BxgPy4c1Vwo1+vN3lFYz4LgofgKvZOYuz/050=";
sha256 = "sha256-3q5LTllyqw7s8unJHTuasBCM4iaJ9lLpwgbXwBGUtIw=";
};
fetchedMavenDeps = stdenv.mkDerivation {
@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
dontFixup = true;
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "sha256-vNC+LmGEepZCepPodY3c783moReppqNw32d7AUuvBZc=";
outputHash = "sha256-QPDnIXP3yB1Dn0LBbBBLvRDbCyguWvG9Zzb1Vjh72UA=";
};
nativeBuildInputs = [

View File

@ -10,13 +10,13 @@
stdenv.mkDerivation rec {
pname = "free42";
version = "3.0.4";
version = "3.0.5";
src = fetchFromGitHub {
owner = "thomasokken";
repo = pname;
rev = "v${version}";
sha256 = "sha256-ZoW5gBAUp/5U8Is3Nhx+SHY4d0F3PGOS1/WOokKRnCU=";
sha256 = "sha256-ytRPIBE8KcuM+pyfdKt/b+Vi03x8nowdgZjSt8EddSc=";
};
nativeBuildInputs = [ copyDesktopItems pkg-config ];

View File

@ -20,7 +20,7 @@ buildPythonApplication rec {
'';
propagatedBuildInputs = [
dateutil gflags httplib2 parsedatetime six vobject
python-dateutil gflags httplib2 parsedatetime six vobject
google-api-python-client oauth2client uritemplate
libnotify
];

View File

@ -2,13 +2,13 @@
mkDerivation rec {
pname = "gpxsee";
version = "9.1";
version = "9.2";
src = fetchFromGitHub {
owner = "tumic0";
repo = "GPXSee";
rev = version;
sha256 = "sha256-szq1i2/NEtMK4paSkxtkKXc8yY8qGj2U/p6CzNIecAY=";
sha256 = "sha256-pU02Eaq6tB7X6EPOo8YAyryJRbSV3KebQv8VELxXaBw=";
};
patches = (substituteAll {

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "hugo";
version = "0.84.3";
version = "0.84.4";
src = fetchFromGitHub {
owner = "gohugoio";
repo = pname;
rev = "v${version}";
sha256 = "sha256-3SbF4JsanNup0JmtEoZlyu3SvMn01r+nhnPgIi/W8pA=";
sha256 = "sha256-nD2UBDSDG6OFfUvDBXCfhOCiJyFMP2pDXSlIESaEfqE=";
};
vendorSha256 = "sha256-ImXTOtN6kQL7Q8IBlmK7+i47cWtyZT0xcnQdCw3NvWM=";

View File

@ -9,16 +9,12 @@ with python3.pkgs; buildPythonApplication rec {
sha256 = "sha256-L92PwU/ll+Wn1unGPHho2WC07QIbVjxoSnHwcJDtpDI=";
};
patches = [
./skip-broken-test.patch
];
propagatedBuildInputs = [
atomicwrites
click
click-log
configobj
dateutil
python-dateutil
icalendar
lxml
pkgs.vdirsyncer
@ -31,16 +27,12 @@ with python3.pkgs; buildPythonApplication rec {
freezegun
];
nativeBuildInputs = [ setuptools-scm sphinx sphinxcontrib_newsfeed ];
checkInputs = [ pytest glibcLocales ];
checkInputs = [
glibcLocales
pytestCheckHook
];
LC_ALL = "en_US.UTF-8";
postPatch = ''
sed -i \
-e "s/Invalid value for \"ics\"/Invalid value for \\\'ics\\\'/" \
-e "s/Invalid value for \"\[ICS\]\"/Invalid value for \\\'\[ICS\]\\\'/" \
tests/cli_test.py
'';
postInstall = ''
# zsh completion
install -D misc/__khal $out/share/zsh/site-functions/__khal
@ -56,11 +48,13 @@ with python3.pkgs; buildPythonApplication rec {
doCheck = !stdenv.isAarch64;
checkPhase = ''
py.test -k "not test_vertical_month_abbr_fr and not test_vertical_month_unicode_weekdeays_gr \
and not test_event_different_timezones and not test_default_calendar and not test_birthdays \
and not test_birthdays_no_year"
'';
disabledTests = [
# This test is failing due to https://github.com/pimutils/khal/issues/1065
"test_print_ics_command"
# Mocking breaks in this testcase
"test_import_from_stdin"
];
meta = with lib; {
homepage = "http://lostpackets.de/khal/";

View File

@ -1,33 +0,0 @@
diff --git a/tests/cli_test.py b/tests/cli_test.py
index 5e354a5..d8fbcd5 100644
--- a/tests/cli_test.py
+++ b/tests/cli_test.py
@@ -493,6 +493,7 @@ def test_import_invalid_choice_and_prefix(runner):
assert result.output == '09.04.-09.04. An Event\n'
+@pytest.mark.skip(reason="Mocking breaks in this testcase")
def test_import_from_stdin(runner, monkeypatch):
ics_data = 'This is some really fake icalendar data'
diff --git a/tests/ui/test_editor.py b/tests/ui/test_editor.py
index 27b7fa5..5978d72 100644
--- a/tests/ui/test_editor.py
+++ b/tests/ui/test_editor.py
@@ -1,5 +1,7 @@
import datetime as dt
+import pytest
+
import icalendar
from khal.ui.editor import RecurrenceEditor, StartEndEditor
@@ -19,7 +21,7 @@ palette = {
'edit': 'blue',
}
-
+@pytest.mark.skip(reason="Mocking breaks in this testcase")
def test_popup(monkeypatch):
"""making sure the popup calendar gets callend with the right inital value

View File

@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
homepage = "https://code-industry.net/free-pdf-editor/";
license = licenses.unfreeRedistributable;
platforms = with platforms; [ "x86_64-linux" ];
maintainers = with maintainers; [ cmcdragonkai flokli ];
broken = true;
maintainers = with maintainers; [ cmcdragonkai ];
};
}

View File

@ -17,7 +17,7 @@
python3.pkgs.buildPythonApplication rec {
pname = "metadata-cleaner";
version = "1.0.6";
version = "1.0.7";
format = "other";
@ -25,7 +25,7 @@ python3.pkgs.buildPythonApplication rec {
owner = "rmnvgr";
repo = "metadata-cleaner";
rev = "v${version}";
sha256 = "0k9qnycaqxnmsjsyxqgip6xr5w9affzxjc4zyb38ajbq4arfq5wv";
sha256 = "sha256-HlP/QahVFCAct06pKanjozFqeyTdHoHanIemq5ID2CQ=";
};
nativeBuildInputs = [

View File

@ -0,0 +1,36 @@
{ stdenv
, lib
, fetchFromGitHub
, cmake
, pkg-config
, gtk3
, wrapGAppsHook
, jansson
, libgcrypt
, libzip
, libpng
, libcotp
, zbar
}:
stdenv.mkDerivation rec {
pname = "otpclient";
version = "2.4.4";
src = fetchFromGitHub {
owner = "paolostivanin";
repo = pname;
rev = "v${version}";
sha256 = "0zjvhcx9q8nsf97zikddxriky0kghi4j4i7312s94pl8c7kb4abr";
};
buildInputs = [ gtk3 jansson libgcrypt libzip libpng libcotp zbar ];
nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ];
meta = with lib; {
description = "Highly secure and easy to use OTP client written in C/GTK that supports both TOTP and HOTP";
homepage = "https://github.com/paolostivanin/OTPClient";
license = licenses.gpl3Only;
maintainers = with maintainers; [ alexbakker ];
};
}

View File

@ -29,7 +29,7 @@ python3Packages.buildPythonApplication rec {
pikepdf
img2pdf
setuptools
dateutil
python-dateutil
];
# incompatible with wrapGAppsHook

View File

@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
outputs = [ "bin" "out" "dev" "man" ];
depsBuildBuild = [ pkg-config ];
nativeBuildInputs = [ meson ninja pkg-config scdoc ];
buildInputs = [ systemd ];

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "slides";
version = "0.3.0";
version = "0.4.0";
src = fetchFromGitHub {
owner = "maaslalani";
repo = "slides";
rev = "v${version}";
sha256 = "00sml6b9q3df9dgl7fpsn6a3qkq6xklnbfvvblf91xdf4ssn7wrx";
sha256 = "15f4sn1zsqqhzxnmwb1igh8xhka6li31ygdqgbjvxzm93lkarxvs";
};
checkInputs = [

View File

@ -5,13 +5,13 @@
}:
let
version = "5.0.1";
version = "5.0.2";
subsurfaceSrc = (fetchFromGitHub {
owner = "Subsurface";
repo = "subsurface";
rev = "v${version}";
sha256 = "01r836ckvrmgprjf4cqxn2n3w5w4pa2fjrhspjndsspic8nwlrwg";
sha256 = "1yay06m8p9qp2ghrg8dxavdq55y09apcgdnb7rihgs3hq86k539n";
fetchSubmodules = true;
});

View File

@ -3,7 +3,7 @@
, buildPythonApplication
, click
, pyfiglet
, dateutil
, python-dateutil
, setuptools
}:
@ -18,7 +18,7 @@ buildPythonApplication rec {
owner = "trehn";
};
propagatedBuildInputs = [ dateutil click pyfiglet setuptools ];
propagatedBuildInputs = [ python-dateutil click pyfiglet setuptools ];
meta = with lib; {
description = "Starts a countdown to or from TIMESPEC";

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "tut";
version = "0.0.17";
version = "0.0.20";
src = fetchFromGitHub {
owner = "RasmusLindroth";
repo = pname;
rev = version;
sha256 = "0g4kbprsdjk2lbx81azdvz8kkhyk370id3622xxssr894v0i7iwj";
sha256 = "03jiv5m807z96796fbpi6ny22am3sq4jfni37fxbld05sxdzwcnd";
};
vendorSha256 = "1kf7ynmxrzvhl028b4nbz9h9v9x5srarsbynpgpp4vicmxqlvrmh";
vendorSha256 = "1in5b7ixnm5iizkzziqclvgaq87ccdh507amkgfhfy5sxsgbfb1g";
meta = with lib; {
description = "A TUI for Mastodon with vim inspired keys";

View File

@ -0,0 +1,41 @@
{ lib
, stdenv
, fetchFromGitHub
, libusb1
}:
stdenv.mkDerivation rec {
pname = "usb-reset";
# not tagged, but changelog has this with the date of the e9a9d6c commit
# and no significant change occured between bumping the version in the Makefile and that
# and the changes since then (up to ff822d8) seem snap related
version = "0.3";
src = fetchFromGitHub {
owner = "ralight";
repo = pname;
rev = "e9a9d6c4a533430e763e111a349efbba69e7a5bb";
sha256 = "0k9qmhqi206gcnv3z4vwya82g5nm225972ylf67zjiikk8pn8m0s";
};
buildInputs = [ libusb1 ];
postPatch = ''
substituteInPlace Makefile \
--replace /usr/include/libusb-1.0 ${libusb1.dev}/include/libusb-1.0
'';
makeFlags = [
"DESTDIR=${placeholder "out"}"
"prefix="
];
meta = with lib; {
description = "Perform a bus reset on a USB device using its vendor and product ID";
homepage = "https://github.com/ralight/usb-reset";
changelog = "https://github.com/ralight/usb-reset/blob/master/ChangeLog.txt";
license = licenses.mit;
maintainers = [ maintainers.evils ];
platforms = platforms.all;
};
}

View File

@ -2,7 +2,7 @@
, lib
, buildPythonApplication
, fetchFromGitHub
, dateutil
, python-dateutil
, pandas
, requests
, lxml
@ -36,7 +36,7 @@ buildPythonApplication rec {
propagatedBuildInputs = [
# from visidata/requirements.txt
# packages not (yet) present in nixpkgs are commented
dateutil
python-dateutil
pandas
requests
lxml

View File

@ -1,4 +1,4 @@
{ lib, fetchurl, buildPythonApplication, dateutil,
{ lib, fetchurl, buildPythonApplication, python-dateutil,
sqlalchemy, setproctitle, icalendar }:
buildPythonApplication rec {
@ -11,7 +11,7 @@ buildPythonApplication rec {
};
propagatedBuildInputs = [
dateutil
python-dateutil
sqlalchemy
setproctitle
icalendar

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "3proxy";
version = "0.9.3";
version = "0.9.4";
src = fetchFromGitHub {
owner = "z3APA3A";
repo = pname;
rev = version;
sha256 = "9aopwyz0U2bYTvx5YWLJo9EE8Xfb51IOguHRJodjpm8=";
sha256 = "sha256-4bLlQ/ULvpjs6fr19yBBln5mRRc+yj+zVLiTs1e/Ypc=";
};
makeFlags = [

View File

@ -90,11 +90,11 @@ in
stdenv.mkDerivation rec {
pname = "brave";
version = "1.26.67";
version = "1.26.74";
src = fetchurl {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
sha256 = "Kg6ExXZYdSkyBoivu9h4blytHN9hOc4bUSuFR+1YZOY=";
sha256 = "ULmoUXyPWHCewK4FPP7SX1Ena6n0aM/EWR7ZnMN1ztY=";
};
dontConfigure = true;

View File

@ -62,7 +62,7 @@ mkChromiumDerivation (base: rec {
-e '/\[Desktop Entry\]/a\' \
-e 'StartupWMClass=chromium-browser' \
$out/share/applications/chromium-browser.desktop
'' + lib.optionalString (channel == "dev") ''
'' + lib.optionalString (channel != "stable") ''
cp -v "$buildPath/crashpad_handler" "$libExecPath/"
'';

View File

@ -149,9 +149,11 @@ in stdenv.mkDerivation {
+ "chromium${suffix}-${version}";
inherit version;
buildInputs = [
nativeBuildInputs = [
makeWrapper ed
];
buildInputs = [
# needed for GSETTINGS_SCHEMAS_PATH
gsettings-desktop-schemas glib gtk3

View File

@ -18,9 +18,9 @@
}
},
"beta": {
"version": "92.0.4515.70",
"sha256": "06yhpxr5bg0gx7hmrhc6zg4gr1d9s34y2rb98rpl4dilmc548i6q",
"sha256bin64": "1fkakh1r87pg5nr101m6v86y8iyyfba8vnzrg0229kcar7v8wzf7",
"version": "92.0.4515.80",
"sha256": "142v8y275mysgksvfprc83a7r1dlcnb5rqi8a451fmfnj6wrsq8i",
"sha256bin64": "0sz2fvg6l7q7syc5pysa246p03sganmgjdfvind42i8cqxw8gycp",
"deps": {
"gn": {
"version": "2021-05-07",

View File

@ -203,6 +203,7 @@ stdenv.mkDerivation {
url = "http://www.mozilla.org/en-US/foundation/trademarks/policy/";
};
platforms = builtins.attrNames mozillaPlatforms;
timeout = 86400; # 24 hours (increased from the Hydra default of 10h, c.f. #129115)
maintainers = with maintainers; [ taku0 lovesegfault ];
};
}

View File

@ -2,13 +2,13 @@
mkYarnPackage rec {
pname = "vieb";
version = "5.2.0";
version = "5.3.0";
src = fetchFromGitHub {
owner = "Jelmerro";
repo = pname;
rev = version;
sha256 = "sha256-wLaOqjDxgjfv4+TJeLE0dkrhfdnNSjiDqtFcHTm8uG4=";
sha256 = "sha256-NKWqSnUO8SScEodHYSptRHwVNOa5C4M61ac85d+wYK0=";
};
packageJSON = ./package.json;

View File

@ -1,7 +1,7 @@
{
"name": "vieb",
"productName": "Vieb",
"version": "5.2.0",
"version": "5.3.0",
"description": "Vim Inspired Electron Browser",
"main": "app/index.js",
"scripts": {
@ -29,18 +29,18 @@
"license": "GPL-3.0-or-later",
"devDependencies": {
"archiver": "5.3.0",
"electron": "13.1.2",
"electron": "13.1.4",
"electron-builder": "22.11.7",
"eslint": "7.29.0",
"eslint-plugin-compat": "3.9.0",
"eslint-plugin-sort-keys-fix": "1.1.1",
"jest-environment-jsdom": "27.0.3",
"jest": "27.0.4"
"jest": "27.0.6",
"jest-environment-jsdom": "27.0.6"
},
"dependencies": {
"7zip-bin": "5.1.1",
"@cliqz/adblocker-electron": "1.22.1",
"@cliqz/adblocker-electron-preload": "1.22.1",
"@cliqz/adblocker-electron": "1.22.2",
"@cliqz/adblocker-electron-preload": "1.22.2",
"is-svg": "4.3.1",
"rimraf": "3.0.2"
},

File diff suppressed because it is too large Load Diff

View File

@ -26,11 +26,11 @@
};
}
{
name = "_babel_compat_data___compat_data_7.14.5.tgz";
name = "_babel_compat_data___compat_data_7.14.7.tgz";
path = fetchurl {
name = "_babel_compat_data___compat_data_7.14.5.tgz";
url = "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz";
sha1 = "8ef4c18e58e801c5c95d3c1c0f2874a2680fadea";
name = "_babel_compat_data___compat_data_7.14.7.tgz";
url = "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz";
sha1 = "7b047d7a3a89a67d2258dc61f604f098f1bc7e08";
};
}
{
@ -82,11 +82,11 @@
};
}
{
name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.14.5.tgz";
name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.14.7.tgz";
path = fetchurl {
name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.14.5.tgz";
url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz";
sha1 = "d5c70e4ad13b402c95156c7a53568f504e2fb7b8";
name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.14.7.tgz";
url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz";
sha1 = "97e56244beb94211fe277bd818e3a329c66f7970";
};
}
{
@ -178,11 +178,11 @@
};
}
{
name = "_babel_parser___parser_7.14.6.tgz";
name = "_babel_parser___parser_7.14.7.tgz";
path = fetchurl {
name = "_babel_parser___parser_7.14.6.tgz";
url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz";
sha1 = "d85cc68ca3cac84eae384c06f032921f5227f4b2";
name = "_babel_parser___parser_7.14.7.tgz";
url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz";
sha1 = "6099720c8839ca865a2637e6c85852ead0bdb595";
};
}
{
@ -298,11 +298,11 @@
};
}
{
name = "_babel_traverse___traverse_7.14.5.tgz";
name = "_babel_traverse___traverse_7.14.7.tgz";
path = fetchurl {
name = "_babel_traverse___traverse_7.14.5.tgz";
url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz";
sha1 = "c111b0f58afab4fea3d3385a406f692748c59870";
name = "_babel_traverse___traverse_7.14.7.tgz";
url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz";
sha1 = "64007c9774cfdc3abd23b0780bc18a3ce3631753";
};
}
{
@ -329,14 +329,6 @@
sha1 = "643849d5f08c167eb84a2e7e3f1f9fbc41a3889b";
};
}
{
name = "_cliqz_adblocker_electron_preload___adblocker_electron_preload_1.22.1.tgz";
path = fetchurl {
name = "_cliqz_adblocker_electron_preload___adblocker_electron_preload_1.22.1.tgz";
url = "https://registry.yarnpkg.com/@cliqz/adblocker-electron-preload/-/adblocker-electron-preload-1.22.1.tgz";
sha1 = "8ce8c18d0ce5f7afa7c1dfe1f4cba30ada86f4af";
};
}
{
name = "_cliqz_adblocker_electron_preload___adblocker_electron_preload_1.22.2.tgz";
path = fetchurl {
@ -346,11 +338,11 @@
};
}
{
name = "_cliqz_adblocker_electron___adblocker_electron_1.22.1.tgz";
name = "_cliqz_adblocker_electron___adblocker_electron_1.22.2.tgz";
path = fetchurl {
name = "_cliqz_adblocker_electron___adblocker_electron_1.22.1.tgz";
url = "https://registry.yarnpkg.com/@cliqz/adblocker-electron/-/adblocker-electron-1.22.1.tgz";
sha1 = "13fe6de4be0c3beb2851634b27ea1223d10ca92b";
name = "_cliqz_adblocker_electron___adblocker_electron_1.22.2.tgz";
url = "https://registry.yarnpkg.com/@cliqz/adblocker-electron/-/adblocker-electron-1.22.2.tgz";
sha1 = "85af3b49f7f653e6fb0d008b6523e3b3ba0dd41e";
};
}
{
@ -418,91 +410,91 @@
};
}
{
name = "_jest_console___console_27.0.2.tgz";
name = "_jest_console___console_27.0.6.tgz";
path = fetchurl {
name = "_jest_console___console_27.0.2.tgz";
url = "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz";
sha1 = "b8eeff8f21ac51d224c851e1729d2630c18631e6";
name = "_jest_console___console_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz";
sha1 = "3eb72ea80897495c3d73dd97aab7f26770e2260f";
};
}
{
name = "_jest_core___core_27.0.4.tgz";
name = "_jest_core___core_27.0.6.tgz";
path = fetchurl {
name = "_jest_core___core_27.0.4.tgz";
url = "https://registry.yarnpkg.com/@jest/core/-/core-27.0.4.tgz";
sha1 = "679bf9ac07900da2ddbb9667bb1afa8029038f53";
name = "_jest_core___core_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz";
sha1 = "c5f642727a0b3bf0f37c4b46c675372d0978d4a1";
};
}
{
name = "_jest_environment___environment_27.0.3.tgz";
name = "_jest_environment___environment_27.0.6.tgz";
path = fetchurl {
name = "_jest_environment___environment_27.0.3.tgz";
url = "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.3.tgz";
sha1 = "68769b1dfdd213e3456169d64fbe9bd63a5fda92";
name = "_jest_environment___environment_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz";
sha1 = "ee293fe996db01d7d663b8108fa0e1ff436219d2";
};
}
{
name = "_jest_fake_timers___fake_timers_27.0.3.tgz";
name = "_jest_fake_timers___fake_timers_27.0.6.tgz";
path = fetchurl {
name = "_jest_fake_timers___fake_timers_27.0.3.tgz";
url = "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.3.tgz";
sha1 = "9899ba6304cc636734c74478df502e18136461dd";
name = "_jest_fake_timers___fake_timers_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz";
sha1 = "cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df";
};
}
{
name = "_jest_globals___globals_27.0.3.tgz";
name = "_jest_globals___globals_27.0.6.tgz";
path = fetchurl {
name = "_jest_globals___globals_27.0.3.tgz";
url = "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.3.tgz";
sha1 = "1cf8933b7791bba0b99305cbf39fd4d2e3fe4060";
name = "_jest_globals___globals_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz";
sha1 = "48e3903f99a4650673d8657334d13c9caf0e8f82";
};
}
{
name = "_jest_reporters___reporters_27.0.4.tgz";
name = "_jest_reporters___reporters_27.0.6.tgz";
path = fetchurl {
name = "_jest_reporters___reporters_27.0.4.tgz";
url = "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.4.tgz";
sha1 = "95609b1be97afb80d55d8aa3d7c3179c15810e65";
name = "_jest_reporters___reporters_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz";
sha1 = "91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00";
};
}
{
name = "_jest_source_map___source_map_27.0.1.tgz";
name = "_jest_source_map___source_map_27.0.6.tgz";
path = fetchurl {
name = "_jest_source_map___source_map_27.0.1.tgz";
url = "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz";
sha1 = "2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4";
name = "_jest_source_map___source_map_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz";
sha1 = "be9e9b93565d49b0548b86e232092491fb60551f";
};
}
{
name = "_jest_test_result___test_result_27.0.2.tgz";
name = "_jest_test_result___test_result_27.0.6.tgz";
path = fetchurl {
name = "_jest_test_result___test_result_27.0.2.tgz";
url = "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz";
sha1 = "0451049e32ceb609b636004ccc27c8fa22263f10";
name = "_jest_test_result___test_result_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz";
sha1 = "3fa42015a14e4fdede6acd042ce98c7f36627051";
};
}
{
name = "_jest_test_sequencer___test_sequencer_27.0.4.tgz";
name = "_jest_test_sequencer___test_sequencer_27.0.6.tgz";
path = fetchurl {
name = "_jest_test_sequencer___test_sequencer_27.0.4.tgz";
url = "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz";
sha1 = "976493b277594d81e589896f0ed21f198308928a";
name = "_jest_test_sequencer___test_sequencer_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz";
sha1 = "80a913ed7a1130545b1cd777ff2735dd3af5d34b";
};
}
{
name = "_jest_transform___transform_27.0.2.tgz";
name = "_jest_transform___transform_27.0.6.tgz";
path = fetchurl {
name = "_jest_transform___transform_27.0.2.tgz";
url = "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.2.tgz";
sha1 = "b073b7c589e3f4b842102468875def2bb722d6b5";
name = "_jest_transform___transform_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz";
sha1 = "189ad7107413208f7600f4719f81dd2f7278cc95";
};
}
{
name = "_jest_types___types_27.0.2.tgz";
name = "_jest_types___types_27.0.6.tgz";
path = fetchurl {
name = "_jest_types___types_27.0.2.tgz";
url = "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz";
sha1 = "e153d6c46bda0f2589f0702b071f9898c7bbd37e";
name = "_jest_types___types_27.0.6.tgz";
url = "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz";
sha1 = "9a992bc517e0c49f035938b8549719c2de40706b";
};
}
{
@ -642,11 +634,11 @@
};
}
{
name = "_types_babel__traverse___babel__traverse_7.11.1.tgz";
name = "_types_babel__traverse___babel__traverse_7.14.0.tgz";
path = fetchurl {
name = "_types_babel__traverse___babel__traverse_7.11.1.tgz";
url = "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz";
sha1 = "654f6c4f67568e24c23b367e947098c6206fa639";
name = "_types_babel__traverse___babel__traverse_7.14.0.tgz";
url = "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.0.tgz";
sha1 = "a34277cf8acbd3185ea74129e1f100491eb1da7f";
};
}
{
@ -666,11 +658,11 @@
};
}
{
name = "_types_filesystem___filesystem_0.0.30.tgz";
name = "_types_filesystem___filesystem_0.0.31.tgz";
path = fetchurl {
name = "_types_filesystem___filesystem_0.0.30.tgz";
url = "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz";
sha1 = "a7373a2edf34d13e298baf7ee1101f738b2efb7e";
name = "_types_filesystem___filesystem_0.0.31.tgz";
url = "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.31.tgz";
sha1 = "121a1ded274a2dc731d5e0d90163a920ad6a9ef1";
};
}
{
@ -754,19 +746,19 @@
};
}
{
name = "_types_node___node_15.12.4.tgz";
name = "_types_node___node_15.12.5.tgz";
path = fetchurl {
name = "_types_node___node_15.12.4.tgz";
url = "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz";
sha1 = "e1cf817d70a1e118e81922c4ff6683ce9d422e26";
name = "_types_node___node_15.12.5.tgz";
url = "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz";
sha1 = "9a78318a45d75c9523d2396131bd3cca54b2d185";
};
}
{
name = "_types_node___node_14.17.3.tgz";
name = "_types_node___node_14.17.4.tgz";
path = fetchurl {
name = "_types_node___node_14.17.3.tgz";
url = "https://registry.yarnpkg.com/@types/node/-/node-14.17.3.tgz";
sha1 = "6d327abaa4be34a74e421ed6409a0ae2f47f4c3d";
name = "_types_node___node_14.17.4.tgz";
url = "https://registry.yarnpkg.com/@types/node/-/node-14.17.4.tgz";
sha1 = "218712242446fc868d0e007af29a4408c7765bc0";
};
}
{
@ -858,11 +850,11 @@
};
}
{
name = "acorn___acorn_8.4.0.tgz";
name = "acorn___acorn_8.4.1.tgz";
path = fetchurl {
name = "acorn___acorn_8.4.0.tgz";
url = "https://registry.yarnpkg.com/acorn/-/acorn-8.4.0.tgz";
sha1 = "af53266e698d7cffa416714b503066a82221be60";
name = "acorn___acorn_8.4.1.tgz";
url = "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz";
sha1 = "56c36251fc7cabc7096adc18f05afe814321a28c";
};
}
{
@ -1098,11 +1090,11 @@
};
}
{
name = "babel_jest___babel_jest_27.0.2.tgz";
name = "babel_jest___babel_jest_27.0.6.tgz";
path = fetchurl {
name = "babel_jest___babel_jest_27.0.2.tgz";
url = "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz";
sha1 = "7dc18adb01322acce62c2af76ea2c7cd186ade37";
name = "babel_jest___babel_jest_27.0.6.tgz";
url = "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz";
sha1 = "e99c6e0577da2655118e3608b68761a5a69bd0d8";
};
}
{
@ -1114,11 +1106,11 @@
};
}
{
name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_27.0.1.tgz";
name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_27.0.6.tgz";
path = fetchurl {
name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_27.0.1.tgz";
url = "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz";
sha1 = "a6d10e484c93abff0f4e95f437dad26e5736ea11";
name = "babel_plugin_jest_hoist___babel_plugin_jest_hoist_27.0.6.tgz";
url = "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz";
sha1 = "f7c6b3d764af21cb4a2a1ab6870117dbde15b456";
};
}
{
@ -1130,11 +1122,11 @@
};
}
{
name = "babel_preset_jest___babel_preset_jest_27.0.1.tgz";
name = "babel_preset_jest___babel_preset_jest_27.0.6.tgz";
path = fetchurl {
name = "babel_preset_jest___babel_preset_jest_27.0.1.tgz";
url = "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz";
sha1 = "7a50c75d16647c23a2cf5158d5bb9eb206b10e20";
name = "babel_preset_jest___babel_preset_jest_27.0.6.tgz";
url = "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz";
sha1 = "909ef08e9f24a4679768be2f60a3df0856843f9d";
};
}
{
@ -1322,11 +1314,11 @@
};
}
{
name = "caniuse_lite___caniuse_lite_1.0.30001239.tgz";
name = "caniuse_lite___caniuse_lite_1.0.30001241.tgz";
path = fetchurl {
name = "caniuse_lite___caniuse_lite_1.0.30001239.tgz";
url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz";
sha1 = "66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8";
name = "caniuse_lite___caniuse_lite_1.0.30001241.tgz";
url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz";
sha1 = "cd3fae47eb3d7691692b406568d7a3e5b23c7598";
};
}
{
@ -1554,11 +1546,11 @@
};
}
{
name = "core_js___core_js_3.15.0.tgz";
name = "core_js___core_js_3.15.2.tgz";
path = fetchurl {
name = "core_js___core_js_3.15.0.tgz";
url = "https://registry.yarnpkg.com/core-js/-/core-js-3.15.0.tgz";
sha1 = "db9554ebce0b6fd90dc9b1f2465c841d2d055044";
name = "core_js___core_js_3.15.2.tgz";
url = "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz";
sha1 = "740660d2ff55ef34ce664d7e2455119c5bdd3d61";
};
}
{
@ -1666,11 +1658,11 @@
};
}
{
name = "decimal.js___decimal.js_10.2.1.tgz";
name = "decimal.js___decimal.js_10.3.1.tgz";
path = fetchurl {
name = "decimal.js___decimal.js_10.2.1.tgz";
url = "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz";
sha1 = "238ae7b0f0c793d3e3cea410108b35a2c01426a3";
name = "decimal.js___decimal.js_10.3.1.tgz";
url = "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz";
sha1 = "d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783";
};
}
{
@ -1754,11 +1746,11 @@
};
}
{
name = "diff_sequences___diff_sequences_27.0.1.tgz";
name = "diff_sequences___diff_sequences_27.0.6.tgz";
path = fetchurl {
name = "diff_sequences___diff_sequences_27.0.1.tgz";
url = "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.1.tgz";
sha1 = "9c9801d52ed5f576ff0a20e3022a13ee6e297e7c";
name = "diff_sequences___diff_sequences_27.0.6.tgz";
url = "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz";
sha1 = "3305cb2e55a033924054695cc66019fd7f8e5723";
};
}
{
@ -1858,19 +1850,19 @@
};
}
{
name = "electron_to_chromium___electron_to_chromium_1.3.752.tgz";
name = "electron_to_chromium___electron_to_chromium_1.3.763.tgz";
path = fetchurl {
name = "electron_to_chromium___electron_to_chromium_1.3.752.tgz";
url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz";
sha1 = "0728587f1b9b970ec9ffad932496429aef750d09";
name = "electron_to_chromium___electron_to_chromium_1.3.763.tgz";
url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.763.tgz";
sha1 = "93f6f02506d099941f557b9db9ba50b30215bf15";
};
}
{
name = "electron___electron_13.1.2.tgz";
name = "electron___electron_13.1.4.tgz";
path = fetchurl {
name = "electron___electron_13.1.2.tgz";
url = "https://registry.yarnpkg.com/electron/-/electron-13.1.2.tgz";
sha1 = "8c9abf9015766c9cbc16f10c99282d00d6ae1b90";
name = "electron___electron_13.1.4.tgz";
url = "https://registry.yarnpkg.com/electron/-/electron-13.1.4.tgz";
sha1 = "6d20d932a0651c3cba9f09a3d08cbaf5b69aa84b";
};
}
{
@ -2122,11 +2114,11 @@
};
}
{
name = "expect___expect_27.0.2.tgz";
name = "expect___expect_27.0.6.tgz";
path = fetchurl {
name = "expect___expect_27.0.2.tgz";
url = "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz";
sha1 = "e66ca3a4c9592f1c019fa1d46459a9d2084f3422";
name = "expect___expect_27.0.6.tgz";
url = "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz";
sha1 = "a4d74fbe27222c718fff68ef49d78e26a8fd4c05";
};
}
{
@ -2866,131 +2858,131 @@
};
}
{
name = "jest_changed_files___jest_changed_files_27.0.2.tgz";
name = "jest_changed_files___jest_changed_files_27.0.6.tgz";
path = fetchurl {
name = "jest_changed_files___jest_changed_files_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz";
sha1 = "997253042b4a032950fc5f56abf3c5d1f8560801";
name = "jest_changed_files___jest_changed_files_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz";
sha1 = "bed6183fcdea8a285482e3b50a9a7712d49a7a8b";
};
}
{
name = "jest_circus___jest_circus_27.0.4.tgz";
name = "jest_circus___jest_circus_27.0.6.tgz";
path = fetchurl {
name = "jest_circus___jest_circus_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.4.tgz";
sha1 = "3b261514ee3b3da33def736a6352c98ff56bb6e6";
name = "jest_circus___jest_circus_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz";
sha1 = "dd4df17c4697db6a2c232aaad4e9cec666926668";
};
}
{
name = "jest_cli___jest_cli_27.0.4.tgz";
name = "jest_cli___jest_cli_27.0.6.tgz";
path = fetchurl {
name = "jest_cli___jest_cli_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.4.tgz";
sha1 = "491b12c754c0d7c6873b13a66f26b3a80a852910";
name = "jest_cli___jest_cli_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz";
sha1 = "d021e5f4d86d6a212450d4c7b86cb219f1e6864f";
};
}
{
name = "jest_config___jest_config_27.0.4.tgz";
name = "jest_config___jest_config_27.0.6.tgz";
path = fetchurl {
name = "jest_config___jest_config_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.4.tgz";
sha1 = "c4f41378acf40ca77860fb4e213b12109d87b8cf";
name = "jest_config___jest_config_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz";
sha1 = "119fb10f149ba63d9c50621baa4f1f179500277f";
};
}
{
name = "jest_diff___jest_diff_27.0.2.tgz";
name = "jest_diff___jest_diff_27.0.6.tgz";
path = fetchurl {
name = "jest_diff___jest_diff_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.2.tgz";
sha1 = "f315b87cee5dc134cf42c2708ab27375cc3f5a7e";
name = "jest_diff___jest_diff_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz";
sha1 = "4a7a19ee6f04ad70e0e3388f35829394a44c7b5e";
};
}
{
name = "jest_docblock___jest_docblock_27.0.1.tgz";
name = "jest_docblock___jest_docblock_27.0.6.tgz";
path = fetchurl {
name = "jest_docblock___jest_docblock_27.0.1.tgz";
url = "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz";
sha1 = "bd9752819b49fa4fab1a50b73eb58c653b962e8b";
name = "jest_docblock___jest_docblock_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz";
sha1 = "cc78266acf7fe693ca462cbbda0ea4e639e4e5f3";
};
}
{
name = "jest_each___jest_each_27.0.2.tgz";
name = "jest_each___jest_each_27.0.6.tgz";
path = fetchurl {
name = "jest_each___jest_each_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz";
sha1 = "865ddb4367476ced752167926b656fa0dcecd8c7";
name = "jest_each___jest_each_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz";
sha1 = "cee117071b04060158dc8d9a66dc50ad40ef453b";
};
}
{
name = "jest_environment_jsdom___jest_environment_jsdom_27.0.3.tgz";
name = "jest_environment_jsdom___jest_environment_jsdom_27.0.6.tgz";
path = fetchurl {
name = "jest_environment_jsdom___jest_environment_jsdom_27.0.3.tgz";
url = "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz";
sha1 = "ed73e913ddc03864eb9f934b5cbabf1b63504e2e";
name = "jest_environment_jsdom___jest_environment_jsdom_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz";
sha1 = "f66426c4c9950807d0a9f209c590ce544f73291f";
};
}
{
name = "jest_environment_node___jest_environment_node_27.0.3.tgz";
name = "jest_environment_node___jest_environment_node_27.0.6.tgz";
path = fetchurl {
name = "jest_environment_node___jest_environment_node_27.0.3.tgz";
url = "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.3.tgz";
sha1 = "b4acb3679d2552a4215732cab8b0ca7ec4398ee0";
name = "jest_environment_node___jest_environment_node_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz";
sha1 = "a6699b7ceb52e8d68138b9808b0c404e505f3e07";
};
}
{
name = "jest_get_type___jest_get_type_27.0.1.tgz";
name = "jest_get_type___jest_get_type_27.0.6.tgz";
path = fetchurl {
name = "jest_get_type___jest_get_type_27.0.1.tgz";
url = "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz";
sha1 = "34951e2b08c8801eb28559d7eb732b04bbcf7815";
name = "jest_get_type___jest_get_type_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz";
sha1 = "0eb5c7f755854279ce9b68a9f1a4122f69047cfe";
};
}
{
name = "jest_haste_map___jest_haste_map_27.0.2.tgz";
name = "jest_haste_map___jest_haste_map_27.0.6.tgz";
path = fetchurl {
name = "jest_haste_map___jest_haste_map_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.2.tgz";
sha1 = "3f1819400c671237e48b4d4b76a80a0dbed7577f";
name = "jest_haste_map___jest_haste_map_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz";
sha1 = "4683a4e68f6ecaa74231679dca237279562c8dc7";
};
}
{
name = "jest_jasmine2___jest_jasmine2_27.0.4.tgz";
name = "jest_jasmine2___jest_jasmine2_27.0.6.tgz";
path = fetchurl {
name = "jest_jasmine2___jest_jasmine2_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz";
sha1 = "c669519ccf4904a485338555e1e66cad36bb0670";
name = "jest_jasmine2___jest_jasmine2_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz";
sha1 = "fd509a9ed3d92bd6edb68a779f4738b100655b37";
};
}
{
name = "jest_leak_detector___jest_leak_detector_27.0.2.tgz";
name = "jest_leak_detector___jest_leak_detector_27.0.6.tgz";
path = fetchurl {
name = "jest_leak_detector___jest_leak_detector_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz";
sha1 = "ce19aa9dbcf7a72a9d58907a970427506f624e69";
name = "jest_leak_detector___jest_leak_detector_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz";
sha1 = "545854275f85450d4ef4b8fe305ca2a26450450f";
};
}
{
name = "jest_matcher_utils___jest_matcher_utils_27.0.2.tgz";
name = "jest_matcher_utils___jest_matcher_utils_27.0.6.tgz";
path = fetchurl {
name = "jest_matcher_utils___jest_matcher_utils_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz";
sha1 = "f14c060605a95a466cdc759acc546c6f4cbfc4f0";
name = "jest_matcher_utils___jest_matcher_utils_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz";
sha1 = "2a8da1e86c620b39459f4352eaa255f0d43e39a9";
};
}
{
name = "jest_message_util___jest_message_util_27.0.2.tgz";
name = "jest_message_util___jest_message_util_27.0.6.tgz";
path = fetchurl {
name = "jest_message_util___jest_message_util_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz";
sha1 = "181c9b67dff504d8f4ad15cba10d8b80f272048c";
name = "jest_message_util___jest_message_util_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz";
sha1 = "158bcdf4785706492d164a39abca6a14da5ab8b5";
};
}
{
name = "jest_mock___jest_mock_27.0.3.tgz";
name = "jest_mock___jest_mock_27.0.6.tgz";
path = fetchurl {
name = "jest_mock___jest_mock_27.0.3.tgz";
url = "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz";
sha1 = "5591844f9192b3335c0dca38e8e45ed297d4d23d";
name = "jest_mock___jest_mock_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz";
sha1 = "0efdd40851398307ba16778728f6d34d583e3467";
};
}
{
@ -3002,99 +2994,99 @@
};
}
{
name = "jest_regex_util___jest_regex_util_27.0.1.tgz";
name = "jest_regex_util___jest_regex_util_27.0.6.tgz";
path = fetchurl {
name = "jest_regex_util___jest_regex_util_27.0.1.tgz";
url = "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz";
sha1 = "69d4b1bf5b690faa3490113c47486ed85dd45b68";
name = "jest_regex_util___jest_regex_util_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz";
sha1 = "02e112082935ae949ce5d13b2675db3d8c87d9c5";
};
}
{
name = "jest_resolve_dependencies___jest_resolve_dependencies_27.0.4.tgz";
name = "jest_resolve_dependencies___jest_resolve_dependencies_27.0.6.tgz";
path = fetchurl {
name = "jest_resolve_dependencies___jest_resolve_dependencies_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz";
sha1 = "a07a242d70d668afd3fcf7f4270755eebb1fe579";
name = "jest_resolve_dependencies___jest_resolve_dependencies_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz";
sha1 = "3e619e0ef391c3ecfcf6ef4056207a3d2be3269f";
};
}
{
name = "jest_resolve___jest_resolve_27.0.4.tgz";
name = "jest_resolve___jest_resolve_27.0.6.tgz";
path = fetchurl {
name = "jest_resolve___jest_resolve_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.4.tgz";
sha1 = "8a27bc3f2f00c8ea28f3bc99bbf6f468300a703d";
name = "jest_resolve___jest_resolve_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz";
sha1 = "e90f436dd4f8fbf53f58a91c42344864f8e55bff";
};
}
{
name = "jest_runner___jest_runner_27.0.4.tgz";
name = "jest_runner___jest_runner_27.0.6.tgz";
path = fetchurl {
name = "jest_runner___jest_runner_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.4.tgz";
sha1 = "2787170a9509b792ae129794f6944d27d5d12a4f";
name = "jest_runner___jest_runner_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz";
sha1 = "1325f45055539222bbc7256a6976e993ad2f9520";
};
}
{
name = "jest_runtime___jest_runtime_27.0.4.tgz";
name = "jest_runtime___jest_runtime_27.0.6.tgz";
path = fetchurl {
name = "jest_runtime___jest_runtime_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.4.tgz";
sha1 = "2e4a6aa77cac32ac612dfe12768387a8aa15c2f0";
name = "jest_runtime___jest_runtime_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz";
sha1 = "45877cfcd386afdd4f317def551fc369794c27c9";
};
}
{
name = "jest_serializer___jest_serializer_27.0.1.tgz";
name = "jest_serializer___jest_serializer_27.0.6.tgz";
path = fetchurl {
name = "jest_serializer___jest_serializer_27.0.1.tgz";
url = "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz";
sha1 = "2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020";
name = "jest_serializer___jest_serializer_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz";
sha1 = "93a6c74e0132b81a2d54623251c46c498bb5bec1";
};
}
{
name = "jest_snapshot___jest_snapshot_27.0.4.tgz";
name = "jest_snapshot___jest_snapshot_27.0.6.tgz";
path = fetchurl {
name = "jest_snapshot___jest_snapshot_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.4.tgz";
sha1 = "2b96e22ca90382b3e93bd0aae2ce4c78bf51fb5b";
name = "jest_snapshot___jest_snapshot_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz";
sha1 = "f4e6b208bd2e92e888344d78f0f650bcff05a4bf";
};
}
{
name = "jest_util___jest_util_27.0.2.tgz";
name = "jest_util___jest_util_27.0.6.tgz";
path = fetchurl {
name = "jest_util___jest_util_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz";
sha1 = "fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7";
name = "jest_util___jest_util_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz";
sha1 = "e8e04eec159de2f4d5f57f795df9cdc091e50297";
};
}
{
name = "jest_validate___jest_validate_27.0.2.tgz";
name = "jest_validate___jest_validate_27.0.6.tgz";
path = fetchurl {
name = "jest_validate___jest_validate_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz";
sha1 = "7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5";
name = "jest_validate___jest_validate_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz";
sha1 = "930a527c7a951927df269f43b2dc23262457e2a6";
};
}
{
name = "jest_watcher___jest_watcher_27.0.2.tgz";
name = "jest_watcher___jest_watcher_27.0.6.tgz";
path = fetchurl {
name = "jest_watcher___jest_watcher_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz";
sha1 = "dab5f9443e2d7f52597186480731a8c6335c5deb";
name = "jest_watcher___jest_watcher_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz";
sha1 = "89526f7f9edf1eac4e4be989bcb6dec6b8878d9c";
};
}
{
name = "jest_worker___jest_worker_27.0.2.tgz";
name = "jest_worker___jest_worker_27.0.6.tgz";
path = fetchurl {
name = "jest_worker___jest_worker_27.0.2.tgz";
url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz";
sha1 = "4ebeb56cef48b3e7514552f80d0d80c0129f0b05";
name = "jest_worker___jest_worker_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz";
sha1 = "a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed";
};
}
{
name = "jest___jest_27.0.4.tgz";
name = "jest___jest_27.0.6.tgz";
path = fetchurl {
name = "jest___jest_27.0.4.tgz";
url = "https://registry.yarnpkg.com/jest/-/jest-27.0.4.tgz";
sha1 = "91d4d564b36bcf93b98dac1ab19f07089e670f53";
name = "jest___jest_27.0.6.tgz";
url = "https://registry.yarnpkg.com/jest/-/jest-27.0.6.tgz";
sha1 = "10517b2a628f0409087fbf473db44777d7a04505";
};
}
{
@ -3786,11 +3778,11 @@
};
}
{
name = "pretty_format___pretty_format_27.0.2.tgz";
name = "pretty_format___pretty_format_27.0.6.tgz";
path = fetchurl {
name = "pretty_format___pretty_format_27.0.2.tgz";
url = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz";
sha1 = "9283ff8c4f581b186b2d4da461617143dca478a4";
name = "pretty_format___pretty_format_27.0.6.tgz";
url = "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz";
sha1 = "ab770c47b2c6f893a21aefc57b75da63ef49a11f";
};
}
{
@ -4682,11 +4674,11 @@
};
}
{
name = "v8_to_istanbul___v8_to_istanbul_7.1.2.tgz";
name = "v8_to_istanbul___v8_to_istanbul_8.0.0.tgz";
path = fetchurl {
name = "v8_to_istanbul___v8_to_istanbul_7.1.2.tgz";
url = "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz";
sha1 = "30898d1a7fa0c84d225a2c1434fb958f290883c1";
name = "v8_to_istanbul___v8_to_istanbul_8.0.0.tgz";
url = "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz";
sha1 = "4229f2a99e367f3f018fa1d5c2b8ec684667c69c";
};
}
{
@ -4754,11 +4746,11 @@
};
}
{
name = "whatwg_url___whatwg_url_8.6.0.tgz";
name = "whatwg_url___whatwg_url_8.7.0.tgz";
path = fetchurl {
name = "whatwg_url___whatwg_url_8.6.0.tgz";
url = "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.6.0.tgz";
sha1 = "27c0205a4902084b872aecb97cf0f2a7a3011f4c";
name = "whatwg_url___whatwg_url_8.7.0.tgz";
url = "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz";
sha1 = "656a78e510ff8f3937bc0bcbe9f5c0ac35941b77";
};
}
{
@ -4810,11 +4802,11 @@
};
}
{
name = "ws___ws_7.5.0.tgz";
name = "ws___ws_7.5.1.tgz";
path = fetchurl {
name = "ws___ws_7.5.0.tgz";
url = "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz";
sha1 = "0033bafea031fb9df041b2026fc72a571ca44691";
name = "ws___ws_7.5.1.tgz";
url = "https://registry.yarnpkg.com/ws/-/ws-7.5.1.tgz";
sha1 = "44fc000d87edb1d9c53e51fbc69a0ac1f6871d66";
};
}
{

View File

@ -19,16 +19,16 @@ let
in
buildGoModule rec {
pname = "argo";
version = "3.0.8";
version = "3.1.1";
src = fetchFromGitHub {
owner = "argoproj";
repo = "argo";
rev = "v${version}";
sha256 = "sha256-TOPJvOQKEMEsQ/wAJNF+08g4z75GGkNom6gRCrNOO2I=";
sha256 = "sha256-WErNPofVnV6L7DkYU/dh4mWm+u7UJNFUmRN6IZzMb2g=";
};
vendorSha256 = "sha256-YjVAoMyGKMHLGEPeOOkCKCzeWFiUsXfJIKcw5GYoljg=";
vendorSha256 = "sha256-99N//woGPx9QEtkFsktaiAbu7TS+3DHArBA52OUJFU4=";
doCheck = false;

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "fluxctl";
version = "1.22.2";
version = "1.23.0";
src = fetchFromGitHub {
owner = "weaveworks";
repo = "flux";
rev = version;
sha256 = "sha256-qYdVplNHyD31m4IbIeL3x3nauZLl1XquslS3WrtUXBk=";
sha256 = "sha256-CJY7XjHJ6suJrjhnG+w5oM1FtVnegcbkCVGjyoBtBag=";
};
vendorSha256 = "sha256-4uSw/9lI/rdDqy78jNC9eHYW/v/sMFb+sQvwYG6GZks=";
vendorSha256 = "sha256-aC6E+PpuUqFhZKvQT5AuxpPmHfhjCwHzwFHDzk5wazw=";
nativeBuildInputs = [ installShellFiles ];

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "helm-secrets";
version = "3.7.0";
version = "3.8.1";
src = fetchFromGitHub {
owner = "jkroepke";
repo = pname;
rev = "v${version}";
hash = "sha256-AM+TLeSrXjn10DiQzXSqSwTqsc7CjTdnf6TWetden7g=";
hash = "sha256-UZu3jChEK59UrtUR2ze68Kkc6MkHRtTsfTOS/B96sLM=";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "k9s";
version = "0.24.11";
version = "0.24.12";
src = fetchFromGitHub {
owner = "derailed";
repo = "k9s";
rev = "v${version}";
sha256 = "sha256-UWY4r7pasFsmlRRKFANyxPIoNNuMPNg1gMXrAXEcqdw=";
sha256 = "sha256-GuN+OAzuNus1B32ZSsnrJPrE7MQ0ZqNKDmoNe7Sa7Zs=";
};
buildFlagsArray = ''
@ -18,7 +18,7 @@ buildGoModule rec {
-X github.com/derailed/k9s/cmd.commit=${src.rev}
'';
vendorSha256 = "sha256-EEN3nKQBtAGG7MAa9h11KFPZ9g7xtNxhFB1i/2QS66g=";
vendorSha256 = "sha256-JBWQxRaMvIbUiOD7sJiZH1SHNCdysgh5FeSmYf+FdG4=";
doCheck = false;

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "kubeconform";
version = "0.4.7";
version = "0.4.8";
src = fetchFromGitHub {
owner = "yannh";
repo = pname;
rev = "v${version}";
sha256 = "sha256-ahVdKMx3u2KnJ30wi9rV8JCVg9wPmbgdrtG8IpWWlCs=";
sha256 = "sha256-XD8xGqtE7eaBxPL4Z0Kw4BEqM2fdgww7wl8wJ1U3u0U=";
};
vendorSha256 = null;

View File

@ -9,7 +9,7 @@ python3.pkgs.buildPythonApplication rec {
sha256 = "b4b1ccf086586d041d7e91e68515d495c550f30e4d179d63863fea9ccdbb78eb";
};
propagatedBuildInputs = with python3.pkgs; [ dateutil tornado python-daemon boto3 ];
propagatedBuildInputs = with python3.pkgs; [ python-dateutil tornado python-daemon boto3 ];
# Requires tox, hadoop, and google cloud
doCheck = false;

Some files were not shown because too many files have changed in this diff Show More