Commit Graph

34 Commits

Author SHA1 Message Date
Graham Christensen
152c63c9ff
Convert libs to a fixed-point
This does break the API of being able to import any lib file and get
its libs, however I'm not sure people did this.

I made this while exploring being able to swap out docFn with a stub
in #2305, to avoid functor performance problems. I don't know if that
is going to move forward (or if it is a problem or not,) but after
doing all this work figured I'd put it up anyway :)

Two notable advantages to this approach:

1. when a lib inherits another lib's functions, it doesn't
   automatically get put in to the scope of lib
2. when a lib implements a new obscure functions, it doesn't
   automatically get put in to the scope of lib

Using the test script (later in this commit) I got the following diff
on the API:

  + diff master fixed-lib
  11764a11765,11766
  > .types.defaultFunctor
  > .types.defaultTypeMerge
  11774a11777,11778
  > .types.isOptionType
  > .types.isType
  11781a11786
  > .types.mkOptionType
  11788a11794
  > .types.setType
  11795a11802
  > .types.types

This means that this commit _adds_ to the API, however I can't find a
way to fix these last remaining discrepancies. At least none are
_removed_.

Test script (run with nix-repl in the PATH):

  #!/bin/sh

  set -eux

  repl() {
      suff=${1:-}
      echo "(import ./lib)$suff" \
          | nix-repl 2>&1
  }

  attrs_to_check() {
      repl "${1:-}" \
          | tr ';'  $'\n' \
          | grep "\.\.\." \
          | cut -d' ' -f2 \
          | sed -e "s/^/${1:-}./" \
          | sort
  }

  summ() {
      repl "${1:-}" \
          | tr ' ' $'\n' \
          | sort \
          | uniq
  }

  deep_summ() {
      suff="${1:-}"
      depth="${2:-4}"
      depth=$((depth - 1))
      summ "$suff"

      for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do
          if [ $depth -eq 0 ]; then
              summ "$attr" | sed -e "s/^/$attr./"
          else
              deep_summ "$attr" "$depth" | sed -e "s/^/$attr./"
          fi
      done
  }

  (
      cd nixpkgs

      #git add .
      #git commit -m "Auto-commit, sorry" || true
      git checkout fixed-lib
      deep_summ > ../fixed-lib
      git checkout master
      deep_summ > ../master
  )

  if diff master fixed-lib; then
      echo "SHALLOW MATCH!"
  fi

  (
      cd nixpkgs
      git checkout fixed-lib
      repl .types
  )
2017-09-16 21:36:43 -04:00
Domen Kožar
97a4088d33
Add lib.mod: integer modulus 2017-08-30 14:32:27 +02:00
John Ericson
87b4a91fc4 lib: Move fixed-point combinators out of trivial
Trivia != prelude. This is a better organized and less likely to
scare off new contributors.
2017-05-29 18:09:52 -04:00
Jörg Thalheim
948488343b Merge pull request #24835 from Profpatsch/lib-doc-improvements
Lib doc improvements
2017-05-05 07:10:11 +01:00
Peter Simons
a502e327d3 Merge pull request #25201 from ebzzry/fix-typo
Fix typo in trivial.nix
2017-04-25 14:55:52 +02:00
Rommel Martinez
a8fc60745f Fix typo in trivial.nix 2017-04-25 14:36:22 +08:00
Profpatsch
46a36d82ee lib/trivial.nix: add type for fix 2017-04-18 02:57:28 +02:00
John Ericson
37e5e71fdf Merge pull request #24974 from Ericson2314/mapNullable
Introduce `mapNullable` into lib and use it in a few places
2017-04-17 17:12:14 -04:00
John Ericson
85aa5005af Introduce mapNullable into lib and use it in a few places
Also simply some configure flag logic my grep also alerted me too.
2017-04-17 17:04:04 -04:00
Vladimír Čunát
2090aa4f65
Merge: fixup a bad merge
For details see:
https://github.com/NixOS/nixpkgs/commit/24444513fb5#commitcomment-21767916
2017-04-14 19:11:17 +02:00
Vladimír Čunát
24444513fb
Merge branch 'staging' 2017-04-14 10:32:13 +02:00
Franz Pletz
3ab45f4b36
treewide: use boolToString function 2017-04-11 18:18:53 +02:00
Shea Levy
0a15af2ed1 lib: Add composeExtensions for composing extension functions 2017-04-07 14:30:05 -04:00
Profpatsch
b052a36294 lib/trivial: expand function docs 2017-03-15 18:29:33 +01:00
Eelco Dolstra
c20cc6d0b3
Excise use of importJSON
Putting information in external JSON files is IMHO not an improvement
over the idiomatic style of Nix expressions. The use of JSON doesn't
add anything over Nix expressions (in fact it removes expressive
power). And scattering package info over lots of little files makes
packages less readable over having the info in one file.
2017-01-30 11:44:08 +01:00
Eelco Dolstra
e3a873479e
Remove fetchMD5warn
Deprecation warnings should not be used in Nixpkgs because they spam
innocent "nix-env -qa" users with (in this case) dozens of messages
that they can't do anything about.

This also reverts commit 2ca8833383.
2016-11-30 15:14:30 +01:00
Charles Strahan
ca2b03439f Merge pull request #19496 from Ericson2314/overridePackages
Make `overridePackages` extend rather than replace existing overrides
2016-10-26 14:01:13 -04:00
John Ericson
e4cd45a30c top-level: Make overridePackages extend rather than replace existing overrides 2016-10-13 11:14:11 -04:00
Michael Raskin
e207ba7d6a fetchMD5warn: use INFO, maybe Hydra will like this more 2016-10-12 09:31:38 +02:00
Charles Strahan
da36847d92
nixos: make it easy to apply kernel patches
This makes it easy to specify kernel patches:

    boot.kernelPatches = [ pkgs.kernelPatches.ubuntu_fan_4_4 ];

To make the `boot.kernelPatches` option possible, this also makes it
easy to extend and/or modify the kernel packages within a linuxPackages
set. For example:

    pkgs.linuxPackages.extend (self: super: {
      kernel = super.kernel.override {
        kernelPatches = super.kernel.kernelPatches ++ [
          pkgs.kernelPatches.ubuntu_fan_4_4
        ];
      };
    });

Closes #15095
2016-10-11 19:59:00 -04:00
Michael Raskin
f603dc11a6 fetch*: print a trace warning about md5 deprecation 2016-10-09 16:19:04 +02:00
Dan Peebles
4dfdb27e00 lib.{warn, info}: add simple helpers
See also https://github.com/NixOS/nix/issues/749.
2016-08-15 13:54:23 -04:00
Vladimír Čunát
d4de02c46e treewide: change $IN_NIX_SHELL handling
... to be compatible with https://github.com/NixOS/nix/pull/933
while not breaking compatibility with current nix.
2016-08-11 16:40:44 +02:00
Eric Sagnes
e276842f6a lib: refactor nixpkgsVersion with fileContents 2016-08-01 18:35:26 +09:00
zimbatm
22d7c08dc5 lib.trivial: add a new importJSON function
This is meant to be used by packages who often re-generate their inputs.

Producing valid JSON is easier than nix, and also garantees it's purity.
2016-02-29 11:21:56 +00:00
Peter Simons
89a5717c7a lib/trivial.nix: improve spelling 2015-11-25 11:30:43 +01:00
Peter Simons
405fda497a lib: document fix and add fix', extends functions
These functions used to live in pkgs/development/haskell-modules/default.nix,
but they are generic, really, and should be easily accessible to everyone.
2015-11-24 12:48:03 +01:00
Eelco Dolstra
0ae8b365b3 Rename misc.nix -> deprecated.nix 2015-07-23 18:31:54 +02:00
Eelco Dolstra
ef0e4d56f5 Use builtin seq/deepSeq 2015-03-20 19:29:21 +01:00
Eelco Dolstra
5d7000df68 Automatically set nix.nrBuildUsers to at least nix.maxJobs 2015-02-16 12:02:49 +01:00
Eelco Dolstra
4a91cfd32b Add a global variable ‘inNixShell’
This is primarily useful in Nix expressions that are also intended to
be used by nix-shell.  It allows saying things like:

  buildInputs = [ ... ] ++ (if inNixShell then [ emacs ] else [ ]);

This should not be used in Nixpkgs (since the question of what
constitutes a useful nix-shell environment is very subjective).
2014-02-19 19:03:16 +01:00
Eelco Dolstra
484403bf0e Add a constant ‘nixpkgsVersion’
This makes it a bit easier to find out the current Nixpkgs version,
e.g.

  $ nix-instantiate --eval '<nixpkgs>' -A lib.nixpkgsVersion
  "14.02.35657.66f51a9"
2014-02-19 19:03:16 +01:00
Eelco Dolstra
785eaf2cea Add some primops to lib 2013-11-12 13:48:30 +01:00
Eelco Dolstra
5fef92c4a0 Move pkgs/lib/ to lib/ 2013-10-10 13:28:21 +02:00