Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e84cf5edad01
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5aa813dcc942
Choose a head ref
  • 3 commits
  • 5 files changed
  • 2 contributors

Commits on Mar 8, 2019

  1. lib: add showWarnings

    oxij authored and danbst committed Mar 8, 2019
    Copy the full SHA
    570aed4 View commit details
  2. pkgs/top-level: check types of nixpkgs.config

    This patch simply introduces a plain simple NixOS module and passes
    `nixpkgs.config` through it via `evalModules` (with some temporary hackery to
    passthru undefined options).
    oxij authored and danbst committed Mar 8, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    4a647dd View commit details
  3. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    5aa813d View commit details
Showing with 76 additions and 11 deletions.
  1. +1 −1 lib/default.nix
  2. +2 −1 lib/trivial.nix
  3. +1 −3 nixos/modules/system/activation/top-level.nix
  4. +51 −0 pkgs/top-level/config.nix
  5. +21 −6 pkgs/top-level/default.nix
2 changes: 1 addition & 1 deletion lib/default.nix
Original file line number Diff line number Diff line change
@@ -59,7 +59,7 @@ let
stringLength sub substring tail;
inherit (trivial) id const concat or and bitAnd bitOr bitXor bitNot
boolToString mergeAttrs flip mapNullable inNixShell min max
importJSON warn info nixpkgsVersion version mod compare
importJSON warn info showWarnings nixpkgsVersion version mod compare
splitByAndCompare functionArgs setFunctionArgs isFunction;
inherit (fixedPoints) fix fix' converge extends composeExtensions
makeExtensible makeExtensibleWithCustomName;
3 changes: 2 additions & 1 deletion lib/trivial.nix
Original file line number Diff line number Diff line change
@@ -259,9 +259,10 @@ rec {
# TODO: figure out a clever way to integrate location information from
# something like __unsafeGetAttrPos.

warn = msg: builtins.trace "WARNING: ${msg}";
warn = msg: builtins.trace "[1;31mwarning: ${msg}[0m";
info = msg: builtins.trace "INFO: ${msg}";

showWarnings = warnings: res: lib.fold (w: x: warn w x) res warnings;

## Function annotations

4 changes: 1 addition & 3 deletions nixos/modules/system/activation/top-level.nix
Original file line number Diff line number Diff line change
@@ -130,11 +130,9 @@ let

failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions);

showWarnings = res: fold (w: x: builtins.trace "warning: ${w}" x) res config.warnings;

baseSystemAssertWarn = if failedAssertions != []
then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"
else showWarnings baseSystem;
else showWarnings config.warnings baseSystem;

# Replace runtime dependencies
system = fold ({ oldDependency, newDependency }: drv:
51 changes: 51 additions & 0 deletions pkgs/top-level/config.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# This file defines the structure of the `config` nixpkgs option.

{ lib, config, ... }:

with lib;

let

mkMeta = args: mkOption (builtins.removeAttrs args [ "feature" ] // {
type = args.type or (types.uniq types.bool);
default = args.default or false;
description = args.description or ''
Whether to ${args.feature} while evaluating nixpkgs.
'' + ''
Changing the default will not cause any rebuilds.
'';
});

mkMassRebuild = args: mkOption (builtins.removeAttrs args [ "feature" ] // {
type = args.type or (types.uniq types.bool);
default = args.default or false;
description = (args.description or ''
Whether to ${args.feature} while building nixpkgs packages.
'') + ''
Changing the default may cause a mass rebuild.
'';
});

options = {

/* Internal stuff */

warnings = mkOption {
type = types.listOf types.str;
default = [];
internal = true;
};

/* Config options */

doCheckByDefault = mkMassRebuild {
feature = "run <literal>checkPhase</literal> by default";
};

};

in {

inherit options;

}
27 changes: 21 additions & 6 deletions pkgs/top-level/default.nix
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@
} @ args:

let # Rename the function arguments
configExpr = config;
config0 = config;
crossSystem0 = crossSystem;

in let
@@ -50,22 +50,37 @@ in let
# Allow both:
# { /* the config */ } and
# { pkgs, ... } : { /* the config */ }
config =
if lib.isFunction configExpr
then configExpr { inherit pkgs; }
else configExpr;
config1 =
if lib.isFunction config0
then config0 { inherit pkgs; }
else config0;

# From a minimum of `system` or `config` (actually a target triple, *not*
# nixpkgs configuration), infer the other one and platform as needed.
localSystem = lib.systems.elaborate (
# Allow setting the platform in the config file. This take precedence over
# the inferred platform, but not over an explicitly passed-in one.
builtins.intersectAttrs { platform = null; } config
builtins.intersectAttrs { platform = null; } config1
// args.localSystem);

crossSystem = if crossSystem0 == null then localSystem
else lib.systems.elaborate crossSystem0;

configEval = lib.evalModules {
modules = [
./config.nix
({ options, ... }: {
_file = "nixpkgs.config";
# filter-out known options, FIXME: remove this eventually
config = builtins.intersectAttrs options config1;
})
];
};

# take all the rest as-is
config = lib.showWarnings configEval.config.warnings
(config1 // builtins.removeAttrs configEval.config [ "_module" ]);

# A few packages make a new package set to draw their dependencies from.
# (Currently to get a cross tool chain, or forced-i686 package.) Rather than
# give `all-packages.nix` all the arguments to this function, even ones that