Unverified Commit 07f01fb4 authored by github-actions[bot]'s avatar github-actions[bot] Committed by GitHub
Browse files

Merge master into staging-next

parents b4bf622e 0a087411
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -56,22 +56,17 @@ Here is a simple package example. It is a pure Coq library, thus it depends on C
{ lib, mkCoqDerivation, version ? null
, coq, mathcomp, mathcomp-finmap, mathcomp-bigenough }:

let
  inherit (lib) licenses maintainers switch;
  inherit (lib.versions) range;
in

mkCoqDerivation {
  /* namePrefix leads to e.g. `name = coq8.11-mathcomp1.11-multinomials-1.5.2` */
  namePrefix = [ "coq" "mathcomp" ];
  pname = "multinomials";
  owner = "math-comp";
  inherit version;
  defaultVersion =  with versions; switch [ coq.version mathcomp.version ] [
      { cases = [ (range "8.7" "8.12")  "1.11.0" ];             out = "1.5.2"; }
  defaultVersion = with lib.versions; lib.switch [ coq.version mathcomp.version ] [
      { cases = [ (range "8.7" "8.12") (isEq "1.11") ];        out = "1.5.2"; }
      { cases = [ (range "8.7" "8.11") (range "1.8" "1.10") ]; out = "1.5.0"; }
      { cases = [ (range "8.7" "8.10") (range "1.8" "1.10") ]; out = "1.4"; }
      { cases = [ "8.6"                 (range "1.6" "1.7") ];  out = "1.1"; }
      { cases = [ (isEq "8.6")         (range "1.6" "1.7") ];  out = "1.1"; }
    ] null;
  release = {
    "1.5.2".sha256 = "15aspf3jfykp1xgsxf8knqkxv8aav2p39c2fyirw7pwsfbsv2c4s";
@@ -90,7 +85,7 @@ mkCoqDerivation {

  meta = {
    description = "A Coq/SSReflect Library for Monoidal Rings and Multinomials";
    license = licenses.cecill-c;
    license = lib.licenses.cecill-c;
  };
}
```
+10 −10
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ If a particular lock file is present, it is a strong indication of which package
It's better to try to use a Nix tool that understand the lock file.
Using a different tool might give you hard to understand error because different packages have been installed.
An example of problems that could arise can be found [here](https://github.com/NixOS/nixpkgs/pull/126629).
Upstream use NPM, but this is an attempt to package it with `yarn2nix` (that uses yarn.lock).
Upstream use npm, but this is an attempt to package it with `yarn2nix` (that uses yarn.lock).

Using a different tool forces to commit a lock file to the repository.
Those files are fairly large, so when packaging for nixpkgs, this approach does not scale well.
@@ -54,8 +54,8 @@ Those files are fairly large, so when packaging for nixpkgs, this approach does
Exceptions to this rule are:

- When you encounter one of the bugs from a Nix tool. In each of the tool specific instructions, known problems will be detailed. If you have a problem with a particular tool, then it's best to try another tool, even if this means you will have to recreate a lock file and commit it to nixpkgs. In general `yarn2nix` has less known problems and so a simple search in nixpkgs will reveal many yarn.lock files committed.
- Some lock files contain particular version of a package that has been pulled off NPM for some reason. In that case, you can recreate upstream lock (by removing the original and `npm install`, `yarn`, ...) and commit this to nixpkgs.
- The only tool that supports workspaces (a feature of NPM that helps manage sub-directories with different package.json from a single top level package.json) is `yarn2nix`. If upstream has workspaces you should try `yarn2nix`.
- Some lock files contain particular version of a package that has been pulled off npm for some reason. In that case, you can recreate upstream lock (by removing the original and `npm install`, `yarn`, ...) and commit this to nixpkgs.
- The only tool that supports workspaces (a feature of npm that helps manage sub-directories with different package.json from a single top level package.json) is `yarn2nix`. If upstream has workspaces you should try `yarn2nix`.

### Try to use upstream package.json {#javascript-upstream-package-json}

@@ -97,12 +97,12 @@ Then when building the frontend you can just symlink the node_modules directory.

## Javascript packages inside nixpkgs {#javascript-packages-nixpkgs}

The [pkgs/development/node-packages](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages) folder contains a generated collection of [NPM packages](https://npmjs.com/) that can be installed with the Nix package manager.
The [pkgs/development/node-packages](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages) folder contains a generated collection of [npm packages](https://npmjs.com/) that can be installed with the Nix package manager.

As a rule of thumb, the package set should only provide _end user_ software packages, such as command-line utilities.
Libraries should only be added to the package set if there is a non-NPM package that requires it.
Libraries should only be added to the package set if there is a non-npm package that requires it.

When it is desired to use NPM libraries in a development project, use the `node2nix` generator directly on the `package.json` configuration file of the project.
When it is desired to use npm libraries in a development project, use the `node2nix` generator directly on the `package.json` configuration file of the project.

The package set provides support for the official stable Node.js versions.
The latest stable LTS release in `nodePackages`, as well as the latest stable current release in `nodePackages_latest`.
@@ -127,7 +127,7 @@ For example, `dat` requires `node-gyp-build`, so we override its expression in [

### Adding and Updating Javascript packages in nixpkgs {#javascript-adding-or-updating-packages}

To add a package from NPM to nixpkgs:
To add a package from npm to nixpkgs:

1. Modify [pkgs/development/node-packages/node-packages.json](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/node-packages.json) to add, update or remove package entries to have it included in `nodePackages` and `nodePackages_latest`.
2. Run the script:
@@ -154,7 +154,7 @@ To add a package from NPM to nixpkgs:

For more information about the generation process, consult the [README.md](https://github.com/svanderburg/node2nix) file of the `node2nix` tool.

To update NPM packages in nixpkgs, run the same `generate.sh` script:
To update npm packages in nixpkgs, run the same `generate.sh` script:

```sh
./pkgs/development/node-packages/generate.sh
@@ -307,8 +307,8 @@ See `node2nix` [docs](https://github.com/svanderburg/node2nix) for more info.
#### Pitfalls {#javascript-node2nix-pitfalls}

- If upstream package.json does not have a "version" attribute, `node2nix` will crash. You will need to add it like shown in [the package.json section](#javascript-upstream-package-json).
- `node2nix` has some [bugs](https://github.com/svanderburg/node2nix/issues/238) related to working with lock files from NPM distributed with `nodejs_16`.
- `node2nix` does not like missing packages from NPM. If you see something like `Cannot resolve version: vue-loader-v16@undefined` then you might want to try another tool. The package might have been pulled off of NPM.
- `node2nix` has some [bugs](https://github.com/svanderburg/node2nix/issues/238) related to working with lock files from npm distributed with `nodejs_16`.
- `node2nix` does not like missing packages from npm. If you see something like `Cannot resolve version: vue-loader-v16@undefined` then you might want to try another tool. The package might have been pulled off of npm.

### yarn2nix {#javascript-yarn2nix}

+20 −0
Original line number Diff line number Diff line
@@ -7647,6 +7647,12 @@
    githubId = 22756350;
    name = "Emile Hansmaennel";
  };
  HannahMR = {
    name = "Hannah Rosenberg";
    email = "hannah@velascommerce.com";
    github = "HannahMR";
    githubId = 9088467;
  };
  hansjoergschurr = {
    email = "commits@schurr.at";
    github = "hansjoergschurr";
@@ -10107,6 +10113,11 @@
    githubId = 15855440;
    name = "Keanu Ashwell";
  };
  katanallama = {
    github = "katanallama";
    githubId = 70604257;
    name = "katanallama";
  };
  katexochen = {
    github = "katexochen";
    githubId = 49727155;
@@ -21299,6 +21310,15 @@
    githubId = 8378365;
    name = "P. R. d. O.";
  };
  wolfgangwalther = {
    name = "Wolfgang Walther";
    email = "walther@technowledgy.de";
    github = "wolfgangwalther";
    githubId = 9132420;
    keys = [{
      fingerprint = "F943 A0BC 720C 5BEF 73CD E02D B398 93FA 5F65 CAE1";
    }];
  };
  womfoo = {
    email = "kranium@gikos.net";
    github = "womfoo";
+2 −0
Original line number Diff line number Diff line
@@ -210,6 +210,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m

- `paperless`' `services.paperless.extraConfig` setting has been removed and converted to the freeform type and option named `services.paperless.settings`.

- `davfs2`' `services.davfs2.extraConfig` setting has been deprecated and converted to the freeform type option named `services.davfs2.settings` according to RFC42.

- `services.homepage-dashboard` now takes it's configuration using native Nix expressions, rather than dumping templated configurations into `/var/lib/homepage-dashboard` where they were previously managed manually. There are now new options which allow the configuration of bookmarks, services, widgets and custom CSS/JS natively in Nix.

- `hare` may now be cross-compiled. For that to work, however, `haredoc` needed to stop being built together with it. Thus, the latter is now its own package with the name of `haredoc`.
+45 −4
Original line number Diff line number Diff line
@@ -3,14 +3,22 @@
with lib;

let
  toStr = value:
    if true == value then "yes"
    else if false == value then "no"
    else toString value;

  cfg = config.services.davfs2;
  cfgFile = pkgs.writeText "davfs2.conf" ''
    dav_user ${cfg.davUser}
    dav_group ${cfg.davGroup}
  format = pkgs.formats.toml { };
  configFile = let
    settings = mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings;
  in pkgs.writeText "davfs2.conf" ''
    ${concatStringsSep "\n" settings}
    ${cfg.extraConfig}
  '';
in
{

  options.services.davfs2 = {
    enable = mkOption {
      type = types.bool;
@@ -49,13 +57,46 @@ in
      '';
      description = lib.mdDoc ''
        Extra lines appended to the configuration of davfs2.
        See {manpage}`davfs2.conf(5)` for available settings.

        **Note**: Please pass structured settings via
        {option}`settings` instead, this option
        will get deprecated in the future.
      ''  ;
    };

    settings = mkOption {
      type = types.submodule {
        freeformType = format.type;
      };
      default = {};
      example = literalExpression ''
        {
          kernel_fs = "coda";
          proxy = "foo.bar:8080";
          use_locks = 0;
        }
      '';
      description = lib.mdDoc ''
        Extra settings appended to the configuration of davfs2.
        See {manpage}`davfs2.conf(5)` for available settings.
      ''  ;
    };
  };

  config = mkIf cfg.enable {

    warnings = lib.optional (cfg.extraConfig != null) ''
      services.davfs2.extraConfig will be deprecated in future releases, please use the settings option now.
    '';

    environment.systemPackages = [ pkgs.davfs2 ];
    environment.etc."davfs2/davfs2.conf".source = cfgFile;
    environment.etc."davfs2/davfs2.conf".source = configFile;

    services.davfs2.settings = {
      dav_user = cfg.davUser;
      dav_group = cfg.davGroup;
    };

    users.groups = optionalAttrs (cfg.davGroup == "davfs2") {
      davfs2.gid = config.ids.gids.davfs2;
Loading