mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-25 20:34:52 +03:00
Merge branch 'staging-next' into staging
- readline6 attribute removed from all-packages.nix ind879125d61
- readline attribute was bumped to readline82 in50adabdd60
This commit is contained in:
commit
5810109b42
@ -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]
|
||||
|
4
.github/workflows/periodic-merge-24h.yml
vendored
4
.github/workflows/periodic-merge-24h.yml
vendored
@ -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
|
||||
|
2
COPYING
2
COPYING
@ -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
|
||||
|
@ -20,7 +20,7 @@ Features are separated in various sections depending on if you opt for a Nix-sto
|
||||
### Common
|
||||
|
||||
- arbitrary NixOS configuration
|
||||
- automatic or bound disk size: `diskSize` parameter, `additionalSpace` can be set when `diskSize` is `auto` to add a constant of disk space
|
||||
- automatic or bound disk size: `diskSize` parameter, `additionalSpace` can be set when `diskSize` is `auto` to add a constant of disk space
|
||||
- multiple partition table layouts: EFI, legacy, legacy + GPT, hybrid, none through `partitionTableType` parameter
|
||||
- OVMF or EFI firmwares and variables templates can be customized
|
||||
- root filesystem `fsType` can be customized to whatever `mkfs.${fsType}` exist during operations
|
||||
|
@ -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
|
||||
|
@ -62,7 +62,7 @@ runCommand "example" {
|
||||
'';
|
||||
```
|
||||
|
||||
While `testBuildFailure` is designed to keep changes to the original builder's
|
||||
While `testBuildFailure` is designed to keep changes to the original builder's
|
||||
environment to a minimum, some small changes are inevitable.
|
||||
|
||||
- The file `$TMPDIR/testBuildFailure.log` is present. It should not be deleted.
|
||||
|
@ -16,7 +16,8 @@ In the following is an example expression using `buildGoModule`, the following a
|
||||
`vendorHash` can also be set to `null`.
|
||||
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 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.
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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 {};
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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";
|
||||
|
@ -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
|
||||
|
@ -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`. */
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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
|
||||
|
@ -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`
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -9,8 +9,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
- Nix has been updated from 2.3 to 2.8. This mainly brings experimental support
|
||||
for Flakes, but also marks the `nix` 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 [nix-2.4](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html),
|
||||
instructions for upgrades, see the
|
||||
relase notes for [nix-2.4](https://nixos.org/manual/nix/stable/release-notes/rl-2.4.html),
|
||||
[nix-2.5](https://nixos.org/manual/nix/stable/release-notes/rl-2.5.html),
|
||||
[nix-2.6](https://nixos.org/manual/nix/stable/release-notes/rl-2.6.html),
|
||||
[nix-2.7](https://nixos.org/manual/nix/stable/release-notes/rl-2.7.html) and
|
||||
@ -30,7 +30,7 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- Systemd has been upgraded to the version 250.
|
||||
|
||||
- Pulseaudio has been updated to version 15.0 and now optionally
|
||||
- Pulseaudio has been updated to version 15.0 and now optionally
|
||||
[supports additional Bluetooth audio codecs](https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/#supportforldacandaptxbluetoothcodecsplussbcxqsbcwithhigher-qualityparameters)
|
||||
such as aptX or LDAC, with codec switching available in `pavucontrol`. This
|
||||
feature is disabled by default, but can be enabled with the option
|
||||
@ -50,7 +50,7 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
settings for many certificates at once. This also opens up the option to use
|
||||
DNS-01 validation when using `enableACME` web server virtual hosts (e.g.
|
||||
`services.nginx.virtualHosts.*.enableACME`).
|
||||
|
||||
|
||||
## New Services {#sec-release-22.05-new-services}
|
||||
|
||||
- [1password](https://1password.com/), command-lines and graphic interface for 1Password. Available as [programs._1password](#opt-programs._1password.enable) and [programs._1password-gui](#opt-programs._1password.enable).
|
||||
@ -743,11 +743,11 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
- The configuration portion of the `nix-daemon` module has been reworked and exposed as [nix.settings](options.html#opt-nix-settings):
|
||||
* Legacy options have been mapped to the corresponding options under under [nix.settings](options.html#opt-nix.settings) and will be deprecated when NixOS 21.11 reaches end of life.
|
||||
* [nix.buildMachines.publicHostKey](options.html#opt-nix.buildMachines.publicHostKey) has been added.
|
||||
|
||||
|
||||
- [`kops`](https://kops.sigs.k8s.io) defaults to 1.23.2, which will enable [Instance Metadata Service Version 2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) and require tokens on new clusters with Kubernetes >= 1.22. This will increase security by default, but may break some types of workloads. The default behaviour for `spec.kubeDNS.nodeLocalDNS.forwardToKubeDNS` has changed from `true` to `false`. Cilium now has `disable-cnp-status-updates: true` by default. Set this to false if you rely on the CiliumNetworkPolicy status fields. Support for Kubernetes 1.17, the Lyft CNI, Weave CNI on Kubernetes >= 1.23, CentOS 7 and 8, Debian 9, RHEL 7, and Ubuntu 16.05 (Xenial) has been removed. See the [1.22 release notes](https://kops.sigs.k8s.io/releases/1.22-notes/) and [1.23 release notes](https://kops.sigs.k8s.io/releases/1.23-notes/) for more details, including other significant changes.
|
||||
|
||||
- Mattermost has been upgraded to extended support version 6.3 as the previously
|
||||
packaged extended support version 5.37 is [reaching end of life](https://docs.mattermost.com/upgrade/extended-support-release.html).
|
||||
packaged extended support version 5.37 is [reaching end of life](https://docs.mattermost.com/upgrade/extended-support-release.html).
|
||||
Migration may take some time, see the [changelog](https://docs.mattermost.com/install/self-managed-changelog.html#release-v6-3-extended-support-release)
|
||||
and [important upgrade notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html).
|
||||
|
||||
@ -762,14 +762,14 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
By default auto-upgrade will now run immediately if it would have been triggered at least
|
||||
once during the time when the timer was inactive.
|
||||
|
||||
- Mastodon now uses `services.redis.servers` to start a new redis server, instead of using a global redis server.
|
||||
- Mastodon now uses `services.redis.servers` to start a new redis server, instead of using a global redis server.
|
||||
This improves compatibility with other services that use redis.
|
||||
|
||||
Note that this will recreate the redis database, although according to the [Mastodon docs](https://docs.joinmastodon.org/admin/backups/),
|
||||
|
||||
Note that this will recreate the redis database, although according to the [Mastodon docs](https://docs.joinmastodon.org/admin/backups/),
|
||||
this is almost harmless:
|
||||
> Losing the Redis database is almost harmless: The only irrecoverable data will be the contents of the Sidekiq queues and scheduled retries of previously failed jobs.
|
||||
> Losing the Redis database is almost harmless: The only irrecoverable data will be the contents of the Sidekiq queues and scheduled retries of previously failed jobs.
|
||||
> The home and list feeds are stored in Redis, but can be regenerated with tootctl.
|
||||
|
||||
|
||||
If you do want to save the redis database, you can use the following commands:
|
||||
```bash
|
||||
redis-cli save
|
||||
@ -980,7 +980,7 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
or `wl*` with priority 99 (which means that it doesn't have any effect if such an interface is matched
|
||||
by a `.network-`unit with a lower priority). In case of scripted networking, no behavior
|
||||
was changed.
|
||||
|
||||
|
||||
- The new [`postgresqlTestHook`](https://nixos.org/manual/nixpkgs/stable/#sec-postgresqlTestHook) runs a PostgreSQL server for the duration of package checks.
|
||||
|
||||
- `zfs` was updated from 2.1.4 to 2.1.5, enabling it to be used with Linux kernel 5.18.
|
||||
|
@ -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,13 +30,15 @@ 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. -->
|
||||
|
||||
- `carnix` and `cratesIO` has been removed due to being unmaintained, use alternatives such as [naersk](https://github.com/nix-community/naersk) and [crate2nix](https://github.com/kolloch/crate2nix) instead.
|
||||
|
||||
- `borgbackup` module now has an option for inhibiting system sleep while backups are running, defaulting to off (not inhibiting sleep), available as [`services.borgbackup.jobs.<name>.inhibitsSleep`](#opt-services.borgbackup.jobs._name_.inhibitsSleep).
|
||||
- `borgbackup` module now has an option for inhibiting system sleep while backups are running, defaulting to off (not inhibiting sleep), available as [`services.borgbackup.jobs.<name>.inhibitsSleep`](#opt-services.borgbackup.jobs._name_.inhibitsSleep).
|
||||
|
||||
- The EC2 image module no longer fetches instance metadata in stage-1. This results in a significantly smaller initramfs, since network drivers no longer need to be included, and faster boots, since metadata fetching can happen in parallel with startup of other services.
|
||||
This breaks services which rely on metadata being present by the time stage-2 is entered. Anything which reads EC2 metadata from `/etc/ec2-metadata` should now have an `after` dependency on `fetch-ec2-metadata.service`
|
||||
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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 "
|
||||
"$'XDG_RUNTIME_DIR=/run/user/`id -u` "
|
||||
"systemctl --user {}'"
|
||||
).format(user, q)
|
||||
f"su -l {user} --shell /bin/sh -c "
|
||||
"$'XDG_RUNTIME_DIR=/run/user/`id -u` "
|
||||
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
|
||||
|
@ -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 ""
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
48
nixos/modules/services/logging/ulogd.nix
Normal file
48
nixos/modules/services/logging/ulogd.nix
Normal 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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -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;
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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.
|
||||
'';
|
||||
};
|
||||
|
@ -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";
|
||||
};
|
||||
})
|
||||
)
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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" ];
|
||||
};
|
||||
};
|
||||
|
||||
|
214
nixos/modules/services/networking/webhook.nix
Normal file
214
nixos/modules/services/networking/webhook.nix
Normal 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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -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}
|
||||
''}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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;
|
||||
|
||||
|
139
nixos/modules/services/web-servers/garage-doc.xml
Normal file
139
nixos/modules/services/web-servers/garage-doc.xml
Normal 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><nixpkgs/pkgs/tools/filesystem/garage/default.nix></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>
|
@ -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.";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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" ];
|
||||
|
15
nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
Normal file → Executable file
15
nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
Normal file → Executable 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,12 +259,18 @@ 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:
|
||||
print("updating systemd-boot from %s to %s" % (installed_version, available_version))
|
||||
subprocess.check_call(["@systemd@/bin/bootctl", "--esp-path=@efiSysMountPoint@", "update"])
|
||||
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"])
|
||||
|
||||
mkdir_p("@efiSysMountPoint@/efi/nixos")
|
||||
mkdir_p("@efiSysMountPoint@/loader/entries")
|
||||
|
@ -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 \
|
||||
|
@ -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 = ''
|
||||
|
@ -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 {};
|
||||
|
98
nixos/tests/garage/basic.nix
Normal file
98
nixos/tests/garage/basic.nix
Normal 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
|
53
nixos/tests/garage/default.nix
Normal file
53
nixos/tests/garage/default.nix
Normal 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"
|
||||
]
|
@ -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
|
51
nixos/tests/gnome-flashback.nix
Normal file
51
nixos/tests/gnome-flashback.nix
Normal 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")
|
||||
'';
|
||||
})
|
@ -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 = ''
|
||||
|
@ -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
84
nixos/tests/ulogd.nix
Normal 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
65
nixos/tests/webhook.nix
Normal 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!"
|
||||
'';
|
||||
}
|
@ -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; };
|
||||
|
@ -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
|
||||
|
@ -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 ];
|
||||
|
@ -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 ];
|
||||
|
@ -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,47 +19,51 @@ 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; };
|
||||
networking.firewall.allowedUDPPorts = [ 23542 ];
|
||||
networking.wg-quick.interfaces.wg0 = {
|
||||
address = [ "10.23.42.1/32" "fc00::1/128" ];
|
||||
listenPort = 23542;
|
||||
extraConfig = lib.mkMerge [
|
||||
commonConfig
|
||||
{
|
||||
networking.firewall.allowedUDPPorts = [ 23542 ];
|
||||
networking.wg-quick.interfaces.wg0 = {
|
||||
address = [ "10.23.42.1/32" "fc00::1/128" ];
|
||||
listenPort = 23542;
|
||||
|
||||
inherit (wg-snakeoil-keys.peer0) privateKey;
|
||||
inherit (wg-snakeoil-keys.peer0) privateKey;
|
||||
|
||||
peers = lib.singleton {
|
||||
allowedIPs = [ "10.23.42.2/32" "fc00::2/128" ];
|
||||
peers = lib.singleton {
|
||||
allowedIPs = [ "10.23.42.2/32" "fc00::2/128" ];
|
||||
|
||||
inherit (wg-snakeoil-keys.peer1) publicKey;
|
||||
inherit (wg-snakeoil-keys.peer1) publicKey;
|
||||
};
|
||||
|
||||
dns = [ "10.23.42.2" "fc00::2" "wg0" ];
|
||||
};
|
||||
|
||||
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; };
|
||||
networking.useNetworkd = true;
|
||||
networking.wg-quick.interfaces.wg0 = {
|
||||
address = [ "10.23.42.2/32" "fc00::2/128" ];
|
||||
inherit (wg-snakeoil-keys.peer1) privateKey;
|
||||
extraConfig = lib.mkMerge [
|
||||
commonConfig
|
||||
{
|
||||
networking.useNetworkd = true;
|
||||
networking.wg-quick.interfaces.wg0 = {
|
||||
address = [ "10.23.42.2/32" "fc00::2/128" ];
|
||||
inherit (wg-snakeoil-keys.peer1) privateKey;
|
||||
|
||||
peers = lib.singleton {
|
||||
allowedIPs = [ "0.0.0.0/0" "::/0" ];
|
||||
endpoint = "192.168.0.1:23542";
|
||||
persistentKeepalive = 25;
|
||||
peers = lib.singleton {
|
||||
allowedIPs = [ "0.0.0.0/0" "::/0" ];
|
||||
endpoint = "192.168.0.1:23542";
|
||||
persistentKeepalive = 25;
|
||||
|
||||
inherit (wg-snakeoil-keys.peer0) publicKey;
|
||||
inherit (wg-snakeoil-keys.peer0) publicKey;
|
||||
};
|
||||
|
||||
dns = [ "10.23.42.1" "fc00::1" "wg0" ];
|
||||
};
|
||||
|
||||
dns = [ "10.23.42.1" "fc00::1" "wg0" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -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 = ''
|
||||
|
@ -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 = [
|
||||
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
@ -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 ];
|
||||
|
@ -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};
|
||||
};
|
||||
|
||||
|
@ -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 = [
|
||||
|
@ -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
@ -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";
|
||||
|
@ -11,7 +11,7 @@ let
|
||||
in
|
||||
|
||||
mkShell {
|
||||
packages = [ neovim nix-prefetch python3 ];
|
||||
packages = [ neovim nurl python3 ];
|
||||
|
||||
NVIM_TREESITTER = nvim-treesitter;
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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 ];
|
||||
});
|
||||
|
@ -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/,,
|
||||
|
@ -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";
|
||||
|
@ -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"
|
||||
|
@ -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";
|
||||
|
@ -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
|
||||
|
@ -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 { };
|
||||
};
|
||||
|
67
pkgs/applications/misc/ArchiSteamFarm/deps.nix
generated
67
pkgs/applications/misc/ArchiSteamFarm/deps.nix
generated
@ -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"; })
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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 ../../../../..
|
||||
|
@ -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; })
|
||||
|
@ -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.
|
||||
|
@ -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";
|
||||
|
@ -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
|
||||
|
||||
|
@ -90,6 +90,8 @@ python3.pkgs.buildPythonApplication rec {
|
||||
disabledTests = [
|
||||
# timing based
|
||||
"test_etag"
|
||||
"test_bogota"
|
||||
"test_event_no_dst"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
|
@ -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" ];
|
||||
|
@ -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 = [
|
||||
|
@ -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";
|
||||
|
58
pkgs/applications/misc/raider/default.nix
Normal file
58
pkgs/applications/misc/raider/default.nix
Normal 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;
|
||||
};
|
||||
}
|
@ -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 = [
|
||||
|
39
pkgs/applications/misc/stylish/default.nix
Normal file
39
pkgs/applications/misc/stylish/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
@ -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 ];
|
||||
|
@ -231,6 +231,5 @@ in stdenv.mkDerivation {
|
||||
inherit (chromium) upstream-info browser;
|
||||
mkDerivation = chromium.mkChromiumDerivation;
|
||||
inherit chromeSrc sandboxExecutableName;
|
||||
updateScript = ./update.py;
|
||||
};
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -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 ''
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user