Merge master into staging-next

This commit is contained in:
github-actions[bot] 2024-04-02 00:02:18 +00:00 committed by GitHub
commit abafd81aa2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
107 changed files with 1389 additions and 1184 deletions

View File

@ -15774,6 +15774,12 @@
githubId = 4201956;
name = "pongo1231";
};
poptart = {
email = "poptart@hosakacorp.net";
github = "terrorbyte";
githubId = 1601039;
name = "Cale Black";
};
portothree = {
name = "Gustavo Porto";
email = "gus@p8s.co";

View File

@ -12,7 +12,7 @@ looks like this:
type = type specification;
default = default value;
example = example value;
description = lib.mdDoc "Description for use in the NixOS manual.";
description = "Description for use in the NixOS manual.";
};
};
}
@ -58,12 +58,9 @@ The function `mkOption` accepts the following arguments.
`description`
: A textual description of the option, in [Nixpkgs-flavored Markdown](
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format, that will be
included in the NixOS manual. During the migration process from DocBook
it is necessary to mark descriptions written in CommonMark with `lib.mdDoc`.
The description may still be written in DocBook (without any marker), but this
is discouraged and will be deprecated in the future.
: A textual description of the option in [Nixpkgs-flavored Markdown](
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format that will be
included in the NixOS manual.
## Utility functions for common option patterns {#sec-option-declarations-util}
@ -81,13 +78,13 @@ For example:
::: {#ex-options-declarations-util-mkEnableOption-magic .example}
### `mkEnableOption` usage
```nix
lib.mkEnableOption (lib.mdDoc "magic")
lib.mkEnableOption "magic"
# is like
lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = lib.mdDoc "Whether to enable magic.";
description = "Whether to enable magic.";
}
```
:::
@ -135,7 +132,7 @@ lib.mkOption {
type = lib.types.package;
default = pkgs.hello;
defaultText = lib.literalExpression "pkgs.hello";
description = lib.mdDoc "The hello package to use.";
description = "The hello package to use.";
}
```
:::
@ -153,7 +150,7 @@ lib.mkOption {
default = pkgs.ghc;
defaultText = lib.literalExpression "pkgs.ghc";
example = lib.literalExpression "pkgs.haskell.packages.ghc92.ghc.withPackages (hkgs: [ hkgs.primes ])";
description = lib.mdDoc "The GHC package to use.";
description = "The GHC package to use.";
}
```
:::

View File

@ -473,6 +473,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- `services.zfs.zed.enableMail` now uses the global `sendmail` wrapper defined by an email module
(such as msmtp or Postfix). It no longer requires using a special ZFS build with email support.
- `castopod` has some migration actions to be taken in case of a S3 setup. Some new features may also need some manual migration actions. See [https://code.castopod.org/adaures/castopod/-/releases](https://code.castopod.org/adaures/castopod/-/releases) for more informations.
- `nextcloud-setup.service` no longer changes the group of each file & directory inside `/var/lib/nextcloud/{config,data,store-apps}` if one of these directories has the wrong owner group. This was part of transitioning the group used for `/var/lib/nextcloud`, but isn't necessary anymore.
- `services.kavita` now uses the freeform option `services.kavita.settings` for the application settings file.

View File

@ -117,9 +117,7 @@
# deprecated since 23.11.
# TODO remove in a while.
, allowDocBook ? false
# whether lib.mdDoc is required for descriptions to be read as markdown.
# deprecated since 23.11.
# TODO remove in a while.
# TODO remove in a while (see https://github.com/NixOS/nixpkgs/issues/300735)
, markdownByDefault ? true
}:

View File

@ -31,7 +31,6 @@ let
;
inherit (lib)
mdDoc
mkDefault
mkDerivedConfig
mkEnableOption
@ -81,11 +80,11 @@ rec {
initrdContents = attrsOf (submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption (mdDoc "copying of this file and symlinking it") // { default = true; };
enable = (mkEnableOption "copying of this file and symlinking it") // { default = true; };
target = mkOption {
type = path;
description = mdDoc ''
description = ''
Path of the symlink.
'';
default = name;
@ -94,12 +93,12 @@ rec {
text = mkOption {
default = null;
type = nullOr lines;
description = mdDoc "Text of the file.";
description = "Text of the file.";
};
source = mkOption {
type = path;
description = mdDoc "Path of the source file.";
description = "Path of the source file.";
};
};

View File

@ -17,7 +17,6 @@ let
concatMap
filterOverrides
isList
mdDoc
mergeEqualOption
mkIf
mkMerge
@ -55,7 +54,7 @@ in rec {
enable = mkOption {
default = true;
type = types.bool;
description = mdDoc ''
description = ''
If set to false, this unit will be a symlink to
/dev/null. This is primarily useful to prevent specific
template instances
@ -69,7 +68,7 @@ in rec {
overrideStrategy = mkOption {
default = "asDropinIfExists";
type = types.enum [ "asDropinIfExists" "asDropin" ];
description = mdDoc ''
description = ''
Defines how unit configuration is provided for systemd:
`asDropinIfExists` creates a unit file when no unit file is provided by the package
@ -85,7 +84,7 @@ in rec {
requiredBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Units that require (i.e. depend on and need to go down with) this unit.
As discussed in the `wantedBy` option description this also creates
`.requires` symlinks automatically.
@ -95,7 +94,7 @@ in rec {
upheldBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Keep this unit running as long as the listed units are running. This is a continuously
enforced version of wantedBy.
'';
@ -104,7 +103,7 @@ in rec {
wantedBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Units that want (i.e. depend on) this unit. The default method for
starting a unit by default at boot time is to set this option to
`["multi-user.target"]` for system services. Likewise for user units
@ -122,7 +121,7 @@ in rec {
aliases = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc "Aliases of that unit.";
description = "Aliases of that unit.";
};
};
@ -132,12 +131,12 @@ in rec {
text = mkOption {
type = types.nullOr types.str;
default = null;
description = mdDoc "Text of this systemd unit.";
description = "Text of this systemd unit.";
};
unit = mkOption {
internal = true;
description = mdDoc "The generated unit.";
description = "The generated unit.";
};
};
@ -148,19 +147,19 @@ in rec {
description = mkOption {
default = "";
type = types.singleLineStr;
description = mdDoc "Description of this unit used in systemd messages and progress indicators.";
description = "Description of this unit used in systemd messages and progress indicators.";
};
documentation = mkOption {
default = [];
type = types.listOf types.str;
description = mdDoc "A list of URIs referencing documentation for this unit or its configuration.";
description = "A list of URIs referencing documentation for this unit or its configuration.";
};
requires = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Start the specified units when this unit is started, and stop
this unit when the specified units are stopped or fail.
'';
@ -169,7 +168,7 @@ in rec {
wants = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Start the specified units when this unit is started.
'';
};
@ -177,7 +176,7 @@ in rec {
upholds = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Keeps the specified running while this unit is running. A continuous version of `wants`.
'';
};
@ -185,7 +184,7 @@ in rec {
after = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
If the specified units are started at the same time as
this unit, delay this unit until they have started.
'';
@ -194,7 +193,7 @@ in rec {
before = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
If the specified units are started at the same time as
this unit, delay them until this unit has started.
'';
@ -203,7 +202,7 @@ in rec {
bindsTo = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Like requires, but in addition, if the specified units
unexpectedly disappear, this unit will be stopped as well.
'';
@ -212,7 +211,7 @@ in rec {
partOf = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
If the specified units are stopped or restarted, then this
unit is stopped or restarted as well.
'';
@ -221,7 +220,7 @@ in rec {
conflicts = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
If the specified units are started, then this unit is stopped
and vice versa.
'';
@ -230,7 +229,7 @@ in rec {
requisite = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
Similar to requires. However if the units listed are not started,
they will not be started and the transaction will fail.
'';
@ -240,7 +239,7 @@ in rec {
default = {};
example = { RequiresMountsFor = "/data"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Unit]` section of the unit. See
{manpage}`systemd.unit(5)` for details.
@ -250,7 +249,7 @@ in rec {
onFailure = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
A list of one or more units that are activated when
this unit enters the "failed" state.
'';
@ -259,7 +258,7 @@ in rec {
onSuccess = mkOption {
default = [];
type = types.listOf unitNameType;
description = mdDoc ''
description = ''
A list of one or more units that are activated when
this unit enters the "inactive" state.
'';
@ -267,7 +266,7 @@ in rec {
startLimitBurst = mkOption {
type = types.int;
description = mdDoc ''
description = ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -276,7 +275,7 @@ in rec {
startLimitIntervalSec = mkOption {
type = types.int;
description = mdDoc ''
description = ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -295,7 +294,7 @@ in rec {
restartTriggers = mkOption {
default = [];
type = types.listOf types.unspecified;
description = mdDoc ''
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be restarted.
@ -305,7 +304,7 @@ in rec {
reloadTriggers = mkOption {
default = [];
type = types.listOf unitOption;
description = mdDoc ''
description = ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be reloaded. If anything but a reload trigger changes in the
@ -323,13 +322,13 @@ in rec {
default = {};
type = with types; attrsOf (nullOr (oneOf [ str path package ]));
example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
description = mdDoc "Environment variables passed to the service's processes.";
description = "Environment variables passed to the service's processes.";
};
path = mkOption {
default = [];
type = with types; listOf (oneOf [ package str ]);
description = mdDoc ''
description = ''
Packages added to the service's {env}`PATH`
environment variable. Both the {file}`bin`
and {file}`sbin` subdirectories of each
@ -343,7 +342,7 @@ in rec {
{ RestartSec = 5;
};
type = types.addCheck (types.attrsOf unitOption) checkService;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Service]` section of the unit. See
{manpage}`systemd.service(5)` for details.
@ -353,14 +352,14 @@ in rec {
script = mkOption {
type = types.lines;
default = "";
description = mdDoc "Shell commands executed as the service's main process.";
description = "Shell commands executed as the service's main process.";
};
scriptArgs = mkOption {
type = types.str;
default = "";
example = "%i";
description = mdDoc ''
description = ''
Arguments passed to the main process script.
Can contain specifiers (`%` placeholders expanded by systemd, see {manpage}`systemd.unit(5)`).
'';
@ -369,7 +368,7 @@ in rec {
preStart = mkOption {
type = types.lines;
default = "";
description = mdDoc ''
description = ''
Shell commands executed before the service's main process
is started.
'';
@ -378,7 +377,7 @@ in rec {
postStart = mkOption {
type = types.lines;
default = "";
description = mdDoc ''
description = ''
Shell commands executed after the service's main process
is started.
'';
@ -387,7 +386,7 @@ in rec {
reload = mkOption {
type = types.lines;
default = "";
description = mdDoc ''
description = ''
Shell commands executed when the service's main process
is reloaded.
'';
@ -396,7 +395,7 @@ in rec {
preStop = mkOption {
type = types.lines;
default = "";
description = mdDoc ''
description = ''
Shell commands executed to stop the service.
'';
};
@ -404,7 +403,7 @@ in rec {
postStop = mkOption {
type = types.lines;
default = "";
description = mdDoc ''
description = ''
Shell commands executed after the service's main process
has exited.
'';
@ -413,7 +412,7 @@ in rec {
jobScripts = mkOption {
type = with types; coercedTo path singleton (listOf path);
internal = true;
description = mdDoc "A list of all job script derivations of this unit.";
description = "A list of all job script derivations of this unit.";
default = [];
};
@ -458,7 +457,7 @@ in rec {
restartIfChanged = mkOption {
type = types.bool;
default = true;
description = mdDoc ''
description = ''
Whether the service should be restarted during a NixOS
configuration switch if its definition has changed.
'';
@ -467,7 +466,7 @@ in rec {
reloadIfChanged = mkOption {
type = types.bool;
default = false;
description = mdDoc ''
description = ''
Whether the service should be reloaded during a NixOS
configuration switch if its definition has changed. If
enabled, the value of {option}`restartIfChanged` is
@ -483,7 +482,7 @@ in rec {
stopIfChanged = mkOption {
type = types.bool;
default = true;
description = mdDoc ''
description = ''
If set, a changed unit is restarted by calling
{command}`systemctl stop` in the old configuration,
then {command}`systemctl start` in the new one.
@ -499,7 +498,7 @@ in rec {
type = with types; either str (listOf str);
default = [];
example = "Sun 14:00:00";
description = mdDoc ''
description = ''
Automatically start this unit at the given date/time, which
must be in the format described in
{manpage}`systemd.time(7)`. This is equivalent
@ -526,7 +525,7 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = mdDoc ''
description = ''
For each item in this list, a `ListenStream`
option in the `[Socket]` section will be created.
'';
@ -536,7 +535,7 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = mdDoc ''
description = ''
For each item in this list, a `ListenDatagram`
option in the `[Socket]` section will be created.
'';
@ -546,7 +545,7 @@ in rec {
default = {};
example = { ListenStream = "/run/my-socket"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Socket]` section of the unit. See
{manpage}`systemd.socket(5)` for details.
@ -578,7 +577,7 @@ in rec {
default = {};
example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Timer]` section of the unit. See
{manpage}`systemd.timer(5)` and
@ -611,7 +610,7 @@ in rec {
default = {};
example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Path]` section of the unit. See
{manpage}`systemd.path(5)` for details.
@ -642,13 +641,13 @@ in rec {
what = mkOption {
example = "/dev/sda1";
type = types.str;
description = mdDoc "Absolute path of device node, file or other resource. (Mandatory)";
description = "Absolute path of device node, file or other resource. (Mandatory)";
};
where = mkOption {
example = "/mnt";
type = types.str;
description = mdDoc ''
description = ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -658,21 +657,21 @@ in rec {
default = "";
example = "ext4";
type = types.str;
description = mdDoc "File system type.";
description = "File system type.";
};
options = mkOption {
default = "";
example = "noatime";
type = types.commas;
description = mdDoc "Options used to mount the file system.";
description = "Options used to mount the file system.";
};
mountConfig = mkOption {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Mount]` section of the unit. See
{manpage}`systemd.mount(5)` for details.
@ -702,7 +701,7 @@ in rec {
where = mkOption {
example = "/mnt";
type = types.str;
description = mdDoc ''
description = ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -712,7 +711,7 @@ in rec {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Automount]` section of the unit. See
{manpage}`systemd.automount(5)` for details.
@ -743,7 +742,7 @@ in rec {
default = {};
example = { MemoryMax = "2G"; };
type = types.attrsOf unitOption;
description = mdDoc ''
description = ''
Each attribute in this set specifies an option in the
`[Slice]` section of the unit. See
{manpage}`systemd.slice(5)` for details.

View File

@ -1,6 +1,6 @@
{ config, lib, hostPkgs, ... }:
let
inherit (lib) mkOption types literalMD mdDoc;
inherit (lib) mkOption types literalMD;
# Reifies and correctly wraps the python test driver for
# the respective qemu version and with or without ocr support
@ -104,13 +104,13 @@ in
options = {
driver = mkOption {
description = mdDoc "Package containing a script that runs the test.";
description = "Package containing a script that runs the test.";
type = types.package;
defaultText = literalMD "set by the test framework";
};
hostPkgs = mkOption {
description = mdDoc "Nixpkgs attrset used outside the nodes.";
description = "Nixpkgs attrset used outside the nodes.";
type = types.raw;
example = lib.literalExpression ''
import nixpkgs { inherit system config overlays; }
@ -118,14 +118,14 @@ in
};
qemu.package = mkOption {
description = mdDoc "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
description = "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
type = types.package;
default = hostPkgs.qemu_test;
defaultText = "hostPkgs.qemu_test";
};
globalTimeout = mkOption {
description = mdDoc ''
description = ''
A global timeout for the complete test, expressed in seconds.
Beyond that timeout, every resource will be killed and released and the test will fail.
@ -137,7 +137,7 @@ in
};
enableOCR = mkOption {
description = mdDoc ''
description = ''
Whether to enable Optical Character Recognition functionality for
testing graphical programs. See [Machine objects](`ssec-machine-objects`).
'';
@ -146,7 +146,7 @@ in
};
extraPythonPackages = mkOption {
description = mdDoc ''
description = ''
Python packages to add to the test driver.
The argument is a Python package set, similar to `pkgs.pythonPackages`.
@ -159,7 +159,7 @@ in
};
extraDriverArgs = mkOption {
description = mdDoc ''
description = ''
Extra arguments to pass to the test driver.
They become part of [{option}`driver`](#test-opt-driver) via `wrapProgram`.
@ -171,7 +171,7 @@ in
skipLint = mkOption {
type = types.bool;
default = false;
description = mdDoc ''
description = ''
Do not run the linters. This may speed up your iteration cycle, but it is not something you should commit.
'';
};
@ -179,7 +179,7 @@ in
skipTypeCheck = mkOption {
type = types.bool;
default = false;
description = mdDoc ''
description = ''
Disable type checking. This must not be enabled for new NixOS tests.
This may speed up your iteration cycle, unless you're working on the [{option}`testScript`](#test-opt-testScript).

View File

@ -1,11 +1,11 @@
{ config, lib, moduleType, hostPkgs, ... }:
let
inherit (lib) mkOption types mdDoc;
inherit (lib) mkOption types;
in
{
options = {
interactive = mkOption {
description = mdDoc ''
description = ''
Tests [can be run interactively](#sec-running-nixos-tests-interactively)
using the program in the test derivation's `.driverInteractive` attribute.

View File

@ -1,11 +1,11 @@
{ lib, ... }:
let
inherit (lib) types mkOption mdDoc;
inherit (lib) types mkOption;
in
{
options = {
meta = lib.mkOption {
description = mdDoc ''
description = ''
The [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes that will be set on the returned derivations.
Not all [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes are supported, but more can be added as desired.
@ -16,21 +16,21 @@ in
maintainers = lib.mkOption {
type = types.listOf types.raw;
default = [];
description = mdDoc ''
description = ''
The [list of maintainers](https://nixos.org/manual/nixpkgs/stable/#var-meta-maintainers) for this test.
'';
};
timeout = lib.mkOption {
type = types.nullOr types.int;
default = 3600; # 1 hour
description = mdDoc ''
description = ''
The [{option}`test`](#test-opt-test)'s [`meta.timeout`](https://nixos.org/manual/nixpkgs/stable/#var-meta-timeout) in seconds.
'';
};
broken = lib.mkOption {
type = types.bool;
default = false;
description = mdDoc ''
description = ''
Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#test-opt-test) derivation.
'';
};

View File

@ -1,10 +1,10 @@
{ lib, ... }:
let
inherit (lib) mkOption types mdDoc;
inherit (lib) mkOption types;
in
{
options.name = mkOption {
description = mdDoc ''
description = ''
The name of the test.
This is used in the derivation names of the [{option}`driver`](#test-opt-driver) and [{option}`test`](#test-opt-test) runner.

View File

@ -5,7 +5,6 @@ let
attrNames concatMap concatMapStrings flip forEach head
listToAttrs mkDefault mkOption nameValuePair optionalString
range toLower types zipListsWith zipLists
mdDoc
;
nodeNumbers =
@ -89,7 +88,7 @@ let
default = name;
# We need to force this in specilisations, otherwise it'd be
# readOnly = true;
description = mdDoc ''
description = ''
The `name` in `nodes.<name>`; stable across `specialisations`.
'';
};
@ -98,7 +97,7 @@ let
type = types.int;
readOnly = true;
default = nodeNumbers.${config.virtualisation.test.nodeName};
description = mdDoc ''
description = ''
A unique number assigned for each node in `nodes`.
'';
};

View File

@ -5,7 +5,6 @@ let
literalExpression
literalMD
mapAttrs
mdDoc
mkDefault
mkIf
mkOption mkForce
@ -76,7 +75,7 @@ in
nodes = mkOption {
type = types.lazyAttrsOf config.node.type;
visible = "shallow";
description = mdDoc ''
description = ''
An attribute set of NixOS configuration modules.
The configurations are augmented by the [`defaults`](#test-opt-defaults) option.
@ -88,7 +87,7 @@ in
};
defaults = mkOption {
description = mdDoc ''
description = ''
NixOS configuration that is applied to all [{option}`nodes`](#test-opt-nodes).
'';
type = types.deferredModule;
@ -96,7 +95,7 @@ in
};
extraBaseModules = mkOption {
description = mdDoc ''
description = ''
NixOS configuration that, like [{option}`defaults`](#test-opt-defaults), is applied to all [{option}`nodes`](#test-opt-nodes) and can not be undone with [`specialisation.<name>.inheritParentConfig`](https://search.nixos.org/options?show=specialisation.%3Cname%3E.inheritParentConfig&from=0&size=50&sort=relevance&type=packages&query=specialisation).
'';
type = types.deferredModule;
@ -104,7 +103,7 @@ in
};
node.pkgs = mkOption {
description = mdDoc ''
description = ''
The Nixpkgs to use for the nodes.
Setting this will make the `nixpkgs.*` options read-only, to avoid mistakenly testing with a Nixpkgs configuration that diverges from regular use.
@ -117,7 +116,7 @@ in
};
node.pkgsReadOnly = mkOption {
description = mdDoc ''
description = ''
Whether to make the `nixpkgs.*` options read-only. This is only relevant when [`node.pkgs`](#test-opt-node.pkgs) is set.
Set this to `false` when any of the [`nodes`](#test-opt-nodes) needs to configure any of the `nixpkgs.*` options. This will slow down evaluation of your test a bit.
@ -130,7 +129,7 @@ in
node.specialArgs = mkOption {
type = types.lazyAttrsOf types.raw;
default = { };
description = mdDoc ''
description = ''
An attribute set of arbitrary values that will be made available as module arguments during the resolution of module `imports`.
Note that it is not possible to override these from within the NixOS configurations. If you argument is not relevant to `imports`, consider setting {option}`defaults._module.args.<name>` instead.
@ -139,7 +138,7 @@ in
nodesCompat = mkOption {
internal = true;
description = mdDoc ''
description = ''
Basically `_module.args.nodes`, but with backcompat and warnings added.
This will go away.

View File

@ -1,12 +1,12 @@
{ config, hostPkgs, lib, ... }:
let
inherit (lib) types mkOption mdDoc;
inherit (lib) types mkOption;
in
{
options = {
passthru = mkOption {
type = types.lazyAttrsOf types.raw;
description = mdDoc ''
description = ''
Attributes to add to the returned derivations,
which are not necessarily part of the build.
@ -18,7 +18,7 @@ in
rawTestDerivation = mkOption {
type = types.package;
description = mdDoc ''
description = ''
Unfiltered version of `test`, for troubleshooting the test framework and `testBuildFailure` in the test framework's test suite.
This is not intended for general use. Use `test` instead.
'';
@ -28,7 +28,7 @@ in
test = mkOption {
type = types.package;
# TODO: can the interactive driver be configured to access the network?
description = mdDoc ''
description = ''
Derivation that runs the test as its "build" process.
This implies that NixOS tests run isolated from the network, making them

View File

@ -1,13 +1,13 @@
testModuleArgs@{ config, lib, hostPkgs, nodes, moduleType, ... }:
let
inherit (lib) mkOption types mdDoc;
inherit (lib) mkOption types;
inherit (types) either str functionTo;
in
{
options = {
testScript = mkOption {
type = either str (functionTo str);
description = mdDoc ''
description = ''
A series of python declarations and statements that you write to perform
the test.
'';
@ -25,7 +25,7 @@ in
};
withoutTestScriptReferences = mkOption {
type = moduleType;
description = mdDoc ''
description = ''
A parallel universe where the testScript is invalid and has no references.
'';
internal = true;

View File

@ -342,7 +342,6 @@
./services/amqp/rabbitmq.nix
./services/audio/alsa.nix
./services/audio/botamusique.nix
./services/audio/castopod.nix
./services/audio/gmediarender.nix
./services/audio/gonic.nix
./services/audio/goxlr-utility.nix
@ -1303,6 +1302,7 @@
./services/web-apps/bookstack.nix
./services/web-apps/c2fmzq-server.nix
./services/web-apps/calibre-web.nix
./services/web-apps/castopod.nix
./services/web-apps/coder.nix
./services/web-apps/changedetection-io.nix
./services/web-apps/chatgpt-retrieval-plugin.nix

View File

@ -118,7 +118,7 @@ are already created.
before = "service1.service";
after = "postgresql.service";
serviceConfig.User = "postgres";
environment.PSQL = "psql --port=${toString services.postgresql.port}";
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
path = [ postgresql ];
script = ''
$PSQL service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
@ -139,7 +139,7 @@ are already created.
```nix
{
environment.PSQL = "psql --port=${toString services.postgresql.port}";
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
path = [ postgresql ];
systemd.services."service1".preStart = ''
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
@ -159,7 +159,7 @@ are already created.
before = "service1.service";
after = "postgresql.service";
serviceConfig.User = "service1";
environment.PSQL = "psql --port=${toString services.postgresql.port}";
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
path = [ postgresql ];
script = ''
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'

View File

@ -27,7 +27,7 @@ let
else toString value;
# The main PostgreSQL configuration file.
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings));
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") (filterAttrs (const (x: x != null)) cfg.settings)));
configFileCheck = pkgs.runCommand "postgresql-configfile-check" {} ''
${cfg.package}/bin/postgres -D${configFile} -C config_file >/dev/null
@ -41,6 +41,9 @@ in
{
imports = [
(mkRemovedOptionModule [ "services" "postgresql" "extraConfig" ] "Use services.postgresql.settings instead.")
(mkRenamedOptionModule [ "services" "postgresql" "logLinePrefix" ] [ "services" "postgresql" "settings" "log_line_prefix" ])
(mkRenamedOptionModule [ "services" "postgresql" "port" ] [ "services" "postgresql" "settings" "port" ])
];
###### interface
@ -57,14 +60,6 @@ in
example = "postgresql_15";
};
port = mkOption {
type = types.port;
default = 5432;
description = lib.mdDoc ''
The port on which PostgreSQL listens.
'';
};
checkConfig = mkOption {
type = types.bool;
default = true;
@ -352,17 +347,6 @@ in
'';
};
logLinePrefix = mkOption {
type = types.str;
default = "[%p] ";
example = "%m [%p] ";
description = lib.mdDoc ''
A printf-style string that is output at the beginning of each log line.
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
not include the timestamp, because journal has it anyway.
'';
};
extraPlugins = mkOption {
type = with types; coercedTo (listOf path) (path: _ignorePg: path) (functionTo (listOf path));
default = _: [];
@ -373,7 +357,38 @@ in
};
settings = mkOption {
type = with types; attrsOf (oneOf [ bool float int str ]);
type = with types; submodule {
freeformType = attrsOf (oneOf [ bool float int str ]);
options = {
shared_preload_libraries = mkOption {
type = nullOr (coercedTo (listOf str) (concatStringsSep ", ") str);
default = null;
example = literalExpression ''[ "auto_explain" "anon" ]'';
description = mdDoc ''
List of libraries to be preloaded.
'';
};
log_line_prefix = mkOption {
type = types.str;
default = "[%p] ";
example = "%m [%p] ";
description = lib.mdDoc ''
A printf-style string that is output at the beginning of each log line.
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
not include the timestamp, because journal has it anyway.
'';
};
port = mkOption {
type = types.port;
default = 5432;
description = lib.mdDoc ''
The port on which PostgreSQL listens.
'';
};
};
};
default = {};
description = lib.mdDoc ''
PostgreSQL configuration. Refer to
@ -439,9 +454,7 @@ in
hba_file = "${pkgs.writeText "pg_hba.conf" cfg.authentication}";
ident_file = "${pkgs.writeText "pg_ident.conf" cfg.identMap}";
log_destination = "stderr";
log_line_prefix = cfg.logLinePrefix;
listen_addresses = if cfg.enableTCPIP then "*" else "localhost";
port = cfg.port;
jit = mkDefault (if cfg.enableJIT then "on" else "off");
};
@ -524,7 +537,7 @@ in
# Wait for PostgreSQL to be ready to accept connections.
postStart =
''
PSQL="psql --port=${toString cfg.port}"
PSQL="psql --port=${toString cfg.settings.port}"
while ! $PSQL -d postgres -c "" 2> /dev/null; do
if ! kill -0 "$MAINPID"; then exit 1; fi

View File

@ -114,11 +114,11 @@ in
port = mkOption {
type = types.port;
default = if !usePostgresql then 3306 else pg.port;
default = if usePostgresql then pg.settings.port else 3306;
defaultText = literalExpression ''
if config.${opt.database.type} != "postgresql"
then 3306
else config.${options.services.postgresql.port}
else 5432
'';
description = mdDoc "Database host port.";
};

View File

@ -100,11 +100,11 @@ in
port = mkOption {
type = types.port;
default = if !usePostgresql then 3306 else pg.port;
default = if usePostgresql then pg.settings.port else 3306;
defaultText = literalExpression ''
if config.${opt.database.type} != "postgresql"
then 3306
else config.${options.services.postgresql.port}
else 5432
'';
description = lib.mdDoc "Database host port.";
};

View File

@ -20,7 +20,7 @@ in {
extraFlags = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Extra flags passed to llama-cpp-server.";
example = ["-c" "4096" "-ngl" "32" "--numa"];
example = ["-c" "4096" "-ngl" "32" "--numa" "numactl"];
default = [];
};

View File

@ -10,16 +10,22 @@ let
format = pkgs.formats.yaml {};
bundle = "${cfg.package}/share/redmine/bin/bundle";
databaseYml = pkgs.writeText "database.yml" ''
production:
adapter: ${cfg.database.type}
database: ${cfg.database.name}
host: ${if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host}
port: ${toString cfg.database.port}
username: ${cfg.database.user}
password: #dbpass#
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
'';
databaseSettings = {
production = {
adapter = cfg.database.type;
database = if cfg.database.type == "sqlite3" then "${cfg.stateDir}/database.sqlite3" else cfg.database.name;
} // optionalAttrs (cfg.database.type != "sqlite3") {
host = if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host;
port = cfg.database.port;
username = cfg.database.user;
} // optionalAttrs (cfg.database.type != "sqlite3" && cfg.database.passwordFile != null) {
password = "#dbpass#";
} // optionalAttrs (cfg.database.type == "mysql2" && cfg.database.socket != null) {
socket = cfg.database.socket;
};
};
databaseYml = format.generate "database.yml" databaseSettings;
configurationYml = format.generate "configuration.yml" cfg.settings;
additionalEnvironment = pkgs.writeText "additional_environment.rb" cfg.extraEnv;
@ -145,7 +151,7 @@ in
database = {
type = mkOption {
type = types.enum [ "mysql2" "postgresql" ];
type = types.enum [ "mysql2" "postgresql" "sqlite3" ];
example = "postgresql";
default = "mysql2";
description = lib.mdDoc "Database engine to use.";
@ -261,7 +267,7 @@ in
config = mkIf cfg.enable {
assertions = [
{ assertion = cfg.database.passwordFile != null || cfg.database.socket != null;
{ assertion = cfg.database.type != "sqlite3" -> cfg.database.passwordFile != null || cfg.database.socket != null;
message = "one of services.redmine.database.socket or services.redmine.database.passwordFile must be set";
}
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
@ -270,7 +276,7 @@ in
{ assertion = pgsqlLocal -> cfg.database.user == cfg.database.name;
message = "services.redmine.database.user and services.redmine.database.name must be the same when using a local postgresql database";
}
{ assertion = cfg.database.createLocally -> cfg.database.socket != null;
{ assertion = cfg.database.createLocally -> cfg.database.type != "sqlite3" && cfg.database.socket != null;
message = "services.redmine.database.socket must be set if services.redmine.database.createLocally is set to true";
}
{ assertion = cfg.database.createLocally -> cfg.database.host == "localhost";
@ -395,9 +401,13 @@ in
# handle database.passwordFile & permissions
DBPASS=${optionalString (cfg.database.passwordFile != null) "$(head -n1 ${cfg.database.passwordFile})"}
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
${optionalString ((cfg.database.type != "sqlite3") && (cfg.database.passwordFile != null)) ''
DBPASS="$(head -n1 ${cfg.database.passwordFile})"
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
''}
chmod 440 "${cfg.stateDir}/config/database.yml"

View File

@ -103,11 +103,11 @@ in
port = mkOption {
type = types.port;
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
default = if cfg.database.type == "mysql" then mysql.port else pgsql.services.port;
defaultText = literalExpression ''
if config.${opt.database.type} == "mysql"
then config.${options.services.mysql.port}
else config.${options.services.postgresql.port}
else config.services.postgresql.settings.port
'';
description = lib.mdDoc "Database host port.";
};

View File

@ -95,11 +95,11 @@ in
port = mkOption {
type = types.port;
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
default = if cfg.database.type == "mysql" then mysql.port else pgsql.settings.port;
defaultText = literalExpression ''
if config.${opt.database.type} == "mysql"
then config.${options.services.mysql.port}
else config.${options.services.postgresql.port}
else config.services.postgresql.settings.port
'';
description = lib.mdDoc "Database host port.";
};

View File

@ -4,6 +4,7 @@ Castopod is an open-source hosting platform made for podcasters who want to enga
## Quickstart {#module-services-castopod-quickstart}
Configure ACME (https://nixos.org/manual/nixos/unstable/#module-security-acme).
Use the following configuration to start a public instance of Castopod on `castopod.example.com` domain:
```nix

View File

@ -4,7 +4,6 @@ let
fpm = config.services.phpfpm.pools.castopod;
user = "castopod";
stateDirectory = "/var/lib/castopod";
# https://docs.castopod.org/getting-started/install.html#requirements
phpPackage = pkgs.php.withExtensions ({ enabled, all }: with all; [
@ -29,6 +28,15 @@ in
defaultText = lib.literalMD "pkgs.castopod";
description = lib.mdDoc "Which Castopod package to use.";
};
dataDir = lib.mkOption {
type = lib.types.path;
default = "/var/lib/castopod";
description = lib.mdDoc ''
The path where castopod stores all data. This path must be in sync
with the castopod package (where it is hardcoded during the build in
accordance with its own `dataDir` argument).
'';
};
database = {
createLocally = lib.mkOption {
type = lib.types.bool;
@ -59,6 +67,8 @@ in
description = lib.mdDoc ''
A file containing the password corresponding to
[](#opt-services.castopod.database.user).
This file is loaded using systemd LoadCredentials.
'';
};
};
@ -85,6 +95,8 @@ in
Environment file to inject e.g. secrets into the configuration.
See [](https://code.castopod.org/adaures/castopod/-/blob/main/.env.example)
for available environment variables.
This file is loaded using systemd LoadCredentials.
'';
};
configureNginx = lib.mkOption {
@ -111,6 +123,19 @@ in
Options for Castopod's PHP pool. See the documentation on `php-fpm.conf` for details on configuration directives.
'';
};
maxUploadSize = lib.mkOption {
type = lib.types.str;
default = "512M";
description = lib.mdDoc ''
Maximum supported size for a file upload in. Maximum HTTP body
size is set to this value for nginx and PHP (because castopod doesn't
support chunked uploads yet:
https://code.castopod.org/adaures/castopod/-/issues/330).
Note, that practical upload size limit is smaller. For example, with
512 MiB setting - around 500 MiB is possible.
'';
};
};
};
@ -120,13 +145,13 @@ in
sslEnabled = with config.services.nginx.virtualHosts.${cfg.localDomain}; addSSL || forceSSL || onlySSL || enableACME || useACMEHost != null;
baseURL = "http${lib.optionalString sslEnabled "s"}://${cfg.localDomain}";
in
lib.mapAttrs (name: lib.mkDefault) {
lib.mapAttrs (_: lib.mkDefault) {
"app.forceGlobalSecureRequests" = sslEnabled;
"app.baseURL" = baseURL;
"media.baseURL" = "/";
"media.baseURL" = baseURL;
"media.root" = "media";
"media.storage" = stateDirectory;
"media.storage" = cfg.dataDir;
"admin.gateway" = "admin";
"auth.gateway" = "auth";
@ -142,13 +167,13 @@ in
services.phpfpm.pools.castopod = {
inherit user;
group = config.services.nginx.group;
phpPackage = phpPackage;
inherit phpPackage;
phpOptions = ''
# https://code.castopod.org/adaures/castopod/-/blob/main/docker/production/app/uploads.ini
# https://code.castopod.org/adaures/castopod/-/blob/develop/docker/production/common/uploads.template.ini
file_uploads = On
memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 512M
upload_max_filesize = ${cfg.maxUploadSize}
post_max_size = ${cfg.maxUploadSize}
max_execution_time = 300
max_input_time = 300
'';
@ -165,45 +190,50 @@ in
path = [ pkgs.openssl phpPackage ];
script =
let
envFile = "${stateDirectory}/.env";
envFile = "${cfg.dataDir}/.env";
media = "${cfg.settings."media.storage"}/${cfg.settings."media.root"}";
in
''
mkdir -p ${stateDirectory}/writable/{cache,logs,session,temp,uploads}
mkdir -p ${cfg.dataDir}/writable/{cache,logs,session,temp,uploads}
if [ ! -d ${lib.escapeShellArg media} ]; then
cp --no-preserve=mode,ownership -r ${cfg.package}/share/castopod/public/media ${lib.escapeShellArg media}
fi
if [ ! -f ${stateDirectory}/salt ]; then
openssl rand -base64 33 > ${stateDirectory}/salt
if [ ! -f ${cfg.dataDir}/salt ]; then
openssl rand -base64 33 > ${cfg.dataDir}/salt
fi
cat <<'EOF' > ${envFile}
${lib.generators.toKeyValue { } cfg.settings}
EOF
echo "analytics.salt=$(cat ${stateDirectory}/salt)" >> ${envFile}
echo "analytics.salt=$(cat ${cfg.dataDir}/salt)" >> ${envFile}
${if (cfg.database.passwordFile != null) then ''
echo "database.default.password=$(cat ${lib.escapeShellArg cfg.database.passwordFile})" >> ${envFile}
echo "database.default.password=$(cat "$CREDENTIALS_DIRECTORY/dbpasswordfile)" >> ${envFile}
'' else ''
echo "database.default.password=" >> ${envFile}
''}
${lib.optionalString (cfg.environmentFile != null) ''
cat ${lib.escapeShellArg cfg.environmentFile}) >> ${envFile}
cat "$CREDENTIALS_DIRECTORY/envfile" >> ${envFile}
''}
php spark castopod:database-update
php ${cfg.package}/share/castopod/spark castopod:database-update
'';
serviceConfig = {
StateDirectory = "castopod";
LoadCredential = lib.optional (cfg.environmentFile != null)
"envfile:${cfg.environmentFile}"
++ (lib.optional (cfg.database.passwordFile != null)
"dbpasswordfile:${cfg.database.passwordFile}");
WorkingDirectory = "${cfg.package}/share/castopod";
Type = "oneshot";
RemainAfterExit = true;
User = user;
Group = config.services.nginx.group;
ReadWritePaths = cfg.dataDir;
};
};
@ -212,9 +242,7 @@ in
wantedBy = [ "multi-user.target" ];
path = [ phpPackage ];
script = ''
php public/index.php scheduled-activities
php public/index.php scheduled-websub-publish
php public/index.php scheduled-video-clips
php ${cfg.package}/share/castopod/spark tasks:run
'';
serviceConfig = {
StateDirectory = "castopod";
@ -222,6 +250,8 @@ in
Type = "oneshot";
User = user;
Group = config.services.nginx.group;
ReadWritePaths = cfg.dataDir;
LogLevelMax = "notice"; # otherwise periodic tasks flood the journal
};
};
@ -251,6 +281,7 @@ in
extraConfig = ''
try_files $uri $uri/ /index.php?$args;
index index.php index.html;
client_max_body_size ${cfg.maxUploadSize};
'';
locations."^~ /${cfg.settings."media.root"}/" = {
@ -278,7 +309,7 @@ in
};
};
users.users.${user} = lib.mapAttrs (name: lib.mkDefault) {
users.users.${user} = lib.mapAttrs (_: lib.mkDefault) {
description = "Castopod user";
isSystemUser = true;
group = config.services.nginx.group;

View File

@ -346,8 +346,8 @@ in
port = lib.mkOption {
type = types.port;
default = options.services.postgresql.port.default;
defaultText = lib.literalExpression "options.services.postgresql.port.default";
default = config.services.postgresql.settings.port;
defaultText = lib.literalExpression "config.services.postgresql.settings.port";
description = lib.mdDoc ''
The port of the database Invidious should use.

View File

@ -76,11 +76,11 @@ in
type = types.port;
default =
if cfg.database.type == "mysql" then config.services.mysql.port
else if cfg.database.type == "pgsql" then config.services.postgresql.port
else if cfg.database.type == "pgsql" then config.services.postgresql.settings.port
else 1521;
defaultText = literalExpression ''
if config.${opt.database.type} == "mysql" then config.${options.services.mysql.port}
else if config.${opt.database.type} == "pgsql" then config.${options.services.postgresql.port}
else if config.${opt.database.type} == "pgsql" then config.services.postgresql.settings.port
else 1521
'';
description = lib.mdDoc "Database host port.";

View File

@ -4,74 +4,218 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
meta = with lib.maintainers; {
maintainers = [ alexoundos misuzu ];
};
nodes.castopod = { nodes, ... }: {
# otherwise 500 MiB file upload fails!
virtualisation.diskSize = 512 + 3 * 512;
networking.firewall.allowedTCPPorts = [ 80 ];
networking.extraHosts = ''
127.0.0.1 castopod.example.com
'';
networking.extraHosts =
lib.strings.concatStringsSep "\n"
(lib.attrsets.mapAttrsToList
(name: _: "127.0.0.1 ${name}")
nodes.castopod.services.nginx.virtualHosts);
services.castopod = {
enable = true;
database.createLocally = true;
localDomain = "castopod.example.com";
maxUploadSize = "512M";
};
environment.systemPackages =
let
username = "admin";
email = "admin@castood.example.com";
password = "v82HmEp5";
testRunner = pkgs.writers.writePython3Bin "test-runner"
{
libraries = [ pkgs.python3Packages.selenium ];
flakeIgnore = [
"E501"
];
} ''
from selenium.webdriver.common.by import By
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument('--headless')
driver = Firefox(options=options)
try:
driver.implicitly_wait(20)
driver.get('http://castopod.example.com/cp-install')
wait = WebDriverWait(driver, 10)
wait.until(EC.title_contains("installer"))
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
'${username}'
)
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
'${email}'
)
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
'${password}'
)
driver.find_element(By.XPATH, "//button[contains(., 'Finish install')]").click()
wait.until(EC.title_contains("Auth"))
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
'${email}'
)
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
'${password}'
)
driver.find_element(By.XPATH, "//button[contains(., 'Login')]").click()
wait.until(EC.title_contains("Admin dashboard"))
finally:
driver.close()
driver.quit()
'';
in
[ pkgs.firefox-unwrapped pkgs.geckodriver testRunner ];
};
nodes.client = { nodes, pkgs, lib, ... }:
let
domain = nodes.castopod.services.castopod.localDomain;
getIP = node:
(builtins.head node.networking.interfaces.eth1.ipv4.addresses).address;
targetPodcastSize = 500 * 1024 * 1024;
lameMp3Bitrate = 348300;
lameMp3FileAdjust = -800;
targetPodcastDuration = toString
((targetPodcastSize + lameMp3FileAdjust) / (lameMp3Bitrate / 8));
bannerWidth = 3000;
banner = pkgs.runCommand "gen-castopod-cover.jpg" { } ''
${pkgs.imagemagick}/bin/magick `
`-background green -bordercolor white -gravity northwest xc:black `
`-duplicate 99 `
`-seed 1 -resize "%[fx:rand()*72+24]" `
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 16x36 `
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "150x50!" `
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
`-resize ${toString bannerWidth} -quality 1 $out
'';
coverWidth = toString 3000;
cover = pkgs.runCommand "gen-castopod-banner.jpg" { } ''
${pkgs.imagemagick}/bin/magick `
`-background white -bordercolor white -gravity northwest xc:black `
`-duplicate 99 `
`-seed 1 -resize "%[fx:rand()*72+24]" `
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 36x36 `
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "144x144!" `
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
`-resize ${coverWidth} -quality 1 $out
'';
in
{
networking.extraHosts =
lib.strings.concatStringsSep "\n"
(lib.attrsets.mapAttrsToList
(name: _: "${getIP nodes.castopod} ${name}")
nodes.castopod.services.nginx.virtualHosts);
environment.systemPackages =
let
username = "admin";
email = "admin@${domain}";
password = "Abcd1234";
podcastTitle = "Some Title";
episodeTitle = "Episode Title";
browser-test = pkgs.writers.writePython3Bin "browser-test"
{
libraries = [ pkgs.python3Packages.selenium ];
flakeIgnore = [ "E124" "E501" ];
} ''
from selenium.webdriver.common.by import By
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from subprocess import STDOUT
import logging
selenium_logger = logging.getLogger("selenium")
selenium_logger.setLevel(logging.DEBUG)
selenium_logger.addHandler(logging.StreamHandler())
options = Options()
options.add_argument('--headless')
service = Service(log_output=STDOUT)
driver = Firefox(options=options, service=service)
driver = Firefox(options=options)
driver.implicitly_wait(30)
# install ##########################################################
driver.get('http://${domain}/cp-install')
wait = WebDriverWait(driver, 20)
wait.until(EC.title_contains("installer"))
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
'${username}'
)
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
'${email}'
)
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
'${password}'
)
driver.find_element(By.XPATH,
"//button[contains(., 'Finish install')]"
).click()
wait.until(EC.title_contains("Auth"))
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
'${email}'
)
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
'${password}'
)
driver.find_element(By.XPATH,
"//button[contains(., 'Login')]"
).click()
wait.until(EC.title_contains("Admin dashboard"))
# create podcast ###################################################
driver.get('http://${domain}/admin/podcasts/new')
wait.until(EC.title_contains("Create podcast"))
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
'${cover}'
)
driver.find_element(By.CSS_SELECTOR, '#banner').send_keys(
'${banner}'
)
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
'${podcastTitle}'
)
driver.find_element(By.CSS_SELECTOR, '#handle').send_keys(
'some_handle'
)
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
'Some description'
)
driver.find_element(By.CSS_SELECTOR, '#owner_name').send_keys(
'Owner Name'
)
driver.find_element(By.CSS_SELECTOR, '#owner_email').send_keys(
'owner@email.xyz'
)
driver.find_element(By.XPATH,
"//button[contains(., 'Create podcast')]"
).click()
wait.until(EC.title_contains("${podcastTitle}"))
driver.find_element(By.XPATH,
"//span[contains(., 'Add an episode')]"
).click()
wait.until(EC.title_contains("Add an episode"))
# upload podcast ###################################################
driver.find_element(By.CSS_SELECTOR, '#audio_file').send_keys(
'/tmp/podcast.mp3'
)
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
'${cover}'
)
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
'Episode description'
)
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
'${episodeTitle}'
)
driver.find_element(By.XPATH,
"//button[contains(., 'Create episode')]"
).click()
wait.until(EC.title_contains("${episodeTitle}"))
driver.close()
driver.quit()
'';
in
[
pkgs.firefox-unwrapped
pkgs.geckodriver
browser-test
(pkgs.writeShellApplication {
name = "build-mp3";
runtimeInputs = with pkgs; [ sox lame ];
text = ''
out=/tmp/podcast.mp3
sox -n -r 48000 -t wav - synth ${targetPodcastDuration} sine 440 `
`| lame --noreplaygain -cbr -q 9 -b 320 - $out
FILESIZE="$(stat -c%s $out)"
[ "$FILESIZE" -gt 0 ]
[ "$FILESIZE" -le "${toString targetPodcastSize}" ]
'';
})
];
};
testScript = ''
start_all()
castopod.wait_for_unit("castopod-setup.service")
@ -79,9 +223,11 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
castopod.wait_for_unit("nginx.service")
castopod.wait_for_open_port(80)
castopod.wait_until_succeeds("curl -sS -f http://castopod.example.com")
castopod.succeed("curl -s http://localhost/cp-install | grep 'Create your Super Admin account' > /dev/null")
with subtest("Create superadmin and log in"):
castopod.succeed("PYTHONUNBUFFERED=1 systemd-cat -t test-runner test-runner")
client.succeed("build-mp3")
with subtest("Create superadmin, log in, create and upload a podcast"):
client.succeed(\
"PYTHONUNBUFFERED=1 systemd-cat -t browser-test browser-test")
'';
})

View File

@ -18,7 +18,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
host invidious invidious samenet scram-sha-256
'';
};
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
};
machine = { config, lib, pkgs, ... }: {
services.invidious = {

View File

@ -76,7 +76,7 @@ in
systemd.services.postgresql.postStart = lib.mkAfter ''
$PSQL -tAd miniflux -c 'CREATE EXTENSION hstore;'
'';
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
};
externalDb = { ... }: {
security.apparmor.enable = true;

View File

@ -7,7 +7,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
services.postgresql = {
enable = true;
extraPlugins = ps: [ ps.anonymizer ];
settings.shared_preload_libraries = "anon";
settings.shared_preload_libraries = [ "anon" ];
};
};

View File

@ -21,7 +21,7 @@ in
pgmanage = {
enable = true;
connections = {
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.port} dbname=postgres";
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.settings.port} dbname=postgres";
};
};
};

View File

@ -33,7 +33,7 @@ in
extraHosts = hosts;
firewall.allowedTCPPorts = [
config.services.redis.servers.mastodon.port
config.services.postgresql.port
config.services.postgresql.settings.port
];
};

View File

@ -3,7 +3,7 @@
, ffmpeg-headless
, lib
, nixosTests
, stateDirectory ? "/var/lib/castopod"
, dataDir ? "/var/lib/castopod"
}:
stdenv.mkDerivation {
pname = "castopod";
@ -20,13 +20,16 @@ stdenv.mkDerivation {
postPatch = ''
# not configurable at runtime unfortunately:
substituteInPlace app/Config/Paths.php \
--replace "__DIR__ . '/../../writable'" "'${stateDirectory}/writable'"
--replace "__DIR__ . '/../../writable'" "'${dataDir}/writable'"
# configuration file must be writable, place it to ${stateDirectory}
substituteInPlace modules/Admin/Controllers/DashboardController.php \
--replace "disk_total_space('./')" "disk_total_space('${dataDir}')"
# configuration file must be writable, place it to ${dataDir}
substituteInPlace modules/Install/Controllers/InstallController.php \
--replace "ROOTPATH" "'${stateDirectory}/'"
--replace "ROOTPATH" "'${dataDir}/'"
substituteInPlace public/index.php spark \
--replace "DotEnv(ROOTPATH)" "DotEnv('${stateDirectory}')"
--replace "DotEnv(ROOTPATH)" "DotEnv('${dataDir}')"
# ffmpeg is required for Video Clips feature
substituteInPlace modules/MediaClipper/VideoClipper.php \

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "ergo";
version = "5.0.20";
version = "5.0.21";
src = fetchurl {
url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar";
sha256 = "sha256-wC3KnuKHsUw1jt7EXVAgPhB6Sk8630sVaM3yn6CGPqs=";
sha256 = "sha256-WtBsChSHnYbRBojxRUGdMnXlG+45hp4ZSd8GLx5n/88=";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -17081,5 +17081,17 @@ final: prev:
meta.homepage = "https://github.com/codethread/qmk.nvim/";
};
vim-godot = buildVimPlugin {
pname = "vim-godot";
version = "2024-02-18";
src = fetchFromGitHub {
owner = "habamax";
repo = "vim-godot";
rev = "f9c0b36b299efcc4aa4cb119a2be36a83fe10388";
sha256 = "sha256-HKp3CQwAOs+7TL8MjWZ2EHLHMZ3Ss7AckAZ5eOjTDEg=";
};
meta.homepage = "https://github.com/habamax/vim-godot/";
};
}

View File

@ -1100,6 +1100,7 @@ https://github.com/junegunn/vim-github-dashboard/,,
https://github.com/tikhomirov/vim-glsl/,,
https://github.com/jamessan/vim-gnupg/,,
https://github.com/fatih/vim-go/,,
https://github.com/habamax/vim-godot/,HEAD,
https://github.com/rhysd/vim-grammarous/,,
https://github.com/jparise/vim-graphql/,,
https://github.com/mhinz/vim-grepper/,,

View File

@ -1,39 +1,49 @@
{ stdenv
, lib
{ lib
, stdenv
, fetchgit
, ninja
, pkg-config
, ed
, wrapGAppsHook
, webkitgtk
, libxml2
, glib
, glib-networking
, gettext
}:
stdenv.mkDerivation rec {
pname = "badwolf";
version = "1.2.2";
version = "1.3.0";
src = fetchgit {
url = "git://hacktivis.me/git/badwolf.git";
url = "https://hacktivis.me/git/badwolf.git";
rev = "v${version}";
hash = "sha256-HfAsq6z+1kqMAsNxJjWJx9nd2cbv0XN4KRS8cYuhOsQ=";
hash = "sha256-feWSxK9TJ5MWxUKutuTcdmMk5IbLjNseUAvfm20kQ1U=";
};
preConfigure = ''
export PREFIX=$out
'';
# configure script not accepting '--prefix'
prefixKey = "PREFIX=";
nativeBuildInputs = [ pkg-config wrapGAppsHook ];
nativeBuildInputs = [
ninja
pkg-config
ed
wrapGAppsHook
];
buildInputs = [ webkitgtk libxml2 gettext glib glib-networking ];
buildInputs = [
webkitgtk
libxml2
gettext
glib-networking
];
meta = with lib; {
description = "Minimalist and privacy-oriented WebKitGTK+ browser";
mainProgram = "badwolf";
homepage = "https://hacktivis.me/projects/badwolf";
license = licenses.bsd3;
license = with licenses; [ bsd3 cc-by-sa-40 ];
platforms = platforms.linux;
maintainers = with maintainers; [ laalsaas ];
maintainers = with maintainers; [ laalsaas aleksana ];
};
}

View File

@ -12,13 +12,13 @@
stdenv.mkDerivation {
pname = "litebrowser";
version = "unstable-2022-10-31";
version = "unstable-2024-02-25";
src = fetchFromGitHub {
owner = "litehtml";
repo = "litebrowser-linux";
rev = "4654f8fb2d5e2deba7ac6223b6639341bd3b7eba";
hash = "sha256-SvW1AOxLBLKqa+/2u2Zn+/t33ZzQHmqlcLRl6z0rK9U=";
rev = "8130cf50af90e07d201d43b934b5a57f7ed4e68d";
hash = "sha256-L/pd4VypDfjLKfh+HLpc4um+POWGzGa4OOttudwJxyk=";
fetchSubmodules = true; # litehtml submodule
};
@ -46,6 +46,7 @@ stdenv.mkDerivation {
'';
meta = with lib; {
broken = stdenv.cc.isClang; # https://github.com/litehtml/litebrowser-linux/issues/19
description = "A simple browser based on the litehtml engine";
mainProgram = "litebrowser";
homepage = "https://github.com/litehtml/litebrowser-linux";

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "cilium-cli";
version = "0.16.3";
version = "0.16.4";
src = fetchFromGitHub {
owner = "cilium";
repo = pname;
rev = "v${version}";
hash = "sha256-WD0CUPl9Qkalhog2IbefMkiLiVZFW59X21sYH4hUqZs=";
hash = "sha256-fhTjYhRCtJu18AGYF6hiTdRMEdlNO+DmDwh2hZBXzPk=";
};
vendorHash = null;
@ -37,11 +37,12 @@ buildGoModule rec {
--zsh <($out/bin/cilium completion zsh)
'';
meta = with lib; {
meta = {
changelog = "https://github.com/cilium/cilium-cli/releases/tag/v${version}";
description = "CLI to install, manage & troubleshoot Kubernetes clusters running Cilium";
license = licenses.asl20;
license = lib.licenses.asl20;
homepage = "https://www.cilium.io/";
maintainers = with maintainers; [ humancalico bryanasdev000 qjoly ];
maintainers = with lib.maintainers; [ bryanasdev000 humancalico qjoly superherointj ];
mainProgram = "cilium";
};
}

View File

@ -12,16 +12,16 @@
buildGoModule rec {
pname = "kubebuilder";
version = "3.14.0";
version = "3.14.1";
src = fetchFromGitHub {
owner = "kubernetes-sigs";
repo = "kubebuilder";
rev = "v${version}";
hash = "sha256-em+I2YICcqljaaNQ+zOAnOZ552elmV6Ywbfla8buwaY=";
hash = "sha256-TMKixwZonYGPXIqOtgnuilbH7BaIRyqJU6uKtp9ANKM=";
};
vendorHash = "sha256-iBwhpVs9u5AQAvmzb69SaewdYHmmaV19Bstd0Tux9CA=";
vendorHash = "sha256-Hl01dFSffYv59zensKTjXWLXxwfkQYAO5xadlc5iBJY=";
subPackages = ["cmd"];

View File

@ -6,7 +6,7 @@
python3.pkgs.buildPythonApplication rec {
pname = "flexget";
version = "3.11.25";
version = "3.11.27";
pyproject = true;
# Fetch from GitHub in order to use `requirements.in`
@ -14,7 +14,7 @@ python3.pkgs.buildPythonApplication rec {
owner = "Flexget";
repo = "Flexget";
rev = "refs/tags/v${version}";
hash = "sha256-bvCogSBB990LIkk273EMTlqNN303JKr5WCI8g7hLU9Q=";
hash = "sha256-0ENBUOH+/pe4OsVQ6cu1xLTPPHtUMNARQGVyxOk60X0=";
};
postPatch = ''

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "signalbackup-tools";
version = "20240320";
version = "20240328-1";
src = fetchFromGitHub {
owner = "bepaald";
repo = pname;
rev = version;
hash = "sha256-2H+VGVPnSHdsx62hPygWc5uz5vH6DS7AfmYSlBZuB4A=";
hash = "sha256-oEwWbTs8Orpo+qRCKVvkeJYEob8O/qkKmv/iA5JUpfQ=";
};
postPatch = ''

View File

@ -45,14 +45,14 @@ let
pname = "slack";
x86_64-darwin-version = "4.36.140";
x86_64-darwin-sha256 = "0w1fxza3aglh7513znv190gsha12rk7k1ybdp4ml2pffwmm8diad";
x86_64-darwin-version = "4.37.94";
x86_64-darwin-sha256 = "01v7v977fq8mfsl0lipdc7ig55p2sknxzr1jmh8qxiq4f4y0rj5g";
x86_64-linux-version = "4.36.140";
x86_64-linux-sha256 = "0zahhhpcb1dxdhfmam32iqr5w3pspzbmcdv53ciqfnbkmwzkc3xr";
x86_64-linux-version = "4.37.94";
x86_64-linux-sha256 = "1f1spl767ldrarvpxrayry2d0nyr22b8xacxl4g1r8raryvnyz0x";
aarch64-darwin-version = "4.36.140";
aarch64-darwin-sha256 = "118mzkpk431dcm61gkbj5m4sdxkwnk6fvmxg9f96xiv6n22n7pnx";
aarch64-darwin-version = "4.37.94";
aarch64-darwin-sha256 = "0gh45gvlbjzxh0fn24z15glxqih5lggam8w6kpawsxgivkw6rjcc";
version = {
x86_64-darwin = x86_64-darwin-version;

View File

@ -1,7 +1,9 @@
{ mkDerivation, lib, fetchFromGitHub, cmake, boost179, ceres-solver, eigen,
freeimage, glog, libGLU, glew, qtbase,
autoAddDriverRunpath,
config,
cudaSupport ? config.cudaSupport, cudaPackages }:
cudaSupport ? config.cudaSupport, cudaPackages
}:
assert cudaSupport -> cudaPackages != { };
@ -37,7 +39,7 @@ mkDerivation rec {
nativeBuildInputs = [
cmake
] ++ lib.optionals cudaSupport [
cudaPackages.autoAddDriverRunpath
autoAddDriverRunpath
];
meta = with lib; {

View File

@ -1,107 +0,0 @@
source 'https://rubygems.org'
ruby '>= 2.5.0', '< 3.2.0'
gem 'bundler', '>= 1.12.0'
gem 'rails', '6.1.7.6'
gem 'globalid', '~> 0.4.2' if Gem.ruby_version < Gem::Version.new('2.6.0')
gem 'rouge', '~> 3.28.0'
gem 'request_store', '~> 1.5.0'
gem 'mini_mime', '~> 1.1.0'
gem "actionpack-xml_parser"
gem 'roadie-rails', (Gem.ruby_version < Gem::Version.new('2.6.0') ? '~> 2.2.0' : '~> 3.0.0')
gem 'marcel'
gem "mail", "~> 2.7.1"
gem 'csv', '~> 3.2.0'
gem 'nokogiri', (if Gem.ruby_version < Gem::Version.new('2.6.0')
'~> 1.12.5'
elsif Gem.ruby_version < Gem::Version.new('2.7.0')
'~> 1.13.10'
else
'~> 1.15.2'
end)
gem "rexml", require: false if Gem.ruby_version >= Gem::Version.new('3.0')
gem 'i18n', '~> 1.10.0'
gem 'rbpdf', '~> 1.21.3'
gem 'addressable'
gem 'rubyzip', '~> 2.3.0'
gem 'net-smtp', '~> 0.3.0'
gem 'net-imap', '~> 0.2.2'
gem 'net-pop', '~> 0.1.1'
# Rails 6.1.6.1 does not work with Pysch 3.0.2, which is installed by default with Ruby 2.5. See https://github.com/rails/rails/issues/45590
gem 'psych', '>= 3.1.0' if Gem.ruby_version < Gem::Version.new('2.6.0')
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
# TOTP-based 2-factor authentication
gem 'rotp', '>= 5.0.0'
gem 'rqrcode'
# Optional gem for LDAP authentication
group :ldap do
gem 'net-ldap', '~> 0.17.0'
end
# Optional gem for exporting the gantt to a PNG file
group :minimagick do
gem 'mini_magick', '~> 4.11.0'
end
# Optional Markdown support, not for JRuby
# ToDo: Remove common_mark group when common_mark is decoupled from markdown. See defect (#36892) for more details.
gem 'redcarpet', '~> 3.5.1', groups: [:markdown, :common_mark]
# Optional CommonMark support, not for JRuby
group :common_mark do
gem "html-pipeline", "~> 2.13.2"
gem "commonmarker", (Gem.ruby_version < Gem::Version.new('2.6.0') ? '0.21.0' : '~> 0.23.8')
gem "sanitize", "~> 6.0"
gem 'deckar01-task_list', '2.3.2'
end
# webrick
gem 'webrick'
# Include database gems for the database adapters NixOS supports
require 'erb'
require 'yaml'
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
gem "pg", "~> 1.4.2", :platforms => [:mri, :mingw, :x64_mingw]
group :development do
gem 'listen', '~> 3.3'
gem "yard"
end
group :test do
gem "rails-dom-testing"
gem 'mocha', '>= 2.0.1'
gem 'simplecov', '~> 0.21.2', :require => false
gem "ffi", platforms: [:mri, :mingw, :x64_mingw, :mswin]
# For running system tests
gem 'puma', (Gem.ruby_version < Gem::Version.new('2.7') ? '< 6.0.0' : '>= 0')
gem 'capybara', (if Gem.ruby_version < Gem::Version.new('2.6')
'~> 3.35.3'
elsif Gem.ruby_version < Gem::Version.new('2.7')
'~> 3.36.0'
else
'~> 3.38.0'
end)
gem "selenium-webdriver", "~> 3.142.7"
gem 'webdrivers', '4.6.1', require: false
# RuboCop
gem 'rubocop', '~> 1.26.0'
gem 'rubocop-performance', '~> 1.13.0'
gem 'rubocop-rails', '~> 2.14.0'
end
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
if File.exist?(local_gemfile)
eval_gemfile local_gemfile
end
# Load plugins' Gemfiles
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
eval_gemfile file
end

View File

@ -10,11 +10,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "tart";
version = "2.6.0";
version = "2.7.2";
src = fetchurl {
url = "https://github.com/cirruslabs/tart/releases/download/${finalAttrs.version}/tart-arm64.tar.gz";
hash = "sha256-QtVqgmjYpLAhFibW1DIVWNYiOjHB1X/YY6zRVB+1soA=";
hash = "sha256-Z/LZ8g1/FYT7Jh943tFxN8L5HeNf0CVz1VEJj+2fCd8=";
};
sourceRoot = ".";

View File

@ -5,27 +5,27 @@
buildGoModule rec {
pname = "bee";
version = "1.18.2";
version = "2.0.0";
src = fetchFromGitHub {
owner = "ethersphere";
repo = "bee";
rev = "v${version}";
sha256 = "sha256-LUOKF1073GmQWG2q4w0cTErSHw7ok5N6PQZ45xpjYx4=";
sha256 = "sha256-gZDmFufk/zBftQe7Ju4rDpZqw0hm2nf9YQg1Oa8540s=";
};
vendorHash = "sha256-UdsF/otjXqS1NY3PkCimRiD93hGntHG3Xhw6avFtHog=";
vendorHash = "sha256-GpazHMQ8xZ6P7mADvsG3bXxDxEWnCJRIsBwDnL/McZA=";
subPackages = [ "cmd/bee" ];
ldflags = [
"-s"
"-w"
"-X github.com/ethersphere/bee.version=${version}"
"-X github.com/ethersphere/bee/pkg/api.Version=5.2.0"
"-X github.com/ethersphere/bee/pkg/api.DebugVersion=4.1.0"
"-X github.com/ethersphere/bee/pkg/p2p/libp2p.reachabilityOverridePublic=false"
"-X github.com/ethersphere/bee/pkg/postage/listener.batchFactorOverridePublic=5"
"-X github.com/ethersphere/bee/v2.version=${version}"
"-X github.com/ethersphere/bee/v2/pkg/api.Version=5.2.0"
"-X github.com/ethersphere/bee/v2/pkg/api.DebugVersion=4.1.1"
"-X github.com/ethersphere/bee/v2/pkg/p2p/libp2p.reachabilityOverridePublic=false"
"-X github.com/ethersphere/bee/v2/pkg/postage/listener.batchFactorOverridePublic=5"
];
CGO_ENABLED = 0;

View File

@ -9,16 +9,16 @@
rustPlatform.buildRustPackage rec {
pname = "boxbuddy";
version = "2.1.5";
version = "2.2.0";
src = fetchFromGitHub {
owner = "Dvlv";
repo = "BoxBuddyRS";
rev = version;
hash = "sha256-XMLgUYOv2ObHqYxqPch5i0Q1/BvfDuC1Lti5FYAVmnk=";
hash = "sha256-Fb3Df+P2ovSVQhtDxhed/hH06UKnJY/iugt3Pi9/Jp0=";
};
cargoHash = "sha256-zbhdGpF3TonGlvRXCWF00PhIc0k1ZO2xIMXuwYD90mY=";
cargoHash = "sha256-dmBQdE4rsL8ygXOGupjtZrWuXjVAy5m1p/xJlUdUwkY=";
# The software assumes it is installed either in flatpak or in the home directory
# so the xdg data path needs to be patched here

View File

@ -0,0 +1,25 @@
{ buildGoModule, fetchFromSourcehut, lib }:
buildGoModule rec {
pname = "go-bare";
version = "0-unstable-2021-04-06";
src = fetchFromSourcehut {
owner = "~sircmpwn";
repo = "go-bare";
rev = "ab86bc2846d997bc8760fdb0d06d4a55e746b1db";
hash = "sha256-SKTYDKidB1Ia3Jg4EBg5rPAtqlXAa19RY5qieS82A34=";
};
vendorHash = "sha256-OhJb/q1XJ/U/AvCcCXw2Ll86UKlkHGuURHS5J6aXNTs=";
subPackages = [ "cmd/gen" ];
meta = with lib; {
description = "An implementation of the BARE message format for Go";
mainProgram = "gen";
homepage = "https://git.sr.ht/~sircmpwn/go-bare";
license = licenses.asl20;
maintainers = with maintainers; [ poptart ];
};
}

View File

@ -5,11 +5,11 @@
stdenvNoCC.mkDerivation rec {
pname = "lxgw-neoxihei";
version = "1.120.1";
version = "1.120.2";
src = fetchurl {
url = "https://github.com/lxgw/LxgwNeoXiHei/releases/download/v${version}/LXGWNeoXiHei.ttf";
hash = "sha256-shzJ5y2mjvodtSHct9gm+09CludxUpR38qi9zvewjaQ=";
hash = "sha256-RN0OmNS3aSRMK19nNiqXYJ4PIAQh6u5W/+L8DCeqMcE=";
};
dontUnpack = true;

View File

@ -5,12 +5,12 @@
appimageTools.wrapType2 rec {
pname = "miru";
version = "5.0.0";
version = "5.0.3";
src = fetchurl {
url = "https://github.com/ThaUnknown/miru/releases/download/v${version}/linux-Miru-${version}.AppImage";
name = "${pname}-${version}.AppImage";
sha256 = "sha256-Gp3pP973+peSr0pfUDqKQWZFiY4jdOp4tsn1336wcwY=";
sha256 = "sha256-vKV1Scd+YiJMIV8EWx4udoOxTXW9NA7k/CxRVNRqrjk=";
};
extraInstallCommands =
@ -29,7 +29,7 @@ appimageTools.wrapType2 rec {
meta = with lib; {
description = "Stream anime torrents, real-time with no waiting for downloads";
homepage = "https://github.com/ThaUnknown/miru#readme";
homepage = "https://miru.watch";
license = licenses.gpl3Plus;
maintainers = [ maintainers.d4ilyrun ];
mainProgram = "miru";

View File

@ -0,0 +1,35 @@
{ lib
, stdenvNoCC
, fetchFromGitHub
}:
stdenvNoCC.mkDerivation rec {
pname = "nuclei-templates";
version = "9.8.0";
src = fetchFromGitHub {
owner = "projectdiscovery";
repo = "nuclei-templates";
rev = "refs/tags/v${version}";
hash = "sha256-1aLy8wNWMFouZRjhCSiwSq1uo20C9wN7LPxyBqK6K0k=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/share/nuclei-templates
cp -R cloud code config dns file headless helpers http javascript network ssl \
$out/share/nuclei-templates/
runHook postInstall
'';
meta = with lib; {
description = "Templates for the nuclei engine to find security vulnerabilities";
homepage = "https://github.com/projectdiscovery/nuclei-templates";
changelog = "https://github.com/projectdiscovery/nuclei-templates/releases/tag/v${version}";
license = licenses.mit;
maintainers = with maintainers; [ fab ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,101 @@
source 'https://rubygems.org'
ruby '>= 2.7.0', '< 3.3.0'
gem 'rails', '6.1.7.7'
gem 'rouge', '~> 4.2.0'
gem 'request_store', '~> 1.5.0'
gem 'mini_mime', '~> 1.1.0'
gem "actionpack-xml_parser"
gem 'roadie-rails', '~> 3.1.0'
gem 'marcel'
gem 'mail', '~> 2.8.1'
gem 'nokogiri', '~> 1.15.2'
gem 'i18n', '~> 1.14.1'
gem 'rbpdf', '~> 1.21.3'
gem 'addressable'
gem 'rubyzip', '~> 2.3.0'
# Ruby Standard Gems
gem 'csv', '~> 3.2.6'
gem 'net-imap', '~> 0.3.4'
gem 'net-pop', '~> 0.1.2'
gem 'net-smtp', '~> 0.3.3'
gem 'rexml', require: false if Gem.ruby_version >= Gem::Version.new('3.0')
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
# TOTP-based 2-factor authentication
gem 'rotp', '>= 5.0.0'
gem 'rqrcode'
# HTML pipeline and sanitization
gem "html-pipeline", "~> 2.13.2"
gem "sanitize", "~> 6.0"
# Optional gem for LDAP authentication
group :ldap do
gem 'net-ldap', '~> 0.17.0'
end
# Optional gem for exporting the gantt to a PNG file
group :minimagick do
gem 'mini_magick', '~> 4.12.0'
end
# Optional Markdown support
group :markdown do
gem 'redcarpet', '~> 3.6.0'
end
# Optional CommonMark support, not for JRuby
group :common_mark do
gem "commonmarker", '~> 0.23.8'
gem 'deckar01-task_list', '2.3.2'
end
# Include database gems for the database adapters NixOS supports
require 'erb'
require 'yaml'
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
gem "with_advisory_lock"
gem 'pg', '~> 1.5.3', :platforms => [:mri, :mingw, :x64_mingw]
gem 'sqlite3', '~> 1.6.0', :platforms => [:mri, :mingw, :x64_mingw]
group :development do
gem 'listen', '~> 3.3'
gem "yard"
end
group :test do
gem "rails-dom-testing"
gem 'mocha', '>= 2.0.1'
gem 'simplecov', '~> 0.22.0', :require => false
gem "ffi", platforms: [:mri, :mingw, :x64_mingw, :mswin]
# For running system tests
gem 'puma'
gem "capybara", ">= 3.39"
if Gem.ruby_version < Gem::Version.new('3.0')
gem "selenium-webdriver", "<= 4.9.0"
gem "webdrivers", require: false
else
gem "selenium-webdriver", ">= 4.11.0"
end
# RuboCop
gem 'rubocop', '~> 1.57.0', require: false
gem 'rubocop-performance', '~> 1.19.0', require: false
gem 'rubocop-rails', '~> 2.22.1', require: false
end
gem "webrick"
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
if File.exist?(local_gemfile)
eval_gemfile local_gemfile
end
# Load plugins' Gemfiles
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
eval_gemfile file
end

View File

@ -1,28 +1,28 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (6.1.7.6)
actionpack (= 6.1.7.6)
activesupport (= 6.1.7.6)
actioncable (6.1.7.7)
actionpack (= 6.1.7.7)
activesupport (= 6.1.7.7)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.1.7.6)
actionpack (= 6.1.7.6)
activejob (= 6.1.7.6)
activerecord (= 6.1.7.6)
activestorage (= 6.1.7.6)
activesupport (= 6.1.7.6)
actionmailbox (6.1.7.7)
actionpack (= 6.1.7.7)
activejob (= 6.1.7.7)
activerecord (= 6.1.7.7)
activestorage (= 6.1.7.7)
activesupport (= 6.1.7.7)
mail (>= 2.7.1)
actionmailer (6.1.7.6)
actionpack (= 6.1.7.6)
actionview (= 6.1.7.6)
activejob (= 6.1.7.6)
activesupport (= 6.1.7.6)
actionmailer (6.1.7.7)
actionpack (= 6.1.7.7)
actionview (= 6.1.7.7)
activejob (= 6.1.7.7)
activesupport (= 6.1.7.7)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (6.1.7.6)
actionview (= 6.1.7.6)
activesupport (= 6.1.7.6)
actionpack (6.1.7.7)
actionview (= 6.1.7.7)
activesupport (= 6.1.7.7)
rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
@ -30,63 +30,63 @@ GEM
actionpack-xml_parser (2.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
actiontext (6.1.7.6)
actionpack (= 6.1.7.6)
activerecord (= 6.1.7.6)
activestorage (= 6.1.7.6)
activesupport (= 6.1.7.6)
actiontext (6.1.7.7)
actionpack (= 6.1.7.7)
activerecord (= 6.1.7.7)
activestorage (= 6.1.7.7)
activesupport (= 6.1.7.7)
nokogiri (>= 1.8.5)
actionview (6.1.7.6)
activesupport (= 6.1.7.6)
actionview (6.1.7.7)
activesupport (= 6.1.7.7)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.1.7.6)
activesupport (= 6.1.7.6)
activejob (6.1.7.7)
activesupport (= 6.1.7.7)
globalid (>= 0.3.6)
activemodel (6.1.7.6)
activesupport (= 6.1.7.6)
activerecord (6.1.7.6)
activemodel (= 6.1.7.6)
activesupport (= 6.1.7.6)
activestorage (6.1.7.6)
actionpack (= 6.1.7.6)
activejob (= 6.1.7.6)
activerecord (= 6.1.7.6)
activesupport (= 6.1.7.6)
activemodel (6.1.7.7)
activesupport (= 6.1.7.7)
activerecord (6.1.7.7)
activemodel (= 6.1.7.7)
activesupport (= 6.1.7.7)
activestorage (6.1.7.7)
actionpack (= 6.1.7.7)
activejob (= 6.1.7.7)
activerecord (= 6.1.7.7)
activesupport (= 6.1.7.7)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (6.1.7.6)
activesupport (6.1.7.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.5)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
ast (2.4.2)
base64 (0.2.0)
builder (3.2.4)
capybara (3.38.0)
capybara (3.40.0)
addressable
matrix
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
nokogiri (~> 1.11)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
childprocess (3.0.0)
chunky_png (1.4.0)
commonmarker (0.23.10)
concurrent-ruby (1.2.2)
concurrent-ruby (1.2.3)
crass (1.0.6)
css_parser (1.16.0)
addressable
csv (3.2.8)
csv (3.2.9)
date (3.3.4)
deckar01-task_list (2.3.2)
html-pipeline
digest (3.1.1)
docile (1.4.0)
erubi (1.12.0)
ffi (1.16.3)
@ -96,67 +96,71 @@ GEM
activesupport (>= 2)
nokogiri (>= 1.4)
htmlentities (4.3.4)
i18n (1.10.0)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
listen (3.8.0)
json (2.7.1)
language_server-protocol (3.17.0.3)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.7.1)
mail (2.8.1)
mini_mime (>= 0.1.1)
marcel (1.0.2)
net-imap
net-pop
net-smtp
marcel (1.0.4)
matrix (0.4.2)
method_source (1.0.0)
mini_magick (4.11.0)
mini_magick (4.12.0)
mini_mime (1.1.5)
mini_portile2 (2.8.5)
minitest (5.20.0)
minitest (5.22.3)
mocha (2.1.0)
ruby2_keywords (>= 0.0.5)
mysql2 (0.5.5)
net-imap (0.2.3)
digest
mysql2 (0.5.6)
net-imap (0.3.7)
date
net-protocol
strscan
net-ldap (0.17.1)
net-pop (0.1.2)
net-protocol
net-protocol (0.2.2)
timeout
net-smtp (0.3.3)
net-smtp (0.3.4)
net-protocol
nio4r (2.6.1)
nokogiri (1.15.5)
nio4r (2.7.1)
nokogiri (1.15.6)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
parallel (1.23.0)
parser (3.2.2.4)
parallel (1.24.0)
parser (3.3.0.5)
ast (~> 2.4.1)
racc
pg (1.4.6)
pg (1.5.6)
public_suffix (5.0.4)
puma (6.4.0)
puma (6.4.2)
nio4r (~> 2.0)
racc (1.7.3)
rack (2.2.8)
rack (2.2.9)
rack-test (2.1.0)
rack (>= 1.3)
rails (6.1.7.6)
actioncable (= 6.1.7.6)
actionmailbox (= 6.1.7.6)
actionmailer (= 6.1.7.6)
actionpack (= 6.1.7.6)
actiontext (= 6.1.7.6)
actionview (= 6.1.7.6)
activejob (= 6.1.7.6)
activemodel (= 6.1.7.6)
activerecord (= 6.1.7.6)
activestorage (= 6.1.7.6)
activesupport (= 6.1.7.6)
rails (6.1.7.7)
actioncable (= 6.1.7.7)
actionmailbox (= 6.1.7.7)
actionmailer (= 6.1.7.7)
actionpack (= 6.1.7.7)
actiontext (= 6.1.7.7)
actionview (= 6.1.7.7)
activejob (= 6.1.7.7)
activemodel (= 6.1.7.7)
activerecord (= 6.1.7.7)
activestorage (= 6.1.7.7)
activesupport (= 6.1.7.7)
bundler (>= 1.15.0)
railties (= 6.1.7.6)
railties (= 6.1.7.7)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
@ -165,9 +169,9 @@ GEM
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
railties (6.1.7.6)
actionpack (= 6.1.7.6)
activesupport (= 6.1.7.6)
railties (6.1.7.7)
actionpack (= 6.1.7.7)
activesupport (= 6.1.7.7)
method_source
rake (>= 12.2)
thor (~> 1.0)
@ -180,51 +184,56 @@ GEM
htmlentities
rbpdf-font (~> 1.19.0)
rbpdf-font (1.19.1)
redcarpet (3.5.1)
regexp_parser (2.8.2)
redcarpet (3.6.0)
regexp_parser (2.9.0)
request_store (1.5.1)
rack (>= 1.4)
rexml (3.2.6)
roadie (5.2.0)
roadie (5.2.1)
css_parser (~> 1.4)
nokogiri (~> 1.15)
roadie-rails (3.0.0)
railties (>= 5.1, < 7.1)
roadie-rails (3.1.0)
railties (>= 5.1, < 8.0)
roadie (~> 5.0)
rotp (6.3.0)
rouge (3.28.0)
rouge (4.2.1)
rqrcode (2.2.0)
chunky_png (~> 1.0)
rqrcode_core (~> 1.0)
rqrcode_core (1.2.0)
rubocop (1.26.1)
rubocop (1.57.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.1.0.0)
parser (>= 3.2.2.4)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.16.0, < 2.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.28.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.30.0)
parser (>= 3.2.1.0)
rubocop-performance (1.13.3)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.31.2)
parser (>= 3.3.0.4)
rubocop-performance (1.19.1)
rubocop (>= 1.7.0, < 2.0)
rubocop-ast (>= 0.4.0)
rubocop-rails (2.14.2)
rubocop-rails (2.22.2)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.7.0, < 2.0)
rubocop (>= 1.33.0, < 2.0)
rubocop-ast (>= 1.30.0, < 2.0)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
sanitize (6.1.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
selenium-webdriver (3.142.7)
childprocess (>= 0.5, < 4.0)
rubyzip (>= 1.2.2)
simplecov (0.21.2)
selenium-webdriver (4.18.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
@ -237,24 +246,25 @@ GEM
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
strscan (3.0.7)
thor (1.3.0)
sqlite3 (1.6.9)
mini_portile2 (~> 2.8.0)
thor (1.3.1)
timeout (0.4.1)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.5.0)
webdrivers (4.6.1)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
selenium-webdriver (>= 3.0, < 4.0)
webrick (1.8.1)
websocket (1.2.10)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
with_advisory_lock (5.1.0)
activerecord (>= 6.1)
zeitwerk (>= 2.6)
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.34)
zeitwerk (2.6.12)
yard (0.9.36)
zeitwerk (2.6.13)
PLATFORMS
ruby
@ -262,52 +272,52 @@ PLATFORMS
DEPENDENCIES
actionpack-xml_parser
addressable
bundler (>= 1.12.0)
capybara (~> 3.38.0)
capybara (>= 3.39)
commonmarker (~> 0.23.8)
csv (~> 3.2.0)
csv (~> 3.2.6)
deckar01-task_list (= 2.3.2)
ffi
html-pipeline (~> 2.13.2)
i18n (~> 1.10.0)
i18n (~> 1.14.1)
listen (~> 3.3)
mail (~> 2.7.1)
mail (~> 2.8.1)
marcel
mini_magick (~> 4.11.0)
mini_magick (~> 4.12.0)
mini_mime (~> 1.1.0)
mocha (>= 2.0.1)
mysql2 (~> 0.5.0)
net-imap (~> 0.2.2)
net-imap (~> 0.3.4)
net-ldap (~> 0.17.0)
net-pop (~> 0.1.1)
net-smtp (~> 0.3.0)
net-pop (~> 0.1.2)
net-smtp (~> 0.3.3)
nokogiri (~> 1.15.2)
pg (~> 1.4.2)
pg (~> 1.5.3)
puma
rails (= 6.1.7.6)
rails (= 6.1.7.7)
rails-dom-testing
rbpdf (~> 1.21.3)
redcarpet (~> 3.5.1)
redcarpet (~> 3.6.0)
request_store (~> 1.5.0)
rexml
roadie-rails (~> 3.0.0)
roadie-rails (~> 3.1.0)
rotp (>= 5.0.0)
rouge (~> 3.28.0)
rouge (~> 4.2.0)
rqrcode
rubocop (~> 1.26.0)
rubocop-performance (~> 1.13.0)
rubocop-rails (~> 2.14.0)
rubocop (~> 1.57.0)
rubocop-performance (~> 1.19.0)
rubocop-rails (~> 2.22.1)
rubyzip (~> 2.3.0)
sanitize (~> 6.0)
selenium-webdriver (~> 3.142.7)
simplecov (~> 0.21.2)
selenium-webdriver (>= 4.11.0)
simplecov (~> 0.22.0)
sqlite3 (~> 1.6.0)
tzinfo-data
webdrivers (= 4.6.1)
webrick
with_advisory_lock
yard
RUBY VERSION
ruby 3.1.4p223
BUNDLED WITH
2.4.12
2.4.22

View File

@ -5,10 +5,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fdbks9byqqlkd6glj6lkz5f1z6948hh8fhv9x5pzqciralmz142";
sha256 = "1br4vjv1si1gvhh8p96r95crljqwbx3nlzbkkdqg21xq8f9106kl";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
actionmailbox = {
dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
@ -16,10 +16,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rfya6qgsl14cm9l2w7h7lg4znsyg3gqiskhqr8wn76sh0x2hln0";
sha256 = "1i21621aiv233pa8fp1pvibwgbzzdddp0bx44qqn16yca6z35zrj";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
actionmailer = {
dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
@ -27,10 +27,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jr9jpf542svzqz8x68s08jnf30shxrrh7rq1a0s7jia5a5zx3qd";
sha256 = "0irkj00z2mzsvbrpdl8sd08k04hz5lhvy8rfkzhx2sqq5x1n155a";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
actionpack = {
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
@ -38,10 +38,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0vf6ncs647psa9p23d2108zgmlf0pr7gcjr080yg5yf68gyhs53k";
sha256 = "15jp9a1mgz8xjm618s8g69d70w19nn2svav4fhz3aarjwfbkvwj7";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
actionpack-xml_parser = {
dependencies = ["actionpack" "railties"];
@ -60,10 +60,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1i8s3v6m8q3y17c40l6d3k2vs1mdqr0y1lfm7i6dfbj2y673lk9r";
sha256 = "0hjm6vapqq1f7addwl71qwzn72lnmq686ypnbyhd873hqlnzangf";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
actionview = {
dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
@ -71,10 +71,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1s4c1n5lv31sc7w4w74xz8gzyq3sann00bm4l7lxgy3vgi2wqkid";
sha256 = "1hkdqf299dx8bgvgpgknf37kcbprqgq0iy8xdipww6pmbbc45bwk";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
activejob = {
dependencies = ["activesupport" "globalid"];
@ -82,10 +82,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1641003plszig5ybhrqy90fv43l1vcai5h35qmhh9j12byk5hp26";
sha256 = "06rp7kks22wrc55vric8yh0kg137jsiwd62jimdiqhh9bp48jbbm";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
activemodel = {
dependencies = ["activesupport"];
@ -93,10 +93,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "148szdj5jlnfpv3nmy8cby8rxgpdvs43f3rzqby1f7a0l2knd3va";
sha256 = "0zz32997k2fsyd0fzrh8f79yjr6hv3i4j9wykkxncl02j8dhrkay";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
activerecord = {
dependencies = ["activemodel" "activesupport"];
@ -104,10 +104,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0n7hg582ajdncilfk1kkw8qfdchymp2gqgkad1znlhlmclihsafr";
sha256 = "0qzymgyrvw2k32ldabp2jr0zgp6z9w8smyb946qgvs9zfs4n2qnn";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
activestorage = {
dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
@ -115,10 +115,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "16pylwnqsbvq2wxhl7k1rnravbr3dgpjmnj0psz5gijgkydd52yc";
sha256 = "12i033l3m41vr3qs7msy4p88a6pglx9vnsh5nakp0b6abf6mv5mk";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
activesupport = {
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
@ -126,10 +126,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1nhrdih0rk46i0s6x7nqhbypmj1hf23zl5gfl9xasb6k4r2a1dxk";
sha256 = "0r2i9b0pm0b1dy8fc7kyls1g7f0bcnyq53v825rykibzdqfqdfgp";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
addressable = {
dependencies = ["public_suffix"];
@ -137,10 +137,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
type = "gem";
};
version = "2.8.5";
version = "2.8.6";
};
ast = {
groups = ["default" "test"];
@ -152,6 +152,16 @@
};
version = "2.4.2";
};
base64 = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
type = "gem";
};
version = "0.2.0";
};
builder = {
groups = ["default"];
platforms = [];
@ -168,20 +178,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v";
sha256 = "1vxfah83j6zpw3v5hic0j70h519nvmix2hbszmjwm8cfawhagns2";
type = "gem";
};
version = "3.38.0";
};
childprocess = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5";
type = "gem";
};
version = "3.0.0";
version = "3.40.0";
};
chunky_png = {
groups = ["default"];
@ -208,13 +208,13 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
sha256 = "1qh1b14jwbbj242klkyz5fc7npd4j0mvndz62gajhvl1l3wd7zc2";
type = "gem";
};
version = "1.2.2";
version = "1.2.3";
};
crass = {
groups = ["common_mark" "default"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
@ -239,10 +239,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zmrgngggg4yvdbggdx9p3z4wcav4vxfigramxxvjh3hi7l12pig";
sha256 = "1fp986v5xfpzcj9v3dyvdd26fcnmbbzjwcp66pz34hv6g86z66a9";
type = "gem";
};
version = "3.2.8";
version = "3.2.9";
};
date = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "149jknsq999gnhy865n33fkk22s0r447k76x9pmcnnwldfv2q7wp";
type = "gem";
};
version = "3.3.4";
};
deckar01-task_list = {
dependencies = ["html-pipeline"];
@ -255,16 +265,6 @@
};
version = "2.3.2";
};
digest = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01qkpbkxq83ip3iysfh2kjrg9sh2n2q91prhyxh3vq10lcfzv9l1";
type = "gem";
};
version = "3.1.1";
};
docile = {
groups = ["default" "test"];
platforms = [];
@ -318,7 +318,7 @@
};
html-pipeline = {
dependencies = ["activesupport" "nokogiri"];
groups = ["common_mark"];
groups = ["common_mark" "default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
@ -343,10 +343,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0b2qyvnk4yynlg17ymkq4g5xgr275637fhl1mjh0valw3cb1fhhg";
sha256 = "0lbm33fpb3w06wd2231sg58dwlwgjsvym93m548ajvl6s3mfvpn7";
type = "gem";
};
version = "1.10.0";
version = "1.14.4";
};
json = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
type = "gem";
};
version = "2.7.1";
};
language_server-protocol = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gvb1j8xsqxms9mww01rmdl78zkd72zgxaap56bhv8j45z05hp1x";
type = "gem";
};
version = "3.17.0.3";
};
listen = {
dependencies = ["rb-fsevent" "rb-inotify"];
@ -354,10 +374,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn";
sha256 = "0rwwsmvq79qwzl6324yc53py02kbrcww35si720490z5w0j497nv";
type = "gem";
};
version = "3.8.0";
version = "3.9.0";
};
loofah = {
dependencies = ["crass" "nokogiri"];
@ -371,25 +391,25 @@
version = "2.22.0";
};
mail = {
dependencies = ["mini_mime"];
dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc";
type = "gem";
};
version = "2.7.1";
version = "2.8.1";
};
marcel = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0kky3yiwagsk8gfbzn3mvl2fxlh3b39v6nawzm4wpjs6xxvvc4x0";
sha256 = "190n2mk8m1l708kr88fh6mip9sdsh339d2s6sgrik3sbnvz4jmhd";
type = "gem";
};
version = "1.0.2";
version = "1.0.4";
};
matrix = {
groups = ["default" "test"];
@ -416,10 +436,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
sha256 = "0slh78f9z6n0l1i2km7m48yz7l4fjrk88sj1f4mh1wb39sl2yc37";
type = "gem";
};
version = "4.11.0";
version = "4.12.0";
};
mini_mime = {
groups = ["default" "test"];
@ -433,7 +453,15 @@
};
mini_portile2 = {
groups = ["common_mark" "default" "test"];
platforms = [];
platforms = [{
engine = "maglev";
} {
engine = "mingw";
} {
engine = "mingw";
} {
engine = "ruby";
}];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
@ -446,10 +474,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
sha256 = "07lq26b86giy3ha3fhrywk9r1ajhc2pm2mzj657jnpnbj1i6g17a";
type = "gem";
};
version = "5.20.0";
version = "5.22.3";
};
mocha = {
dependencies = ["ruby2_keywords"];
@ -475,21 +503,21 @@
}];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1gjvj215qdhwk3292sc7xsn6fmwnnaq2xs35hh5hc8d8j22izlbn";
sha256 = "0cysv1wdfdbizwkd0d9s16s832khdwv31pgp01mw2g3bbpa4gx3h";
type = "gem";
};
version = "0.5.5";
version = "0.5.6";
};
net-imap = {
dependencies = ["digest" "net-protocol" "strscan"];
dependencies = ["date" "net-protocol"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rl79ykmxa2k4dlk6ykrb9l0a4h101q1gd8c4qv3cl0p9h68zmbn";
sha256 = "0lf7wqg7czhaj51qsnmn28j7jmcxhkh3m28rl1cjrqsgjxhwj7r3";
type = "gem";
};
version = "0.2.3";
version = "0.3.7";
};
net-ldap = {
groups = ["ldap"];
@ -529,20 +557,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x";
sha256 = "0hwiqplhi29kfjl8jm0rhl51qv6wmxfynl4qap1dhv9xdwc4bm1x";
type = "gem";
};
version = "0.3.3";
version = "0.3.4";
};
nio4r = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1y99dfzlb3kgzh7pfk8km0p5zjiblxyh5rm8yal9h523vi5awji8";
sha256 = "15iwbiij52x6jhdbl0rkcldnhfndmsy0sbnsygkr9vhskfqrp72m";
type = "gem";
};
version = "2.6.1";
version = "2.7.1";
};
nokogiri = {
dependencies = ["mini_portile2" "racc"];
@ -550,20 +578,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "004ip9x9281fxhpipwi8di1sb1dnabscq9dy1p3cxgdwbniqqi12";
sha256 = "023f2j0q8makgmmfj4pv2fhwgcbh9y8s678za1cb68ry9fdpkkkh";
type = "gem";
};
version = "1.15.5";
version = "1.15.6";
};
parallel = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
sha256 = "15wkxrg1sj3n1h2g8jcrn7gcapwcgxr659ypjf75z1ipkgxqxwsv";
type = "gem";
};
version = "1.23.0";
version = "1.24.0";
};
parser = {
dependencies = ["ast" "racc"];
@ -571,10 +599,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0r69dbh6h6j4d54isany2ir4ni4gf2ysvk3k44awi6amz18nggpd";
sha256 = "11r6kp8wam0nkfvnwyc1fmvky102r1vcfr84vi2p1a2wa0z32j3p";
type = "gem";
};
version = "3.2.2.4";
version = "3.3.0.5";
};
pg = {
groups = ["default"];
@ -589,10 +617,10 @@
}];
source = {
remotes = ["https://rubygems.org"];
sha256 = "07m6lxljabw9kyww5k5lgsxsznsm1v5l14r1la09gqka9b5kv3yr";
sha256 = "071b55bhsz7mivlnp2kv0a11msnl7xg5awvk8mlflpl270javhsb";
type = "gem";
};
version = "1.4.6";
version = "1.5.6";
};
public_suffix = {
groups = ["default" "test"];
@ -610,10 +638,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1y8jcw80zcxvdq0id329lzmp5pzx7hpac227d7sgjkblc89s3pfm";
sha256 = "0i2vaww6qcazj0ywva1plmjnj6rk23b01szswc5jhcq7s2cikd1y";
type = "gem";
};
version = "6.4.0";
version = "6.4.2";
};
racc = {
groups = ["common_mark" "default" "test"];
@ -630,10 +658,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv";
sha256 = "0hj0rkw2z9r1lcg2wlrcld2n3phwrcgqcp7qd1g9a7hwgalh2qzx";
type = "gem";
};
version = "2.2.8";
version = "2.2.9";
};
rack-test = {
dependencies = ["rack"];
@ -652,10 +680,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gf5dqabzd0mf0q39a07kf0smdm2cv2z5swl3zr4cz50yb85zz3l";
sha256 = "0jqp5fggkxbjm4rhsywa7j5rvwkzp6gbaa1mg4k8zxrbfczhxwwl";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
rails-dom-testing = {
dependencies = ["activesupport" "minitest" "nokogiri"];
@ -685,10 +713,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vq4ahyg9hraixxmmwwypdnpcylpvznvdxhj4xa23xk45wzbl3h7";
sha256 = "07qxgrd92yq0cckrmzx54glvjdd1xx87xysgvaqd75hn50klp8ip";
type = "gem";
};
version = "6.1.7.6";
version = "6.1.7.7";
};
rainbow = {
groups = ["default" "test"];
@ -753,24 +781,24 @@
version = "1.19.1";
};
redcarpet = {
groups = ["common_mark" "markdown"];
groups = ["markdown"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bvk8yyns5s1ls437z719y5sdv9fr8kfs8dmr6g8s761dv5n8zvi";
sha256 = "1sg9sbf9pm91l7lac7fs4silabyn0vflxwaa2x3lrzsm0ff8ilca";
type = "gem";
};
version = "3.5.1";
version = "3.6.0";
};
regexp_parser = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d9a5s3qrjdy50ll2s32gg3qmf10ryp3v2nr5k718kvfadp50ray";
sha256 = "1ndxm0xnv27p4gv6xynk6q41irckj76q1jsqpysd9h6f86hhp841";
type = "gem";
};
version = "2.8.2";
version = "2.9.0";
};
request_store = {
dependencies = ["rack"];
@ -799,10 +827,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qs594ybaz0lh2sakh95syzvhva4jms8xyiwhgjfncf3ri0qxp7l";
sha256 = "1mh1a0m0i0xrm20nry4d3gf0q5kbmm5lp15n52r93gcjwwfgd974";
type = "gem";
};
version = "5.2.0";
version = "5.2.1";
};
roadie-rails = {
dependencies = ["railties" "roadie"];
@ -810,10 +838,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "16j1cjhq8xqr77vyf7m7ip2132619wdnpvlbig4cnn96yyi0cnan";
sha256 = "08fycjfbg9rqksk3bch8qv76g7acd1jbxy2y68lsqz1gxfky2ias";
type = "gem";
};
version = "3.0.0";
version = "3.1.0";
};
rotp = {
groups = ["default"];
@ -830,10 +858,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "080fswzii68wnbsg7pgq55ba7p289sqjlxwp4vch0h32qy1f8v8d";
sha256 = "1zd1pdldi6h8x27dqim7cy8m69xr01aw5c8k1zhkz497n4np6wgk";
type = "gem";
};
version = "3.28.0";
version = "4.2.1";
};
rqrcode = {
dependencies = ["chunky_png" "rqrcode_core"];
@ -857,15 +885,15 @@
version = "1.2.0";
};
rubocop = {
dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
dependencies = ["json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "06105yrqajpm5l07fng1nbk55y9490hny542zclnan8hg841pjgl";
sha256 = "06qnp5zs233j4f59yyqrg8al6hr9n4a7vcdg3p31v0np8bz9srwg";
type = "gem";
};
version = "1.26.1";
version = "1.57.2";
};
rubocop-ast = {
dependencies = ["parser"];
@ -873,10 +901,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1cs9cc5p9q70valk4na3lki4xs88b52486p2v46yx3q1n5969bgs";
sha256 = "1v3q8n48w8h809rqbgzihkikr4g3xk72m1na7s97jdsmjjq6y83w";
type = "gem";
};
version = "1.30.0";
version = "1.31.2";
};
rubocop-performance = {
dependencies = ["rubocop" "rubocop-ast"];
@ -884,21 +912,21 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "17ny81dy5gjrvris8mni7la8yjg57snphyg9nmvnc3al7yhwr74x";
sha256 = "1pzsrnjmrachdjxzl9jpw47cydicn3408vgdg3a4bss4v5r42rjj";
type = "gem";
};
version = "1.13.3";
version = "1.19.1";
};
rubocop-rails = {
dependencies = ["activesupport" "rack" "rubocop"];
dependencies = ["activesupport" "rack" "rubocop" "rubocop-ast"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14xagb3jbms5mlcf932kx1djn2q4k952d4xia75ll36vh7xf2fpp";
sha256 = "0ym0h2w97b8c2h6zl44m22lzg253qkmim0ali32aiy58ddvbj0mm";
type = "gem";
};
version = "2.14.2";
version = "2.22.2";
};
ruby-progressbar = {
groups = ["default" "test"];
@ -932,7 +960,7 @@
};
sanitize = {
dependencies = ["crass" "nokogiri"];
groups = ["common_mark"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
@ -942,15 +970,15 @@
version = "6.1.0";
};
selenium-webdriver = {
dependencies = ["childprocess" "rubyzip"];
dependencies = ["base64" "rexml" "rubyzip" "websocket"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0adcvp86dinaqq3nhf8p3m0rl2g6q0a4h52k0i7kdnsg1qz9k86y";
sha256 = "1asysih4l1mv24wqxrbnz0c0454kw3dhqaj6nsa8pyn9fjjdms5b";
type = "gem";
};
version = "3.142.7";
version = "4.18.1";
};
simplecov = {
dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"];
@ -958,10 +986,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hrv046jll6ad1s964gsmcq4hvkr3zzr6jc7z1mns22mvfpbc3cr";
sha256 = "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py";
type = "gem";
};
version = "0.21.2";
version = "0.22.0";
};
simplecov-html = {
groups = ["default" "test"];
@ -1005,25 +1033,34 @@
};
version = "3.4.2";
};
strscan = {
sqlite3 = {
dependencies = ["mini_portile2"];
groups = ["default"];
platforms = [];
platforms = [{
engine = "maglev";
} {
engine = "mingw";
} {
engine = "mingw";
} {
engine = "ruby";
}];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0w2lc1mqia13x43ajzhih419r40ppddg936ydhawz57f63ab6fll";
sha256 = "08irz5llz31im8pmkk5k0kw433jyyji1qa98xkdmpphncdjr38am";
type = "gem";
};
version = "3.0.7";
version = "1.6.9";
};
thor = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
sha256 = "1vq1fjp45az9hfp6fxljhdrkv75cvbab1jfrwcw738pnsiqk8zps";
type = "gem";
};
version = "1.3.0";
version = "1.3.1";
};
timeout = {
groups = ["default"];
@ -1056,17 +1093,6 @@
};
version = "2.5.0";
};
webdrivers = {
dependencies = ["nokogiri" "rubyzip" "selenium-webdriver"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1naymcfmm9pkf0f67xd99d9f6dpv477ggyvc1c04gxifirynfydp";
type = "gem";
};
version = "4.6.1";
};
webrick = {
groups = ["default"];
platforms = [];
@ -1077,6 +1103,16 @@
};
version = "1.8.1";
};
websocket = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1a4zc8d0d91c3xqwapda3j3zgpfwdbj76hkb69xn6qvfkfks9h9c";
type = "gem";
};
version = "1.2.10";
};
websocket-driver = {
dependencies = ["websocket-extensions"];
groups = ["default"];
@ -1098,6 +1134,17 @@
};
version = "0.1.5";
};
with_advisory_lock = {
dependencies = ["activerecord" "zeitwerk"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mzy29advrdczf88j2ffvck4kf8sfhxn07sym9ciq9rv061cv4h6";
type = "gem";
};
version = "5.1.0";
};
xpath = {
dependencies = ["nokogiri"];
groups = ["default" "test"];
@ -1114,19 +1161,19 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "013yrnwx1zhzhn1fnc19zck22a1qgimsaglp2iwgf5bz9l8h93js";
sha256 = "1r0b8w58p7gy06wph1qdjv2p087hfnmhd9jk23vjdj803dn761am";
type = "gem";
};
version = "0.9.34";
version = "0.9.36";
};
zeitwerk = {
groups = ["common_mark" "default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1gir0if4nryl1jhwi28669gjwhxb7gzrm1fcc8xzsch3bnbi47jn";
sha256 = "1m67qmsak3x8ixs8rb971azl3l7wapri65pmbf5z886h46q63f1d";
type = "gem";
};
version = "2.6.12";
version = "2.6.13";
};
}

View File

@ -1,7 +1,7 @@
{ lib, stdenv, fetchurl, bundlerEnv, ruby, defaultGemConfig, makeWrapper, nixosTests }:
{ lib, stdenv, fetchurl, bundlerEnv, ruby, makeWrapper, nixosTests }:
let
version = "5.0.6";
version = "5.1.2";
rubyEnv = bundlerEnv {
name = "redmine-env-${version}";
@ -16,7 +16,7 @@ in
src = fetchurl {
url = "https://www.redmine.org/releases/${pname}-${version}.tar.gz";
hash = "sha256-SI/gjzeo6xARQVkiqOp0O3842Kel+IIpUKNKN13PCO4=";
hash = "sha256-JsDKCpqu4c65g4Jb8SZsmbCFC/ATwXhxP1o7AIABISM=";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -6,11 +6,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "stats";
version = "2.10.5";
version = "2.10.6";
src = fetchurl {
url = "https://github.com/exelban/stats/releases/download/v${finalAttrs.version}/Stats.dmg";
hash = "sha256-IBliS0RSWlCSLYeSHTapW9B2mPJtZqL7k8jskpXy1F4=";
hash = "sha256-5FjxEBZ+HbiWVR/8DBfVPeWACRwrw+Kcn1jld/CR+Ck=";
};
sourceRoot = ".";

View File

@ -7,13 +7,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "uxn";
version = "unstable-2024-03-18";
version = "unstable-2024-03-30";
src = fetchFromSourcehut {
owner = "~rabbits";
repo = "uxn";
rev = "250aecc920a6f12d2d5479a5230a31630dac2a1e";
hash = "sha256-nhKlcuhXkrhecRwVIuSf+jOmFbX0NMhmmc5pj6MCNdQ=";
rev = "fc6ec0b387723940868133fade8854ad37648881";
hash = "sha256-Ver8oI3IzxwF6KeZ85d3mmiCwARVoH+RZoFNCxhGFDc=";
};
outputs = [ "out" "projects" ];

View File

@ -38,6 +38,7 @@ buildGoModule {
installPhase = ''
runHook preInstall
install -Dm644 geosite.db $out/share/sing-box/geosite.db
install -Dm644 rule-set/* -t $out/share/sing-box/rule-set
runHook postInstall
'';

View File

@ -16,4 +16,37 @@ func main() {
if err != nil {
panic(err)
}
ruleSetOutput := "rule-set"
err = os.MkdirAll(ruleSetOutput, 0o755)
if err != nil {
panic(err)
}
for code, domains := range domainMap {
var headlessRule option.DefaultHeadlessRule
defaultRule := geosite.Compile(domains)
headlessRule.Domain = defaultRule.Domain
headlessRule.DomainSuffix = defaultRule.DomainSuffix
headlessRule.DomainKeyword = defaultRule.DomainKeyword
headlessRule.DomainRegex = defaultRule.DomainRegex
var plainRuleSet option.PlainRuleSet
plainRuleSet.Rules = []option.HeadlessRule{
{
Type: C.RuleTypeDefault,
DefaultOptions: headlessRule,
},
}
srsPath, _ := filepath.Abs(filepath.Join(ruleSetOutput, "geosite-"+code+".srs"))
os.Stderr.WriteString("write " + srsPath + "\n")
outputRuleSet, err := os.Create(srsPath)
if err != nil {
panic(err)
}
err = srs.Write(outputRuleSet, plainRuleSet)
if err != nil {
outputRuleSet.Close()
panic(err)
}
outputRuleSet.Close()
}
}

View File

@ -26,13 +26,13 @@ lib.checkListOfEnum "${pname}: theme tweaks" validTweaks tweaks
stdenvNoCC.mkDerivation
rec {
inherit pname;
version = "2023-10-20";
version = "2024-04-01";
src = fetchFromGitHub {
repo = "Orchis-theme";
owner = "vinceliuice";
rev = version;
hash = "sha256-GhSzTtbuvbAuXxKNm29sJX5kXE2s2jMDB6Ww6Q7GNSo=";
hash = "sha256-gszyUZGWlgrBTQnaz6Ws7jzfTN5KAfX5SjVwmVrP9QE=";
};
nativeBuildInputs = [ gtk3 sassc ];

View File

@ -4,11 +4,22 @@
otherRids,
pkgs ? import ../../../.. {}
}:
with pkgs.lib;
let
inherit (pkgs) writeText;
inherit (pkgs.lib)
concatMap
concatMapStringsSep
generators
optionals
replaceStrings
sortOn
strings
unique
;
fns = map (file: import file) list;
packages = unique
(concatMap (fn: fn { fetchNuGet = package: package; }) fns);

View File

@ -1,11 +1,52 @@
{ pkgs, lib, callPackage, ... }:
with pkgs.gerbil-support; {
let
inherit (builtins) filterSource;
pppToName = ppp: lib.removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name
inherit (lib)
commitIdFromGitRepo
concatStringsSep
elem
elemAt
hasSuffix
listToAttrs
mapAttrs
optionalString
pathExists
readFile
removeSuffix
substring
traceSeqN
;
inherit (lib.strings) match;
# Implicitly calls through to this file, similar to `let .. in` or `rec`.
inherit (pkgs.gerbil-support)
callPpp
gerbilLoadPath
gerbilPackage
gerbilPackages-unstable
gerbilSkippableFiles
gerbilSourceFilter
overrideSrcIfShaDiff
ppaToPl
pppToKV
pppToName
ppplToPpa
prePackage-defaults
prePackages-unstable
resolve-pre-src
sha256-of-pre-src
view
;
in
{
pppToName = ppp: removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name
callPpp = ppp: callPackage ppp prePackage-defaults; # from pre-package path to pre-package
pppToKV = ppp: { name = pppToName ppp; value = callPpp ppp; }; # from pre-package path to name
ppplToPpa = ppps: builtins.listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr
ppplToPpa = ppps: listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr
prePackages-unstable =
ppplToPpa
@ -32,37 +73,37 @@ with pkgs.gerbil-support; {
softwareName = "";
};
ppaToPl = builtins.mapAttrs (_: gerbilPackage);
ppaToPl = mapAttrs (_: gerbilPackage);
gerbilPackages-unstable = ppaToPl prePackages-unstable;
resolve-pre-src = pre-src: pre-src.fun (removeAttrs pre-src ["fun"]);
gerbilVersionFromGit = srcDir: version-path:
let version-file = "${srcDir}/${version-path}.ss"; in
if builtins.pathExists version-file then
if pathExists version-file then
let m =
builtins.match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
(builtins.readFile version-file); in
{ version = "${builtins.elemAt m 2}-git"; git-version = builtins.elemAt m 1; }
match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
(readFile version-file); in
{ version = "${elemAt m 2}-git"; git-version = elemAt m 1; }
else { version = "0.0-git";
git-version = let gitpath = "${srcDir}/.git"; in
if builtins.pathExists gitpath then lib.commitIdFromGitRepo gitpath else "0"; };
if pathExists gitpath then commitIdFromGitRepo gitpath else "0"; };
gerbilSkippableFiles = [".git" ".build" ".build_outputs" "run" "result" "dep" "BLAH" "tmp.nix"];
gerbilSourceFilter = path: type:
let baseName = baseNameOf path; in
! (builtins.elem baseName gerbilSkippableFiles || lib.hasSuffix "~" baseName);
! (elem baseName gerbilSkippableFiles || hasSuffix "~" baseName);
gerbilFilterSource = builtins.filterSource gerbilSourceFilter;
gerbilFilterSource = filterSource gerbilSourceFilter;
# Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH.
gerbilLoadPath =
gerbilInputs: builtins.concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
gerbilInputs: concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
path-src = path: { fun = _: path; };
view = lib.debug.traceSeqN 4;
view = traceSeqN 4;
sha256-of-pre-src = pre-src: if pre-src ? sha256 then pre-src.sha256 else "none";
@ -75,7 +116,7 @@ with pkgs.gerbil-support; {
pre-src = new-pre-src;
version = "override";
git-version = if new-pre-src ? rev
then lib.substring 0 7 new-pre-src.rev
then substring 0 7 new-pre-src.rev
else "unknown";};
};
@ -102,10 +143,10 @@ with pkgs.gerbil-support; {
postPatch = ''
set -e ;
${lib.optionalString (version-path != "")
''echo -e '(import :clan/versioning${builtins.concatStringsSep ""
${optionalString (version-path != "")
''echo -e '(import :clan/versioning${concatStringsSep ""
(map (x: let px = x.passthru.pre-pkg; in
lib.optionalString (px.version-path != "")
optionalString (px.version-path != "")
" :${px.gerbil-package}/${px.version-path}")
gerbilInputs)
})\n(register-software "${softwareName}" "v${git-version}")\n' > "${version-path}.ss"''}

View File

@ -19,11 +19,6 @@
let
versionMap = {
# Only kept around for BCLM. Remove once unneeded there.
"2.1.9" = {
sha256 = "189gjqzdz10xh3ybiy4ch1r98bsmkcb4hpnrmggd4y2g5kqnyx4y";
};
"2.4.2" = {
sha256 = "sha256-/APLUtEqr+h1nmMoRQogG73fibFwcaToPznoC0Pd7w8=";
};
@ -103,11 +98,6 @@ stdenv.mkDerivation (self: rec {
[ zstd ]
);
patches = lib.optionals (lib.versionOlder self.version "2.4.2") [
# Fixed in 2.4.2
./search-for-binaries-in-PATH.patch
];
# I dont know why these are failing (on ofBorg), and Id rather just disable
# them and move forward with the succeeding tests than block testing
# altogether. One by one hopefully we can fix these (on ofBorg,

View File

@ -1,108 +0,0 @@
From 35856b09e3606361b17f21225c759632be1cdf34 Mon Sep 17 00:00:00 2001
From: Hraban Luyat <hraban@0brg.net>
Date: Wed, 24 Jan 2024 14:58:53 -0500
Subject: [PATCH] Search for binaries in tests in PATH, not /usr/bin
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Same as 8ed662fbfeb5dde35eb265f390b55b01f79f70c1 but for tests, and for more
than just cat. For the same reasons as that diff.
---
tests/run-program.impure.lisp | 18 ++++++++++--------
tests/run-program.test.sh | 9 ++++-----
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/tests/run-program.impure.lisp b/tests/run-program.impure.lisp
index 0eab8884c..b07d1e4fb 100644
--- a/tests/run-program.impure.lisp
+++ b/tests/run-program.impure.lisp
@@ -15,7 +15,7 @@
(defun bin-pwd-ignoring-result ()
(let ((initially-open-fds (directory "/proc/self/fd/*" :resolve-symlinks nil)))
- (sb-ext:run-program "/usr/bin/pwd" nil :input :stream :output :stream :wait nil)
+ (sb-ext:run-program "pwd" nil :search t :input :stream :output :stream :wait nil)
(length initially-open-fds)))
(with-test (:name (run-program :autoclose-streams)
@@ -49,7 +49,7 @@
(with-test (:name (run-program :cat 2)
:skipped-on (or (not :sb-thread) :win32))
;; Tests that reading from a FIFO is interruptible.
- (let* ((process (run-program "/bin/cat" '()
+ (let* ((process (run-program "cat" '() :search t
:wait nil :output :stream :input :stream))
(in (process-input process))
(out (process-output process))
@@ -167,7 +167,7 @@
(defparameter *cat-out* (make-synonym-stream '*cat-out-pipe*)))
(with-test (:name (run-program :cat 5) :fails-on :win32)
- (let ((cat (run-program "/bin/cat" nil :input *cat-in* :output *cat-out*
+ (let ((cat (run-program "cat" nil :search t :input *cat-in* :output *cat-out*
:wait nil)))
(dolist (test '("This is a test!"
"This is another test!"
@@ -310,14 +310,16 @@
(let ((had-error-p nil))
(flet ((barf (&optional (format :default))
(with-output-to-string (stream)
- (run-program #-netbsd "/usr/bin/perl" #+netbsd "/usr/pkg/bin/perl"
+ (run-program #-netbsd "perl" #+netbsd "/usr/pkg/bin/perl"
'("-e" "print \"\\x20\\xfe\\xff\\x0a\"")
+ :search #-netbsd t #+netbsd nil
:output stream
:external-format format)))
(no-barf ()
(with-output-to-string (stream)
- (run-program "/bin/echo"
+ (run-program "echo"
'("This is a test")
+ :search t
:output stream))))
(handler-case
(barf :utf-8)
@@ -353,9 +355,9 @@
;; If the permitted inputs are :ANY then leave it be
(listp (symbol-value 'run-tests::*allowed-inputs*)))
(push (namestring file) (symbol-value 'run-tests::*allowed-inputs*)))
- (assert (null (run-program "/bin/cat" '() :input file)))
- (assert (null (run-program "/bin/cat" '() :output #.(or *compile-file-truename*
- *load-truename*)
+ (assert (null (run-program "cat" '() :search t :input file)))
+ (assert (null (run-program "cat" '() :search t :output #.(or *compile-file-truename*
+ *load-truename*)
:if-output-exists nil)))))
diff --git a/tests/run-program.test.sh b/tests/run-program.test.sh
index 48eaef889..c926e5a05 100755
--- a/tests/run-program.test.sh
+++ b/tests/run-program.test.sh
@@ -39,9 +39,8 @@ run_sbcl --eval "(defvar *exit-ok* $EXIT_LISP_WIN)" <<'EOF'
(assert (not (zerop (sb-ext:process-exit-code
(sb-ext:run-program "false" () :search t :wait t)))))
(let ((string (with-output-to-string (stream)
- (our-run-program "/bin/echo"
- '("foo" "bar")
- :output stream))))
+ (run-program "echo" '("foo" "bar")
+ :search t :output stream))))
(assert (string= string "foo bar
")))
(format t ";;; Smoke tests: PASS~%")
@@ -103,8 +102,8 @@ run_sbcl --eval "(defvar *exit-ok* $EXIT_LISP_WIN)" <<'EOF'
;; make sure that a stream input argument is basically reasonable.
(let ((string (let ((i (make-string-input-stream "abcdef")))
(with-output-to-string (stream)
- (our-run-program "/bin/cat" ()
- :input i :output stream)))))
+ (run-program "cat" ()
+ :search t :input i :output stream)))))
(assert (= (length string) 6))
(assert (string= string "abcdef")))
--
2.43.0

View File

@ -6,11 +6,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "ode";
version = "0.16.4";
version = "0.16.5";
src = fetchurl {
url = "https://bitbucket.org/odedevs/ode/downloads/ode-${finalAttrs.version}.tar.gz";
hash = "sha256-cQN7goHGyGsKVXKfkNXbaXq+TL7B2BGBV+ANSOwlNGc=";
hash = "sha256-uode3RZFcJWHle6qcPFIU7/DTMmHH4rd6NpH4SvVRnk=";
};
buildInputs = lib.optionals stdenv.isDarwin [

View File

@ -3,12 +3,12 @@
stdenv.mkDerivation rec {
pname = "poco";
version = "1.12.5p2";
version = "1.13.2";
src = fetchFromGitHub {
owner = "pocoproject";
repo = "poco";
sha256 = "sha256-UAseNOC9n+OooDl4E67qcndJ02fAgmp2d8Ii/IyPvhg=";
sha256 = "sha256-GcwkGiui9j9RzMQyEEmqq8dxWzKpv5xWxJgvJpSMdbw=";
rev = "poco-${version}-release";
};

View File

@ -1,6 +1,7 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, doxygen, numactl
, rdma-core, libbfd, libiberty, perl, zlib, symlinkJoin, pkg-config
, config
, autoAddDriverRunpath
, enableCuda ? config.cudaSupport
, cudaPackages
, enableRocm ? config.rocmSupport
@ -36,7 +37,7 @@ stdenv.mkDerivation rec {
]
++ lib.optionals enableCuda [
cudaPackages.cuda_nvcc
cudaPackages.autoAddDriverRunpath
autoAddDriverRunpath
];
buildInputs = [

View File

@ -4,23 +4,28 @@
, fetchFromGitHub
, pythonOlder
, pytestCheckHook
, setuptools
}:
buildPythonPackage rec {
pname = "aiolyric";
version = "1.1.1";
format = "setuptools";
version = "2.0.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchFromGitHub {
owner = "timmo001";
repo = pname;
rev = "refs/tags/v${version}";
repo = "aiolyric";
rev = "refs/tags/${version}";
hash = "sha256-FZhLjVrLzLv6CZz/ROlvbtBK9XnpO8pG48aSIoBxhCo=";
};
propagatedBuildInputs = [
build-system = [
setuptools
];
dependencies = [
aiohttp
];

View File

@ -22,7 +22,7 @@
buildPythonPackage rec {
pname = "async-upnp-client";
version = "0.38.2";
version = "0.38.3";
pyproject = true;
disabled = pythonOlder "3.8";
@ -31,14 +31,14 @@ buildPythonPackage rec {
owner = "StevenLooman";
repo = "async_upnp_client";
rev = "refs/tags/${version}";
hash = "sha256-gPA9u1BuMswfg5Nll8l6vrcTP2s3Zn9ESTbV+dOxlhA=";
hash = "sha256-RmpQOVZ/s3Zv2e+iS7LTI5Wh/g0yy0Xv0M8ppsbYZPg=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
propagatedBuildInputs = [
dependencies = [
aiohttp
async-timeout
defusedxml
@ -56,20 +56,6 @@ buildPythonPackage rec {
# socket.gaierror: [Errno -2] Name or service not known
"test_async_get_local_ip"
"test_get_local_ip"
# OSError: [Errno 101] Network is unreachable
"test_auto_resubscribe_fail"
"test_init"
"test_on_notify_dlna_event"
"test_on_notify_upnp_event"
"test_server_init"
"test_server_start"
"test_start_server"
"test_subscribe"
"test_subscribe_auto_resubscribe"
"test_subscribe_fail"
"test_subscribe_manual_resubscribe"
"test_subscribe_renew"
"test_unsubscribe"
] ++ lib.optionals stdenv.isDarwin [
"test_deferred_callback_url"
];
@ -85,10 +71,10 @@ buildPythonPackage rec {
meta = with lib; {
description = "Asyncio UPnP Client library for Python";
mainProgram = "upnp-client";
homepage = "https://github.com/StevenLooman/async_upnp_client";
changelog = "https://github.com/StevenLooman/async_upnp_client/blob/${version}/CHANGES.rst";
license = licenses.asl20;
maintainers = with maintainers; [ hexa ];
mainProgram = "upnp-client";
};
}

View File

@ -4,6 +4,7 @@
, fetchFromGitHub
, glibcLocales
, importlib-metadata
, packaging
, logfury
, pyfakefs
, pytestCheckHook
@ -41,6 +42,7 @@ buildPythonPackage rec {
];
propagatedBuildInputs = [
packaging
logfury
requests
tqdm

View File

@ -14,7 +14,7 @@
buildPythonPackage rec {
pname = "ezyrb";
version = "1.3.0.post2403";
version = "1.3.0.post2404";
format = "setuptools";
disabled = pythonOlder "3.7";
@ -23,7 +23,7 @@ buildPythonPackage rec {
owner = "mathLab";
repo = "EZyRB";
rev = "refs/tags/v${version}";
hash = "sha256-t0Mv8Kae6N+jHeQx57ljDR5lmmbW2mqrlqygtrwGWhY=";
hash = "sha256-nu75Geyeu1nTLoGaohXB9pmbUWKgdgch9Z5OJqz9xKQ=";
};
propagatedBuildInputs = [

View File

@ -16,7 +16,7 @@
buildPythonPackage rec {
pname = "fastapi-sso";
version = "0.13.0";
version = "0.13.1";
pyproject = true;
disabled = pythonOlder "3.8";
@ -25,18 +25,18 @@ buildPythonPackage rec {
owner = "tomasvotava";
repo = "fastapi-sso";
rev = "refs/tags/${version}";
hash = "sha256-7gBJ6Etb9X2mJzrWYpNGAl3NFoI1bz+PcGfUsMgRlN8=";
hash = "sha256-gblxjunXNerbC+7IYkGrO/PJak0MCoxdmWfo7iVeV7g=";
};
postPatch = ''
sed -i "/--cov/d" pyproject.toml
'';
nativeBuildInputs = [
build-system = [
poetry-core
];
propagatedBuildInputs = [
dependencies = [
fastapi
httpx
oauthlib

View File

@ -14,14 +14,14 @@
buildPythonPackage rec {
pname = "google-cloud-container";
version = "2.44.0";
version = "2.45.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-heNvRcepXqayn/impyP5h4L+eOJjGV1hMrZyg96aZKU=";
hash = "sha256-8vaSLR+cIKohDpbC679cKydLsnBKhewtTpdBDymxjss=";
};
build-system = [

View File

@ -1,5 +1,6 @@
{
lib,
bash,
buildPythonPackage,
fetchFromGitHub,
fetchpatch,
@ -33,9 +34,14 @@ buildPythonPackage rec {
})
];
nativeBuildInputs = [ setuptools ];
postPatch = ''
substituteInPlace jishaku/shell.py \
--replace-fail '"/bin/bash"' '"${lib.getExe bash}"'
'';
propagatedBuildInputs = [
build-system = [ setuptools ];
dependencies = [
discordpy
click
braceexpand

View File

@ -12,19 +12,23 @@
, importlib-metadata
, substituteAll
, runCommand
, symlinkJoin
, writers
, numba
, config
# CUDA-only dependencies:
, addOpenGLRunpath ? null
, cudaPackages ? {}
, addDriverRunpath
, autoAddDriverRunpath ? cudaPackages.autoAddDriverRunpathHook or cudaPackages.autoAddOpenGLRunpathHook
, cudaPackages
# CUDA flags:
, cudaSupport ? config.cudaSupport
}:
let
inherit (cudaPackages) cudatoolkit;
cudatoolkit = cudaPackages.cuda_nvcc;
in buildPythonPackage rec {
# Using an untagged version, with numpy 1.25 support, when it's released
# also drop the versioneer patch in postPatch
@ -52,12 +56,25 @@ in buildPythonPackage rec {
# relevant strings ourselves, using `sed` commands, in extraPostFetch.
hash = "sha256-wd4TujPhV2Jy/HUUXLHAlcbVFm4gfQNWxWFXD+jeZC4=";
};
postPatch = ''
substituteInPlace numba/cuda/cudadrv/driver.py \
--replace-fail \
"dldir = [" \
"dldir = [ '${addDriverRunpath.driverLink}/lib', "
'';
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${lib.getDev libcxx}/include/c++/v1";
nativeBuildInputs = [
numpy
] ++ lib.optionals cudaSupport [
addOpenGLRunpath
autoAddDriverRunpath
cudaPackages.cuda_nvcc
];
buildInputs = with cudaPackages; [
cuda_cudart
];
propagatedBuildInputs = [
@ -66,26 +83,16 @@ in buildPythonPackage rec {
setuptools
] ++ lib.optionals (pythonOlder "3.9") [
importlib-metadata
] ++ lib.optionals cudaSupport [
cudatoolkit
cudatoolkit.lib
];
patches = lib.optionals cudaSupport [
(substituteAll {
src = ./cuda_path.patch;
cuda_toolkit_path = cudatoolkit;
cuda_toolkit_lib_path = cudatoolkit.lib;
cuda_toolkit_lib_path = lib.getLib cudatoolkit;
})
];
postFixup = lib.optionalString cudaSupport ''
find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
addOpenGLRunpath "$lib"
patchelf --set-rpath "${cudatoolkit}/lib:${cudatoolkit.lib}/lib:$(patchelf --print-rpath "$lib")" "$lib"
done
'';
# run a smoke test in a temporary directory so that
# a) Python picks up the installed library in $out instead of the build files
# b) we have somewhere to put $HOME so some caching tests work
@ -104,6 +111,13 @@ in buildPythonPackage rec {
"numba"
];
passthru.testers.cuda-detect =
writers.writePython3Bin "numba-cuda-detect"
{ libraries = [ (numba.override { cudaSupport = true; }) ]; }
''
from numba import cuda
cuda.detect()
'';
passthru.tests = {
# CONTRIBUTOR NOTE: numba also contains CUDA tests, though these cannot be run in
# this sandbox environment. Consider running similar commands to those below outside the

View File

@ -2,20 +2,25 @@
, buildPythonPackage
, fetchPypi
, pythonOlder
, setuptools
}:
buildPythonPackage rec {
pname = "openrgb-python";
version = "0.2.15";
format = "setuptools";
version = "0.3.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-rTfpqMM+IUd8rMmw/r15sICLoPHL6KLaRrmUjWTfUkA=";
hash = "sha256-2eeb2XHYvBaHkHHs9KxZKDGXtcLaT28c/aLC9pxrRmM=";
};
build-system = [
setuptools
];
# Module has no tests
doCheck = false;

View File

@ -12,7 +12,7 @@
buildPythonPackage rec {
pname = "opower";
version = "0.4.1";
version = "0.4.2";
pyproject = true;
disabled = pythonOlder "3.9";
@ -21,14 +21,14 @@ buildPythonPackage rec {
owner = "tronikos";
repo = "opower";
rev = "refs/tags/v${version}";
hash = "sha256-PB6t1ltxJs7aYn/OthCORHbyRXqMkTZ6YE2He0k/2mc=";
hash = "sha256-mQE3WypB//OPilx4vA8b8V+eO0MJ/cSa3wILLW+Jk4Y=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
propagatedBuildInputs = [
dependencies = [
aiohttp
arrow
pyotp

View File

@ -10,17 +10,17 @@
buildPythonPackage rec {
pname = "publicsuffixlist";
version = "0.10.0.20240312";
version = "0.10.0.20240328";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-ApEvPghPrWfiRjNl/UMVRJIdnbP1H21DzqcWnIax8Yg=";
hash = "sha256-XArawQzC9J5ShtgCG02qf8RRxNTKJMn8aiclG+4CUKY=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
@ -47,9 +47,9 @@ buildPythonPackage rec {
meta = with lib; {
description = "Public Suffix List parser implementation";
mainProgram = "publicsuffixlist-download";
homepage = "https://github.com/ko-zu/psl";
license = licenses.mpl20;
maintainers = with maintainers; [ fab ];
mainProgram = "publicsuffixlist-download";
};
}

View File

@ -24,14 +24,14 @@
buildPythonPackage rec {
pname = "pywbem";
version = "1.6.2";
version = "1.6.3";
format = "setuptools";
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-JugXm8F+MXa0zVdrn1p3MPhI1RvgUTdo/X8x/ZsnCpY=";
hash = "sha256-eN8w3umMUIYgtZm4lR8yKoHGwKnXt4/+XgF7lBfNl7k=";
};
propagatedBuildInputs = [

View File

@ -10,7 +10,7 @@
buildPythonPackage rec {
pname = "threadpoolctl";
version = "3.3.0";
version = "3.4.0";
disabled = pythonOlder "3.6";
format = "pyproject";
@ -19,7 +19,7 @@ buildPythonPackage rec {
owner = "joblib";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-mdOZcplqXrkKlL/SXipJg6A9Dh1lXGEHszBLGH/kxqs=";
hash = "sha256-nWaBhiFw76azx6dV4I18XodiUnHiLb0gNNhXks6iHIg=";
};
nativeBuildInputs = [

View File

@ -1,73 +0,0 @@
{ lib
, stdenv
, fetchgit
, wrapLisp
, openssl
, sbcl
}:
# Broken on newer versions:
# "https://gitlab.common-lisp.net/clpm/clpm/-/issues/51". Once that bug is
# fixed, remove this, and all 2.1.9 references from the SBCL build file.
with rec {
sbcl_2_1_9 = sbcl.override (_: {
version = "2.1.9";
});
};
stdenv.mkDerivation rec {
pname = "clpm";
version = "0.4.1";
src = fetchgit {
url = "https://gitlab.common-lisp.net/clpm/clpm";
rev = "v${version}";
fetchSubmodules = true;
sha256 = "sha256-UhaLmbdsIPj6O+s262HUMxuz/5t43JR+TlOjq8Y2CDs=";
};
propagatedBuildInputs = [
openssl
];
postPatch = ''
# patch cl-plus-ssl to ensure that it finds libssl and libcrypto
sed 's|libssl.so|${lib.getLib openssl}/lib/libssl.so|' -i ext/cl-plus-ssl/src/reload.lisp
sed 's|libcrypto.so|${lib.getLib openssl}/lib/libcrypto.so|' -i ext/cl-plus-ssl/src/reload.lisp
# patch dexador to avoid error due to dexador being loaded multiple times
sed -i 's/defpackage/uiop:define-package/g' ext/dexador/src/dexador.lisp
'';
buildPhase = ''
runHook preBuild
# exporting home to avoid using /homeless-shelter/.cache/ as this will cause
# ld to complaing about `impure path used in link`.
export HOME=$TMP
${sbcl_2_1_9}/bin/sbcl --script scripts/build-release.lisp
runHook postBuild
'';
installPhase = ''
runHook preInstall
cd build/release-staging/dynamic/clpm-${version}*/
INSTALL_ROOT=$out/ bash install.sh
runHook postInstall
'';
# Stripping binaries results in fatal error in SBCL, `Can't find sbcl.core`
dontStrip = true;
meta = with lib; {
description = "Common Lisp Package Manager";
homepage = "https://www.clpm.dev/";
license = licenses.bsd2;
maintainers = [ maintainers.petterstorvik ];
platforms = [ "i686-linux" "x86_64-linux" ];
};
}

View File

@ -13,7 +13,11 @@ buildGoModule rec {
vendorHash = "sha256-4t/ft3XTfc7yrsFVMSfjdCur8QULho3NI2ym6gqjexI=";
excludedPackages = [ "cmd/gotoml-test-decoder" "cmd/tomltestgen" ];
excludedPackages = [
"cmd/gotoml-test-decoder"
"cmd/gotoml-test-encoder"
"cmd/tomltestgen"
];
ldflags = [ "-s" "-w" ];

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "gojq";
version = "0.12.14";
version = "0.12.15";
src = fetchFromGitHub {
owner = "itchyny";
repo = pname;
rev = "v${version}";
hash = "sha256-mgmgOi3nMPwmcofEAVIN9nTE2oXnNN89lqT+Vi+sjzY=";
hash = "sha256-2Og1Ek8Hnzd4KTgJurWtPaqm0W6ruoJ1RN2G+l/5yIY=";
};
vendorHash = "sha256-dv4k2dIFnlJrGDTDM4mXBOpr4MF7oxms0y02ml50YyY=";
vendorHash = "sha256-tZB52w15MpAO3UnrDkhmL1M3EIcm/QwrPy9gvJycuD0=";
ldflags = [ "-s" "-w" ];

View File

@ -2,11 +2,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "twilio-cli";
version = "5.19.1";
version = "5.19.2";
src = fetchzip {
url = "https://twilio-cli-prod.s3.amazonaws.com/twilio-v${finalAttrs.version}/twilio-v${finalAttrs.version}.tar.gz";
hash = "sha256-8IZaEL+F0FMR44KCnxYNC/8mLKBlAGdmgHG7Lv90thE=";
hash = "sha256-9bb9cVd40h3b88pRw+S+wK8AG/436aCVyTTlzyCtH9w=";
};
buildInputs = [ nodejs-slim ];

View File

@ -64,11 +64,11 @@ rec {
# Vulkan developer beta driver
# See here for more information: https://developer.nvidia.com/vulkan-driver
vulkan_beta = generic rec {
version = "550.40.55";
version = "550.40.59";
persistencedVersion = "550.54.14";
settingsVersion = "550.54.14";
sha256_64bit = "sha256-i9FYgSZW0vLMEORg16+LxFBOacXXrAfWKbtCFuD8+IQ=";
openSha256 = "sha256-slb058rNKk/TEltGkdw6Shn/3SF3kjgsXQc8IyFMUB8=";
sha256_64bit = "sha256-hVwYC454vkxcK8I9bj1kp6iFS667em0c+Ral243C0J8=";
openSha256 = "sha256-/v1iVcmHhdvib54LDktNBHkcmgFxZVwQxwPdWSi0l/U=";
settingsSha256 = "sha256-m2rNASJp0i0Ez2OuqL+JpgEF0Yd8sYVCyrOoo/ln2a4=";
persistencedSha256 = "sha256-XaPN8jVTjdag9frLPgBtqvO/goB5zxeGzaTU0CdL6C4=";
url = "https://developer.nvidia.com/downloads/vulkan-beta-${lib.concatStrings (lib.splitVersion version)}-linux";

View File

@ -22,13 +22,13 @@ callPackage ./generic.nix args {
# IMPORTANT: Always use a tagged release candidate or commits from the
# zfs-<version>-staging branch, because this is tested by the OpenZFS
# maintainers.
version = "2.2.3-unstable-2024-03-21";
rev = "58211157bf866bbcdd8720e92c27297db3ba75d6";
version = "2.2.3-unstable-2024-03-30";
rev = "deb7a84231aff8d772bb4ce9fa486d1886f1a2b6";
isUnstable = true;
tests = [
nixosTests.zfs.unstable
];
hash = "sha256-zTTzHo/UDsTGp/b7BmCmy/m115HVipSG8Id/pnkUrvQ=";
hash = "sha256-d9ZoUFuHPmJmIBbJKENVTCTJ5U3As+3NYHk9ghWxCCA=";
}

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "miniflux";
version = "2.1.1";
version = "2.1.2";
src = fetchFromGitHub {
owner = "miniflux";
repo = "v2";
rev = "refs/tags/${version}";
hash = "sha256-vXSOHZt6Ov5g4fQBg0bubCfn76aaVrjw2b+LRebbV6s=";
hash = "sha256-ArGoSb4gL0Mpul9wQJWW0aaCpSgtBxqnEiv5wS1eIFY=";
};
vendorHash = "sha256-p31kwJZQMYff5Us6mXpPmxbPrEXyxU6Sipf4LKSG3wU=";
vendorHash = "sha256-FcUKlvIdXJ3fSvf02zZu4lYa6943s3l2LwFBQ/EqtyY=";
nativeBuildInputs = [ installShellFiles ];

View File

@ -2,6 +2,7 @@
, stdenv
, fetchFromGitHub
, autoPatchelfHook
, autoAddDriverRunpath
, makeWrapper
, buildNpmPackage
, cmake
@ -84,10 +85,11 @@ stdenv'.mkDerivation rec {
nativeBuildInputs = [
cmake
pkg-config
autoPatchelfHook
makeWrapper
# Avoid fighting upstream's usage of vendored ffmpeg libraries
autoPatchelfHook
] ++ lib.optionals cudaSupport [
cudaPackages.autoAddDriverRunpath
autoAddDriverRunpath
];
buildInputs = [

View File

@ -12,6 +12,7 @@
, MetalKit
, config
, autoAddDriverRunpath
, cudaSupport ? config.cudaSupport
, cudaPackages ? {}
}:
@ -42,11 +43,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
which
makeWrapper
] ++ lib.optionals cudaSupport ( with cudaPackages ;[
cuda_nvcc
] ++ lib.optionals cudaSupport [
cudaPackages.cuda_nvcc
autoAddDriverRunpath
]);
];
buildInputs = [
SDL2

View File

@ -11,40 +11,48 @@
, rsync
, makeWrapper
, gettext
, getconf
, testers
, nix-update-script
}:
python3.pkgs.buildPythonApplication rec {
let self = python3.pkgs.buildPythonApplication rec {
pname = "duplicity";
version = "0.8.23";
version = "2.2.3";
src = fetchFromGitLab {
owner = "duplicity";
repo = "duplicity";
rev = "rel.${version}";
sha256 = "0my015zc8751smjgbsysmca7hvdm96cjw5zilqn3zq971nmmrksb";
hash = "sha256-4IwKqXlG7jh1siuPT5pVgiYB+KlmCzF6+OMPT3I3yTQ=";
};
patches = [
# We use the tar binary on all platforms.
./gnutar-in-test.patch
# Our Python infrastructure runs test in installCheckPhase so we need
# to make the testing code stop assuming it is run from the source directory.
./use-installed-scripts-in-test.patch
] ++ lib.optionals stdenv.isLinux [
# Broken on Linux in Nix' build environment
./linux-disable-timezone-test.patch
./keep-pythonpath-in-testing.patch
];
preConfigure = ''
# fix version displayed by duplicity --version
# see SourceCopy in setup.py
ls
for i in bin/*.1 duplicity/__init__.py; do
substituteInPlace "$i" --replace '$version' "${version}"
done
postPatch = ''
patchShebangs duplicity/__main__.py
# don't try to use gtar on darwin/bsd
substituteInPlace testing/functional/test_restart.py \
--replace-fail 'tarcmd = "gtar"' 'tarcmd = "tar"'
'' + lib.optionalString stdenv.isDarwin ''
# tests try to access these files in the sandbox, but can't deal with EPERM
substituteInPlace testing/unit/test_globmatch.py \
--replace-fail /var/log /test/log
substituteInPlace testing/unit/test_selection.py \
--replace-fail /usr/bin /dev
# don't use /tmp/ in tests
substituteInPlace duplicity/backends/_testbackend.py \
--replace-fail '"/tmp/' 'os.environ.get("TMPDIR")+"/'
'';
disabledTests = lib.optionals stdenv.isDarwin [
# uses /tmp/
"testing/unit/test_cli_main.py::CommandlineTest::test_intermixed_args"
];
nativeBuildInputs = [
makeWrapper
gettext
@ -80,51 +88,54 @@ python3.pkgs.buildPythonApplication rec {
par2cmdline # Add 'par2' to PATH.
] ++ lib.optionals stdenv.isLinux [
util-linux # Add 'setsid' to PATH.
] ++ lib.optionals stdenv.isDarwin [
getconf
] ++ (with python3.pkgs; [
lockfile
mock
pexpect
pytest
pytest-runner
fasteners
]);
postInstall = ''
postInstall = let
binPath = lib.makeBinPath ([
gnupg
ncftp
rsync
] ++ lib.optionals stdenv.isDarwin [
getconf
]); in ''
wrapProgram $out/bin/duplicity \
--prefix PATH : "${lib.makeBinPath [ gnupg ncftp rsync ]}"
--prefix PATH : "${binPath}"
'';
preCheck = ''
# tests need writable $HOME
HOME=$PWD/.home
wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
# Add 'duplicity' to PATH for tests.
# Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
# tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
# shebang is incorrect and it fails to run inside Nix' sandbox.
# In combination with use-installed-scripts-in-test.patch, make 'setup.py
# test' use the installed 'duplicity' instead.
PATH="$out/bin:$PATH"
# Don't run developer-only checks (pep8, etc.).
export RUN_CODE_TESTS=0
# check version string
duplicity --version | grep ${version}
'' + lib.optionalString stdenv.isDarwin ''
# Work around the following error when running tests:
# > Max open files of 256 is too low, should be >= 1024.
# > Use 'ulimit -n 1024' or higher to correct.
ulimit -n 1024
'';
# TODO: Fix test failures on macOS 10.13:
#
# > OSError: out of pty devices
doCheck = !stdenv.isDarwin;
doCheck = true;
passthru = {
updateScript = nix-update-script {
extraArgs = [ "--version-regex" "rel\.(.*)" ];
};
tests.version = testers.testVersion {
package = self;
};
};
meta = with lib; {
description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
homepage = "https://duplicity.gitlab.io/duplicity-web/";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ ];
maintainers = with maintainers; [ corngood ];
};
}
};
in self

View File

@ -1,20 +0,0 @@
diff --git a/testing/functional/test_restart.py b/testing/functional/test_restart.py
index 6d972c82..e8435fd5 100644
--- a/testing/functional/test_restart.py
+++ b/testing/functional/test_restart.py
@@ -350,14 +350,7 @@ class RestartTestWithoutEncryption(RestartTest):
https://launchpad.net/bugs/929067
"""
- if platform.system().startswith(u'Linux'):
- tarcmd = u"tar"
- elif platform.system().startswith(u'Darwin'):
- tarcmd = u"gtar"
- elif platform.system().endswith(u'BSD'):
- tarcmd = u"gtar"
- else:
- raise Exception(u"Platform %s not supported by tar/gtar." % platform.platform())
+ tarcmd = u"tar"
# Intial normal backup
self.backup(u"full", u"{0}/testfiles/blocktartest".format(_runtest_dir))

View File

@ -0,0 +1,15 @@
diff --git a/testing/functional/__init__.py b/testing/functional/__init__.py
index 6c82d2c7..22163fa3 100644
--- a/testing/functional/__init__.py
+++ b/testing/functional/__init__.py
@@ -94,8 +94,8 @@ class FunctionalTestCase(DuplicityTestCase):
for item in passphrase_input:
assert isinstance(item, str), f"item {os.fsdecode(item)} in passphrase_input is not unicode"
- # set python path to be dev directory
- os.environ["PYTHONPATH"] = _top_dir
+ # prepend dev directory to python path
+ os.environ["PYTHONPATH"] = _top_dir + ":" + os.environ["PYTHONPATH"]
cmd_list = []

View File

@ -1,16 +0,0 @@
commit f0142706c377b7c133753db57b5c4c90baa2de30
Author: Guillaume Girol <symphorien+git@xlumurb.eu>
Date: Sun Jul 11 17:48:15 2021 +0200
diff --git a/testing/unit/test_statistics.py b/testing/unit/test_statistics.py
index 4be5000c..80545853 100644
--- a/testing/unit/test_statistics.py
+++ b/testing/unit/test_statistics.py
@@ -63,6 +63,7 @@ class StatsObjTest(UnitTestCase):
s1 = StatsDeltaProcess()
assert s1.get_stat(u'SourceFiles') == 0
+ @unittest.skip("Broken on Linux in Nix' build environment")
def test_get_stats_string(self):
u"""Test conversion of stat object into string"""
s = StatsObj()

View File

@ -1,63 +0,0 @@
commit ccd4dd92cd37acce1da20966ad9e4e0c7bcf1709
Author: Guillaume Girol <symphorien+git@xlumurb.eu>
Date: Sun Jul 11 12:00:00 2021 +0000
use installed duplicity when running tests
diff --git a/setup.py b/setup.py
index fa474f20..604a242a 100755
--- a/setup.py
+++ b/setup.py
@@ -205,10 +205,6 @@ class TestCommand(test):
except Exception:
pass
- os.environ[u'PATH'] = u"%s:%s" % (
- os.path.abspath(build_scripts_cmd.build_dir),
- os.environ.get(u'PATH'))
-
test.run(self)
diff --git a/testing/functional/__init__.py b/testing/functional/__init__.py
index 4221576d..3cf44945 100644
--- a/testing/functional/__init__.py
+++ b/testing/functional/__init__.py
@@ -111,7 +111,7 @@ class FunctionalTestCase(DuplicityTestCase):
run_coverage = os.environ.get(u'RUN_COVERAGE', None)
if run_coverage is not None:
cmd_list.extend([u"-m", u"coverage", u"run", u"--source=duplicity", u"-p"])
- cmd_list.extend([u"{0}/bin/duplicity".format(_top_dir)])
+ cmd_list.extend([u"duplicity"])
cmd_list.extend(options)
cmd_list.extend([u"-v0"])
cmd_list.extend([u"--no-print-statistics"])
diff --git a/testing/functional/test_log.py b/testing/functional/test_log.py
index 9dfc86a6..b9cb55db 100644
--- a/testing/functional/test_log.py
+++ b/testing/functional/test_log.py
@@ -49,9 +49,9 @@ class LogTest(FunctionalTestCase):
# Run actual duplicity command (will fail, because no arguments passed)
basepython = os.environ.get(u'TOXPYTHON', None)
if basepython is not None:
- os.system(u"{0} {1}/bin/duplicity --log-file={2} >/dev/null 2>&1".format(basepython, _top_dir, self.logfile))
+ os.system(u"{0} duplicity --log-file={1} >/dev/null 2>&1".format(basepython, self.logfile))
else:
- os.system(u"{0}/bin/duplicity --log-file={1} >/dev/null 2>&1".format(_top_dir, self.logfile))
+ os.system(u"duplicity --log-file={0} >/dev/null 2>&1".format(self.logfile))
# The format of the file should be:
# """ERROR 2
diff --git a/testing/functional/test_rdiffdir.py b/testing/functional/test_rdiffdir.py
index 0cbfdb33..47acd029 100644
--- a/testing/functional/test_rdiffdir.py
+++ b/testing/functional/test_rdiffdir.py
@@ -44,7 +44,7 @@ class RdiffdirTest(FunctionalTestCase):
basepython = os.environ.get(u'TOXPYTHON', None)
if basepython is not None:
cmd_list.extend([basepython])
- cmd_list.extend([u"{0}/bin/rdiffdir".format(_top_dir)])
+ cmd_list.extend([u"rdiffdir"])
cmd_list.extend(argstring.split())
cmdline = u" ".join([u'"%s"' % x for x in cmd_list])
self.run_cmd(cmdline)

View File

@ -1,6 +1,7 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, pkg-config
, ffmpeg
, poco
@ -19,6 +20,14 @@ stdenv.mkDerivation rec {
sha256 = "sha256-wgtyrik4Z5AXd8MHkiMuxMpGh/xcEtNqivyhvL68aac=";
};
patches = [
(fetchpatch {
name = "build-with-cxx17.patch";
url = "https://github.com/MCJack123/sanjuuni/commit/f2164bc18935bcf63ee5b0a82087bc91f7fd258d.patch";
hash = "sha256-ZmP+AmUV7fcIFqSA6e56Nt6u03leE9PX36g2z0nLswo=";
})
];
nativeBuildInputs = [
pkg-config
];

View File

@ -17,7 +17,12 @@ stdenv.mkDerivation rec {
# gcc-10. Otherwise build fails as:
# ld: bookmark.o: (.bss+0x20): multiple definition of `gBm';
# gpshare.o:(.bss+0x0): first defined here
env.NIX_CFLAGS_COMPILE = "-fcommon";
env.NIX_CFLAGS_COMPILE = toString ([ "-fcommon" ]
# these are required for the configure script to work with clang
++ lib.optionals stdenv.isDarwin [
"-Wno-implicit-int"
"-Wno-implicit-function-declaration"
]);
preConfigure = ''
find -name Makefile.in | xargs sed -i '/^TMPDIR=/d'

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