diff --git a/.github/workflows/update-terraform-providers.yml b/.github/workflows/update-terraform-providers.yml new file mode 100644 index 000000000000..33ebb6f14ac3 --- /dev/null +++ b/.github/workflows/update-terraform-providers.yml @@ -0,0 +1,47 @@ +name: "Update terraform-providers" + +on: + schedule: + - cron: "14 3 * * 1" + workflow_dispatch: + +jobs: + tf-providers: + if: github.repository_owner == 'NixOS' && github.ref == 'refs/heads/master' # ensure workflow_dispatch only runs on master + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: cachix/install-nix-action@v16 + - name: setup + id: setup + run: | + echo ::set-output name=title::"terraform-providers: update $(date -u +"%Y-%m-%d")" + - name: update terraform-providers + run: | + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + pushd pkgs/applications/networking/cluster/terraform-providers + ./update-all-providers + git commit -m "${{ steps.setup.outputs.title }}" providers.json + popd + - name: create PR + uses: peter-evans/create-pull-request@v3 + with: + body: | + Automatic update of terraform providers. + + Created by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action. + + Check that all providers build with `@ofborg build terraform-full` + branch: terraform-providers-update + delete-branch: false + labels: "2.status: work-in-progress" + title: ${{ steps.setup.outputs.title }} + token: ${{ secrets.GITHUB_TOKEN }} + - name: comment on failure + uses: peter-evans/create-or-update-comment@v1 + if: ${{ failure() }} + with: + issue-number: 153416 + body: | + Automatic update of terraform providers [failed](https://github.com/NixOS/nixpkgs/actions/runs/${{ github.run_id }}). diff --git a/doc/languages-frameworks/beam.section.md b/doc/languages-frameworks/beam.section.md index 6552f6cce5e5..f6c74cb01e40 100644 --- a/doc/languages-frameworks/beam.section.md +++ b/doc/languages-frameworks/beam.section.md @@ -74,7 +74,7 @@ there are 3 steps, frontend dependencies (javascript), backend dependencies (eli ##### mixRelease - Frontend dependencies (javascript) {#mix-release-javascript-deps} -for phoenix projects, inside of nixpkgs you can either use yarn2nix (mkYarnModule) or node2nix. An example with yarn2nix can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39). An example with node2nix will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage) +For phoenix projects, inside of nixpkgs you can either use yarn2nix (mkYarnModule) or node2nix. An example with yarn2nix can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39). An example with node2nix will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage) ##### mixRelease - backend dependencies (mix) {#mix-release-mix-deps} @@ -82,13 +82,13 @@ There are 2 ways to package backend dependencies. With mix2nix and with a fixed- ###### mix2nix {#mix2nix} -mix2nix is a cli tool available in nixpkgs. it will generate a nix expression from a mix.lock file. It is quite standard in the 2nix tool series. +`mix2nix` is a cli tool available in nixpkgs. it will generate a nix expression from a mix.lock file. It is quite standard in the 2nix tool series. Note that currently mix2nix can't handle git dependencies inside the mix.lock file. If you have git dependencies, you can either add them manually (see [example](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/pleroma/default.nix#L20)) or use the FOD method. The advantage of using mix2nix is that nix will know your whole dependency graph. On a dependency update, this won't trigger a full rebuild and download of all the dependencies, where FOD will do so. -practical steps: +Practical steps: - run `mix2nix > mix_deps.nix` in the upstream repo. - pass `mixNixDeps = with pkgs; import ./mix_deps.nix { inherit lib beamPackages; };` as an argument to mixRelease. diff --git a/lib/options.nix b/lib/options.nix index 5d52f065af08..53001a3113f9 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -177,7 +177,7 @@ rec { docOption = rec { loc = opt.loc; name = showOption opt.loc; - description = opt.description or (lib.warn "Option `${name}' has no description." "This option has no description."); + description = opt.description or null; declarations = filter (x: x != unknownModule) opt.declarations; internal = opt.internal or false; visible = diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index dab75cb18901..b1d41280e78c 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -952,6 +952,12 @@ githubId = 59696216; name = "Arnold Farkas"; }; + arnoutkroeze = { + email = "nixpkgs@arnoutkroeze.nl"; + github = "arnoutkroeze"; + githubId = 37151054; + name = "Arnout Kroeze"; + }; arobyn = { email = "shados@shados.net"; github = "shados"; @@ -3320,12 +3326,6 @@ github = "edlimerkaj"; githubId = 71988351; }; - edibopp = { - email = "eduard.bopp@aepsil0n.de"; - github = "edibopp"; - githubId = 3098430; - name = "Eduard Bopp"; - }; emantor = { email = "rouven+nixos@czerwinskis.de"; github = "emantor"; @@ -7821,6 +7821,12 @@ githubId = 38543128; name = "Miles Breslin"; }; + milibopp = { + email = "contact@ebopp.de"; + github = "milibopp"; + githubId = 3098430; + name = "Emilia Bopp"; + }; millerjason = { email = "mailings-github@millerjason.com"; github = "millerjason"; @@ -11611,6 +11617,12 @@ githubId = 2389333; name = "Andy Tockman"; }; + techknowlogick = { + email = "techknowlogick@gitea.io"; + github = "techknowlogick"; + githubId = 164197; + name = "techknowlogick"; + }; Technical27 = { email = "38222826+Technical27@users.noreply.github.com"; github = "Technical27"; @@ -12665,6 +12677,12 @@ email = "tim.williams.public@gmail.com"; name = "Tim Philip Williams"; }; + willcohen = { + email = "willcohen@users.noreply.github.com"; + github = "willcohen"; + githubId = 5185341; + name = "Will Cohen"; + }; winden = { email = "windenntw@gmail.com"; name = "Antonio Vargas Gonzalez"; diff --git a/nixos/doc/manual/default.nix b/nixos/doc/manual/default.nix index 31b6da01c6bd..52d500c64d33 100644 --- a/nixos/doc/manual/default.nix +++ b/nixos/doc/manual/default.nix @@ -1,4 +1,13 @@ -{ pkgs, options, config, version, revision, extraSources ? [] }: +{ pkgs +, options +, config +, version +, revision +, extraSources ? [] +, baseOptionsJSON ? null +, warningsAreErrors ? true +, prefix ? ../../.. +}: with pkgs; @@ -11,11 +20,11 @@ let # # E.g. if some `options` came from modules in ${pkgs.customModules}/nix, # you'd need to include `extraSources = [ pkgs.customModules ]` - prefixesToStrip = map (p: "${toString p}/") ([ ../../.. ] ++ extraSources); + prefixesToStrip = map (p: "${toString p}/") ([ prefix ] ++ extraSources); stripAnyPrefixes = lib.flip (lib.foldr lib.removePrefix) prefixesToStrip; optionsDoc = buildPackages.nixosOptionsDoc { - inherit options revision; + inherit options revision baseOptionsJSON warningsAreErrors; transformOptions = opt: opt // { # Clean up declaration sites to not refer to the NixOS source tree. declarations = map stripAnyPrefixes opt.declarations; @@ -161,7 +170,7 @@ let in rec { inherit generatedSources; - inherit (optionsDoc) optionsJSON optionsDocBook; + inherit (optionsDoc) optionsJSON optionsNix optionsDocBook; # Generate the NixOS manual. manualHTML = runCommand "nixos-manual-html" diff --git a/nixos/doc/manual/development/meta-attributes.section.md b/nixos/doc/manual/development/meta-attributes.section.md index ca4ba007f7dc..946c08efd0a3 100644 --- a/nixos/doc/manual/development/meta-attributes.section.md +++ b/nixos/doc/manual/development/meta-attributes.section.md @@ -5,7 +5,7 @@ extra information. Module meta attributes are defined in the `meta.nix` special module. `meta` is a top level attribute like `options` and `config`. Available -meta-attributes are `maintainers` and `doc`. +meta-attributes are `maintainers`, `doc`, and `buildDocsInSandbox`. Each of the meta-attributes must be defined at most once per module file. @@ -24,6 +24,7 @@ file. meta = { maintainers = with lib.maintainers; [ ericsagnes ]; doc = ./default.xml; + buildDocsInSandbox = true; }; } ``` @@ -38,3 +39,28 @@ file. ```ShellSession $ nix-build nixos/release.nix -A manual.x86_64-linux ``` + +- `buildDocsInSandbox` indicates whether the option documentation for the + module can be built in a derivation sandbox. This option is currently only + honored for modules shipped by nixpkgs. User modules and modules taken from + `NIXOS_EXTRA_MODULE_PATH` are always built outside of the sandbox, as has + been the case in previous releases. + + Building NixOS option documentation in a sandbox allows caching of the built + documentation, which greatly decreases the amount of time needed to evaluate + a system configuration that has NixOS documentation enabled. The sandbox also + restricts which attributes may be referenced by documentation attributes + (such as option descriptions) to the `options` and `lib` module arguments and + the `pkgs.formats` attribute of the `pkgs` argument, `config` and the rest of + `pkgs` are disallowed and will cause doc build failures when used. This + restriction is necessary because we cannot reproduce the full nixpkgs + instantiation with configuration and overlays from a system configuration + inside the sandbox. The `options` argument only includes options of modules + that are also built inside the sandbox, referencing an option of a module + that isn't built in the sandbox is also forbidden. + + The default is `true` and should usually not be changed; set it to `false` + only if the module requires access to `pkgs` in its documentation (e.g. + because it loads information from a linked package to build an option type) + or if its documentation depends on other modules that also aren't sandboxed + (e.g. by using types defined in the other module). diff --git a/nixos/doc/manual/from_md/development/meta-attributes.section.xml b/nixos/doc/manual/from_md/development/meta-attributes.section.xml index f535d94602bd..1eb6e0f30368 100644 --- a/nixos/doc/manual/from_md/development/meta-attributes.section.xml +++ b/nixos/doc/manual/from_md/development/meta-attributes.section.xml @@ -8,8 +8,8 @@ meta is a top level attribute like options and config. Available - meta-attributes are maintainers and - doc. + meta-attributes are maintainers, + doc, and buildDocsInSandbox. Each of the meta-attributes must be defined at most once per module @@ -29,6 +29,7 @@ meta = { maintainers = with lib.maintainers; [ ericsagnes ]; doc = ./default.xml; + buildDocsInSandbox = true; }; } @@ -51,5 +52,44 @@ $ nix-build nixos/release.nix -A manual.x86_64-linux + + + buildDocsInSandbox indicates whether the + option documentation for the module can be built in a derivation + sandbox. This option is currently only honored for modules + shipped by nixpkgs. User modules and modules taken from + NIXOS_EXTRA_MODULE_PATH are always built + outside of the sandbox, as has been the case in previous + releases. + + + Building NixOS option documentation in a sandbox allows caching + of the built documentation, which greatly decreases the amount + of time needed to evaluate a system configuration that has NixOS + documentation enabled. The sandbox also restricts which + attributes may be referenced by documentation attributes (such + as option descriptions) to the options and + lib module arguments and the + pkgs.formats attribute of the + pkgs argument, config and + the rest of pkgs are disallowed and will + cause doc build failures when used. This restriction is + necessary because we cannot reproduce the full nixpkgs + instantiation with configuration and overlays from a system + configuration inside the sandbox. The options + argument only includes options of modules that are also built + inside the sandbox, referencing an option of a module that isn’t + built in the sandbox is also forbidden. + + + The default is true and should usually not be + changed; set it to false only if the module + requires access to pkgs in its documentation + (e.g. because it loads information from a linked package to + build an option type) or if its documentation depends on other + modules that also aren’t sandboxed (e.g. by using types defined + in the other module). + + diff --git a/nixos/lib/eval-cacheable-options.nix b/nixos/lib/eval-cacheable-options.nix new file mode 100644 index 000000000000..c3ba2ce66375 --- /dev/null +++ b/nixos/lib/eval-cacheable-options.nix @@ -0,0 +1,53 @@ +{ libPath +, pkgsLibPath +, nixosPath +, modules +, stateVersion +, release +}: + +let + lib = import libPath; + modulesPath = "${nixosPath}/modules"; + # dummy pkgs set that contains no packages, only `pkgs.lib` from the full set. + # not having `pkgs.lib` causes all users of `pkgs.formats` to fail. + pkgs = import pkgsLibPath { + inherit lib; + pkgs = null; + }; + utils = import "${nixosPath}/lib/utils.nix" { + inherit config lib; + pkgs = null; + }; + # this is used both as a module and as specialArgs. + # as a module it sets the _module special values, as specialArgs it makes `config` + # unusable. this causes documentation attributes depending on `config` to fail. + config = { + _module.check = false; + _module.args = {}; + system.stateVersion = stateVersion; + }; + eval = lib.evalModules { + modules = (map (m: "${modulesPath}/${m}") modules) ++ [ + config + ]; + specialArgs = { + inherit config pkgs utils; + }; + }; + docs = import "${nixosPath}/doc/manual" { + pkgs = pkgs // { + inherit lib; + # duplicate of the declaration in all-packages.nix + buildPackages.nixosOptionsDoc = attrs: + (import "${nixosPath}/lib/make-options-doc") + ({ inherit pkgs lib; } // attrs); + }; + config = config.config; + options = eval.options; + version = release; + revision = "release-${release}"; + prefix = modulesPath; + }; +in + docs.optionsNix diff --git a/nixos/lib/make-options-doc/default.nix b/nixos/lib/make-options-doc/default.nix index 44bc25be9238..57652dd5db1e 100644 --- a/nixos/lib/make-options-doc/default.nix +++ b/nixos/lib/make-options-doc/default.nix @@ -21,6 +21,13 @@ , options , transformOptions ? lib.id # function for additional tranformations of the options , revision ? "" # Specify revision for the options +# a set of options the docs we are generating will be merged into, as if by recursiveUpdate. +# used to split the options doc build into a static part (nixos/modules) and a dynamic part +# (non-nixos modules imported via configuration.nix, other module sources). +, baseOptionsJSON ? null +# instead of printing warnings for eg options with missing descriptions (which may be lost +# by nix build unless -L is given), emit errors instead and fail the build +, warningsAreErrors ? true }: let @@ -51,10 +58,15 @@ let # ../../../lib/options.nix influences. # # Each element of `relatedPackages` can be either - # - a string: that will be interpreted as an attribute name from `pkgs`, - # - a list: that will be interpreted as an attribute path from `pkgs`, - # - an attrset: that can specify `name`, `path`, `package`, `comment` + # - a string: that will be interpreted as an attribute name from `pkgs` and turned into a link + # to search.nixos.org, + # - a list: that will be interpreted as an attribute path from `pkgs` and turned into a link + # to search.nixos.org, + # - an attrset: that can specify `name`, `path`, `comment` # (either of `name`, `path` is required, the rest are optional). + # + # NOTE: No checks against `pkgs` are made to ensure that the referenced package actually exists. + # Such checks are not compatible with option docs caching. genRelatedPackages = packages: optName: let unpack = p: if lib.isString p then { name = p; } @@ -64,16 +76,16 @@ let let title = args.title or null; name = args.name or (lib.concatStringsSep "." args.path); - path = args.path or [ args.name ]; - package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}' found while evaluating `relatedPackages' of option `${optName}'") pkgs); - in "" - + "${lib.optionalString (title != null) "${title} aka "}pkgs.${name} (${package.meta.name})" - + lib.optionalString (!package.meta.available) " [UNAVAILABLE]" - + ": ${package.meta.description or "???"}." - + lib.optionalString (args ? comment) "\n${args.comment}" - # Lots of `longDescription's break DocBook, so we just wrap them into - + lib.optionalString (package.meta ? longDescription) "\n${package.meta.longDescription}" - + ""; + in '' + + + + ${lib.optionalString (title != null) "${title} aka "}pkgs.${name} + + + ${lib.optionalString (args ? comment) "${args.comment}"} + + ''; in "${lib.concatStringsSep "\n" (map (p: describe (unpack p)) packages)}"; # Remove invisible and internal options. @@ -99,13 +111,24 @@ in rec { optionsJSON = pkgs.runCommand "options.json" { meta.description = "List of NixOS options in JSON format"; buildInputs = [ pkgs.brotli ]; + options = builtins.toFile "options.json" + (builtins.unsafeDiscardStringContext (builtins.toJSON optionsNix)); } '' # Export list of options in different format. dst=$out/share/doc/nixos mkdir -p $dst - cp ${builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON optionsNix))} $dst/options.json + ${ + if baseOptionsJSON == null + then "cp $options $dst/options.json" + else '' + ${pkgs.python3Minimal}/bin/python ${./mergeJSON.py} \ + ${lib.optionalString warningsAreErrors "--warnings-are-errors"} \ + ${baseOptionsJSON} $options \ + > $dst/options.json + '' + } brotli -9 < $dst/options.json > $dst/options.json.br diff --git a/nixos/lib/make-options-doc/mergeJSON.py b/nixos/lib/make-options-doc/mergeJSON.py new file mode 100644 index 000000000000..029787a31586 --- /dev/null +++ b/nixos/lib/make-options-doc/mergeJSON.py @@ -0,0 +1,86 @@ +import collections +import json +import sys +from typing import Any, Dict, List + +JSON = Dict[str, Any] + +class Key: + def __init__(self, path: List[str]): + self.path = path + def __hash__(self): + result = 0 + for id in self.path: + result ^= hash(id) + return result + def __eq__(self, other): + return type(self) is type(other) and self.path == other.path + +Option = collections.namedtuple('Option', ['name', 'value']) + +# pivot a dict of options keyed by their display name to a dict keyed by their path +def pivot(options: Dict[str, JSON]) -> Dict[Key, Option]: + result: Dict[Key, Option] = dict() + for (name, opt) in options.items(): + result[Key(opt['loc'])] = Option(name, opt) + return result + +# pivot back to indexed-by-full-name +# like the docbook build we'll just fail if multiple options with differing locs +# render to the same option name. +def unpivot(options: Dict[Key, Option]) -> Dict[str, JSON]: + result: Dict[str, Dict] = dict() + for (key, opt) in options.items(): + if opt.name in result: + raise RuntimeError( + 'multiple options with colliding ids found', + opt.name, + result[opt.name]['loc'], + opt.value['loc'], + ) + result[opt.name] = opt.value + return result + +warningsAreErrors = sys.argv[1] == "--warnings-are-errors" +optOffset = 1 if warningsAreErrors else 0 +options = pivot(json.load(open(sys.argv[1 + optOffset], 'r'))) +overrides = pivot(json.load(open(sys.argv[2 + optOffset], 'r'))) + +# fix up declaration paths in lazy options, since we don't eval them from a full nixpkgs dir +for (k, v) in options.items(): + v.value['declarations'] = list(map(lambda s: f'nixos/modules/{s}', v.value['declarations'])) + +# merge both descriptions +for (k, v) in overrides.items(): + cur = options.setdefault(k, v).value + for (ok, ov) in v.value.items(): + if ok == 'declarations': + decls = cur[ok] + for d in ov: + if d not in decls: + decls += [d] + elif ok == "type": + # ignore types of placeholder options + if ov != "_unspecified" or cur[ok] == "_unspecified": + cur[ok] = ov + elif ov is not None or cur.get(ok, None) is None: + cur[ok] = ov + +# check that every option has a description +hasWarnings = False +for (k, v) in options.items(): + if v.value.get('description', None) is None: + severity = "error" if warningsAreErrors else "warning" + hasWarnings = True + print(f"\x1b[1;31m{severity}: option {v.name} has no description\x1b[0m", file=sys.stderr) + v.value['description'] = "This option has no description." +if hasWarnings and warningsAreErrors: + print( + "\x1b[1;31m" + + "Treating warnings as errors. Set documentation.nixos.options.warningsAreErrors " + + "to false to ignore these warnings." + + "\x1b[0m", + file=sys.stderr) + sys.exit(1) + +json.dump(unpivot(options), fp=sys.stdout) diff --git a/nixos/modules/i18n/input-method/fcitx.nix b/nixos/modules/i18n/input-method/fcitx.nix index 57960cc365b6..7738581b893a 100644 --- a/nixos/modules/i18n/input-method/fcitx.nix +++ b/nixos/modules/i18n/input-method/fcitx.nix @@ -40,4 +40,7 @@ in }; services.xserver.displayManager.sessionCommands = "${fcitxPackage}/bin/fcitx"; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/i18n/input-method/ibus.nix b/nixos/modules/i18n/input-method/ibus.nix index 92f8c64338a4..c5b0cbc21502 100644 --- a/nixos/modules/i18n/input-method/ibus.nix +++ b/nixos/modules/i18n/input-method/ibus.nix @@ -80,4 +80,7 @@ in ibusPackage ]; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/i18n/input-method/kime.nix b/nixos/modules/i18n/input-method/kime.nix index e462cae2437b..729a665614ae 100644 --- a/nixos/modules/i18n/input-method/kime.nix +++ b/nixos/modules/i18n/input-method/kime.nix @@ -45,5 +45,7 @@ in environment.etc."xdg/kime/config.yaml".text = replaceStrings [ "\\\\" ] [ "\\" ] (builtins.toJSON cfg.config); }; -} + # uses attributes of the linked package + meta.buildDocsInSandbox = false; +} diff --git a/nixos/modules/misc/documentation.nix b/nixos/modules/misc/documentation.nix index bb294addccd9..70152c5d6624 100644 --- a/nixos/modules/misc/documentation.nix +++ b/nixos/modules/misc/documentation.nix @@ -1,19 +1,35 @@ -{ config, lib, pkgs, extendModules, noUserModules, ... }: +{ config, options, lib, pkgs, utils, modules, baseModules, extraModules, modulesPath, ... }: with lib; let cfg = config.documentation; + allOpts = options; /* Modules for which to show options even when not imported. */ extraDocModules = [ ../virtualisation/qemu-vm.nix ]; - /* For the purpose of generating docs, evaluate options with each derivation - in `pkgs` (recursively) replaced by a fake with path "\${pkgs.attribute.path}". - It isn't perfect, but it seems to cover a vast majority of use cases. - Caveat: even if the package is reached by a different means, - the path above will be shown and not e.g. `${config.services.foo.package}`. */ + canCacheDocs = m: + let + f = import m; + instance = f (mapAttrs (n: _: abort "evaluating ${n} for `meta` failed") (functionArgs f)); + in + cfg.nixos.options.splitBuild + && builtins.isPath m + && isFunction f + && instance ? options + && instance.meta.buildDocsInSandbox or true; + + docModules = + let + p = partition canCacheDocs (baseModules ++ extraDocModules); + in + { + lazy = p.right; + eager = p.wrong ++ optionals cfg.nixos.includeAllModules (extraModules ++ modules); + }; + manual = import ../../doc/manual rec { inherit pkgs config; version = config.system.nixos.release; @@ -21,10 +37,17 @@ let extraSources = cfg.nixos.extraModuleSources; options = let - extendNixOS = if cfg.nixos.includeAllModules then extendModules else noUserModules.extendModules; - scrubbedEval = extendNixOS { - modules = extraDocModules; - specialArgs.pkgs = scrubDerivations "pkgs" pkgs; + scrubbedEval = evalModules { + modules = [ { + _module.check = false; + } ] ++ docModules.eager; + specialArgs = { + pkgs = scrubDerivations "pkgs" pkgs; + # allow access to arbitrary options for eager modules, eg for getting + # option types from lazy modules + options = allOpts; + inherit modulesPath utils; + }; }; scrubDerivations = namePrefix: pkgSet: mapAttrs (name: value: @@ -36,6 +59,53 @@ let ) pkgSet; in scrubbedEval.options; + baseOptionsJSON = + let + filter = + builtins.filterSource + (n: t: + (t == "directory" -> baseNameOf n != "tests") + && (t == "file" -> hasSuffix ".nix" n) + ); + pull = dir: + if isStorePath pkgs.path + then "${builtins.storePath pkgs.path}/${dir}" + else filter "${toString pkgs.path}/${dir}"; + in + pkgs.runCommand "lazy-options.json" { + libPath = pull "lib"; + pkgsLibPath = pull "pkgs/pkgs-lib"; + nixosPath = pull "nixos"; + modules = map (p: ''"${removePrefix "${modulesPath}/" (toString p)}"'') docModules.lazy; + } '' + export NIX_STORE_DIR=$TMPDIR/store + export NIX_STATE_DIR=$TMPDIR/state + ${pkgs.nix}/bin/nix-instantiate \ + --show-trace \ + --eval --json --strict \ + --argstr libPath "$libPath" \ + --argstr pkgsLibPath "$pkgsLibPath" \ + --argstr nixosPath "$nixosPath" \ + --arg modules "[ $modules ]" \ + --argstr stateVersion "${options.system.stateVersion.default}" \ + --argstr release "${config.system.nixos.release}" \ + $nixosPath/lib/eval-cacheable-options.nix > $out \ + || { + echo -en "\e[1;31m" + echo 'Cacheable portion of option doc build failed.' + echo 'Usually this means that an option attribute that ends up in documentation (eg' \ + '`default` or `description`) depends on the restricted module arguments' \ + '`config` or `pkgs`.' + echo + echo 'Rebuild your configuration with `--show-trace` to find the offending' \ + 'location. Remove the references to restricted arguments (eg by escaping' \ + 'their antiquotations or adding a `defaultText`) or disable the sandboxed' \ + 'build for the failing module by setting `meta.buildDocsInSandbox = false`.' + echo -en "\e[0m" + exit 1 + } >&2 + ''; + inherit (cfg.nixos.options) warningsAreErrors; }; @@ -178,6 +248,25 @@ in ''; }; + nixos.options.splitBuild = mkOption { + type = types.bool; + default = true; + description = '' + Whether to split the option docs build into a cacheable and an uncacheable part. + Splitting the build can substantially decrease the amount of time needed to build + the manual, but some user modules may be incompatible with this splitting. + ''; + }; + + nixos.options.warningsAreErrors = mkOption { + type = types.bool; + default = true; + description = '' + Treat warning emitted during the option documentation build (eg for missing option + descriptions) as errors. + ''; + }; + nixos.includeAllModules = mkOption { type = types.bool; default = false; diff --git a/nixos/modules/misc/meta.nix b/nixos/modules/misc/meta.nix index 3dd97cbec235..8e689a63f6bf 100644 --- a/nixos/modules/misc/meta.nix +++ b/nixos/modules/misc/meta.nix @@ -54,6 +54,21 @@ in ''; }; + buildDocsInSandbox = mkOption { + type = types.bool // { + merge = loc: defs: defs; + }; + internal = true; + default = true; + description = '' + Whether to include this module in the split options doc build. + Disable if the module references `config`, `pkgs` or other module + arguments that cannot be evaluated as constants. + + This option should be defined at most once per module. + ''; + }; + }; }; diff --git a/nixos/modules/misc/nixpkgs.nix b/nixos/modules/misc/nixpkgs.nix index 08bc4398555b..2e0c8e4cf2c4 100644 --- a/nixos/modules/misc/nixpkgs.nix +++ b/nixos/modules/misc/nixpkgs.nix @@ -248,4 +248,7 @@ in ) ]; }; + + # needs a full nixpkgs path to import nixpkgs + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/misc/version.nix b/nixos/modules/misc/version.nix index fc0d65d5148e..6c526f6d4f2d 100644 --- a/nixos/modules/misc/version.nix +++ b/nixos/modules/misc/version.nix @@ -119,4 +119,6 @@ in }; + # uses version info nixpkgs, which requires a full nixpkgs path + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/programs/gnupg.nix b/nixos/modules/programs/gnupg.nix index fe5d7bd834b2..b41f30287ea5 100644 --- a/nixos/modules/programs/gnupg.nix +++ b/nixos/modules/programs/gnupg.nix @@ -149,4 +149,6 @@ in ]; }; + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/backup/sanoid.nix b/nixos/modules/services/backup/sanoid.nix index e70063415ec0..5eb031b2e9f0 100644 --- a/nixos/modules/services/backup/sanoid.nix +++ b/nixos/modules/services/backup/sanoid.nix @@ -51,7 +51,10 @@ let datasetOptions = rec { use_template = mkOption { description = "Names of the templates to use for this dataset."; - type = types.listOf (types.enum (attrNames cfg.templates)); + type = types.listOf (types.str // { + check = (types.enum (attrNames cfg.templates)).check; + description = "configured template name"; + }); default = [ ]; }; useTemplate = use_template; diff --git a/nixos/modules/services/cluster/kubernetes/controller-manager.nix b/nixos/modules/services/cluster/kubernetes/controller-manager.nix index ed25715fab7d..6d54659720cb 100644 --- a/nixos/modules/services/cluster/kubernetes/controller-manager.nix +++ b/nixos/modules/services/cluster/kubernetes/controller-manager.nix @@ -6,6 +6,7 @@ let top = config.services.kubernetes; otop = options.services.kubernetes; cfg = top.controllerManager; + klib = options.services.kubernetes.lib.default; in { imports = [ @@ -56,7 +57,7 @@ in type = int; }; - kubeconfig = top.lib.mkKubeConfigOptions "Kubernetes controller manager"; + kubeconfig = klib.mkKubeConfigOptions "Kubernetes controller manager"; leaderElect = mkOption { description = "Whether to start leader election before executing main loop."; @@ -129,7 +130,7 @@ in "--cluster-cidr=${cfg.clusterCidr}"} \ ${optionalString (cfg.featureGates != []) "--feature-gates=${concatMapStringsSep "," (feature: "${feature}=true") cfg.featureGates}"} \ - --kubeconfig=${top.lib.mkKubeConfig "kube-controller-manager" cfg.kubeconfig} \ + --kubeconfig=${klib.mkKubeConfig "kube-controller-manager" cfg.kubeconfig} \ --leader-elect=${boolToString cfg.leaderElect} \ ${optionalString (cfg.rootCaFile!=null) "--root-ca-file=${cfg.rootCaFile}"} \ @@ -156,7 +157,7 @@ in path = top.path; }; - services.kubernetes.pki.certs = with top.lib; { + services.kubernetes.pki.certs = with klib; { controllerManager = mkCert { name = "kube-controller-manager"; CN = "kube-controller-manager"; diff --git a/nixos/modules/services/cluster/kubernetes/default.nix b/nixos/modules/services/cluster/kubernetes/default.nix index 227c69fec36d..715c88ad88c7 100644 --- a/nixos/modules/services/cluster/kubernetes/default.nix +++ b/nixos/modules/services/cluster/kubernetes/default.nix @@ -193,12 +193,17 @@ in { inherit mkKubeConfigOptions; }; type = types.attrs; + readOnly = true; + internal = true; }; secretsPath = mkOption { description = "Default location for kubernetes secrets. Not a store location."; type = types.path; default = cfg.dataDir + "/secrets"; + defaultText = literalExpression '' + config.${opt.dataDir} + "/secrets" + ''; }; }; diff --git a/nixos/modules/services/cluster/kubernetes/kubelet.nix b/nixos/modules/services/cluster/kubernetes/kubelet.nix index 3e8eac96f6ba..2d58547ce4ce 100644 --- a/nixos/modules/services/cluster/kubernetes/kubelet.nix +++ b/nixos/modules/services/cluster/kubernetes/kubelet.nix @@ -6,6 +6,7 @@ let top = config.services.kubernetes; otop = options.services.kubernetes; cfg = top.kubelet; + klib = options.services.kubernetes.lib.default; cniConfig = if cfg.cni.config != [] && cfg.cni.configDir != null then @@ -27,7 +28,7 @@ let config.Cmd = ["/bin/pause"]; }; - kubeconfig = top.lib.mkKubeConfig "kubelet" cfg.kubeconfig; + kubeconfig = klib.mkKubeConfig "kubelet" cfg.kubeconfig; manifestPath = "kubernetes/manifests"; @@ -177,7 +178,7 @@ in type = str; }; - kubeconfig = top.lib.mkKubeConfigOptions "Kubelet"; + kubeconfig = klib.mkKubeConfigOptions "Kubelet"; manifests = mkOption { description = "List of manifests to bootstrap with kubelet (only pods can be created as manifest entry)"; @@ -358,7 +359,7 @@ in services.kubernetes.kubelet.hostname = with config.networking; mkDefault (hostName + optionalString (domain != null) ".${domain}"); - services.kubernetes.pki.certs = with top.lib; { + services.kubernetes.pki.certs = with klib; { kubelet = mkCert { name = "kubelet"; CN = top.kubelet.hostname; diff --git a/nixos/modules/services/cluster/kubernetes/pki.nix b/nixos/modules/services/cluster/kubernetes/pki.nix index 76ab03cd520b..00d572a50988 100644 --- a/nixos/modules/services/cluster/kubernetes/pki.nix +++ b/nixos/modules/services/cluster/kubernetes/pki.nix @@ -1,10 +1,11 @@ -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: with lib; let top = config.services.kubernetes; cfg = top.pki; + klib = options.services.kubernetes.lib; csrCA = pkgs.writeText "kube-pki-cacert-csr.json" (builtins.toJSON { key = { @@ -29,7 +30,7 @@ let cfsslAPITokenLength = 32; clusterAdminKubeconfig = with cfg.certs.clusterAdmin; - top.lib.mkKubeConfig "cluster-admin" { + klib.mkKubeConfig "cluster-admin" { server = top.apiserverAddress; certFile = cert; keyFile = key; @@ -250,7 +251,7 @@ in # - it would be better with a more Nix-oriented way of managing addons systemd.services.kube-addon-manager = mkIf top.addonManager.enable (mkMerge [{ environment.KUBECONFIG = with cfg.certs.addonManager; - top.lib.mkKubeConfig "addon-manager" { + klib.mkKubeConfig "addon-manager" { server = top.apiserverAddress; certFile = cert; keyFile = key; @@ -343,7 +344,7 @@ in ''; services.flannel = with cfg.certs.flannelClient; { - kubeconfig = top.lib.mkKubeConfig "flannel" { + kubeconfig = klib.mkKubeConfig "flannel" { server = top.apiserverAddress; certFile = cert; keyFile = key; diff --git a/nixos/modules/services/cluster/kubernetes/proxy.nix b/nixos/modules/services/cluster/kubernetes/proxy.nix index 5f3da034120b..986301f6bd95 100644 --- a/nixos/modules/services/cluster/kubernetes/proxy.nix +++ b/nixos/modules/services/cluster/kubernetes/proxy.nix @@ -6,6 +6,7 @@ let top = config.services.kubernetes; otop = options.services.kubernetes; cfg = top.proxy; + klib = options.services.kubernetes.lib.default; in { imports = [ @@ -43,7 +44,7 @@ in type = str; }; - kubeconfig = top.lib.mkKubeConfigOptions "Kubernetes proxy"; + kubeconfig = klib.mkKubeConfigOptions "Kubernetes proxy"; verbosity = mkOption { description = '' @@ -72,7 +73,7 @@ in ${optionalString (cfg.featureGates != []) "--feature-gates=${concatMapStringsSep "," (feature: "${feature}=true") cfg.featureGates}"} \ --hostname-override=${cfg.hostname} \ - --kubeconfig=${top.lib.mkKubeConfig "kube-proxy" cfg.kubeconfig} \ + --kubeconfig=${klib.mkKubeConfig "kube-proxy" cfg.kubeconfig} \ ${optionalString (cfg.verbosity != null) "--v=${toString cfg.verbosity}"} \ ${cfg.extraOpts} ''; @@ -88,7 +89,7 @@ in services.kubernetes.proxy.hostname = with config.networking; mkDefault hostName; services.kubernetes.pki.certs = { - kubeProxyClient = top.lib.mkCert { + kubeProxyClient = klib.mkCert { name = "kube-proxy-client"; CN = "system:kube-proxy"; action = "systemctl restart kube-proxy.service"; diff --git a/nixos/modules/services/cluster/kubernetes/scheduler.nix b/nixos/modules/services/cluster/kubernetes/scheduler.nix index 87263ee72fa4..442e3fe3a69f 100644 --- a/nixos/modules/services/cluster/kubernetes/scheduler.nix +++ b/nixos/modules/services/cluster/kubernetes/scheduler.nix @@ -6,6 +6,7 @@ let top = config.services.kubernetes; otop = options.services.kubernetes; cfg = top.scheduler; + klib = options.services.kubernetes.lib.default; in { ###### interface @@ -32,7 +33,7 @@ in type = listOf str; }; - kubeconfig = top.lib.mkKubeConfigOptions "Kubernetes scheduler"; + kubeconfig = klib.mkKubeConfigOptions "Kubernetes scheduler"; leaderElect = mkOption { description = "Whether to start leader election before executing main loop."; @@ -69,7 +70,7 @@ in --address=${cfg.address} \ ${optionalString (cfg.featureGates != []) "--feature-gates=${concatMapStringsSep "," (feature: "${feature}=true") cfg.featureGates}"} \ - --kubeconfig=${top.lib.mkKubeConfig "kube-scheduler" cfg.kubeconfig} \ + --kubeconfig=${klib.mkKubeConfig "kube-scheduler" cfg.kubeconfig} \ --leader-elect=${boolToString cfg.leaderElect} \ --port=${toString cfg.port} \ ${optionalString (cfg.verbosity != null) "--v=${toString cfg.verbosity}"} \ @@ -87,7 +88,7 @@ in }; services.kubernetes.pki.certs = { - schedulerClient = top.lib.mkCert { + schedulerClient = klib.mkCert { name = "kube-scheduler-client"; CN = "system:kube-scheduler"; action = "systemctl restart kube-scheduler.service"; diff --git a/nixos/modules/services/databases/couchdb.nix b/nixos/modules/services/databases/couchdb.nix index 266bc82b6967..742e605d224d 100644 --- a/nixos/modules/services/databases/couchdb.nix +++ b/nixos/modules/services/databases/couchdb.nix @@ -1,9 +1,10 @@ -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: with lib; let cfg = config.services.couchdb; + opt = options.services.couchdb; configFile = pkgs.writeText "couchdb.ini" ( '' [couchdb] @@ -153,6 +154,7 @@ in { argsFile = mkOption { type = types.path; default = "${cfg.package}/etc/vm.args"; + defaultText = literalExpression ''"config.${opt.package}/etc/vm.args"''; description = '' vm.args configuration. Overrides Couchdb's Erlang VM parameters file. ''; diff --git a/nixos/modules/services/desktops/gvfs.nix b/nixos/modules/services/desktops/gvfs.nix index cc9a46032705..27864fad4f26 100644 --- a/nixos/modules/services/desktops/gvfs.nix +++ b/nixos/modules/services/desktops/gvfs.nix @@ -54,7 +54,7 @@ in systemd.packages = [ cfg.package ]; - services.udev.packages = [ pkgs.libmtp ]; + services.udev.packages = [ pkgs.libmtp.out ]; # Needed for unwrapped applications environment.variables.GIO_EXTRA_MODULES = [ "${cfg.package}/lib/gio/modules" ]; diff --git a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix index 4be3e881a9dc..803438b6f7e5 100644 --- a/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix +++ b/nixos/modules/services/desktops/pipewire/pipewire-media-session.nix @@ -29,6 +29,8 @@ in { meta = { maintainers = teams.freedesktop.members; + # uses attributes of the linked package + buildDocsInSandbox = false; }; ###### interface diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix index 55755ecd6457..372b4785f185 100644 --- a/nixos/modules/services/desktops/pipewire/pipewire.nix +++ b/nixos/modules/services/desktops/pipewire/pipewire.nix @@ -40,6 +40,8 @@ in { meta = { maintainers = teams.freedesktop.members; + # uses attributes of the linked package + buildDocsInSandbox = false; }; ###### interface diff --git a/nixos/modules/services/misc/matrix-appservice-irc.nix b/nixos/modules/services/misc/matrix-appservice-irc.nix index 02627e51c932..b041c9c82c56 100644 --- a/nixos/modules/services/misc/matrix-appservice-irc.nix +++ b/nixos/modules/services/misc/matrix-appservice-irc.nix @@ -226,4 +226,7 @@ in { isSystemUser = true; }; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/misc/sourcehut/default.nix b/nixos/modules/services/misc/sourcehut/default.nix index 1bd21c278e00..21551d7d5f03 100644 --- a/nixos/modules/services/misc/sourcehut/default.nix +++ b/nixos/modules/services/misc/sourcehut/default.nix @@ -678,7 +678,7 @@ in rev = "ff96a0fa5635770390b184ae74debea75c3fd534"; ref = "nixos-unstable"; }; - image_from_nixpkgs = (import ("${pkgs.sourcehut.buildsrht}/lib/images/nixos/image.nix") { + image_from_nixpkgs = (import ("''${pkgs.sourcehut.buildsrht}/lib/images/nixos/image.nix") { pkgs = (import pkgs_unstable {}); }); in @@ -696,6 +696,7 @@ in package = mkOption { type = types.package; default = pkgs.git; + defaultText = literalExpression "pkgs.git"; example = literalExpression "pkgs.gitFull"; description = '' Git package for git.sr.ht. This can help silence collisions. @@ -712,6 +713,7 @@ in package = mkOption { type = types.package; default = pkgs.mercurial; + defaultText = literalExpression "pkgs.mercurial"; description = '' Mercurial package for hg.sr.ht. This can help silence collisions. ''; diff --git a/nixos/modules/services/monitoring/prometheus/default.nix b/nixos/modules/services/monitoring/prometheus/default.nix index f20b8dde1abd..b36b5fd06504 100644 --- a/nixos/modules/services/monitoring/prometheus/default.nix +++ b/nixos/modules/services/monitoring/prometheus/default.nix @@ -251,6 +251,13 @@ let promTypes.scrape_config = types.submodule { options = { + authorization = mkOption { + type = types.attrs; + default = {}; + description = '' + Sets the `Authorization` header on every scrape request with the configured credentials. + ''; + }; job_name = mkOption { type = types.str; description = '' diff --git a/nixos/modules/services/networking/dnscrypt-proxy2.nix b/nixos/modules/services/networking/dnscrypt-proxy2.nix index dc6a019e9b77..316e6e37f9da 100644 --- a/nixos/modules/services/networking/dnscrypt-proxy2.nix +++ b/nixos/modules/services/networking/dnscrypt-proxy2.nix @@ -118,4 +118,7 @@ in }; }; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/networking/kea.nix b/nixos/modules/services/networking/kea.nix index 4da47f575f79..17b4eb2e283b 100644 --- a/nixos/modules/services/networking/kea.nix +++ b/nixos/modules/services/networking/kea.nix @@ -378,4 +378,6 @@ in ]); meta.maintainers = with maintainers; [ hexa ]; + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/networking/searx.nix b/nixos/modules/services/networking/searx.nix index 9fb06af7442e..b73f255eb9dd 100644 --- a/nixos/modules/services/networking/searx.nix +++ b/nixos/modules/services/networking/searx.nix @@ -228,5 +228,4 @@ in }; meta.maintainers = with maintainers; [ rnhmjoj ]; - } diff --git a/nixos/modules/services/networking/xrdp.nix b/nixos/modules/services/networking/xrdp.nix index e9f123a181ae..747fb7a1f9c4 100644 --- a/nixos/modules/services/networking/xrdp.nix +++ b/nixos/modules/services/networking/xrdp.nix @@ -100,6 +100,7 @@ in confDir = mkOption { type = types.path; default = confDir; + defaultText = literalDocBook "generated from configuration"; description = "The location of the config files for xrdp."; }; }; diff --git a/nixos/modules/services/security/aesmd.nix b/nixos/modules/services/security/aesmd.nix index bb53bc49e259..924d614e4717 100644 --- a/nixos/modules/services/security/aesmd.nix +++ b/nixos/modules/services/security/aesmd.nix @@ -1,7 +1,8 @@ -{ config, pkgs, lib, ... }: +{ config, options, pkgs, lib, ... }: with lib; let cfg = config.services.aesmd; + opt = options.services.aesmd; sgx-psw = pkgs.sgx-psw.override { inherit (cfg) debug; }; @@ -43,6 +44,9 @@ in options.proxyType = mkOption { type = with types; nullOr (enum [ "default" "direct" "manual" ]); default = if (cfg.settings.proxy != null) then "manual" else null; + defaultText = literalExpression '' + if (config.${opt.settings}.proxy != null) then "manual" else null + ''; example = "default"; description = '' Type of proxy to use. The default uses the system's default proxy. diff --git a/nixos/modules/services/security/vaultwarden/default.nix b/nixos/modules/services/security/vaultwarden/default.nix index 5b951bc85ec0..71088fc4dcd8 100644 --- a/nixos/modules/services/security/vaultwarden/default.nix +++ b/nixos/modules/services/security/vaultwarden/default.nix @@ -179,4 +179,7 @@ in { wantedBy = [ "multi-user.target" ]; }; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/web-apps/dex.nix b/nixos/modules/services/web-apps/dex.nix index f08dd65bdb0f..4d4689a4cf24 100644 --- a/nixos/modules/services/web-apps/dex.nix +++ b/nixos/modules/services/web-apps/dex.nix @@ -112,4 +112,7 @@ in }; }; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/web-apps/gerrit.nix b/nixos/modules/services/web-apps/gerrit.nix index 9ee9dbf1aa49..6bfc67368dd5 100644 --- a/nixos/modules/services/web-apps/gerrit.nix +++ b/nixos/modules/services/web-apps/gerrit.nix @@ -237,4 +237,6 @@ in }; meta.maintainers = with lib.maintainers; [ edef zimbatm ]; + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/web-apps/jirafeau.nix b/nixos/modules/services/web-apps/jirafeau.nix index 83cf224f7d27..a95e2b4f82a9 100644 --- a/nixos/modules/services/web-apps/jirafeau.nix +++ b/nixos/modules/services/web-apps/jirafeau.nix @@ -167,4 +167,7 @@ in "d ${cfg.dataDir}/async/ 0750 ${user} ${group} - -" ]; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/web-apps/powerdns-admin.nix b/nixos/modules/services/web-apps/powerdns-admin.nix index ce99b606c318..4661ba80c5d6 100644 --- a/nixos/modules/services/web-apps/powerdns-admin.nix +++ b/nixos/modules/services/web-apps/powerdns-admin.nix @@ -146,4 +146,7 @@ in group = "powerdnsadmin"; }; }; + + # uses attributes of the linked package + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 24d925734423..f0cabdd4465a 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -865,4 +865,6 @@ in }; + # uses relatedPackages + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/system/activation/top-level.nix b/nixos/modules/system/activation/top-level.nix index 501998fa399e..2efe0f05e0c0 100644 --- a/nixos/modules/system/activation/top-level.nix +++ b/nixos/modules/system/activation/top-level.nix @@ -317,4 +317,6 @@ in }; + # uses extendModules to generate a type + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix index fa3e25afb03e..29e3aa024dfa 100644 --- a/nixos/modules/virtualisation/qemu-vm.nix +++ b/nixos/modules/virtualisation/qemu-vm.nix @@ -999,4 +999,7 @@ in ]; }; + + # uses types of services/x11/xserver.nix + meta.buildDocsInSandbox = false; } diff --git a/nixos/modules/virtualisation/xen-dom0.nix b/nixos/modules/virtualisation/xen-dom0.nix index f8f4af4f6b85..975eed10cd26 100644 --- a/nixos/modules/virtualisation/xen-dom0.nix +++ b/nixos/modules/virtualisation/xen-dom0.nix @@ -450,5 +450,4 @@ in }; }; - } diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index c2356df098d4..4f62980e8e91 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -281,13 +281,6 @@ in mosquitto = handleTest ./mosquitto.nix {}; mpd = handleTest ./mpd.nix {}; mpv = handleTest ./mpv.nix {}; - mtp = let - olderQemu = (import (fetchTarball { - url = "https://github.com/nixos/nixpkgs/archive/e1fc1a80a071c90ab65fb6eafae5520579163783.tar.gz"; - sha256 = "19a0qrx31lp2r8cgk9hv4p6j6six6l82qisxr68y7wb7drw7dhkz"; - }) { inherit system; }).qemu_test; - myPkgs = import ../.. { inherit system; overlays = [ (self: super: { qemu_test = olderQemu; }) ]; }; - in handleTest ./mtp.nix { pkgs = myPkgs; }; mumble = handleTest ./mumble.nix {}; musescore = handleTest ./musescore.nix {}; munin = handleTest ./munin.nix {}; diff --git a/nixos/tests/mtp.nix b/nixos/tests/mtp.nix deleted file mode 100644 index 6fa92269d41f..000000000000 --- a/nixos/tests/mtp.nix +++ /dev/null @@ -1,108 +0,0 @@ -import ./make-test-python.nix ({ pkgs, ... }: { - name = "mtp"; - meta = with pkgs.lib.maintainers; { - maintainers = [ matthewcroughan nixinator ]; - }; - - nodes = - { - client = { config, pkgs, ... }: { - # DBUS runs only once a user session is created, which means a user has to - # login. Here, we log in as root. Once logged in, the gvfs-daemon service runs - # as UID 0 in User-0.service - services.getty.autologinUser = "root"; - - # XDG_RUNTIME_DIR is needed for running systemd-user services such as - # gvfs-daemon as root. - environment.variables.XDG_RUNTIME_DIR = "/run/user/0"; - - environment.systemPackages = with pkgs; [ usbutils glib jmtpfs tree ]; - services.gvfs.enable = true; - - # Creates a usb-mtp device inside the VM, which is mapped to the host's - # /tmp folder, it is able to write files to this location, but only has - # permissions to read its own creations. - virtualisation.qemu.options = [ - "-usb" - "-device usb-mtp,rootdir=/tmp,readonly=false" - ]; - }; - }; - - - testScript = { nodes, ... }: - let - # Creates a list of QEMU MTP devices matching USB ID (46f4:0004). This - # value can be sourced in a shell script. This is so we can loop over the - # devices we find, as this test may want to use more than one MTP device - # in future. - mtpDevices = pkgs.writeScript "mtpDevices.sh" '' - export mtpDevices=$(lsusb -d 46f4:0004 | awk {'print $2","$4'} | sed 's/[:-]/ /g') - ''; - # Qemu is only capable of creating an MTP device with Picture Transfer - # Protocol. This means that gvfs must use gphoto2:// rather than mtp:// - # when mounting. - # https://github.com/qemu/qemu/blob/970bc16f60937bcfd334f14c614bd4407c247961/hw/usb/dev-mtp.c#L278 - gvfs = rec { - mountAllMtpDevices = pkgs.writeScript "mountAllMtpDevices.sh" '' - set -e - source ${mtpDevices} - for i in $mtpDevices - do - gio mount "gphoto2://[usb:$i]/" - done - ''; - unmountAllMtpDevices = pkgs.writeScript "unmountAllMtpDevices.sh" '' - set -e - source ${mtpDevices} - for i in $mtpDevices - do - gio mount -u "gphoto2://[usb:$i]/" - done - ''; - # gvfsTest: - # 1. Creates a 10M test file - # 2. Copies it to the device using GIO tools - # 3. Checks for corruption with `diff` - # 4. Removes the file, then unmounts the disks. - gvfsTest = pkgs.writeScript "gvfsTest.sh" '' - set -e - source ${mtpDevices} - ${mountAllMtpDevices} - dd if=/dev/urandom of=testFile10M bs=1M count=10 - for i in $mtpDevices - do - gio copy ./testFile10M gphoto2://[usb:$i]/ - ls -lah /run/user/0/gvfs/*/testFile10M - gio remove gphoto2://[usb:$i]/testFile10M - done - ${unmountAllMtpDevices} - ''; - }; - jmtpfs = { - # jmtpfsTest: - # 1. Mounts the device on a dir named `phone` using jmtpfs - # 2. Puts the current Nixpkgs libmtp version into a file - # 3. Checks for corruption with `diff` - # 4. Prints the directory tree - jmtpfsTest = pkgs.writeScript "jmtpfsTest.sh" '' - mkdir phone - jmtpfs phone - echo "${pkgs.libmtp.version}" > phone/tmp/testFile - echo "${pkgs.libmtp.version}" > testFile - diff phone/tmp/testFile testFile - tree phone - ''; - }; - in - # Using >&2 allows the results of the scripts to be printed to the terminal - # when building this test with Nix. Scripts would otherwise complete - # silently. - '' - start_all() - client.wait_for_unit("multi-user.target") - client.wait_for_unit("dbus.service") - client.succeed("${gvfs.gvfsTest} >&2") - client.succeed("${jmtpfs.jmtpfsTest} >&2") - ''; -}) diff --git a/nixos/tests/sudo.nix b/nixos/tests/sudo.nix index 4885d6e17b82..ae9362ca70da 100644 --- a/nixos/tests/sudo.nix +++ b/nixos/tests/sudo.nix @@ -73,7 +73,7 @@ in machine.fail('su - test1 -c "sudo -n -u root true"') with subtest("users in group 'foobar' should be able to use sudo with password"): - machine.succeed("sudo -u test2 echo ${password} | sudo -S -u root true") + machine.succeed('su - test2 -c "echo ${password} | sudo -S -u root true"') with subtest("users in group 'barfoo' should be able to use sudo without password"): machine.succeed("sudo -u test3 sudo -n -u root true") diff --git a/pkgs/applications/audio/gnome-podcasts/default.nix b/pkgs/applications/audio/gnome-podcasts/default.nix index b91e861c5d5a..ee60cbff04be 100644 --- a/pkgs/applications/audio/gnome-podcasts/default.nix +++ b/pkgs/applications/audio/gnome-podcasts/default.nix @@ -21,20 +21,20 @@ stdenv.mkDerivation rec { pname = "gnome-podcasts"; - version = "0.5.0"; + version = "0.5.1"; src = fetchFromGitLab { domain = "gitlab.gnome.org"; owner = "World"; repo = "podcasts"; rev = version; - hash = "sha256-Jk++/QrQt/fjOz2OaEIr1Imq2DmqTjcormCebjO4/Kk="; + sha256 = "00vy1qkkpn76jdpybsq9qp8s6fh1ih10j73p2x43sl97m5g8944h"; }; cargoDeps = rustPlatform.fetchCargoTarball { inherit src; name = "${pname}-${version}"; - hash = "sha256-jlXpeVabc1h2GU1j9Ff6GZJec+JgFyOdJzsOtdkrEWI="; + sha256 = "0y34b5rnr75h7dxbx93mafrmwsh187wq5js7fmkb1m1yyybj1v1x"; }; nativeBuildInputs = [ diff --git a/pkgs/applications/audio/mopidy/default.nix b/pkgs/applications/audio/mopidy/default.nix index d1b43bc4489b..8bf50e720929 100644 --- a/pkgs/applications/audio/mopidy/default.nix +++ b/pkgs/applications/audio/mopidy/default.nix @@ -21,6 +21,8 @@ lib.makeScope newScope (self: with self; { mopidy-mpris = callPackage ./mpris.nix { }; + mopidy-muse = callPackage ./muse.nix { }; + mopidy-musicbox-webclient = callPackage ./musicbox-webclient.nix { }; mopidy-podcast = callPackage ./podcast.nix { }; diff --git a/pkgs/applications/audio/mopidy/muse.nix b/pkgs/applications/audio/mopidy/muse.nix new file mode 100644 index 000000000000..22a6fcd68427 --- /dev/null +++ b/pkgs/applications/audio/mopidy/muse.nix @@ -0,0 +1,29 @@ +{ lib, pythonPackages, mopidy }: + +pythonPackages.buildPythonApplication rec { + pname = "mopidy-muse"; + version = "0.0.27"; + + src = pythonPackages.fetchPypi { + inherit version; + pname = "Mopidy-Muse"; + sha256 = "0jx9dkgxr07avzz9zskzhqy98zsxkdrf7iid2ax5vygwf8qsx8ks"; + }; + + propagatedBuildInputs = [ + mopidy + pythonPackages.pykka + ]; + + pythonImportsCheck = [ "mopidy_muse" ]; + + # has no tests + doCheck = false; + + meta = with lib; { + description = "Mopidy web client with Snapcast support"; + homepage = "https://github.com/cristianpb/muse"; + license = licenses.asl20; + maintainers = with maintainers; [ hexa ]; + }; +} diff --git a/pkgs/applications/audio/paprefs/default.nix b/pkgs/applications/audio/paprefs/default.nix index 31ccb212cd51..ef45cc4676a1 100644 --- a/pkgs/applications/audio/paprefs/default.nix +++ b/pkgs/applications/audio/paprefs/default.nix @@ -13,11 +13,11 @@ stdenv.mkDerivation rec { pname = "paprefs"; - version = "1.1"; + version = "1.2"; src = fetchurl { url = "https://freedesktop.org/software/pulseaudio/paprefs/paprefs-${version}.tar.xz"; - sha256 = "189z5p20hk0xv9vwvym293503j4pwl03xqk9hl7cl6dwgv0l7wkf"; + sha256 = "sha256-s/IeQNw5NtFeP/yRD7DAfBS4jowodxW0VqlIwXY49jM="; }; nativeBuildInputs = [ diff --git a/pkgs/applications/audio/snapcast/default.nix b/pkgs/applications/audio/snapcast/default.nix index d2b6ba07d2eb..19016b700fdc 100644 --- a/pkgs/applications/audio/snapcast/default.nix +++ b/pkgs/applications/audio/snapcast/default.nix @@ -37,13 +37,13 @@ in stdenv.mkDerivation rec { pname = "snapcast"; - version = "0.25.0"; + version = "0.26.0"; src = fetchFromGitHub { owner = "badaix"; repo = "snapcast"; rev = "v${version}"; - sha256 = "064pcpr5dsv9hncqkrnxriva4xjv1vcxhvc69h1an8x8vn4dwgmf"; + sha256 = "sha256-CCifn9OEFM//Hk1PJj8T3MXIV8pXCTdBBXPsHuZwLyQ="; }; nativeBuildInputs = [ cmake pkg-config ]; diff --git a/pkgs/applications/blockchains/electrs/default.nix b/pkgs/applications/blockchains/electrs/default.nix index ace5ec94c639..4d7943df778d 100644 --- a/pkgs/applications/blockchains/electrs/default.nix +++ b/pkgs/applications/blockchains/electrs/default.nix @@ -12,16 +12,16 @@ let in rustPlatform.buildRustPackage rec { pname = "electrs"; - version = "0.9.3"; + version = "0.9.4"; src = fetchFromGitHub { owner = "romanz"; repo = pname; rev = "v${version}"; - hash = "sha256-sTQ/dX1uXJkEmrNZ47qjBlrexO50y0NGNhw71rHc9bw="; + hash = "sha256-37KTcLFVzuXlLpz9INXbasUdzuY+T34ef8EtfczQ+D8="; }; - cargoHash = "sha256-1ZQt8LaqgxNxFfgCVCK0GVwbcVfX3v9iz7tHvzgyI0g="; + cargoHash = "sha256-aOSCpvejMUfSZCDwShqMPEc3vXw9ri2QvTaCuHODTwA="; # needed for librocksdb-sys nativeBuildInputs = [ llvmPackages.clang ]; diff --git a/pkgs/applications/editors/helix/default.nix b/pkgs/applications/editors/helix/default.nix index c0c8e2a57b36..6cc5714fb83f 100644 --- a/pkgs/applications/editors/helix/default.nix +++ b/pkgs/applications/editors/helix/default.nix @@ -2,17 +2,17 @@ rustPlatform.buildRustPackage rec { pname = "helix"; - version = "0.5.0"; + version = "0.6.0"; src = fetchFromGitHub { owner = "helix-editor"; repo = pname; rev = "v${version}"; fetchSubmodules = true; - sha256 = "sha256-NoVg/8oJIgMQtxlCSjrLnYCG8shigYqZzWAQwmiqxgA="; + sha256 = "sha256-d/USOtcPLjdgzN7TBCouBRmoSDH5LZD4R5Qq7lUrWZw="; }; - cargoSha256 = "sha256-kqPI8WpGpr0VL7CbBTSsjKl3xqJrv/6Qjr6UFnIgaVo="; + cargoSha256 = "sha256-/EATU7HsGNB35YOBp8sofbPd1nl4d3Ggj1ay3QuHkCI="; nativeBuildInputs = [ makeWrapper ]; diff --git a/pkgs/applications/graphics/pinta/default.nix b/pkgs/applications/graphics/pinta/default.nix index 6859a07b48a6..a4ad25109c84 100644 --- a/pkgs/applications/graphics/pinta/default.nix +++ b/pkgs/applications/graphics/pinta/default.nix @@ -1,91 +1,87 @@ { lib +, buildDotnetModule +, dotnetCorePackages , fetchFromGitHub -, buildDotnetPackage -, dotnetPackages -, gtksharp -, gettext +, gtk3 +, installShellFiles +, librsvg +, makeDesktopItem +, wrapGAppsHook }: -let - mono-addins = dotnetPackages.MonoAddins; -in -buildDotnetPackage rec { +buildDotnetModule rec { pname = "Pinta"; - version = "1.7.1"; + version = "2.0"; - outputFiles = [ "bin/*" ]; - buildInputs = [ gtksharp mono-addins gettext ]; - xBuildFiles = [ "Pinta.sln" ]; + nativeBuildInputs = [ + installShellFiles + wrapGAppsHook + ]; + + runtimeDeps = [ gtk3 ]; + + dotnet-sdk = dotnetCorePackages.sdk_6_0; + dotnet-runtime = dotnetCorePackages.runtime_6_0; + + # How-to update deps: + # $ nix-build -A pinta.fetch-deps + # $ ./result + # $ cp /tmp/Pinta-deps.nix ./pkgs/applications/graphics/pinta/default.nix + # TODO: create update script + nugetDeps = ./deps.nix; + + projectFile = "Pinta"; src = fetchFromGitHub { owner = "PintaProject"; repo = "Pinta"; rev = version; - sha256 = "sha256-yRp/dpJ9T4DieqHTj3vhyuASPGe4vjHw0rSXFrTNZVc="; + sha256 = "sha256-wqqNPyy5h/hTDm2u5MDZx1ds5qWAxy1/BY/fX4PeA88="; }; - # Remove version information from nodes - postPatch = with lib; let - csprojFiles = [ - "Pinta/Pinta.csproj" - "Pinta.Core/Pinta.Core.csproj" - "Pinta.Effects/Pinta.Effects.csproj" - "Pinta.Gui.Widgets/Pinta.Gui.Widgets.csproj" - "Pinta.Resources/Pinta.Resources.csproj" - "Pinta.Tools/Pinta.Tools.csproj" - ]; - versionedNames = [ - "Mono\\.Addins" - "Mono\\.Posix" - "Mono\\.Addins\\.Gui" - "Mono\\.Addins\\.Setup" - ]; - - stripVersion = name: file: - let - match = '' 0.108 + # https://github.com/punesemu/puNES/issues/185 + (fetchpatch { + name = "0001-punes-Fixed-make-install.patch"; + url = "https://github.com/punesemu/puNES/commit/902434f50398ebcda0786ade4b28a0496084810e.patch"; + sha256 = "1a3052n3n1qipi4bd7f7gq4zl5jjjzzzpbijdisis2vxvhnfvcim"; + }) + ]; + postPatch = '' substituteInPlace configure.ac \ --replace '`$PKG_CONFIG --variable=host_bins Qt5Core`/lrelease' '${qttools.dev}/bin/lrelease' @@ -49,8 +60,8 @@ mkDerivation rec { "--with-ffmpeg" ]; - passthru.updateScript = unstableGitUpdater { - url = "https://github.com/punesemu/puNES.git"; + passthru.updateScript = nix-update-script { + attrPath = pname; }; meta = with lib; { diff --git a/pkgs/misc/emulators/retroarch/cores.nix b/pkgs/misc/emulators/retroarch/cores.nix index 09acbca8652d..4bbe12cbd298 100644 --- a/pkgs/misc/emulators/retroarch/cores.nix +++ b/pkgs/misc/emulators/retroarch/cores.nix @@ -54,7 +54,7 @@ let , description # Check https://github.com/libretro/libretro-core-info for license information , license - , src ? null + , src ? (getCoreSrc core) , broken ? false , version ? "unstable-2021-12-06" , platforms ? retroarch.meta.platforms @@ -63,15 +63,13 @@ let , normalizeCore ? true , ... }@args: - lib.makeOverridable stdenv.mkDerivation ( + stdenv.mkDerivation ( let d2u = if normalizeCore then (lib.replaceChars [ "-" ] [ "_" ]) else (x: x); - finalSrc = if src == null then getCoreSrc core else src; in (rec { pname = "libretro-${core}"; - inherit version; - src = finalSrc; + inherit version src; buildInputs = [ zlib ] ++ args.extraBuildInputs or [ ]; nativeBuildInputs = [ makeWrapper ] ++ args.extraNativeBuildInputs or [ ]; @@ -308,13 +306,6 @@ in citra = mkLibRetroCore { core = "citra"; - # `nix-prefetch-github` doesn't support `deepClone`, necessary for citra - # https://github.com/seppeljordan/nix-prefetch-github/issues/41 - src = fetchFromGitHub { - inherit (hashesFile.citra) owner repo rev fetchSubmodules; - deepClone = true; - sha256 = "sha256-bwnYkMvbtRF5bGZRYVtMWxnCu9P45qeX4+ntOj9eRds="; - }; description = "Port of Citra to libretro"; license = lib.licenses.gpl2Plus; extraNativeBuildInputs = [ cmake pkg-config ]; diff --git a/pkgs/misc/emulators/retroarch/hashes.json b/pkgs/misc/emulators/retroarch/hashes.json index 2d5e7411b8e4..4f01bcf8b470 100644 --- a/pkgs/misc/emulators/retroarch/hashes.json +++ b/pkgs/misc/emulators/retroarch/hashes.json @@ -122,8 +122,10 @@ "owner": "libretro", "repo": "citra", "rev": "b1959d07a340bfd9af65ad464fd19eb6799a96ef", - "sha256": "Tw6Niba9gsZOMKGaXF9AZ5gdigB0mmFyqoRTMElM/Ps=", - "fetchSubmodules": true + "sha256": "bwnYkMvbtRF5bGZRYVtMWxnCu9P45qeX4+ntOj9eRds=", + "fetchSubmodules": true, + "leaveDotGit": true, + "deepClone": true }, "desmume": { "owner": "libretro", diff --git a/pkgs/misc/emulators/retroarch/update.py b/pkgs/misc/emulators/retroarch/update.py index 831709d89e7c..857c5df6244d 100755 --- a/pkgs/misc/emulators/retroarch/update.py +++ b/pkgs/misc/emulators/retroarch/update.py @@ -1,12 +1,11 @@ #!/usr/bin/env nix-shell -#!nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ requests nix-prefetch-github ])" -p "git" +#!nix-shell -I nixpkgs=../../../../ -i python3 -p "python3.withPackages (ps: with ps; [ requests nix-prefetch-github ])" -p "git" import json import sys +import subprocess from pathlib import Path -from nix_prefetch_github import nix_prefetch_github - SCRIPT_PATH = Path(__file__).absolute().parent HASHES_PATH = SCRIPT_PATH / "hashes.json" CORES = { @@ -27,7 +26,7 @@ CORES = { "bsnes": {"repo": "bsnes-libretro"}, "bsnes-hd": {"repo": "bsnes-hd", "owner": "DerKoun"}, "bsnes-mercury": {"repo": "bsnes-mercury"}, - "citra": {"repo": "citra", "fetch_submodules": True}, + "citra": {"repo": "citra", "fetch_submodules": True, "deep_clone": True, "leave_dot_git": True}, "desmume": {"repo": "desmume"}, "desmume2015": {"repo": "desmume2015"}, "dolphin": {"repo": "dolphin"}, @@ -97,19 +96,27 @@ def info(*msg): print(*msg, file=sys.stderr) -def get_repo_hash_fetchFromGitHub(repo, owner="libretro", fetch_submodules=False): - assert repo is not None, "Parameter 'repo' can't be None." - - repo_hash = nix_prefetch_github( - owner=owner, repo=repo, fetch_submodules=fetch_submodules +def get_repo_hash_fetchFromGitHub( + repo, + owner="libretro", + deep_clone=False, + fetch_submodules=False, + leave_dot_git=False, +): + extra_args = [] + if deep_clone: + extra_args.append("--deep-clone") + if fetch_submodules: + extra_args.append("--fetch-submodules") + if leave_dot_git: + extra_args.append("--leave-dot-git") + result = subprocess.run( + ["nix-prefetch-github", owner, repo, *extra_args], + check=True, + capture_output=True, + text=True, ) - return { - "owner": repo_hash.repository.owner, - "repo": repo_hash.repository.name, - "rev": repo_hash.rev, - "sha256": repo_hash.sha256, - "fetchSubmodules": repo_hash.fetch_submodules, - } + return json.loads(result.stdout) def get_repo_hash(fetcher="fetchFromGitHub", **kwargs): diff --git a/pkgs/os-specific/linux/cpuset/default.nix b/pkgs/os-specific/linux/cpuset/default.nix index e82e3f5901c1..bb7a953c1195 100644 --- a/pkgs/os-specific/linux/cpuset/default.nix +++ b/pkgs/os-specific/linux/cpuset/default.nix @@ -40,5 +40,6 @@ pythonPackages.buildPythonApplication rec { homepage = "https://github.com/lpechacek/cpuset"; license = licenses.gpl2; maintainers = with maintainers; [ thiagokokada wykurz ]; + mainProgram = "cset"; }; } diff --git a/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix b/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix index f2dd36a0e065..925521696da9 100644 --- a/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix +++ b/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix @@ -23,7 +23,7 @@ stdenv.mkDerivation { meta = with lib; { description = "Firmware for Realtek RTL8761b"; license = licenses.unfreeRedistributableFirmware; - maintainers = with maintainers; [ edibopp ]; + maintainers = with maintainers; [ milibopp ]; platforms = with platforms; linux; }; } diff --git a/pkgs/servers/consul/default.nix b/pkgs/servers/consul/default.nix index bf75eb4d3a51..58b11dfab09c 100644 --- a/pkgs/servers/consul/default.nix +++ b/pkgs/servers/consul/default.nix @@ -2,7 +2,7 @@ buildGoModule rec { pname = "consul"; - version = "1.10.3"; + version = "1.11.1"; rev = "v${version}"; # Note: Currently only release tags are supported, because they have the Consul UI @@ -17,7 +17,7 @@ buildGoModule rec { owner = "hashicorp"; repo = pname; inherit rev; - sha256 = "sha256-Jn8cF+8Wf4zZ/PFXvjCGpomSa/DvraBGW0LsZQ+Zy+4="; + sha256 = "0x374capaz6h8mzvq2pfz4zg3gz27fjbqax65f23zqyl46haj01p"; }; passthru.tests.consul = nixosTests.consul; @@ -26,12 +26,10 @@ buildGoModule rec { # has a split module structure in one repo subPackages = ["." "connect/certgen"]; - vendorSha256 = "sha256-cQP1po9LGunFVocl4+HPs67oae2KpgyfRRB+xGVySUY="; + vendorSha256 = "09rz2xv407ym71dap7f6bbqhdnqvylvbd9zg6f6h7qsb88nvyzsp"; doCheck = false; - deleteVendor = true; - ldflags = [ "-X github.com/hashicorp/consul/version.GitDescribe=v${version}" "-X github.com/hashicorp/consul/version.Version=${version}" @@ -43,6 +41,6 @@ buildGoModule rec { homepage = "https://www.consul.io/"; platforms = platforms.linux ++ platforms.darwin; license = licenses.mpl20; - maintainers = with maintainers; [ pradeepchhetri vdemeester nh2 ]; + maintainers = with maintainers; [ pradeepchhetri vdemeester nh2 techknowlogick]; }; } diff --git a/pkgs/servers/dcnnt/default.nix b/pkgs/servers/dcnnt/default.nix new file mode 100644 index 000000000000..0cab4a326c58 --- /dev/null +++ b/pkgs/servers/dcnnt/default.nix @@ -0,0 +1,26 @@ +{ buildPythonApplication, fetchPypi, lib, pycryptodome }: + +buildPythonApplication rec { + pname = "dcnnt"; + version = "0.6.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "ef8578526163cb3e25fa352ba2f6f4d39309f477a72282416c89eddfb69c3a91"; + }; + + propagatedBuildInputs = [ + pycryptodome + ]; + + meta = with lib; { + homepage = "https://github.com/cyanomiko/dcnnt-py"; + description = "UI-less tool to connect Android phone with desktop"; + longDescription = '' + Yet another tool to connect Android phone with desktop similar to + KDE Connect. + ''; + license = licenses.mit; + maintainers = with maintainers; [ arnoutkroeze ]; + }; +} diff --git a/pkgs/servers/prowlarr/default.nix b/pkgs/servers/prowlarr/default.nix index d4d00cc4a813..be77d8072b6e 100644 --- a/pkgs/servers/prowlarr/default.nix +++ b/pkgs/servers/prowlarr/default.nix @@ -16,14 +16,14 @@ let }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); hash = { - x64-linux_hash = "sha256-KPGE9Az98UOBEJ/mUH/RI0zrf1tf90yckAfURvC+lWM="; - arm64-linux_hash = "sha256-seJJ2le7Y4x6G5s0ASbN3KzldD9kOmFamwaxnJV3T7c="; - x64-osx_hash = "sha256-FA81l/IZWGoAlBUS3irPCdcf3ey9Df3XzDen+4UlZzc="; + x64-linux_hash = "sha256-L34dvileSSJxdhNwXC5iBChUM4r6hwncTHIBjWH20XE="; + arm64-linux_hash = "sha256-cT0UcN9otaGbMXoxlxJosYFtWzA8lRvekdleUSaxN0E="; + x64-osx_hash = "sha256-7a34R7PsgEzY4u7NKNR0LaVxonhhDNqjwQxEXaJbAww="; }."${arch}-${os}_hash"; in stdenv.mkDerivation rec { pname = "prowlarr"; - version = "0.1.8.1231"; + version = "0.1.9.1313"; src = fetchurl { url = "https://github.com/Prowlarr/Prowlarr/releases/download/v${version}/Prowlarr.develop.${version}.${os}-core-${arch}.tar.gz"; diff --git a/pkgs/shells/tcsh/default.nix b/pkgs/shells/tcsh/default.nix index 9a5bf59f18ea..1befd2897577 100644 --- a/pkgs/shells/tcsh/default.nix +++ b/pkgs/shells/tcsh/default.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation rec { pname = "tcsh"; - version = "6.23.00"; + version = "6.23.02"; src = fetchurl { urls = [ @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { "ftp://ftp.astron.com/pub/tcsh/old/${pname}-${version}.tar.gz" "ftp://ftp.astron.com/pub/tcsh/${pname}-${version}.tar.gz" ]; - hash = "sha256-Tr6y8zYz0RXZU19VTGUahSMEDY2R5d4zP7LuBFuOAB4="; + hash = "sha256-wD+AQFE2cxswkdpzWoHN2EgAhRAySrMl8jWv9wnkRus="; }; buildInputs = [ diff --git a/pkgs/tools/X11/opentabletdriver/default.nix b/pkgs/tools/X11/opentabletdriver/default.nix index ff2472294eed..3d7183c786bd 100644 --- a/pkgs/tools/X11/opentabletdriver/default.nix +++ b/pkgs/tools/X11/opentabletdriver/default.nix @@ -22,15 +22,15 @@ buildDotnetModule rec { version = "0.5.3.3"; src = fetchFromGitHub { - owner = "InfinityGhost"; + owner = "OpenTabletDriver"; repo = "OpenTabletDriver"; rev = "v${version}"; - sha256 = "k4SoOMKAwHeYSQ80M8Af1DiiDSZIi3gS7lGr2ZrXrEI="; + sha256 = "sha256-k4SoOMKAwHeYSQ80M8Af1DiiDSZIi3gS7lGr2ZrXrEI="; }; debPkg = fetchurl { - url = "https://github.com/InfinityGhost/OpenTabletDriver/releases/download/v${version}/OpenTabletDriver.deb"; - sha256 = "0v03qiiz28k1yzgxf5qc1mdg2n7kjx6h8vpx9dxz342wwbgqg6ic"; + url = "https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${version}/OpenTabletDriver.deb"; + sha256 = "sha256-LJqH3+JckPF7S/1uBE2X81jxWg0MF9ff92Ei8WPEA2w="; }; dotnet-sdk = dotnetCorePackages.sdk_5_0; @@ -103,9 +103,10 @@ buildDotnetModule rec { meta = with lib; { description = "Open source, cross-platform, user-mode tablet driver"; - homepage = "https://github.com/InfinityGhost/OpenTabletDriver"; + homepage = "https://github.com/OpenTabletDriver/OpenTabletDriver"; license = licenses.lgpl3Plus; maintainers = with maintainers; [ thiagokokada ]; platforms = platforms.linux; + mainProgram = "otd"; }; } diff --git a/pkgs/tools/admin/synapse-admin/default.nix b/pkgs/tools/admin/synapse-admin/default.nix index 8ca0816f9e42..4248e62adebf 100644 --- a/pkgs/tools/admin/synapse-admin/default.nix +++ b/pkgs/tools/admin/synapse-admin/default.nix @@ -19,7 +19,7 @@ stdenv.mkDerivation rec { meta = with lib; { description = "Admin UI for Synapse Homeservers"; homepage = "https://github.com/Awesome-Technologies/synapse-admin"; - license = licenses.apsl20; + license = licenses.asl20; platforms = platforms.all; maintainers = with maintainers; [ mkg20001 ]; }; diff --git a/pkgs/tools/misc/dialog/default.nix b/pkgs/tools/misc/dialog/default.nix index dd31fed35832..e295f7c27ac3 100644 --- a/pkgs/tools/misc/dialog/default.nix +++ b/pkgs/tools/misc/dialog/default.nix @@ -12,11 +12,11 @@ assert unicodeSupport -> ncurses.unicode && ncurses != null; stdenv.mkDerivation rec { pname = "dialog"; - version = "1.3-20210621"; + version = "1.3-20211214"; src = fetchurl { url = "ftp://ftp.invisible-island.net/dialog/${pname}-${version}.tgz"; - hash = "sha256-w68izPzZuso4QGIQjdk1ToaZCSnuJwwjnu9pUYxdp8g="; + hash = "sha256-zCll4FxqjDcHCza1ZBTqpWDfjYfyzqIXWeKJUOmyeks="; }; buildInputs = [ @@ -39,6 +39,6 @@ stdenv.mkDerivation rec { description = "Display dialog boxes from shell"; license = licenses.lgpl21Plus; maintainers = with maintainers; [ AndersonTorres spacefrogg ]; - platforms = ncurses.meta.platforms; + inherit (ncurses.meta) platforms; }; } diff --git a/pkgs/tools/misc/thefuck/default.nix b/pkgs/tools/misc/thefuck/default.nix index a3aa31d4dedd..87d6dcfb0c2e 100644 --- a/pkgs/tools/misc/thefuck/default.nix +++ b/pkgs/tools/misc/thefuck/default.nix @@ -5,13 +5,13 @@ buildPythonApplication rec { pname = "thefuck"; - version = "3.31"; + version = "3.32"; src = fetchFromGitHub { owner = "nvbn"; repo = pname; rev = version; - sha256 = "sha256-eKKUUJr00sUtT4u91MUgJjyPOXp3NigYVfYUP/sDBhY="; + sha256 = "sha256-bRCy95owBJaxoyCNQF6gEENoxCkmorhyKzZgU1dQN6I="; }; propagatedBuildInputs = [ colorama decorator psutil pyte six ]; diff --git a/pkgs/tools/networking/oneshot/default.nix b/pkgs/tools/networking/oneshot/default.nix index 9c0f4469982b..006fd3b259a8 100644 --- a/pkgs/tools/networking/oneshot/default.nix +++ b/pkgs/tools/networking/oneshot/default.nix @@ -21,6 +21,6 @@ buildGoModule rec { description = "A first-come-first-serve single-fire HTTP server"; homepage = "https://github.com/raphaelreyna/oneshot"; license = licenses.mit; - maintainers = with maintainers; [ edibopp ]; + maintainers = with maintainers; [ milibopp ]; }; } diff --git a/pkgs/tools/security/fprintd/default.nix b/pkgs/tools/security/fprintd/default.nix index 1340ec26ca29..b0339846a67d 100644 --- a/pkgs/tools/security/fprintd/default.nix +++ b/pkgs/tools/security/fprintd/default.nix @@ -25,7 +25,7 @@ stdenv.mkDerivation rec { pname = "fprintd"; - version = "1.92.0"; + version = "1.94.1"; outputs = [ "out" "devdoc" ]; src = fetchFromGitLab { @@ -33,7 +33,7 @@ stdenv.mkDerivation rec { owner = "libfprint"; repo = pname; rev = "v${version}"; - sha256 = "0bqzxxb5iq3pdwdv1k8wsx3alirbjla6zgcki55b5p6mzrvk781x"; + sha256 = "sha256-XHfHPffVp0jV3Md9Gui9v/nyOJ/bTWM3+hiR7WdEsgQ="; }; nativeBuildInputs = [ diff --git a/pkgs/tools/security/gfshare/default.nix b/pkgs/tools/security/gfshare/default.nix index 3079c7fb57f2..e0da2fdaf35b 100644 --- a/pkgs/tools/security/gfshare/default.nix +++ b/pkgs/tools/security/gfshare/default.nix @@ -24,5 +24,6 @@ stdenv.mkDerivation rec { license = licenses.mit; platforms = platforms.all; maintainers = [ maintainers.rraval ]; + broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/gfshare.x86_64-darwin }; } diff --git a/pkgs/tools/security/jaeles/default.nix b/pkgs/tools/security/jaeles/default.nix new file mode 100644 index 000000000000..e6e2905ed543 --- /dev/null +++ b/pkgs/tools/security/jaeles/default.nix @@ -0,0 +1,30 @@ +{ lib +, buildGoModule +, fetchFromGitHub +}: + +buildGoModule rec { + pname = "jaeles"; + version = "0.17"; + + src = fetchFromGitHub { + owner = "jaeles-project"; + repo = pname; + rev = "beta-v${version}"; + hash = "sha256-IGB+TYMOOO7fvRfDe9y+JSXuDSMDVJK+N4hS+kezG48="; + }; + + vendorSha256 = "sha256-3CKDkxvr7egHui6d8+25t9Zq2ePMUOULr+1NjEm4GXA="; + + runVend = true; + + # Tests want to download signatures + doCheck = false; + + meta = with lib; { + description = "Tool for automated Web application testing"; + homepage = "https://github.com/jaeles-project/jaeles"; + license = licenses.mit; + maintainers = with maintainers; [ fab ]; + }; +} diff --git a/pkgs/tools/security/kubescape/default.nix b/pkgs/tools/security/kubescape/default.nix index 0a13b54d2bfa..8f5382d38108 100644 --- a/pkgs/tools/security/kubescape/default.nix +++ b/pkgs/tools/security/kubescape/default.nix @@ -6,20 +6,20 @@ buildGoModule rec { pname = "kubescape"; - version = "1.0.136"; + version = "1.0.137"; src = fetchFromGitHub { owner = "armosec"; repo = pname; rev = "v${version}"; - sha256 = "sha256-g7gM+fZIDb6YK3QDiBqiQaTEyFtIQ30mTe6AAR3S3iw="; + sha256 = "sha256-2VjC5icIKF7VO7Tli/mk/gXbIzZxkFm7Aigwl+BVQ6g="; }; nativeBuildInputs = [ installShellFiles ]; - vendorSha256 = "sha256-hEj69RsYj+KxfZPri2j+vFxUU2S8wuK85EYGND5wtWg="; + vendorSha256 = "sha256-nUMbHoF7xqSpyfb+v7+ZaKzYOalpNcrFxcaRUw2W49s="; ldflags = [ "-s" diff --git a/pkgs/tools/security/metasploit/Gemfile b/pkgs/tools/security/metasploit/Gemfile index a5808532cafc..2b1a9c3c2d31 100644 --- a/pkgs/tools/security/metasploit/Gemfile +++ b/pkgs/tools/security/metasploit/Gemfile @@ -1,4 +1,4 @@ # frozen_string_literal: true source "https://rubygems.org" -gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.1.21" +gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.1.22" diff --git a/pkgs/tools/security/metasploit/Gemfile.lock b/pkgs/tools/security/metasploit/Gemfile.lock index 84330722835e..d0e479851593 100644 --- a/pkgs/tools/security/metasploit/Gemfile.lock +++ b/pkgs/tools/security/metasploit/Gemfile.lock @@ -1,9 +1,9 @@ GIT remote: https://github.com/rapid7/metasploit-framework - revision: 0b16a2cd771a6afd286188da1c60c9fd772ab0f1 - ref: refs/tags/6.1.21 + revision: 3bfd2d8eeab3f8ab7efd7a46f8125a7a3bb5f2f0 + ref: refs/tags/6.1.22 specs: - metasploit-framework (6.1.21) + metasploit-framework (6.1.22) actionpack (~> 6.0) activerecord (~> 6.0) activesupport (~> 6.0) @@ -214,7 +214,7 @@ GEM httpclient (2.8.3) i18n (1.8.11) concurrent-ruby (~> 1.0) - io-console (0.5.9) + io-console (0.5.11) irb (1.3.6) reline (>= 0.2.5) jmespath (1.4.0) @@ -288,7 +288,7 @@ GEM pcaprub patch_finder (1.0.2) pcaprub (0.12.4) - pdf-reader (2.7.0) + pdf-reader (2.8.0) Ascii85 (~> 1.0) afm (~> 0.2.1) hashery (~> 2.0) @@ -375,7 +375,7 @@ GEM ruby-macho (2.5.1) ruby-rc4 (0.1.5) ruby2_keywords (0.0.5) - ruby_smb (2.0.12) + ruby_smb (2.0.13) bindata openssl-ccm openssl-cmac @@ -433,7 +433,7 @@ GEM activesupport (>= 4.2, < 7.0) xmlrpc (0.3.2) webrick - zeitwerk (2.5.1) + zeitwerk (2.5.3) PLATFORMS ruby diff --git a/pkgs/tools/security/metasploit/default.nix b/pkgs/tools/security/metasploit/default.nix index e2659abe6ab3..426f92586440 100644 --- a/pkgs/tools/security/metasploit/default.nix +++ b/pkgs/tools/security/metasploit/default.nix @@ -15,13 +15,13 @@ let }; in stdenv.mkDerivation rec { pname = "metasploit-framework"; - version = "6.1.21"; + version = "6.1.22"; src = fetchFromGitHub { owner = "rapid7"; repo = "metasploit-framework"; rev = version; - sha256 = "sha256-43abc6XUmLZZ+KuaAqyT/fJT+79JWKeRRA41NJOWoPY="; + sha256 = "sha256-D3OmkXEqOgDOf1fvMtWiFT4bLw38SNHp2A25xAkq7Ew="; }; nativeBuildInputs = [ makeWrapper ]; diff --git a/pkgs/tools/security/metasploit/gemset.nix b/pkgs/tools/security/metasploit/gemset.nix index 9e6f49e96d7f..6d2cea42c652 100644 --- a/pkgs/tools/security/metasploit/gemset.nix +++ b/pkgs/tools/security/metasploit/gemset.nix @@ -554,10 +554,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0pmafwxh8z1apnk7bb1ibnbhfrgb1jgilxm4j8d0fcqlc2ggmbja"; + sha256 = "0r9kxrf9jccrr329pa3s37rf16vy426cbqmfwxkav1fidwvih93y"; type = "gem"; }; - version = "0.5.9"; + version = "0.5.11"; }; irb = { groups = ["default"]; @@ -664,12 +664,12 @@ platforms = []; source = { fetchSubmodules = false; - rev = "0b16a2cd771a6afd286188da1c60c9fd772ab0f1"; - sha256 = "1xm0js9k8d8f8j8sfn29pzxm7wpxjfn056mbz1cvd66llmrrnxp3"; + rev = "3bfd2d8eeab3f8ab7efd7a46f8125a7a3bb5f2f0"; + sha256 = "0k7c584w9f8dv3lx2j7w1lpinghmlbak5vspgz700fiaf68scwqg"; type = "git"; url = "https://github.com/rapid7/metasploit-framework"; }; - version = "6.1.21"; + version = "6.1.22"; }; metasploit-model = { groups = ["default"]; @@ -947,10 +947,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0c8s9p3s7z39zv9s6avaf5ddqncpglraqpqn50yhb1lrnna3akgi"; + sha256 = "18vsmybpvyi0favlabjipznpc8hgprsm7jpw3s7xr01c3lpjli7y"; type = "gem"; }; - version = "2.7.0"; + version = "2.8.0"; }; pg = { groups = ["default"]; @@ -1337,10 +1337,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "103rm0p44w8q2gyw3yigb6k2v12hi7gkj71b2wkj4859jzi96vyb"; + sha256 = "1bjsh4qi6ii4zl0g0na004ylk991ar9rg5kz9rq1q7r5crxy2rw7"; type = "gem"; }; - version = "2.0.12"; + version = "2.0.13"; }; rubyntlm = { groups = ["default"]; @@ -1607,9 +1607,9 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "18l4r6layck0d80ydc692mv1lxak5xbf6w2paj1x7m2ggbggzxgj"; + sha256 = "0lmg9x683gr9mkrbq9df2m0zb0650mdfxqna0bs10js44inv7znx"; type = "gem"; }; - version = "2.5.1"; + version = "2.5.3"; }; } diff --git a/pkgs/tools/security/snow/default.nix b/pkgs/tools/security/snow/default.nix index 6d264c09ade9..6dce95f8cf0f 100644 --- a/pkgs/tools/security/snow/default.nix +++ b/pkgs/tools/security/snow/default.nix @@ -18,7 +18,7 @@ stdenv.mkDerivation rec { meta = with lib; { description = "Conceal messages in ASCII text by appending whitespace to the end of lines"; homepage = "http://www.darkside.com.au/snow/"; - license = licenses.apsl20; + license = licenses.asl20; maintainers = with maintainers; [ siraben ]; platforms = platforms.unix; }; diff --git a/pkgs/tools/security/sudo/default.nix b/pkgs/tools/security/sudo/default.nix index e5207ea9d7b1..58afd5318df0 100644 --- a/pkgs/tools/security/sudo/default.nix +++ b/pkgs/tools/security/sudo/default.nix @@ -1,6 +1,7 @@ { lib , stdenv , fetchurl +, buildPackages , coreutils , pam , groff @@ -13,11 +14,11 @@ stdenv.mkDerivation rec { pname = "sudo"; - version = "1.9.7p2"; + version = "1.9.8p2"; src = fetchurl { url = "https://www.sudo.ws/dist/${pname}-${version}.tar.gz"; - sha256 = "sha256-KLXucl2/iaeFL0LzCcqHfSgQqVMbTuz+WfOoS2tK/Kg="; + sha256 = "sha256-njuLjafe9DtuYMJXq+gEZyBWcP0PfAgd4UI8QUtoDy0="; }; prePatch = '' @@ -56,6 +57,7 @@ stdenv.mkDerivation rec { installFlags="sudoers_uid=$(id -u) sudoers_gid=$(id -g) sysconfdir=$out/etc rundir=$TMPDIR/dummy vardir=$TMPDIR/dummy DESTDIR=/" ''; + depsBuildBuild = [ buildPackages.stdenv.cc ]; nativeBuildInputs = [ groff ]; buildInputs = [ pam ]; diff --git a/pkgs/tools/system/bpytop/default.nix b/pkgs/tools/system/bpytop/default.nix index eb0630d33eea..f0df9fa2e314 100644 --- a/pkgs/tools/system/bpytop/default.nix +++ b/pkgs/tools/system/bpytop/default.nix @@ -42,7 +42,7 @@ stdenv.mkDerivation rec { meta = with lib; { description = "A resource monitor; python port of bashtop"; homepage = src.meta.homepage; - license = licenses.apsl20; + license = licenses.asl20; maintainers = with maintainers; [ aw ]; platforms = with platforms; linux ++ freebsd ++ darwin; diff --git a/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix b/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix index 16c10b5ae7f0..1ce3c5d2f1b4 100644 --- a/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix +++ b/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix @@ -19,7 +19,7 @@ buildPythonPackage rec { meta = with lib; { description = "Command Line Interface for AWS EC2 Instance Connect"; homepage = "https://github.com/aws/aws-ec2-instance-connect-cli"; - license = licenses.apsl20; + license = licenses.asl20; maintainers = with maintainers; [ yurrriq ]; }; } diff --git a/pkgs/tools/virtualization/lxd-image-server/default.nix b/pkgs/tools/virtualization/lxd-image-server/default.nix index 3992f425a3cd..3a1d32247a40 100644 --- a/pkgs/tools/virtualization/lxd-image-server/default.nix +++ b/pkgs/tools/virtualization/lxd-image-server/default.nix @@ -40,7 +40,7 @@ python3.pkgs.buildPythonApplication rec { meta = with lib; { description = "Creates and manages a simplestreams lxd image server on top of nginx"; homepage = "https://github.com/Avature/lxd-image-server"; - license = licenses.apsl20; + license = licenses.asl20; platforms = platforms.unix; maintainers = with maintainers; [ mkg20001 ]; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 612619c45a3a..9b6dc7344b9f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -244,7 +244,7 @@ with pkgs; castxml = callPackage ../development/tools/castxml { inherit (llvmPackages) libclang llvm; - inherit (python3Packages) sphinx; + inherit (python3.pkgs) sphinx; }; catatonit = callPackage ../applications/virtualization/catatonit { }; @@ -5619,7 +5619,7 @@ with pkgs; gexiv2 = callPackage ../development/libraries/gexiv2 { }; - gftp = callPackage ../applications/networking/gftp { + gftp = callPackage ../applications/networking/ftp/gftp { gtk = gtk2; }; @@ -8366,6 +8366,8 @@ with pkgs; opendylan-bootstrap = opendylan_bin; }; + openfec = callPackage ../development/libraries/openfec { }; + ophis = python3Packages.callPackage ../development/compilers/ophis { }; opendylan_bin = callPackage ../development/compilers/opendylan/bin.nix { }; @@ -9303,6 +9305,8 @@ with pkgs; rmtrash = callPackage ../tools/misc/rmtrash { }; + roc-toolkit = callPackage ../development/libraries/audio/roc-toolkit { }; + rockbox_utility = libsForQt5.callPackage ../tools/misc/rockbox-utility { }; rosegarden = libsForQt514.callPackage ../applications/audio/rosegarden { }; @@ -13574,6 +13578,8 @@ with pkgs; ngn-k = callPackage ../development/interpreters/ngn-k { }; + obb = callPackage ../development/interpreters/clojure/obb.nix { }; + octave = callPackage ../development/interpreters/octave { python = python3; mkDerivation = stdenv.mkDerivation; @@ -20882,6 +20888,8 @@ with pkgs; erlang = erlangR22; }; + dcnnt = python3Packages.callPackage ../servers/dcnnt { }; + dendrite = callPackage ../servers/dendrite { }; dex-oidc = callPackage ../servers/dex { }; @@ -26135,8 +26143,6 @@ with pkgs; smooth = callPackage ../development/libraries/smooth { }; - smos = callPackage ../applications/misc/smos { }; - spectrwm = callPackage ../applications/window-managers/spectrwm { }; spot = callPackage ../applications/audio/spot { }; @@ -26445,6 +26451,8 @@ with pkgs; jackmix = libsForQt5.callPackage ../applications/audio/jackmix { }; jackmix_jack1 = jackmix.override { jack = jack1; }; + jaeles = callPackage ../tools/security/jaeles { }; + jalv = callPackage ../applications/audio/jalv { }; jameica = callPackage ../applications/office/jameica { @@ -27166,6 +27174,7 @@ with pkgs; mopidy-mopify mopidy-mpd mopidy-mpris + mopidy-muse mopidy-musicbox-webclient mopidy-podcast mopidy-scrobbler @@ -27959,9 +27968,7 @@ with pkgs; pinpoint = callPackage ../applications/office/pinpoint { }; - pinta = callPackage ../applications/graphics/pinta { - gtksharp = gtk-sharp-2_0; - }; + pinta = callPackage ../applications/graphics/pinta { }; pistol = callPackage ../tools/misc/pistol { }; @@ -33201,9 +33208,7 @@ with pkgs; fsuae = callPackage ../misc/emulators/fs-uae { }; - fsuae-launcher = callPackage ../misc/emulators/fs-uae-launcher { - inherit (python3Packages) pyqt5 setuptools requests; - }; + fsuae-launcher = callPackage ../misc/emulators/fs-uae/launcher.nix { }; putty = callPackage ../applications/networking/remote/putty { gtk2 = gtk2-x11;