Merge branch 'staging-next' into staging

- readline6 attribute removed from all-packages.nix in d879125d61
- readline attribute was bumped to readline82 in 50adabdd60
This commit is contained in:
Jan Tojnar 2023-01-02 03:01:35 +01:00
commit 5810109b42
437 changed files with 14734 additions and 7127 deletions

View File

@ -55,10 +55,13 @@ trim_trailing_whitespace = unset
[*.lock]
indent_size = unset
# trailing whitespace is an actual syntax element of classic Markdown/
# CommonMark to enforce a line break
# Although Markdown/CommonMark allows using two trailing spaces to denote
# a hard line break, we do not use that feature in nixpkgs since
# it forces the surrounding paragraph to become a <literallayout> which
# does not wrap reasonably.
# Instead of a hard line break, start a new paragraph by inserting a blank line.
[*.md]
trim_trailing_whitespace = unset
trim_trailing_whitespace = true
# binaries
[*.nib]

View File

@ -38,10 +38,6 @@ jobs:
into: staging-next-22.11
- from: staging-next-22.11
into: staging-22.11
- from: release-22.05
into: staging-next-22.05
- from: staging-next-22.05
into: staging-22.05
name: ${{ matrix.pairs.from }} → ${{ matrix.pairs.into }}
steps:
- uses: actions/checkout@v3

View File

@ -1,4 +1,4 @@
Copyright (c) 2003-2022 Eelco Dolstra and the Nixpkgs/NixOS contributors
Copyright (c) 2003-2023 Eelco Dolstra and the Nixpkgs/NixOS contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the

View File

@ -47,7 +47,7 @@ To delegate builds to the remote builder, add the following options to your
```
# - Replace ${ARCH} with either aarch64 or x86_64 to match your host machine
# - Replace ${MAX_JOBS} with the maximum number of builds (pick 4 if you're not sure)
builders = ssh-ng://builder@localhost ${ARCH}-linux /etc/nix/builder_ed25519 ${MAX_JOBS} - - - c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUpCV2N4Yi9CbGFxdDFhdU90RStGOFFVV3JVb3RpQzVxQkorVXVFV2RWQ2Igcm9vdEBuaXhvcwo='
builders = ssh-ng://builder@localhost ${ARCH}-linux /etc/nix/builder_ed25519 ${MAX_JOBS} - - - c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUpCV2N4Yi9CbGFxdDFhdU90RStGOFFVV3JVb3RpQzVxQkorVXVFV2RWQ2Igcm9vdEBuaXhvcwo=
# Not strictly necessary, but this will reduce your disk utilization
builders-use-substitutes = true

View File

@ -17,6 +17,7 @@ In the following is an example expression using `buildGoModule`, the following a
In that case, rather than fetching the dependencies and vendoring them, the dependencies vendored in the source repo will be used.
To avoid updating this field when dependencies change, run `go mod vendor` in your source repo and set `vendorHash = null;`
To obtain the actual hash, set `vendorHash = lib.fakeSha256;` and run the build ([more details here](#sec-source-hashes)).
- `proxyVendor`: Fetches (go mod download) and proxies the vendor directory. This is useful if your code depends on c code and go mod tidy does not include the needed sources to build or if any dependency has case-insensitive conflicts which will produce platform dependant `vendorHash` checksums.

View File

@ -63,7 +63,7 @@ You should prefer `overrideAttrs` in almost all cases, see its documentation for
:::
::: {.warning}
Do not use this function in Nixpkgs as it evaluates a Derivation before modifying it, which breaks package abstraction and removes error-checking of function arguments. In addition, this evaluation-per-function application incurs a performance penalty, which can become a problem if many overrides are used. It is only intended for ad-hoc customisation, such as in `~/.config/nixpkgs/config.nix`.
Do not use this function in Nixpkgs as it evaluates a derivation before modifying it, which breaks package abstraction. In addition, this evaluation-per-function application incurs a performance penalty, which can become a problem if many overrides are used. It is only intended for ad-hoc customisation, such as in `~/.config/nixpkgs/config.nix`.
:::
The function `overrideDerivation` creates a new derivation based on an existing one by overriding the original's attributes with the attribute set produced by the specified function. This function is available on all derivations defined using the `makeOverridable` function. Most standard derivation-producing functions, such as `stdenv.mkDerivation`, are defined using this function, which means most packages in the nixpkgs expression, `pkgs`, have this function.

View File

@ -27,11 +27,19 @@ rec {
For another application, see build-support/vm, where this
function is used to build arbitrary derivations inside a QEMU
virtual machine.
Note that in order to preserve evaluation errors, the new derivation's
outPath depends on the old one's, which means that this function cannot
be used in circular situations when the old derivation also depends on the
new one.
You should in general prefer `drv.overrideAttrs` over this function;
see the nixpkgs manual for more information on overriding.
*/
overrideDerivation = drv: f:
let
newDrv = derivation (drv.drvAttrs // (f drv));
in lib.flip (extendDerivation true) newDrv (
in lib.flip (extendDerivation (builtins.seq drv.drvPath true)) newDrv (
{ meta = drv.meta or {};
passthru = if drv ? passthru then drv.passthru else {};
}

View File

@ -63,7 +63,7 @@ let
inherit (builtins) add addErrorContext attrNames concatLists
deepSeq elem elemAt filter genericClosure genList getAttr
hasAttr head isAttrs isBool isInt isList isString length
hasAttr head isAttrs isBool isInt isList isPath isString length
lessThan listToAttrs pathExists readFile replaceStrings seq
stringLength sub substring tail trace;
inherit (self.trivial) id const pipe concat or and bitAnd bitOr bitXor
@ -96,14 +96,16 @@ let
concatImapStringsSep makeSearchPath makeSearchPathOutput
makeLibraryPath makeBinPath optionalString
hasInfix hasPrefix hasSuffix stringToCharacters stringAsChars escape
escapeShellArg escapeShellArgs isValidPosixName toShellVar toShellVars
escapeShellArg escapeShellArgs
isStorePath isStringLike
isValidPosixName toShellVar toShellVars
escapeRegex escapeXML replaceChars lowerChars
upperChars toLower toUpper addContextFrom splitString
removePrefix removeSuffix versionOlder versionAtLeast
getName getVersion
mesonOption mesonBool mesonEnable
nameFromURL enableFeature enableFeatureAs withFeature
withFeatureAs fixedWidthString fixedWidthNumber isStorePath
withFeatureAs fixedWidthString fixedWidthNumber
toInt toIntBase10 readPathsFromFile fileContents;
inherit (self.stringsWithDeps) textClosureList textClosureMap
noDepEntry fullDepEntry packEntry stringAfter;

View File

@ -289,7 +289,9 @@ rec {
(This means fn is type Val -> String.) */
allowPrettyValues ? false,
/* If this option is true, the output is indented with newlines for attribute sets and lists */
multiline ? true
multiline ? true,
/* Initial indentation level */
indent ? ""
}:
let
go = indent: v: with builtins;
@ -348,7 +350,7 @@ rec {
};") v)
+ outroSpace + "}"
else abort "generators.toPretty: should never happen (v = ${v})";
in go "";
in go indent;
# PLIST handling
toPlist = {}: v: let

View File

@ -842,6 +842,12 @@ in mkLicense lset) ({
fullName = "SGI Free Software License B v2.0";
};
# Gentoo seems to treat it as a license:
# https://gitweb.gentoo.org/repo/gentoo.git/tree/licenses/SGMLUG?id=7d999af4a47bf55e53e54713d98d145f935935c1
sgmlug = {
fullName = "SGML UG SGML Parser Materials license";
};
sleepycat = {
spdxId = "Sleepycat";
fullName = "Sleepycat License";

View File

@ -18,6 +18,7 @@ rec {
isInt
isList
isAttrs
isPath
isString
match
parseDrvName
@ -395,7 +396,7 @@ rec {
*/
toShellVar = name: value:
lib.throwIfNot (isValidPosixName name) "toShellVar: ${name} is not a valid shell variable name" (
if isAttrs value && ! isCoercibleToString value then
if isAttrs value && ! isStringLike value then
"declare -A ${name}=(${
concatStringsSep " " (lib.mapAttrsToList (n: v:
"[${escapeShellArg n}]=${escapeShellArg v}"
@ -798,10 +799,31 @@ rec {
in lib.warnIf (!precise) "Imprecise conversion from float to string ${result}"
result;
/* Check whether a value can be coerced to a string */
isCoercibleToString = x:
elem (typeOf x) [ "path" "string" "null" "int" "float" "bool" ] ||
(isList x && lib.all isCoercibleToString x) ||
/* Soft-deprecated function. While the original implementation is available as
isConvertibleWithToString, consider using isStringLike instead, if suitable. */
isCoercibleToString = lib.warnIf (lib.isInOldestRelease 2305)
"lib.strings.isCoercibleToString is deprecated in favor of either isStringLike or isConvertibleWithToString. Only use the latter if it needs to return true for null, numbers, booleans and list of similarly coercibles."
isConvertibleWithToString;
/* Check whether a list or other value can be passed to toString.
Many types of value are coercible to string this way, including int, float,
null, bool, list of similarly coercible values.
*/
isConvertibleWithToString = x:
isStringLike x ||
elem (typeOf x) [ "null" "int" "float" "bool" ] ||
(isList x && lib.all isConvertibleWithToString x);
/* Check whether a value can be coerced to a string.
The value must be a string, path, or attribute set.
String-like values can be used without explicit conversion in
string interpolations and in most functions that expect a string.
*/
isStringLike = x:
isString x ||
isPath x ||
x ? outPath ||
x ? __toString;
@ -818,7 +840,7 @@ rec {
=> false
*/
isStorePath = x:
if !(isList x) && isCoercibleToString x then
if isStringLike x then
let str = toString x; in
substring 0 1 str == "/"
&& dirOf str == storeDir

View File

@ -179,7 +179,7 @@ rec {
they take effect as soon as the oldest release reaches end of life. */
oldestSupportedRelease =
# Update on master only. Do not backport.
2205;
2211;
/* Whether a feature is supported in all supported releases (at the time of
release branch-off, if applicable). See `oldestSupportedRelease`. */

View File

@ -54,7 +54,7 @@ let
concatStringsSep
escapeNixString
hasInfix
isCoercibleToString
isStringLike
;
inherit (lib.trivial)
boolToString
@ -227,7 +227,7 @@ rec {
merge = loc: defs:
let
getType = value:
if isAttrs value && isCoercibleToString value
if isAttrs value && isStringLike value
then "stringCoercibleSet"
else builtins.typeOf value;
@ -479,7 +479,7 @@ rec {
path = mkOptionType {
name = "path";
descriptionClass = "noun";
check = x: isCoercibleToString x && builtins.substring 0 1 (toString x) == "/";
check = x: isStringLike x && builtins.substring 0 1 (toString x) == "/";
merge = mergeEqualOption;
};

View File

@ -1975,6 +1975,12 @@
githubId = 1743184;
name = "Boris Babić";
};
borlaag = {
email = "borlaag@proton.me";
github = "Borlaag";
githubId = 114830266;
name = "Børlaag";
};
bosu = {
email = "boriss@gmail.com";
github = "bosu";
@ -3025,6 +3031,15 @@
githubId = 16950437;
name = "cwyc";
};
cynerd = {
name = "Karel Kočí";
email = "cynerd@email.cz";
github = "Cynerd";
githubId = 3811900;
keys = [{
fingerprint = "2B1F 70F9 5F1B 48DA 2265 A7FA A6BC 8B8C EB31 659B";
}];
};
cyounkins = {
name = "Craig Younkins";
email = "cyounkins@gmail.com";
@ -9170,6 +9185,12 @@
githubId = 1575834;
name = "Michael Adler";
};
michaelBelsanti = {
email = "mbels03@protonmail.com";
name = "Mike Belsanti";
github = "michaelBelsanti";
githubId = 62124625;
};
michaelpj = {
email = "michaelpj@gmail.com";
github = "michaelpj";
@ -13724,6 +13745,12 @@
githubId = 66133083;
name = "Tomas Bravo";
};
tchab = {
email = "dev@chabs.name";
github = "t-chab";
githubId = 2120966;
name = "t-chab";
};
tchekda = {
email = "contact@tchekda.fr";
github = "Tchekda";
@ -16134,12 +16161,6 @@
github = "zuzuleinen";
githubId = 944919;
};
quasigod-io = {
email = "quasigod-io@protonmail.com";
name = "Michael Belsanti";
github = "quasigod-io";
githubId = 62124625;
};
waelwindows = {
email = "waelwindows9922@gmail.com";
github = "Waelwindows";

View File

@ -62,10 +62,12 @@ sed -r \
-e '/ lsp-types /d' \
-e '/ lsp-test /d' \
-e '/ hie-bios /d' \
-e '/ ShellCheck /d' \
< "${tmpfile_new}" >> $stackage_config
# Explanations:
# cabal2nix, distribution-nixpkgs, jailbreak-cabal, language-nix: These are our packages and we know what we are doing.
# lsp, lsp-types, lsp-test, hie-bios: These are tightly coupled to hls which is not in stackage. They have no rdeps in stackage.
# ShellCheck: latest version of command-line dev tool.
if [[ "${1:-}" == "--do-commit" ]]; then
git add $stackage_config

View File

@ -273,12 +273,13 @@ The following methods are available on machine objects:
`wait_for_open_port`
: Wait until a process is listening on the given TCP port (on
`localhost`, at least).
: Wait until a process is listening on the given TCP port and IP address
(default `localhost`).
`wait_for_closed_port`
: Wait until nobody is listening on the given TCP port.
: Wait until nobody is listening on the given TCP port and IP address
(default `localhost`).
`wait_for_x`

View File

@ -483,8 +483,8 @@ start_all()
</term>
<listitem>
<para>
Wait until a process is listening on the given TCP port (on
<literal>localhost</literal>, at least).
Wait until a process is listening on the given TCP port and
IP address (default <literal>localhost</literal>).
</para>
</listitem>
</varlistentry>
@ -494,7 +494,8 @@ start_all()
</term>
<listitem>
<para>
Wait until nobody is listening on the given TCP port.
Wait until nobody is listening on the given TCP port and IP
address (default <literal>localhost</literal>).
</para>
</listitem>
</varlistentry>

View File

@ -16,8 +16,20 @@
</para>
<itemizedlist>
<listitem>
<literallayout>Nix has been updated from 2.3 to 2.8. This mainly brings experimental support for Flakes, but also marks the <literal>nix</literal> command as experimental which now has to be enabled via the configuration explicitly. For more information and instructions for upgrades, see the relase notes for <link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html">nix-2.4</link>,
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.5.html">nix-2.5</link>, <link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.6.html">nix-2.6</link>, <link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.7.html">nix-2.7</link> and <link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.8.html">nix-2.8</link></literallayout>
<para>
Nix has been updated from 2.3 to 2.8. This mainly brings
experimental support for Flakes, but also marks the
<literal>nix</literal> command as experimental which now has
to be enabled via the configuration explicitly. For more
information and instructions for upgrades, see the relase
notes for
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html">nix-2.4</link>,
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.5.html">nix-2.5</link>,
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.6.html">nix-2.6</link>,
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.7.html">nix-2.7</link>
and
<link xlink:href="https://nixos.org/manual/nix/stable/release-notes/rl-2.8.html">nix-2.8</link>
</para>
</listitem>
<listitem>
<para>

View File

@ -37,6 +37,13 @@
<link linkend="opt-programs.bash.blesh.enable">programs.bash.blesh</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/adnanh/webhook">webhook</link>,
a lightweight webhook server. Available as
<link linkend="opt-services.webhook.enable">services.webhook</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/alexivkin/CUPS-PDF-to-PDF">cups-pdf-to-pdf</link>,
@ -76,6 +83,14 @@
<link xlink:href="options.html#opt-services.v2raya.enable">services.v2raya</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://www.netfilter.org/projects/ulogd/index.html">ulogd</link>,
a userspace logging daemon for netfilter/iptables related
logging. Available as
<link xlink:href="options.html#opt-services.ulogd.enable">services.ulogd</link>.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-23.05-incompatibilities">
@ -374,6 +389,14 @@
NixOS manual.
</para>
</listitem>
<listitem>
<para>
<literal>services.grafana</literal> listens only on localhost
by default again. This was changed to upstreams default of
<literal>0.0.0.0</literal> by accident in the freeform setting
conversion.
</para>
</listitem>
<listitem>
<para>
A new <literal>virtualisation.rosetta</literal> module was
@ -402,6 +425,29 @@
option.
</para>
</listitem>
<listitem>
<para>
A new option <literal>recommendedBrotliSettings</literal> has
been added to <literal>services.nginx</literal>. Learn more
about compression in Brotli format
<link xlink:href="https://github.com/google/ngx_brotli/blob/master/README.md">here</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://garagehq.deuxfleurs.fr/">Garage</link>
version is based on
<link xlink:href="options.html#opt-system.stateVersion">system.stateVersion</link>,
existing installations will keep using version 0.7. New
installations will use version 0.8. In order to upgrade a
Garage cluster, please follow
<link xlink:href="https://garagehq.deuxfleurs.fr/documentation/cookbook/upgrading/">upstream
instructions</link> and force
<link xlink:href="options.html#opt-services.garage.package">services.garage.package</link>
or upgrade accordingly
<link xlink:href="options.html#opt-system.stateVersion">system.stateVersion</link>.
</para>
</listitem>
<listitem>
<para>
<literal>hip</literal> has been separated into

View File

@ -18,6 +18,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [blesh](https://github.com/akinomyoga/ble.sh), a line editor written in pure bash. Available as [programs.bash.blesh](#opt-programs.bash.blesh.enable).
- [webhook](https://github.com/adnanh/webhook), a lightweight webhook server. Available as [services.webhook](#opt-services.webhook.enable).
- [cups-pdf-to-pdf](https://github.com/alexivkin/CUPS-PDF-to-PDF), a pdf-generating cups backend based on [cups-pdf](https://www.cups-pdf.de/). Available as [services.printing.cups-pdf](#opt-services.printing.cups-pdf.enable).
- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.fuzzyCompletion).
@ -28,6 +30,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [v2rayA](https://v2raya.org), a Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel. Available as [services.v2raya](options.html#opt-services.v2raya.enable).
- [ulogd](https://www.netfilter.org/projects/ulogd/index.html), a userspace logging daemon for netfilter/iptables related logging. Available as [services.ulogd](options.html#opt-services.ulogd.enable).
## Backward Incompatibilities {#sec-release-23.05-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@ -103,12 +107,18 @@ In addition to numerous new and upgraded packages, this release has the followin
- `nixos/lib/make-disk-image.nix` can now mutate EFI variables, run user-provided EFI firmware or variable templates. This is now extensively documented in the NixOS manual.
- `services.grafana` listens only on localhost by default again. This was changed to upstreams default of `0.0.0.0` by accident in the freeform setting conversion.
- A new `virtualisation.rosetta` module was added to allow running `x86_64` binaries through [Rosetta](https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment) inside virtualised NixOS guests on Apple silicon. This feature works by default with the [UTM](https://docs.getutm.app/) virtualisation [package](https://search.nixos.org/packages?channel=unstable&show=utm&from=0&size=1&sort=relevance&type=packages&query=utm).
- The new option `users.motdFile` allows configuring a Message Of The Day that can be updated dynamically.
- Enabling global redirect in `services.nginx.virtualHosts` now allows one to add exceptions with the `locations` option.
- A new option `recommendedBrotliSettings` has been added to `services.nginx`. Learn more about compression in Brotli format [here](https://github.com/google/ngx_brotli/blob/master/README.md).
- [Garage](https://garagehq.deuxfleurs.fr/) version is based on [system.stateVersion](options.html#opt-system.stateVersion), existing installations will keep using version 0.7. New installations will use version 0.8. In order to upgrade a Garage cluster, please follow [upstream instructions](https://garagehq.deuxfleurs.fr/documentation/cookbook/upgrading/) and force [services.garage.package](options.html#opt-services.garage.package) or upgrade accordingly [system.stateVersion](options.html#opt-system.stateVersion).
- `hip` has been separated into `hip`, `hip-common` and `hipcc`.
- Resilio sync secret keys can now be provided using a secrets file at runtime, preventing these secrets from ending up in the Nix store.

View File

@ -41,11 +41,9 @@ def writeable_dir(arg: str) -> Path:
"""
path = Path(arg)
if not path.is_dir():
raise argparse.ArgumentTypeError("{0} is not a directory".format(path))
raise argparse.ArgumentTypeError(f"{path} is not a directory")
if not os.access(path, os.W_OK):
raise argparse.ArgumentTypeError(
"{0} is not a writeable directory".format(path)
)
raise argparse.ArgumentTypeError(f"{path} is not a writeable directory")
return path

View File

@ -19,15 +19,11 @@ def get_tmp_dir() -> Path:
tmp_dir.mkdir(mode=0o700, exist_ok=True)
if not tmp_dir.is_dir():
raise NotADirectoryError(
"The directory defined by TMPDIR, TEMP, TMP or CWD: {0} is not a directory".format(
tmp_dir
)
f"The directory defined by TMPDIR, TEMP, TMP or CWD: {tmp_dir} is not a directory"
)
if not os.access(tmp_dir, os.W_OK):
raise PermissionError(
"The directory defined by TMPDIR, TEMP, TMP, or CWD: {0} is not writeable".format(
tmp_dir
)
f"The directory defined by TMPDIR, TEMP, TMP, or CWD: {tmp_dir} is not writeable"
)
return tmp_dir

View File

@ -36,7 +36,7 @@ class Logger:
def maybe_prefix(self, message: str, attributes: Dict[str, str]) -> str:
if "machine" in attributes:
return "{}: {}".format(attributes["machine"], message)
return f"{attributes['machine']}: {message}"
return message
def log_line(self, message: str, attributes: Dict[str, str]) -> None:
@ -62,9 +62,7 @@ class Logger:
def log_serial(self, message: str, machine: str) -> None:
self.enqueue({"msg": message, "machine": machine, "type": "serial"})
if self._print_serial_logs:
self._eprint(
Style.DIM + "{} # {}".format(machine, message) + Style.RESET_ALL
)
self._eprint(Style.DIM + f"{machine} # {message}" + Style.RESET_ALL)
def enqueue(self, item: Dict[str, str]) -> None:
self.queue.put(item)
@ -97,7 +95,7 @@ class Logger:
yield
self.drain_log_queue()
toc = time.time()
self.log("(finished: {}, in {:.2f} seconds)".format(message, toc - tic))
self.log(f"(finished: {message}, in {toc - tic:.2f} seconds)")
self.xml.endElement("nest")

View File

@ -101,14 +101,14 @@ def _perform_ocr_on_screenshot(
tess_args = f"-c debug_file=/dev/null --psm 11"
cmd = f"convert {magick_args} {screenshot_path} tiff:{screenshot_path}.tiff"
cmd = f"convert {magick_args} '{screenshot_path}' 'tiff:{screenshot_path}.tiff'"
ret = subprocess.run(cmd, shell=True, capture_output=True)
if ret.returncode != 0:
raise Exception(f"TIFF conversion failed with exit code {ret.returncode}")
model_results = []
for model_id in model_ids:
cmd = f"tesseract {screenshot_path}.tiff - {tess_args} --oem {model_id}"
cmd = f"tesseract '{screenshot_path}.tiff' - {tess_args} --oem '{model_id}'"
ret = subprocess.run(cmd, shell=True, capture_output=True)
if ret.returncode != 0:
raise Exception(f"OCR failed with exit code {ret.returncode}")
@ -420,8 +420,8 @@ class Machine:
def send_monitor_command(self, command: str) -> str:
self.run_callbacks()
with self.nested("sending monitor command: {}".format(command)):
message = ("{}\n".format(command)).encode()
with self.nested(f"sending monitor command: {command}"):
message = f"{command}\n".encode()
assert self.monitor is not None
self.monitor.send(message)
return self.wait_for_monitor_prompt()
@ -438,7 +438,7 @@ class Machine:
info = self.get_unit_info(unit, user)
state = info["ActiveState"]
if state == "failed":
raise Exception('unit "{}" reached state "{}"'.format(unit, state))
raise Exception(f'unit "{unit}" reached state "{state}"')
if state == "inactive":
status, jobs = self.systemctl("list-jobs --full 2>&1", user)
@ -446,27 +446,24 @@ class Machine:
info = self.get_unit_info(unit, user)
if info["ActiveState"] == state:
raise Exception(
(
'unit "{}" is inactive and there ' "are no pending jobs"
).format(unit)
f'unit "{unit}" is inactive and there are no pending jobs'
)
return state == "active"
with self.nested(
"waiting for unit {}{}".format(
unit, f" with user {user}" if user is not None else ""
)
f"waiting for unit {unit}"
+ (f" with user {user}" if user is not None else "")
):
retry(check_active, timeout)
def get_unit_info(self, unit: str, user: Optional[str] = None) -> Dict[str, str]:
status, lines = self.systemctl('--no-pager show "{}"'.format(unit), user)
status, lines = self.systemctl(f'--no-pager show "{unit}"', user)
if status != 0:
raise Exception(
'retrieving systemctl info for unit "{}" {} failed with exit code {}'.format(
unit, "" if user is None else 'under user "{}"'.format(user), status
)
f'retrieving systemctl info for unit "{unit}"'
+ ("" if user is None else f' under user "{user}"')
+ f" failed with exit code {status}"
)
line_pattern = re.compile(r"^([^=]+)=(.*)$")
@ -486,24 +483,22 @@ class Machine:
if user is not None:
q = q.replace("'", "\\'")
return self.execute(
(
"su -l {} --shell /bin/sh -c "
f"su -l {user} --shell /bin/sh -c "
"$'XDG_RUNTIME_DIR=/run/user/`id -u` "
"systemctl --user {}'"
).format(user, q)
f"systemctl --user {q}'"
)
return self.execute("systemctl {}".format(q))
return self.execute(f"systemctl {q}")
def require_unit_state(self, unit: str, require_state: str = "active") -> None:
with self.nested(
"checking if unit {} has reached state '{}'".format(unit, require_state)
f"checking if unit '{unit}' has reached state '{require_state}'"
):
info = self.get_unit_info(unit)
state = info["ActiveState"]
if state != require_state:
raise Exception(
"Expected unit {} to to be in state ".format(unit)
+ "'{}' but it is in state {}".format(require_state, state)
f"Expected unit '{unit}' to to be in state "
f"'{require_state}' but it is in state '{state}'"
)
def _next_newline_closed_block_from_shell(self) -> str:
@ -593,13 +588,11 @@ class Machine:
"""Execute each command and check that it succeeds."""
output = ""
for command in commands:
with self.nested("must succeed: {}".format(command)):
with self.nested(f"must succeed: {command}"):
(status, out) = self.execute(command, timeout=timeout)
if status != 0:
self.log("output: {}".format(out))
raise Exception(
"command `{}` failed (exit code {})".format(command, status)
)
self.log(f"output: {out}")
raise Exception(f"command `{command}` failed (exit code {status})")
output += out
return output
@ -607,12 +600,10 @@ class Machine:
"""Execute each command and check that it fails."""
output = ""
for command in commands:
with self.nested("must fail: {}".format(command)):
with self.nested(f"must fail: {command}"):
(status, out) = self.execute(command, timeout=timeout)
if status == 0:
raise Exception(
"command `{}` unexpectedly succeeded".format(command)
)
raise Exception(f"command `{command}` unexpectedly succeeded")
output += out
return output
@ -627,7 +618,7 @@ class Machine:
status, output = self.execute(command, timeout=timeout)
return status == 0
with self.nested("waiting for success: {}".format(command)):
with self.nested(f"waiting for success: {command}"):
retry(check_success, timeout)
return output
@ -642,7 +633,7 @@ class Machine:
status, output = self.execute(command, timeout=timeout)
return status != 0
with self.nested("waiting for failure: {}".format(command)):
with self.nested(f"waiting for failure: {command}"):
retry(check_failure)
return output
@ -661,8 +652,8 @@ class Machine:
def get_tty_text(self, tty: str) -> str:
status, output = self.execute(
"fold -w$(stty -F /dev/tty{0} size | "
"awk '{{print $2}}') /dev/vcs{0}".format(tty)
f"fold -w$(stty -F /dev/tty{tty} size | "
f"awk '{{print $2}}') /dev/vcs{tty}"
)
return output
@ -681,11 +672,11 @@ class Machine:
)
return len(matcher.findall(text)) > 0
with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)):
with self.nested(f"waiting for {regexp} to appear on tty {tty}"):
retry(tty_matches)
def send_chars(self, chars: str, delay: Optional[float] = 0.01) -> None:
with self.nested("sending keys {}".format(chars)):
with self.nested(f"sending keys '{chars}'"):
for char in chars:
self.send_key(char, delay)
@ -693,33 +684,33 @@ class Machine:
"""Waits until the file exists in machine's file system."""
def check_file(_: Any) -> bool:
status, _ = self.execute("test -e {}".format(filename))
status, _ = self.execute(f"test -e {filename}")
return status == 0
with self.nested("waiting for file {}".format(filename)):
with self.nested(f"waiting for file '{filename}'"):
retry(check_file)
def wait_for_open_port(self, port: int) -> None:
def wait_for_open_port(self, port: int, addr: str = "localhost") -> None:
def port_is_open(_: Any) -> bool:
status, _ = self.execute("nc -z localhost {}".format(port))
status, _ = self.execute(f"nc -z {addr} {port}")
return status == 0
with self.nested("waiting for TCP port {}".format(port)):
with self.nested(f"waiting for TCP port {port} on {addr}"):
retry(port_is_open)
def wait_for_closed_port(self, port: int) -> None:
def wait_for_closed_port(self, port: int, addr: str = "localhost") -> None:
def port_is_closed(_: Any) -> bool:
status, _ = self.execute("nc -z localhost {}".format(port))
status, _ = self.execute(f"nc -z {addr} {port}")
return status != 0
with self.nested("waiting for TCP port {} to be closed".format(port)):
with self.nested(f"waiting for TCP port {port} on {addr} to be closed"):
retry(port_is_closed)
def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
return self.systemctl("start {}".format(jobname), user)
return self.systemctl(f"start {jobname}", user)
def stop_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
return self.systemctl("stop {}".format(jobname), user)
return self.systemctl(f"stop {jobname}", user)
def wait_for_job(self, jobname: str) -> None:
self.wait_for_unit(jobname)
@ -739,21 +730,21 @@ class Machine:
toc = time.time()
self.log("connected to guest root shell")
self.log("(connecting took {:.2f} seconds)".format(toc - tic))
self.log(f"(connecting took {toc - tic:.2f} seconds)")
self.connected = True
def screenshot(self, filename: str) -> None:
word_pattern = re.compile(r"^\w+$")
if word_pattern.match(filename):
filename = os.path.join(self.out_dir, "{}.png".format(filename))
tmp = "{}.ppm".format(filename)
filename = os.path.join(self.out_dir, f"{filename}.png")
tmp = f"{filename}.ppm"
with self.nested(
"making screenshot {}".format(filename),
f"making screenshot {filename}",
{"image": os.path.basename(filename)},
):
self.send_monitor_command("screendump {}".format(tmp))
ret = subprocess.run("pnmtopng {} > {}".format(tmp, filename), shell=True)
self.send_monitor_command(f"screendump {tmp}")
ret = subprocess.run(f"pnmtopng '{tmp}' > '{filename}'", shell=True)
os.unlink(tmp)
if ret.returncode != 0:
raise Exception("Cannot convert screenshot")
@ -815,7 +806,7 @@ class Machine:
def dump_tty_contents(self, tty: str) -> None:
"""Debugging: Dump the contents of the TTY<n>"""
self.execute("fold -w 80 /dev/vcs{} | systemd-cat".format(tty))
self.execute(f"fold -w 80 /dev/vcs{tty} | systemd-cat")
def _get_screen_text_variants(self, model_ids: Iterable[int]) -> List[str]:
with tempfile.TemporaryDirectory() as tmpdir:
@ -837,15 +828,15 @@ class Machine:
return True
if last:
self.log("Last OCR attempt failed. Text was: {}".format(variants))
self.log(f"Last OCR attempt failed. Text was: {variants}")
return False
with self.nested("waiting for {} to appear on screen".format(regex)):
with self.nested(f"waiting for {regex} to appear on screen"):
retry(screen_matches)
def wait_for_console_text(self, regex: str) -> None:
with self.nested("waiting for {} to appear on console".format(regex)):
with self.nested(f"waiting for {regex} to appear on console"):
# Buffer the console output, this is needed
# to match multiline regexes.
console = io.StringIO()
@ -862,7 +853,7 @@ class Machine:
def send_key(self, key: str, delay: Optional[float] = 0.01) -> None:
key = CHAR_TO_KEY.get(key, key)
self.send_monitor_command("sendkey {}".format(key))
self.send_monitor_command(f"sendkey {key}")
if delay is not None:
time.sleep(delay)
@ -921,7 +912,7 @@ class Machine:
self.pid = self.process.pid
self.booted = True
self.log("QEMU running (pid {})".format(self.pid))
self.log(f"QEMU running (pid {self.pid})")
def cleanup_statedir(self) -> None:
shutil.rmtree(self.state_dir)
@ -975,7 +966,7 @@ class Machine:
names = self.get_window_names()
if last_try:
self.log(
"Last chance to match {} on the window list,".format(regexp)
f"Last chance to match {regexp} on the window list,"
+ " which currently contains: "
+ ", ".join(names)
)
@ -992,9 +983,7 @@ class Machine:
"""Forward a TCP port on the host to a TCP port on the guest.
Useful during interactive testing.
"""
self.send_monitor_command(
"hostfwd_add tcp::{}-:{}".format(host_port, guest_port)
)
self.send_monitor_command(f"hostfwd_add tcp::{host_port}-:{guest_port}")
def block(self) -> None:
"""Make the machine unreachable by shutting down eth1 (the multicast

View File

@ -77,6 +77,14 @@ let
else
config.boot.loader.timeout * 10;
# Timeout in grub is in seconds.
# null means max timeout (infinity)
# 0 means disable timeout
grubEfiTimeout = if config.boot.loader.timeout == null then
-1
else
config.boot.loader.timeout;
# The configuration file for syslinux.
# Notes on syslinux configuration and UNetbootin compatibility:
@ -284,7 +292,7 @@ let
if serial; then set with_serial=yes ;fi
export with_serial
clear
set timeout=10
set timeout=${toString grubEfiTimeout}
# This message will only be viewable when "gfxterm" is not used.
echo ""

View File

@ -101,7 +101,7 @@ chroot_add_resolv_conf "$mountPoint" || echo "$0: failed to set up resolv.conf"
LOCALE_ARCHIVE="$system/sw/lib/locale/locale-archive" IN_NIXOS_ENTER=1 chroot "$mountPoint" "$system/activate" 1>&2 || true
# Create /tmp
chroot "$mountPoint" systemd-tmpfiles --create --remove --exclude-prefix=/dev 1>&2 || true
chroot "$mountPoint" "$system/sw/bin/systemd-tmpfiles" --create --remove --exclude-prefix=/dev 1>&2 || true
)
unset TMPDIR

View File

@ -520,6 +520,7 @@
./services/logging/syslog-ng.nix
./services/logging/syslogd.nix
./services/logging/vector.nix
./services/logging/ulogd.nix
./services/mail/clamsmtp.nix
./services/mail/davmail.nix
./services/mail/dkimproxy-out.nix
@ -1012,6 +1013,7 @@
./services/networking/wasabibackend.nix
./services/networking/websockify.nix
./services/networking/wg-netmanager.nix
./services/networking/webhook.nix
./services/networking/wg-quick.nix
./services/networking/wireguard.nix
./services/networking/wpa_supplicant.nix

View File

@ -23,7 +23,10 @@ in
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.supergfxctl ];
environment.etc."supergfxd.conf" = lib.mkIf (cfg.settings != null) { source = json.generate "supergfxd.conf" cfg.settings; };
environment.etc."supergfxd.conf" = lib.mkIf (cfg.settings != null) {
source = json.generate "supergfxd.conf" cfg.settings;
mode = "0644";
};
services.dbus.enable = true;

View File

@ -0,0 +1,48 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.ulogd;
settingsFormat = pkgs.formats.ini { };
settingsFile = settingsFormat.generate "ulogd.conf" cfg.settings;
in {
options = {
services.ulogd = {
enable = mkEnableOption (lib.mdDoc "ulogd");
settings = mkOption {
example = {
global.stack = "stack=log1:NFLOG,base1:BASE,pcap1:PCAP";
log1.group = 2;
pcap1 = {
file = "/var/log/ulogd.pcap";
sync = 1;
};
};
type = settingsFormat.type;
default = { };
description = lib.mdDoc "Configuration for ulogd. See {file}`/share/doc/ulogd/` in `pkgs.ulogd.doc`.";
};
logLevel = mkOption {
type = types.enum [ 1 3 5 7 8 ];
default = 5;
description = lib.mdDoc "Log level (1 = debug, 3 = info, 5 = notice, 7 = error, 8 = fatal)";
};
};
};
config = mkIf cfg.enable {
systemd.services.ulogd = {
description = "Ulogd Daemon";
wantedBy = [ "multi-user.target" ];
wants = [ "network-pre.target" ];
before = [ "network-pre.target" ];
serviceConfig = {
ExecStart = "${pkgs.ulogd}/bin/ulogd -c ${settingsFile} --verbose --loglevel ${toString cfg.logLevel}";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
};
};
};
}

View File

@ -42,7 +42,7 @@ let
else if isDerivation v then toString v
else if builtins.isPath v then toString v
else if isString v then v
else if strings.isCoercibleToString v then toString v
else if strings.isConvertibleWithToString v then toString v
else abort "The nix conf value: ${toPretty {} v} can not be encoded";
mkKeyValue = k: v: "${escape [ "=" ] k} = ${mkValueString v}";
@ -792,7 +792,10 @@ in
fi
'';
nix.nrBuildUsers = mkDefault (max 32 (if cfg.settings.max-jobs == "auto" then 0 else cfg.settings.max-jobs));
nix.nrBuildUsers = mkDefault (
if cfg.settings.auto-allocate-uids or false then 0
else max 32 (if cfg.settings.max-jobs == "auto" then 0 else cfg.settings.max-jobs)
);
users.users = nixbldUsers;

View File

@ -364,9 +364,15 @@ in {
};
http_addr = mkOption {
description = lib.mdDoc "Listening address.";
default = "";
type = types.str;
default = "127.0.0.1";
description = lib.mdDoc ''
Listening address.
::: {.note}
This setting intentionally varies from upstream's default to be a bit more secure by default.
:::
'';
};
http_port = mkOption {

View File

@ -28,7 +28,7 @@ in
};
description = lib.mdDoc ''
Additional configuration for Uptime Kuma, see
<https://github.com/louislam/uptime-kuma/wiki/Environment-Variables">
<https://github.com/louislam/uptime-kuma/wiki/Environment-Variables>
for supported values.
'';
};

View File

@ -168,8 +168,7 @@ in
inherit originRequest;
credentialsFile = mkOption {
type = with types; nullOr str;
default = null;
type = types.str;
description = lib.mdDoc ''
Credential file.
@ -190,8 +189,7 @@ in
};
default = mkOption {
type = with types; nullOr str;
default = null;
type = types.str;
description = lib.mdDoc ''
Catch-all service if no ingress matches.
@ -262,12 +260,12 @@ in
systemd.targets =
mapAttrs'
(name: tunnel:
nameValuePair "cloudflared-tunnel-${name}" ({
description = lib.mdDoc "Cloudflare tunnel '${name}' target";
nameValuePair "cloudflared-tunnel-${name}" {
description = "Cloudflare tunnel '${name}' target";
requires = [ "cloudflared-tunnel-${name}.service" ];
after = [ "cloudflared-tunnel-${name}.service" ];
unitConfig.StopWhenUnneeded = true;
})
}
)
config.services.cloudflared.tunnels;
@ -304,13 +302,14 @@ in
mkConfigFile = pkgs.writeText "cloudflared.yml" (builtins.toJSON fullConfig);
in
nameValuePair "cloudflared-tunnel-${name}" ({
after = [ "network.target" ];
after = [ "network.target" "network-online.target" ];
wants = [ "network.target" "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
ExecStart = "${cfg.package}/bin/cloudflared tunnel --config=${mkConfigFile} --no-autoupdate run";
Restart = "always";
Restart = "on-failure";
};
})
)

View File

@ -32,6 +32,7 @@ let
description = lib.mdDoc "Username to authenticate with.";
example = "example-user";
type = types.nullOr types.str;
default = null;
};
# Note: It does not make sense to provide a way to declaratively
@ -108,7 +109,7 @@ let
ExecStart = "${openconnect}/bin/openconnect --config=${
generateConfig name icfg
} ${icfg.gateway}";
StandardInput = "file:${icfg.passwordFile}";
StandardInput = lib.mkIf (icfg.passwordFile != null) "file:${icfg.passwordFile}";
ProtectHome = true;
};

View File

@ -5,6 +5,7 @@ with lib;
let
cfg = config.services.powerdns;
configDir = pkgs.writeTextDir "pdns.conf" "${cfg.extraConfig}";
finalConfigDir = if cfg.secretFile == null then configDir else "/run/pdns";
in {
options = {
services.powerdns = {
@ -19,6 +20,19 @@ in {
for details on supported values.
'';
};
secretFile = mkOption {
type = types.nullOr types.path;
default = null;
example = "/run/keys/powerdns.env";
description = lib.mdDoc ''
Environment variables from this file will be interpolated into the
final config file using envsubst with this syntax: `$ENVIRONMENT`
or `''${VARIABLE}`.
The file should contain lines formatted as `SECRET_VAR=SECRET_VALUE`.
This is useful to avoid putting secrets into the nix store.
'';
};
};
};
@ -31,7 +45,13 @@ in {
after = [ "network.target" "mysql.service" "postgresql.service" "openldap.service" ];
serviceConfig = {
ExecStart = [ "" "${pkgs.pdns}/bin/pdns_server --config-dir=${configDir} --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no" ];
EnvironmentFile = lib.optional (cfg.secretFile != null) cfg.secretFile;
ExecStartPre = lib.optional (cfg.secretFile != null)
(pkgs.writeShellScript "pdns-pre-start" ''
umask 077
${pkgs.envsubst}/bin/envsubst -i "${configDir}/pdns.conf" > ${finalConfigDir}/pdns.conf
'');
ExecStart = [ "" "${pkgs.pdns}/bin/pdns_server --config-dir=${finalConfigDir} --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no" ];
};
};

View File

@ -0,0 +1,214 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.webhook;
defaultUser = "webhook";
hookFormat = pkgs.formats.json {};
hookType = types.submodule ({ name, ... }: {
freeformType = hookFormat.type;
options = {
id = mkOption {
type = types.str;
default = name;
description = mdDoc ''
The ID of your hook. This value is used to create the HTTP endpoint (`protocol://yourserver:port/prefix/''${id}`).
'';
};
execute-command = mkOption {
type = types.str;
description = mdDoc "The command that should be executed when the hook is triggered.";
};
};
});
hookFiles = mapAttrsToList (name: hook: hookFormat.generate "webhook-${name}.json" [ hook ]) cfg.hooks
++ mapAttrsToList (name: hook: pkgs.writeText "webhook-${name}.json.tmpl" "[${hook}]") cfg.hooksTemplated;
in {
options = {
services.webhook = {
enable = mkEnableOption (mdDoc ''
[Webhook](https://github.com/adnanh/webhook), a server written in Go that allows you to create HTTP endpoints (hooks),
which execute configured commands for any person or service that knows the URL
'');
package = mkPackageOption pkgs "webhook" {};
user = mkOption {
type = types.str;
default = defaultUser;
description = mdDoc ''
Webhook will be run under this user.
If set, you must create this user yourself!
'';
};
group = mkOption {
type = types.str;
default = defaultUser;
description = mdDoc ''
Webhook will be run under this group.
If set, you must create this group yourself!
'';
};
ip = mkOption {
type = types.str;
default = "0.0.0.0";
description = mdDoc ''
The IP webhook should serve hooks on.
The default means it can be reached on any interface if `openFirewall = true`.
'';
};
port = mkOption {
type = types.port;
default = 9000;
description = mdDoc "The port webhook should be reachable from.";
};
openFirewall = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc ''
Open the configured port in the firewall for external ingress traffic.
Preferably the Webhook server is instead put behind a reverse proxy.
'';
};
enableTemplates = mkOption {
type = types.bool;
default = cfg.hooksTemplated != {};
defaultText = literalExpression "hooksTemplated != {}";
description = mdDoc ''
Enable the generated hooks file to be parsed as a Go template.
See [the documentation](https://github.com/adnanh/webhook/blob/master/docs/Templates.md) for more information.
'';
};
urlPrefix = mkOption {
type = types.str;
default = "hooks";
description = mdDoc ''
The URL path prefix to use for served hooks (`protocol://yourserver:port/''${prefix}/hook-id`).
'';
};
hooks = mkOption {
type = types.attrsOf hookType;
default = {};
example = {
echo = {
execute-command = "echo";
response-message = "Webhook is reachable!";
};
redeploy-webhook = {
execute-command = "/var/scripts/redeploy.sh";
command-working-directory = "/var/webhook";
};
};
description = mdDoc ''
The actual configuration of which hooks will be served.
Read more on the [project homepage] and on the [hook definition] page.
At least one hook needs to be configured.
[hook definition]: https://github.com/adnanh/webhook/blob/master/docs/Hook-Definition.md
[project homepage]: https://github.com/adnanh/webhook#configuration
'';
};
hooksTemplated = mkOption {
type = types.attrsOf types.str;
default = {};
example = {
echo-template = ''
{
"id": "echo-template",
"execute-command": "echo",
"response-message": "{{ getenv "MESSAGE" }}"
}
'';
};
description = mdDoc ''
Same as {option}`hooks`, but these hooks are specified as literal strings instead of Nix values,
and hence can include [template syntax](https://github.com/adnanh/webhook/blob/master/docs/Templates.md)
which might not be representable as JSON.
Template syntax requires the {option}`enableTemplates` option to be set to `true`, which is
done by default if this option is set.
'';
};
verbose = mkOption {
type = types.bool;
default = true;
description = mdDoc "Whether to show verbose output.";
};
extraArgs = mkOption {
type = types.listOf types.str;
default = [];
example = [ "-secure" ];
description = mdDoc ''
These are arguments passed to the webhook command in the systemd service.
You can find the available arguments and options in the [documentation][parameters].
[parameters]: https://github.com/adnanh/webhook/blob/master/docs/Webhook-Parameters.md
'';
};
environment = mkOption {
type = types.attrsOf types.str;
default = {};
description = mdDoc "Extra environment variables passed to webhook.";
};
};
};
config = mkIf cfg.enable {
assertions = let
overlappingHooks = builtins.intersectAttrs cfg.hooks cfg.hooksTemplated;
in [
{
assertion = hookFiles != [];
message = "At least one hook needs to be configured for webhook to run.";
}
{
assertion = overlappingHooks == {};
message = "`services.webhook.hooks` and `services.webhook.hooksTemplated` have overlapping attribute(s): ${concatStringsSep ", " (builtins.attrNames overlappingHooks)}";
}
];
users.users = mkIf (cfg.user == defaultUser) {
${defaultUser} =
{
isSystemUser = true;
group = cfg.group;
description = "Webhook daemon user";
};
};
users.groups = mkIf (cfg.user == defaultUser && cfg.group == defaultUser) {
${defaultUser} = {};
};
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
systemd.services.webhook = {
description = "Webhook service";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment = config.networking.proxy.envVars // cfg.environment;
script = let
args = [ "-ip" cfg.ip "-port" (toString cfg.port) "-urlprefix" cfg.urlPrefix ]
++ concatMap (hook: [ "-hooks" hook ]) hookFiles
++ optional cfg.enableTemplates "-template"
++ optional cfg.verbose "-verbose"
++ cfg.extraArgs;
in ''
${cfg.package}/bin/webhook ${escapeShellArgs args}
'';
serviceConfig = {
Restart = "on-failure";
User = cfg.user;
Group = cfg.group;
};
};
};
}

View File

@ -273,7 +273,11 @@ let
after = [ "network.target" "network-online.target" ];
wantedBy = optional values.autostart "multi-user.target";
environment.DEVICE = name;
path = [ pkgs.kmod pkgs.wireguard-tools config.networking.resolvconf.package ];
path = [
pkgs.wireguard-tools
config.networking.firewall.package # iptables or nftables
config.networking.resolvconf.package # openresolv or systemd
];
serviceConfig = {
Type = "oneshot";
@ -281,7 +285,7 @@ let
};
script = ''
${optionalString (!config.boot.isContainer) "modprobe wireguard"}
${optionalString (!config.boot.isContainer) "${pkgs.kmod}/bin/modprobe wireguard"}
${optionalString (values.configFile != null) ''
cp ${values.configFile} ${configPath}
''}

View File

@ -18,7 +18,7 @@ let
in
lib.concatStrings (lib.mapAttrsToList toArg args);
isPathType = x: lib.strings.isCoercibleToString x && builtins.substring 0 1 (toString x) == "/";
isPathType = x: lib.types.path.check x;
in
{

View File

@ -820,10 +820,10 @@ in
services.nginx = lib.mkIf cfg.nginx.enable {
enable = true;
additionalModules = [ pkgs.nginxModules.brotli ];
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedBrotliSettings = true;
recommendedGzipSettings = true;
recommendedProxySettings = true;

View File

@ -0,0 +1,139 @@
<chapter 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="module-services-garage">
<title>Garage</title>
<para>
<link xlink:href="https://garagehq.deuxfleurs.fr/">Garage</link>
is an open-source, self-hostable S3 store, simpler than MinIO, for geodistributed stores.
The server setup can be automated using
<link linkend="opt-services.garage.enable">services.garage</link>. A
client configured to your local Garage instance is available in
the global environment as <literal>garage-manage</literal>.
</para>
<para>
The current default by NixOS is <package>garage_0_8</package> which is also the latest
major version available.
</para>
<section xml:id="module-services-garage-upgrade-scenarios">
<title>General considerations on upgrades</title>
<para>
Garage provides a cookbook documentation on how to upgrade:
<link xlink:href="https://garagehq.deuxfleurs.fr/documentation/cookbook/upgrading/">https://garagehq.deuxfleurs.fr/documentation/cookbook/upgrading/</link>
</para>
<warning>
<para>Garage has two types of upgrades: patch-level upgrades and minor/major version upgrades.</para>
<para>In all cases, you should read the changelog and ideally test the upgrade on a staging cluster.</para>
<para>Checking the health of your cluster can be achieved using <literal>garage-manage repair</literal>.</para>
</warning>
<warning>
<para>Until 1.0 is released, patch-level upgrades are considered as minor version upgrades.
Minor version upgrades are considered as major version upgrades.
i.e. 0.6 to 0.7 is a major version upgrade.</para>
</warning>
<itemizedlist>
<listitem>
<formalpara>
<title>Straightforward upgrades (patch-level upgrades)</title>
<para>
Upgrades must be performed one by one, i.e. for each node, stop it, upgrade it : change <link linkend="opt-system.stateVersion">stateVersion</link> or <link linkend="opt-services.garage.package">services.garage.package</link>, restart it if it was not already by switching.
</para>
</formalpara>
</listitem>
<listitem>
<formalpara>
<title>Multiple version upgrades</title>
<para>
Garage do not provide any guarantee on moving more than one major-version forward.
E.g., if you're on <literal>0.7</literal>, you cannot upgrade to <literal>0.9</literal>.
You need to upgrade to <literal>0.8</literal> first.
As long as <link linkend="opt-system.stateVersion">stateVersion</link> is declared properly,
this is enforced automatically. The module will issue a warning to remind the user to upgrade to latest
Garage <emphasis>after</emphasis> that deploy.
</para>
</formalpara>
</listitem>
</itemizedlist>
</section>
<section xml:id="module-services-garage-advanced-upgrades">
<title>Advanced upgrades (minor/major version upgrades)</title>
<para>Here are some baseline instructions to handle advanced upgrades in Garage, when in doubt, please refer to upstream instructions.</para>
<itemizedlist>
<listitem><para>Disable API and web access to Garage.</para></listitem>
<listitem><para>Perform <literal>garage-manage repair --all-nodes --yes tables</literal> and <literal>garage-manage repair --all-nodes --yes blocks</literal>.</para></listitem>
<listitem><para>Verify the resulting logs and check that data is synced properly between all nodes.
If you have time, do additional checks (<literal>scrub</literal>, <literal>block_refs</literal>, etc.).</para></listitem>
<listitem><para>Check if queues are empty by <literal>garage-manage stats</literal> or through monitoring tools.</para></listitem>
<listitem><para>Run <literal>systemctl stop garage</literal> to stop the actual Garage version.</para></listitem>
<listitem><para>Backup the metadata folder of ALL your nodes, e.g. for a metadata directory (the default one) in <literal>/var/lib/garage/meta</literal>,
you can run <literal>pushd /var/lib/garage; tar -acf meta-v0.7.tar.zst meta/; popd</literal>.</para></listitem>
<listitem><para>Run the offline migration: <literal>nix-shell -p garage_0_8 --run "garage offline-repair --yes"</literal>, this can take some time depending on how many objects are stored in your cluster.</para></listitem>
<listitem><para>Bump Garage version in your NixOS configuration, either by changing <link linkend="opt-system.stateVersion">stateVersion</link> or bumping <link linkend="opt-services.garage.package">services.garage.package</link>, this should restart Garage automatically.</para></listitem>
<listitem><para>Perform <literal>garage-manage repair --all-nodes --yes tables</literal> and <literal>garage-manage repair --all-nodes --yes blocks</literal>.</para></listitem>
<listitem><para>Wait for a full table sync to run.</para></listitem>
</itemizedlist>
<para>
Your upgraded cluster should be in a working state, re-enable API and web access.
</para>
</section>
<section xml:id="module-services-garage-maintainer-info">
<title>Maintainer information</title>
<para>
As stated in the previous paragraph, we must provide a clean upgrade-path for Garage
since it cannot move more than one major version forward on a single upgrade. This chapter
adds some notes how Garage updates should be rolled out in the future.
This is inspired from how Nextcloud does it.
</para>
<para>
While patch-level updates are no problem and can be done directly in the
package-expression (and should be backported to supported stable branches after that),
major-releases should be added in a new attribute (e.g. Garage <literal>v0.8.0</literal>
should be available in <literal>nixpkgs</literal> as <literal>pkgs.garage_0_8_0</literal>).
To provide simple upgrade paths it's generally useful to backport those as well to stable
branches. As long as the package-default isn't altered, this won't break existing setups.
After that, the versioning-warning in the <literal>garage</literal>-module should be
updated to make sure that the
<link linkend="opt-services.garage.package">package</link>-option selects the latest version
on fresh setups.
</para>
<para>
If major-releases will be abandoned by upstream, we should check first if those are needed
in NixOS for a safe upgrade-path before removing those. In that case we shold keep those
packages, but mark them as insecure in an expression like this (in
<literal>&lt;nixpkgs/pkgs/tools/filesystem/garage/default.nix&gt;</literal>):
<programlisting>/* ... */
{
garage_0_7_3 = generic {
version = "0.7.3";
sha256 = "0000000000000000000000000000000000000000000000000000";
eol = true;
};
}</programlisting>
</para>
<para>
Ideally we should make sure that it's possible to jump two NixOS versions forward:
i.e. the warnings and the logic in the module should guard a user to upgrade from a
Garage on e.g. 22.11 to a Garage on 23.11.
</para>
</section>
</chapter>

View File

@ -8,7 +8,10 @@ let
configFile = toml.generate "garage.toml" cfg.settings;
in
{
meta.maintainers = [ maintainers.raitobezarius ];
meta = {
doc = ./garage-doc.xml;
maintainers = with pkgs.lib.maintainers; [ raitobezarius ];
};
options.services.garage = {
enable = mkEnableOption (lib.mdDoc "Garage Object Storage (S3 compatible)");
@ -56,10 +59,12 @@ in
};
package = mkOption {
default = pkgs.garage;
defaultText = literalExpression "pkgs.garage";
# TODO: when 23.05 is released and if Garage 0.9 is the default, put a stateVersion check.
default = if versionAtLeast stateVersion "23.05" then pkgs.garage_0_8_0
else pkgs.garage_0_7;
defaultText = literalExpression "pkgs.garage_0_7";
type = types.package;
description = lib.mdDoc "Garage package to use.";
description = lib.mdDoc "Garage package to use, if you are upgrading from a major version, please read NixOS and Garage release notes for upgrade instructions.";
};
};

View File

@ -29,6 +29,43 @@ let
) cfg.virtualHosts;
enableIPv6 = config.networking.enableIPv6;
# Mime.types values are taken from brotli sample configuration - https://github.com/google/ngx_brotli
# and Nginx Server Configs - https://github.com/h5bp/server-configs-nginx
compressMimeTypes = [
"application/atom+xml"
"application/geo+json"
"application/json"
"application/ld+json"
"application/manifest+json"
"application/rdf+xml"
"application/vnd.ms-fontobject"
"application/wasm"
"application/x-rss+xml"
"application/x-web-app-manifest+json"
"application/xhtml+xml"
"application/xliff+xml"
"application/xml"
"font/collection"
"font/otf"
"font/ttf"
"image/bmp"
"image/svg+xml"
"image/vnd.microsoft.icon"
"text/cache-manifest"
"text/calendar"
"text/css"
"text/csv"
"text/html"
"text/javascript"
"text/markdown"
"text/plain"
"text/vcard"
"text/vnd.rim.location.xloc"
"text/vtt"
"text/x-component"
"text/xml"
];
defaultFastcgiParams = {
SCRIPT_FILENAME = "$document_root$fastcgi_script_name";
QUERY_STRING = "$query_string";
@ -140,6 +177,16 @@ let
ssl_stapling_verify on;
''}
${optionalString (cfg.recommendedBrotliSettings) ''
brotli on;
brotli_static on;
brotli_comp_level 5;
brotli_window 512k;
brotli_min_length 256;
brotli_types ${lib.concatStringsSep " " compressMimeTypes};
brotli_buffers 32 8k;
''}
${optionalString (cfg.recommendedGzipSettings) ''
gzip on;
gzip_proxied any;
@ -456,6 +503,16 @@ in
'';
};
recommendedBrotliSettings = mkOption {
default = false;
type = types.bool;
description = lib.mdDoc ''
Enable recommended brotli settings. Learn more about compression in Brotli format [here](https://github.com/google/ngx_brotli/blob/master/README.md).
This adds `pkgs.nginxModules.brotli` to `services.nginx.additionalModules`.
'';
};
recommendedGzipSettings = mkOption {
default = false;
type = types.bool;
@ -537,11 +594,10 @@ in
additionalModules = mkOption {
default = [];
type = types.listOf (types.attrsOf types.anything);
example = literalExpression "[ pkgs.nginxModules.brotli ]";
example = literalExpression "[ pkgs.nginxModules.echo ]";
description = lib.mdDoc ''
Additional [third-party nginx modules](https://www.nginx.com/resources/wiki/modules/)
to install. Packaged modules are available in
`pkgs.nginxModules`.
to install. Packaged modules are available in `pkgs.nginxModules`.
'';
};
@ -999,6 +1055,8 @@ in
groups = config.users.groups;
}) dependentCertNames;
services.nginx.additionalModules = optional cfg.recommendedBrotliSettings pkgs.nginxModules.brotli;
systemd.services.nginx = {
description = "Nginx Web Server";
wantedBy = [ "multi-user.target" ];

View File

@ -16,6 +16,7 @@ import datetime
import glob
import os.path
from typing import NamedTuple, List, Optional
from packaging import version
class SystemIdentifier(NamedTuple):
profile: Optional[str]
@ -258,10 +259,16 @@ def main() -> None:
if available_match is None:
raise Exception("could not determine systemd-boot version")
installed_version = installed_match.group(1)
available_version = available_match.group(1)
installed_version = version.parse(installed_match.group(1))
available_version = version.parse(available_match.group(1))
# systemd 252 has a regression that leaves some machines unbootable, so we skip that update.
# The fix is in 252.2
# See https://github.com/systemd/systemd/issues/25363 and https://github.com/NixOS/nixpkgs/pull/201558#issuecomment-1348603263
if installed_version < available_version:
if version.parse('252') <= available_version < version.parse('252.2'):
print("skipping systemd-boot update to %s because of known regression" % available_version)
else:
print("updating systemd-boot from %s to %s" % (installed_version, available_version))
subprocess.check_call(["@systemd@/bin/bootctl", "--esp-path=@efiSysMountPoint@", "update"])

View File

@ -7,12 +7,14 @@ let
efi = config.boot.loader.efi;
python3 = pkgs.python3.withPackages (ps: [ ps.packaging ]);
systemdBootBuilder = pkgs.substituteAll {
src = ./systemd-boot-builder.py;
isExecutable = true;
inherit (pkgs) python3;
inherit python3;
systemd = config.systemd.package;
@ -48,7 +50,7 @@ let
};
checkedSystemdBootBuilder = pkgs.runCommand "systemd-boot" {
nativeBuildInputs = [ pkgs.mypy ];
nativeBuildInputs = [ pkgs.mypy python3 ];
} ''
install -m755 ${systemdBootBuilder} $out
mypy \

View File

@ -42,7 +42,11 @@ in
{
config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
{
system.fsPackages = [ pkgs.bcachefs-tools ];
# We do not want to include bachefs in the fsPackages for systemd-initrd
# because we provide the unwrapped version of mount.bcachefs
# through the extraBin option, which will make it available for use.
system.fsPackages = lib.optional (!config.boot.initrd.systemd.enable) pkgs.bcachefs-tools;
environment.systemPackages = lib.optional (config.boot.initrd.systemd.enable) pkgs.bcachefs-tools;
# use kernel package with bcachefs support until it's in mainline
boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
@ -52,7 +56,14 @@ in
# chacha20 and poly1305 are required only for decryption attempts
boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
boot.initrd.extraUtilsCommands = ''
boot.initrd.systemd.extraBin = {
"bcachefs" = "${pkgs.bcachefs-tools}/bin/bcachefs";
"mount.bcachefs" = pkgs.runCommand "mount.bcachefs" {} ''
cp -pdv ${pkgs.bcachefs-tools}/bin/.mount.bcachefs.sh-wrapped $out
'';
};
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
'';
boot.initrd.extraUtilsCommandsTest = ''

View File

@ -229,7 +229,7 @@ in {
fsck = handleTest ./fsck.nix {};
ft2-clone = handleTest ./ft2-clone.nix {};
mimir = handleTest ./mimir.nix {};
garage = handleTest ./garage.nix {};
garage = handleTest ./garage {};
gerrit = handleTest ./gerrit.nix {};
geth = handleTest ./geth.nix {};
ghostunnel = handleTest ./ghostunnel.nix {};
@ -240,6 +240,7 @@ in {
gitolite-fcgiwrap = handleTest ./gitolite-fcgiwrap.nix {};
glusterfs = handleTest ./glusterfs.nix {};
gnome = handleTest ./gnome.nix {};
gnome-flashback = handleTest ./gnome-flashback.nix {};
gnome-xorg = handleTest ./gnome-xorg.nix {};
go-neb = handleTest ./go-neb.nix {};
gobgpd = handleTest ./gobgpd.nix {};
@ -686,6 +687,7 @@ in {
tuxguitar = handleTest ./tuxguitar.nix {};
ucarp = handleTest ./ucarp.nix {};
udisks2 = handleTest ./udisks2.nix {};
ulogd = handleTest ./ulogd.nix {};
unbound = handleTest ./unbound.nix {};
unifi = handleTest ./unifi.nix {};
unit-php = handleTest ./web-servers/unit-php.nix {};
@ -712,6 +714,7 @@ in {
vsftpd = handleTest ./vsftpd.nix {};
warzone2100 = handleTest ./warzone2100.nix {};
wasabibackend = handleTest ./wasabibackend.nix {};
webhook = runTest ./webhook.nix;
wiki-js = handleTest ./wiki-js.nix {};
wine = handleTest ./wine.nix {};
wireguard = handleTest ./wireguard {};

View File

@ -0,0 +1,98 @@
args@{ mkNode, ... }:
(import ../make-test-python.nix ({ pkgs, ...} : {
name = "garage-basic";
meta = {
maintainers = with pkgs.lib.maintainers; [ raitobezarius ];
};
nodes = {
single_node = mkNode { replicationMode = "none"; };
};
testScript = ''
from typing import List
from dataclasses import dataclass
import re
start_all()
cur_version_regex = re.compile('Current cluster layout version: (?P<ver>\d*)')
key_creation_regex = re.compile('Key name: (?P<key_name>.*)\nKey ID: (?P<key_id>.*)\nSecret key: (?P<secret_key>.*)')
@dataclass
class S3Key:
key_name: str
key_id: str
secret_key: str
@dataclass
class GarageNode:
node_id: str
host: str
def get_node_fqn(machine: Machine) -> GarageNode:
node_id, host = machine.succeed("garage node id").split('@')
return GarageNode(node_id=node_id, host=host)
def get_node_id(machine: Machine) -> str:
return get_node_fqn(machine).node_id
def get_layout_version(machine: Machine) -> int:
version_data = machine.succeed("garage layout show")
m = cur_version_regex.search(version_data)
if m and m.group('ver') is not None:
return int(m.group('ver')) + 1
else:
raise ValueError('Cannot find current layout version')
def apply_garage_layout(machine: Machine, layouts: List[str]):
for layout in layouts:
machine.succeed(f"garage layout assign {layout}")
version = get_layout_version(machine)
machine.succeed(f"garage layout apply --version {version}")
def create_api_key(machine: Machine, key_name: str) -> S3Key:
output = machine.succeed(f"garage key new --name {key_name}")
m = key_creation_regex.match(output)
if not m or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=key_name, key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def get_api_key(machine: Machine, key_pattern: str) -> S3Key:
output = machine.succeed(f"garage key info {key_pattern}")
m = key_creation_regex.match(output)
if not m or not m.group('key_name') or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=m.group('key_name'), key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def test_bucket_writes(node):
node.succeed("garage bucket create test-bucket")
s3_key = create_api_key(node, "test-api-key")
node.succeed("garage bucket allow --read --write test-bucket --key test-api-key")
other_s3_key = get_api_key(node, 'test-api-key')
assert other_s3_key.secret_key == other_s3_key.secret_key
node.succeed(
f"mc alias set test-garage http://[::1]:3900 {s3_key.key_id} {s3_key.secret_key} --api S3v4"
)
node.succeed("echo test | mc pipe test-garage/test-bucket/test.txt")
assert node.succeed("mc cat test-garage/test-bucket/test.txt").strip() == "test"
def test_bucket_over_http(node, bucket='test-bucket', url=None):
if url is None:
url = f"{bucket}.web.garage"
node.succeed(f'garage bucket website --allow {bucket}')
node.succeed(f'echo hello world | mc pipe test-garage/{bucket}/index.html')
assert (node.succeed(f"curl -H 'Host: {url}' http://localhost:3902")).strip() == 'hello world'
with subtest("Garage works as a single-node S3 storage"):
single_node.wait_for_unit("garage.service")
single_node.wait_for_open_port(3900)
# Now Garage is initialized.
single_node_id = get_node_id(single_node)
apply_garage_layout(single_node, [f'-z qemutest -c 1 "{single_node_id}"'])
# Now Garage is operational.
test_bucket_writes(single_node)
test_bucket_over_http(single_node)
'';
})) args

View File

@ -0,0 +1,53 @@
{ system ? builtins.currentSystem
, config ? { }
, pkgs ? import ../../.. { inherit system config; }
}:
with pkgs.lib;
let
mkNode = package: { replicationMode, publicV6Address ? "::1" }: { pkgs, ... }: {
networking.interfaces.eth1.ipv6.addresses = [{
address = publicV6Address;
prefixLength = 64;
}];
networking.firewall.allowedTCPPorts = [ 3901 3902 ];
services.garage = {
enable = true;
inherit package;
settings = {
replication_mode = replicationMode;
rpc_bind_addr = "[::]:3901";
rpc_public_addr = "[${publicV6Address}]:3901";
rpc_secret = "5c1915fa04d0b6739675c61bf5907eb0fe3d9c69850c83820f51b4d25d13868c";
s3_api = {
s3_region = "garage";
api_bind_addr = "[::]:3900";
root_domain = ".s3.garage";
};
s3_web = {
bind_addr = "[::]:3902";
root_domain = ".web.garage";
index = "index.html";
};
};
};
environment.systemPackages = [ pkgs.minio-client ];
# Garage requires at least 1GiB of free disk space to run.
virtualisation.diskSize = 2 * 1024;
};
in
foldl
(matrix: ver: matrix // {
"basic${toString ver}" = import ./basic.nix { inherit system pkgs; mkNode = mkNode pkgs."garage_${ver}"; };
"with-3node-replication${toString ver}" = import ./with-3node-replication.nix { inherit system pkgs; mkNode = mkNode pkgs."garage_${ver}"; };
})
{}
[
"0_8_0"
]

View File

@ -1,50 +1,12 @@
import ./make-test-python.nix ({ pkgs, ...} :
let
mkNode = { replicationMode, publicV6Address ? "::1" }: { pkgs, ... }: {
networking.interfaces.eth1.ipv6.addresses = [{
address = publicV6Address;
prefixLength = 64;
}];
networking.firewall.allowedTCPPorts = [ 3901 3902 ];
services.garage = {
enable = true;
settings = {
replication_mode = replicationMode;
rpc_bind_addr = "[::]:3901";
rpc_public_addr = "[${publicV6Address}]:3901";
rpc_secret = "5c1915fa04d0b6739675c61bf5907eb0fe3d9c69850c83820f51b4d25d13868c";
s3_api = {
s3_region = "garage";
api_bind_addr = "[::]:3900";
root_domain = ".s3.garage";
};
s3_web = {
bind_addr = "[::]:3902";
root_domain = ".web.garage";
index = "index.html";
};
};
};
environment.systemPackages = [ pkgs.minio-client ];
# Garage requires at least 1GiB of free disk space to run.
virtualisation.diskSize = 2 * 1024;
};
in {
name = "garage";
args@{ mkNode, ... }:
(import ../make-test-python.nix ({ pkgs, ...} :
{
name = "garage-3node-replication";
meta = {
maintainers = with pkgs.lib.maintainers; [ raitobezarius ];
};
nodes = {
single_node = mkNode { replicationMode = "none"; };
node1 = mkNode { replicationMode = 3; publicV6Address = "fc00:1::1"; };
node2 = mkNode { replicationMode = 3; publicV6Address = "fc00:1::2"; };
node3 = mkNode { replicationMode = 3; publicV6Address = "fc00:1::3"; };
@ -126,16 +88,6 @@ in {
node.succeed(f'echo hello world | mc pipe test-garage/{bucket}/index.html')
assert (node.succeed(f"curl -H 'Host: {url}' http://localhost:3902")).strip() == 'hello world'
with subtest("Garage works as a single-node S3 storage"):
single_node.wait_for_unit("garage.service")
single_node.wait_for_open_port(3900)
# Now Garage is initialized.
single_node_id = get_node_id(single_node)
apply_garage_layout(single_node, [f'-z qemutest -c 1 "{single_node_id}"'])
# Now Garage is operational.
test_bucket_writes(single_node)
test_bucket_over_http(single_node)
with subtest("Garage works as a multi-node S3 storage"):
nodes = ('node1', 'node2', 'node3', 'node4')
rev_machines = {m.name: m for m in machines}
@ -166,4 +118,4 @@ in {
for node in nodes:
test_bucket_over_http(get_machine(node))
'';
})
})) args

View File

@ -0,0 +1,51 @@
import ./make-test-python.nix ({ pkgs, lib, ...} : {
name = "gnome-flashback";
meta = with lib; {
maintainers = teams.gnome.members ++ [ maintainers.chpatrick ];
};
nodes.machine = { nodes, ... }: let
user = nodes.machine.config.users.users.alice;
in
{ imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.xserver.displayManager = {
gdm.enable = true;
gdm.debug = true;
autoLogin = {
enable = true;
user = user.name;
};
};
services.xserver.desktopManager.gnome.enable = true;
services.xserver.desktopManager.gnome.debug = true;
services.xserver.desktopManager.gnome.flashback.enableMetacity = true;
services.xserver.displayManager.defaultSession = "gnome-flashback-metacity";
};
testScript = { nodes, ... }: let
user = nodes.machine.config.users.users.alice;
uid = toString user.uid;
xauthority = "/run/user/${uid}/gdm/Xauthority";
in ''
with subtest("Login to GNOME Flashback with GDM"):
machine.wait_for_x()
# Wait for alice to be logged in"
machine.wait_for_unit("default.target", "${user.name}")
machine.wait_for_file("${xauthority}")
machine.succeed("xauth merge ${xauthority}")
# Check that logging in has given the user ownership of devices
assert "alice" in machine.succeed("getfacl -p /dev/snd/timer")
with subtest("Wait for Metacity"):
machine.wait_until_succeeds(
"pgrep metacity"
)
machine.sleep(20)
machine.screenshot("screen")
'';
})

View File

@ -465,8 +465,12 @@ let
'';
testSpecialisationConfig = true;
};
# disable zfs so we can support latest kernel if needed
no-zfs-module = {
nixpkgs.overlays = [(final: super: {
zfs = super.zfs.overrideAttrs(_: {meta.platforms = [];});}
)];
};
in {
# !!! `parted mkpart' seems to silently create overlapping partitions.
@ -714,6 +718,7 @@ in {
bcachefsSimple = makeInstallerTest "bcachefs-simple" {
extraInstallerConfig = {
boot.supportedFilesystems = [ "bcachefs" ];
imports = [ no-zfs-module ];
};
createPartitions = ''
@ -737,13 +742,22 @@ in {
bcachefsEncrypted = makeInstallerTest "bcachefs-encrypted" {
extraInstallerConfig = {
boot.supportedFilesystems = [ "bcachefs" ];
# disable zfs so we can support latest kernel if needed
imports = [ no-zfs-module ];
environment.systemPackages = with pkgs; [ keyutils ];
};
# We don't want to use the normal way of unlocking bcachefs defined in tasks/filesystems/bcachefs.nix.
# So, override initrd.postDeviceCommands completely and simply unlock with the predefined password.
extraConfig = ''
boot.initrd.postDeviceCommands = lib.mkForce "echo password | bcachefs unlock /dev/vda3";
boot.kernelParams = lib.mkAfter [ "console=tty0" ];
'';
enableOCR = true;
preBootCommands = ''
machine.start()
machine.wait_for_text("enter passphrase for ")
machine.send_chars("password\n")
'';
createPartitions = ''
@ -769,6 +783,9 @@ in {
bcachefsMulti = makeInstallerTest "bcachefs-multi" {
extraInstallerConfig = {
boot.supportedFilesystems = [ "bcachefs" ];
# disable zfs so we can support latest kernel if needed
imports = [ no-zfs-module ];
};
createPartitions = ''

View File

@ -33,8 +33,6 @@ import ./make-test-python.nix ({ pkgs, ... }:
nodes = {
node = {...}: {
environment.systemPackages = with pkgs; [
mongodb-3_4
mongodb-3_6
mongodb-4_0
mongodb-4_2
mongodb-4_4
@ -46,8 +44,6 @@ import ./make-test-python.nix ({ pkgs, ... }:
testScript = ''
node.start()
''
+ runMongoDBTest pkgs.mongodb-3_4
+ runMongoDBTest pkgs.mongodb-3_6
+ runMongoDBTest pkgs.mongodb-4_0
+ runMongoDBTest pkgs.mongodb-4_2
+ runMongoDBTest pkgs.mongodb-4_4

84
nixos/tests/ulogd.nix Normal file
View File

@ -0,0 +1,84 @@
import ./make-test-python.nix ({ pkgs, lib, ... }: {
name = "ulogd";
meta = with lib; {
maintainers = with maintainers; [ p-h ];
};
nodes.machine = { ... }: {
networking.firewall.enable = false;
networking.nftables.enable = true;
networking.nftables.ruleset = ''
table inet filter {
chain input {
type filter hook input priority 0;
log group 2 accept
}
chain output {
type filter hook output priority 0; policy accept;
log group 2 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
log group 2 accept
}
}
'';
services.ulogd = {
enable = true;
settings = {
global = {
logfile = "/var/log/ulogd.log";
stack = "log1:NFLOG,base1:BASE,pcap1:PCAP";
};
log1.group = 2;
pcap1 = {
file = "/var/log/ulogd.pcap";
sync = 1;
};
};
};
environment.systemPackages = with pkgs; [
tcpdump
];
};
testScript = ''
start_all()
machine.wait_for_unit("ulogd.service")
machine.wait_for_unit("network-online.target")
with subtest("Ulogd is running"):
machine.succeed("pgrep ulogd >&2")
# All packets show up twice in the logs
with subtest("Logs are collected"):
machine.succeed("ping -f 127.0.0.1 -c 5 >&2")
machine.succeed("sleep 2")
machine.wait_until_succeeds("du /var/log/ulogd.pcap >&2")
_, echo_request_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 8 and host 127.0.0.1")
expected, actual = 5*2, len(echo_request_packets.splitlines())
assert expected == actual, f"Expected {expected} packets, got: {actual}"
_, echo_reply_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 0 and host 127.0.0.1")
expected, actual = 5*2, len(echo_reply_packets.splitlines())
assert expected == actual, f"Expected {expected} packets, got: {actual}"
with subtest("Reloading service reopens log file"):
machine.succeed("mv /var/log/ulogd.pcap /var/log/old_ulogd.pcap")
machine.succeed("systemctl reload ulogd.service")
machine.succeed("ping -f 127.0.0.1 -c 5 >&2")
machine.succeed("sleep 2")
_, echo_request_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 8 and host 127.0.0.1")
expected, actual = 5*2, len(echo_request_packets.splitlines())
assert expected == actual, f"Expected {expected} packets, got: {actual}"
_, echo_reply_packets = machine.execute("tcpdump -r /var/log/ulogd.pcap icmp[0] == 0 and host 127.0.0.1")
expected, actual = 5*2, len(echo_reply_packets.splitlines())
assert expected == actual, f"Expected {expected} packets, got: {actual}"
'';
})

65
nixos/tests/webhook.nix Normal file
View File

@ -0,0 +1,65 @@
{ pkgs, ... }:
let
forwardedPort = 19000;
internalPort = 9000;
in
{
name = "webhook";
nodes = {
webhookMachine = { pkgs, ... }: {
virtualisation.forwardPorts = [{
host.port = forwardedPort;
guest.port = internalPort;
}];
services.webhook = {
enable = true;
port = internalPort;
openFirewall = true;
hooks = {
echo = {
execute-command = "echo";
response-message = "Webhook is reachable!";
};
};
hooksTemplated = {
echoTemplate = ''
{
"id": "echo-template",
"execute-command": "echo",
"response-message": "{{ getenv "WEBHOOK_MESSAGE" }}"
}
'';
};
environment.WEBHOOK_MESSAGE = "Templates are working!";
};
};
};
extraPythonPackages = p: [
p.requests
p.types-requests
];
testScript = { nodes, ... }: ''
import requests
webhookMachine.wait_for_unit("webhook")
webhookMachine.wait_for_open_port(${toString internalPort})
with subtest("Check that webhooks can be called externally"):
response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo")
print(f"Response code: {response.status_code}")
print("Response: %r" % response.content)
assert response.status_code == 200
assert response.content == b"Webhook is reachable!"
with subtest("Check that templated webhooks can be called externally"):
response = requests.get("http://localhost:${toString forwardedPort}/hooks/echo-template")
print(f"Response code: {response.status_code}")
print("Response: %r" % response.content)
assert response.status_code == 200
assert response.content == b"Templates are working!"
'';
}

View File

@ -1,5 +1,4 @@
{ kernelPackages ? null }:
import ../make-test-python.nix ({ pkgs, lib, ...} :
import ../make-test-python.nix ({ pkgs, lib, kernelPackages ? null, ...} :
let
wg-snakeoil-keys = import ./snakeoil-keys.nix;
peer = (import ./make-peer.nix) { inherit lib; };

View File

@ -7,10 +7,11 @@
with pkgs.lib;
let
tests = let callTest = p: flip (import p) { inherit system pkgs; }; in {
tests = let callTest = p: args: import p ({ inherit system pkgs; } // args); in {
basic = callTest ./basic.nix;
namespaces = callTest ./namespaces.nix;
wg-quick = callTest ./wg-quick.nix;
wg-quick-nftables = args: callTest ./wg-quick.nix ({ nftables = true; } // args);
generated = callTest ./generated.nix;
};
in

View File

@ -1,5 +1,4 @@
{ kernelPackages ? null }:
import ../make-test-python.nix ({ pkgs, lib, ... } : {
import ../make-test-python.nix ({ pkgs, lib, kernelPackages ? null, ... } : {
name = "wireguard-generated";
meta = with pkgs.lib.maintainers; {
maintainers = [ ma27 grahamc ];

View File

@ -1,5 +1,3 @@
{ kernelPackages ? null }:
let
listenPort = 12345;
socketNamespace = "foo";
@ -15,7 +13,7 @@ let
in
import ../make-test-python.nix ({ pkgs, lib, ... } : {
import ../make-test-python.nix ({ pkgs, lib, kernelPackages ? null, ... } : {
name = "wireguard-with-namespaces";
meta = with pkgs.lib.maintainers; {
maintainers = [ asymmetric ];

View File

@ -1,9 +1,13 @@
{ kernelPackages ? null }:
import ../make-test-python.nix ({ pkgs, lib, ... }:
import ../make-test-python.nix ({ pkgs, lib, kernelPackages ? null, nftables ? false, ... }:
let
wg-snakeoil-keys = import ./snakeoil-keys.nix;
peer = (import ./make-peer.nix) { inherit lib; };
peer = import ./make-peer.nix { inherit lib; };
commonConfig = {
boot.kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
networking.nftables.enable = nftables;
# Make sure iptables doesn't work with nftables enabled
boot.blacklistedKernelModules = lib.mkIf nftables [ "nft_compat" ];
};
in
{
name = "wg-quick";
@ -15,8 +19,9 @@ import ../make-test-python.nix ({ pkgs, lib, ... }:
peer0 = peer {
ip4 = "192.168.0.1";
ip6 = "fd00::1";
extraConfig = {
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
extraConfig = lib.mkMerge [
commonConfig
{
networking.firewall.allowedUDPPorts = [ 23542 ];
networking.wg-quick.interfaces.wg0 = {
address = [ "10.23.42.1/32" "fc00::1/128" ];
@ -32,14 +37,16 @@ import ../make-test-python.nix ({ pkgs, lib, ... }:
dns = [ "10.23.42.2" "fc00::2" "wg0" ];
};
};
}
];
};
peer1 = peer {
ip4 = "192.168.0.2";
ip6 = "fd00::2";
extraConfig = {
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
extraConfig = lib.mkMerge [
commonConfig
{
networking.useNetworkd = true;
networking.wg-quick.interfaces.wg0 = {
address = [ "10.23.42.2/32" "fc00::2/128" ];
@ -55,7 +62,8 @@ import ../make-test-python.nix ({ pkgs, lib, ... }:
dns = [ "10.23.42.1" "fc00::1" "wg0" ];
};
};
}
];
};
};

View File

@ -18,14 +18,14 @@
python3Packages.buildPythonApplication rec {
pname = "eartag";
version = "0.2.1";
version = "0.3.1";
format = "other";
src = fetchFromGitHub {
owner = "knuxify";
repo = pname;
rev = version;
sha256 = "sha256-TlY2F2y7ZZ9f+vkYYkES5zoIGcuTWP1+rOJI62wc4SU=";
rev = "refs/tags/${version}";
sha256 = "sha256-gN3V5ZHlhHp52Jg/i+hDLEDpSvP8yFngujyw5ZncQQg=";
};
postPatch = ''

View File

@ -21,14 +21,14 @@
stdenv.mkDerivation rec {
pname = "furnace";
version = "0.6pre2";
version = "0.6pre3";
src = fetchFromGitHub {
owner = "tildearrow";
repo = "furnace";
rev = "v${version}";
fetchSubmodules = true;
sha256 = "sha256-ydywnlZ6HEcTiBIB92yduCzPsOljvypP1KpCVjETzBc=";
sha256 = "sha256-bHVeTw69k6LLcrfkmGxvjlFfR/hWiCfm/P3utknid1o=";
};
nativeBuildInputs = [

View File

@ -1,4 +1,8 @@
{ lib, stdenv, fetchFromGitHub, pythonPackages, mopidy }:
{ lib
, fetchFromGitHub
, pythonPackages
, mopidy
}:
pythonPackages.buildPythonApplication rec {
pname = "mopidy-musicbox-webclient";
@ -6,18 +10,22 @@ pythonPackages.buildPythonApplication rec {
src = fetchFromGitHub {
owner = "pimusicbox";
repo = "mopidy-musicbox-webclient";
repo = pname;
rev = "v${version}";
sha256 = "1lzarazq67gciyn6r8cdms0f7j0ayyfwhpf28z93ydb280mfrrb9";
};
propagatedBuildInputs = [ mopidy ];
propagatedBuildInputs = [
mopidy
];
doCheck = false;
meta = with lib; {
description = "Mopidy extension for playing music from SoundCloud";
license = licenses.mit;
maintainers = [ maintainers.spwhitt ];
description = "A Mopidy frontend extension and web client with additional features for Pi MusicBox";
homepage = "https://github.com/pimusicbox/mopidy-musicbox-webclient";
changelog = "https://github.com/pimusicbox/mopidy-musicbox-webclient/blob/v${version}/CHANGELOG.rst";
license = licenses.asl20;
maintainers = with maintainers; [ spwhitt ];
};
}

View File

@ -8,13 +8,13 @@
stdenv.mkDerivation rec {
pname = "pt2-clone";
version = "1.55";
version = "1.56";
src = fetchFromGitHub {
owner = "8bitbubsy";
repo = "pt2-clone";
rev = "v${version}";
sha256 = "sha256-NwkHb0FOg9wAgtcEtWqOpNGvBXjQIoc4pMmf/32Gxr0=";
sha256 = "sha256-NetzlQdhbyClnVQTrHoX9QpVtoj8a8FoDue+uxhgrlA=";
};
nativeBuildInputs = [ cmake ];

View File

@ -23,13 +23,13 @@ let
in
stdenv.mkDerivation rec {
pname = "reaper";
version = "6.71";
version = "6.73";
src = fetchurl {
url = url_for_platform version stdenv.hostPlatform.qemuArch;
hash = {
x86_64-linux = "sha256-AHi0US3U4PU/IrlCahJbm+tkmsz+nh0AFOk0lB2lI3M=";
aarch64-linux = "sha256-/yCV7wllQ024rux4u4Tp9TZK8JMN9Tk0DFJY3W2BGAk=";
x86_64-linux = "sha256-omQ2XdL4C78BQRuYKy90QlMko2XYHoVhd4X0C+Zyp8E=";
aarch64-linux = "sha256-XHohznrfFMHHgif4iFrpXb0FNddYiBb0gB7ZznlU834=";
}.${stdenv.hostPlatform.system};
};

View File

@ -24,13 +24,13 @@ let
in
stdenv.mkDerivation rec {
pname = "neovim-unwrapped";
version = "0.8.1";
version = "0.8.2";
src = fetchFromGitHub {
owner = "neovim";
repo = "neovim";
rev = "v${version}";
sha256 = "sha256-B2ZpwhdmdvPOnxVyJDfNzUT5rTVuBhJXyMwwzCl9Fac=";
sha256 = "sha256-eqiH/K8w0FZNHLBBMjiTSQjNQyONqcx3X+d85gPnFJg=";
};
patches = [

View File

@ -10,18 +10,36 @@
, gtk3
, wrapGAppsHook
, makeWrapper
, pinegrowVersion ? "7"
}:
let
# major version upgrade requires a new license. So keep version 6 around.
versions = {
"6" = {
version = "6.8";
src = fetchurl {
url = "https://download.pinegrow.com/PinegrowLinux64.${versions."6".version}.zip";
sha256 = "sha256-gqRmu0VR8Aj57UwYYLKICd4FnYZMhM6pTTSGIY5MLMk=";
};
};
"7" = {
version = "7.03";
src = fetchurl {
url = "https://download.pinegrow.com/PinegrowLinux64.${versions."7".version}.zip";
sha256 = "sha256-MdaJBmOPr1+J235IZPd3EBzbDTiORginyVKsjSkKbpE=";
};
};
};
in
stdenv.mkDerivation rec {
pname = "pinegrow";
# deactivate auto update, because an old 6.21 version is getting mixed up
# see e.g. https://github.com/NixOS/nixpkgs/pull/184460
version = "6.8"; # nixpkgs-update: no auto update
version = versions.${pinegrowVersion}.version; # nixpkgs-update: no auto update
src = fetchurl {
url = "https://download.pinegrow.com/PinegrowLinux64.${version}.zip";
sha256 = "sha256-gqRmu0VR8Aj57UwYYLKICd4FnYZMhM6pTTSGIY5MLMk=";
};
src = versions.${pinegrowVersion}.src;
nativeBuildInputs = [
unzip

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
# generated by pkgs/applications/editors/vim/plugins/nvim-treesitter/update.py
{ buildGrammar, fetchFromGitHub, fetchFromGitLab, fetchgit }:
{ buildGrammar, fetchFromBitbucket, fetchFromGitHub, fetchFromGitLab, fetchFromGitea, fetchFromGitiles, fetchFromRepoOrCz, fetchFromSourcehut, fetchgit }:
{
ada = buildGrammar {
@ -38,12 +38,12 @@
};
astro = buildGrammar {
language = "astro";
version = "22697b0";
version = "a1f66bf";
source = fetchFromGitHub {
owner = "virchau13";
repo = "tree-sitter-astro";
rev = "22697b0e2413464b7abaea9269c5e83a59e39a83";
hash = "sha256-vp2VjkfBEYEUwUCjBlbVjPIB49QIikdFAITzzFLZX+U=";
rev = "a1f66bf72ed68b87f779bce9a52e5c6521fc867e";
hash = "sha256-Q+nOJQAAHqvyH8PVckh38q0TJ6b9jjb/pZHC/U2Hs5Q=";
};
meta.homepage = "https://github.com/virchau13/tree-sitter-astro";
};
@ -758,12 +758,12 @@
};
julia = buildGrammar {
language = "julia";
version = "f254ff9";
version = "1cd300b";
source = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-julia";
rev = "f254ff9c52e994f629a60821662917d2c6c0e8eb";
hash = "sha256-918mGh91hAl8hx4HoGOXr2BFoDtMz5yPkQRMDrkk1Mg=";
rev = "1cd300bda52e680872053cd55a228c1809cb0c3a";
hash = "sha256-qdKC1yk2CQGQlVWI/0XHrsTF81rRFUlmKSNJ3RoZcdI=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-julia";
};
@ -791,12 +791,12 @@
};
latex = buildGrammar {
language = "latex";
version = "1ec3941";
version = "6b7ea83";
source = fetchFromGitHub {
owner = "latex-lsp";
repo = "tree-sitter-latex";
rev = "1ec3941b971dccfa36cb1cd6221a2e4a1cd3e250";
hash = "sha256-m/6GWV797gaJnWVU07RvHjfAeRzGT9GZH3M9HkcjUq0=";
rev = "6b7ea839307670e6bda011f888717d3a882ecc09";
hash = "sha256-fmMm6HM9ZCnTyDxKmouoKFPYWkbrM//gHwVEFsICzUs=";
};
meta.homepage = "https://github.com/latex-lsp/tree-sitter-latex";
};
@ -958,24 +958,24 @@
};
ocaml = buildGrammar {
language = "ocaml";
version = "de07323";
version = "f1106bf";
source = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-ocaml";
rev = "de07323343946c32759933cb3b7c78e821098cad";
hash = "sha256-JhJSg6Ht3dy94hAP2yy0fg9U/IeYNGaHYoys/++yOwg=";
rev = "f1106bf834703f1f2f795da1a3b5f8f40174ffcc";
hash = "sha256-5X2c2Deb8xNlp0LPQKFWIT3jwxKuuKdFlp9b3iA818Y=";
};
location = "ocaml";
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ocaml";
};
ocaml_interface = buildGrammar {
language = "ocaml_interface";
version = "de07323";
version = "f1106bf";
source = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-ocaml";
rev = "de07323343946c32759933cb3b7c78e821098cad";
hash = "sha256-JhJSg6Ht3dy94hAP2yy0fg9U/IeYNGaHYoys/++yOwg=";
rev = "f1106bf834703f1f2f795da1a3b5f8f40174ffcc";
hash = "sha256-5X2c2Deb8xNlp0LPQKFWIT3jwxKuuKdFlp9b3iA818Y=";
};
location = "interface";
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ocaml";
@ -1115,12 +1115,12 @@
};
qmljs = buildGrammar {
language = "qmljs";
version = "0b2b25b";
version = "ab75be9";
source = fetchFromGitHub {
owner = "yuja";
repo = "tree-sitter-qmljs";
rev = "0b2b25bcaa7d4925d5f0dda16f6a99c588a437f1";
hash = "sha256-Hf8LfrN3YjN9hpGtTVmK3ZjJ/b/fsRCg9FG7hSSj/mk=";
rev = "ab75be9750e6f2f804638824d1790034286a830c";
hash = "sha256-UP/+svGOSMlUOMmNMpXKtDDPY9ZIldjWF5sM+PMbE9M=";
};
meta.homepage = "https://github.com/yuja/tree-sitter-qmljs";
};
@ -1269,12 +1269,12 @@
};
slint = buildGrammar {
language = "slint";
version = "d422300";
version = "0754752";
source = fetchFromGitHub {
owner = "jrmoulton";
repo = "tree-sitter-slint";
rev = "d422300f5d6ccce8f9a617dfed57aafb636fadb2";
hash = "sha256-j6NBJaix0oOUKLAaeo+/1XdYatStqyaTyLKawq/nFvc=";
rev = "07547525cdf4627343dca5891f1743ae45e879bb";
hash = "sha256-FB5uDzvJKBN3KH+g71kn2/SX8KIZdLv3OamX8f1NeVE=";
};
meta.homepage = "https://github.com/jrmoulton/tree-sitter-slint";
};
@ -1371,8 +1371,10 @@
t32 = buildGrammar {
language = "t32";
version = "f8106fc";
source = fetchgit {
url = "https://codeberg.org/xasc/tree-sitter-t32";
source = fetchFromGitea {
domain = "codeberg.org";
owner = "xasc";
repo = "tree-sitter-t32";
rev = "f8106fcf5a27f905b3d9d55d9cd3e910bea70c60";
hash = "sha256-hKddSekx67Yqm4+LqVaH8Sf1+73RlCnXE6th2FTHB34=";
};
@ -1390,6 +1392,18 @@
generate = true;
meta.homepage = "https://github.com/euclidianAce/tree-sitter-teal";
};
terraform = buildGrammar {
language = "terraform";
version = "0ff887f";
source = fetchFromGitHub {
owner = "MichaHoffmann";
repo = "tree-sitter-hcl";
rev = "0ff887f2a60a147452d52db060de6b42f42f1441";
hash = "sha256-L4B2qtGqrtyLHyUMx1p0t4aKncm72dUE+e19Fv5iqUA=";
};
location = "dialects/terraform";
meta.homepage = "https://github.com/MichaHoffmann/tree-sitter-hcl";
};
tiger = buildGrammar {
language = "tiger";
version = "a233ebe";
@ -1403,12 +1417,12 @@
};
tlaplus = buildGrammar {
language = "tlaplus";
version = "27e6d23";
version = "f2ad727";
source = fetchFromGitHub {
owner = "tlaplus-community";
repo = "tree-sitter-tlaplus";
rev = "27e6d238a5708b0490f43351f6e0baeaab4c9c1f";
hash = "sha256-4RwHJN1N2DupVIYqWk2sioiiTtEKBmuLT+t+THr71os=";
rev = "f2ad7272d145598ff2d27fda15379d26aa33a7e1";
hash = "sha256-lnl0q9vJiIoqU3Lo+uCIcMdMueXTQ/MVgZUCHvXeqhs=";
};
meta.homepage = "https://github.com/tlaplus-community/tree-sitter-tlaplus";
};
@ -1558,6 +1572,17 @@
};
meta.homepage = "https://github.com/szebniok/tree-sitter-wgsl";
};
wgsl_bevy = buildGrammar {
language = "wgsl_bevy";
version = "c81dc77";
source = fetchFromGitHub {
owner = "theHamsta";
repo = "tree-sitter-wgsl-bevy";
rev = "c81dc770310795caea5e00996505deba024ec698";
hash = "sha256-CNEZ8GKfcT5YOdlrqEFE8q2FF0Zs+GsWisd1DA6mnUk=";
};
meta.homepage = "https://github.com/theHamsta/tree-sitter-wgsl-bevy";
};
yaml = buildGrammar {
language = "yaml";
version = "0e36bed";

View File

@ -11,7 +11,7 @@ let
in
mkShell {
packages = [ neovim nix-prefetch python3 ];
packages = [ neovim nurl python3 ];
NVIM_TREESITTER = nvim-treesitter;
}

View File

@ -2,8 +2,8 @@
#!nix-shell update-shell.nix -i python
import json
import re
import subprocess
from concurrent.futures import ThreadPoolExecutor
from os import environ
from os.path import dirname, join
@ -22,8 +22,6 @@ configs = json.loads(
)
)
regex = re.compile("^https?://(github.com|gitlab.com)/(.+?)/(.+?)(.git)?$")
def generate_grammar(item):
lang, lock = item
@ -40,47 +38,8 @@ def generate_grammar(item):
version = "{rev[:7]}";
source = """
m = regex.fullmatch(url)
cmd = ["nix-prefetch", "--rev", rev]
match m and m.group(1, 2, 3):
case "github.com", owner, repo:
cmd += [
"fetchFromGitHub",
"--owner",
owner,
"--repo",
repo,
]
generated += f"""fetchFromGitHub {{
owner = "{owner}";
repo = "{repo}";"""
case "gitlab.com", owner, repo:
cmd += [
"fetchFromGitLab",
"--owner",
owner,
"--repo",
repo,
]
generated += f"""fetchFromGitLab {{
owner = "{owner}";
repo = "{repo}";"""
case _:
cmd += ["fetchgit", "--url", url]
generated += f"""fetchgit {{
url = "{url}";"""
hash = subprocess.check_output(cmd, text=True).strip()
generated += f"""
rev = "{rev}";
hash = "{hash}";
}};"""
generated += subprocess.check_output(["nurl", url, rev, "--indent=4"], text=True)
generated += ";"
location = info.get("location")
if location:
@ -101,12 +60,17 @@ def generate_grammar(item):
generated_file = """# generated by pkgs/applications/editors/vim/plugins/nvim-treesitter/update.py
{ buildGrammar, fetchFromGitHub, fetchFromGitLab, fetchgit }:
{ buildGrammar"""
for fetcher in subprocess.check_output(["nurl", "-L"], text=True).splitlines():
generated_file += f", {fetcher}"
generated_file += """ }:
{
"""
for generated in map(generate_grammar, lockfile.items()):
for generated in ThreadPoolExecutor().map(generate_grammar, lockfile.items()):
generated_file += generated
generated_file += "}\n"

View File

@ -669,6 +669,10 @@ self: super: {
dontBuild = true;
});
vim-mediawiki-editor = super.vim-mediawiki-editor.overrideAttrs (old: {
passthru.python3Dependencies = [ python3.pkgs.mwclient ];
});
nvim-spectre = super.nvim-spectre.overrideAttrs (old: {
dependencies = with self; [ plenary-nvim ];
});

View File

@ -393,6 +393,7 @@ https://github.com/vim-scripts/matchit.zip/,,
https://github.com/marko-cerovac/material.nvim/,,
https://github.com/kaicataldo/material.vim/,HEAD,
https://github.com/vim-scripts/mayansmoke/,,
https://github.com/chikamichi/mediawiki.vim/,HEAD,
https://github.com/echasnovski/mini.nvim/,,
https://github.com/wfxr/minimap.vim/,,
https://github.com/jose-elias-alvarez/minsnip.nvim/,,
@ -932,6 +933,7 @@ https://github.com/preservim/vim-markdown/,,
https://github.com/euclio/vim-markdown-composer/,,
https://github.com/mzlogin/vim-markdown-toc/,,
https://github.com/andymass/vim-matchup/,,
https://github.com/aquach/vim-mediawiki-editor/,HEAD,
https://github.com/samoshkin/vim-mergetool/,,
https://github.com/idanarye/vim-merginal/,,
https://github.com/david-a-wheeler/vim-metamath/,,

View File

@ -1483,8 +1483,8 @@ let
mktplcRef = {
name = "latex-workshop";
publisher = "James-Yu";
version = "9.2.0";
sha256 = "sha256-AAADJkMXsKvpEHBH8+TNM0x3CGEGVtf/b+tce297rkw=";
version = "9.2.1";
sha256 = "sha256-0+Kp0B56Z2ITx42+cgBkbOZMo9X0cJkPVypFXX8JXRI=";
};
meta = with lib; {
changelog = "https://marketplace.visualstudio.com/items/James-Yu.latex-workshop/changelog";

View File

@ -2,6 +2,7 @@
, stdenv
, fetchFromGitHub
, pkg-config
, which
, wrapGAppsHook
, libicns
, SDL2
@ -24,13 +25,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "ares";
version = "130.1";
version = "131";
src = fetchFromGitHub {
owner = "ares-emulator";
repo = "ares";
rev = "v${finalAttrs.version}";
hash = "sha256-q2wDpbNaDyKPBL20FDaHScKQEJYstlQdJ4CzbRoSPlk=";
hash = "sha256-gex53bh/175/i0cMimcPO26C6cxqQGPo4sp2bxh1sAw=";
};
patches = [
@ -42,6 +43,7 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
pkg-config
which
wrapGAppsHook
] ++ lib.optionals stdenv.isDarwin [
libicns
@ -72,6 +74,7 @@ stdenv.mkDerivation (finalAttrs: {
"hiro=gtk3"
] ++ lib.optionals stdenv.isDarwin [
"hiro=cocoa"
"lto=false"
"vulkan=false"
] ++ [
"local=false"

View File

@ -3,21 +3,27 @@
, fetchFromGitHub
, SDL2
, cmake
, ffmpeg
, ffmpeg_4
, imagemagick
, libedit
, libelf
, libepoxy
, libzip
, lua
, lua5_4
, minizip
, pkg-config
, qtbase
, qtmultimedia
, qttools
, wrapQtAppsHook
, libsForQt5
}:
let
ffmpeg = ffmpeg_4;
lua = lua5_4;
inherit (libsForQt5)
qtbase
qtmultimedia
qttools
wrapQtAppsHook;
in
stdenv.mkDerivation (finalAttrs: {
pname = "mgba";
version = "0.10.0";

View File

@ -46,13 +46,13 @@ in
stdenv.mkDerivation rec {
pname = "imagemagick";
version = "7.1.0-55";
version = "7.1.0-56";
src = fetchFromGitHub {
owner = "ImageMagick";
repo = "ImageMagick";
rev = version;
hash = "sha256-V0poyS1QnHhnSc3QbHHE+BctCBv2knriK0ihMF565d8=";
hash = "sha256-21gzq7VqjJndgkMIOk5ym6PEyIjMGpBfZiPDfkuqOYQ=";
};
outputs = [ "out" "dev" "doc" ]; # bin/ isn't really big

View File

@ -1,4 +1,5 @@
{ lib
, stdenv
, buildDotnetModule
, fetchFromGitHub
, dotnetCorePackages
@ -12,26 +13,36 @@
buildDotnetModule rec {
pname = "archisteamfarm";
# nixpkgs-update: no auto update
version = "5.3.2.4";
version = "5.4.0.3";
src = fetchFromGitHub {
owner = "justarchinet";
repo = pname;
rev = version;
sha256 = "sha256-qjU5TcYkAFJVYTOCwePGOVR9hYKNtinzLt5P4aTs578=";
sha256 = "sha256-+S0nvgiMxSUQI/TzAMES6bAix1iudj1+EkOcXO+6igE=";
};
dotnet-runtime = dotnetCorePackages.aspnetcore_6_0;
dotnet-runtime = dotnetCorePackages.aspnetcore_7_0;
dotnet-sdk = dotnetCorePackages.sdk_7_0;
nugetDeps = ./deps.nix;
projectFile = "ArchiSteamFarm.sln";
executables = [ "ArchiSteamFarm" ];
dotnetFlags = [
"-p:PublishSingleFile=true"
"-p:PublishTrimmed=true"
];
selfContainedBuild = true;
runtimeDeps = [ libkrb5 zlib openssl ];
doCheck = true;
preBuild = ''
export projectFile=(ArchiSteamFarm)
'';
preInstall = ''
# A mutable path, with this directory tree must be set. By default, this would point at the nix store causing errors.
makeWrapperArgs+=(
@ -40,7 +51,17 @@ buildDotnetModule rec {
)
'';
postInstall = ''
buildPlugin() {
dotnet publish $1 -p:ContinuousIntegrationBuild=true -p:Deterministic=true \
--output $out/lib/${pname}/plugins/$1 --configuration Release \
-p:TargetLatestRuntimePatch=false -p:UseAppHost=false --no-restore
}
buildPlugin ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
'';
passthru = {
# nix-shell maintainers/scripts/update.nix --argstr package ArchiSteamFarm
updateScript = ./update.sh;
ui = callPackage ./web-ui { };
};

View File

@ -56,13 +56,12 @@
(fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.14.1"; sha256 = "1k6nnawd016xpwgzdzy84z1lcv2vc1cygcksw19wbgd8dharyyk7"; })
(fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.14.1"; sha256 = "0zn99311zfn602phxyskfjq9vly0w5712z6fly8r4q0h94qa8c85"; })
(fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.14.1"; sha256 = "0qxjnbdj645l5sd6y3100yyrq1jy5misswg6xcch06x8jv7zaw1p"; })
(fetchNuGet { pname = "JetBrains.Annotations"; version = "2022.1.0"; sha256 = "0lsqpssain0v9i3jhpi1c42r5s329y31cvqk5x7gqvy17f29y002"; })
(fetchNuGet { pname = "JetBrains.Annotations"; version = "2022.3.1"; sha256 = "0lkhyyz25q82ygnxy26lwy5cl8fvkdc13pcn433xpjj8akzbmgd6"; })
(fetchNuGet { pname = "Markdig.Signed"; version = "0.30.4"; sha256 = "1bzc2vqpsq4mx6rw2rnk4hr14gqd5w8rf2h026gh7rqkwqd3r2dj"; })
(fetchNuGet { pname = "Microsoft.AspNetCore.JsonPatch"; version = "6.0.0-rc.1.21452.15"; sha256 = "0c3vnaag8gxlxij77n18m3hawpjkjjamsnq5kfjz5cvc7sfg3fwh"; })
(fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.NewtonsoftJson"; version = "6.0.0-rc.1.21452.15"; sha256 = "1xyx358w4fqzxr9cy358agnm86rjijbnvikiqlngz2msgmldxi2z"; })
(fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
(fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.3.2"; sha256 = "1f05l2vm8inlwhk36lfbyszjlcnvdd2qw2832npaah0dldn6dz00"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
(fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.4.0"; sha256 = "17lm9gvz48ay8xxrjacxjsknnva8i939prg26z6fq3svgcy0nc30"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
(fetchNuGet { pname = "Microsoft.Extensions.ApiDescription.Server"; version = "6.0.5"; sha256 = "1pi2bm3cm0a7jzqzmfc2r7bpcdkmk3hhjfvb2c81j7wl7xdw3624"; })
@ -73,15 +72,13 @@
(fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.0"; sha256 = "0b75fmins171zi6bfdcq1kcvyrirs8n91mknjnxy4c3ygi1rrnj0"; })
(fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "6.0.0"; sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g"; })
(fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
(fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.3.2"; sha256 = "0pm06nxqi8aw04lciqy7iz8ln1qm5mx06cpwgqa2dfwvnjp7zxnm"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
(fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.4.0"; sha256 = "1l1q2zi2091ac2cbynpsj0c8vff074y4c3vcnm4q7js1wv08jwld"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
(fetchNuGet { pname = "Microsoft.OpenApi"; version = "1.2.3"; sha256 = "07b19k89whj69j87afkz86gp9b3iybw8jqwvlgcn43m7fb2y99rr"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.3.2"; sha256 = "0bs38r5kdw1xpbjbi5l82xbhfnfbzr5xhg5520lk05pg914d1ln1"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.3.2"; sha256 = "089nmaxzvm5xcf20pm4iiavz2k6lwh69r51xlbqg0ry605mnl869"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.4.0"; sha256 = "0dl81q9k7jaymxpg995nsicjz1b1cs481a12c4znxkpjkddqa82b"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.4.0"; sha256 = "1ip6gadn54k59nrz2l3a62rrxh2ldni33v9vkxlgcjg99sj2dyy4"; })
(fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
(fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
(fetchNuGet { pname = "MSTest.TestAdapter"; version = "2.2.10"; sha256 = "0w6c55n30w6imm0rjafl2sg0x8vf9852xmil9dzqb4h36cs7v6y6"; })
@ -89,15 +86,15 @@
(fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "10.0.3"; sha256 = "06vy67bkshclpz69kps4vgzc9h2cgg41c8vlqmdbwclfky7c4haq"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.2"; sha256 = "1p9splg1min274dpz7xdfgzrwkyfd3xlkygwpr1xgjvvyjvs6b0i"; })
(fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.2"; sha256 = "0c27bhy9x3c2n26inq32kmp6drpm71n6mqnmcr19wrlcaihglj35"; })
(fetchNuGet { pname = "Nito.AsyncEx.Coordination"; version = "5.1.2"; sha256 = "0sxvmqnv8a94k3pq1w3lh1vgjb8l62h1qamxcjl3pkq634h2fwrl"; })
(fetchNuGet { pname = "Nito.AsyncEx.Tasks"; version = "5.1.2"; sha256 = "11wp47kc69sjdxrbg5pgx0wlffqlp0x5kr54ggnz2v19kmjz362v"; })
(fetchNuGet { pname = "Nito.Collections.Deque"; version = "1.1.1"; sha256 = "152564q3s0n5swfv5p5rx0ghn2sm0g2xsnbd7gv8vb9yfklv7yg8"; })
(fetchNuGet { pname = "Nito.Disposables"; version = "2.2.1"; sha256 = "1hx5k8497j34kxxgh060bvij0vfnraw90dmm3h9bmamcdi8wp80l"; })
(fetchNuGet { pname = "NLog"; version = "5.0.5"; sha256 = "1lrdpq5xikmda2rkh1b9jrhvi5r0d7nqdh5dglng92a7mkq2g75j"; })
(fetchNuGet { pname = "NLog.Extensions.Logging"; version = "5.1.0"; sha256 = "0iq4gmaknz6yzb3qzbhrqqyfphqszgj05klipym3gs98qka6n568"; })
(fetchNuGet { pname = "NLog.Web.AspNetCore"; version = "5.1.5"; sha256 = "13mrmwfk26sn79zslr30wqkir0svg0njasc17px853sf78wqp9k0"; })
(fetchNuGet { pname = "NLog"; version = "5.1.0"; sha256 = "0z6z405cy2knvg7c9fgg0bc9721ccc1ga23sh8d430a6lr3mznxr"; })
(fetchNuGet { pname = "NLog.Extensions.Logging"; version = "5.2.0"; sha256 = "0bnyp44vnwbgiw8p0qab1zzmgxg66dsypbs3hv8415wb08b5vxvp"; })
(fetchNuGet { pname = "NLog.Web.AspNetCore"; version = "5.2.0"; sha256 = "06dcv75g902x0q7swkmb58c5lb0rn3m7w178vs5dha3w9xy2nxkc"; })
(fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
(fetchNuGet { pname = "protobuf-net"; version = "3.0.101"; sha256 = "0594qckbc0lh61sw74ihaq4qmvf1lf133vfa88n443mh7lxm2fwf"; })
(fetchNuGet { pname = "protobuf-net.Core"; version = "3.0.101"; sha256 = "1kvn9rnm6f0jxs0s9scyyx2f2p8rk03qzc1f6ijv1g6xgkpxkq1m"; })
@ -152,7 +149,6 @@
(fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
(fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
(fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
(fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
(fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
(fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
@ -161,78 +157,55 @@
(fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
(fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
(fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
(fetchNuGet { pname = "System.Composition"; version = "6.0.0"; sha256 = "1p7hysns39cc24af6dwd4m48bqjsrr3clvi4aws152mh2fgyg50z"; })
(fetchNuGet { pname = "System.Composition.AttributedModel"; version = "6.0.0"; sha256 = "1mqrblb0l65hw39d0hnspqcv85didpn4wbiwhfgj4784wzqx2w6k"; })
(fetchNuGet { pname = "System.Composition.Convention"; version = "6.0.0"; sha256 = "02km3yb94p1c4s7liyhkmda0g71zm1rc8ijsfmy4bnlkq15xjw3b"; })
(fetchNuGet { pname = "System.Composition.Hosting"; version = "6.0.0"; sha256 = "0big5nk8c44rxp6cfykhk7rxvn2cgwa99w6c3v2a36adc3lj36ky"; })
(fetchNuGet { pname = "System.Composition.Runtime"; version = "6.0.0"; sha256 = "0vq5ik63yii1784gsa2f2kx9w6xllmm8b8rk0arid1jqdj1nyrlw"; })
(fetchNuGet { pname = "System.Composition.TypedParts"; version = "6.0.0"; sha256 = "0y9pq3y60nyrpfy51f576a0qjjdh61mcv8vnik32pm4bz56h9q72"; })
(fetchNuGet { pname = "System.Composition"; version = "7.0.0"; sha256 = "1aii681g7a4gv8fvgd6hbnbbwi6lpzfcnl3k0k8hqx4m7fxp2f32"; })
(fetchNuGet { pname = "System.Composition.AttributedModel"; version = "7.0.0"; sha256 = "1cxrp0sk5b2gihhkn503iz8fa99k860js2qyzjpsw9rn547pdkny"; })
(fetchNuGet { pname = "System.Composition.Convention"; version = "7.0.0"; sha256 = "1nbyn42xys0kv247jf45r748av6fp8kp27f1582lfhnj2n8290rp"; })
(fetchNuGet { pname = "System.Composition.Hosting"; version = "7.0.0"; sha256 = "0wqbjxgggskfn45ilvg86grqci3zx9xj34r5sradca4mqqc90n7f"; })
(fetchNuGet { pname = "System.Composition.Runtime"; version = "7.0.0"; sha256 = "1p9xpqzx42s8cdizv6nh15hcjvl2km0rwby66nfkj4cb472l339s"; })
(fetchNuGet { pname = "System.Composition.TypedParts"; version = "7.0.0"; sha256 = "0syz7y6wgnxxgjvfqgymn9mnaa5fjy1qp06qnsvh3agr9mvcv779"; })
(fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
(fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
(fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.0"; sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5"; })
(fetchNuGet { pname = "System.Diagnostics.TextWriterTraceListener"; version = "4.3.0"; sha256 = "09db74f36wkwg30f7v7zhz1yhkyrnl5v6bdwljq1jdfgzcfch7c3"; })
(fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
(fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
(fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
(fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
(fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
(fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
(fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
(fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
(fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
(fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
(fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
(fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
(fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
(fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
(fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
(fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
(fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
(fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
(fetchNuGet { pname = "System.Linq.Async"; version = "6.0.1"; sha256 = "10ira8hmv0i54yp9ggrrdm1c06j538sijfjpn1kmnh9j2xk5yzmq"; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
(fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
(fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
(fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
(fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
(fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
(fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
(fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
(fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
(fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
(fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
(fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
(fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
(fetchNuGet { pname = "System.Runtime.Serialization.Formatters"; version = "4.3.0"; sha256 = "114j35n8gcvn3sqv9ar36r1jjq0y1yws9r0yk8i6wm4aq7n9rs0m"; })
(fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
(fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
(fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
(fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
@ -242,29 +215,21 @@
(fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
(fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
(fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
(fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
(fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "7.0.0"; sha256 = "15s9s6hsj9bz0nzw41mxbqdjgjd71w2djqbv0aj413gfi9amybk9"; })
(fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
(fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
(fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
(fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
(fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
(fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
(fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
(fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
(fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
(fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
(fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
(fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
(fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
(fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
(fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
(fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
(fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
(fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
(fetchNuGet { pname = "zxcvbn-core"; version = "7.0.92"; sha256 = "1pbi0n3za8zsnkbvq19njy4h4hy12a6rv4rknf4a2m1kdhxb3cgx"; })

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=../../../.. -i bash -p curl gnused jq common-updater-scripts
#!nix-shell -I nixpkgs=./. -i bash -p curl gnused jq common-updater-scripts
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
@ -16,7 +16,7 @@ if [[ "$new_version" == "$old_version" ]]; then
fi
asf_path=$PWD
cd ../../../..
push ../../../..
if [[ "${1:-}" != "--deps-only" ]]; then
update-source-version ArchiSteamFarm "$new_version"
@ -24,5 +24,5 @@ fi
$(nix-build -A ArchiSteamFarm.fetch-deps --no-out-link) "$deps_file"
cd "$asf_path"
exec "$asf_path/web-ui/update.sh"
popd
"$asf_path/web-ui/update.sh"

View File

@ -1,4 +1,4 @@
{ lib, pkgs, fetchFromGitHub, nodejs, stdenv, ArchiSteamFarm, ... }:
{ lib, pkgs, fetchFromGitHub, nodejs, nodePackages, stdenv, ArchiSteamFarm }:
let
nodePackages = import ./node-composition.nix {
@ -11,8 +11,8 @@ let
repo = "ASF-ui";
# updated by the update script
# this is always the commit that should be used with asf-ui from the latest asf version
rev = "5f9969bf17e4c6915418655b35fc6b790cd2da0b";
sha256 = "03y4ahq958rxjnddwnc6h95drdpnvpy16adk434aak4l8hqr24sg";
rev = "c348d6897324aac1d899a977f9c7d467ea934796";
sha256 = "1nvglb1wahz20my29jhi3j7824d12pdqf0xfpymnganzfkpj9zjk";
};
in

View File

@ -22,22 +22,22 @@ let
sha512 = "TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==";
};
};
"@babel/compat-data-7.19.4" = {
"@babel/compat-data-7.20.1" = {
name = "_at_babel_slash_compat-data";
packageName = "@babel/compat-data";
version = "7.19.4";
version = "7.20.1";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz";
sha512 = "CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==";
url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz";
sha512 = "EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==";
};
};
"@babel/core-7.19.6" = {
"@babel/core-7.20.5" = {
name = "_at_babel_slash_core";
packageName = "@babel/core";
version = "7.19.6";
version = "7.20.5";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz";
sha512 = "D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==";
url = "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz";
sha512 = "UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==";
};
};
"@babel/eslint-parser-7.19.1" = {
@ -49,13 +49,13 @@ let
sha512 = "AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==";
};
};
"@babel/generator-7.19.6" = {
"@babel/generator-7.20.5" = {
name = "_at_babel_slash_generator";
packageName = "@babel/generator";
version = "7.19.6";
version = "7.20.5";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz";
sha512 = "oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==";
url = "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz";
sha512 = "jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==";
};
};
"@babel/helper-annotate-as-pure-7.18.6" = {
@ -76,13 +76,13 @@ let
sha512 = "KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==";
};
};
"@babel/helper-compilation-targets-7.19.3" = {
"@babel/helper-compilation-targets-7.20.0" = {
name = "_at_babel_slash_helper-compilation-targets";
packageName = "@babel/helper-compilation-targets";
version = "7.19.3";
version = "7.20.0";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz";
sha512 = "65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==";
url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz";
sha512 = "0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==";
};
};
"@babel/helper-create-class-features-plugin-7.18.6" = {
@ -166,13 +166,13 @@ let
sha512 = "0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==";
};
};
"@babel/helper-module-transforms-7.19.6" = {
"@babel/helper-module-transforms-7.20.2" = {
name = "_at_babel_slash_helper-module-transforms";
packageName = "@babel/helper-module-transforms";
version = "7.19.6";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz";
sha512 = "fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==";
url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz";
sha512 = "zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==";
};
};
"@babel/helper-optimise-call-expression-7.18.6" = {
@ -184,13 +184,13 @@ let
sha512 = "HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==";
};
};
"@babel/helper-plugin-utils-7.19.0" = {
"@babel/helper-plugin-utils-7.20.2" = {
name = "_at_babel_slash_helper-plugin-utils";
packageName = "@babel/helper-plugin-utils";
version = "7.19.0";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz";
sha512 = "40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==";
url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz";
sha512 = "8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==";
};
};
"@babel/helper-remap-async-to-generator-7.18.9" = {
@ -202,22 +202,22 @@ let
sha512 = "dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==";
};
};
"@babel/helper-replace-supers-7.18.9" = {
"@babel/helper-replace-supers-7.19.1" = {
name = "_at_babel_slash_helper-replace-supers";
packageName = "@babel/helper-replace-supers";
version = "7.18.9";
version = "7.19.1";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz";
sha512 = "dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==";
url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz";
sha512 = "T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==";
};
};
"@babel/helper-simple-access-7.19.4" = {
"@babel/helper-simple-access-7.20.2" = {
name = "_at_babel_slash_helper-simple-access";
packageName = "@babel/helper-simple-access";
version = "7.19.4";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz";
sha512 = "f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==";
url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz";
sha512 = "+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==";
};
};
"@babel/helper-skip-transparent-expression-wrappers-7.18.9" = {
@ -274,13 +274,13 @@ let
sha512 = "95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==";
};
};
"@babel/helpers-7.19.4" = {
"@babel/helpers-7.20.6" = {
name = "_at_babel_slash_helpers";
packageName = "@babel/helpers";
version = "7.19.4";
version = "7.20.6";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz";
sha512 = "G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==";
url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz";
sha512 = "Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==";
};
};
"@babel/highlight-7.18.6" = {
@ -292,13 +292,13 @@ let
sha512 = "u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==";
};
};
"@babel/parser-7.19.6" = {
"@babel/parser-7.20.5" = {
name = "_at_babel_slash_parser";
packageName = "@babel/parser";
version = "7.19.6";
version = "7.20.5";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz";
sha512 = "h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==";
url = "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz";
sha512 = "r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==";
};
};
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6" = {
@ -319,13 +319,13 @@ let
sha512 = "AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==";
};
};
"@babel/plugin-proposal-async-generator-functions-7.19.1" = {
"@babel/plugin-proposal-async-generator-functions-7.20.1" = {
name = "_at_babel_slash_plugin-proposal-async-generator-functions";
packageName = "@babel/plugin-proposal-async-generator-functions";
version = "7.19.1";
version = "7.20.1";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz";
sha512 = "0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==";
url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz";
sha512 = "Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==";
};
};
"@babel/plugin-proposal-class-properties-7.18.6" = {
@ -400,13 +400,13 @@ let
sha512 = "ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==";
};
};
"@babel/plugin-proposal-object-rest-spread-7.19.4" = {
"@babel/plugin-proposal-object-rest-spread-7.20.2" = {
name = "_at_babel_slash_plugin-proposal-object-rest-spread";
packageName = "@babel/plugin-proposal-object-rest-spread";
version = "7.19.4";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz";
sha512 = "wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==";
url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz";
sha512 = "Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==";
};
};
"@babel/plugin-proposal-optional-catch-binding-7.18.6" = {
@ -499,13 +499,13 @@ let
sha512 = "MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==";
};
};
"@babel/plugin-syntax-import-assertions-7.18.6" = {
"@babel/plugin-syntax-import-assertions-7.20.0" = {
name = "_at_babel_slash_plugin-syntax-import-assertions";
packageName = "@babel/plugin-syntax-import-assertions";
version = "7.18.6";
version = "7.20.0";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz";
sha512 = "/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==";
url = "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz";
sha512 = "IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==";
};
};
"@babel/plugin-syntax-json-strings-7.8.3" = {
@ -616,22 +616,22 @@ let
sha512 = "ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==";
};
};
"@babel/plugin-transform-block-scoping-7.19.4" = {
"@babel/plugin-transform-block-scoping-7.20.2" = {
name = "_at_babel_slash_plugin-transform-block-scoping";
packageName = "@babel/plugin-transform-block-scoping";
version = "7.19.4";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz";
sha512 = "934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==";
url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz";
sha512 = "y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==";
};
};
"@babel/plugin-transform-classes-7.19.0" = {
"@babel/plugin-transform-classes-7.20.2" = {
name = "_at_babel_slash_plugin-transform-classes";
packageName = "@babel/plugin-transform-classes";
version = "7.19.0";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz";
sha512 = "YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==";
url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz";
sha512 = "9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==";
};
};
"@babel/plugin-transform-computed-properties-7.18.9" = {
@ -643,13 +643,13 @@ let
sha512 = "+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==";
};
};
"@babel/plugin-transform-destructuring-7.19.4" = {
"@babel/plugin-transform-destructuring-7.20.2" = {
name = "_at_babel_slash_plugin-transform-destructuring";
packageName = "@babel/plugin-transform-destructuring";
version = "7.19.4";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz";
sha512 = "t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==";
url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz";
sha512 = "mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==";
};
};
"@babel/plugin-transform-dotall-regex-7.18.6" = {
@ -715,31 +715,31 @@ let
sha512 = "qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==";
};
};
"@babel/plugin-transform-modules-amd-7.18.6" = {
"@babel/plugin-transform-modules-amd-7.19.6" = {
name = "_at_babel_slash_plugin-transform-modules-amd";
packageName = "@babel/plugin-transform-modules-amd";
version = "7.18.6";
version = "7.19.6";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz";
sha512 = "Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==";
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz";
sha512 = "uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==";
};
};
"@babel/plugin-transform-modules-commonjs-7.18.6" = {
"@babel/plugin-transform-modules-commonjs-7.19.6" = {
name = "_at_babel_slash_plugin-transform-modules-commonjs";
packageName = "@babel/plugin-transform-modules-commonjs";
version = "7.18.6";
version = "7.19.6";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz";
sha512 = "Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==";
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz";
sha512 = "8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==";
};
};
"@babel/plugin-transform-modules-systemjs-7.19.0" = {
"@babel/plugin-transform-modules-systemjs-7.19.6" = {
name = "_at_babel_slash_plugin-transform-modules-systemjs";
packageName = "@babel/plugin-transform-modules-systemjs";
version = "7.19.0";
version = "7.19.6";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz";
sha512 = "x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==";
url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz";
sha512 = "fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==";
};
};
"@babel/plugin-transform-modules-umd-7.18.6" = {
@ -778,13 +778,13 @@ let
sha512 = "uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==";
};
};
"@babel/plugin-transform-parameters-7.18.8" = {
"@babel/plugin-transform-parameters-7.20.1" = {
name = "_at_babel_slash_plugin-transform-parameters";
packageName = "@babel/plugin-transform-parameters";
version = "7.18.8";
version = "7.20.1";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz";
sha512 = "ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==";
url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.1.tgz";
sha512 = "nDvKLrAvl+kf6BOy1UJ3MGwzzfTMgppxwiD2Jb4LO3xjYyZq30oQzDNJbCQpMdG9+j2IXHoiMrw5Cm/L6ZoxXQ==";
};
};
"@babel/plugin-transform-property-literals-7.18.6" = {
@ -877,13 +877,13 @@ let
sha512 = "gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==";
};
};
"@babel/preset-env-7.19.4" = {
"@babel/preset-env-7.20.2" = {
name = "_at_babel_slash_preset-env";
packageName = "@babel/preset-env";
version = "7.19.4";
version = "7.20.2";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz";
sha512 = "5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==";
url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz";
sha512 = "1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==";
};
};
"@babel/preset-modules-0.1.5" = {
@ -913,22 +913,22 @@ let
sha512 = "TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==";
};
};
"@babel/traverse-7.19.6" = {
"@babel/traverse-7.20.5" = {
name = "_at_babel_slash_traverse";
packageName = "@babel/traverse";
version = "7.19.6";
version = "7.20.5";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz";
sha512 = "6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==";
url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz";
sha512 = "WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==";
};
};
"@babel/types-7.19.4" = {
"@babel/types-7.20.5" = {
name = "_at_babel_slash_types";
packageName = "@babel/types";
version = "7.19.4";
version = "7.20.5";
src = fetchurl {
url = "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz";
sha512 = "M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==";
url = "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz";
sha512 = "c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==";
};
};
"@discoveryjs/json-ext-0.5.5" = {
@ -949,49 +949,49 @@ let
sha512 = "uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==";
};
};
"@fortawesome/fontawesome-common-types-6.2.0" = {
"@fortawesome/fontawesome-common-types-6.2.1" = {
name = "_at_fortawesome_slash_fontawesome-common-types";
packageName = "@fortawesome/fontawesome-common-types";
version = "6.2.0";
version = "6.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz";
sha512 = "rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==";
url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz";
sha512 = "Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==";
};
};
"@fortawesome/fontawesome-svg-core-6.2.0" = {
"@fortawesome/fontawesome-svg-core-6.2.1" = {
name = "_at_fortawesome_slash_fontawesome-svg-core";
packageName = "@fortawesome/fontawesome-svg-core";
version = "6.2.0";
version = "6.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.0.tgz";
sha512 = "Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==";
url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz";
sha512 = "HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==";
};
};
"@fortawesome/free-brands-svg-icons-6.2.0" = {
"@fortawesome/free-brands-svg-icons-6.2.1" = {
name = "_at_fortawesome_slash_free-brands-svg-icons";
packageName = "@fortawesome/free-brands-svg-icons";
version = "6.2.0";
version = "6.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.2.0.tgz";
sha512 = "fm1y4NyZ2qKYNmYhdMz9VAWRw1Et7PMHNunSw3W0SVAwKwv6o0qiJworLH3Y9SnmhHzAymXJwCX1op22FFvGiA==";
url = "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.2.1.tgz";
sha512 = "L8l4MfdHPmZlJ72PvzdfwOwbwcCAL0vx48tJRnI6u1PJXh+j2f3yDoKyQgO3qjEsgD5Fr2tQV/cPP8F/k6aUig==";
};
};
"@fortawesome/free-solid-svg-icons-6.2.0" = {
"@fortawesome/free-solid-svg-icons-6.2.1" = {
name = "_at_fortawesome_slash_free-solid-svg-icons";
packageName = "@fortawesome/free-solid-svg-icons";
version = "6.2.0";
version = "6.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.0.tgz";
sha512 = "UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==";
url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz";
sha512 = "oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==";
};
};
"@fortawesome/vue-fontawesome-2.0.8" = {
"@fortawesome/vue-fontawesome-2.0.9" = {
name = "_at_fortawesome_slash_vue-fontawesome";
packageName = "@fortawesome/vue-fontawesome";
version = "2.0.8";
version = "2.0.9";
src = fetchurl {
url = "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.8.tgz";
sha512 = "SRmP0q9Ox4zq8ydDR/hrH+23TVU1bdwYVnugLVaAIwklOHbf56gx6JUGlwES7zjuNYqzKgl8e39iYf6ph8qSQw==";
url = "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.9.tgz";
sha512 = "tUmO92PFHbLOplitjHNBVGMJm6S57vp16tBXJVPKSI/6CfjrgLycqKxEpC6f7qsOqUdoXs5nIv4HLUfrOMHzuw==";
};
};
"@humanwhocodes/config-array-0.11.6" = {
@ -1336,13 +1336,13 @@ let
sha512 = "6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==";
};
};
"@vue/compiler-sfc-2.7.13" = {
"@vue/compiler-sfc-2.7.14" = {
name = "_at_vue_slash_compiler-sfc";
packageName = "@vue/compiler-sfc";
version = "2.7.13";
version = "2.7.14";
src = fetchurl {
url = "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.13.tgz";
sha512 = "zzu2rLRZlgIU+OT3Atbr7Y6PG+LW4wVQpPfNRrGDH3dM9PsrcVfa+1pKb8bW467bGM3aDOvAnsYLWVpYIv3GRg==";
url = "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz";
sha512 = "aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==";
};
};
"@vue/component-compiler-utils-3.2.2" = {
@ -1777,22 +1777,13 @@ let
sha512 = "t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==";
};
};
"babel-loader-8.2.5" = {
"babel-loader-8.3.0" = {
name = "babel-loader";
packageName = "babel-loader";
version = "8.2.5";
version = "8.3.0";
src = fetchurl {
url = "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz";
sha512 = "OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==";
};
};
"babel-plugin-dynamic-import-node-2.3.3" = {
name = "babel-plugin-dynamic-import-node";
packageName = "babel-plugin-dynamic-import-node";
version = "2.3.3";
src = fetchurl {
url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==";
url = "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz";
sha512 = "H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==";
};
};
"babel-plugin-polyfill-corejs2-0.3.3" = {
@ -2254,13 +2245,13 @@ let
sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
};
};
"copy-to-clipboard-3.3.2" = {
"copy-to-clipboard-3.3.3" = {
name = "copy-to-clipboard";
packageName = "copy-to-clipboard";
version = "3.3.2";
version = "3.3.3";
src = fetchurl {
url = "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz";
sha512 = "Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==";
url = "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz";
sha512 = "2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==";
};
};
"copy-webpack-plugin-11.0.0" = {
@ -2299,13 +2290,13 @@ let
sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
};
};
"css-loader-6.7.1" = {
"css-loader-6.7.2" = {
name = "css-loader";
packageName = "css-loader";
version = "6.7.1";
version = "6.7.2";
src = fetchurl {
url = "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz";
sha512 = "yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==";
url = "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz";
sha512 = "oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==";
};
};
"css-select-4.1.3" = {
@ -2713,13 +2704,13 @@ let
sha512 = "TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==";
};
};
"eslint-8.26.0" = {
"eslint-8.28.0" = {
name = "eslint";
packageName = "eslint";
version = "8.26.0";
version = "8.28.0";
src = fetchurl {
url = "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz";
sha512 = "kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==";
url = "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz";
sha512 = "S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==";
};
};
"eslint-config-airbnb-base-15.0.0" = {
@ -2758,13 +2749,13 @@ let
sha512 = "hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==";
};
};
"eslint-plugin-vue-9.6.0" = {
"eslint-plugin-vue-9.8.0" = {
name = "eslint-plugin-vue";
packageName = "eslint-plugin-vue";
version = "9.6.0";
version = "9.8.0";
src = fetchurl {
url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.6.0.tgz";
sha512 = "zzySkJgVbFCylnG2+9MDF7N+2Rjze2y0bF8GyUNpFOnT8mCMfqqtLDJkHBuYu9N/psW1A6DVbQhPkP92E+qakA==";
url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz";
sha512 = "E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==";
};
};
"eslint-scope-5.1.1" = {
@ -3253,13 +3244,13 @@ let
sha512 = "bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==";
};
};
"globals-13.17.0" = {
"globals-13.18.0" = {
name = "globals";
packageName = "globals";
version = "13.17.0";
version = "13.18.0";
src = fetchurl {
url = "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz";
sha512 = "1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==";
url = "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz";
sha512 = "/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==";
};
};
"globby-13.1.1" = {
@ -4117,13 +4108,13 @@ let
sha512 = "rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==";
};
};
"loader-utils-2.0.2" = {
"loader-utils-2.0.3" = {
name = "loader-utils";
packageName = "loader-utils";
version = "2.0.2";
version = "2.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz";
sha512 = "TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==";
url = "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz";
sha512 = "THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==";
};
};
"locate-path-2.0.0" = {
@ -4936,13 +4927,13 @@ let
sha512 = "yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==";
};
};
"postcss-8.4.14" = {
"postcss-8.4.19" = {
name = "postcss";
packageName = "postcss";
version = "8.4.14";
version = "8.4.19";
src = fetchurl {
url = "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz";
sha512 = "E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==";
url = "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz";
sha512 = "h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==";
};
};
"postcss-modules-extract-imports-3.0.0" = {
@ -5359,22 +5350,22 @@ let
sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
};
};
"sass-1.55.0" = {
"sass-1.56.1" = {
name = "sass";
packageName = "sass";
version = "1.55.0";
version = "1.56.1";
src = fetchurl {
url = "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz";
sha512 = "Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==";
url = "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz";
sha512 = "VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==";
};
};
"sass-loader-13.1.0" = {
"sass-loader-13.2.0" = {
name = "sass-loader";
packageName = "sass-loader";
version = "13.1.0";
version = "13.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/sass-loader/-/sass-loader-13.1.0.tgz";
sha512 = "tZS1RJQ2n2+QNyf3CCAo1H562WjL/5AM6Gi8YcPVVoNxQX8d19mx8E+8fRrMWsyc93ZL6Q8vZDSM0FHVTJaVnQ==";
url = "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz";
sha512 = "JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==";
};
};
"schema-utils-2.7.1" = {
@ -5440,13 +5431,13 @@ let
sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
};
};
"semver-7.3.7" = {
"semver-7.3.8" = {
name = "semver";
packageName = "semver";
version = "7.3.7";
version = "7.3.8";
src = fetchurl {
url = "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz";
sha512 = "QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==";
url = "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz";
sha512 = "NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==";
};
};
"send-0.17.2" = {
@ -6025,13 +6016,13 @@ let
sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc";
};
};
"vue-2.7.13" = {
"vue-2.7.14" = {
name = "vue";
packageName = "vue";
version = "2.7.13";
version = "2.7.14";
src = fetchurl {
url = "https://registry.npmjs.org/vue/-/vue-2.7.13.tgz";
sha512 = "QnM6ULTNnPmn71eUO+4hdjfBIA3H0GLsBnchnI/kS678tjI45GOUZhXd0oP/gX9isikXz1PAzSnkPspp9EUNfQ==";
url = "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz";
sha512 = "b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==";
};
};
"vue-eslint-parser-8.3.0" = {
@ -6061,13 +6052,13 @@ let
sha512 = "BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==";
};
};
"vue-loader-15.10.0" = {
"vue-loader-15.10.1" = {
name = "vue-loader";
packageName = "vue-loader";
version = "15.10.0";
version = "15.10.1";
src = fetchurl {
url = "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz";
sha512 = "VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==";
url = "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz";
sha512 = "SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==";
};
};
"vue-meta-2.4.0" = {
@ -6124,13 +6115,13 @@ let
sha512 = "sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==";
};
};
"vue-template-compiler-2.7.13" = {
"vue-template-compiler-2.7.14" = {
name = "vue-template-compiler";
packageName = "vue-template-compiler";
version = "2.7.13";
version = "2.7.14";
src = fetchurl {
url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz";
sha512 = "jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==";
url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz";
sha512 = "zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==";
};
};
"vue-template-es2015-compiler-1.9.1" = {
@ -6169,13 +6160,13 @@ let
sha512 = "O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==";
};
};
"webpack-5.74.0" = {
"webpack-5.75.0" = {
name = "webpack";
packageName = "webpack";
version = "5.74.0";
version = "5.75.0";
src = fetchurl {
url = "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz";
sha512 = "A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==";
url = "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz";
sha512 = "piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==";
};
};
"webpack-bundle-analyzer-4.7.0" = {
@ -6367,8 +6358,8 @@ let
dependencies = [
sources."@ampproject/remapping-2.1.1"
sources."@babel/code-frame-7.18.6"
sources."@babel/compat-data-7.19.4"
(sources."@babel/core-7.19.6" // {
sources."@babel/compat-data-7.20.1"
(sources."@babel/core-7.20.5" // {
dependencies = [
sources."debug-4.3.4"
sources."json5-2.2.1"
@ -6382,10 +6373,10 @@ let
sources."semver-6.3.0"
];
})
sources."@babel/generator-7.19.6"
sources."@babel/generator-7.20.5"
sources."@babel/helper-annotate-as-pure-7.18.6"
sources."@babel/helper-builder-binary-assignment-operator-visitor-7.18.6"
(sources."@babel/helper-compilation-targets-7.19.3" // {
(sources."@babel/helper-compilation-targets-7.20.0" // {
dependencies = [
sources."semver-6.3.0"
];
@ -6405,24 +6396,24 @@ let
sources."@babel/helper-hoist-variables-7.18.6"
sources."@babel/helper-member-expression-to-functions-7.18.9"
sources."@babel/helper-module-imports-7.18.6"
sources."@babel/helper-module-transforms-7.19.6"
sources."@babel/helper-module-transforms-7.20.2"
sources."@babel/helper-optimise-call-expression-7.18.6"
sources."@babel/helper-plugin-utils-7.19.0"
sources."@babel/helper-plugin-utils-7.20.2"
sources."@babel/helper-remap-async-to-generator-7.18.9"
sources."@babel/helper-replace-supers-7.18.9"
sources."@babel/helper-simple-access-7.19.4"
sources."@babel/helper-replace-supers-7.19.1"
sources."@babel/helper-simple-access-7.20.2"
sources."@babel/helper-skip-transparent-expression-wrappers-7.18.9"
sources."@babel/helper-split-export-declaration-7.18.6"
sources."@babel/helper-string-parser-7.19.4"
sources."@babel/helper-validator-identifier-7.19.1"
sources."@babel/helper-validator-option-7.18.6"
sources."@babel/helper-wrap-function-7.18.10"
sources."@babel/helpers-7.19.4"
sources."@babel/helpers-7.20.6"
sources."@babel/highlight-7.18.6"
sources."@babel/parser-7.19.6"
sources."@babel/parser-7.20.5"
sources."@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6"
sources."@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9"
sources."@babel/plugin-proposal-async-generator-functions-7.19.1"
sources."@babel/plugin-proposal-async-generator-functions-7.20.1"
sources."@babel/plugin-proposal-class-properties-7.18.6"
sources."@babel/plugin-proposal-class-static-block-7.18.6"
sources."@babel/plugin-proposal-dynamic-import-7.18.6"
@ -6431,7 +6422,7 @@ let
sources."@babel/plugin-proposal-logical-assignment-operators-7.18.9"
sources."@babel/plugin-proposal-nullish-coalescing-operator-7.18.6"
sources."@babel/plugin-proposal-numeric-separator-7.18.6"
sources."@babel/plugin-proposal-object-rest-spread-7.19.4"
sources."@babel/plugin-proposal-object-rest-spread-7.20.2"
sources."@babel/plugin-proposal-optional-catch-binding-7.18.6"
sources."@babel/plugin-proposal-optional-chaining-7.18.9"
sources."@babel/plugin-proposal-private-methods-7.18.6"
@ -6442,7 +6433,7 @@ let
sources."@babel/plugin-syntax-class-static-block-7.14.5"
sources."@babel/plugin-syntax-dynamic-import-7.8.3"
sources."@babel/plugin-syntax-export-namespace-from-7.8.3"
sources."@babel/plugin-syntax-import-assertions-7.18.6"
sources."@babel/plugin-syntax-import-assertions-7.20.0"
sources."@babel/plugin-syntax-json-strings-7.8.3"
sources."@babel/plugin-syntax-logical-assignment-operators-7.10.4"
sources."@babel/plugin-syntax-nullish-coalescing-operator-7.8.3"
@ -6455,10 +6446,10 @@ let
sources."@babel/plugin-transform-arrow-functions-7.18.6"
sources."@babel/plugin-transform-async-to-generator-7.18.6"
sources."@babel/plugin-transform-block-scoped-functions-7.18.6"
sources."@babel/plugin-transform-block-scoping-7.19.4"
sources."@babel/plugin-transform-classes-7.19.0"
sources."@babel/plugin-transform-block-scoping-7.20.2"
sources."@babel/plugin-transform-classes-7.20.2"
sources."@babel/plugin-transform-computed-properties-7.18.9"
sources."@babel/plugin-transform-destructuring-7.19.4"
sources."@babel/plugin-transform-destructuring-7.20.2"
sources."@babel/plugin-transform-dotall-regex-7.18.6"
sources."@babel/plugin-transform-duplicate-keys-7.18.9"
sources."@babel/plugin-transform-exponentiation-operator-7.18.6"
@ -6466,14 +6457,14 @@ let
sources."@babel/plugin-transform-function-name-7.18.9"
sources."@babel/plugin-transform-literals-7.18.9"
sources."@babel/plugin-transform-member-expression-literals-7.18.6"
sources."@babel/plugin-transform-modules-amd-7.18.6"
sources."@babel/plugin-transform-modules-commonjs-7.18.6"
sources."@babel/plugin-transform-modules-systemjs-7.19.0"
sources."@babel/plugin-transform-modules-amd-7.19.6"
sources."@babel/plugin-transform-modules-commonjs-7.19.6"
sources."@babel/plugin-transform-modules-systemjs-7.19.6"
sources."@babel/plugin-transform-modules-umd-7.18.6"
sources."@babel/plugin-transform-named-capturing-groups-regex-7.19.1"
sources."@babel/plugin-transform-new-target-7.18.6"
sources."@babel/plugin-transform-object-super-7.18.6"
sources."@babel/plugin-transform-parameters-7.18.8"
sources."@babel/plugin-transform-parameters-7.20.1"
sources."@babel/plugin-transform-property-literals-7.18.6"
sources."@babel/plugin-transform-regenerator-7.18.6"
sources."@babel/plugin-transform-reserved-words-7.18.6"
@ -6484,7 +6475,7 @@ let
sources."@babel/plugin-transform-typeof-symbol-7.18.9"
sources."@babel/plugin-transform-unicode-escapes-7.18.10"
sources."@babel/plugin-transform-unicode-regex-7.18.6"
(sources."@babel/preset-env-7.19.4" // {
(sources."@babel/preset-env-7.20.2" // {
dependencies = [
sources."semver-6.3.0"
];
@ -6492,13 +6483,13 @@ let
sources."@babel/preset-modules-0.1.5"
sources."@babel/runtime-7.14.6"
sources."@babel/template-7.18.10"
(sources."@babel/traverse-7.19.6" // {
(sources."@babel/traverse-7.20.5" // {
dependencies = [
sources."debug-4.3.3"
sources."ms-2.1.2"
];
})
sources."@babel/types-7.19.4"
sources."@babel/types-7.20.5"
sources."@discoveryjs/json-ext-0.5.5"
(sources."@eslint/eslintrc-1.3.3" // {
dependencies = [
@ -6507,11 +6498,11 @@ let
sources."ms-2.1.2"
];
})
sources."@fortawesome/fontawesome-common-types-6.2.0"
sources."@fortawesome/fontawesome-svg-core-6.2.0"
sources."@fortawesome/free-brands-svg-icons-6.2.0"
sources."@fortawesome/free-solid-svg-icons-6.2.0"
sources."@fortawesome/vue-fontawesome-2.0.8"
sources."@fortawesome/fontawesome-common-types-6.2.1"
sources."@fortawesome/fontawesome-svg-core-6.2.1"
sources."@fortawesome/free-brands-svg-icons-6.2.1"
sources."@fortawesome/free-solid-svg-icons-6.2.1"
sources."@fortawesome/vue-fontawesome-2.0.9"
(sources."@humanwhocodes/config-array-0.11.6" // {
dependencies = [
sources."debug-4.3.3"
@ -6555,7 +6546,7 @@ let
sources."@types/serve-static-1.13.10"
sources."@types/sockjs-0.3.33"
sources."@types/ws-8.5.3"
sources."@vue/compiler-sfc-2.7.13"
sources."@vue/compiler-sfc-2.7.14"
(sources."@vue/component-compiler-utils-3.2.2" // {
dependencies = [
sources."picocolors-0.2.1"
@ -6619,14 +6610,13 @@ let
})
sources."asynckit-0.4.0"
sources."axios-0.27.2"
(sources."babel-loader-8.2.5" // {
(sources."babel-loader-8.3.0" // {
dependencies = [
sources."json5-2.2.1"
sources."loader-utils-2.0.2"
sources."loader-utils-2.0.3"
sources."schema-utils-2.7.1"
];
})
sources."babel-plugin-dynamic-import-node-2.3.3"
(sources."babel-plugin-polyfill-corejs2-0.3.3" // {
dependencies = [
sources."semver-6.3.0"
@ -6688,7 +6678,7 @@ let
sources."convert-source-map-1.8.0"
sources."cookie-0.4.2"
sources."cookie-signature-1.0.6"
sources."copy-to-clipboard-3.3.2"
sources."copy-to-clipboard-3.3.3"
(sources."copy-webpack-plugin-11.0.0" // {
dependencies = [
sources."ajv-8.11.0"
@ -6702,7 +6692,7 @@ let
sources."core-js-compat-3.25.1"
sources."core-util-is-1.0.3"
sources."cross-spawn-7.0.3"
sources."css-loader-6.7.1"
sources."css-loader-6.7.2"
sources."css-select-4.1.3"
sources."css-what-5.1.0"
sources."cssesc-3.0.0"
@ -6762,7 +6752,7 @@ let
sources."escalade-3.1.1"
sources."escape-html-1.0.3"
sources."escape-string-regexp-1.0.5"
(sources."eslint-8.26.0" // {
(sources."eslint-8.28.0" // {
dependencies = [
sources."ansi-styles-4.3.0"
sources."chalk-4.1.2"
@ -6774,7 +6764,7 @@ let
sources."estraverse-5.3.0"
sources."find-up-5.0.0"
sources."glob-parent-6.0.2"
sources."globals-13.17.0"
sources."globals-13.18.0"
sources."has-flag-4.0.0"
sources."is-path-inside-3.0.3"
sources."locate-path-6.0.0"
@ -6807,7 +6797,7 @@ let
sources."doctrine-2.1.0"
];
})
(sources."eslint-plugin-vue-9.6.0" // {
(sources."eslint-plugin-vue-9.8.0" // {
dependencies = [
sources."debug-4.3.4"
sources."eslint-scope-7.1.1"
@ -7143,7 +7133,7 @@ let
sources."pinkie-promise-2.0.1"
sources."plurals-cldr-2.0.1"
sources."popper.js-1.16.1"
sources."postcss-8.4.14"
sources."postcss-8.4.19"
sources."postcss-modules-extract-imports-3.0.0"
sources."postcss-modules-local-by-default-4.0.0"
sources."postcss-modules-scope-3.0.0"
@ -7198,12 +7188,12 @@ let
sources."run-parallel-1.2.0"
sources."safe-buffer-5.1.2"
sources."safer-buffer-2.1.2"
sources."sass-1.55.0"
sources."sass-loader-13.1.0"
sources."sass-1.56.1"
sources."sass-loader-13.2.0"
sources."schema-utils-3.1.1"
sources."select-hose-2.0.0"
sources."selfsigned-2.1.1"
(sources."semver-7.3.7" // {
(sources."semver-7.3.8" // {
dependencies = [
sources."lru-cache-6.0.0"
sources."yallist-4.0.0"
@ -7313,7 +7303,7 @@ let
sources."uuid-8.3.2"
sources."v-tooltip-2.1.3"
sources."vary-1.1.2"
sources."vue-2.7.13"
sources."vue-2.7.14"
(sources."vue-eslint-parser-8.3.0" // {
dependencies = [
sources."debug-4.3.3"
@ -7323,19 +7313,19 @@ let
];
})
sources."vue-hot-reload-api-2.3.4"
sources."vue-loader-15.10.0"
sources."vue-loader-15.10.1"
sources."vue-meta-2.4.0"
sources."vue-multiselect-2.1.6"
sources."vue-resize-1.0.1"
sources."vue-router-3.6.5"
sources."vue-snotify-3.2.1"
sources."vue-style-loader-4.1.3"
sources."vue-template-compiler-2.7.13"
sources."vue-template-compiler-2.7.14"
sources."vue-template-es2015-compiler-1.9.1"
sources."vuex-3.6.2"
sources."watchpack-2.4.0"
sources."wbuf-1.7.3"
sources."webpack-5.74.0"
sources."webpack-5.75.0"
(sources."webpack-bundle-analyzer-4.7.0" // {
dependencies = [
sources."ansi-styles-4.3.0"

View File

@ -1,6 +1,6 @@
#!/usr/bin/env nix-shell
#! nix-shell -I nixpkgs=../../../../.. -i bash -p nodePackages.node2nix gnused jq curl
set -eoux pipefail
#! nix-shell -I nixpkgs=../../../.. -i bash -p nodePackages.node2nix gnused jq curl
set -eou pipefail
cd "$(dirname "$0")"
pushd ../../../../..

View File

@ -1,7 +1,7 @@
{ config, stdenv, lib, fetchurl, fetchzip, boost, cmake, ffmpeg, gettext, glew
, ilmbase, libXi, libX11, libXext, libXrender
, libjpeg, libpng, libsamplerate, libsndfile
, libtiff, libGLU, libGL, openal, opencolorio, openexr, openimagedenoise, openimageio2, openjpeg, python310Packages
, libtiff, libwebp, libGLU, libGL, openal, opencolorio, openexr, openimagedenoise, openimageio2, openjpeg, python310Packages
, openvdb, libXxf86vm, tbb, alembic
, zlib, zstd, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
, jackaudioSupport ? false, libjack2
@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
++ optionals cudaSupport [ addOpenGLRunpath ];
buildInputs =
[ boost ffmpeg gettext glew ilmbase
freetype libjpeg libpng libsamplerate libsndfile libtiff
freetype libjpeg libpng libsamplerate libsndfile libtiff libwebp
opencolorio openexr openimagedenoise openimageio2 openjpeg python zlib zstd fftw jemalloc
alembic
(opensubdiv.override { inherit cudaSupport; })

View File

@ -29,7 +29,7 @@ in buildPythonApplication rec {
sha256 = "00358nzyw686ypqv45imc5k9frcqnhla0hpx9ynna3iy6iz5006x";
};
pythonPath = with pythonPackages; [ bsddb3 PyICU pygobject3 pycairo ];
pythonPath = with pythonPackages; [ bsddb3 pyicu pygobject3 pycairo ];
# Same installPhase as in buildPythonApplication but without --old-and-unmanageble
# install flag.

View File

@ -17,7 +17,7 @@ let
homepage = "https://keepass.info/plugins.html#otpkeyprov";
platforms = with lib.platforms; linux;
license = lib.licenses.gpl2;
maintainers = [ lib.maintainers.ente ];
maintainers = [ lib.maintainers.Enteee ];
};
pluginFilename = "OtpKeyProv.plgx";

View File

@ -1,13 +1,17 @@
{ fetchzip, lib, stdenv, jdk, runtimeShell }:
{ fetchzip, lib, stdenv, jdk, runtimeShell, glib, wrapGAppsHook }:
stdenv.mkDerivation rec {
version = "5.4.4";
version = "5.5.1";
pname = "keystore-explorer";
src = fetchzip {
url = "https://github.com/kaikramer/keystore-explorer/releases/download/v${version}/kse-544.zip";
sha256 = "01kpa8g6p6vcqq9y70w5bm8jbw4kp55pbywj2zrhgjibrhgjqi0b";
url = "https://github.com/kaikramer/keystore-explorer/releases/download/v${version}/kse-${lib.replaceStrings ["."] [""] version}.zip";
sha256 = "2C/LkUUuef30PkN7HL0CtcNOjR5uNo9XaCiTatv5hgA=";
};
# glib is necessary so file dialogs don't hang.
buildInputs = [ glib ];
nativeBuildInputs = [ wrapGAppsHook ];
installPhase = ''
runHook preInstall

View File

@ -90,6 +90,8 @@ python3.pkgs.buildPythonApplication rec {
disabledTests = [
# timing based
"test_etag"
"test_bogota"
"test_event_no_dst"
];
meta = with lib; {

View File

@ -1,12 +1,19 @@
{ lib, stdenv, fetchurl, appimageTools, makeWrapper, electron, git }:
{ lib
, stdenv
, fetchurl
, appimageTools
, makeWrapper
, electron
, git
}:
stdenv.mkDerivation rec {
pname = "logseq";
version = "0.8.12";
version = "0.8.15";
src = fetchurl {
url = "https://github.com/logseq/logseq/releases/download/${version}/logseq-linux-x64-${version}.AppImage";
sha256 = "sha256-I1jGPNGlZ53N3ZlN9nN/GSgQIfdoUeclyuMl+PpNVY4=";
sha256 = "sha256-lE/bO/zpqChvdf8vfNqbC5iIpXAZDb36/N7Tpsj7PWY=";
name = "${pname}-${version}.AppImage";
};
@ -52,6 +59,7 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "A local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base";
homepage = "https://github.com/logseq/logseq";
changelog = "https://github.com/logseq/logseq/releases/tag/${version}";
license = licenses.agpl3Plus;
maintainers = with maintainers; [ weihua ];
platforms = [ "x86_64-linux" ];

View File

@ -14,12 +14,12 @@ let
in
stdenv.mkDerivation rec {
pname = "splitter";
version = "652";
version = "653";
src = fetchsvn {
url = "https://svn.mkgmap.org.uk/mkgmap/splitter/trunk";
rev = version;
sha256 = "sha256-yCdVOT8if3AImD4Q63gKfMep7WZsrCgV+IXfP4ZL3Qw=";
sha256 = "sha256-iw414ecnOfeG3FdlIaoVOPv9BXZ95uUHuPzCQGH4G+A=";
};
patches = [

View File

@ -2,14 +2,14 @@
rustPlatform.buildRustPackage rec {
pname = "oxker";
version = "0.1.9";
version = "0.1.10";
src = fetchCrate {
inherit pname version;
sha256 = "sha256-3J3Xe9LT4bHatU/wWsF0Gq9gGRcSdCzyQnIIfLXE8KA=";
sha256 = "sha256-2NX2iW3cT9027j2gUsDTtdIFDmJKIGPfSzrGGwvK/VA=";
};
cargoSha256 = "sha256-TWpshqvWMRk2A6RvjWWQc7Nu6tOrctUBZmzyjEFKPRw=";
cargoSha256 = "sha256-//GI+roOsCLkKgMDUDK0YhJWmeIaYCMBt9r14+Rz8UQ=";
meta = with lib; {
description = "A simple tui to view & control docker containers";

View File

@ -0,0 +1,58 @@
{ appstream-glib
, blueprint-compiler
, desktop-file-utils
, fetchFromGitHub
, gettext
, glib
, gtk4
, itstool
, lib
, libadwaita
, meson
, mesonEmulatorHook
, ninja
, pkg-config
, stdenv
, wrapGAppsHook4
}:
stdenv.mkDerivation rec {
pname = "raider";
version = "1.3.1";
src = fetchFromGitHub {
owner = "ADBeveridge";
repo = "raider";
rev = "v${version}";
hash = "sha256-fyE0CsQp2UVh+7bAQo+GHEF0k8Gwl9j4qclh04AQiVI=";
};
nativeBuildInputs = [
appstream-glib
blueprint-compiler
desktop-file-utils
itstool
meson
ninja
pkg-config
wrapGAppsHook4
] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
mesonEmulatorHook
];
buildInputs = [
gtk4
libadwaita
];
postInstall = ''
glib-compile-schemas $out/share/glib-2.0/schemas
'';
meta = with lib; {
description = "Securely delete your files";
homepage = "https://apps.gnome.org/app/com.github.ADBeveridge.Raider";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ benediktbroich ];
platforms = platforms.unix;
};
}

View File

@ -17,14 +17,14 @@
buildPythonApplication rec {
pname = "rofimoji";
version = "6.0.0";
version = "6.1.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "fdw";
repo = "rofimoji";
rev = "refs/tags/${version}";
sha256 = "sha256-8gaoPn43uurZBCex5AQXHShgw46Fx3YM4BIVDjTN8OY=";
sha256 = "sha256-eyzdTMLW9nk0x74T/AhvoVSrxXugc1HgNJy8EB5BApE=";
};
nativeBuildInputs = [

View File

@ -0,0 +1,39 @@
{ lib
, stdenvNoCC
, fetchFromGitHub
}:
stdenvNoCC.mkDerivation rec {
pname = "stylish";
version = "unstable-2022-12-05";
src = fetchFromGitHub {
owner = "thevinter";
repo = "styli.sh";
rev = "d595412a949c6cdc7e151ae0cf929aa1958aa7f1";
hash = "sha256-lFnzrYnTFWe8bvK//aC1+TapWIFNsNP60Msn7D0tk/0=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp "${src}/styli.sh" $out/bin
chmod +x $out/bin/styli.sh
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/thevinter/styli.sh";
description = "A shell script to manage wallpapers";
longDescription = ''
Styli.sh is a Bash script that aims to automate the tedious process
of finding new wallpapers, downloading and switching them via the
configs.
Styli.sh can search for specific wallpapers from unsplash or download
a random image from the specified subreddits. If you have pywal it also
can set automatically your terminal colors.
'';
license = licenses.mit;
maintainers = with maintainers; [ tchab ];
};
}

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "tippecanoe";
version = "2.16.0";
version = "2.17.0";
src = fetchFromGitHub {
owner = "felt";
repo = "tippecanoe";
rev = finalAttrs.version;
hash = "sha256-C0FCdCgycCh+3iG4D9HMOzx/r+MoYdJUgWL5fs8T1rU=";
hash = "sha256-GQPex+NX1DDOBWs/tBUsCtIWZ/+jxeblTRQEvfS2WuA=";
};
buildInputs = [ sqlite zlib ];

View File

@ -231,6 +231,5 @@ in stdenv.mkDerivation {
inherit (chromium) upstream-info browser;
mkDerivation = chromium.mkChromiumDerivation;
inherit chromeSrc sandboxExecutableName;
updateScript = ./update.py;
};
}

View File

@ -32,15 +32,15 @@
}
},
"dev": {
"version": "110.0.5464.2",
"sha256": "18k4rrwszk4xz416xi6li9b5pdajlscfgg4cyv67y10z7f28qwby",
"sha256bin64": "0hzv55bba4041400zjysgzz1n8svzvi156xyrayfr5ynapf7g2rd",
"version": "110.0.5478.4",
"sha256": "0sn07gk53mc6xcmbq1jrxwf4lp2hmw6k9rmhsw36qf5alcdkx94h",
"sha256bin64": "0r63qj6gc74vrjp7fyygzf49prsyim03s3cv43fm85lnab9m4x6i",
"deps": {
"gn": {
"version": "2022-11-29",
"version": "2022-12-12",
"url": "https://gn.googlesource.com/gn",
"rev": "70d6c60823c0233a0f35eccc25b2b640d2980bdc",
"sha256": "04md36i6l07c1bq8mqghrnbf308j9avmqkwqjqm8gciclnrnlsii"
"rev": "5e19d2fb166fbd4f6f32147fbb2f497091a54ad8",
"sha256": "1b5fwldfmkkbpp5x63n1dxv0nc965hphc8rm8ah7zg44zscm9z30"
}
}
},

View File

@ -1,6 +1,6 @@
{ lib, stdenv, fetchurl, zlib, libX11, libXext, libSM, libICE, libxkbcommon, libxshmfence
, libXfixes, libXt, libXi, libXcursor, libXScrnSaver, libXcomposite, libXdamage, libXtst, libXrandr
, alsa-lib, dbus, cups, libexif, ffmpeg, systemd, libva
, alsa-lib, dbus, cups, libexif, ffmpeg, systemd, libva, libGL
, freetype, fontconfig, libXft, libXrender, libxcb, expat
, libuuid
, libxml2
@ -8,6 +8,7 @@
, libdrm, mesa
, nss, nspr
, patchelf, makeWrapper
, wayland, pipewire
, isSnapshot ? false
, proprietaryCodecs ? false, vivaldi-ffmpeg-codecs ? null
, enableWidevine ? false, vivaldi-widevine ? null
@ -38,9 +39,10 @@ in stdenv.mkDerivation rec {
stdenv.cc.cc stdenv.cc.libc zlib libX11 libXt libXext libSM libICE libxcb libxkbcommon libxshmfence
libXi libXft libXcursor libXfixes libXScrnSaver libXcomposite libXdamage libXtst libXrandr
atk at-spi2-atk at-spi2-core alsa-lib dbus cups gtk3 gdk-pixbuf libexif ffmpeg systemd libva
freetype fontconfig libXrender libuuid expat glib nss nspr
freetype fontconfig libXrender libuuid expat glib nss nspr libGL
libxml2 pango cairo
libdrm mesa
wayland pipewire
] ++ lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs
++ lib.optional pulseSupport libpulseaudio;
@ -89,6 +91,7 @@ in stdenv.mkDerivation rec {
done
wrapProgram "$out/bin/vivaldi" \
--add-flags ${lib.escapeShellArg commandLineArgs} \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
--suffix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \
${lib.optionalString enableWidevine "--suffix LD_LIBRARY_PATH : ${libPath}"}
'' + lib.optionalString enableWidevine ''

View File

@ -2,7 +2,7 @@
(callPackage ./generic.nix { }) {
channel = "edge";
version = "22.8.2";
sha256 = "114lfq5d5b09zg14iwnmaf0vmm183xr37q7b4bj3m8zbzhpbk7xx";
vendorSha256 = "sha256-hKdokt5QW50oc2z8UFMq78DRWpwPlL5tSf2F0rQNEQ8=";
version = "22.12.1";
sha256 = "1ss6rhh71nq89ya8312fgy30pdw9vvnvnc8a7zs8a8yqg6p4x9lp";
vendorSha256 = "sha256-V4BQ+7J1T+g5I7SrCexkfe3ngl7Qy3cf0SF+u28QKWE=";
}

View File

@ -149,13 +149,13 @@
},
"baiducloud": {
"deleteVendor": true,
"hash": "sha256-4v9FuM69U+4V2Iy85vc4RP9KgzeME/R8rXxNSMBABdM=",
"hash": "sha256-MwpFSUhAZ6TjqWfsy7qazBtd1CrLbsAIDyRLonsDXiM=",
"homepage": "https://registry.terraform.io/providers/baidubce/baiducloud",
"owner": "baidubce",
"repo": "terraform-provider-baiducloud",
"rev": "v1.18.4",
"rev": "v1.19.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-ya2FpsLQMIu8zWYObpyPgBHVkHoNKzHgdMxukbtsje4="
"vendorHash": "sha256-3PLBs8LSE5JPtrhmdx+jQsnCrfZQQEUGA7wnf9M72yY="
},
"bigip": {
"hash": "sha256-VntKiBTQxe8lKV8Bb3A0moA/EUzyQQ7CInPjKJL4iBQ=",
@ -415,13 +415,13 @@
"vendorHash": "sha256-ZgVA2+2tu17dnAc51Aw3k6v8k7QosNTmFjFhmeknxa8="
},
"gandi": {
"hash": "sha256-dF3YCX3ghjg/OGLQT3Vzs/VLRoiuDXrTo5xP1Y8Jhgw=",
"hash": "sha256-mQ4L2XCudyPGDw21jihF7nkSct7/KWAe/txnbtuJ8Lk=",
"homepage": "https://registry.terraform.io/providers/go-gandi/gandi",
"owner": "go-gandi",
"repo": "terraform-provider-gandi",
"rev": "v2.2.1",
"rev": "v2.2.2",
"spdx": "MPL-2.0",
"vendorHash": "sha256-cStVmI58V46I3MYYYrbCY3llnOx2pyuM2Ku+rhe5DVQ="
"vendorHash": "sha256-uWTY8cFztXFrQQ7GW6/R+x9M6vHmsb934ldq+oeW5vk="
},
"github": {
"hash": "sha256-o7Sge0rCfP6Yueq+DP7siBsEinawgGe+nEu0/Olu8uQ=",
@ -544,11 +544,11 @@
"vendorHash": "sha256-rxh8Me+eOKPCbfHFT3tRsbM7JU67dBqv2JOiWArI/2Y="
},
"huaweicloud": {
"hash": "sha256-3fNNip9KZywpW/0xSQbdtTipHsYwLIUBzKIOdYsm+Bk=",
"hash": "sha256-GLAU/8GTo6XvNXLTu7fUUshW/b3NQyJkD/mdC+Dm3H8=",
"homepage": "https://registry.terraform.io/providers/huaweicloud/huaweicloud",
"owner": "huaweicloud",
"repo": "terraform-provider-huaweicloud",
"rev": "v1.43.0",
"rev": "v1.44.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@ -1095,11 +1095,11 @@
"vendorHash": "sha256-2wPmLpjhG6QgG+BUCO0oIzHjBOWIOYuptgdtSIm9TZw="
},
"tencentcloud": {
"hash": "sha256-mN52iD0HdsfzPxo9hLFlKxiwIm7641cnjUYk8XyRP0s=",
"hash": "sha256-vXd0yZ57bEdZ0OcIANMWdDN8PzOKnXJKw7HgjcOhSeE=",
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
"owner": "tencentcloudstack",
"repo": "terraform-provider-tencentcloud",
"rev": "v1.79.2",
"rev": "v1.79.3",
"spdx": "MPL-2.0",
"vendorHash": null
},

View File

@ -8,7 +8,7 @@
, liblinphone
, mediastreamer
, mediastreamer-openh264
, minizip2
, minizip-ng
, mkDerivation
, qtgraphicaleffects
, qtquickcontrols2
@ -70,7 +70,7 @@ mkDerivation rec {
mediastreamer
mediastreamer-openh264
minizip2
minizip-ng
qtgraphicaleffects
qtquickcontrols2
qttranslations
@ -81,7 +81,7 @@ mkDerivation rec {
];
cmakeFlags = [
"-DMINIZIP_INCLUDE_DIRS=${minizip2}/include"
"-DMINIZIP_INCLUDE_DIRS=${minizip-ng}/include"
"-DMINIZIP_LIBRARIES=minizip"
# RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/

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