packages feed

hnix 0.4.0 → 0.5.0

raw patch · 64 files changed

+9798/−24543 lines, 64 filesdep +Diffdep +Globdep +QuickCheckdep −parsecdep −parsersdep −trifectadep ~basedep ~deepseqdep ~deriving-compat

Dependencies added: Diff, Glob, QuickCheck, aeson, array, base16-bytestring, binary, bytestring, cryptohash-md5, cryptohash-sha1, cryptohash-sha256, cryptohash-sha512, directory, exceptions, filepath, generic-random, hashable, hashing, haskeline, http-client, http-client-tls, http-types, interpolate, lens-family, lens-family-core, lens-family-th, logict, megaparsec, monadlist, mtl, optparse-applicative, pretty-show, process, quickcheck-instances, repline, scientific, serialise, split, syb, tasty-quickcheck, template-haskell, these, time, unix, vector, xml

Dependencies removed: parsec, parsers, trifecta

Dependency ranges changed: base, deepseq, deriving-compat, unordered-containers

Files

− Nix/Atoms.hs
@@ -1,48 +0,0 @@-module Nix.Atoms where--import Prelude-import Data.Text (Text, pack)-import GHC.Generics-import Data.Data-import Data.HashMap.Strict (HashMap)---- | Atoms are values that evaluate to themselves. This means that--- they appear in both the parsed AST (in the form of literals) and--- the evaluated form.-data NAtom-  -- | An integer. The c nix implementation currently only supports-  -- integers that fit in the range of 'Int64'.-  = NInt !Integer-  -- | Booleans.-  | NBool !Bool-  -- | Null values. There's only one of this variant.-  | NNull-  -- | URIs, which are just string literals, but do not need quotes.-  | NUri !Text-  deriving (Eq, Ord, Generic, Typeable, Data, Show)--class ToAtom t where-  toAtom :: t -> NAtom--instance ToAtom Bool where toAtom = NBool-instance ToAtom Int where toAtom = NInt . fromIntegral-instance ToAtom Integer where toAtom = NInt--class FromAtom t where-  fromAtom :: NAtom -> t-  fromAtoms :: [NAtom] -> t-  fromAtomSet :: HashMap Text NAtom -> t---- | Convert a primitive into something which can be made from a--- constant. So for example `convert 1 :: Expression`-convert :: (ToAtom prim, FromAtom t) => prim -> t-convert = fromAtom . toAtom---- | Conversion to environment variables for constants.-atomToEnvString :: NAtom -> Text-atomToEnvString = \case-  NInt i -> pack $ show i-  NBool True -> "1"-  NBool False -> ""-  NNull -> ""-  NUri uri -> uri
− Nix/Eval.hs
@@ -1,240 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE RecursiveDo #-}-module Nix.Eval where--import           Control.Applicative-import           Control.Arrow-import           Control.Monad hiding (mapM, sequence)-import           Control.Monad.Fix-import           Data.Fix-import           Data.Foldable (foldl')-import qualified Data.Map as Map-import           Data.Text (Text)-import qualified Data.Text as Text-import           Data.Traversable as T-import           Data.Typeable (Typeable)-import           GHC.Generics-import           Nix.Pretty (atomText)-import           Nix.StringOperations (runAntiquoted)-import           Nix.Atoms-import           Nix.Expr-import           Prelude hiding (mapM, sequence)---- | An 'NValue' is the most reduced form of an 'NExpr' after evaluation--- is completed.-data NValueF m r-    = NVConstant NAtom-    | NVStr Text-    | NVList [r]-    | NVSet (Map.Map Text r)-    | NVFunction (Params r) (NValue m -> m r)-    | NVLiteralPath FilePath-    | NVEnvPath FilePath-    deriving (Generic, Typeable, Functor)--instance Show f => Show (NValueF m f) where-    showsPrec = flip go where-      go (NVConstant atom) = showsCon1 "NVConstant" atom-      go (NVStr      text) = showsCon1 "NVStr"      text-      go (NVList     list) = showsCon1 "NVList"     list-      go (NVSet     attrs) = showsCon1 "NVSet"      attrs-      go (NVFunction r _)  = showsCon1 "NVFunction" r-      go (NVLiteralPath p) = showsCon1 "NVLiteralPath" p-      go (NVEnvPath p)     = showsCon1 "NVEnvPath" p--      showsCon1 :: Show a => String -> a -> Int -> String -> String-      showsCon1 con a d = showParen (d > 10) $ showString (con ++ " ") . showsPrec 11 a--type NValue m = Fix (NValueF m)--valueText :: Functor m => NValue m -> Text-valueText = cata phi where-    phi (NVConstant a)    = atomText a-    phi (NVStr t)         = t-    phi (NVList _)        = error "Cannot coerce a list to a string"-    phi (NVSet _)         = error "Cannot coerce a set to a string"-    phi (NVFunction _ _)  = error "Cannot coerce a function to a string"-    phi (NVLiteralPath p) = Text.pack p-    phi (NVEnvPath p)     = Text.pack p--buildArgument :: Params (NValue m) -> NValue m -> NValue m-buildArgument paramSpec arg = either error (Fix . NVSet) $ case paramSpec of-    Param name -> return $ Map.singleton name arg-    ParamSet (FixedParamSet s) Nothing -> lookupParamSet s-    ParamSet (FixedParamSet s) (Just name) ->-      Map.insert name arg <$> lookupParamSet s-    ParamSet _ _ -> error "Can't yet handle variadic param sets"-  where-    go env k def = maybe (Left err) return $ Map.lookup k env <|> def-      where err = "Could not find " ++ show k-    lookupParamSet s = case arg of-        Fix (NVSet env) -> Map.traverseWithKey (go env) s-        _               -> Left "Unexpected function environment"--evalExpr :: MonadFix m => NExpr -> NValue m -> m (NValue m)-evalExpr = cata phi-  where-    phi (NSym var) = \env -> case env of-      Fix (NVSet s) -> maybe err return $ Map.lookup var s-      _ -> error "invalid evaluation environment"-     where err = error ("Undefined variable: " ++ show var)-    phi (NConstant x) = const $ return $ Fix $ NVConstant x-    phi (NStr str) = fmap (Fix . NVStr) . flip evalString str-    phi (NLiteralPath p) = const $ return $ Fix $ NVLiteralPath p-    phi (NEnvPath p) = const $ return $ Fix $ NVEnvPath p--    phi (NUnary op arg) = \env -> arg env >>= \case-      Fix (NVConstant c) -> pure $ Fix $ NVConstant $ case (op, c) of-        (NNeg, NInt  i) -> NInt  (-i)-        (NNot, NBool b) -> NBool (not b)-        _               -> error $ "unsupported argument type for unary operator " ++ show op-      _ -> error "argument to unary operator must evaluate to an atomic type"-    phi (NBinary op larg rarg) = \env -> do-      lval <- larg env-      rval <- rarg env-      case (lval, rval) of-       (Fix (NVConstant lc), Fix (NVConstant rc)) -> pure $ Fix $ NVConstant $ case (op, lc, rc) of-         (NEq,  l, r) -> NBool $ l == r-         (NNEq, l, r) -> NBool $ l /= r-         (NLt,  l, r) -> NBool $ l <  r-         (NLte, l, r) -> NBool $ l <= r-         (NGt,  l, r) -> NBool $ l >  r-         (NGte, l, r) -> NBool $ l >= r-         (NAnd,  NBool l, NBool r) -> NBool $ l && r-         (NOr,   NBool l, NBool r) -> NBool $ l || r-         (NImpl, NBool l, NBool r) -> NBool $ not l || r-         (NPlus,  NInt l, NInt r) -> NInt $ l + r-         (NMinus, NInt l, NInt r) -> NInt $ l - r-         (NMult,  NInt l, NInt r) -> NInt $ l * r-         (NDiv,   NInt l, NInt r) -> NInt $ l `div` r-         _ -> error $ "unsupported argument types for binary operator " ++ show op-       (Fix (NVStr ls), Fix (NVStr rs)) -> case op of-         NConcat -> pure $ Fix $ NVStr $ ls `mappend` rs-         _ -> error $ "unsupported argument types for binary operator " ++ show op-       (Fix (NVSet ls), Fix (NVSet rs)) -> case op of-         NUpdate -> pure $ Fix $ NVSet $ rs `Map.union` ls-         _ -> error $ "unsupported argument types for binary operator " ++ show op-       _ -> error $ "unsupported argument types for binary operator " ++ show op--    phi (NSelect aset attr alternative) = go where-      go env = do-        aset' <- aset env-        ks    <- evalSelector True env attr-        case extract aset' ks of-         Just v  -> pure v-         Nothing -> case alternative of-           Just v  -> v env-           Nothing -> error "could not look up attribute in value"-      extract (Fix (NVSet s)) (k:ks) = case Map.lookup k s of-                                        Just v  -> extract v ks-                                        Nothing -> Nothing-      extract               _  (_:_) = Nothing-      extract               v     [] = Just v--    phi (NHasAttr aset attr) = \env -> aset env >>= \case-      Fix (NVSet s) -> evalSelector True env attr >>= \case-        [keyName] -> pure $ Fix $ NVConstant $ NBool $ keyName `Map.member` s-        _ -> error "attribute name argument to hasAttr is not a single-part name"-      _ -> error "argument to hasAttr has wrong type"--    phi (NList l) = \env ->-        Fix . NVList <$> mapM ($ env) l--    phi (NSet binds) = \env -> Fix . NVSet <$> evalBinds True env binds--    phi (NRecSet binds) = \env -> case env of-      (Fix (NVSet env')) -> do-        rec-          mergedEnv <- pure $ Fix $ NVSet $ evaledBinds `Map.union` env'-          evaledBinds <- evalBinds True mergedEnv binds-        pure mergedEnv-      _ -> error "invalid evaluation environment"--    phi (NLet binds e) = \env -> case env of-      (Fix (NVSet env')) -> do-        rec-          mergedEnv   <- pure $ Fix $ NVSet $ evaledBinds `Map.union` env'-          evaledBinds <- evalBinds True mergedEnv binds-        e mergedEnv-      _ -> error "invalid evaluation environment"--    phi (NIf cond t f) = \env -> do-      (Fix cval) <- cond env-      case cval of-        NVConstant (NBool True) -> t env-        NVConstant (NBool False) -> f env-        _ -> error "condition must be a boolean"--    phi (NWith scope e) = \env -> case env of-      (Fix (NVSet env')) -> do-        s <- scope env-        case s of-          (Fix (NVSet scope')) -> e . Fix . NVSet $ Map.union scope' env'-          _ -> error "scope must be a set in with statement"-      _ -> error "invalid evaluation environment"--    phi (NAssert cond e) = \env -> do-      (Fix cond') <- cond env-      case cond' of-        (NVConstant (NBool True)) -> e env-        (NVConstant (NBool False)) -> error "assertion failed"-        _ -> error "assertion condition must be boolean"--    phi (NApp fun x) = \env -> do-        fun' <- fun env-        case fun' of-            Fix (NVFunction argset f) -> do-                arg <- x env-                let arg' = buildArgument argset arg-                f arg'-            _ -> error "Attempt to call non-function"--    phi (NAbs a b) = \env -> do-        -- jww (2014-06-28): arglists should not receive the current-        -- environment, but rather should recursively view their own arg-        -- set-        args <- traverse ($ env) a-        return $ Fix $ NVFunction args b--evalString :: Monad m-           => NValue m -> NString (NValue m -> m (NValue m)) -> m Text-evalString env nstr = do-  let fromParts parts = Text.concat <$>-        mapM (runAntiquoted return (fmap valueText . ($ env))) parts-  case nstr of-    Indented parts -> fromParts parts-    DoubleQuoted parts -> fromParts parts--evalBinds :: Monad m => Bool -> NValue m ->-             [Binding (NValue m -> m (NValue m))] ->-             m (Map.Map Text (NValue m))-evalBinds allowDynamic env xs = buildResult <$> sequence (concatMap go xs) where-  buildResult :: [([Text], NValue m)] -> Map.Map Text (NValue m)-  buildResult = foldl' insert Map.empty . map (first reverse) where-    insert _ ([], _) = error "invalid selector with no components"-    insert m (p:ps, v) = modifyPath ps (insertIfNotMember p v) where-      alreadyDefinedErr = error $ "attribute " ++ attr ++ " already defined"-      attr = show $ Text.intercalate "." $ reverse (p:ps)--      modifyPath [] f = f m-      modifyPath (x:parts) f = modifyPath parts $ \m' -> case Map.lookup x m' of-        Nothing                -> Map.singleton x $ g Map.empty-        Just (Fix (NVSet m'')) -> Map.insert x (g m'') m'-        Just _                 -> alreadyDefinedErr-       where g = Fix . NVSet . f--      insertIfNotMember k x m'-        | Map.notMember k m' = Map.insert k x m'-        | otherwise = alreadyDefinedErr--  -- TODO: Inherit-  go (NamedVar x y) = [liftM2 (,) (evalSelector allowDynamic env x) (y env)]-  go _ = [] -- HACK! But who cares right now--evalSelector :: Monad m => Bool -> NValue m -> NAttrPath (NValue m -> m (NValue m)) -> m [Text]-evalSelector dyn env = mapM evalKeyName where-  evalKeyName (StaticKey k) = return k-  evalKeyName (DynamicKey k)-    | dyn       = runAntiquoted (evalString env) (fmap valueText . ($ env)) k-    | otherwise = error "dynamic attribute not allowed in this context"
− Nix/Expr.hs
@@ -1,10 +0,0 @@--- | Wraps the expression submodules.-module Nix.Expr (-  module Nix.Expr.Types,-  module Nix.Expr.Types.Annotated,-  module Nix.Expr.Shorthands-  ) where--import Nix.Expr.Types-import Nix.Expr.Shorthands-import Nix.Expr.Types.Annotated
− Nix/Expr/Shorthands.hs
@@ -1,238 +0,0 @@--- | A bunch of shorthands for making nix expressions.------ Functions with an @F@ suffix return a more general type without the outer--- 'Fix' wrapper.-module Nix.Expr.Shorthands where--import Prelude-import Data.Monoid-import Data.Text (Text)-import Data.Fix-import qualified Data.Map as Map-import Nix.Atoms-import Nix.Expr.Types-import Text.Regex.TDFA.Text ()-import Text.Regex.TDFA ((=~))---- | Make an integer literal expression.-mkInt :: Integer -> NExpr-mkInt = Fix . mkIntF--mkIntF :: Integer -> NExprF a-mkIntF = NConstant . NInt---- | Make a regular (double-quoted) string.-mkStr :: Text -> NExpr-mkStr = Fix . NStr . DoubleQuoted . \case-  "" -> []-  x -> [Plain x]---- | Make an indented string.-mkIndentedStr :: Text -> NExpr-mkIndentedStr = Fix . NStr . Indented . \case-  "" -> []-  x -> [Plain x]---- | Make a literal URI expression.-mkUri :: Text -> NExpr-mkUri = Fix . mkUriF--mkUriF :: Text -> NExprF a-mkUriF = NConstant . NUri---- | Make a path. Use 'True' if the path should be read from the--- environment, else 'False'.-mkPath :: Bool -> FilePath -> NExpr-mkPath b = Fix . mkPathF b--mkPathF :: Bool -> FilePath -> NExprF a-mkPathF False = NLiteralPath-mkPathF True = NEnvPath---- | Make a path expression which pulls from the NIX_PATH env variable.-mkEnvPath :: FilePath -> NExpr-mkEnvPath = Fix . mkEnvPathF--mkEnvPathF :: FilePath -> NExprF a-mkEnvPathF = mkPathF True---- | Make a path expression which references a relative path.-mkRelPath :: FilePath -> NExpr-mkRelPath = Fix . mkRelPathF--mkRelPathF :: FilePath -> NExprF a-mkRelPathF = mkPathF False---- | Make a variable (symbol)-mkSym :: Text -> NExpr-mkSym = Fix . mkSymF--mkSymF :: Text -> NExprF a-mkSymF = NSym--mkSelector :: Text -> NAttrPath NExpr-mkSelector = (:[]) . StaticKey--mkBool :: Bool -> NExpr-mkBool = Fix . mkBoolF--mkBoolF :: Bool -> NExprF a-mkBoolF = NConstant . NBool--mkNull :: NExpr-mkNull = Fix mkNullF--mkNullF :: NExprF a-mkNullF = NConstant NNull--mkOper :: NUnaryOp -> NExpr -> NExpr-mkOper op = Fix . NUnary op--mkOper2 :: NBinaryOp -> NExpr -> NExpr -> NExpr-mkOper2 op a = Fix . NBinary op a--mkParamset :: [(Text, Maybe NExpr)] -> Params NExpr-mkParamset params = ParamSet (mkFixedParamSet params) Nothing--mkFixedParamSet :: [(Text, Maybe NExpr)] -> ParamSet NExpr-mkFixedParamSet ps = FixedParamSet (Map.fromList ps)--mkVariadicParamSet :: [(Text, Maybe NExpr)] -> ParamSet NExpr-mkVariadicParamSet ps = VariadicParamSet (Map.fromList ps)--mkApp :: NExpr -> NExpr -> NExpr-mkApp e = Fix . NApp e--mkRecSet :: [Binding NExpr] -> NExpr-mkRecSet = Fix . NRecSet--mkNonRecSet :: [Binding NExpr] -> NExpr-mkNonRecSet = Fix . NSet--mkLets :: [Binding NExpr] -> NExpr -> NExpr-mkLets bindings = Fix . NLet bindings--mkList :: [NExpr] -> NExpr-mkList = Fix . NList--mkWith :: NExpr -> NExpr -> NExpr-mkWith e = Fix . NWith e--mkAssert :: NExpr -> NExpr -> NExpr-mkAssert e = Fix . NWith e--mkIf :: NExpr -> NExpr -> NExpr -> NExpr-mkIf e1 e2 = Fix . NIf e1 e2--mkFunction :: Params NExpr -> NExpr -> NExpr-mkFunction params = Fix . NAbs params--mkDot :: NExpr -> Text -> NExpr-mkDot e key = mkDots e [key]--mkDots :: NExpr -> [Text] -> NExpr-mkDots e keys = Fix $ NSelect e (toKey <$> keys) Nothing-  where-    toKey :: Text -> NKeyName NExpr-    toKey k = (if isPlainSymbol k then StaticKey else dynamicKey) k-    -- | Make a dynamic key name that is only enclosed in double quotes-    -- (no antiquotes).-    dynamicKey :: Text -> NKeyName NExpr-    dynamicKey k = DynamicKey $ Plain $ DoubleQuoted [Plain k]-    -- | Check if it’s a valid nix symbol-    -- the nix lexer regex for IDs (symbols) is [a-zA-Z\_][a-zA-Z0-9\_\'\-]*-    isPlainSymbol :: Text -> Bool-    isPlainSymbol s = s =~ ("^[a-zA-Z_][a-zA-Z0-9_'-]*$" :: Text)---- | An `inherit` clause without an expression to pull from.-inherit :: [NKeyName e] -> Binding e-inherit = Inherit Nothing---- | An `inherit` clause with an expression to pull from.-inheritFrom :: e -> [NKeyName e] -> Binding e-inheritFrom expr = Inherit (Just expr)---- | Shorthand for producing a binding of a name to an expression.-bindTo :: Text -> NExpr -> Binding NExpr-bindTo name val = NamedVar (mkSelector name) val---- | Infix version of bindTo.-($=) :: Text -> NExpr -> Binding NExpr-name $= value = bindTo name value--infixr 2 $=---- | Append a list of bindings to a set or let expression.--- For example, adding `[a = 1, b = 2]` to `let c = 3; in 4` produces--- `let a = 1; b = 2; c = 3; in 4`.-appendBindings :: [Binding NExpr] -> NExpr -> NExpr-appendBindings newBindings (Fix e) = case e of-  NLet bindings e' -> Fix $ NLet (bindings <> newBindings) e'-  NSet bindings -> Fix $ NSet (bindings <> newBindings)-  NRecSet bindings -> Fix $ NRecSet (bindings <> newBindings)-  _ -> error "Can only append bindings to a set or a let"---- | Applies a transformation to the body of a nix function.-modifyFunctionBody :: (NExpr -> NExpr) -> NExpr -> NExpr-modifyFunctionBody f (Fix e) = case e of-  NAbs params body -> Fix $ NAbs params (f body)-  _ -> error "Not a function"---- | A let statement with multiple assignments.-letsE :: [(Text, NExpr)] -> NExpr -> NExpr-letsE pairs = Fix . NLet (map (uncurry bindTo) pairs)---- | Wrapper for a single-variable @let@.-letE :: Text -> NExpr -> NExpr -> NExpr-letE varName varExpr = letsE [(varName, varExpr)]---- | Make an attribute set (non-recursive).-attrsE :: [(Text, NExpr)] -> NExpr-attrsE pairs = Fix $ NSet (map (uncurry bindTo) pairs)---- | Make an attribute set (recursive).-recAttrsE :: [(Text, NExpr)] -> NExpr-recAttrsE pairs = Fix $ NRecSet (map (uncurry bindTo) pairs)---- | Logical negation.-mkNot :: NExpr -> NExpr-mkNot = Fix . NUnary NNot---- | Dot-reference into an attribute set.-(!.) :: NExpr -> Text -> NExpr-(!.) = mkDot-infixl 8 !.--mkBinop :: NBinaryOp -> NExpr -> NExpr -> NExpr-mkBinop op e1 e2 = Fix (NBinary op e1 e2)---- | Various nix binary operators-($==), ($!=), ($<), ($<=), ($>), ($>=), ($&&), ($||), ($->),-  ($//), ($+), ($-), ($*), ($/), ($++)-  :: NExpr -> NExpr -> NExpr-e1 $== e2 = mkBinop NEq e1 e2-e1 $!= e2 = mkBinop NNEq e1 e2-e1 $< e2 = mkBinop NLt e1 e2-e1 $<= e2 = mkBinop NLte e1 e2-e1 $> e2 = mkBinop NGt e1 e2-e1 $>= e2 = mkBinop NGte e1 e2-e1 $&& e2 = mkBinop NAnd e1 e2-e1 $|| e2 = mkBinop NOr e1 e2-e1 $-> e2 = mkBinop NImpl e1 e2-e1 $// e2 = mkBinop NUpdate e1 e2-e1 $+ e2 = mkBinop NPlus e1 e2-e1 $- e2 = mkBinop NMinus e1 e2-e1 $* e2 = mkBinop NMult e1 e2-e1 $/ e2 = mkBinop NDiv e1 e2-e1 $++ e2 = mkBinop NConcat e1 e2---- | Function application expression.-(@@) :: NExpr -> NExpr -> NExpr-(@@) = mkApp-infixl 1 @@---- | Lambda shorthand.-(==>) :: Params NExpr -> NExpr -> NExpr-(==>) = mkFunction--infixr 1 ==>
− Nix/Expr/Types.hs
@@ -1,272 +0,0 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE TemplateHaskell #-}--- | The nix expression type and supporting types.-module Nix.Expr.Types where--import           Control.Monad hiding (forM_, mapM, sequence)-import           Data.Data-import           Data.Eq.Deriving-import           Data.Fix-import           Data.Foldable-import           Data.Functor.Classes (Eq1(..), Eq2(..), Show1(..), showsUnaryWith, liftShowsPrec2)-import           Data.Map (Map, toList)-import           Data.Text (Text, pack)-import           Data.Traversable-import           GHC.Exts-import           GHC.Generics-import           Nix.Atoms-import           Prelude hiding (readFile, concat, concatMap, elem, mapM,-                                 sequence, minimum, foldr)-import           Text.Show.Deriving---- | The main nix expression type. This is polymorphic so that it can be made--- a functor, which allows us to traverse expressions and map functions over--- them. The actual 'NExpr' type is a fixed point of this functor, defined--- below.-data NExprF r-  = NConstant !NAtom-  -- ^ Constants: ints, bools, URIs, and null.-  | NStr !(NString r)-  -- ^ A string, with interpolated expressions.-  | NSym !Text-  -- ^ A variable. For example, in the expression @f a@, @f@ is represented-  -- as @NSym "f"@ and @a@ as @NSym "a"@.-  | NList ![r]-  -- ^ A list literal.-  | NSet ![Binding r]-  -- ^ An attribute set literal, not recursive.-  | NRecSet ![Binding r]-  -- ^ An attribute set literal, recursive.-  | NLiteralPath !FilePath-  -- ^ A path expression, which is evaluated to a store path. The path here-  -- can be relative, in which case it's evaluated relative to the file in-  -- which it appears.-  | NEnvPath !FilePath-  -- ^ A path which refers to something in the Nix search path (the NIX_PATH-  -- environment variable. For example, @<nixpkgs/pkgs>@.-  | NUnary !NUnaryOp !r-  -- ^ Application of a unary operator to an expression.-  | NBinary !NBinaryOp !r !r-  -- ^ Application of a binary operator to two expressions.-  | NSelect !r !(NAttrPath r) !(Maybe r)-  -- ^ Dot-reference into an attribute set, optionally providing an-  -- alternative if the key doesn't exist.-  | NHasAttr !r !(NAttrPath r)-  -- ^ Ask if a set contains a given attribute path.-  | NAbs !(Params r) !r-  -- ^ A function literal (lambda abstraction).-  | NApp !r !r-  -- ^ Apply a function to an argument.-  | NLet ![Binding r] !r-  -- ^ Evaluate the second argument after introducing the bindings.-  | NIf !r !r !r-  -- ^ If-then-else statement.-  | NWith !r !r-  -- ^ Evaluate an attribute set, bring its bindings into scope, and-  -- evaluate the second argument.-  | NAssert !r !r-  -- ^ Assert that the first returns true before evaluating the second.-  deriving (Ord, Eq, Generic, Typeable, Data, Functor, Foldable, Traversable, Show)---- | We make an `IsString` for expressions, where the string is interpreted--- as an identifier. This is the most common use-case...-instance IsString NExpr where-  fromString = Fix . NSym . fromString----- | The monomorphic expression type is a fixed point of the polymorphic one.-type NExpr = Fix NExprF---- | A single line of the bindings section of a let expression or of a set.-data Binding r-  = NamedVar !(NAttrPath r) !r-  -- ^ An explicit naming, such as @x = y@ or @x.y = z@.-  | Inherit !(Maybe r) ![NKeyName r]-  -- ^ Using a name already in scope, such as @inherit x;@ which is shorthand-  -- for @x = x;@ or @inherit (x) y;@ which means @y = x.y;@.-  deriving (Typeable, Data, Ord, Eq, Functor, Foldable, Traversable, Show)---- | @Params@ represents all the ways the formal parameters to a--- function can be represented.-data Params r-  = Param !Text-  -- ^ For functions with a single named argument, such as @x: x + 1@.-  | ParamSet !(ParamSet r) !(Maybe Text)-  -- ^ Explicit parameters (argument must be a set). Might specify a name-  -- to bind to the set in the function body.-  deriving (Ord, Eq, Generic, Typeable, Data, Functor, Show,-            Foldable, Traversable)--instance IsString (Params r) where-  fromString = Param . fromString---- | An explicit parameter set; provides a shorthand for unpacking arguments.-data ParamSet r-  = FixedParamSet !(Map Text (Maybe r))-  -- ^ A fixed set, where no arguments beyond what is specified in the map-  -- may be given. The map might contain defaults for arguments not passed.-  | VariadicParamSet !(Map Text (Maybe r))-  -- ^ Same as the 'FixedParamSet', but extra arguments are allowed.-  deriving (Ord, Eq, Generic, Typeable, Data, Functor, Show,-            Foldable, Traversable)--instance Eq1 ParamSet where-  liftEq eq (FixedParamSet a) (FixedParamSet b) =-    liftEq (liftEq (liftEq eq)) (Data.Map.toList a) (Data.Map.toList b)-  liftEq eq (VariadicParamSet a) (VariadicParamSet b) =-    liftEq (liftEq (liftEq eq)) (Data.Map.toList a) (Data.Map.toList b)-  liftEq _ _ _ = False---- It's not possible to derive this automatically as there is no Show1 instance--- for Map. We define one locally here.-instance Show1 ParamSet where-  liftShowsPrec sp sl p =-    let liftShowsPrecMap :: (Int -> a -> ShowS)-                         -> ([a] -> ShowS)-                         -> Int-                         -> Map Text a-                         -> ShowS-        liftShowsPrecMap spMap slMap pMap m =-          showsUnaryWith (liftShowsPrec (liftShowsPrec spMap slMap)-                                        (liftShowList spMap slMap))-                         "fromList" pMap (Data.Map.toList m)-        showNamedMap s =-          showsUnaryWith (liftShowsPrecMap (liftShowsPrec sp sl)-                                           (liftShowList sp sl))-                         s p-    in \case-      FixedParamSet m    -> showNamedMap "FixedParamSet" m-      VariadicParamSet m -> showNamedMap "VariadicParamSet" m---- | 'Antiquoted' represents an expression that is either--- antiquoted (surrounded by ${...}) or plain (not antiquoted).-data Antiquoted v r = Plain !v | Antiquoted !r-  deriving (Ord, Eq, Generic, Typeable, Data, Functor, Foldable, Traversable, Show)---- | An 'NString' is a list of things that are either a plain string--- or an antiquoted expression. After the antiquotes have been evaluated,--- the final string is constructed by concating all the parts.-data NString r-  = DoubleQuoted ![Antiquoted Text r]-  -- ^ Strings wrapped with double-quotes (") are not allowed to contain-  -- literal newline characters.-  | Indented ![Antiquoted Text r]-  -- ^ Strings wrapped with two single quotes ('') can contain newlines,-  -- and their indentation will be stripped.-  deriving (Eq, Ord, Generic, Typeable, Data, Functor, Foldable, Traversable, Show)---- | For the the 'IsString' instance, we use a plain doublequoted string.-instance IsString (NString r) where-  fromString "" = DoubleQuoted []-  fromString string = DoubleQuoted [Plain $ pack string]---- | A 'KeyName' is something that can appear at the right side of an--- equals sign. For example, @a@ is a 'KeyName' in @{ a = 3; }@, @let a = 3;--- in ...@, @{}.a@ or @{} ? a@.------ Nix supports both static keynames (just an identifier) and dynamic--- identifiers. Dynamic identifiers can be either a string (e.g.:--- @{ "a" = 3; }@) or an antiquotation (e.g.: @let a = "example";--- in { ${a} = 3; }.example@).------ Note: There are some places where a dynamic keyname is not allowed.--- In particular, those include:------   * The RHS of a @binding@ inside @let@: @let ${"a"} = 3; in ...@---     produces a syntax error.---   * The attribute names of an 'inherit': @inherit ${"a"};@ is forbidden.------ Note: In Nix, a simple string without antiquotes such as @"foo"@ is--- allowed even if the context requires a static keyname, but the--- parser still considers it a 'DynamicKey' for simplicity.-data NKeyName r-  = DynamicKey !(Antiquoted (NString r) r)-  | StaticKey !Text-  deriving (Eq, Ord, Generic, Typeable, Data, Show)---- | Most key names are just static text, so this instance is convenient.-instance IsString (NKeyName r) where-  fromString = StaticKey . fromString--instance Eq1 NKeyName where-  liftEq eq (DynamicKey a) (DynamicKey b) = liftEq2 (liftEq eq) eq a b-  liftEq _ (StaticKey a) (StaticKey b) = a == b-  liftEq _ _ _ = False---- Deriving this instance automatically is not possible because @r@--- occurs not only as last argument in @Antiquoted (NString r) r@-instance Show1 NKeyName where-  liftShowsPrec sp sl p = \case-    DynamicKey a -> showsUnaryWith (liftShowsPrec2 (liftShowsPrec sp sl) (liftShowList sp sl) sp sl) "DynamicKey" p a-    StaticKey t  -> showsUnaryWith showsPrec "StaticKey" p t---- Deriving this instance automatically is not possible because @r@--- occurs not only as last argument in @Antiquoted (NString r) r@-instance Functor NKeyName where-  fmap = fmapDefault---- Deriving this instance automatically is not possible because @r@--- occurs not only as last argument in @Antiquoted (NString r) r@-instance Foldable NKeyName where-  foldMap = foldMapDefault---- Deriving this instance automatically is not possible because @r@--- occurs not only as last argument in @Antiquoted (NString r) r@-instance Traversable NKeyName where-  traverse f = \case-    DynamicKey (Plain str)    -> DynamicKey . Plain <$> traverse f str-    DynamicKey (Antiquoted e) -> DynamicKey . Antiquoted <$> f e-    StaticKey key -> pure (StaticKey key)---- | A selector (for example in a @let@ or an attribute set) is made up--- of strung-together key names.-type NAttrPath r = [NKeyName r]---- | There are two unary operations: logical not and integer negation.-data NUnaryOp = NNeg | NNot-  deriving (Eq, Ord, Generic, Typeable, Data, Show)---- | Binary operators expressible in the nix language.-data NBinaryOp-  = NEq -- ^ Equality (==)-  | NNEq -- ^ Inequality (!=)-  | NLt -- ^ Less than (<)-  | NLte -- ^ Less than or equal (<=)-  | NGt -- ^ Greater than (>)-  | NGte -- ^ Greater than or equal (>=)-  | NAnd -- ^ Logical and (&&)-  | NOr -- ^ Logical or (||)-  | NImpl -- ^ Logical implication (->)-  | NUpdate -- ^ Joining two attribut sets (//)-  | NPlus -- ^ Addition (+)-  | NMinus -- ^ Subtraction (-)-  | NMult -- ^ Multiplication (*)-  | NDiv -- ^ Division (/)-  | NConcat -- ^ List concatenation (++)-  deriving (Eq, Ord, Generic, Typeable, Data, Show)---- | Get the name out of the parameter (there might be none).-paramName :: Params r -> Maybe Text-paramName (Param n) = Just n-paramName (ParamSet _ n) = n--$(deriveEq1 ''NExprF)-$(deriveEq1 ''NString)-$(deriveEq1 ''Binding)-$(deriveEq1 ''Params)-$(deriveEq1 ''Antiquoted)-$(deriveEq2 ''Antiquoted)--$(deriveShow1 ''NExprF)-$(deriveShow1 ''NString)-$(deriveShow1 ''Params)-$(deriveShow1 ''Binding)-$(deriveShow1 ''Antiquoted)-$(deriveShow2 ''Antiquoted)
− Nix/Expr/Types/Annotated.hs
@@ -1,90 +0,0 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFunctor      #-}-{-# LANGUAGE DeriveFoldable     #-}-{-# LANGUAGE DeriveTraversable  #-}-{-# LANGUAGE PatternSynonyms    #-}-{-# LANGUAGE DeriveGeneric      #-}-{-# LANGUAGE FlexibleInstances  #-}-{-# LANGUAGE LambdaCase         #-}-{-# LANGUAGE OverloadedStrings  #-}-{-# LANGUAGE TemplateHaskell    #-}---- | The source location annotated nix expression type and supporting types.----module Nix.Expr.Types.Annotated-  ( module Nix.Expr.Types.Annotated-  , Delta(..)-  )where--import           Control.Monad        hiding (forM_, mapM, sequence)-import           Data.Data-import           Data.Fix-import           Data.Function        (on)-import           Data.Functor.Compose-import           Data.Semigroup-import           GHC.Generics-import           Nix.Expr.Types-import           Nix.Parser.Library   (Delta(..))-import           Prelude              hiding (concat, concatMap, elem, foldr,-                                       mapM, minimum, readFile, sequence)-import           Text.Show.Deriving---- | A location in a source file-data SrcSpan = SrcSpan{ spanBegin :: Delta-                      , spanEnd   :: Delta-                      }-  deriving (Ord, Eq, Generic, Typeable, Data, Show)---- | A type constructor applied to a type along with an annotation------ Intended to be used with 'Fix':--- @type MyType = Fix (Compose (Ann Annotation) F)@-data Ann ann a = Ann{ annotation :: ann-                    , annotated  :: a-                    }-  deriving (Ord, Eq, Data, Generic, Typeable, Functor, Foldable, Traversable, Read, Show)--$(deriveShow1 ''Ann)--instance Semigroup SrcSpan where-  s1 <> s2 = SrcSpan ((min `on` spanBegin) s1 s2)-                     ((max `on` spanEnd) s1 s2)--type AnnF ann f = Compose (Ann ann) f--annToAnnF :: Ann ann (f (Fix (AnnF ann f))) -> Fix (AnnF ann f)-annToAnnF (Ann ann a) = AnnE ann a--type NExprLocF = AnnF SrcSpan NExprF---- | A nix expression with source location at each subexpression.-type NExprLoc = Fix NExprLocF--pattern AnnE ann a = Fix (Compose (Ann ann a))--stripAnnotation :: Functor f => Fix (AnnF ann f) -> Fix f-stripAnnotation = ana (annotated . getCompose . unFix)--nApp :: NExprLoc -> NExprLoc -> NExprLoc-nApp e1@(AnnE s1 _) e2@(AnnE s2 _) = AnnE (s1 <> s2) (NApp e1 e2)--nUnary :: Ann SrcSpan NUnaryOp -> NExprLoc -> NExprLoc-nUnary (Ann s1 u) e1@(AnnE s2 _) = AnnE (s1 <> s2) (NUnary u e1)--nBinary :: Ann SrcSpan NBinaryOp -> NExprLoc -> NExprLoc -> NExprLoc-nBinary (Ann s1 b) e1@(AnnE s2 _) e2@(AnnE s3 _) =-  AnnE (s1 <> s2 <> s3) (NBinary b e1 e2)--nSelectLoc :: NExprLoc -> Ann SrcSpan (NAttrPath NExprLoc) -> Maybe NExprLoc -> NExprLoc-nSelectLoc e1@(AnnE s1 _) (Ann s2 ats) d = case d of-  Nothing               -> AnnE (s1 <> s2) (NSelect e1 ats Nothing)-  Just (e2@(AnnE s3 _)) -> AnnE (s1 <> s2 <> s3) (NSelect e1 ats (Just e2))--nHasAttr :: NExprLoc -> Ann SrcSpan (NAttrPath NExprLoc) -> NExprLoc-nHasAttr e1@(AnnE s1 _) (Ann s2 ats) = AnnE (s1 <> s2) (NHasAttr e1 ats)--nAbs :: Ann SrcSpan (Params NExprLoc) -> NExprLoc -> NExprLoc-nAbs (Ann s1 ps) e1@(AnnE s2 _) = AnnE (s1 <> s2) (NAbs ps e1)--nStr :: Ann SrcSpan (NString NExprLoc) -> NExprLoc-nStr (Ann s1 s) = AnnE s1 (NStr s)
− Nix/Parser.hs
@@ -1,293 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE OverloadedStrings #-}--module Nix.Parser (-  parseNixFile,-  parseNixFileLoc,-  parseNixString,-  parseNixStringLoc,-  parseNixText,-  parseNixTextLoc,-  Result(..)-  ) where--import           Control.Applicative-import           Control.Monad-import           Control.Monad.IO.Class-import           Data.Foldable hiding (concat)-import qualified Data.Map as Map-import           Data.Text hiding (head, map, foldl1', foldl', concat)-import           Nix.Parser.Library-import           Nix.Parser.Operators-import           Nix.Expr-import           Nix.StringOperations-import           Prelude hiding (elem)------------------------------------------------------------------------------------annotateLocation :: Parser a -> Parser (Ann SrcSpan a)-annotateLocation p = do-  begin <- position-  res   <- p-  end   <- position-  let span = SrcSpan begin end-  pure $ Ann span res--annotateLocation1 :: Parser (NExprF NExprLoc) -> Parser NExprLoc-annotateLocation1 = fmap annToAnnF . annotateLocation------------------------------------------------------------------------------------nixExpr :: Parser NExpr-nixExpr = stripAnnotation <$> nixExprLoc---- | The lexer for this parser is defined in 'Nix.Parser.Library'.-nixExprLoc :: Parser NExprLoc-nixExprLoc = whiteSpace *> (nixToplevelForm <|> foldl' makeParser nixTerm nixOperators)- where-  makeParser :: Parser NExprLoc -> Either NSpecialOp NOperatorDef -> Parser NExprLoc-  makeParser term (Left NSelectOp) = nixSelect term-  makeParser term (Left NAppOp) = chainl1 term $ pure $ \a b -> (nApp a b)-  makeParser term (Left NHasAttrOp) = nixHasAttr term-  makeParser term (Right (NUnaryDef name op))-    = build <$> many (annotateLocation (void $ symbol name)) <*> term-    where build :: [Ann SrcSpan ()] -> NExprLoc -> NExprLoc-          build = flip $ foldl' (\t' (Ann s ()) -> nUnary (Ann s op) t')-  makeParser term (Right (NBinaryDef assoc ops)) = case assoc of-    NAssocLeft  -> chainl1 term op-    NAssocRight -> chainr1 term op-    NAssocNone  -> term <**> (flip <$> op <*> term <|> pure id)-   where op :: Parser (NExprLoc -> NExprLoc -> NExprLoc)-         op = choice . map (\(n,o) -> (\(Ann a ()) -> nBinary (Ann a o)) <$> annotateLocation (reservedOp n)) $ ops--antiStart :: Parser String-antiStart = try (string "${") <?> show ("${" :: String)--nixAntiquoted :: Parser a -> Parser (Antiquoted a NExprLoc)-nixAntiquoted p = Antiquoted <$> (antiStart *> nixExprLoc <* symbolic '}') <|> Plain <$> p--selDot :: Parser ()-selDot = try (char '.' *> notFollowedBy (("path" :: String) <$ nixPath)) *> whiteSpace-      <?> "."--nixSelector :: Parser (Ann SrcSpan (NAttrPath NExprLoc))-nixSelector = annotateLocation $ keyName `sepBy1` selDot--nixSelect :: Parser NExprLoc -> Parser NExprLoc-nixSelect term = build-  <$> term-  <*> optional ((,) <$> (selDot *> nixSelector) <*> optional (reserved "or" *> nixExprLoc))- where-  build :: NExprLoc -> Maybe (Ann SrcSpan (NAttrPath NExprLoc), Maybe NExprLoc) -> NExprLoc-  build t Nothing = t-  build t (Just (s,o)) = nSelectLoc t s o--nixHasAttr :: Parser NExprLoc -> Parser NExprLoc-nixHasAttr term = build <$> term <*> optional (reservedOp "?" *> nixSelector) where-  build :: NExprLoc -> Maybe (Ann SrcSpan (NAttrPath NExprLoc)) -> NExprLoc-  build t Nothing = t-  build t (Just s) = nHasAttr t s---- | A self-contained unit.-nixTerm :: Parser NExprLoc-nixTerm = nixSelect $ choice-  [ nixInt, nixBool, nixNull, nixParens, nixList, nixPath, nixSPath, nixUri-  , nixStringExpr, nixSet, nixSym ]--nixToplevelForm :: Parser NExprLoc-nixToplevelForm = choice [nixLambda, nixLet, nixIf, nixAssert, nixWith]--nixSym :: Parser NExprLoc-nixSym = annotateLocation1 $ mkSymF <$> identifier--nixInt :: Parser NExprLoc-nixInt = annotateLocation1 $ mkIntF <$> token decimal <?> "integer"--nixBool :: Parser NExprLoc-nixBool = annotateLocation1 $ try (true <|> false) <?> "bool" where-  true = mkBoolF True <$ reserved "true"-  false = mkBoolF False <$ reserved "false"--nixNull :: Parser NExprLoc-nixNull = annotateLocation1 $ mkNullF <$ try (reserved "null") <?> "null"--nixParens :: Parser NExprLoc-nixParens = parens nixExprLoc <?> "parens"--nixList :: Parser NExprLoc-nixList = annotateLocation1 $ brackets (NList <$> many nixTerm) <?> "list"--pathChars :: String-pathChars = ['A'..'Z'] ++ ['a'..'z'] ++ "._-+" ++ ['0'..'9']--slash :: Parser Char-slash = try (char '/' <* notFollowedBy (char '/')) <?> "slash"---- | A path surrounded by angle brackets, indicating that it should be--- looked up in the NIX_PATH environment variable at evaluation.-nixSPath :: Parser NExprLoc-nixSPath = annotateLocation1 $ mkPathF True <$> try (char '<' *> some (oneOf pathChars <|> slash) <* symbolic '>')-        <?> "spath"--nixPath :: Parser NExprLoc-nixPath = annotateLocation1 $ token $ fmap (mkPathF False) $ ((++)-    <$> (try ((++) <$> many (oneOf pathChars) <*> fmap (:[]) slash) <?> "path")-    <*> fmap concat-      (  some (some (oneOf pathChars)-     <|> liftA2 (:) slash (some (oneOf pathChars)))-      )-    )-    <?> "path"--nixLet :: Parser NExprLoc-nixLet = annotateLocation1 $ NLet-      <$> (reserved "let" *> nixBinders)-      <*> (whiteSpace *> reserved "in" *> nixExprLoc)-      <?> "let"--nixIf :: Parser NExprLoc-nixIf = annotateLocation1 $ NIf-     <$> (reserved "if" *> nixExprLoc)-     <*> (whiteSpace *> reserved "then" *> nixExprLoc)-     <*> (whiteSpace *> reserved "else" *> nixExprLoc)-     <?> "if"--nixAssert :: Parser NExprLoc-nixAssert = annotateLocation1 $ NAssert-  <$> (reserved "assert" *> nixExprLoc)-  <*> (semi *> nixExprLoc)--nixWith :: Parser NExprLoc-nixWith = annotateLocation1 $ NWith-  <$> (reserved "with" *> nixExprLoc)-  <*> (semi *> nixExprLoc)--nixLambda :: Parser NExprLoc-nixLambda = (nAbs <$> annotateLocation (try argExpr <?> "lambda arguments") <*> nixExprLoc) <?> "lambda"--nixStringExpr :: Parser NExprLoc-nixStringExpr = nStr <$> annotateLocation nixString--uriAfterColonC :: Parser Char-uriAfterColonC = alphaNum <|> oneOf "%/?:@&=+$,-_.!~*'"--nixUri :: Parser NExprLoc-nixUri = annotateLocation1 $ token $ fmap (mkUriF . pack) $ (++)-  <$> try ((++) <$> (scheme <* char ':') <*> fmap (\x -> [':',x]) uriAfterColonC)-  <*> many uriAfterColonC- where-  scheme = (:) <$> letter <*> many (alphaNum <|> oneOf "+-.")--nixString :: Parser (NString NExprLoc)-nixString = doubleQuoted <|> indented <?> "string"-  where-    doubleQuoted :: Parser (NString NExprLoc)-    doubleQuoted = DoubleQuoted . removePlainEmpty . mergePlain-                <$> (doubleQ *> many (stringChar doubleQ (void $ char '\\') doubleEscape)-                             <* token doubleQ)-                <?> "double quoted string"--    doubleQ = void $ char '"'-    doubleEscape = Plain . singleton <$> (char '\\' *> escapeCode)--    indented :: Parser (NString NExprLoc)-    indented = stripIndent-            <$> (indentedQ *> many (stringChar indentedQ indentedQ indentedEscape)-                           <* token indentedQ)-            <?> "indented string"--    indentedQ = void $ try (string "''") <?> "\"''\""-    indentedEscape = fmap Plain-              $  try (indentedQ *> char '\\') *> fmap singleton escapeCode-             <|> try (indentedQ *> ("''" <$ char '\'' <|> "$"  <$ char '$'))--    stringChar end escStart esc-       =  esc-      <|> Antiquoted <$> (antiStart *> nixExprLoc <* char '}') -- don't skip trailing space-      <|> Plain . singleton <$> char '$'-      <|> Plain . pack <$> some plainChar-     where plainChar = notFollowedBy (end <|> void (char '$') <|> escStart) *> anyChar--    escapeCode = choice [ c <$ char e | (c,e) <- escapeCodes ] <|> anyChar---- | Gets all of the arguments for a function.-argExpr :: Parser (Params NExprLoc)-argExpr = choice [atLeft, onlyname, atRight] <* symbolic ':' where-  -- An argument not in curly braces. There's some potential ambiguity-  -- in the case of, for example `x:y`. Is it a lambda function `x: y`, or-  -- a URI `x:y`? Nix syntax says it's the latter. So we need to fail if-  -- there's a valid URI parse here.-  onlyname = choice [nixUri >> unexpected "valid uri",-                     Param <$> identifier]--  -- Parameters named by an identifier on the left (`args @ {x, y}`)-  atLeft = try $ do-    name <- identifier <* symbolic '@'-    (constructor, params) <- params-    return $ ParamSet (constructor params) (Just name)--  -- Parameters named by an identifier on the right, or none (`{x, y} @ args`)-  atRight = do-    (constructor, params) <- params-    name <- optional $ symbolic '@' *> identifier-    return $ ParamSet (constructor params) name--  -- Return the parameters set.-  params = do-    (args, dotdots) <- braces getParams-    let constructor = if dotdots then VariadicParamSet else FixedParamSet-    return (constructor, Map.fromList args)--  -- Collects the parameters within curly braces. Returns the parameters and-  -- a boolean indicating if the parameters are variadic.-  getParams :: Parser ([(Text, Maybe NExprLoc)], Bool)-  getParams = go [] where-    -- Attempt to parse `...`. If this succeeds, stop and return True.-    -- Otherwise, attempt to parse an argument, optionally with a-    -- default. If this fails, then return what has been accumulated-    -- so far.-    go acc = (token (string "...") >> return (acc, True)) <|> getMore acc-    getMore acc =-      -- Could be nothing, in which just return what we have so far.-      option (acc, False) $ do-        -- Get an argument name and an optional default.-        pair <- liftA2 (,) identifier (optional $ symbolic '?' *> nixExprLoc)-        -- Either return this, or attempt to get a comma and restart.-        option (acc ++ [pair], False) $ symbolic ',' >> go (acc ++ [pair])--nixBinders :: Parser [Binding NExprLoc]-nixBinders = (inherit <|> namedVar) `endBy` symbolic ';' where-  inherit = Inherit <$> (reserved "inherit" *> optional scope)-                    <*> many keyName-                    <?> "inherited binding"-  namedVar = NamedVar <$> (annotated <$> nixSelector) <*> (symbolic '=' *> nixExprLoc)-          <?> "variable binding"-  scope = parens nixExprLoc <?> "inherit scope"--keyName :: Parser (NKeyName NExprLoc)-keyName = dynamicKey <|> staticKey where-  staticKey = StaticKey <$> identifier-  dynamicKey = DynamicKey <$> nixAntiquoted nixString--nixSet :: Parser NExprLoc-nixSet = annotateLocation1 $ (isRec <*> braces nixBinders) <?> "set" where-  isRec = (try (reserved "rec" *> pure NRecSet) <?> "recursive set")-       <|> pure NSet--parseNixFile :: MonadIO m => FilePath -> m (Result NExpr)-parseNixFile = parseFromFileEx $ nixExpr <* eof--parseNixFileLoc :: MonadIO m => FilePath -> m (Result NExprLoc)-parseNixFileLoc = parseFromFileEx $ nixExprLoc <* eof--parseNixString :: String -> Result NExpr-parseNixString = parseFromString $ nixExpr <* eof--parseNixStringLoc :: String -> Result NExprLoc-parseNixStringLoc = parseFromString $ nixExprLoc <* eof--parseNixText :: Text -> Result NExpr-parseNixText = parseNixString . unpack--parseNixTextLoc :: Text -> Result NExprLoc-parseNixTextLoc = parseNixStringLoc . unpack
− Nix/Parser/Library.hs
@@ -1,138 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE OverloadedStrings #-}-module Nix.Parser.Library-  ( module Nix.Parser.Library-  , module X-  , Trifecta.Delta(..)-  ) where--import Prelude-import Control.Applicative-import Control.Monad-import Control.Monad.IO.Class-import Data.Text hiding (map)-import Text.Parser.Expression as X-import Text.Parser.LookAhead as X-import Text.Parser.Token as X-import Text.Parser.Char as X hiding (text)-import Text.Parser.Combinators as X-import Text.PrettyPrint.ANSI.Leijen as X (Doc, text)-import Text.Parser.Token.Highlight-import Text.Parser.Token.Style--import qualified Data.HashSet as HashSet--#if USE_PARSEC-import qualified Text.Parsec as Parsec-import qualified Text.Parsec.Text as Parsec-import qualified Data.Text.IO as T-#else-import qualified Text.Trifecta as Trifecta-import qualified Text.Trifecta.Delta as Trifecta--import Text.Trifecta as X (Result(..))-#endif--newtype NixParser p a = NixParser { runNixParser :: p a }-  deriving (Functor, Applicative, Alternative, Monad, MonadPlus, Parsing, CharParsing, LookAheadParsing, Trifecta.DeltaParsing)--instance TokenParsing p => TokenParsing (NixParser p) where-  someSpace = NixParser $ buildSomeSpaceParser someSpace commentStyle-  nesting = NixParser . nesting . runNixParser-  highlight h = NixParser . highlight h . runNixParser-  semi = token $ char ';' <?> ";"-  token p = p <* whiteSpace--commentStyle :: CommentStyle-commentStyle = CommentStyle-  { _commentStart = "/*"-  , _commentEnd   = "*/"-  , _commentLine  = "#"-  , _commentNesting = True-  }--identStyle :: CharParsing m => IdentifierStyle m-identStyle = IdentifierStyle-  { _styleName = "identifier"-  , _styleStart = identStart-  , _styleLetter = identLetter-  , _styleReserved = reservedNames-  , _styleHighlight = Identifier-  , _styleReservedHighlight = ReservedIdentifier-  }--identifier :: (TokenParsing m, Monad m) => m Text-identifier = ident identStyle <?> "identifier"--reserved :: (TokenParsing m, Monad m) => String -> m ()-reserved = reserve identStyle--reservedOp :: TokenParsing m => String -> m ()-reservedOp o = token $ try $ () <$-  highlight ReservedOperator (string o) <* (notFollowedBy opLetter <?> "end of " ++ o)--opStart :: CharParsing m => m Char-opStart = oneOf ".+-*/=<>&|!?"--opLetter :: CharParsing m => m Char-opLetter = oneOf ">-+/&|="--identStart :: CharParsing m => m Char-identStart = letter <|> char '_'--identLetter :: CharParsing m => m Char-identLetter = alphaNum <|> oneOf "_'-"--reservedNames :: HashSet.HashSet String-reservedNames = HashSet.fromList-    [ "let", "in"-    , "if", "then", "else"-    , "assert"-    , "with"-    , "rec"-    , "inherit"-    , "or"-    ]--stopWords :: (TokenParsing m, Monad m) => m ()-stopWords = () <$-    (whiteSpace *> (reserved "in" <|> reserved "then" <|> reserved "else"))--someTill :: Alternative f => f a -> f end -> f [a]-someTill p end = go-  where-    go   = (:) <$> p <*> scan-    scan = (end *> pure []) <|>  go-----------------------------------------------------------------------------------parseFromFileEx :: MonadIO m => Parser a -> FilePath -> m (Result a)-parseFromString :: Parser a -> String -> Result a-position :: Parser Trifecta.Delta--#if USE_PARSEC-data Result a = Success a-              | Failure Doc-  deriving Show--type Parser = NixParser Parsec.Parser--parseFromFileEx p path =-    (either (Failure . text . show) Success . Parsec.parse (runNixParser p) path)-        `liftM` liftIO (T.readFile path)--parseFromString p = either (Failure . text . show) Success . Parsec.parse (runNixParser p) "<string>" . pack--position = error "position not implemented for Parsec parser"--#else--type Parser = NixParser Trifecta.Parser--parseFromFileEx p = Trifecta.parseFromFileEx (runNixParser p)--parseFromString p = Trifecta.parseString (runNixParser p) (Trifecta.Directed "<string>" 0 0 0 0)--position = Trifecta.position--#endif
− Nix/Parser/Operators.hs
@@ -1,81 +0,0 @@-module Nix.Parser.Operators where--import           Data.Data (Data(..))-import           Data.Foldable (concat)-import qualified Data.Map as Map-import           Data.Maybe (catMaybes)-import           Data.Typeable (Typeable)-import           GHC.Exts-import           GHC.Generics-import           Nix.Expr-import           Prelude hiding (readFile, concat, concatMap, elem, mapM,-                                 sequence, minimum, foldr)--data NSpecialOp = NHasAttrOp | NSelectOp | NAppOp-  deriving (Eq, Ord, Generic, Typeable, Data, Show)--data NAssoc = NAssocNone | NAssocLeft | NAssocRight-  deriving (Eq, Ord, Generic, Typeable, Data, Show)--data NOperatorDef-  = NUnaryDef String NUnaryOp-  | NBinaryDef NAssoc [(String, NBinaryOp)]-  deriving (Eq, Ord, Generic, Typeable, Data, Show)--nixOperators :: [Either NSpecialOp NOperatorDef]-nixOperators =-  [ Left NSelectOp-  , Left NAppOp-  , Right $ NUnaryDef "-" NNeg-  , Left NHasAttrOp-  ] ++ map Right-  [ NBinaryDef NAssocRight [("++", NConcat)]-  , NBinaryDef NAssocLeft [("*", NMult), ("/", NDiv)]-  , NBinaryDef NAssocLeft [("+", NPlus), ("-", NMinus)]-  , NUnaryDef  "!"  NNot-  , NBinaryDef NAssocRight [("//", NUpdate)]-  , NBinaryDef NAssocLeft [("<", NLt), (">", NGt), ("<=", NLte), (">=", NGte)]-  , NBinaryDef NAssocNone [("==", NEq), ("!=", NNEq)]-  , NBinaryDef NAssocLeft [("&&", NAnd)]-  , NBinaryDef NAssocLeft [("||", NOr)]-  , NBinaryDef NAssocNone [("->", NImpl)]-  ]--data OperatorInfo = OperatorInfo-  { precedence    :: Int-  , associativity :: NAssoc-  , operatorName  :: String-  } deriving (Eq, Ord, Generic, Typeable, Data, Show)--getUnaryOperator :: NUnaryOp -> OperatorInfo-getUnaryOperator = (m Map.!) where-  m = Map.fromList . concat . zipWith buildEntry [1..] . reverse $-        nixOperators-  buildEntry i = \case-    Right (NUnaryDef name op) -> [(op, OperatorInfo i NAssocNone name)]-    _ -> []--getBinaryOperator :: NBinaryOp -> OperatorInfo-getBinaryOperator = (m Map.!) where-  m = Map.fromList . concat . zipWith buildEntry [1..] . reverse $-        nixOperators-  buildEntry i = \case-    Right (NBinaryDef assoc ops) -> do-      [(op, OperatorInfo i assoc name) | (name,op) <- ops]-    _ -> []--getSpecialOperatorPrec :: NSpecialOp -> Int-getSpecialOperatorPrec = (m Map.!) where-  m = Map.fromList . catMaybes . zipWith buildEntry [1..] . reverse $-        nixOperators-  buildEntry _ (Right _) = Nothing-  buildEntry i (Left op) = Just (op, i)--selectOp :: OperatorInfo-selectOp = OperatorInfo (getSpecialOperatorPrec NSelectOp) NAssocLeft "."--hasAttrOp :: OperatorInfo-hasAttrOp = OperatorInfo (getSpecialOperatorPrec NHasAttrOp) NAssocLeft "?"--appOp :: OperatorInfo-appOp = OperatorInfo (getSpecialOperatorPrec NAppOp) NAssocLeft " "
− Nix/Pretty.hs
@@ -1,177 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-module Nix.Pretty where--import Prelude hiding ((<$>))-import Data.Fix-import Data.Map (toList)-import Data.Maybe (isJust)-import Data.Text (Text, pack, unpack, replace, strip)-import Data.List (isPrefixOf)-import Nix.Atoms-import Nix.Expr-import Nix.Parser.Library (reservedNames)-import Nix.Parser.Operators-import Nix.StringOperations-import Text.PrettyPrint.ANSI.Leijen--import qualified Data.Text as Text-import qualified Data.HashSet as HashSet---- | This type represents a pretty printed nix expression--- together with some information about the expression.-data NixDoc = NixDoc-  { -- | The rendered expression, without any parentheses.-    withoutParens    :: Doc--    -- | The root operator is the operator at the root of-    -- the expression tree. For example, in '(a * b) + c', '+' would be the root-    -- operator. It is needed to determine if we need to wrap the expression in-    -- parentheses.-  , rootOp :: OperatorInfo-  }---- | A simple expression is never wrapped in parentheses. The expression--- behaves as if its root operator had a precedence higher than all--- other operators (including function application).-simpleExpr :: Doc -> NixDoc-simpleExpr = flip NixDoc $ OperatorInfo maxBound NAssocNone "simple expr"---- | An expression that behaves as if its root operator--- had a precedence lower than all other operators.--- That ensures that the expression is wrapped in parantheses in--- almost always, but it's still rendered without parentheses--- in cases where parentheses are never required (such as in the LHS--- of a binding).-leastPrecedence :: Doc -> NixDoc-leastPrecedence = flip NixDoc $ OperatorInfo minBound NAssocNone "least precedence"--appOpNonAssoc :: OperatorInfo-appOpNonAssoc = appOp { associativity = NAssocNone }--wrapParens :: OperatorInfo -> NixDoc -> Doc-wrapParens op sub-  | precedence (rootOp sub) > precedence op = withoutParens sub-  | precedence (rootOp sub) == precedence op-    && associativity (rootOp sub) == associativity op-    && associativity op /= NAssocNone = withoutParens sub-  | otherwise = parens $ withoutParens sub--prettyString :: NString NixDoc -> Doc-prettyString (DoubleQuoted parts) = dquotes . hcat . map prettyPart $ parts-  where prettyPart (Plain t)      = text . concatMap escape . unpack $ t-        prettyPart (Antiquoted r) = text "$" <> braces (withoutParens r)-        escape '"' = "\\\""-        escape x = maybe [x] (('\\':) . (:[])) $ toEscapeCode x-prettyString (Indented parts)-  = group $ nest 2 (squote <> squote <$$> content) <$$> squote <> squote- where-  content = vsep . map prettyLine . stripLastIfEmpty . splitLines $ parts-  stripLastIfEmpty = reverse . f . reverse where-    f ([Plain t] : xs) | Text.null (strip t) = xs-    f xs = xs-  prettyLine = hcat . map prettyPart-  prettyPart (Plain t) = text . unpack . replace "${" "''${" . replace "''" "'''" $ t-  prettyPart (Antiquoted r) = text "$" <> braces (withoutParens r)--prettyParams :: Params NixDoc -> Doc-prettyParams (Param n) = text $ unpack n-prettyParams (ParamSet s mname) = prettyParamSet s <> case mname of-  Nothing -> empty-  Just name -> text "@" <> text (unpack name)--prettyParamSet :: ParamSet NixDoc -> Doc-prettyParamSet params = lbrace <+> middle <+> rbrace-  where-    prettyArgs = case params of-      FixedParamSet args -> map prettySetArg (toList args)--      VariadicParamSet args -> map prettySetArg (toList args) ++ [text "..."]-    middle = hcat $ punctuate (comma <> space) prettyArgs-    prettySetArg (n, maybeDef) = case maybeDef of-      Nothing -> text (unpack n)-      Just v -> text (unpack n) <+> text "?" <+> withoutParens v--prettyBind :: Binding NixDoc -> Doc-prettyBind (NamedVar n v) = prettySelector n <+> equals <+> withoutParens v <> semi-prettyBind (Inherit s ns)-  = text "inherit" <+> scope <> fillSep (map prettyKeyName ns) <> semi- where scope = maybe empty ((<> space) . parens . withoutParens) s--prettyKeyName :: NKeyName NixDoc -> Doc-prettyKeyName (StaticKey key)-  | HashSet.member (unpack key) reservedNames = dquotes $ text $ unpack key-prettyKeyName (StaticKey key) = text . unpack $ key-prettyKeyName (DynamicKey key) = runAntiquoted prettyString withoutParens key--prettySelector :: NAttrPath NixDoc -> Doc-prettySelector = hcat . punctuate dot . map prettyKeyName---- | Translate an atom into its nix representation.-atomText :: NAtom -> Text-atomText (NInt i)   = pack (show i)-atomText (NBool b)  = if b then "true" else "false"-atomText NNull      = "null"-atomText (NUri uri) = uri--prettyAtom :: NAtom -> NixDoc-prettyAtom atom = simpleExpr $ text $ unpack $ atomText atom--prettyNix :: NExpr -> Doc-prettyNix = withoutParens . cata phi where-  phi :: NExprF NixDoc -> NixDoc-  phi (NConstant atom) = prettyAtom atom-  phi (NStr str) = simpleExpr $ prettyString str-  phi (NList []) = simpleExpr $ lbracket <> rbracket-  phi (NList xs) = simpleExpr $ group $-    nest 2 (vsep $ lbracket : map (wrapParens appOpNonAssoc) xs) <$> rbracket-  phi (NSet []) = simpleExpr $ lbrace <> rbrace-  phi (NSet xs) = simpleExpr $ group $-    nest 2 (vsep $ lbrace : map prettyBind xs) <$> rbrace-  phi (NRecSet []) = simpleExpr $ recPrefix <> lbrace <> rbrace-  phi (NRecSet xs) = simpleExpr $ group $-    nest 2 (vsep $ recPrefix <> lbrace : map prettyBind xs) <$> rbrace-  phi (NAbs args body) = leastPrecedence $-    (prettyParams args <> colon) </> (nest 2 $ withoutParens body)-  phi (NBinary op r1 r2) = flip NixDoc opInfo $ hsep-    [ wrapParens (f NAssocLeft) r1-    , text $ operatorName opInfo-    , wrapParens (f NAssocRight) r2-    ]-    where-      opInfo = getBinaryOperator op-      f x-        | associativity opInfo /= x = opInfo { associativity = NAssocNone }-        | otherwise = opInfo-  phi (NUnary op r1) =-    NixDoc (text (operatorName opInfo) <> wrapParens opInfo r1) opInfo-    where opInfo = getUnaryOperator op-  phi (NSelect r attr o) = (if isJust o then leastPrecedence else flip NixDoc selectOp) $-     wrapParens selectOp r <> dot <> prettySelector attr <> ordoc-    where ordoc = maybe empty (((space <> text "or") <+>) . withoutParens) o-  phi (NHasAttr r attr)-    = NixDoc (wrapParens hasAttrOp r <+> text "?" <+> prettySelector attr) hasAttrOp-  phi (NApp fun arg)-    = NixDoc (wrapParens appOp fun <+> wrapParens appOpNonAssoc arg) appOp-  phi (NEnvPath p) = simpleExpr $ text ("<" ++ p ++ ">")-  phi (NLiteralPath p) = simpleExpr $ text $ case p of-    "./" -> "./."-    "../" -> "../."-    ".." -> "../."-    txt | "/" `isPrefixOf` txt -> txt-        | "./" `isPrefixOf` txt -> txt-        | "../" `isPrefixOf` txt -> txt-        | otherwise -> "./" ++ txt-  phi (NSym name) = simpleExpr $ text (unpack name)-  phi (NLet binds body) = leastPrecedence $ group $ nest 2 $-        vsep (text "let" : map prettyBind binds) <$> text "in" <+> withoutParens body-  phi (NIf cond trueBody falseBody) = leastPrecedence $-    group $ nest 2 $ (text "if" <+> withoutParens cond) <$>-      (  align (text "then" <+> withoutParens trueBody)-     <$> align (text "else" <+> withoutParens falseBody)-      )-  phi (NWith scope body) = leastPrecedence $-    text "with"  <+> withoutParens scope <> semi <+> withoutParens body-  phi (NAssert cond body) = leastPrecedence $-    text "assert" <+> withoutParens cond <> semi <+> withoutParens body--  recPrefix = text "rec" <> space
− Nix/StringOperations.hs
@@ -1,87 +0,0 @@--- | Functions for manipulating nix strings.-module Nix.StringOperations where--import Nix.Expr-import           Data.List (intercalate)-import           Data.Monoid ((<>))-import           Data.Text (Text)-import qualified Data.Text as T-import           Prelude hiding (elem)-import           Data.Tuple (swap)----- | Merge adjacent 'Plain' values with 'mappend'.-mergePlain :: Monoid v => [Antiquoted v r] -> [Antiquoted v r]-mergePlain [] = []-mergePlain (Plain a: Plain b: xs) = mergePlain (Plain (a <> b) : xs)-mergePlain (x:xs) = x : mergePlain xs---- | Remove 'Plain' values equal to 'mempty', as they don't have any--- informational content.-removePlainEmpty :: (Eq v, Monoid v) => [Antiquoted v r] -> [Antiquoted v r]-removePlainEmpty = filter f where-  f (Plain x) = x /= mempty-  f _ = True---- | Equivalent to case splitting on 'Antiquoted' strings.-runAntiquoted :: (v -> a) -> (r -> a) -> Antiquoted v r -> a-runAntiquoted f _ (Plain v) = f v-runAntiquoted _ f (Antiquoted r) = f r---- | Split a stream representing a string with antiquotes on line breaks.-splitLines :: [Antiquoted Text r] -> [[Antiquoted Text r]]-splitLines = uncurry (flip (:)) . go where-  go (Plain t : xs) = (Plain l :) <$> foldr f (go xs) ls where-    (l : ls) = T.split (=='\n') t-    f prefix (finished, current) = ((Plain prefix : current) : finished, [])-  go (Antiquoted a : xs) = (Antiquoted a :) <$> go xs-  go [] = ([],[])---- | Join a stream of strings containing antiquotes again. This is the inverse--- of 'splitLines'.-unsplitLines :: [[Antiquoted Text r]] -> [Antiquoted Text r]-unsplitLines = intercalate [Plain "\n"]---- | Form an indented string by stripping spaces equal to the minimal indent.-stripIndent :: [Antiquoted Text r] -> NString r-stripIndent [] = Indented []-stripIndent xs =-  Indented . removePlainEmpty . mergePlain . unsplitLines $ ls'-  where-    ls = stripEmptyOpening $ splitLines xs-    ls' = map (dropSpaces minIndent) ls--    minIndent = case stripEmptyLines ls of-      [] -> 0-      nonEmptyLs -> minimum $ map (countSpaces . mergePlain) nonEmptyLs--    stripEmptyLines = filter $ \case-      [Plain t] -> not $ T.null $ T.strip t-      _ -> True--    stripEmptyOpening ([Plain t]:ts) | T.null (T.strip t) = ts-    stripEmptyOpening ts = ts--    countSpaces (Antiquoted _:_) = 0-    countSpaces (Plain t : _) = T.length . T.takeWhile (== ' ') $ t-    countSpaces [] = 0--    dropSpaces 0 x = x-    dropSpaces n (Plain t : cs) = Plain (T.drop n t) : cs-    dropSpaces _ _ = error "stripIndent: impossible"--escapeCodes :: [(Char, Char)]-escapeCodes =-  [ ('\n', 'n' )-  , ('\r', 'r' )-  , ('\t', 't' )-  , ('\\', '\\')-  , ('$' , '$' )-  , ('"', '"')-  ]--fromEscapeCode :: Char -> Maybe Char-fromEscapeCode = (`lookup` map swap escapeCodes)--toEscapeCode :: Char -> Maybe Char-toEscapeCode = (`lookup` escapeCodes)
+ README.md view
@@ -0,0 +1,94 @@+# hnix++[![Build Status](https://api.travis-ci.org/haskell-nix/hnix.svg)](https://travis-ci.org/haskell-nix/hnix)+[![Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/haskell-nix/Lobby)++Haskell parser, evaluator and type checker for the Nix language.++## Prerequisites++Nix is installed and in your `$PATH`. This is so that `nix-store` can be used+for interacting with store paths, until `hnix-store` is ready.++## Getting Started++```bash+$ git clone --recursive https://github.com/haskell-nix/hnix.git+...+$ cd hnix+$ nix-shell+$ cabal configure --enable-tests+$ cabal build+$ cabal test+# To run all of the tests, which takes up to a minute:+$ LANGUAGE_TESTS=yes NIXPKGS_TESTS=yes cabal test+$ ./dist/build/hnix/hnix --help+```++## Building a Docker container++If you don't have Nix installed, or you'd just like to play around with `hnix`+completely separately from your main system, you can build a Docker container:++```bash+$ docker build -t hnix .+$ docker run hnix hnix --eval --expr '1 + 2'++# In order to refer to files under the current directory:+$ docker run -v $PWD/:/tmp/build run hnix hnix default.nix+```++## Building with full debug info++To build `hnix` for debugging, and with full tracing output and stack traces,+use:++```+$ nix-shell --arg doProfiling true+$ cabal configure --enable-tests --enable-profiling --flags=tracing+$ cabal build+$ ./dist/build/hnix/hnix -v5 --trace <args> +RTS -xc+```++Note that this will run quite slowly, but will give the most information as to+what might potentially be going wrong during parsing or evaluation.++## Building with benchmarks enabled++To build `hnix` with benchmarks enabled:++```+$ nix-shell --arg doBenchmarks true+$ cabal configure --enable-tests --enable-benchmarks+$ cabal build+$ cabal bench+```++## Building with profiling enabled++To build `hnix` with profiling enabled:++```+$ nix-shell --arg doProfiling true+$ cabal configure --enable-tests --enable-profiling+$ cabal build+$ ./dist/build/hnix/hnix <args> +RTS -p+```++## How you can help++If you're looking for a way to help out, try taking a look+[here](https://github.com/haskell-nix/hnix/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+no%3Aassignee).+When you find an issue that looks interesting to you, comment on the ticket to+let others know you're working on it; look for others who might have done the+same. You can talk with everyone live on+[Gitter](https://gitter.im/haskell-nix/Lobby).++When you're ready to submit a pull request, test it with:+```+git submodule update --init --recursive+nix-shell --run "LANGUAGE_TESTS=yes cabal test"+```++Make sure that all the tests that were passing prior to your PR are still+passing afterwards; it's OK if no new tests are passing.
− data/let-comments-multiline.nix
@@ -1,13 +0,0 @@-let-  b.a = 3; /*-   this is a multiline comment-   /* we can also nest these comments-    */ /*-   */-  */-  b.c = { e = {}; };-  /* just some more comments-   */-  b.c.e.f = 4;-/* this file is documented really well */-in b /* todo */
− data/let-comments.nix
@@ -1,13 +0,0 @@-let-  b.a = 3;-   # this is a oneline comment-   # we can also nest these comments-    # #-   #-  #-  b.c = { e = {}; };-  # just some more comments-   #-  b.c.e.f = 4;-# this file is documented really well-in b # todo
− data/let.nix
@@ -1,5 +0,0 @@-let-  b.a = 3;-  b.c = { e = {}; };-  b.c.e.f = 4;-in b
− data/nixpkgs-all-packages-pretty.nix
@@ -1,10835 +0,0 @@-{ bootStdenv ? null, config ? null, crossSystem ? null, gccWithCC ? true, gccWithProfiling ? true, noSysDirs ? system != "x86_64-darwin" && system != "x86_64-freebsd" && system != "i686-freebsd" && system != "x86_64-kfreebsd-gnu", platform ? null, system ? builtins.currentSystem }:-let-  config_ = config;-  platform_ = platform;-  in let-    lib = import ../../lib;-    config = let-      toPath = builtins.toPath;-      getEnv = x: if builtins ? getEnv-        then builtins.getEnv x-        else "";-      pathExists = name:-      builtins ? pathExists && builtins.pathExists (toPath name);-      configFile = getEnv "NIXPKGS_CONFIG";-      homeDir = getEnv "HOME";-      configFile2 = homeDir + "/.nixpkgs/config.nix";-      configExpr = if config_ != null-        then config_-        else if configFile != "" && pathExists configFile-          then import (toPath configFile)-          else if homeDir != "" && pathExists configFile2-            then import (toPath configFile2)-            else { };-      in if builtins.isFunction configExpr-        then configExpr {-          inherit pkgs;-        }-        else configExpr;-    platformAuto = let-      platforms = import ./platforms.nix;-      in if system == "armv6l-linux"-        then platforms.raspberrypi-        else if system == "armv5tel-linux"-          then platforms.sheevaplug-          else if system == "mips64el-linux"-            then platforms.fuloong2f_n32-            else if system == "x86_64-linux"-              then platforms.pc64-              else if system == "i686-linux"-                then platforms.pc32-                else platforms.pcBase;-    platform = if platform_ != null-      then platform_-      else config.platform or platformAuto;-    helperFunctions = stdenvAdapters // import ../build-support/trivial-builders.nix {-      inherit (pkgs) stdenv;-      inherit (pkgs.xorg) lndir;-    };-    stdenvAdapters = import ../stdenv/adapters.nix pkgs;-    pkgs = applyGlobalOverrides (config.packageOverrides or pkgs:-    { });-    applyGlobalOverrides = overrider:-    let-      overrides = overrider pkgsOrig // lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem == null) (pkgsOrig.stdenv.overrides pkgsOrig);-      pkgsOrig = pkgsFun pkgs { };-      pkgs = pkgsFun pkgs overrides;-      in pkgs;-    pkgsFun = pkgs: overrides:-    with helperFunctions; let-      defaultScope = pkgs // pkgs.xorg;-      self = self_ // overrides;-      self_ = with self; helperFunctions // {-        inherit system platform;-        inherit pkgs;-        callPackage = newScope { };-        newScope = extra:-        lib.callPackageWith (defaultScope // extra);-        forceSystem = system: kernel:-        import ./all-packages.nix {-          inherit system;-          platform = platform // {-            kernelArch = kernel;-          };-          inherit bootStdenv noSysDirs-          gccWithCC gccWithProfiling-          config crossSystem;-        };-        pkgsi686Linux = forceSystem "i686-linux" "i386";-        callPackage_i686 = lib.callPackageWith (pkgsi686Linux // pkgsi686Linux.xorg);-        path = ../..;-        x11 = xlibsWrapper;-        xlibs = xorg // {-          xlibs = xlibsWrapper;-        };-        inherit lib config-        stdenvAdapters;-        inherit (lib) lowPrio hiPrio-        appendToName makeOverridable;-        inherit (misc) versionedDerivation;-        recurseIntoAttrs = attrs:-        attrs // {-          recurseForDerivations = true;-        };-        builderDefs = lib.composedArgsAndFun (import ../build-support/builder-defs/builder-defs.nix) {-          inherit stringsWithDeps lib-          stdenv writeScript fetchurl-          fetchmtn fetchgit;-        };-        builderDefsPackage = builderDefs.builderDefsPackage builderDefs;-        stringsWithDeps = lib.stringsWithDeps;-        nix-generate-from-cpan = callPackage ../../maintainers/scripts/nix-generate-from-cpan.nix {-        };-        nixpkgs-lint = callPackage ../../maintainers/scripts/nixpkgs-lint.nix {-        };-        allStdenvs = import ../stdenv {-          inherit system platform config;-          allPackages = args:-          import ./all-packages.nix ({-            inherit config system;-          } // args);-        };-        defaultStdenv = allStdenvs.stdenv // {-          inherit platform;-        };-        stdenvCross = lowPrio (makeStdenvCross defaultStdenv crossSystem binutilsCross gccCrossStageFinal);-        stdenv = if bootStdenv != null-          then bootStdenv // {-            inherit platform;-          }-          else if crossSystem != null-            then stdenvCross-            else let-              changer = config.replaceStdenv or null;-              in if changer != null-                then changer {-                  pkgs = import ./all-packages.nix {-                    config = removeAttrs config [-                      "replaceStdenv"-                    ];-                  };-                }-                else defaultStdenv;-        stdenvApple = stdenvAdapters.overrideGCC allStdenvs.stdenvNative gccApple;-        forceNativeDrv = drv:-        if crossSystem == null-          then drv-          else drv // {-            crossDrv = drv.nativeDrv;-          };-        stdenv_32bit = lowPrio (if system == "x86_64-linux"-          then overrideGCC stdenv gcc48_multi-          else stdenv);-        attrSetToDir = arg:-        import ../build-support/upstream-updater/attrset-to-dir.nix {-          inherit writeTextFile stdenv-          lib;-          theAttrSet = arg;-        };-        autoreconfHook = makeSetupHook {-          substitutions = {-            inherit autoconf automake-            libtool;-          };-        } ../build-support/setup-hooks/autoreconf.sh;-        buildEnv = import ../build-support/buildenv {-          inherit (pkgs) runCommand perl;-        };-        buildFHSChrootEnv = import ../build-support/build-fhs-chrootenv {-          inherit stdenv glibc-          glibcLocales gcc coreutils-          diffutils findutils;-          inherit gnused gnugrep gnutar-          gzip bzip2 bashInteractive xz-          shadow gawk;-          inherit less buildEnv;-        };-        dotnetenv = import ../build-support/dotnetenv {-          inherit stdenv;-          dotnetfx = dotnetfx40;-        };-        scatterOutputHook = makeSetupHook {-        } ../build-support/setup-hooks/scatter_output.sh;-        vsenv = callPackage ../build-support/vsenv {-          vs = vs90wrapper;-        };-        fetchbower = import ../build-support/fetchbower {-          inherit stdenv git;-          inherit (nodePackages) fetch-bower;-        };-        fetchbzr = import ../build-support/fetchbzr {-          inherit stdenv bazaar;-        };-        fetchcvs = import ../build-support/fetchcvs {-          inherit stdenv cvs;-        };-        fetchdarcs = import ../build-support/fetchdarcs {-          inherit stdenv darcs nix;-        };-        fetchgit = import ../build-support/fetchgit {-          inherit stdenv git cacert;-        };-        fetchgitPrivate = import ../build-support/fetchgit/private.nix {-          inherit fetchgit writeScript-          openssh stdenv;-        };-        fetchgitrevision = import ../build-support/fetchgitrevision runCommand git;-        fetchmtn = callPackage ../build-support/fetchmtn (config.fetchmtn or {-        });-        packer = callPackage ../development/tools/packer {-        };-        fetchpatch = callPackage ../build-support/fetchpatch {-        };-        fetchsvn = import ../build-support/fetchsvn {-          inherit stdenv subversion-          openssh;-          sshSupport = true;-        };-        fetchsvnrevision = import ../build-support/fetchsvnrevision runCommand subversion;-        fetchsvnssh = import ../build-support/fetchsvnssh {-          inherit stdenv subversion-          openssh expect;-          sshSupport = true;-        };-        fetchhg = import ../build-support/fetchhg {-          inherit stdenv mercurial nix;-        };-        fetchurl = import ../build-support/fetchurl {-          inherit curl stdenv;-        };-        fetchurlGnome = callPackage ../build-support/fetchurl/gnome.nix {-        };-        fetchurlBoot = stdenv.fetchurlBoot;-        fetchzip = import ../build-support/fetchzip {-          inherit lib fetchurl unzip;-        };-        fetchFromGitHub = { owner, repo, rev, sha256 }:-        fetchzip {-          name = "${repo}-${rev}-src";-          url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";-          inherit sha256;-        };-        resolveMirrorURLs = { url }:-        fetchurl {-          showURLs = true;-          inherit url;-        };-        libredirect = callPackage ../build-support/libredirect {-        };-        makeDesktopItem = import ../build-support/make-desktopitem {-          inherit stdenv;-        };-        makeAutostartItem = import ../build-support/make-startupitem {-          inherit stdenv;-          inherit lib;-        };-        makeInitrd = { compressor ? "gzip -9", contents }:-        import ../build-support/kernel/make-initrd.nix {-          inherit stdenv perl-          perlArchiveCpio cpio contents-          ubootChooser compressor;-        };-        makeWrapper = makeSetupHook {-        } ../build-support/setup-hooks/make-wrapper.sh;-        makeModulesClosure = { allowMissing ? false, kernel, rootModules }:-        import ../build-support/kernel/modules-closure.nix {-          inherit stdenv kmod kernel-          nukeReferences rootModules-          allowMissing;-        };-        pathsFromGraph = ../build-support/kernel/paths-from-graph.pl;-        srcOnly = args:-        import ../build-support/src-only ({-          inherit stdenv;-        } // args);-        substituteAll = import ../build-support/substitute/substitute-all.nix {-          inherit stdenv;-        };-        replaceDependency = import ../build-support/replace-dependency.nix {-          inherit runCommand nix lib;-        };-        nukeReferences = callPackage ../build-support/nuke-references/default.nix {-        };-        vmTools = import ../build-support/vm/default.nix {-          inherit pkgs;-        };-        releaseTools = import ../build-support/release/default.nix {-          inherit pkgs;-        };-        composableDerivation = import ../../lib/composable-derivation.nix {-          inherit pkgs lib;-        };-        platforms = import ./platforms.nix;-        setJavaClassPath = makeSetupHook {-        } ../build-support/setup-hooks/set-java-classpath.sh;-        fixDarwinDylibNames = makeSetupHook {-        } ../build-support/setup-hooks/fix-darwin-dylib-names.sh;-        keepBuildTree = makeSetupHook {-        } ../build-support/setup-hooks/keep-build-tree.sh;-        enableGCOVInstrumentation = makeSetupHook {-        } ../build-support/setup-hooks/enable-coverage-instrumentation.sh;-        makeGCOVReport = makeSetupHook {-          deps = [-            pkgs.lcov-            pkgs.enableGCOVInstrumentation-          ];-        } ../build-support/setup-hooks/make-coverage-analysis-report.sh;-        abduco = callPackage ../tools/misc/abduco {-        };-        acct = callPackage ../tools/system/acct {-        };-        acoustidFingerprinter = callPackage ../tools/audio/acoustid-fingerprinter {-          ffmpeg = ffmpeg_1;-        };-        actdiag = pythonPackages.actdiag;-        adom = callPackage ../games/adom {-        };-        aefs = callPackage ../tools/filesystems/aefs {-        };-        aegisub = callPackage ../applications/video/aegisub {-          wxGTK = wxGTK30;-          lua = lua5_1;-        };-        aespipe = callPackage ../tools/security/aespipe {-        };-        aescrypt = callPackage ../tools/misc/aescrypt {-        };-        ahcpd = callPackage ../tools/networking/ahcpd {-        };-        aircrackng = callPackage ../tools/networking/aircrack-ng {-        };-        analog = callPackage ../tools/admin/analog {-        };-        apktool = callPackage ../development/tools/apktool {-          buildTools = androidenv.buildTools;-        };-        apt-offline = callPackage ../tools/misc/apt-offline {-        };-        archivemount = callPackage ../tools/filesystems/archivemount {-        };-        arandr = callPackage ../tools/X11/arandr {-        };-        arcanist = callPackage ../development/tools/misc/arcanist {-        };-        arduino_core = callPackage ../development/arduino/arduino-core {-          jdk = jdk;-          jre = jdk;-        };-        argyllcms = callPackage ../tools/graphics/argyllcms {-        };-        arp-scan = callPackage ../tools/misc/arp-scan {-        };-        ascii = callPackage ../tools/text/ascii {-        };-        asymptote = builderDefsPackage ../tools/graphics/asymptote {-          inherit freeglut ghostscriptX-          imagemagick fftw boehmgc mesa-          ncurses readline gsl libsigsegv-          python zlib perl texinfo xz;-          texLive = texLiveAggregationFun {-            paths = [-              texLive-              texLiveExtra-              texLiveCMSuper-            ];-          };-        };-        awscli = callPackage ../tools/admin/awscli {-        };-        ec2_api_tools = callPackage ../tools/virtualization/ec2-api-tools {-        };-        ec2_ami_tools = callPackage ../tools/virtualization/ec2-ami-tools {-        };-        altermime = callPackage ../tools/networking/altermime {-        };-        amule = callPackage ../tools/networking/p2p/amule {-        };-        amuleDaemon = appendToName "daemon" (amule.override {-          monolithic = false;-          daemon = true;-        });-        amuleGui = appendToName "gui" (amule.override {-          monolithic = false;-          client = true;-        });-        androidenv = import ../development/mobile/androidenv {-          inherit pkgs;-          pkgs_i686 = pkgsi686Linux;-        };-        apg = callPackage ../tools/security/apg {-        };-        grc = callPackage ../tools/misc/grc {-        };-        otool = callPackage ../os-specific/darwin/otool {-        };-        pass = callPackage ../tools/security/pass {-          gnupg = gnupg1compat;-        };-        setfile = callPackage ../os-specific/darwin/setfile {-        };-        install_name_tool = callPackage ../os-specific/darwin/install_name_tool {-        };-        xcodeenv = callPackage ../development/mobile/xcodeenv {-        };-        titaniumenv = callPackage ../development/mobile/titaniumenv {-          inherit pkgs;-          pkgs_i686 = pkgsi686Linux;-        };-        inherit (androidenv) androidsdk_4_1;-        aria2 = callPackage ../tools/networking/aria2 {-        };-        aria = aria2;-        at = callPackage ../tools/system/at {-        };-        atftp = callPackage ../tools/networking/atftp {-        };-        autogen = callPackage ../development/tools/misc/autogen {-        };-        autojump = callPackage ../tools/misc/autojump {-        };-        autorandr = callPackage ../tools/misc/autorandr {-          inherit (xorg) xrandr xdpyinfo;-        };-        avahi = callPackage ../development/libraries/avahi {-          qt4Support = config.avahi.qt4Support or false;-        };-        aws = callPackage ../tools/virtualization/aws {-        };-        aws_mturk_clt = callPackage ../tools/misc/aws-mturk-clt {-        };-        axel = callPackage ../tools/networking/axel {-        };-        azureus = callPackage ../tools/networking/p2p/azureus {-        };-        basex = callPackage ../tools/text/xml/basex {-        };-        babeld = callPackage ../tools/networking/babeld {-        };-        badvpn = callPackage ../tools/networking/badvpn {-        };-        banner = callPackage ../games/banner {-        };-        barcode = callPackage ../tools/graphics/barcode {-        };-        bc = callPackage ../tools/misc/bc {-        };-        bcache-tools = callPackage ../tools/filesystems/bcache-tools {-        };-        bchunk = callPackage ../tools/cd-dvd/bchunk {-        };-        bfr = callPackage ../tools/misc/bfr {-        };-        bindfs = callPackage ../tools/filesystems/bindfs {-        };-        bitbucket-cli = pythonPackages.bitbucket-cli;-        blockdiag = pythonPackages.blockdiag;-        bmon = callPackage ../tools/misc/bmon {-        };-        bochs = callPackage ../applications/virtualization/bochs {-          wxSupport = false;-        };-        boomerang = callPackage ../development/tools/boomerang {-        };-        bootchart = callPackage ../tools/system/bootchart {-        };-        bro = callPackage ../applications/networking/ids/bro {-        };-        bsod = callPackage ../misc/emulators/bsod {-        };-        btrfsProgs = callPackage ../tools/filesystems/btrfsprogs {-        };-        bwm_ng = callPackage ../tools/networking/bwm-ng {-        };-        byobu = callPackage ../tools/misc/byobu {-        };-        capstone = callPackage ../development/libraries/capstone {-        };-        catdoc = callPackage ../tools/text/catdoc {-        };-        ccnet = callPackage ../tools/networking/ccnet {-        };-        consul = callPackage ../servers/consul {-        };-        consul_ui = callPackage ../servers/consul/ui.nix {-        };-        chntpw = callPackage ../tools/security/chntpw {-        };-        coprthr = callPackage ../development/libraries/coprthr {-          flex = flex_2_5_35;-        };-        crawl = callPackage ../games/crawl {-          lua = lua5;-        };-        cv = callPackage ../tools/misc/cv {-        };-        direnv = callPackage ../tools/misc/direnv {-        };-        ditaa = callPackage ../tools/graphics/ditaa {-        };-        dlx = callPackage ../misc/emulators/dlx {-        };-        eggdrop = callPackage ../tools/networking/eggdrop {-        };-        enca = callPackage ../tools/text/enca {-        };-        fasd = callPackage ../tools/misc/fasd {-          inherit (haskellPackages) pandoc;-        };-        fop = callPackage ../tools/typesetting/fop {-        };-        mcrl = callPackage ../tools/misc/mcrl {-        };-        mcrl2 = callPackage ../tools/misc/mcrl2 {-        };-        mpdcron = callPackage ../tools/audio/mpdcron {-        };-        syslogng = callPackage ../tools/system/syslog-ng {-        };-        syslogng_incubator = callPackage ../tools/system/syslog-ng-incubator {-        };-        rsyslog = callPackage ../tools/system/rsyslog {-        };-        mcrypt = callPackage ../tools/misc/mcrypt {-        };-        mcelog = callPackage ../os-specific/linux/mcelog {-        };-        apparix = callPackage ../tools/misc/apparix {-        };-        appdata-tools = callPackage ../tools/misc/appdata-tools {-        };-        asciidoc = callPackage ../tools/typesetting/asciidoc {-          inherit (pythonPackages) matplotlib-          numpy aafigure-          recursivePthLoader;-          enableStandardFeatures = false;-        };-        asciidoc-full = appendToName "full" (asciidoc.override {-          inherit (pythonPackages) pygments;-          enableStandardFeatures = true;-        });-        autossh = callPackage ../tools/networking/autossh {-        };-        bacula = callPackage ../tools/backup/bacula {-        };-        beanstalkd = callPackage ../servers/beanstalkd {-        };-        bgs = callPackage ../tools/X11/bgs {-        };-        biber = callPackage ../tools/typesetting/biber {-          inherit (perlPackages) autovivification-          BusinessISBN BusinessISMN-          BusinessISSN ConfigAutoConf-          DataCompare DataDump DateSimple-          EncodeEUCJPASCII EncodeHanExtra-          EncodeJIS2K ExtUtilsLibBuilder-          FileSlurp IPCRun3 Log4Perl-          LWPProtocolHttps ListAllUtils-          ListMoreUtils ModuleBuild-          MozillaCA ReadonlyXS-          RegexpCommon TextBibTeX-          UnicodeCollate UnicodeLineBreak-          URI XMLLibXMLSimple XMLLibXSLT-          XMLWriter;-        };-        bibtextools = callPackage ../tools/typesetting/bibtex-tools {-          inherit (strategoPackages016) strategoxt-          sdf;-        };-        bittorrent = callPackage ../tools/networking/p2p/bittorrent {-          gui = true;-        };-        bittornado = callPackage ../tools/networking/p2p/bit-tornado {-        };-        blueman = callPackage ../tools/bluetooth/blueman {-          inherit (pythonPackages) notify;-        };-        bmrsa = builderDefsPackage (import ../tools/security/bmrsa/11.nix) {-          inherit unzip;-        };-        bogofilter = callPackage ../tools/misc/bogofilter {-        };-        bsdiff = callPackage ../tools/compression/bsdiff {-        };-        btar = callPackage ../tools/backup/btar {-        };-        bud = callPackage ../tools/networking/bud {-          inherit (pythonPackages) gyp;-        };-        bup = callPackage ../tools/backup/bup {-          inherit (pythonPackages) pyxattr-          pylibacl setuptools fuse;-          inherit (haskellPackages) pandoc;-          par2Support = config.bup.par2Support or false;-        };-        ori = callPackage ../tools/backup/ori {-        };-        atool = callPackage ../tools/archivers/atool {-        };-        bzip2 = callPackage ../tools/compression/bzip2 {-        };-        cabextract = callPackage ../tools/archivers/cabextract {-        };-        cadaver = callPackage ../tools/networking/cadaver {-        };-        cantata = callPackage ../applications/audio/cantata {-        };-        can-utils = callPackage ../os-specific/linux/can-utils {-        };-        ccid = callPackage ../tools/security/ccid {-        };-        ccrypt = callPackage ../tools/security/ccrypt {-        };-        cdecl = callPackage ../development/tools/cdecl {-        };-        cdrdao = callPackage ../tools/cd-dvd/cdrdao {-        };-        cdrkit = callPackage ../tools/cd-dvd/cdrkit {-        };-        ceph = callPackage ../tools/filesystems/ceph {-        };-        cfdg = builderDefsPackage ../tools/graphics/cfdg {-          inherit libpng bison flex-          ffmpeg;-        };-        checkinstall = callPackage ../tools/package-management/checkinstall {-        };-        cheetahTemplate = builderDefsPackage (import ../tools/text/cheetah-template/2.0.1.nix) {-          inherit makeWrapper python;-        };-        chkrootkit = callPackage ../tools/security/chkrootkit {-        };-        chrony = callPackage ../tools/networking/chrony {-        };-        chunkfs = callPackage ../tools/filesystems/chunkfs {-        };-        chunksync = callPackage ../tools/backup/chunksync {-        };-        cjdns = callPackage ../tools/networking/cjdns {-        };-        cksfv = callPackage ../tools/networking/cksfv {-        };-        clementine = callPackage ../applications/audio/clementine {-        };-        ciopfs = callPackage ../tools/filesystems/ciopfs {-        };-        colord = callPackage ../tools/misc/colord {-        };-        colord-gtk = callPackage ../tools/misc/colord-gtk {-        };-        colordiff = callPackage ../tools/text/colordiff {-        };-        concurrencykit = callPackage ../development/libraries/concurrencykit {-        };-        connect = callPackage ../tools/networking/connect {-        };-        conspy = callPackage ../os-specific/linux/conspy {-        };-        connman = callPackage ../tools/networking/connman {-        };-        connmanui = callPackage ../tools/networking/connmanui {-        };-        convertlit = callPackage ../tools/text/convertlit {-        };-        collectd = callPackage ../tools/system/collectd {-        };-        colormake = callPackage ../development/tools/build-managers/colormake {-        };-        cowsay = callPackage ../tools/misc/cowsay {-        };-        cpuminer = callPackage ../tools/misc/cpuminer {-        };-        cuetools = callPackage ../tools/cd-dvd/cuetools {-        };-        unifdef = callPackage ../development/tools/misc/unifdef {-        };-        "unionfs-fuse" = callPackage ../tools/filesystems/unionfs-fuse {-        };-        usb_modeswitch = callPackage ../development/tools/misc/usb-modeswitch {-        };-        biosdevname = callPackage ../tools/networking/biosdevname {-        };-        clamav = callPackage ../tools/security/clamav {-        };-        cloc = callPackage ../tools/misc/cloc {-          inherit (perlPackages) perl-          AlgorithmDiff RegexpCommon;-        };-        cloog = callPackage ../development/libraries/cloog {-        };-        cloogppl = callPackage ../development/libraries/cloog-ppl {-        };-        convmv = callPackage ../tools/misc/convmv {-        };-        cool-old-term = callPackage ../applications/misc/cool-old-term {-        };-        coreutils = callPackage ../tools/misc/coreutils {-          aclSupport = crossSystem == null && stdenv.isLinux;-        };-        cpio = callPackage ../tools/archivers/cpio {-        };-        cromfs = callPackage ../tools/archivers/cromfs {-        };-        cron = callPackage ../tools/system/cron {-        };-        cudatoolkit5 = callPackage ../development/compilers/cudatoolkit/5.5.nix {-          python = python26;-        };-        cudatoolkit6 = callPackage ../development/compilers/cudatoolkit/6.0.nix {-          python = python26;-        };-        cudatoolkit = cudatoolkit5;-        curl = callPackage ../tools/networking/curl rec {-          fetchurl = fetchurlBoot;-          zlibSupport = true;-          sslSupport = zlibSupport;-          scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin;-        };-        curl3 = callPackage ../tools/networking/curl/7.15.nix rec {-          zlibSupport = true;-          sslSupport = zlibSupport;-        };-        cunit = callPackage ../tools/misc/cunit {-        };-        curlftpfs = callPackage ../tools/filesystems/curlftpfs {-        };-        cutter = callPackage ../tools/networking/cutter {-        };-        dadadodo = builderDefsPackage (import ../tools/text/dadadodo) {-        };-        daq = callPackage ../applications/networking/ids/daq {-        };-        dar = callPackage ../tools/archivers/dar {-        };-        davfs2 = callPackage ../tools/filesystems/davfs2 {-        };-        dbench = callPackage ../development/tools/misc/dbench {-        };-        dcraw = callPackage ../tools/graphics/dcraw {-        };-        debian_devscripts = callPackage ../tools/misc/debian-devscripts {-          inherit (perlPackages) CryptSSLeay-          LWP TimeDate DBFile-          FileDesktopEntry;-        };-        debootstrap = callPackage ../tools/misc/debootstrap {-        };-        detox = callPackage ../tools/misc/detox {-        };-        ddclient = callPackage ../tools/networking/ddclient {-        };-        dd_rescue = callPackage ../tools/system/dd_rescue {-        };-        ddrescue = callPackage ../tools/system/ddrescue {-        };-        deluge = pythonPackages.deluge;-        desktop_file_utils = callPackage ../tools/misc/desktop-file-utils {-        };-        despotify = callPackage ../development/libraries/despotify {-        };-        dev86 = callPackage ../development/compilers/dev86 {-        };-        dnsmasq = callPackage ../tools/networking/dnsmasq {-        };-        dnstop = callPackage ../tools/networking/dnstop {-        };-        dhcp = callPackage ../tools/networking/dhcp {-        };-        dhcpcd = callPackage ../tools/networking/dhcpcd {-        };-        diffstat = callPackage ../tools/text/diffstat {-        };-        diffutils = callPackage ../tools/text/diffutils {-        };-        wgetpaste = callPackage ../tools/text/wgetpaste {-        };-        dirmngr = callPackage ../tools/security/dirmngr {-        };-        disper = callPackage ../tools/misc/disper {-        };-        dmd = callPackage ../development/compilers/dmd {-        };-        dmg2img = callPackage ../tools/misc/dmg2img {-        };-        docbook2odf = callPackage ../tools/typesetting/docbook2odf {-          inherit (perlPackages) PerlMagick;-        };-        docbook2x = callPackage ../tools/typesetting/docbook2x {-          inherit (perlPackages) XMLSAX-          XMLParser XMLNamespaceSupport;-        };-        dosfstools = callPackage ../tools/filesystems/dosfstools {-        };-        dotnetfx35 = callPackage ../development/libraries/dotnetfx35 {-        };-        dotnetfx40 = callPackage ../development/libraries/dotnetfx40 {-        };-        dropbear = callPackage ../tools/networking/dropbear {-        };-        dtach = callPackage ../tools/misc/dtach {-        };-        duo-unix = callPackage ../tools/security/duo-unix {-        };-        duplicity = callPackage ../tools/backup/duplicity {-          inherit (pythonPackages) boto-          lockfile;-          gnupg = gnupg1;-        };-        duply = callPackage ../tools/backup/duply {-        };-        dvdplusrwtools = callPackage ../tools/cd-dvd/dvd+rw-tools {-        };-        dvgrab = callPackage ../tools/video/dvgrab {-        };-        dvtm = callPackage ../tools/misc/dvtm {-        };-        e2fsprogs = callPackage ../tools/filesystems/e2fsprogs {-        };-        easyrsa = callPackage ../tools/networking/easyrsa {-        };-        ebook_tools = callPackage ../tools/text/ebook-tools {-        };-        ecryptfs = callPackage ../tools/security/ecryptfs {-        };-        editres = callPackage ../tools/graphics/editres {-          inherit (xlibs) libXt libXaw;-          inherit (xorg) utilmacros;-        };-        edk2 = callPackage ../development/compilers/edk2 {-        };-        efibootmgr = callPackage ../tools/system/efibootmgr {-        };-        efivar = callPackage ../tools/system/efivar {-        };-        evemu = callPackage ../tools/system/evemu {-        };-        elasticsearch = callPackage ../servers/search/elasticsearch {-        };-        elasticsearchPlugins = recurseIntoAttrs (callPackage ../servers/search/elasticsearch/plugins.nix {-        });-        emv = callPackage ../tools/misc/emv {-        };-        enblendenfuse = callPackage ../tools/graphics/enblend-enfuse {-        };-        encfs = callPackage ../tools/filesystems/encfs {-        };-        enscript = callPackage ../tools/text/enscript {-        };-        ethtool = callPackage ../tools/misc/ethtool {-        };-        ettercap = callPackage ../applications/networking/sniffers/ettercap {-        };-        euca2ools = callPackage ../tools/virtualization/euca2ools {-          pythonPackages = python26Packages;-        };-        evtest = callPackage ../applications/misc/evtest {-        };-        exempi = callPackage ../development/libraries/exempi {-        };-        execline = callPackage ../tools/misc/execline {-        };-        exercism = callPackage ../development/tools/exercism {-        };-        exif = callPackage ../tools/graphics/exif {-        };-        exiftags = callPackage ../tools/graphics/exiftags {-        };-        extundelete = callPackage ../tools/filesystems/extundelete {-        };-        expect = callPackage ../tools/misc/expect {-        };-        f2fs-tools = callPackage ../tools/filesystems/f2fs-tools {-        };-        fabric = pythonPackages.fabric;-        fail2ban = callPackage ../tools/security/fail2ban {-          systemd = systemd.override {-            pythonSupport = true;-          };-        };-        fakeroot = callPackage ../tools/system/fakeroot {-        };-        fakechroot = callPackage ../tools/system/fakechroot {-        };-        fcitx = callPackage ../tools/inputmethods/fcitx {-        };-        fcron = callPackage ../tools/system/fcron {-        };-        fdm = callPackage ../tools/networking/fdm {-        };-        figlet = callPackage ../tools/misc/figlet {-        };-        file = callPackage ../tools/misc/file {-        };-        filegive = callPackage ../tools/networking/filegive {-        };-        fileschanged = callPackage ../tools/misc/fileschanged {-        };-        findutils = callPackage ../tools/misc/findutils {-        };-        finger_bsd = callPackage ../tools/networking/bsd-finger {-        };-        fio = callPackage ../tools/system/fio {-        };-        flashtool = callPackage_i686 ../development/mobile/flashtool {-          platformTools = androidenv.platformTools;-        };-        flpsed = callPackage ../applications/editors/flpsed {-        };-        flvstreamer = callPackage ../tools/networking/flvstreamer {-        };-        libbsd = callPackage ../development/libraries/libbsd {-        };-        lprof = callPackage ../tools/graphics/lprof {-        };-        fdk_aac = callPackage ../development/libraries/fdk-aac {-        };-        flvtool2 = callPackage ../tools/video/flvtool2 {-        };-        fontforge = lowPrio (callPackage ../tools/misc/fontforge {-        });-        fontforgeX = callPackage ../tools/misc/fontforge {-          withX11 = true;-        };-        forktty = callPackage ../os-specific/linux/forktty {-        };-        fortune = callPackage ../tools/misc/fortune {-        };-        fox = callPackage ../development/libraries/fox/default.nix {-          libpng = libpng12;-        };-        fox_1_6 = callPackage ../development/libraries/fox/fox-1.6.nix {-        };-        fping = callPackage ../tools/networking/fping {-        };-        fprot = callPackage ../tools/security/fprot {-        };-        freeipmi = callPackage ../tools/system/freeipmi {-        };-        freetalk = callPackage ../applications/networking/instant-messengers/freetalk {-          guile = guile_1_8;-        };-        freetds = callPackage ../development/libraries/freetds {-        };-        ftgl = callPackage ../development/libraries/ftgl {-        };-        ftgl212 = callPackage ../development/libraries/ftgl/2.1.2.nix {-        };-        fuppes = callPackage ../tools/networking/fuppes {-          ffmpeg = ffmpeg_0_6_90;-        };-        fsfs = callPackage ../tools/filesystems/fsfs {-        };-        fuse_zip = callPackage ../tools/filesystems/fuse-zip {-        };-        fuse_exfat = callPackage ../tools/filesystems/fuse-exfat {-        };-        dos2unix = callPackage ../tools/text/dos2unix {-        };-        uni2ascii = callPackage ../tools/text/uni2ascii {-        };-        g500-control = callPackage ../tools/misc/g500-control {-        };-        galculator = callPackage ../applications/misc/galculator {-          gtk = gtk3;-        };-        gawk = callPackage ../tools/text/gawk {-        };-        gawkInteractive = appendToName "interactive" (gawk.override {-          readlineSupport = true;-        });-        gbdfed = callPackage ../tools/misc/gbdfed {-          gtk = gtk2;-        };-        gdmap = callPackage ../tools/system/gdmap {-        };-        genext2fs = callPackage ../tools/filesystems/genext2fs {-        };-        gengetopt = callPackage ../development/tools/misc/gengetopt {-        };-        getmail = callPackage ../tools/networking/getmail {-        };-        getopt = callPackage ../tools/misc/getopt {-        };-        gftp = callPackage ../tools/networking/gftp {-        };-        gifsicle = callPackage ../tools/graphics/gifsicle {-        };-        glusterfs = callPackage ../tools/filesystems/glusterfs {-        };-        glmark2 = callPackage ../tools/graphics/glmark2 {-        };-        glxinfo = callPackage ../tools/graphics/glxinfo {-        };-        gmvault = callPackage ../tools/networking/gmvault {-        };-        gnokii = builderDefsPackage (import ../tools/misc/gnokii) {-          inherit intltool perl gettext-          libusb pkgconfig bluez readline-          pcsclite libical gtk glib;-          inherit (xorg) libXpm;-        };-        gnufdisk = callPackage ../tools/system/fdisk {-          guile = guile_1_8;-        };-        gnugrep = callPackage ../tools/text/gnugrep {-          libiconv = libiconvOrNull;-        };-        gnulib = callPackage ../development/tools/gnulib {-        };-        gnupatch = callPackage ../tools/text/gnupatch {-        };-        gnupg1orig = callPackage ../tools/security/gnupg1 {-        };-        gnupg1compat = callPackage ../tools/security/gnupg1compat {-        };-        gnupg1 = gnupg1compat;-        gnupg = callPackage ../tools/security/gnupg {-          libusb = libusb1;-        };-        gnupg2_1 = lowPrio (callPackage ../tools/security/gnupg/git.nix {-          libassuan = libassuan2_1;-        });-        gnuplot = callPackage ../tools/graphics/gnuplot {-        };-        gnuplot_qt = gnuplot.override {-          withQt = true;-        };-        gnuplot_aquaterm = gnuplot.override {-          aquaterm = true;-        };-        gnused = callPackage ../tools/text/gnused {-        };-        gnutar = callPackage ../tools/archivers/gnutar {-        };-        gnuvd = callPackage ../tools/misc/gnuvd {-        };-        goaccess = callPackage ../tools/misc/goaccess {-        };-        googleAuthenticator = callPackage ../os-specific/linux/google-authenticator {-        };-        gource = callPackage ../applications/version-management/gource {-        };-        gpodder = callPackage ../applications/audio/gpodder {-        };-        gptfdisk = callPackage ../tools/system/gptfdisk {-        };-        grafana = callPackage ../development/tools/misc/grafana {-        };-        grafx2 = callPackage ../applications/graphics/grafx2 {-        };-        graphviz = callPackage ../tools/graphics/graphviz {-        };-        graphviz_2_0 = callPackage ../tools/graphics/graphviz/2.0.nix {-        };-        grive = callPackage ../tools/filesystems/grive {-          json_c = json-c-0-11;-        };-        groff = callPackage ../tools/text/groff {-          ghostscript = null;-        };-        grub = callPackage_i686 ../tools/misc/grub {-          buggyBiosCDSupport = config.grub.buggyBiosCDSupport or true;-        };-        grub2 = callPackage ../tools/misc/grub/2.0x.nix {-          libusb = libusb1;-          flex = flex_2_5_35;-        };-        grub2_efi = grub2.override {-          EFIsupport = true;-        };-        gssdp = callPackage ../development/libraries/gssdp {-          inherit (gnome) libsoup;-        };-        gt5 = callPackage ../tools/system/gt5 {-        };-        gtest = callPackage ../development/libraries/gtest {-        };-        gtkdatabox = callPackage ../development/libraries/gtkdatabox {-        };-        gtkgnutella = callPackage ../tools/networking/p2p/gtk-gnutella {-        };-        gtkvnc = callPackage ../tools/admin/gtk-vnc {-        };-        gtmess = callPackage ../applications/networking/instant-messengers/gtmess {-        };-        gummiboot = callPackage ../tools/misc/gummiboot {-        };-        gupnp = callPackage ../development/libraries/gupnp {-          inherit (gnome) libsoup;-        };-        gupnp_av = callPackage ../development/libraries/gupnp-av {-        };-        gupnp_igd = callPackage ../development/libraries/gupnp-igd {-        };-        gupnptools = callPackage ../tools/networking/gupnp-tools {-        };-        gvpe = builderDefsPackage ../tools/networking/gvpe {-          inherit openssl gmp nettools-          iproute;-        };-        gvolicon = callPackage ../tools/audio/gvolicon {-        };-        gzip = callPackage ../tools/compression/gzip {-        };-        gzrt = callPackage ../tools/compression/gzrt {-        };-        partclone = callPackage ../tools/backup/partclone {-        };-        partimage = callPackage ../tools/backup/partimage {-        };-        pigz = callPackage ../tools/compression/pigz {-        };-        haproxy = callPackage ../tools/networking/haproxy {-        };-        haveged = callPackage ../tools/security/haveged {-        };-        hardlink = callPackage ../tools/system/hardlink {-        };-        hashcat = callPackage ../tools/security/hashcat {-        };-        halibut = callPackage ../tools/typesetting/halibut {-        };-        hddtemp = callPackage ../tools/misc/hddtemp {-        };-        hdf5 = callPackage ../tools/misc/hdf5 {-          szip = null;-        };-        heimdall = callPackage ../tools/misc/heimdall {-        };-        hevea = callPackage ../tools/typesetting/hevea {-        };-        highlight = callPackage ../tools/text/highlight {-          lua = lua5;-        };-        host = callPackage ../tools/networking/host {-        };-        hping = callPackage ../tools/networking/hping {-        };-        httpie = callPackage ../tools/networking/httpie {-        };-        httpfs2 = callPackage ../tools/filesystems/httpfs {-        };-        iasl = callPackage ../development/compilers/iasl {-        };-        icecast = callPackage ../servers/icecast {-        };-        icoutils = callPackage ../tools/graphics/icoutils {-        };-        idutils = callPackage ../tools/misc/idutils {-        };-        idle3tools = callPackage ../tools/system/idle3tools {-        };-        iftop = callPackage ../tools/networking/iftop {-        };-        imapproxy = callPackage ../tools/networking/imapproxy {-        };-        imapsync = callPackage ../tools/networking/imapsync {-          inherit (perlPackages) MailIMAPClient;-        };-        inadyn = callPackage ../tools/networking/inadyn {-        };-        inetutils = callPackage ../tools/networking/inetutils {-        };-        ioping = callPackage ../tools/system/ioping {-        };-        iodine = callPackage ../tools/networking/iodine {-        };-        iperf = callPackage ../tools/networking/iperf {-        };-        ipmitool = callPackage ../tools/system/ipmitool {-          static = false;-        };-        ipmiutil = callPackage ../tools/system/ipmiutil {-        };-        ised = callPackage ../tools/misc/ised {-        };-        isl = callPackage ../development/libraries/isl {-        };-        isl_0_12 = callPackage ../development/libraries/isl/0.12.2.nix {-        };-        isync = callPackage ../tools/networking/isync {-        };-        jd-gui = callPackage_i686 ../tools/security/jd-gui {-        };-        jdiskreport = callPackage ../tools/misc/jdiskreport {-        };-        jfsrec = callPackage ../tools/filesystems/jfsrec {-          boost = boost144;-        };-        jfsutils = callPackage ../tools/filesystems/jfsutils {-        };-        jhead = callPackage ../tools/graphics/jhead {-        };-        jing = callPackage ../tools/text/xml/jing {-        };-        jmtpfs = callPackage ../tools/filesystems/jmtpfs {-        };-        jnettop = callPackage ../tools/networking/jnettop {-        };-        jq = callPackage ../development/tools/jq {-        };-        jscoverage = callPackage ../development/tools/misc/jscoverage {-        };-        jwhois = callPackage ../tools/networking/jwhois {-        };-        kazam = callPackage ../applications/video/kazam {-        };-        kalibrate-rtl = callPackage ../tools/misc/kalibrate-rtl {-        };-        kexectools = callPackage ../os-specific/linux/kexectools {-        };-        keychain = callPackage ../tools/misc/keychain {-        };-        kismet = callPackage ../applications/networking/sniffers/kismet {-        };-        less = callPackage ../tools/misc/less {-        };-        lockfileProgs = callPackage ../tools/misc/lockfile-progs {-        };-        logstash = callPackage ../tools/misc/logstash {-        };-        logstash-forwarder = callPackage ../tools/misc/logstash-forwarder {-        };-        kippo = callPackage ../servers/kippo {-        };-        klavaro = callPackage ../games/klavaro {-        };-        kzipmix = callPackage_i686 ../tools/compression/kzipmix {-        };-        minidlna = callPackage ../tools/networking/minidlna {-          ffmpeg = ffmpeg_0_10;-        };-        mmv = callPackage ../tools/misc/mmv {-        };-        most = callPackage ../tools/misc/most {-        };-        multitail = callPackage ../tools/misc/multitail {-        };-        netperf = callPackage ../applications/networking/netperf {-        };-        ninka = callPackage ../development/tools/misc/ninka {-        };-        nodejs = callPackage ../development/web/nodejs {-        };-        nodePackages = recurseIntoAttrs (import ./node-packages.nix {-          inherit pkgs stdenv nodejs-          fetchurl fetchgit;-          neededNatives = [-            python-          ] ++ lib.optional (lib.elem system lib.platforms.linux) utillinux;-          self = pkgs.nodePackages;-        });-        ldapvi = callPackage ../tools/misc/ldapvi {-        };-        ldns = callPackage ../development/libraries/ldns {-        };-        lftp = callPackage ../tools/networking/lftp {-        };-        libconfig = callPackage ../development/libraries/libconfig {-        };-        libee = callPackage ../development/libraries/libee {-        };-        libestr = callPackage ../development/libraries/libestr {-        };-        libevdev = callPackage ../development/libraries/libevdev {-        };-        liboauth = callPackage ../development/libraries/liboauth {-        };-        libtirpc = callPackage ../development/libraries/ti-rpc {-        };-        libshout = callPackage ../development/libraries/libshout {-        };-        libqmi = callPackage ../development/libraries/libqmi {-        };-        libmbim = callPackage ../development/libraries/libmbim {-        };-        libtorrent = callPackage ../tools/networking/p2p/libtorrent {-        };-        logcheck = callPackage ../tools/system/logcheck {-          inherit (perlPackages) mimeConstruct;-        };-        logrotate = callPackage ../tools/system/logrotate {-        };-        logstalgia = callPackage ../tools/graphics/logstalgia {-        };-        lout = callPackage ../tools/typesetting/lout {-        };-        lrzip = callPackage ../tools/compression/lrzip {-        };-        lsh = lowPrio (callPackage ../tools/networking/lsh {-        });-        lshw = callPackage ../tools/system/lshw {-        };-        lxc = callPackage ../os-specific/linux/lxc {-        };-        lzip = callPackage ../tools/compression/lzip {-        };-        lzma = xz;-        xz = callPackage ../tools/compression/xz {-        };-        lzop = callPackage ../tools/compression/lzop {-        };-        maildrop = callPackage ../tools/networking/maildrop {-        };-        mailpile = callPackage ../applications/networking/mailreaders/mailpile {-        };-        mailutils = callPackage ../tools/networking/mailutils {-          guile = guile_1_8;-        };-        mairix = callPackage ../tools/text/mairix {-        };-        makemkv = callPackage ../applications/video/makemkv {-        };-        man = callPackage ../tools/misc/man {-        };-        man_db = callPackage ../tools/misc/man-db {-        };-        memtest86 = callPackage ../tools/misc/memtest86 {-        };-        memtest86plus = callPackage ../tools/misc/memtest86+ {-        };-        meo = callPackage ../tools/security/meo {-        };-        mc = callPackage ../tools/misc/mc {-        };-        mcabber = callPackage ../applications/networking/instant-messengers/mcabber {-        };-        mcron = callPackage ../tools/system/mcron {-          guile = guile_1_8;-        };-        mdbtools = callPackage ../tools/misc/mdbtools {-        };-        mdbtools_git = callPackage ../tools/misc/mdbtools/git.nix {-          inherit (gnome) scrollkeeper;-        };-        mednafen = callPackage ../misc/emulators/mednafen {-        };-        mednafen-server = callPackage ../misc/emulators/mednafen/server.nix {-        };-        megacli = callPackage ../tools/misc/megacli {-        };-        megatools = callPackage ../tools/networking/megatools {-        };-        mfcuk = callPackage ../tools/security/mfcuk {-        };-        minecraft = callPackage ../games/minecraft {-        };-        minecraft-server = callPackage ../games/minecraft-server {-        };-        minetest = callPackage ../games/minetest {-          libpng = libpng12;-        };-        miniupnpc = callPackage ../tools/networking/miniupnpc {-        };-        miniupnpd = callPackage ../tools/networking/miniupnpd {-        };-        minixml = callPackage ../development/libraries/minixml {-        };-        mjpegtools = callPackage ../tools/video/mjpegtools {-        };-        mkcue = callPackage ../tools/cd-dvd/mkcue {-        };-        mkpasswd = callPackage ../tools/security/mkpasswd {-        };-        mktemp = callPackage ../tools/security/mktemp {-        };-        mktorrent = callPackage ../tools/misc/mktorrent {-        };-        modemmanager = callPackage ../tools/networking/modemmanager {-        };-        monit = callPackage ../tools/system/monit {-        };-        mosh = callPackage ../tools/networking/mosh {-          boost = boostHeaders;-          inherit (perlPackages) IOTty;-        };-        mpage = callPackage ../tools/text/mpage {-        };-        mr = callPackage ../applications/version-management/mr {-        };-        mscgen = callPackage ../tools/graphics/mscgen {-        };-        msf = builderDefsPackage (import ../tools/security/metasploit/3.1.nix) {-          inherit ruby makeWrapper;-        };-        mssys = callPackage ../tools/misc/mssys {-        };-        mtdutils = callPackage ../tools/filesystems/mtdutils {-        };-        mtools = callPackage ../tools/filesystems/mtools {-        };-        mtr = callPackage ../tools/networking/mtr {-        };-        multitran = recurseIntoAttrs (let-          callPackage = newScope pkgs.multitran;-          in rec {-            multitrandata = callPackage ../tools/text/multitran/data {-            };-            libbtree = callPackage ../tools/text/multitran/libbtree {-            };-            libmtsupport = callPackage ../tools/text/multitran/libmtsupport {-            };-            libfacet = callPackage ../tools/text/multitran/libfacet {-            };-            libmtquery = callPackage ../tools/text/multitran/libmtquery {-            };-            mtutils = callPackage ../tools/text/multitran/mtutils {-            };-          });-        munge = callPackage ../tools/security/munge {-        };-        muscleframework = callPackage ../tools/security/muscleframework {-        };-        muscletool = callPackage ../tools/security/muscletool {-        };-        mysql2pgsql = callPackage ../tools/misc/mysql2pgsql {-        };-        namazu = callPackage ../tools/text/namazu {-        };-        nbd = callPackage ../tools/networking/nbd {-        };-        ndjbdns = callPackage ../tools/networking/ndjbdns {-        };-        netatalk = callPackage ../tools/filesystems/netatalk {-        };-        netcdf = callPackage ../development/libraries/netcdf {-        };-        nc6 = callPackage ../tools/networking/nc6 {-        };-        ncat = callPackage ../tools/networking/ncat {-        };-        ncftp = callPackage ../tools/networking/ncftp {-        };-        ncompress = callPackage ../tools/compression/ncompress {-        };-        ndisc6 = callPackage ../tools/networking/ndisc6 {-        };-        netboot = callPackage ../tools/networking/netboot {-        };-        netcat = callPackage ../tools/networking/netcat {-        };-        netcat-openbsd = callPackage ../tools/networking/netcat-openbsd {-        };-        nethogs = callPackage ../tools/networking/nethogs {-        };-        netkittftp = callPackage ../tools/networking/netkit/tftp {-        };-        netpbm = callPackage ../tools/graphics/netpbm {-        };-        netrw = callPackage ../tools/networking/netrw {-        };-        netselect = callPackage ../tools/networking/netselect {-        };-        networkmanager = callPackage ../tools/networking/network-manager {-        };-        networkmanager_openvpn = callPackage ../tools/networking/network-manager/openvpn.nix {-        };-        networkmanager_pptp = callPackage ../tools/networking/network-manager/pptp.nix {-        };-        networkmanager_vpnc = callPackage ../tools/networking/network-manager/vpnc.nix {-        };-        networkmanager_openconnect = callPackage ../tools/networking/network-manager/openconnect.nix {-        };-        networkmanagerapplet = newScope gnome ../tools/networking/network-manager-applet {-          dconf = gnome3.dconf;-        };-        newsbeuter = callPackage ../applications/networking/feedreaders/newsbeuter {-        };-        newsbeuter-dev = callPackage ../applications/networking/feedreaders/newsbeuter/dev.nix {-        };-        ngrep = callPackage ../tools/networking/ngrep {-        };-        ngrok = callPackage ../tools/misc/ngrok {-        };-        mpack = callPackage ../tools/networking/mpack {-        };-        pa_applet = callPackage ../tools/audio/pa-applet {-        };-        pnmixer = callPackage ../tools/audio/pnmixer {-        };-        nifskope = callPackage ../tools/graphics/nifskope {-        };-        nilfs_utils = callPackage ../tools/filesystems/nilfs-utils {-        };-        nitrogen = callPackage ../tools/X11/nitrogen {-        };-        nlopt = callPackage ../development/libraries/nlopt {-        };-        npapi_sdk = callPackage ../development/libraries/npapi-sdk {-        };-        npth = callPackage ../development/libraries/npth {-        };-        nmap = callPackage ../tools/security/nmap {-        };-        nmap_graphical = callPackage ../tools/security/nmap {-          inherit (pythonPackages) pysqlite;-          graphicalSupport = true;-        };-        notbit = callPackage ../applications/networking/notbit {-        };-        nox = callPackage ../tools/package-management/nox {-          pythonPackages = python3Packages;-          nix = nixUnstable;-        };-        nss_pam_ldapd = callPackage ../tools/networking/nss-pam-ldapd {-        };-        ntfs3g = callPackage ../tools/filesystems/ntfs-3g {-        };-        ntfsprogs = pkgs.ntfs3g;-        ntop = callPackage ../tools/networking/ntop {-        };-        ntopng = callPackage ../tools/networking/ntopng {-        };-        ntp = callPackage ../tools/networking/ntp {-        };-        numdiff = callPackage ../tools/text/numdiff {-        };-        nssmdns = callPackage ../tools/networking/nss-mdns {-        };-        nwdiag = pythonPackages.nwdiag;-        nylon = callPackage ../tools/networking/nylon {-        };-        nzbget = callPackage ../tools/networking/nzbget {-        };-        oathToolkit = callPackage ../tools/security/oath-toolkit {-        };-        obex_data_server = callPackage ../tools/bluetooth/obex-data-server {-        };-        obexd = callPackage ../tools/bluetooth/obexd {-        };-        obexfs = callPackage ../tools/bluetooth/obexfs {-        };-        obexftp = callPackage ../tools/bluetooth/obexftp {-        };-        obnam = callPackage ../tools/backup/obnam {-        };-        odt2txt = callPackage ../tools/text/odt2txt {-        };-        offlineimap = callPackage ../tools/networking/offlineimap {-          inherit (pythonPackages) sqlite3;-        };-        opendbx = callPackage ../development/libraries/opendbx {-        };-        opendkim = callPackage ../development/libraries/opendkim {-        };-        opendylan = callPackage ../development/compilers/opendylan {-          opendylan-bootstrap = opendylan_bin;-        };-        opendylan_bin = callPackage ../development/compilers/opendylan/bin.nix {-        };-        openjade = callPackage ../tools/text/sgml/openjade {-        };-        openobex = callPackage ../tools/bluetooth/openobex {-        };-        openopc = callPackage ../tools/misc/openopc {-          pythonFull = python27Full.override {-            extraLibs = [-              python27Packages.pyro3-            ];-          };-        };-        openresolv = callPackage ../tools/networking/openresolv {-        };-        opensc = callPackage ../tools/security/opensc {-        };-        opensc_dnie_wrapper = callPackage ../tools/security/opensc-dnie-wrapper {-        };-        openssh = callPackage ../tools/networking/openssh {-          hpnSupport = false;-          withKerberos = false;-          etcDir = "/etc/ssh";-          pam = if stdenv.isLinux-            then pam-            else null;-        };-        openssh_hpn = pkgs.appendToName "with-hpn" (openssh.override {-          hpnSupport = true;-        });-        openssh_with_kerberos = pkgs.appendToName "with-kerberos" (openssh.override {-          withKerberos = true;-        });-        opensp = callPackage ../tools/text/sgml/opensp {-        };-        spCompat = callPackage ../tools/text/sgml/opensp/compat.nix {-        };-        openvpn = callPackage ../tools/networking/openvpn {-        };-        openvpn_learnaddress = callPackage ../tools/networking/openvpn/openvpn_learnaddress.nix {-        };-        optipng = callPackage ../tools/graphics/optipng {-          libpng = libpng12;-        };-        oslrd = callPackage ../tools/networking/oslrd {-        };-        ossec = callPackage ../tools/security/ossec {-        };-        otpw = callPackage ../os-specific/linux/otpw {-        };-        p7zip = callPackage ../tools/archivers/p7zip {-        };-        pal = callPackage ../tools/misc/pal {-        };-        panomatic = callPackage ../tools/graphics/panomatic {-        };-        par2cmdline = callPackage ../tools/networking/par2cmdline {-        };-        parallel = callPackage ../tools/misc/parallel {-        };-        parcellite = callPackage ../tools/misc/parcellite {-        };-        patchutils = callPackage ../tools/text/patchutils {-        };-        parted = callPackage ../tools/misc/parted {-          hurd = null;-        };-        pitivi = callPackage ../applications/video/pitivi {-          gst = gst_all_1;-          clutter-gtk = clutter_gtk;-          inherit (gnome3) gnome_icon_theme-          gnome_icon_theme_symbolic;-        };-        p0f = callPackage ../tools/security/p0f {-        };-        pngout = callPackage ../tools/graphics/pngout {-        };-        hurdPartedCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-          then makeOverridable ({ hurd }:-          (parted.override {-            inherit hurd;-            enableStatic = true;-            gettext = null;-            readline = null;-            devicemapper = null;-          }).crossDrv) {-            hurd = gnu.hurdCrossIntermediate;-          }-          else null;-        ipsecTools = callPackage ../os-specific/linux/ipsec-tools {-          flex = flex_2_5_35;-        };-        patch = gnupatch;-        pbzip2 = callPackage ../tools/compression/pbzip2 {-        };-        pciutils = callPackage ../tools/system/pciutils {-        };-        pcsclite = callPackage ../tools/security/pcsclite {-        };-        pdf2djvu = callPackage ../tools/typesetting/pdf2djvu {-        };-        pdfjam = callPackage ../tools/typesetting/pdfjam {-        };-        jbig2enc = callPackage ../tools/graphics/jbig2enc {-        };-        pdfread = callPackage ../tools/graphics/pdfread {-        };-        briss = callPackage ../tools/graphics/briss {-        };-        bully = callPackage ../tools/networking/bully {-        };-        pdnsd = callPackage ../tools/networking/pdnsd {-        };-        peco = callPackage ../tools/text/peco {-        };-        pg_top = callPackage ../tools/misc/pg_top {-        };-        pdsh = callPackage ../tools/networking/pdsh {-          rsh = true;-          ssh = openssh;-        };-        pfstools = callPackage ../tools/graphics/pfstools {-        };-        philter = callPackage ../tools/networking/philter {-        };-        pinentry = callPackage ../tools/security/pinentry {-        };-        pius = callPackage ../tools/security/pius {-        };-        pk2cmd = callPackage ../tools/misc/pk2cmd {-        };-        plantuml = callPackage ../tools/misc/plantuml {-        };-        plan9port = callPackage ../tools/system/plan9port {-        };-        ploticus = callPackage ../tools/graphics/ploticus {-          libpng = libpng12;-        };-        plotutils = callPackage ../tools/graphics/plotutils {-        };-        plowshare = callPackage ../tools/misc/plowshare {-        };-        pngcrush = callPackage ../tools/graphics/pngcrush {-        };-        pngnq = callPackage ../tools/graphics/pngnq {-        };-        pngtoico = callPackage ../tools/graphics/pngtoico {-          libpng = libpng12;-        };-        pngquant = callPackage ../tools/graphics/pngquant {-        };-        podiff = callPackage ../tools/text/podiff {-        };-        poedit = callPackage ../tools/text/poedit {-        };-        polipo = callPackage ../servers/polipo {-        };-        polkit_gnome = callPackage ../tools/security/polkit-gnome {-        };-        ponysay = callPackage ../tools/misc/ponysay {-        };-        povray = callPackage ../tools/graphics/povray {-        };-        ppl = callPackage ../development/libraries/ppl {-        };-        ppp = callPackage ../tools/networking/ppp {-        };-        pptp = callPackage ../tools/networking/pptp {-        };-        prey-bash-client = callPackage ../tools/security/prey {-        };-        projectm = callPackage ../applications/audio/projectm {-        };-        proxychains = callPackage ../tools/networking/proxychains {-        };-        proxytunnel = callPackage ../tools/misc/proxytunnel {-        };-        cntlm = callPackage ../tools/networking/cntlm {-        };-        pastebinit = callPackage ../tools/misc/pastebinit {-        };-        psmisc = callPackage ../os-specific/linux/psmisc {-        };-        pstoedit = callPackage ../tools/graphics/pstoedit {-        };-        pv = callPackage ../tools/misc/pv {-        };-        pwgen = callPackage ../tools/security/pwgen {-        };-        pwnat = callPackage ../tools/networking/pwnat {-        };-        pycangjie = callPackage ../development/python-modules/pycangjie {-        };-        pydb = callPackage ../development/tools/pydb {-        };-        pystringtemplate = callPackage ../development/python-modules/stringtemplate {-        };-        pythonDBus = dbus_python;-        pythonIRClib = builderDefsPackage (import ../development/python-modules/irclib) {-          inherit python;-        };-        pythonSexy = builderDefsPackage (import ../development/python-modules/libsexy) {-          inherit python libsexy pkgconfig-          libxml2 pygtk pango gtk glib;-        };-        openmpi = callPackage ../development/libraries/openmpi {-        };-        qhull = callPackage ../development/libraries/qhull {-        };-        qjoypad = callPackage ../tools/misc/qjoypad {-        };-        qshowdiff = callPackage ../tools/text/qshowdiff {-        };-        quilt = callPackage ../development/tools/quilt {-        };-        radvd = callPackage ../tools/networking/radvd {-        };-        ranger = callPackage ../applications/misc/ranger {-        };-        privateer = callPackage ../games/privateer {-        };-        rtmpdump = callPackage ../tools/video/rtmpdump {-        };-        reaverwps = callPackage ../tools/networking/reaver-wps {-        };-        recutils = callPackage ../tools/misc/recutils {-        };-        recoll = callPackage ../applications/search/recoll {-        };-        reiser4progs = callPackage ../tools/filesystems/reiser4progs {-        };-        reiserfsprogs = callPackage ../tools/filesystems/reiserfsprogs {-        };-        relfs = callPackage ../tools/filesystems/relfs {-          inherit (gnome) gnome_vfs GConf;-        };-        remarkjs = callPackage ../development/web/remarkjs {-        };-        remind = callPackage ../tools/misc/remind {-        };-        remmina = callPackage ../applications/networking/remote/remmina {-        };-        renameutils = callPackage ../tools/misc/renameutils {-        };-        replace = callPackage ../tools/text/replace {-        };-        reptyr = callPackage ../os-specific/linux/reptyr {-        };-        rdiff_backup = callPackage ../tools/backup/rdiff-backup {-        };-        rdmd = callPackage ../development/compilers/rdmd {-        };-        rhash = callPackage ../tools/security/rhash {-        };-        riemann_c_client = callPackage ../tools/misc/riemann-c-client {-        };-        ripmime = callPackage ../tools/networking/ripmime {-        };-        rkflashtool = callPackage ../tools/misc/rkflashtool {-        };-        rmlint = callPackage ../tools/misc/rmlint {-        };-        rng_tools = callPackage ../tools/security/rng-tools {-        };-        rsnapshot = callPackage ../tools/backup/rsnapshot {-          logger = inetutils;-        };-        rlwrap = callPackage ../tools/misc/rlwrap {-        };-        rockbox_utility = callPackage ../tools/misc/rockbox-utility {-        };-        rpPPPoE = builderDefsPackage (import ../tools/networking/rp-pppoe) {-          inherit ppp;-        };-        rpm = callPackage ../tools/package-management/rpm {-        };-        rrdtool = callPackage ../tools/misc/rrdtool {-        };-        rtorrent = callPackage ../tools/networking/p2p/rtorrent {-        };-        rubber = callPackage ../tools/typesetting/rubber {-        };-        rxp = callPackage ../tools/text/xml/rxp {-        };-        rzip = callPackage ../tools/compression/rzip {-        };-        s3backer = callPackage ../tools/filesystems/s3backer {-        };-        s3cmd = callPackage ../tools/networking/s3cmd {-        };-        s3cmd_15_pre_81e3842f7a = lowPrio (callPackage ../tools/networking/s3cmd/git.nix {-        });-        s3sync = callPackage ../tools/networking/s3sync {-          ruby = ruby18;-        };-        sablotron = callPackage ../tools/text/xml/sablotron {-        };-        safecopy = callPackage ../tools/system/safecopy {-        };-        salut_a_toi = callPackage ../applications/networking/instant-messengers/salut-a-toi {-        };-        samplicator = callPackage ../tools/networking/samplicator {-        };-        screen = callPackage ../tools/misc/screen {-        };-        scrot = callPackage ../tools/graphics/scrot {-        };-        scrypt = callPackage ../tools/security/scrypt {-        };-        sdcv = callPackage ../applications/misc/sdcv {-        };-        sec = callPackage ../tools/admin/sec {-        };-        seccure = callPackage ../tools/security/seccure {-        };-        setserial = builderDefsPackage (import ../tools/system/setserial) {-          inherit groff;-        };-        seqdiag = pythonPackages.seqdiag;-        screenfetch = callPackage ../tools/misc/screenfetch {-        };-        sg3_utils = callPackage ../tools/system/sg3_utils {-        };-        sharutils = callPackage ../tools/archivers/sharutils {-        };-        shotwell = callPackage ../applications/graphics/shotwell {-        };-        shebangfix = callPackage ../tools/misc/shebangfix {-        };-        shellinabox = callPackage ../servers/shellinabox {-        };-        siege = callPackage ../tools/networking/siege {-        };-        silc_client = callPackage ../applications/networking/instant-messengers/silc-client {-        };-        silc_server = callPackage ../servers/silc-server {-        };-        silver-searcher = callPackage ../tools/text/silver-searcher {-        };-        simplescreenrecorder = callPackage ../applications/video/simplescreenrecorder {-        };-        sleuthkit = callPackage ../tools/system/sleuthkit {-        };-        slimrat = callPackage ../tools/networking/slimrat {-          inherit (perlPackages) WWWMechanize-          LWP;-        };-        slsnif = callPackage ../tools/misc/slsnif {-        };-        smartmontools = callPackage ../tools/system/smartmontools {-        };-        smbldaptools = callPackage ../tools/networking/smbldaptools {-          inherit (perlPackages) NetLDAP-          CryptSmbHash DigestSHA1;-        };-        smbnetfs = callPackage ../tools/filesystems/smbnetfs {-        };-        snort = callPackage ../applications/networking/ids/snort {-        };-        snx = callPackage_i686 ../tools/networking/snx {-          inherit (pkgsi686Linux) pam-          gcc33;-          inherit (pkgsi686Linux.xlibs) libX11;-        };-        solr = callPackage ../servers/search/solr {-        };-        sparsehash = callPackage ../development/libraries/sparsehash {-        };-        spiped = callPackage ../tools/networking/spiped {-        };-        sproxy = haskellPackages.callPackage ../tools/networking/sproxy {-        };-        sproxy-web = haskellPackages.callPackage ../tools/networking/sproxy-web {-        };-        stardict = callPackage ../applications/misc/stardict/stardict.nix {-          inherit (gnome) libgnomeui-          scrollkeeper;-        };-        storebrowse = callPackage ../tools/system/storebrowse {-        };-        fusesmb = callPackage ../tools/filesystems/fusesmb {-        };-        sl = callPackage ../tools/misc/sl {-        };-        socat = callPackage ../tools/networking/socat {-        };-        socat2pre = lowPrio (callPackage ../tools/networking/socat/2.x.nix {-        });-        sourceHighlight = callPackage ../tools/text/source-highlight {-          boost = boost149;-        };-        spaceFM = callPackage ../applications/misc/spacefm {-        };-        squashfsTools = callPackage ../tools/filesystems/squashfs {-        };-        sshfsFuse = callPackage ../tools/filesystems/sshfs-fuse {-        };-        sshuttle = callPackage ../tools/security/sshuttle {-        };-        sudo = callPackage ../tools/security/sudo {-        };-        suidChroot = builderDefsPackage (import ../tools/system/suid-chroot) {-        };-        super = callPackage ../tools/security/super {-        };-        ssdeep = callPackage ../tools/security/ssdeep {-        };-        ssmtp = callPackage ../tools/networking/ssmtp {-          tlsSupport = true;-        };-        ssss = callPackage ../tools/security/ssss {-        };-        storeBackup = callPackage ../tools/backup/store-backup {-        };-        stow = callPackage ../tools/misc/stow {-        };-        stun = callPackage ../tools/networking/stun {-        };-        stunnel = callPackage ../tools/networking/stunnel {-        };-        su = shadow.su;-        surfraw = callPackage ../tools/networking/surfraw {-        };-        swec = callPackage ../tools/networking/swec {-          inherit (perlPackages) LWP URI-          HTMLParser HTTPServerSimple-          Parent;-        };-        svnfs = callPackage ../tools/filesystems/svnfs {-        };-        sysbench = callPackage ../development/tools/misc/sysbench {-        };-        system_config_printer = callPackage ../tools/misc/system-config-printer {-          libxml2 = libxml2Python;-        };-        sitecopy = callPackage ../tools/networking/sitecopy {-        };-        stricat = callPackage ../tools/security/stricat {-        };-        privoxy = callPackage ../tools/networking/privoxy {-        };-        t1utils = callPackage ../tools/misc/t1utils {-        };-        tarsnap = callPackage ../tools/backup/tarsnap {-        };-        tcpcrypt = callPackage ../tools/security/tcpcrypt {-        };-        tboot = callPackage ../tools/security/tboot {-        };-        tcpdump = callPackage ../tools/networking/tcpdump {-        };-        tcpflow = callPackage ../tools/networking/tcpflow {-        };-        teamviewer = callPackage_i686 ../applications/networking/remote/teamviewer {-        };-        teamviewer8 = lowPrio (callPackage_i686 ../applications/networking/remote/teamviewer/8.nix {-        });-        telnet = callPackage ../tools/networking/telnet {-        };-        texmacs = callPackage ../applications/editors/texmacs {-          tex = texLive;-          extraFonts = true;-          guile = guile_1_8;-        };-        texmaker = callPackage ../applications/editors/texmaker {-        };-        texstudio = callPackage ../applications/editors/texstudio {-        };-        tiled-qt = callPackage ../applications/editors/tiled-qt {-          qt = qt4;-        };-        tinc = callPackage ../tools/networking/tinc {-        };-        tiny8086 = callPackage ../applications/virtualization/8086tiny {-        };-        tmpwatch = callPackage ../tools/misc/tmpwatch {-        };-        tmux = callPackage ../tools/misc/tmux {-        };-        tor = callPackage ../tools/security/tor {-        };-        torbutton = callPackage ../tools/security/torbutton {-        };-        torbrowser = callPackage ../tools/security/tor/torbrowser.nix {-        };-        torsocks = callPackage ../tools/security/tor/torsocks.nix {-        };-        tpm-quote-tools = callPackage ../tools/security/tpm-quote-tools {-        };-        tpm-tools = callPackage ../tools/security/tpm-tools {-        };-        trickle = callPackage ../tools/networking/trickle {-        };-        trousers = callPackage ../tools/security/trousers {-        };-        ttf2pt1 = callPackage ../tools/misc/ttf2pt1 {-        };-        ttysnoop = callPackage ../os-specific/linux/ttysnoop {-        };-        twitterBootstrap = callPackage ../development/web/twitter-bootstrap {-        };-        txt2man = callPackage ../tools/misc/txt2man {-        };-        ucl = callPackage ../development/libraries/ucl {-        };-        ucspi-tcp = callPackage ../tools/networking/ucspi-tcp {-        };-        udftools = callPackage ../tools/filesystems/udftools {-        };-        udptunnel = callPackage ../tools/networking/udptunnel {-        };-        ufraw = callPackage ../applications/graphics/ufraw {-        };-        unetbootin = callPackage ../tools/cd-dvd/unetbootin {-        };-        unfs3 = callPackage ../servers/unfs3 {-        };-        unoconv = callPackage ../tools/text/unoconv {-        };-        upx = callPackage ../tools/compression/upx {-        };-        urlview = callPackage ../applications/misc/urlview {-        };-        usbmuxd = callPackage ../tools/misc/usbmuxd {-        };-        vacuum = callPackage ../applications/networking/instant-messengers/vacuum {-        };-        volatility = callPackage ../tools/security/volatility {-        };-        vidalia = callPackage ../tools/security/vidalia {-        };-        vbetool = builderDefsPackage ../tools/system/vbetool {-          inherit pciutils libx86 zlib;-        };-        vde2 = callPackage ../tools/networking/vde2 {-        };-        vboot_reference = callPackage ../tools/system/vboot_reference {-        };-        vcsh = callPackage ../applications/version-management/vcsh {-        };-        verilog = callPackage ../applications/science/electronics/verilog {-        };-        vfdecrypt = callPackage ../tools/misc/vfdecrypt {-        };-        vifm = callPackage ../applications/misc/vifm {-        };-        viking = callPackage ../applications/misc/viking {-          inherit (gnome) scrollkeeper;-        };-        vnc2flv = callPackage ../tools/video/vnc2flv {-        };-        vncrec = builderDefsPackage ../tools/video/vncrec {-          inherit (xlibs) imake libX11-          xproto gccmakedep libXt libXmu-          libXaw libXext xextproto libSM-          libICE libXpm libXp;-        };-        vobcopy = callPackage ../tools/cd-dvd/vobcopy {-        };-        vobsub2srt = callPackage ../tools/cd-dvd/vobsub2srt {-        };-        vorbisgain = callPackage ../tools/misc/vorbisgain {-        };-        vpnc = callPackage ../tools/networking/vpnc {-        };-        openconnect = callPackage ../tools/networking/openconnect.nix {-        };-        vtun = callPackage ../tools/networking/vtun {-        };-        wal_e = callPackage ../tools/backup/wal-e {-        };-        watchman = callPackage ../development/tools/watchman {-        };-        wbox = callPackage ../tools/networking/wbox {-        };-        welkin = callPackage ../tools/graphics/welkin {-        };-        testdisk = callPackage ../tools/misc/testdisk {-        };-        htmlTidy = callPackage ../tools/text/html-tidy {-        };-        html-xml-utils = callPackage ../tools/text/xml/html-xml-utils {-        };-        tftp_hpa = callPackage ../tools/networking/tftp-hpa {-        };-        tigervnc = callPackage ../tools/admin/tigervnc {-          fontDirectories = [-            xorg.fontadobe75dpi-            xorg.fontmiscmisc-            xorg.fontcursormisc-            xorg.fontbhlucidatypewriter75dpi-          ];-          inherit (xorg) xorgserver;-          fltk = fltk13;-        };-        tightvnc = callPackage ../tools/admin/tightvnc {-          fontDirectories = [-            xorg.fontadobe75dpi-            xorg.fontmiscmisc-            xorg.fontcursormisc-            xorg.fontbhlucidatypewriter75dpi-          ];-        };-        time = callPackage ../tools/misc/time {-        };-        tkabber = callPackage ../applications/networking/instant-messengers/tkabber {-        };-        qfsm = callPackage ../applications/science/electronics/qfsm {-        };-        tkgate = callPackage ../applications/science/electronics/tkgate/1.x.nix {-          inherit (xlibs) libX11 imake-          xproto gccmakedep;-        };-        tkgate2 = lowPrio (callPackage ../applications/science/electronics/tkgate/2.x.nix {-          inherit (xlibs) libX11;-        });-        tm = callPackage ../tools/system/tm {-        };-        trang = callPackage ../tools/text/xml/trang {-        };-        tre = callPackage ../development/libraries/tre {-        };-        ts = callPackage ../tools/system/ts {-        };-        transfig = callPackage ../tools/graphics/transfig {-          libpng = libpng12;-        };-        truecrypt = callPackage ../applications/misc/truecrypt {-          wxGUI = config.truecrypt.wxGUI or true;-        };-        ttmkfdir = callPackage ../tools/misc/ttmkfdir {-        };-        unclutter = callPackage ../tools/misc/unclutter {-        };-        unbound = callPackage ../tools/networking/unbound {-        };-        units = callPackage ../tools/misc/units {-        };-        unrar = callPackage ../tools/archivers/unrar {-        };-        xarchive = callPackage ../tools/archivers/xarchive {-        };-        xarchiver = callPackage ../tools/archivers/xarchiver {-        };-        xcruiser = callPackage ../applications/misc/xcruiser {-        };-        unarj = callPackage ../tools/archivers/unarj {-        };-        unshield = callPackage ../tools/archivers/unshield {-        };-        unzip = callPackage ../tools/archivers/unzip {-        };-        unzipNLS = lowPrio (unzip.override {-          enableNLS = true;-        });-        uptimed = callPackage ../tools/system/uptimed {-        };-        varnish = callPackage ../servers/varnish {-        };-        varnish2 = callPackage ../servers/varnish/2.1.nix {-        };-        venus = callPackage ../tools/misc/venus {-          python = python27;-        };-        vlan = callPackage ../tools/networking/vlan {-        };-        wakelan = callPackage ../tools/networking/wakelan {-        };-        wavemon = callPackage ../tools/networking/wavemon {-        };-        w3cCSSValidator = callPackage ../tools/misc/w3c-css-validator {-          tomcat = tomcat6;-        };-        wdfs = callPackage ../tools/filesystems/wdfs {-        };-        wdiff = callPackage ../tools/text/wdiff {-        };-        webalizer = callPackage ../tools/networking/webalizer {-        };-        webdruid = builderDefsPackage ../tools/admin/webdruid {-          inherit zlib libpng freetype gd-          which libxml2 geoip;-        };-        weighttp = callPackage ../tools/networking/weighttp {-        };-        wget = callPackage ../tools/networking/wget {-          inherit (perlPackages) LWP;-        };-        which = callPackage ../tools/system/which {-        };-        wicd = callPackage ../tools/networking/wicd {-        };-        wkhtmltopdf = callPackage ../tools/graphics/wkhtmltopdf {-        };-        wv = callPackage ../tools/misc/wv {-        };-        wv2 = callPackage ../tools/misc/wv2 {-        };-        x86info = callPackage ../os-specific/linux/x86info {-        };-        x11_ssh_askpass = callPackage ../tools/networking/x11-ssh-askpass {-        };-        xbursttools = assert stdenv ? glibc; import ../tools/misc/xburst-tools {-          inherit stdenv fetchgit autoconf-          automake confuse pkgconfig-          libusb libusb1;-          gccCross = let-            pkgsCross = import ./all-packages.nix {-              inherit system;-              inherit bootStdenv noSysDirs-              gccWithCC gccWithProfiling-              config;-              crossSystem = {-                config = "mipsel-unknown-linux";-                bigEndian = true;-                arch = "mips";-                float = "soft";-                withTLS = true;-                libc = "uclibc";-                platform = {-                  name = "ben_nanonote";-                  kernelMajor = "2.6";-                  kernelHeadersBaseConfig = "bcm47xx_defconfig";-                  kernelArch = "mips";-                };-                gcc = { arch = "mips32"; };-              };-            };-            in pkgsCross.gccCrossStageStatic;-        };-        xclip = callPackage ../tools/misc/xclip {-        };-        xtitle = callPackage ../tools/misc/xtitle {-        };-        xdelta = callPackage ../tools/compression/xdelta {-        };-        xdummy = callPackage ../tools/misc/xdummy {-        };-        xfsprogs = callPackage ../tools/filesystems/xfsprogs {-        };-        xmlroff = callPackage ../tools/typesetting/xmlroff {-          inherit (gnome) libgnomeprint;-        };-        xmlstarlet = callPackage ../tools/text/xml/xmlstarlet {-        };-        xmlto = callPackage ../tools/typesetting/xmlto {-        };-        xmltv = callPackage ../tools/misc/xmltv {-        };-        xmpppy = builderDefsPackage (import ../development/python-modules/xmpppy) {-          inherit python setuptools;-        };-        xorriso = callPackage ../tools/cd-dvd/xorriso {-        };-        xpf = callPackage ../tools/text/xml/xpf {-          libxml2 = libxml2Python;-        };-        xsel = callPackage ../tools/misc/xsel {-        };-        xtreemfs = callPackage ../tools/filesystems/xtreemfs {-        };-        xvfb_run = callPackage ../tools/misc/xvfb-run {-          inherit (texFunctions) fontsConf;-        };-        youtubeDL = callPackage ../tools/misc/youtube-dl {-        };-        zbar = callPackage ../tools/graphics/zbar {-          pygtk = lib.overrideDerivation pygtk (x:-          { gtk = gtk2; });-        };-        zdelta = callPackage ../tools/compression/zdelta {-        };-        zfstools = callPackage ../tools/filesystems/zfstools {-          zfs = linuxPackages.zfs;-        };-        zile = callPackage ../applications/editors/zile {-        };-        zip = callPackage ../tools/archivers/zip {-        };-        zpaq = callPackage ../tools/archivers/zpaq {-        };-        zpaqd = callPackage ../tools/archivers/zpaq/zpaqd.nix {-        };-        zsync = callPackage ../tools/compression/zsync {-        };-        bash = lowPrio (callPackage ../shells/bash {-          texinfo = null;-        });-        bashInteractive = appendToName "interactive" (callPackage ../shells/bash {-          interactive = true;-          readline = readline63;-        });-        bashCompletion = callPackage ../shells/bash-completion {-        };-        dash = callPackage ../shells/dash {-        };-        fish = callPackage ../shells/fish {-          python = python27Full;-        };-        tcsh = callPackage ../shells/tcsh {-        };-        rush = callPackage ../shells/rush {-        };-        zsh = callPackage ../shells/zsh {-        };-        abc = abcPatchable [ ];-        abcPatchable = patches:-        import ../development/compilers/abc/default.nix {-          inherit stdenv fetchurl patches-          jre apacheAnt;-          javaCup = callPackage ../development/libraries/java/cup {-          };-        };-        aldor = callPackage ../development/compilers/aldor {-        };-        aliceml = callPackage ../development/compilers/aliceml {-        };-        aspectj = callPackage ../development/compilers/aspectj {-        };-        ats = callPackage ../development/compilers/ats {-        };-        ats2 = callPackage ../development/compilers/ats2 {-        };-        avra = callPackage ../development/compilers/avra {-        };-        bigloo = callPackage ../development/compilers/bigloo {-        };-        chicken = callPackage ../development/compilers/chicken {-        };-        ccl = builderDefsPackage ../development/compilers/ccl {-        };-        clang = wrapClang llvmPackages.clang;-        clang_34 = wrapClang llvmPackages_34.clang;-        clang_33 = wrapClang (clangUnwrapped llvm_33 ../development/compilers/llvm/3.3/clang.nix);-        clangAnalyzer = callPackage ../development/tools/analysis/clang-analyzer {-          clang = clang_34;-          llvmPackages = llvmPackages_34;-        };-        clangUnwrapped = llvm: pkg:-        callPackage pkg {-          stdenv = if stdenv.isDarwin-            then stdenvApple-            else stdenv;-          inherit llvm;-        };-        clangSelf = clangWrapSelf llvmPackagesSelf.clang;-        clangWrapSelf = build:-        import ../build-support/clang-wrapper {-          clang = build;-          stdenv = clangStdenv;-          libc = glibc;-          binutils = binutils;-          shell = bash;-          inherit libcxx coreutils zlib;-          nativeTools = false;-          nativeLibc = false;-        };-        clangStdenv = lowPrio (stdenvAdapters.overrideGCC stdenv clang);-        libcxxStdenv = stdenvAdapters.overrideGCC stdenv (clangWrapSelf llvmPackages.clang);-        clean = callPackage ../development/compilers/clean {-        };-        closurecompiler = callPackage ../development/compilers/closure {-        };-        cmucl_binary = callPackage ../development/compilers/cmucl/binary.nix {-        };-        compcert = callPackage ../development/compilers/compcert {-        };-        cryptol1 = lowPrio (callPackage ../development/compilers/cryptol/1.8.x.nix {-        });-        cryptol2 = with haskellPackages_ghc763; callPackage ../development/compilers/cryptol/2.0.x.nix {-          Cabal = Cabal_1_18_1_3;-          cabalInstall = cabalInstall_1_18_0_3;-          process = process_1_2_0_0;-        };-        cython = pythonPackages.cython;-        cython3 = python3Packages.cython;-        dylan = callPackage ../development/compilers/gwydion-dylan {-          dylan = callPackage ../development/compilers/gwydion-dylan/binary.nix {-          };-        };-        ecl = callPackage ../development/compilers/ecl {-        };-        eql = callPackage ../development/compilers/eql {-        };-        adobe_flex_sdk = callPackage ../development/compilers/adobe-flex-sdk {-        };-        fpc = callPackage ../development/compilers/fpc {-        };-        fpc_2_4_0 = callPackage ../development/compilers/fpc/2.4.0.nix {-        };-        gambit = callPackage ../development/compilers/gambit {-        };-        gcc = gcc48;-        gcc33 = wrapGCC (import ../development/compilers/gcc/3.3 {-          inherit fetchurl stdenv-          noSysDirs;-        });-        gcc34 = wrapGCC (import ../development/compilers/gcc/3.4 {-          inherit fetchurl stdenv-          noSysDirs;-        });-        gcc48_realCross = lib.addMetaAttrs {-          hydraPlatforms = [ ];-        } (callPackage ../development/compilers/gcc/4.8 {-          inherit noSysDirs;-          binutilsCross = binutilsCross;-          libcCross = libcCross;-          profiledCompiler = false;-          enableMultilib = false;-          crossStageStatic = false;-          cross = assert crossSystem != null; crossSystem;-        });-        gcc_realCross = gcc48_realCross;-        gccCrossStageStatic = let-          libcCross1 = if stdenv.cross.libc == "msvcrt"-            then windows.mingw_w64_headers-            else if stdenv.cross.libc == "libSystem"-              then darwin.xcode-              else null;-          in wrapGCCCross {-            gcc = forceNativeDrv (lib.addMetaAttrs {-              hydraPlatforms = [ ];-            } (gcc_realCross.override {-              crossStageStatic = true;-              langCC = false;-              libcCross = libcCross1;-              enableShared = false;-            }));-            libc = libcCross1;-            binutils = binutilsCross;-            cross = assert crossSystem != null; crossSystem;-          };-        gccCrossMingw2 = wrapGCCCross {-          gcc = gccCrossStageStatic.gcc;-          libc = windows.mingw_headers2;-          binutils = binutilsCross;-          cross = assert crossSystem != null; crossSystem;-        };-        gccCrossStageFinal = wrapGCCCross {-          gcc = forceNativeDrv (gcc_realCross.override {-            libpthreadCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-              then gnu.libpthreadCross-              else null;-            langCC = crossSystem == null || crossSystem.config != "i686-pc-mingw32";-          });-          libc = libcCross;-          binutils = binutilsCross;-          cross = assert crossSystem != null; crossSystem;-        };-        gcc44 = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc/4.4) {-          inherit fetchurl stdenv gmp mpfr-          gettext which noSysDirs;-          texinfo = texinfo4;-          profiledCompiler = true;-        }));-        gcc45 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.5 {-          inherit fetchurl stdenv gmp mpfr-          mpc libelf zlib perl gettext-          which noSysDirs;-          texinfo = texinfo4;-          ppl = null;-          cloogppl = null;-          profiledCompiler = !stdenv.isArm;-          cross = null;-          libcCross = if crossSystem != null-            then libcCross-            else null;-          libpthreadCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-            then gnu.libpthreadCross-            else null;-        }));-        gcc46 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.6 {-          inherit noSysDirs;-          ppl = null;-          cloog = null;-          profiledCompiler = false;-          cross = null;-          libcCross = if crossSystem != null-            then libcCross-            else null;-          libpthreadCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-            then gnu.libpthreadCross-            else null;-          texinfo = texinfo413;-        }));-        gcc48 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.8 {-          inherit noSysDirs;-          profiledCompiler = with stdenv; !isDarwin && (isi686 || isx86_64);-          cross = null;-          libcCross = if crossSystem != null-            then libcCross-            else null;-          libpthreadCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-            then gnu.libpthreadCross-            else null;-        }));-        gcc48_multi = if system == "x86_64-linux"-          then lowPrio (wrapGCCWith (import ../build-support/gcc-wrapper) glibc_multi (gcc48.gcc.override {-            stdenv = overrideGCC stdenv (wrapGCCWith (import ../build-support/gcc-wrapper) glibc_multi gcc.gcc);-            profiledCompiler = false;-            enableMultilib = true;-          }))-          else throw "Multilib gcc not supported on ‘${system}’";-        gcc48_debug = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.8 {-          stripped = false;-          inherit noSysDirs;-          cross = null;-          libcCross = null;-          binutilsCross = null;-        }));-        gcc49 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.9 {-          inherit noSysDirs;-          profiledCompiler = with stdenv; !isDarwin && (isi686 || isx86_64);-          cross = null;-          libcCross = if crossSystem != null-            then libcCross-            else null;-          libpthreadCross = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-            then gnu.libpthreadCross-            else null;-        }));-        gccApple = assert stdenv.isDarwin; wrapGCC (makeOverridable (import ../development/compilers/gcc/4.2-apple64) {-          inherit fetchurl noSysDirs;-          profiledCompiler = true;-          stdenv = allStdenvs.stdenvNative;-        });-        gfortran = gfortran48;-        gfortran48 = wrapGCC (gcc48.gcc.override {-          name = "gfortran";-          langFortran = true;-          langCC = false;-          langC = false;-          profiledCompiler = false;-        });-        gcj = gcj48;-        gcj48 = wrapGCC (gcc48.gcc.override {-          name = "gcj";-          langJava = true;-          langFortran = false;-          langCC = false;-          langC = false;-          profiledCompiler = false;-          inherit zip unzip zlib boehmgc-          gettext pkgconfig perl;-          inherit gtk;-          inherit (gnome) libart_lgpl;-          inherit (xlibs) libX11 libXt-          libSM libICE libXtst libXi-          libXrender libXrandr xproto-          renderproto xextproto inputproto-          randrproto;-        });-        gnat = gnat45;-        gnat45 = wrapGCC (gcc45.gcc.override {-          name = "gnat";-          langCC = false;-          langC = true;-          langAda = true;-          profiledCompiler = false;-          inherit gnatboot;-          cloogppl = null;-          ppl = null;-        });-        gnat46 = wrapGCC (gcc46.gcc.override {-          name = "gnat";-          langCC = false;-          langC = true;-          langAda = true;-          profiledCompiler = false;-          gnatboot = gnat45;-          ppl = null;-          cloog = null;-        });-        gnatboot = wrapGCC (import ../development/compilers/gnatboot {-          inherit fetchurl stdenv;-        });-        gccgo = gccgo48;-        gccgo48 = wrapGCC (gcc48.gcc.override {-          name = "gccgo";-          langCC = true;-          langC = true;-          langGo = true;-        });-        ghdl = wrapGCC (import ../development/compilers/gcc/4.3 {-          inherit stdenv fetchurl gmp mpfr-          noSysDirs gnat;-          texinfo = texinfo4;-          name = "ghdl";-          langVhdl = true;-          langCC = false;-          langC = false;-          profiledCompiler = false;-          enableMultilib = false;-        });-        ghdl_mcode = callPackage ../development/compilers/ghdl {-        };-        gcl = builderDefsPackage ../development/compilers/gcl {-          inherit mpfr m4 binutils-          fetchcvs emacs zlib which-          texinfo;-          gmp = gmp4;-          inherit (xlibs) libX11 xproto-          inputproto libXi libXext-          xextproto libXt libXaw libXmu;-          inherit stdenv;-          texLive = texLiveAggregationFun {-            paths = [-              texLive-              texLiveExtra-            ];-          };-        };-        jhc = callPackage ../development/compilers/jhc {-          inherit (haskellPackages_ghc763) ghc-          binary zlib utf8String readline-          fgl regexCompat HsSyck random;-        };-        gcc-arm-embedded-4_7 = callPackage_i686 ../development/compilers/gcc-arm-embedded {-          version = "4.7-2013q3-20130916";-          releaseType = "update";-          sha256 = "1bd9bi9q80xn2rpy0rn1vvj70rh15kb7dmah0qs4q2rv78fqj40d";-        };-        gcc-arm-embedded-4_8 = callPackage_i686 ../development/compilers/gcc-arm-embedded {-          version = "4.8-2014q1-20140314";-          releaseType = "update";-          sha256 = "ce92859550819d4a3d1a6e2672ea64882b30afa2c08cf67fa8e1d93788c2c577";-        };-        gcc-arm-embedded = gcc-arm-embedded-4_8;-        haskell = let-          pkgs_ = pkgs // {-            gmp = gmp.override {-              withStatic = true;-            };-          };-          callPackage = newScope pkgs_;-          newScope = extra:-          lib.callPackageWith (pkgs_ // pkgs_.xorg // extra);-          in callPackage ./haskell-defaults.nix {-            pkgs = pkgs_;-            inherit callPackage newScope;-          };-        ghc = recurseIntoAttrs (lib.mapAttrs' (name:-        value:-        lib.nameValuePair (builtins.substring (builtins.stringLength "packages_") (builtins.stringLength name) name) value.ghc) (lib.filterAttrs (name:-        value:-        builtins.substring 0 (builtins.stringLength "packages_") name == "packages_") haskell));-        haskellPackages = haskellPackages_ghc783;-        haskellPlatform = haskellPlatformPackages."2013_2_0_0";-        haskellPackages_ghc6104 = haskell.packages_ghc6104;-        haskellPackages_ghc6123 = haskell.packages_ghc6123;-        haskellPackages_ghc704 = haskell.packages_ghc704;-        haskellPackages_ghc722 = haskell.packages_ghc722;-        haskellPackages_ghc742 = haskell.packages_ghc742;-        haskellPackages_ghc763 = haskell.packages_ghc763;-        haskellPackages_ghc783_no_profiling = recurseIntoAttrs haskell.packages_ghc783.noProfiling;-        haskellPackages_ghc783_profiling = recurseIntoAttrs haskell.packages_ghc783.profiling;-        haskellPackages_ghc783 = recurseIntoAttrs haskell.packages_ghc783.highPrio;-        haskellPackages_ghcHEAD = haskell.packages_ghcHEAD;-        haskellPlatformPackages = recurseIntoAttrs (import ../development/libraries/haskell/haskell-platform {-          inherit pkgs;-        });-        haxe = callPackage ../development/compilers/haxe {-        };-        hhvm = callPackage ../development/compilers/hhvm {-        };-        hiphopvm = hhvm;-        falcon = builderDefsPackage (import ../development/interpreters/falcon) {-          inherit cmake;-        };-        fsharp = callPackage ../development/compilers/fsharp {-        };-        go_1_0 = callPackage ../development/compilers/go {-        };-        go_1_1 = if stdenv.isDarwin-          then callPackage ../development/compilers/go/1.1-darwin.nix {-          }-          else callPackage ../development/compilers/go/1.1.nix {-          };-        go_1_2 = callPackage ../development/compilers/go/1.2.nix {-        };-        go_1_3 = callPackage ../development/compilers/go/1.3.nix {-        };-        go = go_1_3;-        gox = callPackage ../development/compilers/go/gox.nix {-        };-        gprolog = callPackage ../development/compilers/gprolog {-        };-        gwt240 = callPackage ../development/compilers/gwt/2.4.0.nix {-        };-        icedtea7_jdk = callPackage ../development/compilers/icedtea rec {-          jdk = openjdk;-          jdkPath = "${openjdk}/lib/openjdk";-        } // { outputs = [ "out" ]; };-        icedtea7_jre = lib.setName "icedtea7-${lib.getVersion pkgs.icedtea7_jdk.jre}" (lib.addMetaAttrs {-          description = "Free Java runtime environment based on OpenJDK 7.0 and the IcedTea project";-        } pkgs.icedtea7_jdk.jre) // {-          outputs = [ "jre" ];-        };-        icedtea7_web = callPackage ../development/compilers/icedtea-web {-          jdk = "${icedtea7_jdk}/lib/icedtea";-        };-        ikarus = callPackage ../development/compilers/ikarus {-        };-        hugs = callPackage ../development/compilers/hugs {-        };-        path64 = callPackage ../development/compilers/path64 {-        };-        openjdk = if stdenv.isDarwin-          then callPackage ../development/compilers/openjdk-darwin {-          }-          else let-            openjdkBootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix {-            };-            in callPackage ../development/compilers/openjdk {-              jdk = openjdkBootstrap;-            } // { outputs = [ "out" ]; };-        openjre = lib.setName "openjre-${lib.getVersion pkgs.openjdk.jre}" (lib.addMetaAttrs {-          description = "The open-source Java Runtime Environment";-        } pkgs.openjdk.jre) // {-          outputs = [ "jre" ];-        };-        jdk = if stdenv.isDarwin || stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"-          then pkgs.openjdk-          else pkgs.oraclejdk;-        jre = if stdenv.isDarwin || stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"-          then pkgs.openjre-          else pkgs.oraclejre;-        oraclejdk = pkgs.jdkdistro true false;-        oraclejdk7 = pkgs.oraclejdk7distro true false;-        oraclejdk8 = pkgs.oraclejdk8distro true false;-        oraclejre = lowPrio (pkgs.jdkdistro false false);-        oraclejre7 = lowPrio (pkgs.oraclejdk7distro false false);-        oraclejre8 = lowPrio (pkgs.oraclejdk8distro false false);-        jrePlugin = lowPrio (pkgs.jdkdistro false true);-        supportsJDK = system == "i686-linux" || system == "x86_64-linux";-        jdkdistro = installjdk:-        pluginSupport:-        assert supportsJDK; (if pluginSupport-          then appendToName "with-plugin"-          else x:-          x) (callPackage ../development/compilers/oraclejdk/jdk6-linux.nix {-        });-        oraclejdk7distro = installjdk:-        pluginSupport:-        assert supportsJDK; (if pluginSupport-          then appendToName "with-plugin"-          else x:-          x) (callPackage ../development/compilers/oraclejdk/jdk7-linux.nix {-          inherit installjdk;-        });-        oraclejdk8distro = installjdk:-        pluginSupport:-        assert supportsJDK; (if pluginSupport-          then appendToName "with-plugin"-          else x:-          x) (callPackage ../development/compilers/oraclejdk/jdk8-linux.nix {-          inherit installjdk;-        });-        jikes = callPackage ../development/compilers/jikes {-        };-        juliaGit = callPackage ../development/compilers/julia/git-20131013.nix {-          liblapack = liblapack.override {-            shared = true;-          };-          llvm = llvm_33;-        };-        julia021 = callPackage ../development/compilers/julia/0.2.1.nix {-          liblapack = liblapack.override {-            shared = true;-          };-          llvm = llvm_33;-        };-        julia030 = let-          liblapack = liblapack_3_5_0.override {-            shared = true;-          };-          in callPackage ../development/compilers/julia/0.3.0.nix {-            inherit liblapack;-            suitesparse = suitesparse.override {-              inherit liblapack;-            };-            openblas = openblas_0_2_10;-            llvm = llvm_34;-          };-        julia = julia021;-        lazarus = builderDefsPackage (import ../development/compilers/fpc/lazarus.nix) {-          inherit makeWrapper gtk glib-          pango atk gdk_pixbuf;-          inherit (xlibs) libXi inputproto-          libX11 xproto libXext xextproto;-          fpc = fpc;-        };-        lessc = callPackage ../development/compilers/lessc {-        };-        llvm = llvmPackages.llvm;-        llvm_34 = llvmPackages_34.llvm;-        llvm_33 = llvm_v ../development/compilers/llvm/3.3/llvm.nix;-        llvm_v = path:-        callPackage path {-          stdenv = if stdenv.isDarwin-            then stdenvApple-            else stdenv;-        };-        llvmPackages = if !stdenv.isDarwin-          then llvmPackages_34-          else llvmPackages_34 // {-            llvm = llvm_33;-            clang = clang_33;-          };-        llvmPackages_34 = recurseIntoAttrs (import ../development/compilers/llvm/3.4 {-          inherit stdenv newScope-          fetchurl;-          isl = isl_0_12;-        });-        llvmPackagesSelf = import ../development/compilers/llvm/3.4 {-          inherit newScope fetchurl;-          isl = isl_0_12;-          stdenv = libcxxStdenv;-        };-        manticore = callPackage ../development/compilers/manticore {-        };-        mentorToolchains = recurseIntoAttrs (callPackage_i686 ../development/compilers/mentor {-        });-        mercury = callPackage ../development/compilers/mercury {-        };-        mitscheme = callPackage ../development/compilers/mit-scheme {-        };-        mlton = callPackage ../development/compilers/mlton {-        };-        mono = callPackage ../development/compilers/mono {-          inherit (xlibs) libX11;-        };-        monoDLLFixer = callPackage ../build-support/mono-dll-fixer {-        };-        mozart = callPackage ../development/compilers/mozart {-        };-        neko = callPackage ../development/compilers/neko {-        };-        nasm = callPackage ../development/compilers/nasm {-        };-        nvidia_cg_toolkit = callPackage ../development/compilers/nvidia-cg-toolkit {-        };-        ocaml = ocamlPackages.ocaml;-        ocaml_3_08_0 = callPackage ../development/compilers/ocaml/3.08.0.nix {-        };-        ocaml_3_10_0 = callPackage ../development/compilers/ocaml/3.10.0.nix {-        };-        ocaml_3_11_2 = callPackage ../development/compilers/ocaml/3.11.2.nix {-        };-        ocaml_3_12_1 = callPackage ../development/compilers/ocaml/3.12.1.nix {-        };-        ocaml_4_00_1 = callPackage ../development/compilers/ocaml/4.00.1.nix {-        };-        ocaml_4_01_0 = callPackage ../development/compilers/ocaml/4.01.0.nix {-        };-        orc = callPackage ../development/compilers/orc {-        };-        metaocaml_3_09 = callPackage ../development/compilers/ocaml/metaocaml-3.09.nix {-        };-        ber_metaocaml_003 = callPackage ../development/compilers/ocaml/ber-metaocaml-003.nix {-        };-        mkOcamlPackages = ocaml: self:-        let-          callPackage = newScope self;-          in rec {-            inherit ocaml;-            camlidl = callPackage ../development/tools/ocaml/camlidl {-            };-            camlp5_5_strict = callPackage ../development/tools/ocaml/camlp5/5.15.nix {-            };-            camlp5_5_transitional = callPackage ../development/tools/ocaml/camlp5/5.15.nix {-              transitional = true;-            };-            camlp5_6_strict = callPackage ../development/tools/ocaml/camlp5 {-            };-            camlp5_6_transitional = callPackage ../development/tools/ocaml/camlp5 {-              transitional = true;-            };-            camlp5_strict = camlp5_6_strict;-            camlp5_transitional = camlp5_6_transitional;-            camlzip = callPackage ../development/ocaml-modules/camlzip {-            };-            camomile_0_8_2 = callPackage ../development/ocaml-modules/camomile/0.8.2.nix {-            };-            camomile = callPackage ../development/ocaml-modules/camomile {-            };-            camlimages = callPackage ../development/ocaml-modules/camlimages {-              libpng = libpng12;-              giflib = giflib_4_1;-            };-            biniou = callPackage ../development/ocaml-modules/biniou {-            };-            ocaml_cairo = callPackage ../development/ocaml-modules/ocaml-cairo {-            };-            cppo = callPackage ../development/tools/ocaml/cppo {-            };-            cryptokit = callPackage ../development/ocaml-modules/cryptokit {-            };-            csv = callPackage ../development/ocaml-modules/csv {-            };-            deriving = callPackage ../development/tools/ocaml/deriving {-            };-            easy-format = callPackage ../development/ocaml-modules/easy-format {-            };-            findlib = callPackage ../development/tools/ocaml/findlib {-            };-            javalib = callPackage ../development/ocaml-modules/javalib {-              extlib = ocaml_extlib_maximal;-            };-            dypgen = callPackage ../development/ocaml-modules/dypgen {-            };-            patoline = callPackage ../tools/typesetting/patoline {-            };-            gmetadom = callPackage ../development/ocaml-modules/gmetadom {-            };-            lablgl = callPackage ../development/ocaml-modules/lablgl {-            };-            lablgtk = callPackage ../development/ocaml-modules/lablgtk {-              inherit (gnome) libgnomecanvas-              libglade gtksourceview;-            };-            lablgtkmathview = callPackage ../development/ocaml-modules/lablgtkmathview {-              gtkmathview = callPackage ../development/libraries/gtkmathview {-              };-            };-            menhir = callPackage ../development/ocaml-modules/menhir {-            };-            merlin = callPackage ../development/tools/ocaml/merlin {-            };-            mldonkey = callPackage ../applications/networking/p2p/mldonkey {-            };-            mlgmp = callPackage ../development/ocaml-modules/mlgmp {-            };-            ocaml_batteries = callPackage ../development/ocaml-modules/batteries {-            };-            ocaml_cryptgps = callPackage ../development/ocaml-modules/cryptgps {-            };-            ocaml_data_notation = callPackage ../development/ocaml-modules/odn {-            };-            ocaml_expat = callPackage ../development/ocaml-modules/expat {-            };-            ocamlgraph = callPackage ../development/ocaml-modules/ocamlgraph {-            };-            ocaml_http = callPackage ../development/ocaml-modules/http {-            };-            ocamlify = callPackage ../development/tools/ocaml/ocamlify {-            };-            ocaml_lwt = callPackage ../development/ocaml-modules/lwt {-            };-            ocamlmod = callPackage ../development/tools/ocaml/ocamlmod {-            };-            ocaml_mysql = callPackage ../development/ocaml-modules/mysql {-            };-            ocamlnet = callPackage ../development/ocaml-modules/ocamlnet {-            };-            ocaml_oasis = callPackage ../development/tools/ocaml/oasis {-            };-            ocaml_pcre = callPackage ../development/ocaml-modules/pcre {-              inherit pcre;-            };-            ocaml_react = callPackage ../development/ocaml-modules/react {-            };-            ocamlsdl = callPackage ../development/ocaml-modules/ocamlsdl {-            };-            ocaml_sqlite3 = callPackage ../development/ocaml-modules/sqlite3 {-            };-            ocaml_ssl = callPackage ../development/ocaml-modules/ssl {-            };-            ounit = callPackage ../development/ocaml-modules/ounit {-            };-            ulex = callPackage ../development/ocaml-modules/ulex {-            };-            ulex08 = callPackage ../development/ocaml-modules/ulex/0.8 {-              camlp5 = camlp5_transitional;-            };-            ocaml_typeconv = callPackage ../development/ocaml-modules/typeconv {-            };-            ocaml_typeconv_3_0_5 = callPackage ../development/ocaml-modules/typeconv/3.0.5.nix {-            };-            ocaml_sexplib = callPackage ../development/ocaml-modules/sexplib {-            };-            ocaml_extlib = callPackage ../development/ocaml-modules/extlib {-            };-            ocaml_extlib_maximal = callPackage ../development/ocaml-modules/extlib {-              minimal = false;-            };-            pycaml = callPackage ../development/ocaml-modules/pycaml {-            };-            opam_1_0_0 = callPackage ../development/tools/ocaml/opam/1.0.0.nix {-            };-            opam_1_1 = callPackage ../development/tools/ocaml/opam/1.1.nix {-            };-            opam = opam_1_1;-            sawja = callPackage ../development/ocaml-modules/sawja {-            };-            uucd = callPackage ../development/ocaml-modules/uucd {-            };-            uunf = callPackage ../development/ocaml-modules/uunf {-            };-            uutf = callPackage ../development/ocaml-modules/uutf {-            };-            xmlm = callPackage ../development/ocaml-modules/xmlm {-            };-            yojson = callPackage ../development/ocaml-modules/yojson {-            };-            zarith = callPackage ../development/ocaml-modules/zarith {-            };-          };-        ocamlPackages = recurseIntoAttrs ocamlPackages_4_01_0;-        ocamlPackages_3_10_0 = mkOcamlPackages ocaml_3_10_0 pkgs.ocamlPackages_3_10_0;-        ocamlPackages_3_11_2 = mkOcamlPackages ocaml_3_11_2 pkgs.ocamlPackages_3_11_2;-        ocamlPackages_3_12_1 = mkOcamlPackages ocaml_3_12_1 pkgs.ocamlPackages_3_12_1;-        ocamlPackages_4_00_1 = mkOcamlPackages ocaml_4_00_1 pkgs.ocamlPackages_4_00_1;-        ocamlPackages_4_01_0 = mkOcamlPackages ocaml_4_01_0 pkgs.ocamlPackages_4_01_0;-        ocamlPackages_latest = ocamlPackages_4_01_0;-        ocaml_make = callPackage ../development/ocaml-modules/ocamlmake {-        };-        opa = let-          callPackage = newScope pkgs.ocamlPackages_4_00_1;-          in callPackage ../development/compilers/opa {-          };-        ocamlnat = let-          callPackage = newScope pkgs.ocamlPackages_3_12_1;-          in callPackage ../development/ocaml-modules/ocamlnat {-          };-        qcmm = callPackage ../development/compilers/qcmm {-          lua = lua4;-          ocaml = ocaml_3_08_0;-        };-        roadsend = callPackage ../development/compilers/roadsend {-        };-        rustc = callPackage ../development/compilers/rustc/0.11.nix {-        };-        rustcMaster = callPackage ../development/compilers/rustc/head.nix {-        };-        rust = rustc;-        sbclBootstrap = callPackage ../development/compilers/sbcl/bootstrap.nix {-        };-        sbcl = callPackage ../development/compilers/sbcl {-          clisp = clisp;-        };-        scala_2_9 = callPackage ../development/compilers/scala/2.9.nix {-        };-        scala_2_10 = callPackage ../development/compilers/scala/2.10.nix {-        };-        scala_2_11 = callPackage ../development/compilers/scala {-        };-        scala = scala_2_11;-        sdcc = callPackage ../development/compilers/sdcc {-        };-        smlnjBootstrap = callPackage ../development/compilers/smlnj/bootstrap.nix {-        };-        smlnj = callPackage_i686 ../development/compilers/smlnj {-        };-        stalin = callPackage ../development/compilers/stalin {-        };-        strategoPackages = recurseIntoAttrs strategoPackages018;-        strategoPackages016 = callPackage ../development/compilers/strategoxt/0.16.nix {-          stdenv = overrideInStdenv stdenv [-            gnumake380-          ];-        };-        strategoPackages017 = callPackage ../development/compilers/strategoxt/0.17.nix {-          readline = readline5;-        };-        strategoPackages018 = callPackage ../development/compilers/strategoxt/0.18.nix {-          readline = readline5;-        };-        metaBuildEnv = callPackage ../development/compilers/meta-environment/meta-build-env {-        };-        swiProlog = callPackage ../development/compilers/swi-prolog {-        };-        tbb = callPackage ../development/libraries/tbb {-        };-        tinycc = callPackage ../development/compilers/tinycc {-        };-        urweb = callPackage ../development/compilers/urweb {-        };-        vala = callPackage ../development/compilers/vala/default.nix {-        };-        visualcpp = callPackage ../development/compilers/visual-c++ {-        };-        vs90wrapper = callPackage ../development/compilers/vs90wrapper {-        };-        webdsl = callPackage ../development/compilers/webdsl {-        };-        win32hello = callPackage ../development/compilers/visual-c++/test {-        };-        wrapGCCWith = gccWrapper: glibc:-        baseGCC: gccWrapper {-          nativeTools = stdenv ? gcc && stdenv.gcc.nativeTools;-          nativeLibc = stdenv ? gcc && stdenv.gcc.nativeLibc;-          nativePrefix = if stdenv ? gcc-            then stdenv.gcc.nativePrefix-            else "";-          gcc = baseGCC;-          libc = glibc;-          shell = bash;-          inherit stdenv binutils-          coreutils zlib;-        };-        wrapClangWith = clangWrapper:-        glibc: baseClang: clangWrapper {-          nativeTools = stdenv.gcc.nativeTools or false;-          nativeLibc = stdenv.gcc.nativeLibc or false;-          nativePrefix = stdenv.gcc.nativePrefix or "";-          clang = baseClang;-          libc = glibc;-          shell = bash;-          binutils = stdenv.gcc.binutils;-          inherit stdenv coreutils zlib;-        };-        wrapClang = wrapClangWith (makeOverridable (import ../build-support/clang-wrapper)) glibc;-        wrapGCC = wrapGCCWith (makeOverridable (import ../build-support/gcc-wrapper)) glibc;-        wrapGCCCross = { binutils, cross, gcc, libc, name ? "gcc-cross-wrapper", shell ? "" }:-        forceNativeDrv (import ../build-support/gcc-cross-wrapper {-          nativeTools = false;-          nativeLibc = false;-          noLibc = libc == null;-          inherit stdenv gcc binutils libc-          shell name cross;-        });-        yap = callPackage ../development/compilers/yap {-        };-        yasm = callPackage ../development/compilers/yasm {-        };-        acl2 = builderDefsPackage ../development/interpreters/acl2 {-          inherit sbcl;-        };-        angelscript = callPackage ../development/interpreters/angelscript {-        };-        clisp = callPackage ../development/interpreters/clisp {-        };-        clisp_2_44_1 = callPackage ../development/interpreters/clisp/2.44.1.nix {-          libsigsegv = libsigsegv_25;-        };-        clojure = callPackage ../development/interpreters/clojure {-        };-        clooj = callPackage ../development/interpreters/clojure/clooj.nix {-        };-        erlangR14 = callPackage ../development/interpreters/erlang/R14.nix {-        };-        erlangR15 = callPackage ../development/interpreters/erlang/R15.nix {-        };-        erlangR16 = callPackage ../development/interpreters/erlang/R16.nix {-        };-        erlangR17 = callPackage ../development/interpreters/erlang/R17.nix {-        };-        erlang = erlangR17;-        rebar = callPackage ../development/tools/build-managers/rebar {-        };-        elixir = callPackage ../development/interpreters/elixir {-        };-        groovy = callPackage ../development/interpreters/groovy {-        };-        guile_1_8 = callPackage ../development/interpreters/guile/1.8.nix {-        };-        guile_2_0 = callPackage ../development/interpreters/guile {-        };-        guile = guile_2_0;-        hadoop = callPackage ../applications/networking/cluster/hadoop {-        };-        io = callPackage ../development/interpreters/io {-        };-        j = callPackage ../development/interpreters/j {-        };-        jmeter = callPackage ../applications/networking/jmeter {-        };-        davmail = callPackage ../applications/networking/davmail {-        };-        lxappearance = callPackage ../applications/misc/lxappearance {-        };-        kona = callPackage ../development/interpreters/kona {-        };-        love = callPackage ../development/interpreters/love {-          lua = lua5;-        };-        love_luajit = callPackage ../development/interpreters/love {-          lua = luajit;-        };-        love_0_9 = callPackage ../development/interpreters/love/0.9.nix {-        };-        lua4 = callPackage ../development/interpreters/lua-4 {-        };-        lua5_0 = callPackage ../development/interpreters/lua-5/5.0.3.nix {-        };-        lua5_1 = callPackage ../development/interpreters/lua-5/5.1.nix {-        };-        lua5_2 = callPackage ../development/interpreters/lua-5/5.2.nix {-        };-        lua5_2_compat = callPackage ../development/interpreters/lua-5/5.2.nix {-          compat = true;-        };-        lua5 = lua5_1;-        lua = lua5;-        lua5_sockets = callPackage ../development/interpreters/lua-5/sockets.nix {-        };-        lua5_expat = callPackage ../development/interpreters/lua-5/expat.nix {-        };-        lua5_filesystem = callPackage ../development/interpreters/lua-5/filesystem.nix {-        };-        lua5_sec = callPackage ../development/interpreters/lua-5/sec.nix {-        };-        luarocks = callPackage ../development/tools/misc/luarocks {-          lua = lua5;-        };-        luajit = callPackage ../development/interpreters/luajit {-        };-        lush2 = callPackage ../development/interpreters/lush {-        };-        maude = callPackage ../development/interpreters/maude {-          bison = bison2;-          flex = flex_2_5_35;-        };-        mesos = callPackage ../applications/networking/cluster/mesos {-          sasl = cyrus_sasl;-          automake = automake114x;-          inherit (pythonPackages) python-          boto setuptools distutils-cfg-          wrapPython;-          pythonProtobuf = pythonPackages.protobuf;-        };-        octave = callPackage ../development/interpreters/octave {-          fltk = fltk13;-          qt = null;-          ghostscript = null;-          llvm = null;-          hdf5 = null;-          glpk = null;-          suitesparse = null;-          openjdk = null;-          gnuplot = null;-          readline = readline63;-        };-        octaveFull = lowPrio (callPackage ../development/interpreters/octave {-          fltk = fltk13;-          qt = qt4;-        });-        octaveHG = callPackage ../development/interpreters/octave/hg.nix {-        };-        ocropus = callPackage ../applications/misc/ocropus {-        };-        perl514 = callPackage ../development/interpreters/perl/5.14 {-        };-        perl516 = callPackage ../development/interpreters/perl/5.16 {-          fetchurl = fetchurlBoot;-        };-        perl520 = callPackage ../development/interpreters/perl/5.20 {-        };-        perl = if system != "i686-cygwin"-          then perl516-          else sysPerl;-        php = php54;-        phpPackages = recurseIntoAttrs (import ./php-packages.nix {-          inherit php pkgs;-        });-        php53 = callPackage ../development/interpreters/php/5.3.nix {-        };-        php_fpm53 = callPackage ../development/interpreters/php/5.3.nix {-          config = config // {-            php = (config.php or { }) // {-              fpm = true;-              apxs2 = false;-            };-          };-        };-        php54 = callPackage ../development/interpreters/php/5.4.nix {-        };-        picolisp = callPackage ../development/interpreters/picolisp {-        };-        pltScheme = racket;-        polyml = callPackage ../development/compilers/polyml {-        };-        pure = callPackage ../development/interpreters/pure {-          llvm = llvm_33;-        };-        python = python2;-        python2 = python27;-        python3 = python34;-        pythonPackages = python2Packages;-        python2Packages = python27Packages;-        python3Packages = python34Packages;-        pythonFull = python2Full;-        python2Full = python27Full;-        python26 = callPackage ../development/interpreters/python/2.6 {-          db = db47;-        };-        python27 = callPackage ../development/interpreters/python/2.7 {-        };-        python32 = callPackage ../development/interpreters/python/3.2 {-        };-        python33 = callPackage ../development/interpreters/python/3.3 {-        };-        python34 = hiPrio (callPackage ../development/interpreters/python/3.4 {-        });-        pypy = callPackage ../development/interpreters/pypy/2.3 {-        };-        python26Full = callPackage ../development/interpreters/python/wrapper.nix {-          extraLibs = [ ];-          postBuild = "";-          python = python26;-          inherit (python26Packages) recursivePthLoader;-        };-        python27Full = callPackage ../development/interpreters/python/wrapper.nix {-          extraLibs = [ ];-          postBuild = "";-          python = python27;-          inherit (python27Packages) recursivePthLoader;-        };-        pythonDocs = recurseIntoAttrs (import ../development/interpreters/python/docs {-          inherit stdenv fetchurl lib;-        });-        pythonLinkmeWrapper = callPackage ../development/interpreters/python/python-linkme-wrapper.nix {-        };-        pypi2nix = python27Packages.pypi2nix;-        pyrex = pyrex095;-        pyrex095 = callPackage ../development/interpreters/pyrex/0.9.5.nix {-        };-        pyrex096 = callPackage ../development/interpreters/pyrex/0.9.6.nix {-        };-        qi = callPackage ../development/compilers/qi {-        };-        racket = callPackage ../development/interpreters/racket {-        };-        rakudo = callPackage ../development/interpreters/rakudo {-        };-        rascal = callPackage ../development/interpreters/rascal {-        };-        regina = callPackage ../development/interpreters/regina {-        };-        renpy = callPackage ../development/interpreters/renpy {-          wrapPython = pythonPackages.wrapPython;-        };-        ruby18 = callPackage ../development/interpreters/ruby/ruby-18.nix {-        };-        ruby19 = callPackage ../development/interpreters/ruby/ruby-19.nix {-        };-        ruby2 = lowPrio (callPackage ../development/interpreters/ruby/ruby-2.0.nix {-        });-        ruby = ruby19;-        rubyLibs = recurseIntoAttrs (callPackage ../development/interpreters/ruby/libs.nix {-        });-        rake = rubyLibs.rake;-        rubySqlite3 = callPackage ../development/ruby-modules/sqlite3 {-        };-        rubygemsFun = ruby:-        builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) {-          inherit ruby makeWrapper;-        };-        rubygems = hiPrio (rubygemsFun ruby);-        rq = callPackage ../applications/networking/cluster/rq {-        };-        scsh = callPackage ../development/interpreters/scsh {-        };-        scheme48 = callPackage ../development/interpreters/scheme48 {-        };-        spark = callPackage ../applications/networking/cluster/spark {-        };-        spidermonkey = callPackage ../development/interpreters/spidermonkey {-        };-        spidermonkey_1_8_0rc1 = callPackage ../development/interpreters/spidermonkey/1.8.0-rc1.nix {-        };-        spidermonkey_185 = callPackage ../development/interpreters/spidermonkey/185-1.0.0.nix {-        };-        spidermonkey_17 = callPackage ../development/interpreters/spidermonkey/17.0.nix {-        };-        spidermonkey_24 = callPackage ../development/interpreters/spidermonkey/24.2.nix {-        };-        supercollider = callPackage ../development/interpreters/supercollider {-          qt = qt4;-          fftw = fftwSinglePrec;-        };-        supercollider_scel = supercollider.override {-          useSCEL = true;-        };-        sysPerl = callPackage ../development/interpreters/perl/sys-perl {-        };-        tcl = callPackage ../development/interpreters/tcl {-        };-        xulrunner = callPackage ../development/interpreters/xulrunner {-          inherit (gnome) libIDL;-          inherit (pythonPackages) pysqlite;-        };-        xulrunner_30 = firefox30Pkgs.xulrunner;-        amdadlsdk = callPackage ../development/misc/amdadl-sdk {-        };-        amdappsdk26 = callPackage ../development/misc/amdapp-sdk {-          version = "2.6";-        };-        amdappsdk27 = callPackage ../development/misc/amdapp-sdk {-          version = "2.7";-        };-        amdappsdk28 = callPackage ../development/misc/amdapp-sdk {-          version = "2.8";-        };-        amdappsdk = amdappsdk28;-        amdappsdkFull = callPackage ../development/misc/amdapp-sdk {-          version = "2.8";-          samples = true;-        };-        avrgcclibc = callPackage ../development/misc/avr-gcc-with-avr-libc {-          gcc = gcc46;-          stdenv = overrideGCC stdenv gcc46;-        };-        avr8burnomat = callPackage ../development/misc/avr8-burn-omat {-        };-        sourceFromHead = import ../build-support/source-from-head-fun.nix {-          inherit config;-        };-        ecj = callPackage ../development/eclipse/ecj {-        };-        jdtsdk = callPackage ../development/eclipse/jdt-sdk {-        };-        jruby165 = callPackage ../development/interpreters/jruby {-        };-        guileCairo = callPackage ../development/guile-modules/guile-cairo {-        };-        guileGnome = callPackage ../development/guile-modules/guile-gnome {-          gconf = gnome.GConf;-          inherit (gnome) gnome_vfs-          libglade libgnome libgnomecanvas-          libgnomeui;-        };-        guile_lib = callPackage ../development/guile-modules/guile-lib {-        };-        guile_ncurses = callPackage ../development/guile-modules/guile-ncurses {-        };-        guile-xcb = callPackage ../development/guile-modules/guile-xcb {-        };-        pharo-vm = callPackage_i686 ../development/pharo/vm {-        };-        srecord = callPackage ../development/tools/misc/srecord {-        };-        windowssdk = import ../development/misc/windows-sdk {-          inherit fetchurl stdenv-          cabextract;-        };-        ansible = callPackage ../tools/system/ansible {-        };-        antlr = callPackage ../development/tools/parsing/antlr/2.7.7.nix {-        };-        antlr3 = callPackage ../development/tools/parsing/antlr {-        };-        ant = apacheAnt;-        apacheAnt = callPackage ../development/tools/build-managers/apache-ant {-        };-        astyle = callPackage ../development/tools/misc/astyle {-        };-        autobuild = callPackage ../development/tools/misc/autobuild {-        };-        autoconf = callPackage ../development/tools/misc/autoconf {-        };-        autoconf213 = callPackage ../development/tools/misc/autoconf/2.13.nix {-        };-        autocutsel = callPackage ../tools/X11/autocutsel {-        };-        automake = automake112x;-        automake111x = callPackage ../development/tools/misc/automake/automake-1.11.x.nix {-        };-        automake112x = callPackage ../development/tools/misc/automake/automake-1.12.x.nix {-        };-        automake113x = callPackage ../development/tools/misc/automake/automake-1.13.x.nix {-        };-        automake114x = callPackage ../development/tools/misc/automake/automake-1.14.x.nix {-        };-        automoc4 = callPackage ../development/tools/misc/automoc4 {-        };-        avrdude = callPackage ../development/tools/misc/avrdude {-        };-        avarice = callPackage ../development/tools/misc/avarice {-        };-        babeltrace = callPackage ../development/tools/misc/babeltrace {-        };-        bam = callPackage ../development/tools/build-managers/bam {-        };-        binutils = callPackage ../development/tools/misc/binutils {-          inherit noSysDirs;-        };-        binutils_nogold = lowPrio (callPackage ../development/tools/misc/binutils {-          inherit noSysDirs;-          gold = false;-        });-        binutilsCross = if crossSystem != null && crossSystem.libc == "libSystem"-          then darwin.cctools-          else lowPrio (forceNativeDrv (import ../development/tools/misc/binutils {-            inherit stdenv fetchurl zlib-            bison;-            noSysDirs = true;-            cross = assert crossSystem != null; crossSystem;-          }));-        bison2 = callPackage ../development/tools/parsing/bison/2.x.nix {-        };-        bison3 = callPackage ../development/tools/parsing/bison/3.x.nix {-        };-        bison = bison3;-        buildbot = callPackage ../development/tools/build-managers/buildbot {-          inherit (pythonPackages) twisted-          jinja2 sqlalchemy-          sqlalchemy_migrate;-          dateutil = pythonPackages.dateutil_1_5;-        };-        buildbotSlave = callPackage ../development/tools/build-managers/buildbot-slave {-          inherit (pythonPackages) twisted;-        };-        byacc = callPackage ../development/tools/parsing/byacc {-        };-        casperjs = callPackage ../development/tools/casperjs {-        };-        cbrowser = callPackage ../development/tools/misc/cbrowser {-        };-        ccache = callPackage ../development/tools/misc/ccache {-        };-        ccacheWrapper = makeOverridable ({ extraConfig ? "" }:-        wrapGCC (ccache.links extraConfig)) {-        };-        ccacheStdenv = lowPrio (overrideGCC stdenv ccacheWrapper);-        cccc = callPackage ../development/tools/analysis/cccc {-        };-        cgdb = callPackage ../development/tools/misc/cgdb {-        };-        chromedriver = callPackage ../development/tools/selenium/chromedriver {-          gconf = gnome.GConf;-        };-        chrpath = callPackage ../development/tools/misc/chrpath {-        };-        "cl-launch" = callPackage ../development/tools/misc/cl-launch {-        };-        complexity = callPackage ../development/tools/misc/complexity {-        };-        ctags = callPackage ../development/tools/misc/ctags {-        };-        ctagsWrapped = import ../development/tools/misc/ctags/wrapped.nix {-          inherit pkgs ctags-          writeScriptBin;-        };-        cmake = callPackage ../development/tools/build-managers/cmake {-        };-        cmake264 = callPackage ../development/tools/build-managers/cmake/264.nix {-        };-        cmakeCurses = cmake.override {-          useNcurses = true;-        };-        cmakeWithGui = cmakeCurses.override {-          useQt4 = true;-        };-        coccinelle = callPackage ../development/tools/misc/coccinelle {-        };-        framac = callPackage ../development/tools/analysis/frama-c {-        };-        cppi = callPackage ../development/tools/misc/cppi {-        };-        cproto = callPackage ../development/tools/misc/cproto {-        };-        cflow = callPackage ../development/tools/misc/cflow {-        };-        cov-build = callPackage ../development/tools/analysis/cov-build {-        };-        cppcheck = callPackage ../development/tools/analysis/cppcheck {-        };-        cscope = callPackage ../development/tools/misc/cscope {-        };-        csslint = callPackage ../development/web/csslint {-        };-        libcxx = callPackage ../development/libraries/libc++ {-          stdenv = pkgs.clangStdenv;-        };-        libcxxabi = callPackage ../development/libraries/libc++abi {-          stdenv = pkgs.clangStdenv;-        };-        libsigrok = callPackage ../development/tools/libsigrok {-        };-        libsigrokdecode = callPackage ../development/tools/libsigrokdecode {-        };-        dejagnu = callPackage ../development/tools/misc/dejagnu {-        };-        dfeet = callPackage ../development/tools/misc/d-feet {-          inherit (pythonPackages) pep8;-        };-        dfu-programmer = callPackage ../development/tools/misc/dfu-programmer {-        };-        ddd = callPackage ../development/tools/misc/ddd {-        };-        distcc = callPackage ../development/tools/misc/distcc {-        };-        distccWrapper = makeOverridable ({ extraConfig ? "" }:-        wrapGCC (distcc.links extraConfig)) {-        };-        distccStdenv = lowPrio (overrideGCC stdenv distccWrapper);-        distccMasquerade = callPackage ../development/tools/misc/distcc/masq.nix {-          gccRaw = gcc.gcc;-          binutils = binutils;-        };-        docutils = builderDefsPackage (import ../development/tools/documentation/docutils) {-          inherit python pil makeWrapper;-        };-        doxygen = callPackage ../development/tools/documentation/doxygen {-          qt4 = null;-        };-        doxygen_gui = lowPrio (doxygen.override {-          inherit qt4;-        });-        drush = callPackage ../development/tools/misc/drush {-        };-        eggdbus = callPackage ../development/tools/misc/eggdbus {-        };-        elfutils = callPackage ../development/tools/misc/elfutils {-        };-        epm = callPackage ../development/tools/misc/epm {-        };-        emma = callPackage ../development/tools/analysis/emma {-        };-        findbugs = callPackage ../development/tools/analysis/findbugs {-        };-        pmd = callPackage ../development/tools/analysis/pmd {-        };-        jdepend = callPackage ../development/tools/analysis/jdepend {-        };-        checkstyle = callPackage ../development/tools/analysis/checkstyle {-        };-        flex_2_5_35 = callPackage ../development/tools/parsing/flex/2.5.35.nix {-        };-        flex_2_5_39 = callPackage ../development/tools/parsing/flex/2.5.39.nix {-        };-        flex = flex_2_5_39;-        m4 = gnum4;-        global = callPackage ../development/tools/misc/global {-        };-        gnome_doc_utils = callPackage ../development/tools/documentation/gnome-doc-utils {-        };-        gnum4 = callPackage ../development/tools/misc/gnum4 {-        };-        gnumake380 = callPackage ../development/tools/build-managers/gnumake/3.80 {-        };-        gnumake381 = callPackage ../development/tools/build-managers/gnumake/3.81 {-        };-        gnumake382 = callPackage ../development/tools/build-managers/gnumake/3.82 {-        };-        gnumake40 = callPackage ../development/tools/build-managers/gnumake/4.0 {-        };-        gnumake = gnumake382;-        gob2 = callPackage ../development/tools/misc/gob2 {-        };-        gradle = callPackage ../development/tools/build-managers/gradle {-        };-        gperf = callPackage ../development/tools/misc/gperf {-        };-        gtk_doc = callPackage ../development/tools/documentation/gtk-doc {-        };-        gtkdialog = callPackage ../development/tools/misc/gtkdialog {-        };-        guileLint = callPackage ../development/tools/guile/guile-lint {-        };-        gwrap = callPackage ../development/tools/guile/g-wrap {-        };-        help2man = callPackage ../development/tools/misc/help2man {-          inherit (perlPackages) LocaleGettext;-        };-        hyenae = callPackage ../tools/networking/hyenae {-        };-        ibus = callPackage ../development/libraries/ibus {-        };-        iconnamingutils = callPackage ../development/tools/misc/icon-naming-utils {-          inherit (perlPackages) XMLSimple;-        };-        indent = callPackage ../development/tools/misc/indent {-        };-        ino = callPackage ../development/arduino/ino {-        };-        inotifyTools = callPackage ../development/tools/misc/inotify-tools {-        };-        intel-gpu-tools = callPackage ../development/tools/misc/intel-gpu-tools {-          inherit (xorg) libpciaccess-          dri2proto libX11 libXext libXv-          libXrandr;-        };-        ired = callPackage ../development/tools/analysis/radare/ired.nix {-        };-        itstool = callPackage ../development/tools/misc/itstool {-        };-        jam = callPackage ../development/tools/build-managers/jam {-        };-        jikespg = callPackage ../development/tools/parsing/jikespg {-        };-        jenkins = callPackage ../development/tools/continuous-integration/jenkins {-        };-        lcov = callPackage ../development/tools/analysis/lcov {-        };-        leiningen = callPackage ../development/tools/build-managers/leiningen {-        };-        libtool = libtool_2;-        libtool_1_5 = callPackage ../development/tools/misc/libtool {-        };-        libtool_2 = callPackage ../development/tools/misc/libtool/libtool2.nix {-        };-        lsof = callPackage ../development/tools/misc/lsof {-        };-        ltrace = callPackage ../development/tools/misc/ltrace {-        };-        lttng-tools = callPackage ../development/tools/misc/lttng-tools {-        };-        lttng-ust = callPackage ../development/tools/misc/lttng-ust {-        };-        lttv = callPackage ../development/tools/misc/lttv {-        };-        mk = callPackage ../development/tools/build-managers/mk {-        };-        neoload = callPackage ../development/tools/neoload {-          licenseAccepted = config.neoload.accept_license or false;-        };-        ninja = callPackage ../development/tools/build-managers/ninja {-        };-        nixbang = callPackage ../development/tools/misc/nixbang {-          pythonPackages = python3Packages;-        };-        node_webkit = callPackage ../development/tools/node-webkit {-          gconf = pkgs.gnome.GConf;-        };-        noweb = callPackage ../development/tools/literate-programming/noweb {-        };-        omake = callPackage ../development/tools/ocaml/omake {-        };-        omake_rc1 = callPackage ../development/tools/ocaml/omake/0.9.8.6-rc1.nix {-        };-        opengrok = callPackage ../development/tools/misc/opengrok {-        };-        openocd = callPackage ../development/tools/misc/openocd {-        };-        oprofile = callPackage ../development/tools/profiling/oprofile {-        };-        patchelf = callPackage ../development/tools/misc/patchelf {-        };-        peg = callPackage ../development/tools/parsing/peg {-        };-        phantomjs = callPackage ../development/tools/phantomjs {-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gccApple-            else stdenv;-        };-        pmccabe = callPackage ../development/tools/misc/pmccabe {-        };-        pkgconfig = forceNativeDrv (callPackage ../development/tools/misc/pkgconfig {-        });-        pkgconfigUpstream = lowPrio (pkgconfig.override {-          vanilla = true;-        });-        prelink = callPackage ../development/tools/misc/prelink {-        };-        premake3 = callPackage ../development/tools/misc/premake/3.nix {-        };-        premake4 = callPackage ../development/tools/misc/premake {-        };-        premake = premake4;-        pstack = callPackage ../development/tools/misc/gdb/pstack.nix {-        };-        radare = callPackage ../development/tools/analysis/radare {-          inherit (gnome) vte;-          lua = lua5;-          useX11 = config.radare.useX11 or false;-          pythonBindings = config.radare.pythonBindings or false;-          rubyBindings = config.radare.rubyBindings or false;-          luaBindings = config.radare.luaBindings or false;-        };-        ragel = callPackage ../development/tools/parsing/ragel {-        };-        re2c = callPackage ../development/tools/parsing/re2c {-        };-        remake = callPackage ../development/tools/build-managers/remake {-        };-        saleae-logic = callPackage ../development/tools/misc/saleae-logic {-        };-        seleniumRCBin = callPackage ../development/tools/selenium/remote-control {-          jre = jdk;-        };-        selenium-server-standalone = callPackage ../development/tools/selenium/server {-        };-        scons = callPackage ../development/tools/build-managers/scons {-        };-        simpleBuildTool = callPackage ../development/tools/build-managers/simple-build-tool {-        };-        sigrok-cli = callPackage ../development/tools/sigrok-cli {-        };-        slimerjs = callPackage ../development/tools/slimerjs {-        };-        sloccount = callPackage ../development/tools/misc/sloccount {-        };-        smatch = callPackage ../development/tools/analysis/smatch {-          buildllvmsparse = false;-          buildc2xml = false;-        };-        smc = callPackage ../tools/misc/smc {-        };-        sparse = callPackage ../development/tools/analysis/sparse {-        };-        speedtest_cli = callPackage ../tools/networking/speedtest-cli {-        };-        spin = callPackage ../development/tools/analysis/spin {-        };-        splint = callPackage ../development/tools/analysis/splint {-          flex = flex_2_5_35;-        };-        stm32flash = callPackage ../development/tools/misc/stm32flash {-        };-        strace = callPackage ../development/tools/misc/strace {-        };-        swig = callPackage ../development/tools/misc/swig {-        };-        swig2 = callPackage ../development/tools/misc/swig/2.x.nix {-        };-        swig3 = callPackage ../development/tools/misc/swig/3.x.nix {-        };-        swigWithJava = swig;-        swfmill = callPackage ../tools/video/swfmill {-        };-        swftools = callPackage ../tools/video/swftools {-        };-        tcptrack = callPackage ../development/tools/misc/tcptrack {-        };-        teensy-loader = callPackage ../development/tools/misc/teensy {-        };-        texinfo413 = callPackage ../development/tools/misc/texinfo/4.13a.nix {-        };-        texinfo5 = callPackage ../development/tools/misc/texinfo/5.2.nix {-        };-        texinfo4 = texinfo413;-        texinfo = texinfo5;-        texinfoInteractive = appendToName "interactive" (texinfo.override {-          interactive = true;-        });-        texi2html = callPackage ../development/tools/misc/texi2html {-        };-        uhd = callPackage ../development/tools/misc/uhd {-        };-        uisp = callPackage ../development/tools/misc/uisp {-        };-        uncrustify = callPackage ../development/tools/misc/uncrustify {-        };-        vagrant = callPackage ../development/tools/vagrant {-          ruby = ruby2;-        };-        gdb = callPackage ../development/tools/misc/gdb {-          hurd = gnu.hurdCross;-          readline = readline63;-          inherit (gnu) mig;-        };-        gdbCross = lowPrio (callPackage ../development/tools/misc/gdb {-          target = crossSystem;-        });-        valgrind = callPackage ../development/tools/analysis/valgrind {-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gccApple-            else stdenv;-        };-        valkyrie = callPackage ../development/tools/analysis/valkyrie {-        };-        xc3sprog = callPackage ../development/tools/misc/xc3sprog {-        };-        xmlindent = callPackage ../development/web/xmlindent {-        };-        xpwn = callPackage ../development/mobile/xpwn {-        };-        xxdiff = callPackage ../development/tools/misc/xxdiff {-          bison = bison2;-        };-        yacc = bison;-        yodl = callPackage ../development/tools/misc/yodl {-        };-        a52dec = callPackage ../development/libraries/a52dec {-        };-        aacskeys = callPackage ../development/libraries/aacskeys {-        };-        aalib = callPackage ../development/libraries/aalib {-        };-        accountsservice = callPackage ../development/libraries/accountsservice {-        };-        acl = callPackage ../development/libraries/acl {-        };-        activemq = callPackage ../development/libraries/apache-activemq {-        };-        adns = callPackage ../development/libraries/adns {-        };-        afflib = callPackage ../development/libraries/afflib {-        };-        agg = callPackage ../development/libraries/agg {-        };-        allegro = callPackage ../development/libraries/allegro {-        };-        allegro5 = callPackage ../development/libraries/allegro/5.nix {-        };-        allegro5unstable = callPackage ../development/libraries/allegro/5-unstable.nix {-        };-        amrnb = callPackage ../development/libraries/amrnb {-        };-        amrwb = callPackage ../development/libraries/amrwb {-        };-        apr = callPackage ../development/libraries/apr {-        };-        aprutil = callPackage ../development/libraries/apr-util {-          bdbSupport = true;-        };-        asio = callPackage ../development/libraries/asio {-        };-        aspell = callPackage ../development/libraries/aspell {-        };-        aspellDicts = recurseIntoAttrs (import ../development/libraries/aspell/dictionaries.nix {-          inherit fetchurl stdenv aspell-          which;-        });-        aterm = aterm25;-        aterm25 = callPackage ../development/libraries/aterm/2.5.nix {-        };-        aterm28 = lowPrio (callPackage ../development/libraries/aterm/2.8.nix {-        });-        attica = callPackage ../development/libraries/attica {-        };-        attr = callPackage ../development/libraries/attr {-        };-        at_spi2_core = callPackage ../development/libraries/at-spi2-core {-        };-        at_spi2_atk = callPackage ../development/libraries/at-spi2-atk {-        };-        aqbanking = callPackage ../development/libraries/aqbanking {-        };-        aubio = callPackage ../development/libraries/aubio {-        };-        audiofile = callPackage ../development/libraries/audiofile {-        };-        axis = callPackage ../development/libraries/axis {-        };-        babl_0_0_22 = callPackage ../development/libraries/babl/0_0_22.nix {-        };-        babl = callPackage ../development/libraries/babl {-        };-        beecrypt = callPackage ../development/libraries/beecrypt {-        };-        boehmgc = callPackage ../development/libraries/boehm-gc {-        };-        boolstuff = callPackage ../development/libraries/boolstuff {-        };-        boost144 = callPackage ../development/libraries/boost/1.44.nix {-        };-        boost149 = callPackage ../development/libraries/boost/1.49.nix {-        };-        boost155 = callPackage ../development/libraries/boost/1.55.nix {-        };-        boost = boost155;-        boostHeaders = callPackage ../development/libraries/boost/header-only-wrapper.nix {-        };-        botan = callPackage ../development/libraries/botan {-        };-        botanUnstable = callPackage ../development/libraries/botan/unstable.nix {-        };-        box2d = callPackage ../development/libraries/box2d {-        };-        box2d_2_0_1 = callPackage ../development/libraries/box2d/2.0.1.nix {-        };-        buddy = callPackage ../development/libraries/buddy {-        };-        bwidget = callPackage ../development/libraries/bwidget {-        };-        c-ares = callPackage ../development/libraries/c-ares {-          fetchurl = fetchurlBoot;-        };-        caelum = callPackage ../development/libraries/caelum {-        };-        capnproto = callPackage ../development/libraries/capnproto {-        };-        scmccid = callPackage ../development/libraries/scmccid {-        };-        ccrtp = callPackage ../development/libraries/ccrtp {-        };-        ccrtp_1_8 = callPackage ../development/libraries/ccrtp/1.8.nix {-        };-        celt = callPackage ../development/libraries/celt {-        };-        celt_0_7 = callPackage ../development/libraries/celt/0.7.nix {-        };-        celt_0_5_1 = callPackage ../development/libraries/celt/0.5.1.nix {-        };-        cgal = callPackage ../development/libraries/CGAL {-        };-        cgui = callPackage ../development/libraries/cgui {-        };-        check = callPackage ../development/libraries/check {-        };-        chipmunk = builderDefsPackage (import ../development/libraries/chipmunk) {-          inherit cmake freeglut mesa;-          inherit (xlibs) libX11 xproto-          inputproto libXi libXmu;-        };-        chmlib = callPackage ../development/libraries/chmlib {-        };-        chromaprint = callPackage ../development/libraries/chromaprint {-        };-        cil = callPackage ../development/libraries/cil {-        };-        cilaterm = callPackage ../development/libraries/cil-aterm {-          stdenv = overrideInStdenv stdenv [-            gnumake380-          ];-        };-        clanlib = callPackage ../development/libraries/clanlib {-        };-        classads = callPackage ../development/libraries/classads {-        };-        classpath = callPackage ../development/libraries/java/classpath {-          javac = gcj;-          jvm = gcj;-          gconf = gnome.GConf;-        };-        clearsilver = callPackage ../development/libraries/clearsilver {-        };-        cln = callPackage ../development/libraries/cln {-        };-        clppcre = builderDefsPackage (import ../development/libraries/cl-ppcre) {-        };-        clucene_core_2 = callPackage ../development/libraries/clucene-core/2.x.nix {-        };-        clucene_core_1 = callPackage ../development/libraries/clucene-core {-        };-        clucene_core = clucene_core_1;-        clutter = callPackage ../development/libraries/clutter {-        };-        clutter_1_18 = callPackage ../development/libraries/clutter/1.18.nix {-          cogl = cogl_1_18;-        };-        clutter-gst = callPackage ../development/libraries/clutter-gst {-        };-        clutter_gtk = callPackage ../development/libraries/clutter-gtk {-        };-        clutter_gtk_0_10 = callPackage ../development/libraries/clutter-gtk/0.10.8.nix {-        };-        cminpack = callPackage ../development/libraries/cminpack {-        };-        cogl = callPackage ../development/libraries/cogl {-        };-        cogl_1_18 = callPackage ../development/libraries/cogl/1.18.nix {-        };-        coin3d = callPackage ../development/libraries/coin3d {-        };-        commoncpp2 = callPackage ../development/libraries/commoncpp2 {-        };-        confuse = callPackage ../development/libraries/confuse {-        };-        coredumper = callPackage ../development/libraries/coredumper {-        };-        ctl = callPackage ../development/libraries/ctl {-        };-        cpp-netlib = callPackage ../development/libraries/cpp-netlib {-        };-        cppunit = callPackage ../development/libraries/cppunit {-        };-        cppnetlib = callPackage ../development/libraries/cppnetlib {-          boost = boostHeaders;-        };-        cracklib = callPackage ../development/libraries/cracklib {-        };-        cryptopp = callPackage ../development/libraries/crypto++ {-        };-        cyrus_sasl = callPackage ../development/libraries/cyrus-sasl {-        };-        db = db5;-        db4 = db48;-        db44 = callPackage ../development/libraries/db/db-4.4.nix {-        };-        db45 = callPackage ../development/libraries/db/db-4.5.nix {-        };-        db47 = callPackage ../development/libraries/db/db-4.7.nix {-        };-        db48 = callPackage ../development/libraries/db/db-4.8.nix {-        };-        db5 = db53;-        db53 = callPackage ../development/libraries/db/db-5.3.nix {-        };-        db6 = db60;-        db60 = callPackage ../development/libraries/db/db-6.0.nix {-        };-        dbus = callPackage ../development/libraries/dbus {-        };-        dbus_cplusplus = callPackage ../development/libraries/dbus-cplusplus {-        };-        dbus_glib = callPackage ../development/libraries/dbus-glib {-        };-        dbus_java = callPackage ../development/libraries/java/dbus-java {-        };-        dbus_python = callPackage ../development/python-modules/dbus {-        };-        dbus_tools = pkgs.dbus.tools;-        dbus_libs = pkgs.dbus.libs;-        dbus_daemon = pkgs.dbus.daemon;-        dhex = callPackage ../applications/editors/dhex {-        };-        dclib = callPackage ../development/libraries/dclib {-        };-        dillo = callPackage ../applications/networking/browsers/dillo {-          fltk = fltk13;-        };-        directfb = callPackage ../development/libraries/directfb {-        };-        dotconf = callPackage ../development/libraries/dotconf {-        };-        dssi = callPackage ../development/libraries/dssi {-        };-        dragonegg = llvmPackages.dragonegg;-        dxflib = callPackage ../development/libraries/dxflib {-        };-        eigen = callPackage ../development/libraries/eigen {-        };-        eigen2 = callPackage ../development/libraries/eigen/2.0.nix {-        };-        enchant = callPackage ../development/libraries/enchant {-        };-        enet = callPackage ../development/libraries/enet {-        };-        enginepkcs11 = callPackage ../development/libraries/enginepkcs11 {-        };-        epoxy = callPackage ../development/libraries/epoxy {-          inherit (xorg) utilmacros-          libX11;-        };-        esdl = callPackage ../development/libraries/esdl {-        };-        exiv2 = callPackage ../development/libraries/exiv2 {-        };-        expat = callPackage ../development/libraries/expat {-        };-        extremetuxracer = builderDefsPackage (import ../games/extremetuxracer) {-          inherit mesa tcl freeglut SDL-          SDL_mixer pkgconfig gettext-          intltool;-          inherit (xlibs) libX11 xproto-          libXi inputproto libXmu libXext-          xextproto libXt libSM libICE;-          libpng = libpng12;-        };-        eventlog = callPackage ../development/libraries/eventlog {-        };-        facile = callPackage ../development/libraries/facile {-        };-        faac = callPackage ../development/libraries/faac {-        };-        faad2 = callPackage ../development/libraries/faad2 {-        };-        farsight2 = callPackage ../development/libraries/farsight2 {-        };-        farstream = callPackage ../development/libraries/farstream {-          inherit (gst_all_1) gstreamer-          gst-plugins-base gst-python-          gst-plugins-good gst-plugins-bad-          gst-libav;-        };-        fcgi = callPackage ../development/libraries/fcgi {-        };-        ffmpeg_0_6 = callPackage ../development/libraries/ffmpeg/0.6.nix {-          vpxSupport = !stdenv.isMips;-        };-        ffmpeg_0_6_90 = callPackage ../development/libraries/ffmpeg/0.6.90.nix {-          vpxSupport = !stdenv.isMips;-        };-        ffmpeg_0_10 = callPackage ../development/libraries/ffmpeg/0.10.nix {-          vpxSupport = !stdenv.isMips;-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gccApple-            else stdenv;-        };-        ffmpeg_1 = callPackage ../development/libraries/ffmpeg/1.x.nix {-          vpxSupport = !stdenv.isMips;-        };-        ffmpeg_2 = callPackage ../development/libraries/ffmpeg/2.x.nix {-        };-        ffmpeg = ffmpeg_2;-        ffms = callPackage ../development/libraries/ffms {-        };-        fftw = callPackage ../development/libraries/fftw {-        };-        fftwSinglePrec = fftw.override {-          precision = "single";-        };-        fftwFloat = fftwSinglePrec;-        flann = callPackage ../development/libraries/flann {-        };-        flite = callPackage ../development/libraries/flite {-        };-        fltk13 = callPackage ../development/libraries/fltk/fltk13.nix {-        };-        fltk20 = callPackage ../development/libraries/fltk {-        };-        fmod = callPackage ../development/libraries/fmod {-        };-        freeimage = callPackage ../development/libraries/freeimage {-        };-        freetts = callPackage ../development/libraries/freetts {-        };-        cfitsio = callPackage ../development/libraries/cfitsio {-        };-        fontconfig = callPackage ../development/libraries/fontconfig {-        };-        makeFontsConf = let-          fontconfig_ = fontconfig;-          in { fontDirectories, fontconfig ? fontconfig_ }:-          import ../development/libraries/fontconfig/make-fonts-conf.nix {-            inherit runCommand libxslt-            fontconfig fontDirectories;-          };-        freealut = callPackage ../development/libraries/freealut {-        };-        freeglut = callPackage ../development/libraries/freeglut {-        };-        freetype = callPackage ../development/libraries/freetype {-        };-        frei0r = callPackage ../development/libraries/frei0r {-        };-        fribidi = callPackage ../development/libraries/fribidi {-        };-        funambol = callPackage ../development/libraries/funambol {-        };-        fam = gamin;-        gamin = callPackage ../development/libraries/gamin {-        };-        ganv = callPackage ../development/libraries/ganv {-        };-        gav = callPackage ../games/gav {-        };-        gsb = callPackage ../games/gsb {-        };-        gdome2 = callPackage ../development/libraries/gdome2 {-          inherit (gnome) gtkdoc;-        };-        gdbm = callPackage ../development/libraries/gdbm {-        };-        gegl = callPackage ../development/libraries/gegl {-        };-        gegl_0_0_22 = callPackage ../development/libraries/gegl/0_0_22.nix {-          libpng = libpng12;-        };-        geoclue = callPackage ../development/libraries/geoclue {-        };-        geoclue2 = callPackage ../development/libraries/geoclue/2.0.nix {-        };-        geoip = callPackage ../development/libraries/geoip {-        };-        geoipjava = callPackage ../development/libraries/java/geoipjava {-        };-        geos = callPackage ../development/libraries/geos {-        };-        gettext = gettext_0_18;-        gettext_0_17 = callPackage ../development/libraries/gettext/0.17.nix {-        };-        gettext_0_18 = callPackage ../development/libraries/gettext {-        };-        gd = callPackage ../development/libraries/gd {-        };-        gdal = callPackage ../development/libraries/gdal {-        };-        ggz_base_libs = callPackage ../development/libraries/ggz_base_libs {-        };-        giblib = callPackage ../development/libraries/giblib {-        };-        libgit2 = callPackage ../development/libraries/git2 {-        };-        glew = callPackage ../development/libraries/glew {-        };-        glfw = glfw3;-        glfw2 = callPackage ../development/libraries/glfw/2.x.nix {-        };-        glfw3 = callPackage ../development/libraries/glfw/3.x.nix {-        };-        glibc = callPackage ../development/libraries/glibc/2.19 {-          kernelHeaders = linuxHeaders;-          installLocales = config.glibc.locales or false;-          machHeaders = null;-          hurdHeaders = null;-          gccCross = null;-        };-        glibc_memusage = callPackage ../development/libraries/glibc/2.19 {-          kernelHeaders = linuxHeaders;-          installLocales = false;-          withGd = true;-        };-        glibcCross = forceNativeDrv (makeOverridable (import ../development/libraries/glibc/2.19) (let-          crossGNU = crossSystem != null && crossSystem.config == "i586-pc-gnu";-          in {-            inherit stdenv fetchurl;-            gccCross = gccCrossStageStatic;-            kernelHeaders = if crossGNU-              then gnu.hurdHeaders-              else linuxHeadersCross;-            installLocales = config.glibc.locales or false;-          } // lib.optionalAttrs crossGNU {-            inherit (gnu) machHeaders-            hurdHeaders libpthreadHeaders-            mig;-            inherit fetchgit;-          }));-        libcCrossChooser = name:-        if name == "glibc"-          then glibcCross-          else if name == "uclibc"-            then uclibcCross-            else if name == "msvcrt"-              then windows.mingw_w64-              else if name == "libSystem"-                then darwin.xcode-                else throw "Unknown libc";-        libcCross = assert crossSystem != null; libcCrossChooser crossSystem.libc;-        eglibc = callPackage ../development/libraries/eglibc {-          kernelHeaders = linuxHeaders;-          installLocales = config.glibc.locales or false;-        };-        glibcLocales = callPackage ../development/libraries/glibc/2.19/locales.nix {-        };-        glibcInfo = callPackage ../development/libraries/glibc/2.19/info.nix {-        };-        glibc_multi = runCommand "${glibc.name}-multi" {-          glibc64 = glibc;-          glibc32 = (import ./all-packages.nix {-            system = "i686-linux";-          }).glibc;-        } ''-          mkdir -p ''$out-          ln -s ''$glibc64/* ''$out/-          -          rm ''$out/lib ''$out/lib64-          mkdir -p ''$out/lib-          ln -s ''$glibc64/lib/* ''$out/lib-          ln -s ''$glibc32/lib ''$out/lib/32-          ln -s lib ''$out/lib64-          -          # fixing ldd RLTDLIST-          rm ''$out/bin-          cp -rs ''$glibc64/bin ''$out-          chmod u+w ''$out/bin-          rm ''$out/bin/ldd-          sed -e "s|^RTLDLIST=.*''$|RTLDLIST=\"''$out/lib/ld-2.19.so ''$out/lib/32/ld-linux.so.2\"|g" \-              ''$glibc64/bin/ldd > ''$out/bin/ldd-          chmod 555 ''$out/bin/ldd-          -          rm ''$out/include-          cp -rs ''$glibc32/include ''$out-          chmod -R u+w ''$out/include-          cp -rsf ''$glibc64/include ''$out-        '';-        glm = callPackage ../development/libraries/glm {-        };-        glog = callPackage ../development/libraries/glog {-        };-        gloox = callPackage ../development/libraries/gloox {-        };-        glpk = callPackage ../development/libraries/glpk {-        };-        glsurf = callPackage ../applications/science/math/glsurf {-          inherit (ocamlPackages) lablgl-          findlib camlimages ocaml_mysql-          mlgmp;-          libpng = libpng12;-          giflib = giflib_4_1;-        };-        gmime = callPackage ../development/libraries/gmime {-        };-        gmm = callPackage ../development/libraries/gmm {-        };-        gmp = gmp5;-        gmp5 = gmp51;-        gmpxx = appendToName "with-cxx" (gmp.override {-          cxx = true;-        });-        gmp4 = callPackage ../development/libraries/gmp/4.3.2.nix {-        };-        gmp51 = callPackage ../development/libraries/gmp/5.1.x.nix {-        };-        mpfr = callPackage ../development/libraries/mpfr/default.nix {-        };-        gobjectIntrospection = callPackage ../development/libraries/gobject-introspection {-        };-        goocanvas = callPackage ../development/libraries/goocanvas {-        };-        google-gflags = callPackage ../development/libraries/google-gflags {-        };-        gperftools = callPackage ../development/libraries/gperftools {-        };-        gst_all_1 = recurseIntoAttrs (callPackage ../development/libraries/gstreamer {-          callPackage = pkgs.newScope (pkgs // {-            libav = pkgs.libav_10;-          });-        });-        gst_all = {-          inherit (pkgs) gstreamer gnonlin-          gst_python qt_gstreamer;-          gstPluginsBase = pkgs.gst_plugins_base;-          gstPluginsBad = pkgs.gst_plugins_bad;-          gstPluginsGood = pkgs.gst_plugins_good;-          gstPluginsUgly = pkgs.gst_plugins_ugly;-          gstFfmpeg = pkgs.gst_ffmpeg;-        };-        gstreamer = callPackage ../development/libraries/gstreamer/legacy/gstreamer {-          bison = bison2;-        };-        gst_plugins_base = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-base {-        };-        gst_plugins_good = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-good {-        };-        gst_plugins_bad = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-bad {-        };-        gst_plugins_ugly = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-ugly {-        };-        gst_ffmpeg = callPackage ../development/libraries/gstreamer/legacy/gst-ffmpeg {-          ffmpeg = ffmpeg_0_10;-        };-        gst_python = callPackage ../development/libraries/gstreamer/legacy/gst-python {-        };-        gstreamermm = callPackage ../development/libraries/gstreamer/legacy/gstreamermm {-        };-        gnonlin = callPackage ../development/libraries/gstreamer/legacy/gnonlin {-        };-        gusb = callPackage ../development/libraries/gusb {-          inherit (gnome) gtkdoc;-        };-        qt_gstreamer = callPackage ../development/libraries/gstreamer/legacy/qt-gstreamer {-        };-        gnet = callPackage ../development/libraries/gnet {-        };-        gnu-efi = callPackage ../development/libraries/gnu-efi {-        };-        gnutls = gnutls32;-        gnutls31 = callPackage ../development/libraries/gnutls/3.1.nix {-          guileBindings = config.gnutls.guile or false;-        };-        gnutls32 = callPackage ../development/libraries/gnutls/3.2.nix {-          guileBindings = config.gnutls.guile or false;-        };-        gnutls_with_guile = lowPrio (gnutls.override {-          guileBindings = true;-        });-        gpac = callPackage ../applications/video/gpac {-        };-        gpgme = callPackage ../development/libraries/gpgme {-          gnupg1 = gnupg1orig;-        };-        grantlee = callPackage ../development/libraries/grantlee {-        };-        gsasl = callPackage ../development/libraries/gsasl {-        };-        gsl = callPackage ../development/libraries/gsl {-        };-        gsm = callPackage ../development/libraries/gsm {-        };-        gsoap = callPackage ../development/libraries/gsoap {-        };-        gss = callPackage ../development/libraries/gss {-        };-        gtkimageview = callPackage ../development/libraries/gtkimageview {-        };-        gtkmathview = callPackage ../development/libraries/gtkmathview {-        };-        gtkLibs = {-          inherit (pkgs) glib glibmm atk-          atkmm cairo pango pangomm-          gdk_pixbuf gtk gtkmm;-        };-        glib = callPackage ../development/libraries/glib {-        };-        glib-tested = glib.override {-          doCheck = true;-        };-        glibmm = callPackage ../development/libraries/glibmm {-        };-        glib_networking = callPackage ../development/libraries/glib-networking {-        };-        atk = callPackage ../development/libraries/atk {-        };-        atkmm = callPackage ../development/libraries/atkmm {-        };-        pixman = callPackage ../development/libraries/pixman {-        };-        cairo = callPackage ../development/libraries/cairo {-          glSupport = config.cairo.gl or stdenv.isLinux && !stdenv.isArm && !stdenv.isMips;-        };-        cairomm = callPackage ../development/libraries/cairomm {-        };-        pango = callPackage ../development/libraries/pango {-        };-        pangomm = callPackage ../development/libraries/pangomm {-        };-        pangox_compat = callPackage ../development/libraries/pangox-compat {-        };-        gdk_pixbuf = callPackage ../development/libraries/gdk-pixbuf {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        gtk2 = callPackage ../development/libraries/gtk+/2.x.nix {-          cupsSupport = config.gtk2.cups or stdenv.isLinux;-        };-        gtk3 = callPackage ../development/libraries/gtk+/3.x.nix {-        };-        gtk = pkgs.gtk2;-        gtkmm = callPackage ../development/libraries/gtkmm/2.x.nix {-        };-        gtkmm3 = callPackage ../development/libraries/gtkmm/3.x.nix {-        };-        gtkmozembedsharp = callPackage ../development/libraries/gtkmozembed-sharp {-          gtksharp = gtksharp2;-        };-        gtksharp1 = callPackage ../development/libraries/gtk-sharp-1 {-          inherit (gnome) libglade-          libgtkhtml gtkhtml-          libgnomecanvas libgnomeui-          libgnomeprint libgnomeprintui-          GConf;-        };-        gtksharp2 = callPackage ../development/libraries/gtk-sharp-2 {-          inherit (gnome) libglade-          libgtkhtml gtkhtml-          libgnomecanvas libgnomeui-          libgnomeprint libgnomeprintui-          GConf gnomepanel;-        };-        gtksourceviewsharp = callPackage ../development/libraries/gtksourceview-sharp {-          inherit (gnome) gtksourceview;-          gtksharp = gtksharp2;-        };-        gtkspell = callPackage ../development/libraries/gtkspell {-        };-        gtkspell3 = callPackage ../development/libraries/gtkspell/3.nix {-        };-        gts = callPackage ../development/libraries/gts {-        };-        gvfs = callPackage ../development/libraries/gvfs {-          gconf = gnome.GConf;-        };-        gwenhywfar = callPackage ../development/libraries/gwenhywfar {-        };-        hamlib = callPackage ../development/libraries/hamlib {-        };-        kerberos = heimdal;-        heimdal = callPackage ../development/libraries/kerberos/heimdal.nix {-        };-        harfbuzz = callPackage ../development/libraries/harfbuzz {-        };-        hawknl = callPackage ../development/libraries/hawknl {-        };-        herqq = callPackage ../development/libraries/herqq {-        };-        hspell = callPackage ../development/libraries/hspell {-        };-        hspellDicts = callPackage ../development/libraries/hspell/dicts.nix {-        };-        hsqldb = callPackage ../development/libraries/java/hsqldb {-        };-        http-parser = callPackage ../development/libraries/http-parser {-          inherit (pythonPackages) gyp;-        };-        hunspell = callPackage ../development/libraries/hunspell {-        };-        hwloc = callPackage ../development/libraries/hwloc {-          inherit (xlibs) libX11;-        };-        hydraAntLogger = callPackage ../development/libraries/java/hydra-ant-logger {-        };-        icu = callPackage ../development/libraries/icu {-        };-        id3lib = callPackage ../development/libraries/id3lib {-        };-        iksemel = callPackage ../development/libraries/iksemel {-        };-        ilbc = callPackage ../development/libraries/ilbc {-        };-        ilixi = callPackage ../development/libraries/ilixi {-        };-        ilmbase = callPackage ../development/libraries/ilmbase {-        };-        imlib = callPackage ../development/libraries/imlib {-          libpng = libpng12;-        };-        imlib2 = callPackage ../development/libraries/imlib2 {-        };-        incrtcl = callPackage ../development/libraries/incrtcl {-        };-        indilib = callPackage ../development/libraries/indilib {-        };-        iniparser = callPackage ../development/libraries/iniparser {-        };-        intltool = callPackage ../development/tools/misc/intltool {-        };-        irrlicht3843 = callPackage ../development/libraries/irrlicht {-        };-        isocodes = callPackage ../development/libraries/iso-codes {-        };-        itk = callPackage ../development/libraries/itk {-        };-        jamp = builderDefsPackage ../games/jamp {-          inherit mesa SDL SDL_image-          SDL_mixer;-        };-        jasper = callPackage ../development/libraries/jasper {-        };-        jama = callPackage ../development/libraries/jama {-        };-        jansson = callPackage ../development/libraries/jansson {-        };-        jbig2dec = callPackage ../development/libraries/jbig2dec {-        };-        jetty_gwt = callPackage ../development/libraries/java/jetty-gwt {-        };-        jetty_util = callPackage ../development/libraries/java/jetty-util {-        };-        json_glib = callPackage ../development/libraries/json-glib {-        };-        json-c-0-11 = callPackage ../development/libraries/json-c/0.11.nix {-        };-        json_c = callPackage ../development/libraries/json-c {-        };-        jsoncpp = callPackage ../development/libraries/jsoncpp {-        };-        libjson = callPackage ../development/libraries/libjson {-        };-        judy = callPackage ../development/libraries/judy {-        };-        keybinder = callPackage ../development/libraries/keybinder {-          automake = automake111x;-          lua = lua5_1;-        };-        keybinder3 = callPackage ../development/libraries/keybinder3 {-          automake = automake111x;-          lua = lua5_1;-        };-        krb5 = callPackage ../development/libraries/kerberos/krb5.nix {-        };-        lcms = lcms1;-        lcms1 = callPackage ../development/libraries/lcms {-        };-        lcms2 = callPackage ../development/libraries/lcms2 {-        };-        lensfun = callPackage ../development/libraries/lensfun {-        };-        lesstif = callPackage ../development/libraries/lesstif {-        };-        lesstif93 = callPackage ../development/libraries/lesstif-0.93 {-        };-        leveldb = callPackage ../development/libraries/leveldb {-        };-        levmar = callPackage ../development/libraries/levmar {-        };-        leptonica = callPackage ../development/libraries/leptonica {-          libpng = libpng12;-        };-        lgi = callPackage ../development/libraries/lgi {-          lua = lua5_1;-        };-        lib3ds = callPackage ../development/libraries/lib3ds {-        };-        libaacs = callPackage ../development/libraries/libaacs {-        };-        libaal = callPackage ../development/libraries/libaal {-        };-        libao = callPackage ../development/libraries/libao {-          usePulseAudio = config.pulseaudio or true;-        };-        libarchive = callPackage ../development/libraries/libarchive {-        };-        libass = callPackage ../development/libraries/libass {-        };-        libassuan1 = callPackage ../development/libraries/libassuan1 {-        };-        libassuan = callPackage ../development/libraries/libassuan {-        };-        libassuan2_1 = callPackage ../development/libraries/libassuan/git.nix {-        };-        libatomic_ops = callPackage ../development/libraries/libatomic_ops {-        };-        libav = libav_10;-        libav_all = callPackage ../development/libraries/libav {-        };-        inherit (libav_all) libav_0_8-        libav_9 libav_10;-        libavc1394 = callPackage ../development/libraries/libavc1394 {-        };-        libbluedevil = callPackage ../development/libraries/libbluedevil {-        };-        libbluray = callPackage ../development/libraries/libbluray {-        };-        libbs2b = callPackage ../development/libraries/audio/libbs2b {-        };-        libcaca = callPackage ../development/libraries/libcaca {-        };-        libcanberra = callPackage ../development/libraries/libcanberra {-        };-        libcanberra_gtk3 = libcanberra.override {-          gtk = gtk3;-        };-        libcanberra_kde = if config.kde_runtime.libcanberraWithoutGTK or true-          then libcanberra.override {-            gtk = null;-          }-          else libcanberra;-        libcello = callPackage ../development/libraries/libcello {-        };-        libcdaudio = callPackage ../development/libraries/libcdaudio {-        };-        libcddb = callPackage ../development/libraries/libcddb {-        };-        libcdio = callPackage ../development/libraries/libcdio {-        };-        libcdio082 = callPackage ../development/libraries/libcdio/0.82.nix {-        };-        libcdr = callPackage ../development/libraries/libcdr {-          lcms = lcms2;-        };-        libchamplain = callPackage ../development/libraries/libchamplain {-          inherit (gnome) libsoup;-        };-        libchamplain_0_6 = callPackage ../development/libraries/libchamplain/0.6.nix {-        };-        libchop = callPackage ../development/libraries/libchop {-        };-        libcm = callPackage ../development/libraries/libcm {-        };-        inherit (gnome3) libcroco;-        libcangjie = callPackage ../development/libraries/libcangjie {-        };-        libcredis = callPackage ../development/libraries/libcredis {-        };-        libctemplate = callPackage ../development/libraries/libctemplate {-        };-        libcue = callPackage ../development/libraries/libcue {-        };-        libdaemon = callPackage ../development/libraries/libdaemon {-        };-        libdbi = callPackage ../development/libraries/libdbi {-        };-        libdbiDriversBase = callPackage ../development/libraries/libdbi-drivers {-          mysql = null;-          sqlite = null;-        };-        libdbiDrivers = libdbiDriversBase.override {-          inherit sqlite mysql;-        };-        libdbusmenu_qt = callPackage ../development/libraries/libdbusmenu-qt {-        };-        libdc1394 = callPackage ../development/libraries/libdc1394 {-        };-        libdc1394avt = callPackage ../development/libraries/libdc1394avt {-        };-        libdevil = callPackage ../development/libraries/libdevil {-        };-        libdiscid = callPackage ../development/libraries/libdiscid {-        };-        libdivsufsort = callPackage ../development/libraries/libdivsufsort {-        };-        libdmtx = callPackage ../development/libraries/libdmtx {-        };-        libdnet = callPackage ../development/libraries/libdnet {-        };-        libdrm = callPackage ../development/libraries/libdrm {-          inherit fetchurl stdenv-          pkgconfig;-          inherit (xorg) libpthreadstubs;-        };-        libdv = callPackage ../development/libraries/libdv {-        };-        libdvbpsi = callPackage ../development/libraries/libdvbpsi {-        };-        libdwg = callPackage ../development/libraries/libdwg {-        };-        libdvdcss = callPackage ../development/libraries/libdvdcss {-        };-        libdvdnav = callPackage ../development/libraries/libdvdnav {-        };-        libdvdread = callPackage ../development/libraries/libdvdread {-        };-        libdwarf = callPackage ../development/libraries/libdwarf {-        };-        libeatmydata = callPackage ../development/libraries/libeatmydata {-        };-        libebml = callPackage ../development/libraries/libebml {-        };-        libedit = callPackage ../development/libraries/libedit {-        };-        libelf = callPackage ../development/libraries/libelf {-        };-        libfm = callPackage ../development/libraries/libfm {-        };-        libgadu = callPackage ../development/libraries/libgadu {-        };-        libgdata = gnome3.libgdata;-        libgig = callPackage ../development/libraries/libgig {-        };-        libgnome_keyring = callPackage ../development/libraries/libgnome-keyring {-        };-        libgnome_keyring3 = gnome3.libgnome_keyring;-        libgnurl = callPackage ../development/libraries/libgnurl {-        };-        libseccomp = callPackage ../development/libraries/libseccomp {-        };-        libsecret = callPackage ../development/libraries/libsecret {-        };-        libserialport = callPackage ../development/libraries/libserialport {-        };-        libgtop = callPackage ../development/libraries/libgtop {-        };-        liblo = callPackage ../development/libraries/liblo {-        };-        liblrdf = librdf;-        liblscp = callPackage ../development/libraries/liblscp {-        };-        libe-book = callPackage ../development/libraries/libe-book {-        };-        libe-book_00 = callPackage ../development/libraries/libe-book/0.0.nix {-        };-        libev = builderDefsPackage ../development/libraries/libev {-        };-        libevent14 = callPackage ../development/libraries/libevent/1.4.nix {-        };-        libevent = callPackage ../development/libraries/libevent {-        };-        libewf = callPackage ../development/libraries/libewf {-        };-        libexif = callPackage ../development/libraries/libexif {-        };-        libexosip = callPackage ../development/libraries/exosip {-        };-        libexosip_3 = callPackage ../development/libraries/exosip/3.x.nix {-          libosip = libosip_3;-        };-        libextractor = callPackage ../development/libraries/libextractor {-          libmpeg2 = mpeg2dec;-        };-        libexttextcat = callPackage ../development/libraries/libexttextcat {-        };-        libf2c = callPackage ../development/libraries/libf2c {-        };-        libfixposix = callPackage ../development/libraries/libfixposix {-        };-        libffcall = builderDefsPackage (import ../development/libraries/libffcall) {-          inherit fetchcvs;-        };-        libffi = callPackage ../development/libraries/libffi {-        };-        libftdi = callPackage ../development/libraries/libftdi {-        };-        libftdi1 = callPackage ../development/libraries/libftdi/1.x.nix {-        };-        libgcrypt = callPackage ../development/libraries/libgcrypt {-        };-        libgcrypt_1_6 = lowPrio (callPackage ../development/libraries/libgcrypt/1.6.nix {-        });-        libgdiplus = callPackage ../development/libraries/libgdiplus {-        };-        libgksu = callPackage ../development/libraries/libgksu {-        };-        libgpgerror = callPackage ../development/libraries/libgpg-error {-        };-        libgphoto2 = callPackage ../development/libraries/libgphoto2 {-        };-        libgphoto2_4 = callPackage ../development/libraries/libgphoto2/2.4.nix {-        };-        libgpod = callPackage ../development/libraries/libgpod {-          inherit (pkgs.pythonPackages) mutagen;-        };-        libharu = callPackage ../development/libraries/libharu {-        };-        libical = callPackage ../development/libraries/libical {-        };-        libicns = callPackage ../development/libraries/libicns {-        };-        libimobiledevice = callPackage ../development/libraries/libimobiledevice {-        };-        libiodbc = callPackage ../development/libraries/libiodbc {-          useGTK = config.libiodbc.gtk or false;-        };-        libivykis = callPackage ../development/libraries/libivykis {-        };-        liblastfmSF = callPackage ../development/libraries/liblastfmSF {-        };-        liblastfm = callPackage ../development/libraries/liblastfm {-        };-        liblqr1 = callPackage ../development/libraries/liblqr-1 {-        };-        liblockfile = callPackage ../development/libraries/liblockfile {-        };-        liblogging = callPackage ../development/libraries/liblogging {-        };-        libmcrypt = callPackage ../development/libraries/libmcrypt {-        };-        libmhash = callPackage ../development/libraries/libmhash {-        };-        libmodbus = callPackage ../development/libraries/libmodbus {-        };-        libmtp = callPackage ../development/libraries/libmtp {-        };-        libmsgpack = callPackage ../development/libraries/libmsgpack {-        };-        libnatspec = callPackage ../development/libraries/libnatspec {-        };-        libnfc = callPackage ../development/libraries/libnfc {-        };-        libnfsidmap = callPackage ../development/libraries/libnfsidmap {-        };-        libnice = callPackage ../development/libraries/libnice {-        };-        liboping = callPackage ../development/libraries/liboping {-        };-        libplist = callPackage ../development/libraries/libplist {-        };-        libQGLViewer = callPackage ../development/libraries/libqglviewer {-        };-        libre = callPackage ../development/libraries/libre {-        };-        librem = callPackage ../development/libraries/librem {-        };-        libresample = callPackage ../development/libraries/libresample {-        };-        librevenge = callPackage ../development/libraries/librevenge {-        };-        librevisa = callPackage ../development/libraries/librevisa {-        };-        libsamplerate = callPackage ../development/libraries/libsamplerate {-        };-        libspectre = callPackage ../development/libraries/libspectre {-        };-        libgsf = callPackage ../development/libraries/libgsf {-        };-        libiconv = callPackage ../development/libraries/libiconv {-        };-        libiconvOrEmpty = if libiconvOrNull == null-          then [ ]-          else [ libiconv ];-        libiconvOrNull = if gcc.libc or null != null || stdenv.isGlibc-          then null-          else libiconv;-        libiconvOrLibc = if libiconvOrNull == null-          then gcc.libc-          else libiconv;-        libintlOrEmpty = stdenv.lib.optional (!stdenv.isLinux) gettext;-        libid3tag = callPackage ../development/libraries/libid3tag {-        };-        libidn = callPackage ../development/libraries/libidn {-        };-        libiec61883 = callPackage ../development/libraries/libiec61883 {-        };-        libinfinity = callPackage ../development/libraries/libinfinity {-          inherit (gnome) gtkdoc;-        };-        libiptcdata = callPackage ../development/libraries/libiptcdata {-        };-        libjpeg_original = callPackage ../development/libraries/libjpeg {-        };-        libjpeg_turbo = callPackage ../development/libraries/libjpeg-turbo {-        };-        libjpeg = if stdenv.isLinux-          then libjpeg_turbo-          else libjpeg_original;-        libjpeg62 = callPackage ../development/libraries/libjpeg/62.nix {-          libtool = libtool_1_5;-        };-        libjson_rpc_cpp = callPackage ../development/libraries/libjson-rpc-cpp {-        };-        libkate = callPackage ../development/libraries/libkate {-        };-        libksba = callPackage ../development/libraries/libksba {-        };-        libmad = callPackage ../development/libraries/libmad {-        };-        libmatchbox = callPackage ../development/libraries/libmatchbox {-        };-        libmatthew_java = callPackage ../development/libraries/java/libmatthew-java {-        };-        libmatroska = callPackage ../development/libraries/libmatroska {-        };-        libmcs = callPackage ../development/libraries/libmcs {-        };-        libmemcached = callPackage ../development/libraries/libmemcached {-        };-        libmicrohttpd = callPackage ../development/libraries/libmicrohttpd {-        };-        libmikmod = callPackage ../development/libraries/libmikmod {-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gccApple-            else stdenv;-        };-        libmilter = callPackage ../development/libraries/libmilter {-        };-        libmkv = callPackage ../development/libraries/libmkv {-        };-        libmms = callPackage ../development/libraries/libmms {-        };-        libmowgli = callPackage ../development/libraries/libmowgli {-        };-        libmng = callPackage ../development/libraries/libmng {-        };-        libmnl = callPackage ../development/libraries/libmnl {-        };-        libmodplug = callPackage ../development/libraries/libmodplug {-        };-        libmpcdec = callPackage ../development/libraries/libmpcdec {-        };-        libmp3splt = callPackage ../development/libraries/libmp3splt {-        };-        libmrss = callPackage ../development/libraries/libmrss {-        };-        libmsn = callPackage ../development/libraries/libmsn {-        };-        libmspack = callPackage ../development/libraries/libmspack {-        };-        libmusclecard = callPackage ../development/libraries/libmusclecard {-        };-        libmusicbrainz2 = callPackage ../development/libraries/libmusicbrainz/2.x.nix {-        };-        libmusicbrainz3 = callPackage ../development/libraries/libmusicbrainz {-        };-        libmusicbrainz5 = callPackage ../development/libraries/libmusicbrainz/5.x.nix {-        };-        libmusicbrainz = libmusicbrainz3;-        libmwaw = callPackage ../development/libraries/libmwaw {-        };-        libmwaw_02 = callPackage ../development/libraries/libmwaw/0.2.nix {-        };-        libmx = callPackage ../development/libraries/libmx {-        };-        libnet = callPackage ../development/libraries/libnet {-        };-        libnetfilter_conntrack = callPackage ../development/libraries/libnetfilter_conntrack {-        };-        libnetfilter_queue = callPackage ../development/libraries/libnetfilter_queue {-        };-        libnfnetlink = callPackage ../development/libraries/libnfnetlink {-        };-        libnftnl = callPackage ../development/libraries/libnftnl {-        };-        libnih = callPackage ../development/libraries/libnih {-        };-        libnova = callPackage ../development/libraries/libnova {-        };-        libnxml = callPackage ../development/libraries/libnxml {-        };-        libodfgen = callPackage ../development/libraries/libodfgen {-        };-        libofa = callPackage ../development/libraries/libofa {-        };-        libofx = callPackage ../development/libraries/libofx {-        };-        libogg = callPackage ../development/libraries/libogg {-        };-        liboggz = callPackage ../development/libraries/liboggz {-        };-        liboil = callPackage ../development/libraries/liboil {-        };-        liboop = callPackage ../development/libraries/liboop {-        };-        libopus = callPackage ../development/libraries/libopus {-        };-        libosinfo = callPackage ../development/libraries/libosinfo {-        };-        libosip = callPackage ../development/libraries/osip {-        };-        libosip_3 = callPackage ../development/libraries/osip/3.nix {-        };-        libotr = callPackage ../development/libraries/libotr {-          libgcrypt = libgcrypt_1_6;-        };-        libotr_3_2 = callPackage ../development/libraries/libotr/3.2.nix {-        };-        libp11 = callPackage ../development/libraries/libp11 {-        };-        libpar2 = callPackage ../development/libraries/libpar2 {-        };-        libpcap = callPackage ../development/libraries/libpcap {-        };-        libpipeline = callPackage ../development/libraries/libpipeline {-        };-        libpng = callPackage ../development/libraries/libpng {-        };-        libpng_apng = libpng.override {-          apngSupport = true;-        };-        libpng12 = callPackage ../development/libraries/libpng/12.nix {-        };-        libpng15 = callPackage ../development/libraries/libpng/15.nix {-        };-        libpaper = callPackage ../development/libraries/libpaper {-        };-        libproxy = callPackage ../development/libraries/libproxy {-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gcc-            else stdenv;-        };-        libpseudo = callPackage ../development/libraries/libpseudo {-        };-        libpwquality = callPackage ../development/libraries/libpwquality {-        };-        libqalculate = callPackage ../development/libraries/libqalculate {-        };-        librsvg = callPackage ../development/libraries/librsvg {-          gtk2 = null;-          gtk3 = null;-        };-        librsync = callPackage ../development/libraries/librsync {-        };-        libsearpc = callPackage ../development/libraries/libsearpc {-        };-        libsigcxx = callPackage ../development/libraries/libsigcxx {-        };-        libsigcxx12 = callPackage ../development/libraries/libsigcxx/1.2.nix {-        };-        libsigsegv = callPackage ../development/libraries/libsigsegv {-        };-        libsigsegv_25 = callPackage ../development/libraries/libsigsegv/2.5.nix {-        };-        libsndfile = callPackage ../development/libraries/libsndfile {-        };-        libsodium = callPackage ../development/libraries/libsodium {-        };-        libsoup = callPackage ../development/libraries/libsoup {-        };-        libssh = callPackage ../development/libraries/libssh {-        };-        libssh2 = callPackage ../development/libraries/libssh2 {-        };-        libstartup_notification = callPackage ../development/libraries/startup-notification {-        };-        libspatialindex = callPackage ../development/libraries/libspatialindex {-        };-        libspatialite = callPackage ../development/libraries/libspatialite {-        };-        libtar = callPackage ../development/libraries/libtar {-        };-        libtasn1 = callPackage ../development/libraries/libtasn1 {-        };-        libtheora = callPackage ../development/libraries/libtheora {-        };-        libtiff = callPackage ../development/libraries/libtiff {-        };-        libtiger = callPackage ../development/libraries/libtiger {-        };-        libtommath = callPackage ../development/libraries/libtommath {-        };-        libtorrentRasterbar = callPackage ../development/libraries/libtorrent-rasterbar {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        libtoxcore = callPackage ../development/libraries/libtoxcore {-        };-        libtsm = callPackage ../development/libraries/libtsm {-        };-        libtunepimp = callPackage ../development/libraries/libtunepimp {-        };-        libtxc_dxtn = callPackage ../development/libraries/libtxc_dxtn {-        };-        libtxc_dxtn_s2tc = callPackage ../development/libraries/libtxc_dxtn_s2tc {-        };-        libgeotiff = callPackage ../development/libraries/libgeotiff {-        };-        libunistring = callPackage ../development/libraries/libunistring {-        };-        libupnp = callPackage ../development/libraries/pupnp {-        };-        giflib = callPackage ../development/libraries/giflib {-        };-        giflib_4_1 = callPackage ../development/libraries/giflib/4.1.nix {-        };-        libungif = callPackage ../development/libraries/giflib/libungif.nix {-        };-        libunibreak = callPackage ../development/libraries/libunibreak {-        };-        libunique = callPackage ../development/libraries/libunique/default.nix {-        };-        liburcu = callPackage ../development/libraries/liburcu {-        };-        libusb = callPackage ../development/libraries/libusb {-        };-        libusb1 = callPackage ../development/libraries/libusb1 {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        libunwind = callPackage ../development/libraries/libunwind {-        };-        libuvVersions = callPackage ../development/libraries/libuv {-        };-        libv4l = lowPrio (v4l_utils.override {-          withQt4 = false;-        });-        libva = callPackage ../development/libraries/libva {-        };-        libvdpau = callPackage ../development/libraries/libvdpau {-        };-        libvirt = callPackage ../development/libraries/libvirt {-        };-        libvirt-glib = callPackage ../development/libraries/libvirt-glib {-        };-        libvisio = callPackage ../development/libraries/libvisio {-        };-        libvisual = callPackage ../development/libraries/libvisual {-        };-        libvncserver = callPackage ../development/libraries/libvncserver {-        };-        libviper = callPackage ../development/libraries/libviper {-        };-        libvpx = callPackage ../development/libraries/libvpx {-        };-        libvterm = callPackage ../development/libraries/libvterm {-        };-        libvorbis = callPackage ../development/libraries/libvorbis {-        };-        libwebp = callPackage ../development/libraries/libwebp {-        };-        libwmf = callPackage ../development/libraries/libwmf {-        };-        libwnck = libwnck2;-        libwnck2 = callPackage ../development/libraries/libwnck {-        };-        libwnck3 = callPackage ../development/libraries/libwnck/3.x.nix {-        };-        libwpd = callPackage ../development/libraries/libwpd {-        };-        libwpd_08 = callPackage ../development/libraries/libwpd/0.8.nix {-        };-        libwpg = callPackage ../development/libraries/libwpg {-        };-        libx86 = builderDefsPackage ../development/libraries/libx86 {-        };-        libxdg_basedir = callPackage ../development/libraries/libxdg-basedir {-        };-        libxkbcommon = callPackage ../development/libraries/libxkbcommon {-        };-        libxklavier = callPackage ../development/libraries/libxklavier {-        };-        libxmi = callPackage ../development/libraries/libxmi {-        };-        libxml2 = callPackage ../development/libraries/libxml2 {-          pythonSupport = false;-        };-        libxml2Python = lowPrio (libxml2.override {-          pythonSupport = true;-        });-        libxmlxx = callPackage ../development/libraries/libxmlxx {-        };-        libxmp = callPackage ../development/libraries/libxmp {-        };-        libxslt = callPackage ../development/libraries/libxslt {-        };-        libixp_for_wmii = lowPrio (import ../development/libraries/libixp_for_wmii {-          inherit fetchurl stdenv;-        });-        libyaml = callPackage ../development/libraries/libyaml {-        };-        libyamlcpp = callPackage ../development/libraries/libyaml-cpp {-        };-        libyamlcpp03 = callPackage ../development/libraries/libyaml-cpp/0.3.x.nix {-        };-        libyubikey = callPackage ../development/libraries/libyubikey {-        };-        libzip = callPackage ../development/libraries/libzip {-        };-        libzdb = callPackage ../development/libraries/libzdb {-        };-        libzrtpcpp = callPackage ../development/libraries/libzrtpcpp {-        };-        libzrtpcpp_1_6 = callPackage ../development/libraries/libzrtpcpp/1.6.nix {-          ccrtp = ccrtp_1_8;-        };-        libwacom = callPackage ../development/libraries/libwacom {-        };-        lightning = callPackage ../development/libraries/lightning {-        };-        lirc = callPackage ../development/libraries/lirc {-        };-        liquidwar = builderDefsPackage ../games/liquidwar {-          inherit (xlibs) xproto libX11-          libXrender;-          inherit gmp mesa libjpeg expat-          gettext perl SDL SDL_image-          SDL_mixer SDL_ttf curl sqlite-          libogg libvorbis libcaca csound-          cunit;-          guile = guile_1_8;-          libpng = libpng15;-        };-        log4cpp = callPackage ../development/libraries/log4cpp {-        };-        log4cxx = callPackage ../development/libraries/log4cxx {-        };-        log4cplus = callPackage ../development/libraries/log4cplus {-        };-        loudmouth = callPackage ../development/libraries/loudmouth {-        };-        lzo = callPackage ../development/libraries/lzo {-        };-        mdds_0_7_1 = callPackage ../development/libraries/mdds/0.7.1.nix {-        };-        mdds = callPackage ../development/libraries/mdds {-        };-        mediastreamer = callPackage ../development/libraries/mediastreamer {-        };-        menu-cache = callPackage ../development/libraries/menu-cache {-        };-        mesaSupported = lib.elem system lib.platforms.mesaPlatforms;-        mesaDarwinOr = alternative:-        if stdenv.isDarwin-          then callPackage ../development/libraries/mesa-darwin {-          }-          else alternative;-        mesa_noglu = mesaDarwinOr (callPackage ../development/libraries/mesa {-          grsecEnabled = true;-        });-        mesa_glu = mesaDarwinOr (callPackage ../development/libraries/mesa-glu {-        });-        mesa_drivers = mesaDarwinOr (let-          mo = mesa_noglu.override {-            grsecEnabled = config.grsecurity or false;-          };-          in mo.drivers);-        mesa = mesaDarwinOr (buildEnv {-          name = "mesa-${mesa_noglu.version}";-          paths = [ mesa_noglu mesa_glu ];-        });-        metaEnvironment = recurseIntoAttrs (let-          callPackage = newScope pkgs.metaEnvironment;-          in rec {-            sdfLibrary = callPackage ../development/libraries/sdf-library {-              aterm = aterm28;-            };-            toolbuslib = callPackage ../development/libraries/toolbuslib {-              aterm = aterm28;-              inherit (windows) w32api;-            };-            cLibrary = callPackage ../development/libraries/c-library {-              aterm = aterm28;-            };-            errorSupport = callPackage ../development/libraries/error-support {-              aterm = aterm28;-            };-            ptSupport = callPackage ../development/libraries/pt-support {-              aterm = aterm28;-            };-            ptableSupport = callPackage ../development/libraries/ptable-support {-              aterm = aterm28;-            };-            configSupport = callPackage ../development/libraries/config-support {-              aterm = aterm28;-            };-            asfSupport = callPackage ../development/libraries/asf-support {-              aterm = aterm28;-            };-            tideSupport = callPackage ../development/libraries/tide-support {-              aterm = aterm28;-            };-            rstoreSupport = callPackage ../development/libraries/rstore-support {-              aterm = aterm28;-            };-            sdfSupport = callPackage ../development/libraries/sdf-support {-              aterm = aterm28;-            };-            sglr = callPackage ../development/libraries/sglr {-              aterm = aterm28;-            };-            ascSupport = callPackage ../development/libraries/asc-support {-              aterm = aterm28;-            };-            pgen = callPackage ../development/libraries/pgen {-              aterm = aterm28;-            };-          });-        ming = callPackage ../development/libraries/ming {-        };-        minizip = callPackage ../development/libraries/minizip {-        };-        minmay = callPackage ../development/libraries/minmay {-        };-        miro = callPackage ../applications/video/miro {-          inherit (pythonPackages) pywebkitgtk-          pysqlite pycurl mutagen;-        };-        mkvtoolnix = callPackage ../applications/video/mkvtoolnix {-        };-        mlt-qt4 = callPackage ../development/libraries/mlt {-          qt = qt4;-          SDL = SDL_pulseaudio;-        };-        mlt-qt5 = callPackage ../development/libraries/mlt {-          qt = qt5;-          SDL = SDL_pulseaudio;-        };-        movit = callPackage ../development/libraries/movit {-        };-        mps = callPackage ../development/libraries/mps {-        };-        libmpeg2 = callPackage ../development/libraries/libmpeg2 {-        };-        mpeg2dec = libmpeg2;-        msilbc = callPackage ../development/libraries/msilbc {-        };-        mp4v2 = callPackage ../development/libraries/mp4v2 {-        };-        mpc = callPackage ../development/libraries/mpc {-        };-        mpich2 = callPackage ../development/libraries/mpich2 {-        };-        mtdev = callPackage ../development/libraries/mtdev {-        };-        mtpfs = callPackage ../tools/filesystems/mtpfs {-        };-        mu = callPackage ../tools/networking/mu {-          texinfo = texinfo4;-        };-        muparser = callPackage ../development/libraries/muparser {-        };-        mygpoclient = callPackage ../development/python-modules/mygpoclient {-        };-        mygui = callPackage ../development/libraries/mygui {-        };-        myguiSvn = callPackage ../development/libraries/mygui/svn.nix {-        };-        mysocketw = callPackage ../development/libraries/mysocketw {-        };-        mythes = callPackage ../development/libraries/mythes {-        };-        nanomsg = callPackage ../development/libraries/nanomsg {-        };-        ncurses = callPackage ../development/libraries/ncurses {-          unicode = system != "i686-cygwin";-        };-        neon = callPackage ../development/libraries/neon {-          compressionSupport = true;-          sslSupport = true;-        };-        nethack = builderDefsPackage (import ../games/nethack) {-          inherit ncurses flex bison;-        };-        nettle = callPackage ../development/libraries/nettle {-        };-        newt = callPackage ../development/libraries/newt {-        };-        nix-plugins = callPackage ../development/libraries/nix-plugins {-          nix = pkgs.nixUnstable;-        };-        nspr = callPackage ../development/libraries/nspr {-        };-        nss = lowPrio (callPackage ../development/libraries/nss {-        });-        nssTools = callPackage ../development/libraries/nss {-          includeTools = true;-        };-        ntrack = callPackage ../development/libraries/ntrack {-        };-        nvidia-texture-tools = callPackage ../development/libraries/nvidia-texture-tools {-        };-        ode = builderDefsPackage (import ../development/libraries/ode) {-        };-        ogre = callPackage ../development/libraries/ogre {-        };-        ogrepaged = callPackage ../development/libraries/ogrepaged {-        };-        oniguruma = callPackage ../development/libraries/oniguruma {-        };-        openal = callPackage ../development/libraries/openal {-        };-        openalSoft = callPackage ../development/libraries/openal-soft {-        };-        openbabel = callPackage ../development/libraries/openbabel {-        };-        opencascade = callPackage ../development/libraries/opencascade {-        };-        opencascade_6_5 = callPackage ../development/libraries/opencascade/6.5.nix {-          automake = automake111x;-          ftgl = ftgl212;-        };-        opencascade_oce = callPackage ../development/libraries/opencascade/oce.nix {-        };-        opencsg = callPackage ../development/libraries/opencsg {-        };-        openct = callPackage ../development/libraries/openct {-        };-        opencv = callPackage ../development/libraries/opencv {-        };-        opencv_2_1 = callPackage ../development/libraries/opencv/2.1.nix {-          libpng = libpng12;-        };-        openexr_ctl = callPackage ../development/libraries/openexr_ctl {-        };-        openexr = callPackage ../development/libraries/openexr {-        };-        openldap = callPackage ../development/libraries/openldap {-        };-        openlierox = callPackage ../games/openlierox {-        };-        libopensc_dnie = callPackage ../development/libraries/libopensc-dnie {-        };-        opencolorio = callPackage ../development/libraries/opencolorio {-        };-        ois = callPackage ../development/libraries/ois {-        };-        opal = callPackage ../development/libraries/opal {-        };-        openjpeg = callPackage ../development/libraries/openjpeg {-          lcms = lcms2;-        };-        openscenegraph = callPackage ../development/libraries/openscenegraph {-          giflib = giflib_4_1;-          ffmpeg = ffmpeg_0_10;-        };-        openspades = callPackage ../games/openspades {-        };-        libressl = callPackage ../development/libraries/libressl {-        };-        boringssl = callPackage ../development/libraries/boringssl {-        };-        openssl = callPackage ../development/libraries/openssl {-          fetchurl = fetchurlBoot;-          cryptodevHeaders = linuxPackages.cryptodev.override {-            fetchurl = fetchurlBoot;-            onlyHeaders = true;-          };-        };-        ortp = callPackage ../development/libraries/ortp {-          srtp = srtp_linphone;-        };-        p11_kit = callPackage ../development/libraries/p11-kit {-        };-        paperkey = callPackage ../tools/security/paperkey {-        };-        pangoxsl = callPackage ../development/libraries/pangoxsl {-        };-        pcl = callPackage ../development/libraries/pcl {-          vtk = vtkWithQt4;-        };-        pcre = callPackage ../development/libraries/pcre {-          unicodeSupport = config.pcre.unicode or true;-        };-        pdf2xml = callPackage ../development/libraries/pdf2xml {-        };-        phonon = callPackage ../development/libraries/phonon {-        };-        phonon_backend_gstreamer = callPackage ../development/libraries/phonon-backend-gstreamer {-        };-        phonon_backend_vlc = callPackage ../development/libraries/phonon-backend-vlc {-        };-        physfs = callPackage ../development/libraries/physfs {-        };-        pkcs11helper = callPackage ../development/libraries/pkcs11helper {-        };-        plib = callPackage ../development/libraries/plib {-        };-        pocketsphinx = callPackage ../development/libraries/pocketsphinx {-        };-        podofo = callPackage ../development/libraries/podofo {-        };-        polkit = callPackage ../development/libraries/polkit {-          spidermonkey = spidermonkey_185;-        };-        polkit_qt_1 = callPackage ../development/libraries/polkit-qt-1 {-        };-        policykit = callPackage ../development/libraries/policykit {-        };-        poppler = callPackage ../development/libraries/poppler {-          lcms = lcms2;-        };-        popplerQt4 = poppler.poppler_qt4;-        popt = callPackage ../development/libraries/popt {-        };-        portaudio = callPackage ../development/libraries/portaudio {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        portaudioSVN = callPackage ../development/libraries/portaudio/svn-head.nix {-        };-        portmidi = callPackage ../development/libraries/portmidi {-        };-        prison = callPackage ../development/libraries/prison {-        };-        proj = callPackage ../development/libraries/proj {-        };-        postgis = callPackage ../development/libraries/postgis {-        };-        protobuf = callPackage ../development/libraries/protobuf {-        };-        protobufc = callPackage ../development/libraries/protobufc {-        };-        pth = callPackage ../development/libraries/pth {-        };-        ptlib = callPackage ../development/libraries/ptlib {-        };-        re2 = callPackage ../development/libraries/re2 {-        };-        qca2 = callPackage ../development/libraries/qca2 {-        };-        qca2_ossl = callPackage ../development/libraries/qca2/ossl.nix {-        };-        qimageblitz = callPackage ../development/libraries/qimageblitz {-        };-        qjson = callPackage ../development/libraries/qjson {-        };-        qoauth = callPackage ../development/libraries/qoauth {-        };-        qt3 = callPackage ../development/libraries/qt-3 {-          openglSupport = mesaSupported;-          libpng = libpng12;-        };-        qt4 = pkgs.kde4.qt4;-        qt48 = callPackage ../development/libraries/qt-4.x/4.8 {-          mesa = mesa_noglu;-          inherit (pkgs.gnome) libgnomeui-          GConf gnome_vfs;-          cups = if stdenv.isLinux-            then cups-            else null;-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        qt48Full = qt48.override {-          docs = true;-          demos = true;-          examples = true;-          developerBuild = true;-        };-        qt4SDK = qtcreator.override {-          sdkBuild = true;-          qtLib = qt48Full;-        };-        qt53Full = qt53.override {-          buildDocs = true;-          buildExamples = true;-          buildTests = true;-          developerBuild = true;-        };-        qt53 = callPackage ../development/libraries/qt-5/qt-5.3.nix {-          mesa = mesa_noglu;-          cups = if stdenv.isLinux-            then cups-            else null;-          inherit (gnome) libgnomeui GConf-          gnome_vfs;-          bison = bison2;-        };-        qt5 = callPackage ../development/libraries/qt-5 {-          mesa = mesa_noglu;-          cups = if stdenv.isLinux-            then cups-            else null;-          inherit (gnome) libgnomeui GConf-          gnome_vfs;-          bison = bison2;-        };-        qt5Full = qt5.override {-          buildDocs = true;-          buildExamples = true;-          buildTests = true;-          developerBuild = true;-        };-        qt5SDK = qtcreator.override {-          sdkBuild = true;-          qtLib = qt5Full;-        };-        qtcreator = callPackage ../development/qtcreator {-          qtLib = qt48.override {-            developerBuild = true;-          };-        };-        qtscriptgenerator = callPackage ../development/libraries/qtscriptgenerator {-        };-        quesoglc = callPackage ../development/libraries/quesoglc {-        };-        qwt = callPackage ../development/libraries/qwt {-        };-        qwt6 = callPackage ../development/libraries/qwt/6.nix {-        };-        rabbitmq-c = callPackage ../development/libraries/rabbitmq-c {-        };-        rabbitmq-java-client = callPackage ../development/libraries/rabbitmq-java-client {-        };-        raul = callPackage ../development/libraries/audio/raul {-        };-        readline = readline6;-        readline4 = callPackage ../development/libraries/readline/readline4.nix {-        };-        readline5 = callPackage ../development/libraries/readline/readline5.nix {-        };-        readline6 = callPackage ../development/libraries/readline/readline6.nix {-        };-        readline63 = callPackage ../development/libraries/readline/readline6.3.nix {-        };-        librdf_raptor = callPackage ../development/libraries/librdf/raptor.nix {-        };-        librdf_raptor2 = callPackage ../development/libraries/librdf/raptor2.nix {-        };-        librdf_rasqal = callPackage ../development/libraries/librdf/rasqal.nix {-        };-        librdf_redland = callPackage ../development/libraries/librdf/redland.nix {-        };-        librdf = callPackage ../development/libraries/librdf {-        };-        lilv = callPackage ../development/libraries/audio/lilv {-        };-        lv2 = callPackage ../development/libraries/audio/lv2 {-        };-        lvtk = callPackage ../development/libraries/audio/lvtk {-        };-        qrupdate = callPackage ../development/libraries/qrupdate {-        };-        redland = pkgs.librdf_redland;-        rhino = callPackage ../development/libraries/java/rhino {-          javac = gcj;-          jvm = gcj;-        };-        rlog = callPackage ../development/libraries/rlog {-        };-        rubberband = callPackage ../development/libraries/rubberband {-          fftw = fftwSinglePrec;-          inherit (vamp) vampSDK;-        };-        sbc = callPackage ../development/libraries/sbc {-        };-        schroedinger = callPackage ../development/libraries/schroedinger {-        };-        SDL = callPackage ../development/libraries/SDL {-          openglSupport = mesaSupported;-          alsaSupport = !stdenv.isDarwin;-          x11Support = true;-          pulseaudioSupport = stdenv.isDarwin;-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        SDL_pulseaudio = SDL.override {-          pulseaudioSupport = true;-        };-        SDL_gfx = callPackage ../development/libraries/SDL_gfx {-        };-        SDL_image = callPackage ../development/libraries/SDL_image {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        SDL_mixer = callPackage ../development/libraries/SDL_mixer {-        };-        SDL_net = callPackage ../development/libraries/SDL_net {-        };-        SDL_sound = callPackage ../development/libraries/SDL_sound {-        };-        SDL_ttf = callPackage ../development/libraries/SDL_ttf {-        };-        SDL2 = callPackage ../development/libraries/SDL2 {-          openglSupport = mesaSupported;-          alsaSupport = true;-          x11Support = true;-          pulseaudioSupport = false;-        };-        SDL2_image = callPackage ../development/libraries/SDL2_image {-        };-        SDL2_mixer = callPackage ../development/libraries/SDL2_mixer {-        };-        SDL2_net = callPackage ../development/libraries/SDL2_net {-        };-        SDL2_gfx = callPackage ../development/libraries/SDL2_gfx {-        };-        serd = callPackage ../development/libraries/serd {-        };-        serf = callPackage ../development/libraries/serf {-        };-        silgraphite = callPackage ../development/libraries/silgraphite {-        };-        graphite2 = callPackage ../development/libraries/silgraphite/graphite2.nix {-        };-        simgear = callPackage ../development/libraries/simgear {-        };-        sfml_git = callPackage ../development/libraries/sfml {-        };-        skalibs = callPackage ../development/libraries/skalibs {-        };-        slang = callPackage ../development/libraries/slang {-        };-        slibGuile = callPackage ../development/libraries/slib {-          scheme = guile_1_8;-          texinfo = texinfo4;-        };-        smpeg = callPackage ../development/libraries/smpeg {-        };-        snack = callPackage ../development/libraries/snack {-        };-        snappy = callPackage ../development/libraries/snappy {-        };-        sodium = callPackage ../development/libraries/sodium {-        };-        sofia_sip = callPackage ../development/libraries/sofia-sip {-        };-        soprano = callPackage ../development/libraries/soprano {-        };-        soqt = callPackage ../development/libraries/soqt {-        };-        sord = callPackage ../development/libraries/sord {-        };-        spandsp = callPackage ../development/libraries/spandsp {-        };-        speechd = callPackage ../development/libraries/speechd {-        };-        speech_tools = callPackage ../development/libraries/speech-tools {-        };-        speex = callPackage ../development/libraries/speex {-        };-        sphinxbase = callPackage ../development/libraries/sphinxbase {-        };-        spice = callPackage ../development/libraries/spice {-          celt = celt_0_5_1;-          inherit (xlibs) libXrandr-          libXfixes libXext libXrender-          libXinerama;-          inherit (pythonPackages) pyparsing;-        };-        spice_gtk = callPackage ../development/libraries/spice-gtk {-        };-        spice_protocol = callPackage ../development/libraries/spice-protocol {-        };-        sratom = callPackage ../development/libraries/audio/sratom {-        };-        srtp = callPackage ../development/libraries/srtp {-        };-        srtp_linphone = callPackage ../development/libraries/srtp/linphone.nix {-        };-        sqlite = lowPrio (callPackage ../development/libraries/sqlite {-          readline = null;-          ncurses = null;-        });-        sqliteInteractive = appendToName "interactive" (sqlite.override {-          inherit readline ncurses;-        });-        sqlcipher = lowPrio (callPackage ../development/libraries/sqlcipher {-          readline = null;-          ncurses = null;-        });-        stfl = callPackage ../development/libraries/stfl {-          stdenv = if stdenv.isDarwin-            then overrideGCC stdenv gccApple-            else stdenv;-        };-        stlink = callPackage ../development/tools/misc/stlink {-        };-        steghide = callPackage ../tools/security/steghide {-        };-        stepmania = callPackage ../games/stepmania {-        };-        stlport = callPackage ../development/libraries/stlport {-        };-        strigi = callPackage ../development/libraries/strigi {-          clucene_core = clucene_core_2;-        };-        subtitleeditor = callPackage ../applications/video/subtitleeditor {-        };-        suil = callPackage ../development/libraries/audio/suil {-        };-        suitesparse = callPackage ../development/libraries/suitesparse {-        };-        sutils = callPackage ../tools/misc/sutils {-        };-        sword = callPackage ../development/libraries/sword {-        };-        szip = callPackage ../development/libraries/szip {-        };-        t1lib = callPackage ../development/libraries/t1lib {-        };-        taglib = callPackage ../development/libraries/taglib {-        };-        taglib_extras = callPackage ../development/libraries/taglib-extras {-        };-        talloc = callPackage ../development/libraries/talloc {-        };-        tclap = callPackage ../development/libraries/tclap {-        };-        tclgpg = callPackage ../development/libraries/tclgpg {-        };-        tcllib = callPackage ../development/libraries/tcllib {-        };-        tcltls = callPackage ../development/libraries/tcltls {-        };-        tdb = callPackage ../development/libraries/tdb {-        };-        tecla = callPackage ../development/libraries/tecla {-        };-        telepathy_glib = callPackage ../development/libraries/telepathy/glib {-        };-        telepathy_farstream = callPackage ../development/libraries/telepathy/farstream {-        };-        telepathy_qt = callPackage ../development/libraries/telepathy/qt {-        };-        thrift = callPackage ../development/libraries/thrift {-        };-        tinyxml = tinyxml2;-        tinyxml2 = callPackage ../development/libraries/tinyxml/2.6.2.nix {-        };-        tk = callPackage ../development/libraries/tk {-        };-        tnt = callPackage ../development/libraries/tnt {-        };-        tokyocabinet = callPackage ../development/libraries/tokyo-cabinet {-        };-        tokyotyrant = callPackage ../development/libraries/tokyo-tyrant {-        };-        tremor = callPackage ../development/libraries/tremor {-        };-        unicap = callPackage ../development/libraries/unicap {-        };-        tsocks = callPackage ../development/libraries/tsocks {-        };-        unixODBC = callPackage ../development/libraries/unixODBC {-        };-        unixODBCDrivers = recurseIntoAttrs (import ../development/libraries/unixODBCDrivers {-          inherit fetchurl stdenv unixODBC-          glibc libtool openssl zlib;-          inherit postgresql mysql sqlite;-        });-        urt = callPackage ../development/libraries/urt {-        };-        ustr = callPackage ../development/libraries/ustr {-        };-        usbredir = callPackage ../development/libraries/usbredir {-          libusb = libusb1;-        };-        ucommon = callPackage ../development/libraries/ucommon {-        };-        v8 = callPackage ../development/libraries/v8 {-          inherit (pythonPackages) gyp;-        };-        vaapiIntel = callPackage ../development/libraries/vaapi-intel {-        };-        vaapiVdpau = callPackage ../development/libraries/vaapi-vdpau {-        };-        vamp = callPackage ../development/libraries/audio/vamp {-        };-        vcdimager = callPackage ../development/libraries/vcdimager {-        };-        vigra = callPackage ../development/libraries/vigra {-          inherit (pkgs.pythonPackages) numpy;-        };-        vlock = callPackage ../misc/screensavers/vlock {-        };-        vmime = callPackage ../development/libraries/vmime {-        };-        vrpn = callPackage ../development/libraries/vrpn {-        };-        vtk = callPackage ../development/libraries/vtk {-        };-        vtkWithQt4 = vtk.override {-          qtLib = qt4;-        };-        vxl = callPackage ../development/libraries/vxl {-          libpng = libpng12;-        };-        wayland = callPackage ../development/libraries/wayland {-        };-        webkit = webkitgtk;-        webkitgtk = callPackage ../development/libraries/webkitgtk {-          harfbuzz = harfbuzz.override {-            withIcu = true;-          };-          gst-plugins-base = gst_all_1.gst-plugins-base;-        };-        webkitgtk2 = webkitgtk.override {-          withGtk2 = true;-          enableIntrospection = false;-        };-        wildmidi = callPackage ../development/libraries/wildmidi {-        };-        wvstreams = callPackage ../development/libraries/wvstreams {-        };-        wxGTK = wxGTK28;-        wxGTK28 = callPackage ../development/libraries/wxGTK-2.8 {-          inherit (gnome) GConf;-          withMesa = lib.elem system lib.platforms.mesaPlatforms;-        };-        wxGTK29 = callPackage ../development/libraries/wxGTK-2.9/default.nix {-          inherit (gnome) GConf;-          withMesa = lib.elem system lib.platforms.mesaPlatforms;-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        wxGTK30 = callPackage ../development/libraries/wxGTK-3.0/default.nix {-          inherit (gnome) GConf;-          withMesa = lib.elem system lib.platforms.mesaPlatforms;-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        wtk = callPackage ../development/libraries/wtk {-        };-        x264 = callPackage ../development/libraries/x264 {-        };-        xapian = callPackage ../development/libraries/xapian {-        };-        xapianBindings = callPackage ../development/libraries/xapian/bindings {-        };-        xapian10 = callPackage ../development/libraries/xapian/1.0.x.nix {-        };-        xapianBindings10 = callPackage ../development/libraries/xapian/bindings/1.0.x.nix {-        };-        Xaw3d = callPackage ../development/libraries/Xaw3d {-        };-        xbase = callPackage ../development/libraries/xbase {-        };-        xcb-util-cursor = callPackage ../development/libraries/xcb-util-cursor {-        };-        xdo = callPackage ../tools/misc/xdo {-        };-        xineLib = callPackage ../development/libraries/xine-lib {-          ffmpeg = ffmpeg_1;-        };-        xautolock = callPackage ../misc/screensavers/xautolock {-        };-        xercesc = callPackage ../development/libraries/xercesc {-        };-        xlibsWrapper = callPackage ../development/libraries/xlibs-wrapper {-          packages = [-            freetype-            fontconfig-            xlibs.xproto-            xlibs.libX11-            xlibs.libXt-            xlibs.libXft-            xlibs.libXext-            xlibs.libSM-            xlibs.libICE-            xlibs.xextproto-          ];-        };-        xmlrpc_c = callPackage ../development/libraries/xmlrpc-c {-        };-        xmlsec = callPackage ../development/libraries/xmlsec {-        };-        xvidcore = callPackage ../development/libraries/xvidcore {-        };-        xylib = callPackage ../development/libraries/xylib {-        };-        yajl = callPackage ../development/libraries/yajl {-        };-        zangband = builderDefsPackage (import ../games/zangband) {-          inherit ncurses flex bison-          autoconf automake m4 coreutils;-        };-        zeitgeist = callPackage ../development/libraries/zeitgeist {-        };-        zlib = callPackage ../development/libraries/zlib {-          fetchurl = fetchurlBoot;-        };-        zlibStatic = lowPrio (appendToName "static" (callPackage ../development/libraries/zlib {-          static = true;-        }));-        zeromq2 = callPackage ../development/libraries/zeromq/2.x.nix {-        };-        zeromq3 = callPackage ../development/libraries/zeromq/3.x.nix {-        };-        zeromq4 = callPackage ../development/libraries/zeromq/4.x.nix {-        };-        zziplib = callPackage ../development/libraries/zziplib {-        };-        atermjava = callPackage ../development/libraries/java/aterm {-          stdenv = overrideInStdenv stdenv [-            gnumake380-          ];-        };-        commonsFileUpload = callPackage ../development/libraries/java/jakarta-commons/file-upload {-        };-        fastjar = callPackage ../development/tools/java/fastjar {-        };-        httpunit = callPackage ../development/libraries/java/httpunit {-        };-        gwtdragdrop = callPackage ../development/libraries/java/gwt-dragdrop {-        };-        gwtwidgets = callPackage ../development/libraries/java/gwt-widgets {-        };-        jakartabcel = callPackage ../development/libraries/java/jakarta-bcel {-          regexp = jakartaregexp;-        };-        jakartaregexp = callPackage ../development/libraries/java/jakarta-regexp {-        };-        javaCup = callPackage ../development/libraries/java/cup {-        };-        javasvn = callPackage ../development/libraries/java/javasvn {-        };-        jclasslib = callPackage ../development/tools/java/jclasslib {-        };-        jdom = callPackage ../development/libraries/java/jdom {-        };-        jflex = callPackage ../development/libraries/java/jflex {-        };-        jjtraveler = callPackage ../development/libraries/java/jjtraveler {-          stdenv = overrideInStdenv stdenv [-            gnumake380-          ];-        };-        junit = callPackage ../development/libraries/java/junit {-          antBuild = releaseTools.antBuild;-        };-        junixsocket = callPackage ../development/libraries/java/junixsocket {-        };-        jzmq = callPackage ../development/libraries/java/jzmq {-        };-        lucene = callPackage ../development/libraries/java/lucene {-        };-        mockobjects = callPackage ../development/libraries/java/mockobjects {-        };-        saxon = callPackage ../development/libraries/java/saxon {-        };-        saxonb = callPackage ../development/libraries/java/saxon/default8.nix {-        };-        sharedobjects = callPackage ../development/libraries/java/shared-objects {-          stdenv = overrideInStdenv stdenv [-            gnumake380-          ];-        };-        smack = callPackage ../development/libraries/java/smack {-        };-        swt = callPackage ../development/libraries/java/swt {-          inherit (gnome) libsoup;-        };-        jquery_ui = callPackage ../development/libraries/javascript/jquery-ui {-        };-        yuicompressor = callPackage ../development/tools/yuicompressor {-        };-        asdf = callPackage ../development/lisp-modules/asdf {-          texLive = null;-        };-        clwrapperFunction = callPackage ../development/lisp-modules/clwrapper;-        wrapLisp = lisp:-        clwrapperFunction {-          inherit lisp;-        };-        lispPackagesFor = clwrapper:-        callPackage ../development/lisp-modules/lisp-packages.nix {-          inherit clwrapper;-        };-        lispPackagesClisp = lispPackagesFor (wrapLisp clisp);-        lispPackagesSBCL = lispPackagesFor (wrapLisp sbcl);-        lispPackages = recurseIntoAttrs lispPackagesSBCL;-        buildPerlPackage = import ../development/perl-modules/generic perl;-        perlPackages = recurseIntoAttrs (import ./perl-packages.nix {-          inherit pkgs;-          overrides = (config.perlPackageOverrides or p:-          { }) pkgs;-        });-        perl514Packages = import ./perl-packages.nix {-          pkgs = pkgs // {-            perl = perl514;-            buildPerlPackage = import ../development/perl-modules/generic perl514;-          };-          overrides = (config.perl514PackageOverrides or p:-          { }) pkgs;-        };-        perlXMLParser = perlPackages.XMLParser;-        ack = perlPackages.ack;-        perlArchiveCpio = perlPackages.ArchiveCpio;-        perlcritic = perlPackages.PerlCritic;-        planetary_annihilation = callPackage ../games/planetaryannihilation {-        };-        buildPythonPackage = pythonPackages.buildPythonPackage;-        python26Packages = import ./python-packages.nix {-          inherit pkgs;-          python = python26;-        };-        python27Packages = lib.hiPrioSet (recurseIntoAttrs (import ./python-packages.nix {-          inherit pkgs;-          python = python27;-        }));-        python32Packages = import ./python-packages.nix {-          inherit pkgs;-          python = python32;-        };-        python33Packages = recurseIntoAttrs (import ./python-packages.nix {-          inherit pkgs;-          python = python33;-        });-        python34Packages = recurseIntoAttrs (import ./python-packages.nix {-          inherit pkgs;-          python = python34;-        });-        pypyPackages = recurseIntoAttrs (import ./python-packages.nix {-          inherit pkgs;-          python = pypy;-        });-        foursuite = callPackage ../development/python-modules/4suite {-        };-        bsddb3 = callPackage ../development/python-modules/bsddb3 {-        };-        ecdsa = callPackage ../development/python-modules/ecdsa {-        };-        numeric = callPackage ../development/python-modules/numeric {-        };-        pil = pythonPackages.pil;-        psyco = callPackage ../development/python-modules/psyco {-        };-        pycairo = pythonPackages.pycairo;-        pycapnp = pythonPackages.pycapnp;-        pycrypto = pythonPackages.pycrypto;-        pycups = callPackage ../development/python-modules/pycups {-        };-        pyexiv2 = callPackage ../development/python-modules/pyexiv2 {-        };-        pygame = callPackage ../development/python-modules/pygame {-        };-        pygobject = pythonPackages.pygobject;-        pygobject3 = pythonPackages.pygobject3;-        pygtk = pythonPackages.pygtk;-        pyGtkGlade = pythonPackages.pyGtkGlade;-        pylint = callPackage ../development/python-modules/pylint {-        };-        pyopenssl = builderDefsPackage (import ../development/python-modules/pyopenssl) {-          inherit python openssl;-        };-        rhpl = callPackage ../development/python-modules/rhpl {-        };-        sip = callPackage ../development/python-modules/sip {-        };-        pyqt4 = callPackage ../development/python-modules/pyqt/4.x.nix {-          stdenv = if stdenv.isDarwin-            then clangStdenv-            else stdenv;-        };-        pysideApiextractor = callPackage ../development/python-modules/pyside/apiextractor.nix {-        };-        pysideGeneratorrunner = callPackage ../development/python-modules/pyside/generatorrunner.nix {-        };-        pyside = callPackage ../development/python-modules/pyside {-        };-        pysideTools = callPackage ../development/python-modules/pyside/tools.nix {-        };-        pysideShiboken = callPackage ../development/python-modules/pyside/shiboken.nix {-        };-        pyx = callPackage ../development/python-modules/pyx {-        };-        pyxml = callPackage ../development/python-modules/pyxml {-        };-        rbtools = callPackage ../development/python-modules/rbtools {-        };-        setuptools = pythonPackages.setuptools;-        slowaes = callPackage ../development/python-modules/slowaes {-        };-        wxPython = pythonPackages.wxPython;-        wxPython28 = pythonPackages.wxPython28;-        twisted = pythonPackages.twisted;-        ZopeInterface = pythonPackages.zope_interface;-        R = callPackage ../applications/science/math/R {-          inherit (xlibs) libX11 libXt;-          texLive = texLiveAggregationFun {-            paths = [-              texLive-              texLiveExtra-            ];-          };-          withRecommendedPackages = false;-        };-        rWrapper = callPackage ../development/r-modules/wrapper.nix {-          recommendedPackages = with rPackages; [-            MASS-            lattice-            Matrix-            nlme-            survival-            boot-            cluster-            codetools-            foreign-            KernSmooth-            rpart-            class-            nnet-            spatial-            mgcv-          ];-          packages = [ ];-        };-        rPackages = import ../development/r-modules/cran-packages.nix {-          inherit pkgs;-          overrides = (config.rPackageOverrides or p:-          { }) pkgs;-        };-        rdf4store = callPackage ../servers/http/4store {-        };-        apacheHttpd = pkgs.apacheHttpd_2_2;-        apacheHttpd_2_2 = callPackage ../servers/http/apache-httpd/2.2.nix {-          sslSupport = true;-        };-        apacheHttpd_2_4 = lowPrio (callPackage ../servers/http/apache-httpd/2.4.nix {-          sslSupport = true;-        });-        apcupsd = callPackage ../servers/apcupsd {-        };-        sabnzbd = callPackage ../servers/sabnzbd {-        };-        bind = callPackage ../servers/dns/bind {-        };-        bird = callPackage ../servers/bird {-        };-        couchdb = callPackage ../servers/http/couchdb {-          spidermonkey = spidermonkey_185;-          python = python27;-          sphinx = python27Packages.sphinx;-          erlang = erlangR16;-        };-        dico = callPackage ../servers/dico {-        };-        dict = callPackage ../servers/dict {-          libmaa = callPackage ../servers/dict/libmaa.nix {-          };-        };-        dictdDBs = recurseIntoAttrs (import ../servers/dict/dictd-db.nix {-          inherit builderDefs;-        });-        dictDBCollector = import ../servers/dict/dictd-db-collector.nix {-          inherit stdenv lib dict;-        };-        dictdWiktionary = callPackage ../servers/dict/dictd-wiktionary.nix {-        };-        dictdWordnet = callPackage ../servers/dict/dictd-wordnet.nix {-        };-        diod = callPackage ../servers/diod {-        };-        dovecot = dovecot21;-        dovecot21 = callPackage ../servers/mail/dovecot {-        };-        dovecot22 = callPackage ../servers/mail/dovecot/2.2.x.nix {-        };-        dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole {-        };-        etcd = callPackage ../servers/etcd {-        };-        ejabberd = callPackage ../servers/xmpp/ejabberd {-          erlang = erlangR16;-        };-        elasticmq = callPackage ../servers/elasticmq {-        };-        etcdctl = callPackage ../development/tools/etcdctl {-        };-        fcgiwrap = callPackage ../servers/fcgiwrap {-        };-        felix = callPackage ../servers/felix {-        };-        felix_remoteshell = callPackage ../servers/felix/remoteshell.nix {-        };-        fingerd_bsd = callPackage ../servers/fingerd/bsd-fingerd {-        };-        firebird = callPackage ../servers/firebird {-          icu = null;-        };-        firebirdSuper = callPackage ../servers/firebird {-          superServer = true;-        };-        fleet = callPackage ../servers/fleet {-        };-        freepops = callPackage ../servers/mail/freepops {-        };-        freeswitch = callPackage ../servers/sip/freeswitch {-        };-        ghostOne = callPackage ../servers/games/ghost-one {-          boost = boost144.override {-            taggedLayout = true;-          };-        };-        ircdHybrid = callPackage ../servers/irc/ircd-hybrid {-        };-        jboss = callPackage ../servers/http/jboss {-        };-        jboss_mysql_jdbc = callPackage ../servers/http/jboss/jdbc/mysql {-        };-        jetty = callPackage ../servers/http/jetty {-        };-        jetty61 = callPackage ../servers/http/jetty/6.1 {-        };-        joseki = callPackage ../servers/http/joseki {-        };-        leafnode = callPackage ../servers/news/leafnode {-        };-        lighttpd = callPackage ../servers/http/lighttpd {-        };-        mailman = callPackage ../servers/mail/mailman {-        };-        mediatomb = callPackage ../servers/mediatomb {-        };-        memcached = callPackage ../servers/memcached {-        };-        mod_dnssd = callPackage ../servers/http/apache-modules/mod_dnssd/default.nix {-        };-        mod_evasive = callPackage ../servers/http/apache-modules/mod_evasive {-        };-        mod_python = callPackage ../servers/http/apache-modules/mod_python {-        };-        mod_fastcgi = callPackage ../servers/http/apache-modules/mod_fastcgi {-        };-        mod_wsgi = callPackage ../servers/http/apache-modules/mod_wsgi {-        };-        mpd = callPackage ../servers/mpd {-          aacSupport = config.mpd.aacSupport or true;-          ffmpegSupport = config.mpd.ffmpegSupport or true;-        };-        mpd_clientlib = callPackage ../servers/mpd/clientlib.nix {-        };-        miniHttpd = callPackage ../servers/http/mini-httpd {-        };-        mlmmj = callPackage ../servers/mail/mlmmj {-        };-        myserver = callPackage ../servers/http/myserver {-        };-        nginx = callPackage ../servers/http/nginx {-          rtmp = true;-          fullWebDAV = true;-          syslog = true;-          moreheaders = true;-        };-        ngircd = callPackage ../servers/irc/ngircd {-        };-        nix-binary-cache = callPackage ../servers/http/nix-binary-cache {-        };-        nsd = callPackage ../servers/dns/nsd {-        };-        nsq = callPackage ../servers/nsq {-        };-        openresty = callPackage ../servers/http/openresty {-        };-        opensmtpd = callPackage ../servers/mail/opensmtpd {-        };-        petidomo = callPackage ../servers/mail/petidomo {-        };-        popa3d = callPackage ../servers/mail/popa3d {-        };-        postfix = callPackage ../servers/mail/postfix {-        };-        postfix211 = callPackage ../servers/mail/postfix/2.11.nix {-        };-        pulseaudio = callPackage ../servers/pulseaudio {-          gconf = gnome.GConf;-          bluez = null;-          avahi = null;-        };-        pulseaudioFull = pulseaudio.override {-          bluez = bluez5;-          avahi = avahi;-          jackaudioSupport = true;-          x11Support = true;-        };-        tomcat_connectors = callPackage ../servers/http/apache-modules/tomcat-connectors {-        };-        pies = callPackage ../servers/pies {-        };-        portmap = callPackage ../servers/portmap {-        };-        rpcbind = callPackage ../servers/rpcbind {-        };-        mariadb = callPackage ../servers/sql/mariadb {-        };-        mongodb = callPackage ../servers/nosql/mongodb {-        };-        riak = callPackage ../servers/nosql/riak/1.3.1.nix {-        };-        influxdb = callPackage ../servers/nosql/influxdb {-        };-        mysql51 = import ../servers/sql/mysql/5.1.x.nix {-          inherit fetchurl ncurses zlib-          perl openssl stdenv;-          ps = procps;-        };-        mysql55 = callPackage ../servers/sql/mysql/5.5.x.nix {-        };-        mysql = mysql51;-        mysql_jdbc = callPackage ../servers/sql/mysql/jdbc {-        };-        nagios = callPackage ../servers/monitoring/nagios {-        };-        munin = callPackage ../servers/monitoring/munin {-        };-        nagiosPluginsOfficial = callPackage ../servers/monitoring/nagios/plugins/official-2.x.nix {-        };-        neo4j = callPackage ../servers/nosql/neo4j {-        };-        net_snmp = callPackage ../servers/monitoring/net-snmp {-        };-        riemann = callPackage ../servers/monitoring/riemann {-        };-        oidentd = callPackage ../servers/identd/oidentd {-        };-        openfire = callPackage ../servers/xmpp/openfire {-        };-        oracleXE = callPackage ../servers/sql/oracle-xe {-        };-        OVMF = callPackage ../applications/virtualization/OVMF {-        };-        postgresql = postgresql92;-        postgresql84 = callPackage ../servers/sql/postgresql/8.4.x.nix {-        };-        postgresql90 = callPackage ../servers/sql/postgresql/9.0.x.nix {-        };-        postgresql91 = callPackage ../servers/sql/postgresql/9.1.x.nix {-        };-        postgresql92 = callPackage ../servers/sql/postgresql/9.2.x.nix {-        };-        postgresql93 = callPackage ../servers/sql/postgresql/9.3.x.nix {-        };-        postgresql_jdbc = callPackage ../servers/sql/postgresql/jdbc {-        };-        psqlodbc = callPackage ../servers/sql/postgresql/psqlodbc {-        };-        pyIRCt = builderDefsPackage (import ../servers/xmpp/pyIRCt) {-          inherit xmpppy pythonIRClib-          python makeWrapper;-        };-        pyMAILt = builderDefsPackage (import ../servers/xmpp/pyMAILt) {-          inherit xmpppy python-          makeWrapper fetchcvs;-        };-        qpid-cpp = callPackage ../servers/amqp/qpid-cpp {-        };-        rabbitmq_server = callPackage ../servers/amqp/rabbitmq-server {-        };-        radius = callPackage ../servers/radius {-        };-        redis = callPackage ../servers/nosql/redis {-        };-        redstore = callPackage ../servers/http/redstore {-        };-        restund = callPackage ../servers/restund {-        };-        rethinkdb = callPackage ../servers/nosql/rethinkdb {-        };-        rippled = callPackage ../servers/rippled {-        };-        s6 = callPackage ../servers/s6 {-        };-        spamassassin = callPackage ../servers/mail/spamassassin {-          inherit (perlPackages) HTMLParser-          NetDNS NetAddrIP DBFile HTTPDate-          MailDKIM LWP IOSocketSSL;-        };-        samba = callPackage ../servers/samba {-        };-        samba_light = lowPrio (callPackage ../servers/samba {-          pam = null;-          fam = null;-          cups = null;-          acl = null;-          openldap = null;-          libunwind = null;-        });-        serfdom = callPackage ../servers/serfdom {-        };-        seyren = callPackage ../servers/monitoring/seyren {-        };-        shishi = callPackage ../servers/shishi {-        };-        sipwitch = callPackage ../servers/sip/sipwitch {-        };-        spawn_fcgi = callPackage ../servers/http/spawn-fcgi {-        };-        squids = recurseIntoAttrs (import ../servers/squid/squids.nix {-          inherit fetchurl stdenv perl lib-          composableDerivation openldap-          pam db cyrus_sasl kerberos-          libcap expat libxml2 libtool-          openssl;-        });-        squid = squids.squid31;-        thttpd = callPackage ../servers/http/thttpd {-        };-        storm = callPackage ../servers/computing/storm {-        };-        tomcat5 = callPackage ../servers/http/tomcat/5.0.nix {-        };-        tomcat6 = callPackage ../servers/http/tomcat/6.0.nix {-        };-        tomcat_mysql_jdbc = callPackage ../servers/http/tomcat/jdbc/mysql {-        };-        axis2 = callPackage ../servers/http/tomcat/axis2 {-        };-        unifi = callPackage ../servers/unifi {-        };-        virtuoso6 = callPackage ../servers/sql/virtuoso/6.x.nix {-        };-        virtuoso7 = callPackage ../servers/sql/virtuoso/7.x.nix {-        };-        virtuoso = virtuoso6;-        vsftpd = callPackage ../servers/ftp/vsftpd {-        };-        winstone = callPackage ../servers/http/winstone {-        };-        xinetd = callPackage ../servers/xinetd {-        };-        xquartz = callPackage ../servers/x11/xquartz {-        };-        quartz-wm = callPackage ../servers/x11/quartz-wm {-          stdenv = clangStdenv;-        };-        xorg = recurseIntoAttrs (import ../servers/x11/xorg/default.nix {-          inherit clangStdenv fetchurl-          fetchgit fetchpatch stdenv-          pkgconfig intltool freetype-          fontconfig libxslt expat libpng-          zlib perl mesa_drivers-          spice_protocol dbus libuuid-          openssl gperf m4 autoconf-          automake libtool xmlto asciidoc-          flex bison python mtdev pixman;-          mesa = mesa_noglu;-          udev = if stdenv.isLinux-            then udev-            else null;-          libdrm = if stdenv.isLinux-            then libdrm-            else null;-        } // {-          xf86videointel-testing = callPackage ../servers/x11/xorg/xf86-video-intel-testing.nix {-          };-        });-        xorgReplacements = callPackage ../servers/x11/xorg/replacements.nix {-        };-        xorgVideoUnichrome = callPackage ../servers/x11/xorg/unichrome/default.nix {-        };-        yaws = callPackage ../servers/http/yaws {-        };-        zabbix = recurseIntoAttrs (import ../servers/monitoring/zabbix {-          inherit fetchurl stdenv-          pkgconfig postgresql curl-          openssl zlib;-        });-        zabbix20 = callPackage ../servers/monitoring/zabbix/2.0.nix {-        };-        zabbix22 = callPackage ../servers/monitoring/zabbix/2.2.nix {-        };-        afuse = callPackage ../os-specific/linux/afuse {-        };-        amdUcode = callPackage ../os-specific/linux/microcode/amd.nix {-        };-        autofs5 = callPackage ../os-specific/linux/autofs/autofs-v5.nix {-        };-        _915resolution = callPackage ../os-specific/linux/915resolution {-        };-        nfsUtils = callPackage ../os-specific/linux/nfs-utils {-        };-        acpi = callPackage ../os-specific/linux/acpi {-        };-        acpid = callPackage ../os-specific/linux/acpid {-        };-        acpitool = callPackage ../os-specific/linux/acpitool {-        };-        alienfx = callPackage ../os-specific/linux/alienfx {-        };-        alsaLib = callPackage ../os-specific/linux/alsa-lib {-        };-        alsaPlugins = callPackage ../os-specific/linux/alsa-plugins {-          jack2 = null;-        };-        alsaPluginWrapper = callPackage ../os-specific/linux/alsa-plugins/wrapper.nix {-        };-        alsaUtils = callPackage ../os-specific/linux/alsa-utils {-        };-        alsaOss = callPackage ../os-specific/linux/alsa-oss {-        };-        microcode2ucode = callPackage ../os-specific/linux/microcode/converter.nix {-        };-        microcodeIntel = callPackage ../os-specific/linux/microcode/intel.nix {-        };-        apparmor = callPackage ../os-specific/linux/apparmor {-          inherit (perlPackages) LocaleGettext-          TermReadKey RpcXML;-          bison = bison2;-        };-        atop = callPackage ../os-specific/linux/atop {-        };-        audit = callPackage ../os-specific/linux/audit {-        };-        b43Firmware_5_1_138 = callPackage ../os-specific/linux/firmware/b43-firmware/5.1.138.nix {-        };-        b43FirmwareCutter = callPackage ../os-specific/linux/firmware/b43-firmware-cutter {-        };-        batctl = callPackage ../os-specific/linux/batman-adv/batctl.nix {-        };-        bluez4 = callPackage ../os-specific/linux/bluez {-          pygobject = pygobject3;-        };-        bluez5 = lowPrio (callPackage ../os-specific/linux/bluez/bluez5.nix {-        });-        bluez = bluez4;-        inherit (pythonPackages) bedup;-        beret = callPackage ../games/beret {-        };-        bridge_utils = callPackage ../os-specific/linux/bridge-utils {-        };-        busybox = callPackage ../os-specific/linux/busybox {-        };-        checkpolicy = callPackage ../os-specific/linux/checkpolicy {-        };-        checksec = callPackage ../os-specific/linux/checksec {-        };-        cifs_utils = callPackage ../os-specific/linux/cifs-utils {-        };-        conky = callPackage ../os-specific/linux/conky {-          mpdSupport = config.conky.mpdSupport or true;-          x11Support = config.conky.x11Support or false;-          xdamage = config.conky.xdamage or false;-          wireless = config.conky.wireless or false;-          luaSupport = config.conky.luaSupport or false;-          rss = config.conky.rss or false;-          weatherMetar = config.conky.weatherMetar or false;-          weatherXoap = config.conky.weatherXoap or false;-        };-        cpufrequtils = callPackage ../os-specific/linux/cpufrequtils {-        };-        cryopid = callPackage ../os-specific/linux/cryopid {-        };-        criu = callPackage ../os-specific/linux/criu {-        };-        cryptsetup = callPackage ../os-specific/linux/cryptsetup {-        };-        cramfsswap = callPackage ../os-specific/linux/cramfsswap {-        };-        darwin = rec {-          cctools = forceNativeDrv (callPackage ../os-specific/darwin/cctools-port {-            cross = assert crossSystem != null; crossSystem;-            inherit maloader;-            xctoolchain = xcode.toolchain;-          });-          maloader = callPackage ../os-specific/darwin/maloader {-            inherit opencflite;-          };-          opencflite = callPackage ../os-specific/darwin/opencflite {-          };-          xcode = callPackage ../os-specific/darwin/xcode {-          };-        };-        devicemapper = lvm2;-        disk_indicator = callPackage ../os-specific/linux/disk-indicator {-        };-        dmidecode = callPackage ../os-specific/linux/dmidecode {-        };-        dmtcp = callPackage ../os-specific/linux/dmtcp {-        };-        dietlibc = callPackage ../os-specific/linux/dietlibc {-        };-        directvnc = builderDefsPackage ../os-specific/linux/directvnc {-          inherit libjpeg pkgconfig zlib-          directfb;-          inherit (xlibs) xproto;-        };-        dmraid = callPackage ../os-specific/linux/dmraid {-        };-        drbd = callPackage ../os-specific/linux/drbd {-        };-        dstat = callPackage ../os-specific/linux/dstat {-          python = pythonFull;-        };-        libossp_uuid = callPackage ../development/libraries/libossp-uuid {-        };-        libuuid = if crossSystem != null && crossSystem.config == "i586-pc-gnu"-          then utillinux // {-            crossDrv = lib.overrideDerivation utillinux.crossDrv (args:-            {-              configureFlags = args.configureFlags + " --disable-libblkid --disable-mount --disable-libmount" + " --disable-fsck --enable-static --disable-partx";-              doCheck = false;-              CPPFLAGS = lib.concatStringsSep " " (map (v:-              "-D${v}=4096") [-                "PATH_MAX"-                "MAXPATHLEN"-                "MAXHOSTNAMELEN"-              ]);-            });-          }-          else if stdenv.isLinux-            then utillinux-            else null;-        e3cfsprogs = callPackage ../os-specific/linux/e3cfsprogs {-        };-        ebtables = callPackage ../os-specific/linux/ebtables {-        };-        eject = utillinux;-        ffado = callPackage ../os-specific/linux/ffado {-        };-        fbterm = callPackage ../os-specific/linux/fbterm {-        };-        firejail = callPackage ../os-specific/linux/firejail {-        };-        fuse = callPackage ../os-specific/linux/fuse {-        };-        fxload = callPackage ../os-specific/linux/fxload {-        };-        gfxtablet = callPackage ../os-specific/linux/gfxtablet {-        };-        gpm = callPackage ../servers/gpm {-        };-        gradm = callPackage ../os-specific/linux/gradm {-          flex = flex_2_5_35;-        };-        hdparm = callPackage ../os-specific/linux/hdparm {-        };-        hibernate = callPackage ../os-specific/linux/hibernate {-        };-        hostapd = callPackage ../os-specific/linux/hostapd {-        };-        htop = if stdenv.isLinux-          then callPackage ../os-specific/linux/htop {-          }-          else if stdenv.isDarwin-            then callPackage ../os-specific/darwin/htop {-            }-            else null;-        gnu = recurseIntoAttrs (callPackage ../os-specific/gnu {-          inherit platform crossSystem;-        });-        hwdata = callPackage ../os-specific/linux/hwdata {-        };-        i7z = callPackage ../os-specific/linux/i7z {-        };-        ifplugd = callPackage ../os-specific/linux/ifplugd {-        };-        iomelt = callPackage ../os-specific/linux/iomelt {-        };-        iotop = callPackage ../os-specific/linux/iotop {-        };-        iproute = callPackage ../os-specific/linux/iproute {-        };-        iputils = callPackage ../os-specific/linux/iputils {-          sp = spCompat;-          inherit (perlPackages) SGMLSpm;-        };-        iptables = callPackage ../os-specific/linux/iptables {-        };-        iw = callPackage ../os-specific/linux/iw {-        };-        jujuutils = callPackage ../os-specific/linux/jujuutils {-        };-        kbd = callPackage ../os-specific/linux/kbd {-        };-        kmscon = callPackage ../os-specific/linux/kmscon {-        };-        latencytop = callPackage ../os-specific/linux/latencytop {-        };-        ldm = callPackage ../os-specific/linux/ldm {-        };-        libaio = callPackage ../os-specific/linux/libaio {-        };-        libatasmart = callPackage ../os-specific/linux/libatasmart {-        };-        libcgroup = callPackage ../os-specific/linux/libcgroup {-        };-        libnl = callPackage ../os-specific/linux/libnl {-        };-        libnl_3_2_19 = callPackage ../os-specific/linux/libnl/3.2.19.nix {-        };-        linuxConsoleTools = callPackage ../os-specific/linux/consoletools {-        };-        linuxHeaders = linuxHeaders_3_7;-        linuxHeaders24Cross = forceNativeDrv (import ../os-specific/linux/kernel-headers/2.4.nix {-          inherit stdenv fetchurl perl;-          cross = assert crossSystem != null; crossSystem;-        });-        linuxHeaders26Cross = forceNativeDrv (import ../os-specific/linux/kernel-headers/2.6.32.nix {-          inherit stdenv fetchurl perl;-          cross = assert crossSystem != null; crossSystem;-        });-        linuxHeaders_3_7 = callPackage ../os-specific/linux/kernel-headers/3.7.nix {-        };-        linuxHeaders_3_14 = callPackage ../os-specific/linux/kernel-headers/3.14.nix {-        };-        linuxHeadersCrossChooser = ver:-        if ver == "2.4"-          then linuxHeaders24Cross-          else if ver == "2.6"-            then linuxHeaders26Cross-            else throw "Unknown linux kernel version";-        linuxHeadersCross = assert crossSystem != null; linuxHeadersCrossChooser crossSystem.platform.kernelMajor;-        kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix {-        };-        linux_3_2 = makeOverridable (import ../os-specific/linux/kernel/linux-3.2.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = [ ];-        };-        linux_3_2_xen = lowPrio (linux_3_2.override {-          extraConfig = ''XEN_DOM0 y'';-        });-        linux_3_4 = makeOverridable (import ../os-specific/linux/kernel/linux-3.4.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-          ];-        };-        linux_3_6_rpi = makeOverridable (import ../os-specific/linux/kernel/linux-rpi-3.6.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-        };-        linux_3_10 = makeOverridable (import ../os-specific/linux/kernel/linux-3.10.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        linux_3_12 = makeOverridable (import ../os-specific/linux/kernel/linux-3.12.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        linux_3_14 = makeOverridable (import ../os-specific/linux/kernel/linux-3.14.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        linux_3_15 = makeOverridable (import ../os-specific/linux/kernel/linux-3.15.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        linux_3_16 = makeOverridable (import ../os-specific/linux/kernel/linux-3.16.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        linux_testing = makeOverridable (import ../os-specific/linux/kernel/linux-testing.nix) {-          inherit fetchurl stdenv perl-          buildLinux;-          kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips") [-            kernelPatches.mips_fpureg_emu-            kernelPatches.mips_fpu_sigill-            kernelPatches.mips_ext3_n32-          ];-        };-        grFlavors = import ../build-support/grsecurity/flavors.nix;-        mkGrsecurity = opts:-        import ../build-support/grsecurity {-          grsecOptions = opts;-          inherit pkgs lib;-        };-        grKernel = opts:-        (mkGrsecurity opts).grsecKernel;-        grPackage = opts:-        recurseIntoAttrs (mkGrsecurity opts).grsecPackage;-        linux_grsec_stable_desktop = grKernel grFlavors.linux_grsec_stable_desktop;-        linux_grsec_stable_server = grKernel grFlavors.linux_grsec_stable_server;-        linux_grsec_stable_server_xen = grKernel grFlavors.linux_grsec_stable_server_xen;-        linux_grsec_testing_desktop = grKernel grFlavors.linux_grsec_testing_desktop;-        linux_grsec_testing_server = grKernel grFlavors.linux_grsec_testing_server;-        linux_grsec_testing_server_xen = grKernel grFlavors.linux_grsec_testing_server_xen;-        linuxPackagesFor = kernel: self:-        let-          callPackage = newScope self;-          in {-            inherit kernel;-            acpi_call = callPackage ../os-specific/linux/acpi-call {-            };-            batman_adv = callPackage ../os-specific/linux/batman-adv {-            };-            bbswitch = callPackage ../os-specific/linux/bbswitch {-            };-            ati_drivers_x11 = callPackage ../os-specific/linux/ati-drivers {-            };-            blcr = callPackage ../os-specific/linux/blcr {-            };-            cryptodev = callPackage ../os-specific/linux/cryptodev {-            };-            cpupower = callPackage ../os-specific/linux/cpupower {-            };-            e1000e = callPackage ../os-specific/linux/e1000e {-            };-            v4l2loopback = callPackage ../os-specific/linux/v4l2loopback {-            };-            frandom = callPackage ../os-specific/linux/frandom {-            };-            ktap = callPackage ../os-specific/linux/ktap {-            };-            lttng-modules = callPackage ../os-specific/linux/lttng-modules {-            };-            broadcom_sta = callPackage ../os-specific/linux/broadcom-sta/default.nix {-            };-            nvidiabl = callPackage ../os-specific/linux/nvidiabl {-            };-            nvidia_x11 = callPackage ../os-specific/linux/nvidia-x11 {-            };-            nvidia_x11_legacy173 = callPackage ../os-specific/linux/nvidia-x11/legacy173.nix {-            };-            nvidia_x11_legacy304 = callPackage ../os-specific/linux/nvidia-x11/legacy304.nix {-            };-            openafsClient = callPackage ../servers/openafs-client {-            };-            openiscsi = callPackage ../os-specific/linux/open-iscsi {-            };-            wis_go7007 = callPackage ../os-specific/linux/wis-go7007 {-            };-            kernelHeaders = callPackage ../os-specific/linux/kernel-headers {-            };-            klibc = callPackage ../os-specific/linux/klibc {-            };-            klibcShrunk = lowPrio (callPackage ../os-specific/linux/klibc/shrunk.nix {-            });-            ndiswrapper = callPackage ../os-specific/linux/ndiswrapper {-            };-            netatop = callPackage ../os-specific/linux/netatop {-            };-            perf = callPackage ../os-specific/linux/kernel/perf.nix {-            };-            psmouse_alps = callPackage ../os-specific/linux/psmouse-alps {-            };-            spl = callPackage ../os-specific/linux/spl {-            };-            spl_git = callPackage ../os-specific/linux/spl/git.nix {-            };-            sysdig = callPackage ../os-specific/linux/sysdig {-            };-            tp_smapi = callPackage ../os-specific/linux/tp_smapi {-            };-            v86d = callPackage ../os-specific/linux/v86d {-            };-            virtualbox = callPackage ../applications/virtualization/virtualbox {-              stdenv = stdenv_32bit;-              inherit (gnome) libIDL;-              enableExtensionPack = config.virtualbox.enableExtensionPack or false;-            };-            virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions {-            };-            zfs = callPackage ../os-specific/linux/zfs {-            };-            zfs_git = callPackage ../os-specific/linux/zfs/git.nix {-            };-          };-        linux = linuxPackages.kernel;-        linuxPackages = linuxPackages_3_12;-        linux_latest = pkgs.linux_3_16;-        linuxPackages_latest = pkgs.linuxPackages_3_16;-        linuxPackages_3_2 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_2 linuxPackages_3_2);-        linuxPackages_3_2_xen = linuxPackagesFor pkgs.linux_3_2_xen linuxPackages_3_2_xen;-        linuxPackages_3_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_4 linuxPackages_3_4);-        linuxPackages_3_6_rpi = linuxPackagesFor pkgs.linux_3_6_rpi linuxPackages_3_6_rpi;-        linuxPackages_3_10 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_10 linuxPackages_3_10);-        linuxPackages_3_10_tuxonice = linuxPackagesFor pkgs.linux_3_10_tuxonice linuxPackages_3_10_tuxonice;-        linuxPackages_3_12 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_12 linuxPackages_3_12);-        linuxPackages_3_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_14 linuxPackages_3_14);-        linuxPackages_3_15 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_15 linuxPackages_3_15);-        linuxPackages_3_16 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_16 linuxPackages_3_16);-        linuxPackages_testing = recurseIntoAttrs (linuxPackagesFor pkgs.linux_testing linuxPackages_testing);-        linuxPackages_grsec_stable_desktop = grPackage grFlavors.linux_grsec_stable_desktop;-        linuxPackages_grsec_stable_server = grPackage grFlavors.linux_grsec_stable_server;-        linuxPackages_grsec_stable_server_xen = grPackage grFlavors.linux_grsec_stable_server_xen;-        linuxPackages_grsec_testing_desktop = grPackage grFlavors.linux_grsec_testing_desktop;-        linuxPackages_grsec_testing_server = grPackage grFlavors.linux_grsec_testing_server;-        linuxPackages_grsec_testing_server_xen = grPackage grFlavors.linux_grsec_testing_server_xen;-        linuxManualConfig = pkgs.buildLinux;-        buildLinux = import ../os-specific/linux/kernel/manual-config.nix {-          inherit (pkgs) stdenv runCommand-          nettools bc perl kmod-          writeTextFile ubootChooser;-        };-        keyutils = callPackage ../os-specific/linux/keyutils {-        };-        libselinux = callPackage ../os-specific/linux/libselinux {-        };-        libsemanage = callPackage ../os-specific/linux/libsemanage {-        };-        libraw = callPackage ../development/libraries/libraw {-        };-        libraw1394 = callPackage ../development/libraries/libraw1394 {-        };-        libsexy = callPackage ../development/libraries/libsexy {-        };-        libsepol = callPackage ../os-specific/linux/libsepol {-        };-        libsmbios = callPackage ../os-specific/linux/libsmbios {-        };-        lm_sensors = callPackage ../os-specific/linux/lm-sensors {-        };-        lockdep = callPackage ../os-specific/linux/lockdep {-        };-        lsiutil = callPackage ../os-specific/linux/lsiutil {-        };-        kmod = callPackage ../os-specific/linux/kmod {-        };-        kmod-blacklist-ubuntu = callPackage ../os-specific/linux/kmod-blacklist-ubuntu {-        };-        kvm = qemu_kvm;-        libcap = callPackage ../os-specific/linux/libcap {-        };-        libcap_progs = callPackage ../os-specific/linux/libcap/progs.nix {-        };-        libcap_pam = callPackage ../os-specific/linux/libcap/pam.nix {-        };-        libcap_manpages = callPackage ../os-specific/linux/libcap/man.nix {-        };-        libcap_ng = callPackage ../os-specific/linux/libcap-ng {-        };-        libnscd = callPackage ../os-specific/linux/libnscd {-        };-        libnotify = callPackage ../development/libraries/libnotify {-        };-        libvolume_id = callPackage ../os-specific/linux/libvolume_id {-        };-        lsscsi = callPackage ../os-specific/linux/lsscsi {-        };-        lvm2 = callPackage ../os-specific/linux/lvm2 {-        };-        mdadm = callPackage ../os-specific/linux/mdadm {-        };-        mingetty = callPackage ../os-specific/linux/mingetty {-        };-        module_init_tools = callPackage ../os-specific/linux/module-init-tools {-        };-        aggregateModules = modules:-        callPackage ../os-specific/linux/kmod/aggregator.nix {-          inherit modules;-        };-        multipath_tools = callPackage ../os-specific/linux/multipath-tools {-        };-        musl = callPackage ../os-specific/linux/musl {-        };-        nettools = callPackage ../os-specific/linux/net-tools {-        };-        neverball = callPackage ../games/neverball {-          libpng = libpng15;-        };-        nftables = callPackage ../os-specific/linux/nftables {-        };-        numactl = callPackage ../os-specific/linux/numactl {-        };-        gocode = callPackage ../development/tools/gocode {-        };-        gogoclient = callPackage ../os-specific/linux/gogoclient {-        };-        nss_ldap = callPackage ../os-specific/linux/nss_ldap {-        };-        pam = callPackage ../os-specific/linux/pam {-        };-        pam_ccreds = callPackage ../os-specific/linux/pam_ccreds {-        };-        pam_console = callPackage ../os-specific/linux/pam_console {-          libtool = libtool_1_5;-        };-        pam_devperm = callPackage ../os-specific/linux/pam_devperm {-        };-        pam_krb5 = callPackage ../os-specific/linux/pam_krb5 {-        };-        pam_ldap = callPackage ../os-specific/linux/pam_ldap {-        };-        pam_login = callPackage ../os-specific/linux/pam_login {-        };-        pam_ssh_agent_auth = callPackage ../os-specific/linux/pam_ssh_agent_auth {-        };-        pam_usb = callPackage ../os-specific/linux/pam_usb {-        };-        paxctl = callPackage ../os-specific/linux/paxctl {-        };-        pax-utils = callPackage ../os-specific/linux/pax-utils {-        };-        pcmciaUtils = callPackage ../os-specific/linux/pcmciautils {-          firmware = config.pcmciaUtils.firmware or [-          ];-          config = config.pcmciaUtils.config or null;-        };-        plymouth = callPackage ../os-specific/linux/plymouth {-          automake = automake113x;-        };-        pmount = callPackage ../os-specific/linux/pmount {-        };-        pmutils = callPackage ../os-specific/linux/pm-utils {-        };-        pmtools = callPackage ../os-specific/linux/pmtools {-        };-        policycoreutils = callPackage ../os-specific/linux/policycoreutils {-        };-        powertop = callPackage ../os-specific/linux/powertop {-        };-        prayer = callPackage ../servers/prayer {-        };-        procps = procps-ng;-        procps-old = lowPrio (callPackage ../os-specific/linux/procps {-        });-        procps-ng = callPackage ../os-specific/linux/procps-ng {-        };-        watch = callPackage ../os-specific/linux/procps/watch.nix {-        };-        qemu_kvm = lowPrio (qemu.override {-          x86Only = true;-        });-        firmwareLinuxNonfree = callPackage ../os-specific/linux/firmware/firmware-linux-nonfree {-        };-        radeontools = callPackage ../os-specific/linux/radeontools {-        };-        raspberrypifw = callPackage ../os-specific/linux/firmware/raspberrypi {-        };-        regionset = callPackage ../os-specific/linux/regionset {-        };-        rfkill = callPackage ../os-specific/linux/rfkill {-        };-        rfkill_udev = callPackage ../os-specific/linux/rfkill/udev.nix {-        };-        rtkit = callPackage ../os-specific/linux/rtkit {-        };-        sdparm = callPackage ../os-specific/linux/sdparm {-        };-        sepolgen = callPackage ../os-specific/linux/sepolgen {-        };-        setools = callPackage ../os-specific/linux/setools {-        };-        shadow = callPackage ../os-specific/linux/shadow {-        };-        statifier = builderDefsPackage (import ../os-specific/linux/statifier) {-        };-        sysdig = callPackage ../os-specific/linux/sysdig {-          kernel = null;-        };-        sysfsutils = callPackage ../os-specific/linux/sysfsutils {-        };-        sysprof = callPackage ../development/tools/profiling/sysprof {-          inherit (gnome) libglade;-        };-        libsysfs = sysfsutils;-        systool = sysfsutils;-        sysklogd = callPackage ../os-specific/linux/sysklogd {-        };-        syslinux = callPackage ../os-specific/linux/syslinux {-        };-        sysstat = callPackage ../os-specific/linux/sysstat {-        };-        systemd = callPackage ../os-specific/linux/systemd {-          linuxHeaders = linuxHeaders_3_14;-        };-        systemtap = callPackage ../development/tools/profiling/systemtap {-          inherit (gnome) libglademm;-        };-        systemd_with_lvm2 = pkgs.lib.overrideDerivation pkgs.systemd (p:-        {-          name = p.name + "-with-lvm2";-          postInstall = p.postInstall + ''-            cp "${pkgs.lvm2}/lib/systemd/system-generators/"* ''$out/lib/systemd/system-generators-          '';-        });-        sysvinit = callPackage ../os-specific/linux/sysvinit {-        };-        sysvtools = callPackage ../os-specific/linux/sysvinit {-          withoutInitTools = true;-        };-        tcp_wrappers = callPackage ../os-specific/linux/tcp-wrappers {-        };-        trackballs = callPackage ../games/trackballs {-          debug = false;-          guile = guile_1_8;-        };-        tunctl = callPackage ../os-specific/linux/tunctl {-        };-        ubootChooser = name:-        if name == "upstream"-          then ubootUpstream-          else if name == "sheevaplug"-            then ubootSheevaplug-            else if name == "guruplug"-              then ubootGuruplug-              else if name == "nanonote"-                then ubootNanonote-                else throw "Unknown uboot";-        ubootUpstream = callPackage ../misc/uboot {-        };-        ubootSheevaplug = callPackage ../misc/uboot/sheevaplug.nix {-        };-        ubootNanonote = callPackage ../misc/uboot/nanonote.nix {-        };-        ubootGuruplug = callPackage ../misc/uboot/guruplug.nix {-        };-        uclibc = callPackage ../os-specific/linux/uclibc {-        };-        uclibcCross = lowPrio (callPackage ../os-specific/linux/uclibc {-          inherit fetchurl stdenv-          libiconv;-          linuxHeaders = linuxHeadersCross;-          gccCross = gccCrossStageStatic;-          cross = assert crossSystem != null; crossSystem;-        });-        udev145 = callPackage ../os-specific/linux/udev/145.nix {-        };-        udev = pkgs.systemd;-        udisks1 = callPackage ../os-specific/linux/udisks/1-default.nix {-        };-        udisks2 = callPackage ../os-specific/linux/udisks/2-default.nix {-        };-        udisks = udisks1;-        udisks_glue = callPackage ../os-specific/linux/udisks-glue {-        };-        untie = callPackage ../os-specific/linux/untie {-        };-        upower = callPackage ../os-specific/linux/upower {-        };-        upower_99 = callPackage ../os-specific/linux/upower/0.99.nix {-        };-        upstart = callPackage ../os-specific/linux/upstart {-        };-        usbutils = callPackage ../os-specific/linux/usbutils {-        };-        usermount = callPackage ../os-specific/linux/usermount {-        };-        utillinux = lowPrio (callPackage ../os-specific/linux/util-linux {-          ncurses = null;-          perl = null;-        });-        utillinuxCurses = utillinux.override {-          inherit ncurses perl;-        };-        v4l_utils = callPackage ../os-specific/linux/v4l-utils {-          withQt4 = true;-        };-        windows = rec {-          cygwinSetup = callPackage ../os-specific/windows/cygwin-setup {-          };-          jom = callPackage ../os-specific/windows/jom {-          };-          w32api = callPackage ../os-specific/windows/w32api {-            gccCross = gccCrossStageStatic;-            binutilsCross = binutilsCross;-          };-          w32api_headers = w32api.override {-            onlyHeaders = true;-          };-          mingw_runtime = callPackage ../os-specific/windows/mingwrt {-            gccCross = gccCrossMingw2;-            binutilsCross = binutilsCross;-          };-          mingw_runtime_headers = mingw_runtime.override {-            onlyHeaders = true;-          };-          mingw_headers1 = buildEnv {-            name = "mingw-headers-1";-            paths = [-              w32api_headers-              mingw_runtime_headers-            ];-          };-          mingw_headers2 = buildEnv {-            name = "mingw-headers-2";-            paths = [-              w32api-              mingw_runtime_headers-            ];-          };-          mingw_headers3 = buildEnv {-            name = "mingw-headers-3";-            paths = [-              w32api-              mingw_runtime-            ];-          };-          mingw_w64 = callPackage ../os-specific/windows/mingw-w64 {-            gccCross = gccCrossStageStatic;-            binutilsCross = binutilsCross;-          };-          mingw_w64_headers = callPackage ../os-specific/windows/mingw-w64 {-            onlyHeaders = true;-          };-          mingw_w64_pthreads = callPackage ../os-specific/windows/mingw-w64 {-            onlyPthreads = true;-          };-          pthreads = callPackage ../os-specific/windows/pthread-w32 {-            mingw_headers = mingw_headers3;-          };-          wxMSW = callPackage ../os-specific/windows/wxMSW-2.8 {-          };-        };-        wesnoth = callPackage ../games/wesnoth {-          lua = lua5;-        };-        wirelesstools = callPackage ../os-specific/linux/wireless-tools {-        };-        wpa_supplicant = callPackage ../os-specific/linux/wpa_supplicant {-        };-        wpa_supplicant_gui = callPackage ../os-specific/linux/wpa_supplicant/gui.nix {-        };-        xf86_input_mtrack = callPackage ../os-specific/linux/xf86-input-mtrack {-          inherit (xorg) utilmacros xproto-          inputproto xorgserver;-        };-        xf86_input_multitouch = callPackage ../os-specific/linux/xf86-input-multitouch {-        };-        xf86_input_wacom = callPackage ../os-specific/linux/xf86-input-wacom {-        };-        xf86_video_nested = callPackage ../os-specific/linux/xf86-video-nested {-          inherit (xorg) fontsproto-          renderproto utilmacros-          xorgserver;-        };-        xf86_video_nouveau = xorg.xf86videonouveau;-        xmoto = builderDefsPackage (import ../games/xmoto) {-          inherit chipmunk sqlite curl-          zlib bzip2 libjpeg libpng-          freeglut mesa SDL SDL_mixer-          SDL_image SDL_net SDL_ttf lua5-          ode libxdg_basedir libxml2;-        };-        xorg_sys_opengl = callPackage ../os-specific/linux/opengl/xorg-sys {-        };-        zd1211fw = callPackage ../os-specific/linux/firmware/zd1211 {-        };-        andagii = callPackage ../data/fonts/andagii {-        };-        anonymousPro = callPackage ../data/fonts/anonymous-pro {-        };-        arkpandora_ttf = builderDefsPackage (import ../data/fonts/arkpandora) {-        };-        aurulent-sans = callPackage ../data/fonts/aurulent-sans {-        };-        bakoma_ttf = callPackage ../data/fonts/bakoma-ttf {-        };-        cacert = callPackage ../data/misc/cacert {-        };-        cantarell_fonts = callPackage ../data/fonts/cantarell-fonts {-        };-        corefonts = callPackage ../data/fonts/corefonts {-        };-        wrapFonts = paths:-        import ../data/fonts/fontWrap {-          inherit fetchurl stdenv-          builderDefs paths;-          inherit (xorg) mkfontdir-          mkfontscale;-        };-        clearlyU = callPackage ../data/fonts/clearlyU {-        };-        cm_unicode = callPackage ../data/fonts/cm-unicode {-        };-        dejavu_fonts = callPackage ../data/fonts/dejavu-fonts {-          inherit (perlPackages) FontTTF;-        };-        docbook5 = callPackage ../data/sgml+xml/schemas/docbook-5.0 {-        };-        docbook_sgml_dtd_31 = callPackage ../data/sgml+xml/schemas/sgml-dtd/docbook/3.1.nix {-        };-        docbook_sgml_dtd_41 = callPackage ../data/sgml+xml/schemas/sgml-dtd/docbook/4.1.nix {-        };-        docbook_xml_dtd_412 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.1.2.nix {-        };-        docbook_xml_dtd_42 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.2.nix {-        };-        docbook_xml_dtd_43 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.3.nix {-        };-        docbook_xml_dtd_45 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.5.nix {-        };-        docbook_xml_ebnf_dtd = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook-ebnf {-        };-        docbook_xml_xslt = docbook_xsl;-        docbook_xsl = callPackage ../data/sgml+xml/stylesheets/xslt/docbook-xsl {-        };-        docbook5_xsl = docbook_xsl_ns;-        docbook_xsl_ns = callPackage ../data/sgml+xml/stylesheets/xslt/docbook-xsl-ns {-        };-        dosemu_fonts = callPackage ../data/fonts/dosemu-fonts {-        };-        eb-garamond = callPackage ../data/fonts/eb-garamond {-        };-        fira = callPackage ../data/fonts/fira {-        };-        freefont_ttf = callPackage ../data/fonts/freefont-ttf {-        };-        freepats = callPackage ../data/misc/freepats {-        };-        gentium = callPackage ../data/fonts/gentium {-        };-        gnome_user_docs = callPackage ../data/documentation/gnome-user-docs {-        };-        inherit (gnome3) gsettings_desktop_schemas;-        hicolor_icon_theme = callPackage ../data/icons/hicolor-icon-theme {-        };-        inconsolata = callPackage ../data/fonts/inconsolata {-        };-        ipafont = callPackage ../data/fonts/ipafont {-        };-        junicode = callPackage ../data/fonts/junicode {-        };-        kochi-substitute = callPackage ../data/fonts/kochi-substitute {-        };-        kochi-substitute-naga10 = callPackage ../data/fonts/kochi-substitute-naga10 {-        };-        liberation_ttf = callPackage ../data/fonts/redhat-liberation-fonts {-        };-        libertine = builderDefsPackage (import ../data/fonts/libertine) {-          inherit fetchurl fontforge lib;-        };-        lmmath = callPackage ../data/fonts/lmodern/lmmath.nix {-        };-        lmodern = callPackage ../data/fonts/lmodern {-        };-        lohit-fonts = callPackage ../data/fonts/lohit-fonts {-        };-        manpages = callPackage ../data/documentation/man-pages {-        };-        miscfiles = callPackage ../data/misc/miscfiles {-        };-        mobile_broadband_provider_info = callPackage ../data/misc/mobile-broadband-provider-info {-        };-        mph_2b_damase = callPackage ../data/fonts/mph-2b-damase {-        };-        nafees = callPackage ../data/fonts/nafees {-        };-        oldstandard = callPackage ../data/fonts/oldstandard {-        };-        opensans-ttf = callPackage ../data/fonts/opensans-ttf {-        };-        poly = callPackage ../data/fonts/poly {-        };-        posix_man_pages = callPackage ../data/documentation/man-pages-posix {-        };-        pthreadmanpages = callPackage ../data/documentation/pthread-man-pages {-        };-        shared_mime_info = callPackage ../data/misc/shared-mime-info {-        };-        shared_desktop_ontologies = callPackage ../data/misc/shared-desktop-ontologies {-        };-        stdmanpages = callPackage ../data/documentation/std-man-pages {-        };-        symbola = callPackage ../data/fonts/symbola {-        };-        iana_etc = callPackage ../data/misc/iana-etc {-        };-        poppler_data = callPackage ../data/misc/poppler-data {-        };-        r3rs = callPackage ../data/documentation/rnrs/r3rs.nix {-        };-        r4rs = callPackage ../data/documentation/rnrs/r4rs.nix {-        };-        r5rs = callPackage ../data/documentation/rnrs/r5rs.nix {-        };-        source-code-pro = callPackage ../data/fonts/source-code-pro {-        };-        source-sans-pro = callPackage ../data/fonts/source-sans-pro {-        };-        source-serif-pro = callPackage ../data/fonts/source-serif-pro {-        };-        source-han-sans-japanese = callPackage ../data/fonts/source-han-sans/japanese.nix {-        };-        source-han-sans-korean = callPackage ../data/fonts/source-han-sans/korean.nix {-        };-        source-han-sans-simplified-chinese = callPackage ../data/fonts/source-han-sans/simplified-chinese.nix {-        };-        source-han-sans-traditional-chinese = callPackage ../data/fonts/source-han-sans/traditional-chinese.nix {-        };-        tango-icon-theme = callPackage ../data/icons/tango-icon-theme {-        };-        themes = name:-        import (../data/misc/themes + ("/" + name + ".nix")) {-          inherit fetchurl;-        };-        theano = callPackage ../data/fonts/theano {-        };-        tempora_lgc = callPackage ../data/fonts/tempora-lgc {-        };-        terminus_font = callPackage ../data/fonts/terminus-font {-        };-        tipa = callPackage ../data/fonts/tipa {-        };-        ttf_bitstream_vera = callPackage ../data/fonts/ttf-bitstream-vera {-        };-        tzdata = callPackage ../data/misc/tzdata {-        };-        ubuntu_font_family = callPackage ../data/fonts/ubuntu-font-family {-        };-        ucsFonts = callPackage ../data/fonts/ucs-fonts {-        };-        unifont = callPackage ../data/fonts/unifont {-        };-        vistafonts = callPackage ../data/fonts/vista-fonts {-        };-        wqy_microhei = callPackage ../data/fonts/wqy-microhei {-        };-        wqy_zenhei = callPackage ../data/fonts/wqy-zenhei {-        };-        xhtml1 = callPackage ../data/sgml+xml/schemas/xml-dtd/xhtml1 {-        };-        xkeyboard_config = xorg.xkeyboardconfig;-        a2jmidid = callPackage ../applications/audio/a2jmidid {-        };-        aangifte2006 = callPackage_i686 ../applications/taxes/aangifte-2006 {-        };-        aangifte2007 = callPackage_i686 ../applications/taxes/aangifte-2007 {-        };-        aangifte2008 = callPackage_i686 ../applications/taxes/aangifte-2008 {-        };-        aangifte2009 = callPackage_i686 ../applications/taxes/aangifte-2009 {-        };-        aangifte2010 = callPackage_i686 ../applications/taxes/aangifte-2010 {-        };-        aangifte2011 = callPackage_i686 ../applications/taxes/aangifte-2011 {-        };-        aangifte2012 = callPackage_i686 ../applications/taxes/aangifte-2012 {-        };-        aangifte2013 = callPackage_i686 ../applications/taxes/aangifte-2013 {-        };-        abcde = callPackage ../applications/audio/abcde {-          inherit (perlPackages) DigestSHA-          MusicBrainz MusicBrainzDiscID;-          libcdio = libcdio082;-        };-        abiword = callPackage ../applications/office/abiword {-          inherit (gnome) libglade-          libgnomecanvas;-        };-        abook = callPackage ../applications/misc/abook {-        };-        adobe-reader = callPackage_i686 ../applications/misc/adobe-reader {-        };-        aewan = callPackage ../applications/editors/aewan {-        };-        alchemy = callPackage ../applications/graphics/alchemy {-        };-        ams-lv2 = callPackage ../applications/audio/ams-lv2 {-        };-        amsn = callPackage ../applications/networking/instant-messengers/amsn {-        };-        antiword = callPackage ../applications/office/antiword {-        };-        ardour = ardour3;-        ardour3 = lowPrio (callPackage ../applications/audio/ardour {-          inherit (gnome) libgnomecanvas-          libgnomecanvasmm;-        });-        arora = callPackage ../applications/networking/browsers/arora {-        };-        atom = callPackage ../applications/editors/atom {-          gconf = gnome.GConf;-        };-        aseprite = callPackage ../applications/editors/aseprite {-          giflib = giflib_4_1;-        };-        audacious = callPackage ../applications/audio/audacious {-        };-        audacity = callPackage ../applications/audio/audacity {-          ffmpeg = ffmpeg_0_10;-        };-        milkytracker = callPackage ../applications/audio/milkytracker {-        };-        aumix = callPackage ../applications/audio/aumix {-          gtkGUI = false;-        };-        autopanosiftc = callPackage ../applications/graphics/autopanosiftc {-        };-        avidemux = callPackage ../applications/video/avidemux {-        };-        avogadro = callPackage ../applications/science/chemistry/avogadro {-          eigen = eigen2;-        };-        avrdudess = callPackage ../applications/misc/avrdudess {-        };-        avxsynth = callPackage ../applications/video/avxsynth {-        };-        awesome-3-4 = callPackage ../applications/window-managers/awesome/3.4.nix {-          lua = lua5;-          cairo = cairo.override {-            xcbSupport = true;-          };-        };-        awesome-3-5 = callPackage ../applications/window-managers/awesome {-          lua = lua5_1;-          cairo = cairo.override {-            xcbSupport = true;-          };-        };-        awesome = awesome-3-5;-        inherit (gnome3) baobab;-        bar = callPackage ../applications/window-managers/bar {-        };-        baresip = callPackage ../applications/networking/instant-messengers/baresip {-          ffmpeg = ffmpeg_1;-        };-        batik = callPackage ../applications/graphics/batik {-        };-        bazaar = callPackage ../applications/version-management/bazaar {-        };-        bazaarTools = builderDefsPackage (import ../applications/version-management/bazaar/tools.nix) {-          inherit bazaar;-        };-        beast = callPackage ../applications/audio/beast {-          inherit (gnome) libgnomecanvas-          libart_lgpl;-          guile = guile_1_8;-        };-        bibletime = callPackage ../applications/misc/bibletime {-        };-        bitcoin = callPackage ../applications/misc/bitcoin {-        };-        bitlbee = callPackage ../applications/networking/instant-messengers/bitlbee {-          gnutls = gnutls;-          libotr = libotr_3_2;-        };-        blender = callPackage ../applications/misc/blender {-          python = python34;-        };-        bristol = callPackage ../applications/audio/bristol {-        };-        bspwm = callPackage ../applications/window-managers/bspwm {-        };-        bvi = callPackage ../applications/editors/bvi {-        };-        calf = callPackage ../applications/audio/calf {-          inherit (gnome) libglade;-        };-        calibre = callPackage ../applications/misc/calibre {-          inherit (pythonPackages) pyqt5-          sip_4_16;-        };-        camlistore = callPackage ../applications/misc/camlistore {-        };-        carrier = builderDefsPackage (import ../applications/networking/instant-messengers/carrier/2.5.0.nix) {-          inherit fetchurl stdenv-          pkgconfig perl perlXMLParser-          libxml2 openssl nss gtkspell-          aspell gettext ncurses avahi-          dbus dbus_glib python libtool-          automake autoconf gstreamer;-          inherit gtk glib;-          inherit (gnome) startupnotification-          GConf;-          inherit (xlibs) libXScrnSaver-          scrnsaverproto libX11 xproto-          kbproto;-        };-        funpidgin = carrier;-        cc1394 = callPackage ../applications/video/cc1394 {-        };-        cddiscid = callPackage ../applications/audio/cd-discid {-        };-        cdparanoia = cdparanoiaIII;-        cdparanoiaIII = callPackage ../applications/audio/cdparanoia {-        };-        cdrtools = callPackage ../applications/misc/cdrtools {-        };-        centerim = callPackage ../applications/networking/instant-messengers/centerim {-        };-        cgit = callPackage ../applications/version-management/git-and-tools/cgit {-        };-        cgminer = callPackage ../applications/misc/cgminer {-          amdappsdk = amdappsdk28;-        };-        chatzilla = callPackage ../applications/networking/irc/chatzilla {-        };-        chromium = lowPrio (callPackage ../applications/networking/browsers/chromium {-          channel = "stable";-          pulseSupport = config.pulseaudio or true;-          enablePepperFlash = config.chromium.enablePepperFlash or false;-          enablePepperPDF = config.chromium.enablePepperPDF or false;-        });-        chromiumBeta = lowPrio (chromium.override {-          channel = "beta";-        });-        chromiumBetaWrapper = lowPrio (wrapChromium chromiumBeta);-        chromiumDev = lowPrio (chromium.override {-          channel = "dev";-        });-        chromiumDevWrapper = lowPrio (wrapChromium chromiumDev);-        chromiumWrapper = wrapChromium chromium;-        cinelerra = callPackage ../applications/video/cinelerra {-        };-        clipit = callPackage ../applications/misc/clipit {-        };-        cmus = callPackage ../applications/audio/cmus {-        };-        compiz = callPackage ../applications/window-managers/compiz {-          inherit (gnome) GConf ORBit2-          metacity;-          boost = boost149;-        };-        coriander = callPackage ../applications/video/coriander {-          inherit (gnome) libgnomeui-          GConf;-        };-        csound = callPackage ../applications/audio/csound {-        };-        cinepaint = callPackage ../applications/graphics/cinepaint {-          fltk = fltk13;-          libpng = libpng12;-        };-        codeblocks = callPackage ../applications/editors/codeblocks {-        };-        codeblocksFull = callPackage ../applications/editors/codeblocks {-          contribPlugins = true;-        };-        codeville = builderDefsPackage (import ../applications/version-management/codeville/0.8.0.nix) {-          inherit makeWrapper;-          python = pythonFull;-        };-        comical = callPackage ../applications/graphics/comical {-        };-        conkeror = callPackage ../applications/networking/browsers/conkeror {-        };-        conkerorWrapper = wrapFirefox {-          browser = conkeror;-          browserName = "conkeror";-          desktopName = "Conkeror";-        };-        cuneiform = builderDefsPackage (import ../tools/graphics/cuneiform) {-          inherit cmake patchelf;-          imagemagick = imagemagick;-        };-        cvs = callPackage ../applications/version-management/cvs {-        };-        cvsps = callPackage ../applications/version-management/cvsps {-        };-        cvs2svn = callPackage ../applications/version-management/cvs2svn {-        };-        d4x = callPackage ../applications/misc/d4x {-        };-        darcs = with haskellPackages_ghc783; callPackage ../applications/version-management/darcs {-          cabal = cabal.override {-            extension = self: super: {-              isLibrary = false;-              configureFlags = "-f-library " + (super.configureFlags or "");-            };-          };-        };-        darktable = callPackage ../applications/graphics/darktable {-          inherit (gnome) GConf libglade;-        };-        dd-agent = callPackage ../tools/networking/dd-agent {-          inherit (pythonPackages) tornado;-        };-        dia = callPackage ../applications/graphics/dia {-          inherit (pkgs.gnome) libart_lgpl-          libgnomeui;-        };-        diffuse = callPackage ../applications/version-management/diffuse {-        };-        distrho = callPackage ../applications/audio/distrho {-        };-        djvulibre = callPackage ../applications/misc/djvulibre {-        };-        djvu2pdf = callPackage ../tools/typesetting/djvu2pdf {-        };-        djview = callPackage ../applications/graphics/djview {-        };-        djview4 = pkgs.djview;-        dmenu = callPackage ../applications/misc/dmenu {-          enableXft = config.dmenu.enableXft or false;-        };-        dmtx = builderDefsPackage (import ../tools/graphics/dmtx) {-          inherit libpng libtiff libjpeg-          imagemagick librsvg pkgconfig-          bzip2 zlib libtool freetype-          fontconfig ghostscript jasper-          xz;-          inherit (xlibs) libX11;-        };-        docker = callPackage ../applications/virtualization/docker {-        };-        doodle = callPackage ../applications/search/doodle {-        };-        dunst = callPackage ../applications/misc/dunst {-        };-        dvb_apps = callPackage ../applications/video/dvb-apps {-        };-        dvdauthor = callPackage ../applications/video/dvdauthor {-        };-        dwb = callPackage ../applications/networking/browsers/dwb {-          dconf = gnome3.dconf;-        };-        dwbWrapper = wrapFirefox {-          browser = dwb;-          browserName = "dwb";-          desktopName = "dwb";-        };-        dwm = callPackage ../applications/window-managers/dwm {-          patches = config.dwm.patches or [-          ];-        };-        dzen2 = callPackage ../applications/window-managers/dzen2 {-        };-        eaglemode = callPackage ../applications/misc/eaglemode {-        };-        eclipses = recurseIntoAttrs (callPackage ../applications/editors/eclipse {-        });-        ed = callPackage ../applications/editors/ed {-        };-        ekho = callPackage ../applications/audio/ekho {-        };-        electrum = callPackage ../applications/misc/electrum {-        };-        elinks = callPackage ../applications/networking/browsers/elinks {-        };-        elvis = callPackage ../applications/editors/elvis {-        };-        emacs = emacs24;-        emacs24 = callPackage ../applications/editors/emacs-24 {-          libXaw = xlibs.libXaw;-          Xaw3d = null;-          gconf = null;-          librsvg = null;-          alsaLib = null;-          imagemagick = null;-        };-        emacs24-nox = lowPrio (appendToName "nox" (emacs24.override {-          withX = false;-        }));-        emacs24Macport = lowPrio (callPackage ../applications/editors/emacs-24/macport.nix {-          stdenv = pkgs.clangStdenv;-        });-        emacsPackages = emacs: self: let-          callPackage = newScope self;-          in rec {-            inherit emacs;-            autoComplete = callPackage ../applications/editors/emacs-modes/auto-complete {-            };-            bbdb = callPackage ../applications/editors/emacs-modes/bbdb {-            };-            bbdb3 = callPackage ../applications/editors/emacs-modes/bbdb/3.nix {-            };-            cedet = callPackage ../applications/editors/emacs-modes/cedet {-            };-            calfw = callPackage ../applications/editors/emacs-modes/calfw {-            };-            coffee = callPackage ../applications/editors/emacs-modes/coffee {-            };-            colorTheme = callPackage ../applications/editors/emacs-modes/color-theme {-            };-            colorThemeSolarized = callPackage ../applications/editors/emacs-modes/color-theme-solarized {-            };-            cryptol = callPackage ../applications/editors/emacs-modes/cryptol {-            };-            cua = callPackage ../applications/editors/emacs-modes/cua {-            };-            darcsum = callPackage ../applications/editors/emacs-modes/darcsum {-            };-            jabber = callPackage ../applications/editors/emacs-modes/jabber {-            };-            emacsClangCompleteAsync = callPackage ../applications/editors/emacs-modes/emacs-clang-complete-async {-            };-            emacsSessionManagement = callPackage ../applications/editors/emacs-modes/session-management-for-emacs {-            };-            emacsw3m = callPackage ../applications/editors/emacs-modes/emacs-w3m {-            };-            emms = callPackage ../applications/editors/emacs-modes/emms {-            };-            ess = callPackage ../applications/editors/emacs-modes/ess {-            };-            flymakeCursor = callPackage ../applications/editors/emacs-modes/flymake-cursor {-            };-            gh = callPackage ../applications/editors/emacs-modes/gh {-            };-            graphvizDot = callPackage ../applications/editors/emacs-modes/graphviz-dot {-            };-            gist = callPackage ../applications/editors/emacs-modes/gist {-            };-            idris = callPackage ../applications/editors/emacs-modes/idris {-            };-            jade = callPackage ../applications/editors/emacs-modes/jade {-            };-            jdee = callPackage ../applications/editors/emacs-modes/jdee {-            };-            js2 = callPackage ../applications/editors/emacs-modes/js2 {-            };-            stratego = callPackage ../applications/editors/emacs-modes/stratego {-            };-            haskellMode = callPackage ../applications/editors/emacs-modes/haskell {-            };-            ocamlMode = callPackage ../applications/editors/emacs-modes/ocaml {-            };-            structuredHaskellMode = callPackage ../applications/editors/emacs-modes/structured-haskell-mode {-              inherit (haskellPackages) cabal-              haskellSrcExts;-            };-            tuaregMode = callPackage ../applications/editors/emacs-modes/tuareg {-            };-            hol_light_mode = callPackage ../applications/editors/emacs-modes/hol_light {-            };-            htmlize = callPackage ../applications/editors/emacs-modes/htmlize {-            };-            logito = callPackage ../applications/editors/emacs-modes/logito {-            };-            loremIpsum = callPackage ../applications/editors/emacs-modes/lorem-ipsum {-            };-            magit = callPackage ../applications/editors/emacs-modes/magit {-            };-            maudeMode = callPackage ../applications/editors/emacs-modes/maude {-            };-            metaweblog = callPackage ../applications/editors/emacs-modes/metaweblog {-            };-            notmuch = lowPrio (callPackage ../applications/networking/mailreaders/notmuch {-            });-            offlineimap = callPackage ../applications/editors/emacs-modes/offlineimap {-            };-            org = hiPrio (callPackage ../applications/editors/emacs-modes/org {-            });-            org2blog = callPackage ../applications/editors/emacs-modes/org2blog {-            };-            pcache = callPackage ../applications/editors/emacs-modes/pcache {-            };-            phpMode = callPackage ../applications/editors/emacs-modes/php {-            };-            prologMode = callPackage ../applications/editors/emacs-modes/prolog {-            };-            proofgeneral_4_2 = callPackage ../applications/editors/emacs-modes/proofgeneral/4.2.nix {-              texinfo = texinfo4;-              texLive = pkgs.texLiveAggregationFun {-                paths = [-                  pkgs.texLive-                  pkgs.texLiveCMSuper-                ];-              };-            };-            proofgeneral_4_3_pre = callPackage ../applications/editors/emacs-modes/proofgeneral/4.3pre.nix {-              texinfo = texinfo4;-              texLive = pkgs.texLiveAggregationFun {-                paths = [-                  pkgs.texLive-                  pkgs.texLiveCMSuper-                ];-              };-            };-            proofgeneral = self.proofgeneral_4_2;-            quack = callPackage ../applications/editors/emacs-modes/quack {-            };-            rectMark = callPackage ../applications/editors/emacs-modes/rect-mark {-            };-            remember = callPackage ../applications/editors/emacs-modes/remember {-            };-            rudel = callPackage ../applications/editors/emacs-modes/rudel {-            };-            sbtMode = callPackage ../applications/editors/emacs-modes/sbt-mode {-            };-            scalaMode1 = callPackage ../applications/editors/emacs-modes/scala-mode/v1.nix {-            };-            scalaMode2 = callPackage ../applications/editors/emacs-modes/scala-mode/v2.nix {-            };-            sunriseCommander = callPackage ../applications/editors/emacs-modes/sunrise-commander {-            };-            writeGood = callPackage ../applications/editors/emacs-modes/writegood {-            };-            xmlRpc = callPackage ../applications/editors/emacs-modes/xml-rpc {-            };-          };-        emacs24Packages = recurseIntoAttrs (emacsPackages emacs24 pkgs.emacs24Packages);-        inherit (gnome3) empathy;-        epdfview = callPackage ../applications/misc/epdfview {-        };-        inherit (gnome3) epiphany;-        espeak = callPackage ../applications/audio/espeak {-        };-        espeakedit = callPackage ../applications/audio/espeak/edit.nix {-        };-        esniper = callPackage ../applications/networking/esniper {-        };-        etherape = callPackage ../applications/networking/sniffers/etherape {-          inherit (gnome) gnomedocutils-          libgnome libglade libgnomeui-          scrollkeeper;-        };-        evopedia = callPackage ../applications/misc/evopedia {-        };-        keepassx = callPackage ../applications/misc/keepassx {-        };-        keepassx2 = callPackage ../applications/misc/keepassx/2.0.nix {-        };-        inherit (gnome3) evince;-        evolution_data_server = gnome3.evolution_data_server;-        keepass = callPackage ../applications/misc/keepass {-        };-        exrdisplay = callPackage ../applications/graphics/exrdisplay {-          fltk = fltk20;-        };-        fbpanel = callPackage ../applications/window-managers/fbpanel {-        };-        fbreader = callPackage ../applications/misc/fbreader {-        };-        fetchmail = import ../applications/misc/fetchmail {-          inherit stdenv fetchurl openssl;-        };-        fldigi = callPackage ../applications/audio/fldigi {-        };-        fluidsynth = callPackage ../applications/audio/fluidsynth {-        };-        fossil = callPackage ../applications/version-management/fossil {-        };-        fribid = callPackage ../applications/networking/browsers/mozilla-plugins/fribid {-        };-        fvwm = callPackage ../applications/window-managers/fvwm {-        };-        geany = callPackage ../applications/editors/geany {-        };-        gksu = callPackage ../applications/misc/gksu {-        };-        gnuradio = callPackage ../applications/misc/gnuradio {-          inherit (pythonPackages) lxml-          numpy scipy matplotlib pyopengl;-          fftw = fftwFloat;-        };-        gnuradio-osmosdr = callPackage ../applications/misc/gnuradio-osmosdr {-        };-        goldendict = callPackage ../applications/misc/goldendict {-        };-        google-musicmanager = callPackage ../applications/audio/google-musicmanager {-        };-        gpicview = callPackage ../applications/graphics/gpicview {-        };-        gqrx = callPackage ../applications/misc/gqrx {-        };-        grass = import ../applications/misc/grass {-          inherit (xlibs) libXmu libXext-          libXp libX11 libXt libSM libICE-          libXpm libXaw libXrender;-          inherit config-          composableDerivation stdenv-          fetchurl lib flex bison cairo-          fontconfig gdal zlib ncurses-          gdbm proj pkgconfig swig blas-          liblapack libjpeg libpng mysql-          unixODBC mesa postgresql python-          readline sqlite tcl tk libtiff-          freetype makeWrapper wxGTK;-          fftw = fftwSinglePrec;-          ffmpeg = ffmpeg_0_10;-          motif = lesstif;-          opendwg = libdwg;-          wxPython = wxPython28;-        };-        grip = callPackage ../applications/misc/grip {-          inherit (gnome) libgnome-          libgnomeui vte;-        };-        gtimelog = pythonPackages.gtimelog;-        inherit (gnome3) gucharmap;-        guitarix = callPackage ../applications/audio/guitarix {-          fftw = fftwSinglePrec;-        };-        photivo = callPackage ../applications/graphics/photivo {-        };-        wavesurfer = callPackage ../applications/misc/audio/wavesurfer {-        };-        wireshark = callPackage ../applications/networking/sniffers/wireshark {-        };-        wvdial = callPackage ../os-specific/linux/wvdial {-        };-        fbida = callPackage ../applications/graphics/fbida {-        };-        fdupes = callPackage ../tools/misc/fdupes {-        };-        feh = callPackage ../applications/graphics/feh {-        };-        filezilla = callPackage ../applications/networking/ftp/filezilla {-        };-        firefox13Pkgs = callPackage ../applications/networking/browsers/firefox/13.0.nix {-          inherit (gnome) libIDL;-        };-        firefox13Wrapper = wrapFirefox {-          browser = firefox13Pkgs.firefox;-        };-        firefox30Pkgs = callPackage ../applications/networking/browsers/firefox/30.nix {-          inherit (gnome) libIDL;-          inherit (pythonPackages) pysqlite;-          libpng = libpng_apng;-        };-        firefox = callPackage ../applications/networking/browsers/firefox {-          inherit (gnome) libIDL;-          inherit (pythonPackages) pysqlite;-        };-        firefoxWrapper = wrapFirefox {-          browser = pkgs.firefox;-        };-        firefox-bin = callPackage ../applications/networking/browsers/firefox-bin {-          gconf = pkgs.gnome.GConf;-          inherit (pkgs.gnome) libgnome-          libgnomeui;-          inherit (pkgs.xlibs) libX11-          libXScrnSaver libXext-          libXinerama libXrender libXt;-        };-        flac = callPackage ../applications/audio/flac {-        };-        flashplayer = callPackage ../applications/networking/browsers/mozilla-plugins/flashplayer-11 {-          debug = config.flashplayer.debug or false;-        };-        fluxbox = callPackage ../applications/window-managers/fluxbox {-        };-        freecad = callPackage ../applications/graphics/freecad {-          opencascade = opencascade_6_5;-          inherit (pythonPackages) matplotlib-          pycollada;-        };-        freemind = callPackage ../applications/misc/freemind {-          jdk = jdk;-          jre = jdk;-        };-        freenet = callPackage ../applications/networking/p2p/freenet {-        };-        freepv = callPackage ../applications/graphics/freepv {-        };-        xfontsel = callPackage ../applications/misc/xfontsel {-        };-        xlsfonts = callPackage ../applications/misc/xlsfonts {-        };-        freerdp = callPackage ../applications/networking/remote/freerdp {-          ffmpeg = ffmpeg_1;-        };-        freerdpUnstable = callPackage ../applications/networking/remote/freerdp/unstable.nix {-        };-        freicoin = callPackage ../applications/misc/freicoin {-        };-        fspot = callPackage ../applications/graphics/f-spot {-          inherit (gnome) libgnome-          libgnomeui;-          gtksharp = gtksharp1;-        };-        fuze = callPackage ../applications/networking/instant-messengers/fuze {-        };-        gcolor2 = callPackage ../applications/graphics/gcolor2 {-        };-        get_iplayer = callPackage ../applications/misc/get_iplayer {-        };-        gimp_2_8 = callPackage ../applications/graphics/gimp/2.8.nix {-          inherit (gnome) libart_lgpl;-          webkit = null;-          lcms = lcms2;-          wrapPython = pythonPackages.wrapPython;-        };-        gimp = gimp_2_8;-        gimpPlugins = recurseIntoAttrs (import ../applications/graphics/gimp/plugins {-          inherit pkgs gimp;-        });-        gitAndTools = recurseIntoAttrs (import ../applications/version-management/git-and-tools {-          inherit pkgs;-        });-        git = gitAndTools.git;-        gitFull = gitAndTools.gitFull;-        gitSVN = gitAndTools.gitSVN;-        gitRepo = callPackage ../applications/version-management/git-repo {-          python = python27;-        };-        gitolite = callPackage ../applications/version-management/gitolite {-        };-        inherit (gnome3) gitg;-        giv = callPackage ../applications/graphics/giv {-          pcre = pcre.override {-            unicodeSupport = true;-          };-        };-        gmrun = callPackage ../applications/misc/gmrun {-        };-        gnucash = callPackage ../applications/office/gnucash {-          inherit (gnome2) libgnomeui-          libgtkhtml gtkhtml libbonoboui-          libgnomeprint libglade-          libart_lgpl;-          gconf = gnome2.GConf;-          guile = guile_1_8;-          slibGuile = slibGuile.override {-            scheme = guile_1_8;-          };-          goffice = goffice_0_8;-        };-        goffice_0_8 = callPackage ../desktops/gnome-3/3.10/misc/goffice/0.8.nix {-          inherit (gnome2) libglade-          libgnomeui;-          gconf = gnome2.GConf;-          libart = gnome2.libart_lgpl;-        };-        ideas = recurseIntoAttrs (callPackage ../applications/editors/idea {-        } // callPackage ../applications/editors/idea/pycharm.nix {-        });-        libquvi = callPackage ../applications/video/quvi/library.nix {-        };-        mi2ly = callPackage ../applications/audio/mi2ly {-        };-        praat = callPackage ../applications/audio/praat {-        };-        quvi = callPackage ../applications/video/quvi/tool.nix {-        };-        quvi_scripts = callPackage ../applications/video/quvi/scripts.nix {-        };-        qjackctl = callPackage ../applications/audio/qjackctl {-        };-        gkrellm = callPackage ../applications/misc/gkrellm {-        };-        gmu = callPackage ../applications/audio/gmu {-        };-        gnash = callPackage ../applications/video/gnash {-          inherit (gnome) gtkglext;-        };-        gnome_mplayer = callPackage ../applications/video/gnome-mplayer {-          inherit (gnome) GConf;-        };-        gnumeric = callPackage ../applications/office/gnumeric {-          inherit (gnome3) goffice-          gnome_icon_theme;-        };-        gnunet = callPackage ../applications/networking/p2p/gnunet {-          libgcrypt = libgcrypt_1_6;-        };-        gnunet_svn = lowPrio (callPackage ../applications/networking/p2p/gnunet/svn.nix {-          libgcrypt = libgcrypt_1_6;-        });-        gocr = callPackage ../applications/graphics/gocr {-        };-        gobby5 = callPackage ../applications/editors/gobby {-          inherit (gnome) gtksourceview;-        };-        gphoto2 = callPackage ../applications/misc/gphoto2 {-        };-        gphoto2fs = builderDefsPackage ../applications/misc/gphoto2/gphotofs.nix {-          inherit libgphoto2 fuse-          pkgconfig glib libtool;-        };-        graphicsmagick = callPackage ../applications/graphics/graphicsmagick {-        };-        graphicsmagick_q16 = callPackage ../applications/graphics/graphicsmagick {-          quantumdepth = 16;-        };-        graphicsmagick137 = callPackage ../applications/graphics/graphicsmagick/1.3.7.nix {-          libpng = libpng12;-        };-        gtkpod = callPackage ../applications/audio/gtkpod {-          inherit (gnome) libglade;-        };-        jbidwatcher = callPackage ../applications/misc/jbidwatcher {-          java = if stdenv.isLinux-            then jre-            else jdk;-        };-        qrdecode = builderDefsPackage (import ../tools/graphics/qrdecode) {-          libpng = libpng12;-          opencv = opencv_2_1;-        };-        qrencode = callPackage ../tools/graphics/qrencode {-        };-        gecko_mediaplayer = callPackage ../applications/networking/browsers/mozilla-plugins/gecko-mediaplayer {-          inherit (gnome) GConf;-          browser = firefox;-        };-        geeqie = callPackage ../applications/graphics/geeqie {-        };-        gigedit = callPackage ../applications/audio/gigedit {-        };-        gqview = callPackage ../applications/graphics/gqview {-        };-        gmpc = callPackage ../applications/audio/gmpc {-        };-        gmtk = callPackage ../applications/networking/browsers/mozilla-plugins/gmtk {-          inherit (gnome) GConf;-        };-        googleearth = callPackage_i686 ../applications/misc/googleearth {-        };-        google_talk_plugin = callPackage ../applications/networking/browsers/mozilla-plugins/google-talk-plugin {-          libpng = libpng12;-        };-        gosmore = builderDefsPackage ../applications/misc/gosmore {-          inherit fetchsvn curl pkgconfig-          libxml2 gtk;-        };-        gpsbabel = callPackage ../applications/misc/gpsbabel {-        };-        gpscorrelate = callPackage ../applications/misc/gpscorrelate {-        };-        gpsd = callPackage ../servers/gpsd {-        };-        guitone = callPackage ../applications/version-management/guitone {-        };-        gv = callPackage ../applications/misc/gv {-        };-        guvcview = callPackage ../os-specific/linux/guvcview {-        };-        hello = callPackage ../applications/misc/hello/ex-2 {-        };-        herbstluftwm = callPackage ../applications/window-managers/herbstluftwm {-        };-        hexchat = callPackage ../applications/networking/irc/hexchat {-        };-        hexedit = callPackage ../applications/editors/hexedit {-        };-        hipchat = callPackage ../applications/networking/instant-messengers/hipchat {-        };-        homebank = callPackage ../applications/office/homebank {-        };-        htmldoc = callPackage ../applications/misc/htmldoc {-          fltk = fltk13;-        };-        hugin = callPackage ../applications/graphics/hugin {-        };-        hydrogen = callPackage ../applications/audio/hydrogen {-        };-        i3 = callPackage ../applications/window-managers/i3 {-        };-        i3lock = callPackage ../applications/window-managers/i3/lock.nix {-          inherit (xorg) libxkbfile;-          cairo = cairo.override {-            xcbSupport = true;-          };-        };-        i3minator = callPackage ../tools/misc/i3minator {-        };-        i3status = callPackage ../applications/window-managers/i3/status.nix {-        };-        i810switch = callPackage ../os-specific/linux/i810switch {-        };-        icewm = callPackage ../applications/window-managers/icewm {-        };-        id3v2 = callPackage ../applications/audio/id3v2 {-        };-        ifenslave = callPackage ../os-specific/linux/ifenslave {-        };-        ii = callPackage ../applications/networking/irc/ii {-        };-        ike = callPackage ../applications/ike {-        };-        ikiwiki = callPackage ../applications/misc/ikiwiki {-          inherit (perlPackages) TextMarkdown-          URI HTMLParser HTMLScrubber-          HTMLTemplate TimeDate CGISession-          DBFile CGIFormBuilder-          LocaleGettext RpcXML XMLSimple-          PerlMagick YAML YAMLLibYAML-          HTMLTree Filechdir-          AuthenPassphrase-          NetOpenIDConsumer-          LWPxParanoidAgent CryptSSLeay;-        };-        imagemagick = callPackage ../applications/graphics/ImageMagick {-          tetex = null;-          librsvg = null;-        };-        imagemagickBig = lowPrio (callPackage ../applications/graphics/ImageMagick {-        });-        impressive = callPackage ../applications/office/impressive {-          inherit (pythonPackages) pyopengl;-        };-        inferno = callPackage_i686 ../applications/inferno {-        };-        inkscape = callPackage ../applications/graphics/inkscape {-          inherit (pythonPackages) lxml;-          lcms = lcms2;-        };-        ion3 = callPackage ../applications/window-managers/ion-3 {-          lua = lua5;-        };-        ipe = callPackage ../applications/graphics/ipe {-        };-        iptraf = callPackage ../applications/networking/iptraf {-        };-        irssi = callPackage ../applications/networking/irc/irssi {-          stdenv = if stdenv.isDarwin-            then stdenvAdapters.overrideGCC stdenv gccApple-            else stdenv;-        };-        irssi_fish = callPackage ../applications/networking/irc/irssi/fish {-        };-        irssi_otr = callPackage ../applications/networking/irc/irssi/otr {-        };-        bip = callPackage ../applications/networking/irc/bip {-        };-        jack_capture = callPackage ../applications/audio/jack-capture {-        };-        jack_oscrolloscope = callPackage ../applications/audio/jack-oscrolloscope {-        };-        jack_rack = callPackage ../applications/audio/jack-rack {-        };-        jackmeter = callPackage ../applications/audio/jackmeter {-        };-        jalv = callPackage ../applications/audio/jalv {-        };-        jedit = callPackage ../applications/editors/jedit {-        };-        jigdo = callPackage ../applications/misc/jigdo {-        };-        jitsi = callPackage ../applications/networking/instant-messengers/jitsi {-        };-        joe = callPackage ../applications/editors/joe {-        };-        jbrout = callPackage ../applications/graphics/jbrout {-          inherit (pythonPackages) lxml;-        };-        jwm = callPackage ../applications/window-managers/jwm {-        };-        k3d = callPackage ../applications/graphics/k3d {-          inherit (pkgs.gnome2) gtkglext;-        };-        keepnote = callPackage ../applications/office/keepnote {-          pygtk = pyGtkGlade;-        };-        kermit = callPackage ../tools/misc/kermit {-        };-        keymon = callPackage ../applications/video/key-mon {-        };-        kino = callPackage ../applications/video/kino {-          inherit (gnome) libglade;-        };-        lame = callPackage ../applications/audio/lame {-        };-        larswm = callPackage ../applications/window-managers/larswm {-        };-        lash = callPackage ../applications/audio/lash {-        };-        ladspaH = callPackage ../applications/audio/ladspa-plugins/ladspah.nix {-        };-        ladspaPlugins = callPackage ../applications/audio/ladspa-plugins {-          fftw = fftwSinglePrec;-        };-        caps = callPackage ../applications/audio/caps {-        };-        lastwatch = callPackage ../applications/audio/lastwatch {-        };-        lastfmsubmitd = callPackage ../applications/audio/lastfmsubmitd {-        };-        lbdb = callPackage ../tools/misc/lbdb {-        };-        lci = callPackage ../applications/science/logic/lci {-        };-        ldcpp = callPackage ../applications/networking/p2p/ldcpp {-          inherit (gnome) libglade;-        };-        librecad = callPackage ../applications/misc/librecad {-        };-        librecad2 = callPackage ../applications/misc/librecad/2.0.nix {-        };-        libreoffice = callPackage ../applications/office/libreoffice {-          inherit (perlPackages) ArchiveZip-          CompressZlib;-          inherit (gnome) GConf ORBit2-          gnome_vfs;-          zip = zip.override {-            enableNLS = false;-          };-          boost = boost155;-          jdk = openjdk;-          fontsConf = makeFontsConf {-            fontDirectories = [-              freefont_ttf-              xorg.fontmiscmisc-              xorg.fontbhttf-            ];-          };-          clucene_core = clucene_core_2;-          lcms = lcms2;-          harfbuzz = harfbuzz.override {-            withIcu = true;-            withGraphite2 = true;-          };-        };-        liferea = callPackage ../applications/networking/newsreaders/liferea {-        };-        lingot = callPackage ../applications/audio/lingot {-          inherit (gnome) libglade;-        };-        links = callPackage ../applications/networking/browsers/links {-        };-        ledger = callPackage ../applications/office/ledger/2.6.3.nix {-        };-        ledger3 = callPackage ../applications/office/ledger/3.0.nix {-        };-        lighttable = callPackage ../applications/editors/lighttable {-        };-        links2 = callPackage ../applications/networking/browsers/links2 {-        };-        linphone = callPackage ../applications/networking/instant-messengers/linphone rec {-          inherit (gnome) libglade;-          libexosip = libexosip_3;-          libosip = libosip_3;-        };-        linuxsampler = callPackage ../applications/audio/linuxsampler {-          bison = bison2;-        };-        llpp = callPackage ../applications/misc/llpp {-          inherit (ocamlPackages) lablgl;-        };-        lmms = callPackage ../applications/audio/lmms {-        };-        lrzsz = callPackage ../tools/misc/lrzsz {-        };-        luminanceHDR = callPackage ../applications/graphics/luminance-hdr {-        };-        lxdvdrip = callPackage ../applications/video/lxdvdrip {-        };-        handbrake = callPackage ../applications/video/handbrake {-        };-        lynx = callPackage ../applications/networking/browsers/lynx {-        };-        lyx = callPackage ../applications/misc/lyx {-        };-        makeself = callPackage ../applications/misc/makeself {-        };-        matchbox = callPackage ../applications/window-managers/matchbox {-        };-        mcpp = callPackage ../development/compilers/mcpp {-        };-        mda_lv2 = callPackage ../applications/audio/mda-lv2 {-        };-        meld = callPackage ../applications/version-management/meld {-          inherit (gnome) scrollkeeper;-          pygtk = pyGtkGlade;-        };-        mcomix = callPackage ../applications/graphics/mcomix {-        };-        mercurial = callPackage ../applications/version-management/mercurial {-          inherit (pythonPackages) curses-          docutils;-          guiSupport = false;-        };-        mercurialFull = appendToName "full" (pkgs.mercurial.override {-          guiSupport = true;-        });-        merkaartor = callPackage ../applications/misc/merkaartor {-        };-        meshlab = callPackage ../applications/graphics/meshlab {-        };-        mhwaveedit = callPackage ../applications/audio/mhwaveedit {-        };-        mid2key = callPackage ../applications/audio/mid2key {-        };-        midori = callPackage ../applications/networking/browsers/midori {-        };-        midoriWrapper = wrapFirefox {-          browser = midori;-          browserName = "midori";-          desktopName = "Midori";-          icon = "${midori}/share/icons/hicolor/22x22/apps/midori.png";-        };-        mikmod = callPackage ../applications/audio/mikmod {-        };-        minicom = callPackage ../tools/misc/minicom {-        };-        minimodem = callPackage ../applications/audio/minimodem {-        };-        minidjvu = callPackage ../applications/graphics/minidjvu {-        };-        mirage = callPackage ../applications/graphics/mirage {-        };-        mixxx = callPackage ../applications/audio/mixxx {-          inherit (vamp) vampSDK;-        };-        mmex = callPackage ../applications/office/mmex {-        };-        moc = callPackage ../applications/audio/moc {-        };-        monkeysAudio = callPackage ../applications/audio/monkeys-audio {-        };-        monodevelop = callPackage ../applications/editors/monodevelop {-          inherit (gnome) gnome_vfs-          libbonobo libglade libgnome-          GConf;-          mozilla = firefox;-          gtksharp = gtksharp2;-        };-        monodoc = callPackage ../applications/editors/monodoc {-          gtksharp = gtksharp1;-        };-        monotone = callPackage ../applications/version-management/monotone {-          lua = lua5;-          boost = boost149;-        };-        monotoneViz = builderDefsPackage (import ../applications/version-management/monotone-viz/mtn-head.nix) {-          inherit ocaml graphviz pkgconfig-          autoconf automake libtool glib-          gtk;-          inherit (ocamlPackages) lablgtk;-          inherit (gnome) libgnomecanvas;-        };-        mopidy = callPackage ../applications/audio/mopidy {-        };-        mopidy-spotify = callPackage ../applications/audio/mopidy-spotify {-        };-        mopidy-moped = callPackage ../applications/audio/mopidy-moped {-        };-        mozilla = callPackage ../applications/networking/browsers/mozilla {-          inherit (gnome) libIDL;-        };-        mozplugger = builderDefsPackage (import ../applications/networking/browsers/mozilla-plugins/mozplugger) {-          inherit firefox;-          inherit (xlibs) libX11 xproto;-        };-        easytag = callPackage ../applications/audio/easytag {-        };-        mp3info = callPackage ../applications/audio/mp3info {-        };-        mp3splt = callPackage ../applications/audio/mp3splt {-        };-        mpc123 = callPackage ../applications/audio/mpc123 {-        };-        mpg123 = callPackage ../applications/audio/mpg123 {-        };-        mpg321 = callPackage ../applications/audio/mpg321 {-        };-        mpc_cli = callPackage ../applications/audio/mpc {-        };-        ncmpc = callPackage ../applications/audio/ncmpc {-        };-        ncmpcpp = callPackage ../applications/audio/ncmpcpp {-        };-        normalize = callPackage ../applications/audio/normalize {-        };-        mplayer = callPackage ../applications/video/mplayer {-          pulseSupport = config.pulseaudio or false;-          vdpauSupport = config.mplayer.vdpauSupport or false;-        };-        mplayer2 = callPackage ../applications/video/mplayer2 {-          ffmpeg = libav_9;-        };-        MPlayerPlugin = browser:-        import ../applications/networking/browsers/mozilla-plugins/mplayerplug-in {-          inherit browser;-          inherit fetchurl stdenv-          pkgconfig gettext;-          inherit (xlibs) libXpm;-        };-        mpv = callPackage ../applications/video/mpv {-          lua = lua5_1;-          bs2bSupport = true;-          quviSupport = true;-          cacaSupport = true;-        };-        mrxvt = callPackage ../applications/misc/mrxvt {-        };-        multisync = callPackage ../applications/misc/multisync {-          inherit (gnome) ORBit2 libbonobo-          libgnomeui GConf;-        };-        mumble = callPackage ../applications/networking/mumble {-          avahi = avahi.override {-            withLibdnssdCompat = true;-          };-          jackSupport = config.mumble.jackSupport or false;-          speechdSupport = config.mumble.speechdSupport or false;-        };-        murmur = callPackage ../applications/networking/mumble/murmur.nix {-          avahi = avahi.override {-            withLibdnssdCompat = true;-          };-          iceSupport = config.murmur.iceSupport or true;-        };-        mutt = callPackage ../applications/networking/mailreaders/mutt {-        };-        pcmanfm = callPackage ../applications/misc/pcmanfm {-        };-        ruby_gpgme = callPackage ../development/libraries/ruby_gpgme {-          ruby = ruby19;-          hoe = rubyLibs.hoe;-        };-        ruby_ncursesw_sup = callPackage ../development/libraries/ruby_ncursesw_sup {-        };-        shotcut = callPackage ../applications/video/shotcut {-          mlt = mlt-qt5;-        };-        smplayer = callPackage ../applications/video/smplayer {-        };-        sup = with rubyLibs; callPackage ../applications/networking/mailreaders/sup {-          ruby = ruby19.override {-            cursesSupport = true;-          };-          inherit gettext highline iconv-          locale lockfile text trollop-          xapian_ruby which;-          rmail_sup = "";-          unicode = "";-          bundler = pkgs.lib.overrideDerivation pkgs.rubyLibs.bundler (oldAttrs:-          { dontPatchShebangs = 1; });-          chronic = chronic;-          gpgme = ruby_gpgme;-          mime_types = mime_types;-          ncursesw_sup = ruby_ncursesw_sup;-          rake = rake;-        };-        synfigstudio = callPackage ../applications/graphics/synfigstudio {-          fontsConf = makeFontsConf {-            fontDirectories = [-              freefont_ttf-            ];-          };-        };-        sxhkd = callPackage ../applications/window-managers/sxhkd {-        };-        msmtp = callPackage ../applications/networking/msmtp {-        };-        imapfilter = callPackage ../applications/networking/mailreaders/imapfilter.nix {-          lua = lua5;-        };-        mupdf = callPackage ../applications/misc/mupdf {-        };-        mypaint = callPackage ../applications/graphics/mypaint {-        };-        mythtv = callPackage ../applications/video/mythtv {-        };-        tvtime = callPackage ../applications/video/tvtime {-          kernel = linux;-        };-        nano = callPackage ../applications/editors/nano {-        };-        navipowm = callPackage ../applications/misc/navipowm {-        };-        navit = callPackage ../applications/misc/navit {-        };-        netbeans = callPackage ../applications/editors/netbeans {-        };-        ncdu = callPackage ../tools/misc/ncdu {-        };-        ncdc = callPackage ../applications/networking/p2p/ncdc {-        };-        nedit = callPackage ../applications/editors/nedit {-          motif = lesstif;-        };-        netsurfBrowser = netsurf.browser;-        netsurf = recurseIntoAttrs (import ../applications/networking/browsers/netsurf {-          inherit pkgs;-        });-        notmuch = callPackage ../applications/networking/mailreaders/notmuch {-          emacs = null;-        };-        nova = callPackage ../applications/virtualization/nova {-        };-        novaclient = callPackage ../applications/virtualization/nova/client.nix {-        };-        nspluginwrapper = callPackage ../applications/networking/browsers/mozilla-plugins/nspluginwrapper {-        };-        nvi = callPackage ../applications/editors/nvi {-        };-        nvpy = callPackage ../applications/editors/nvpy {-        };-        obconf = callPackage ../tools/X11/obconf {-          inherit (gnome) libglade;-        };-        ocrad = callPackage ../applications/graphics/ocrad {-        };-        offrss = callPackage ../applications/networking/offrss {-        };-        ogmtools = callPackage ../applications/video/ogmtools {-        };-        omxplayer = callPackage ../applications/video/omxplayer {-        };-        oneteam = callPackage ../applications/networking/instant-messengers/oneteam {-        };-        openbox = callPackage ../applications/window-managers/openbox {-        };-        openimageio = callPackage ../applications/graphics/openimageio {-        };-        openjump = callPackage ../applications/misc/openjump {-        };-        openscad = callPackage ../applications/graphics/openscad {-        };-        opera = callPackage ../applications/networking/browsers/opera {-          inherit (pkgs.kde4) kdelibs;-        };-        opusfile = callPackage ../applications/audio/opusfile {-        };-        opusTools = callPackage ../applications/audio/opus-tools {-        };-        pamixer = callPackage ../applications/audio/pamixer {-        };-        pan = callPackage ../applications/networking/newsreaders/pan {-          spellChecking = false;-        };-        panotools = callPackage ../applications/graphics/panotools {-        };-        pavucontrol = callPackage ../applications/audio/pavucontrol {-        };-        paraview = callPackage ../applications/graphics/paraview {-        };-        pencil = callPackage ../applications/graphics/pencil {-        };-        petrifoo = callPackage ../applications/audio/petrifoo {-          inherit (gnome) libgnomecanvas;-        };-        pdftk = callPackage ../tools/typesetting/pdftk {-        };-        pdfgrep = callPackage ../tools/typesetting/pdfgrep {-        };-        pianobar = callPackage ../applications/audio/pianobar {-        };-        pianobooster = callPackage ../applications/audio/pianobooster {-        };-        picard = callPackage ../applications/audio/picard {-        };-        picocom = callPackage ../tools/misc/picocom {-        };-        pidgin = callPackage ../applications/networking/instant-messengers/pidgin {-          openssl = if config.pidgin.openssl or true-            then openssl-            else null;-          gnutls = if config.pidgin.gnutls or false-            then gnutls-            else null;-          libgcrypt = if config.pidgin.gnutls or false-            then libgcrypt-            else null;-          startupnotification = libstartup_notification;-        };-        pidginlatex = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex {-          imagemagick = imagemagickBig;-        };-        pidginlatexSF = builderDefsPackage (import ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/pidgin-latex-sf.nix) {-          inherit pkgconfig pidgin texLive-          imagemagick which glib gtk;-        };-        pidginmsnpecan = callPackage ../applications/networking/instant-messengers/pidgin-plugins/msn-pecan {-        };-        pidginotr = callPackage ../applications/networking/instant-messengers/pidgin-plugins/otr {-        };-        pidginsipe = callPackage ../applications/networking/instant-messengers/pidgin-plugins/sipe {-        };-        toxprpl = callPackage ../applications/networking/instant-messengers/pidgin-plugins/tox-prpl {-        };-        pinfo = callPackage ../applications/misc/pinfo {-        };-        pinta = callPackage ../applications/graphics/pinta {-          gtksharp = gtksharp2;-        };-        pommed = callPackage ../os-specific/linux/pommed {-          inherit (xorg) libXpm;-        };-        potrace = callPackage ../applications/graphics/potrace {-        };-        posterazor = callPackage ../applications/misc/posterazor {-        };-        pqiv = callPackage ../applications/graphics/pqiv {-        };-        qiv = callPackage ../applications/graphics/qiv {-        };-        procmail = callPackage ../applications/misc/procmail {-        };-        pstree = callPackage ../applications/misc/pstree {-        };-        pulseview = callPackage ../applications/science/electronics/pulseview {-        };-        puredata = callPackage ../applications/audio/puredata {-        };-        pythonmagick = callPackage ../applications/graphics/PythonMagick {-        };-        qbittorrent = callPackage ../applications/networking/p2p/qbittorrent {-        };-        eiskaltdcpp = callPackage ../applications/networking/p2p/eiskaltdcpp {-        };-        qemu = callPackage ../applications/virtualization/qemu {-        };-        qmmp = callPackage ../applications/audio/qmmp {-        };-        qsampler = callPackage ../applications/audio/qsampler {-        };-        qsynth = callPackage ../applications/audio/qsynth {-        };-        qtpfsgui = callPackage ../applications/graphics/qtpfsgui {-        };-        qtractor = callPackage ../applications/audio/qtractor {-        };-        quodlibet = callPackage ../applications/audio/quodlibet {-          inherit (pythonPackages) mutagen;-        };-        quodlibet-with-gst-plugins = callPackage ../applications/audio/quodlibet {-          inherit (pythonPackages) mutagen;-          withGstPlugins = true;-          gst_plugins_bad = null;-        };-        rakarrack = callPackage ../applications/audio/rakarrack {-          inherit (xorg) libXpm libXft;-          fltk = fltk13;-        };-        rapcad = callPackage ../applications/graphics/rapcad {-        };-        rapidsvn = callPackage ../applications/version-management/rapidsvn {-        };-        ratpoison = callPackage ../applications/window-managers/ratpoison {-        };-        rawtherapee = callPackage ../applications/graphics/rawtherapee {-          fftw = fftwSinglePrec;-        };-        rcs = callPackage ../applications/version-management/rcs {-        };-        rdesktop = callPackage ../applications/networking/remote/rdesktop {-        };-        recode = callPackage ../tools/text/recode {-        };-        retroshare = callPackage ../applications/networking/p2p/retroshare {-          qt = qt4;-        };-        retroshare06 = lowPrio (callPackage ../applications/networking/p2p/retroshare/0.6.nix {-          qt = qt4;-        });-        rsync = callPackage ../applications/networking/sync/rsync {-          enableACLs = !(stdenv.isDarwin || stdenv.isSunOS || stdenv.isFreeBSD);-          enableCopyDevicesPatch = config.rsync.enableCopyDevicesPatch or false;-        };-        rtl-sdr = callPackage ../applications/misc/rtl-sdr {-        };-        rubyripper = callPackage ../applications/audio/rubyripper {-        };-        rxvt = callPackage ../applications/misc/rxvt {-        };-        rxvt_unicode = callPackage ../applications/misc/rxvt_unicode {-          perlSupport = true;-          gdkPixbufSupport = true;-          unicode3Support = true;-        };-        sakura = callPackage ../applications/misc/sakura {-          inherit (gnome) vte;-        };-        sbagen = callPackage ../applications/misc/sbagen {-        };-        scite = callPackage ../applications/editors/scite {-        };-        scribus = callPackage ../applications/office/scribus {-          inherit (gnome) libart_lgpl;-        };-        seafile-client = callPackage ../applications/networking/seafile-client {-        };-        seeks = callPackage ../tools/networking/p2p/seeks {-          opencv = opencv_2_1;-        };-        seg3d = callPackage ../applications/graphics/seg3d {-          wxGTK = wxGTK28.override {-            unicode = false;-          };-        };-        seq24 = callPackage ../applications/audio/seq24 {-        };-        setbfree = callPackage ../applications/audio/setbfree {-        };-        sflphone = callPackage ../applications/networking/instant-messengers/sflphone {-          gtk = gtk3;-        };-        siproxd = callPackage ../applications/networking/siproxd {-        };-        skype = callPackage_i686 ../applications/networking/instant-messengers/skype {-        };-        skype4pidgin = callPackage ../applications/networking/instant-messengers/pidgin-plugins/skype4pidgin {-        };-        skype_call_recorder = callPackage ../applications/networking/instant-messengers/skype-call-recorder {-        };-        slrn = callPackage ../applications/networking/newsreaders/slrn {-        };-        spideroak = callPackage ../applications/networking/spideroak {-        };-        ssvnc = callPackage ../applications/networking/remote/ssvnc {-        };-        st = callPackage ../applications/misc/st {-          conf = config.st.conf or null;-        };-        linuxstopmotion = callPackage ../applications/video/linuxstopmotion {-        };-        sweethome3d = recurseIntoAttrs (callPackage ../applications/misc/sweethome3d {-        } // callPackage ../applications/misc/sweethome3d/editors.nix {-          sweethome3dApp = sweethome3d.application;-        });-        sxiv = callPackage ../applications/graphics/sxiv {-        };-        bittorrentSync = callPackage ../applications/networking/bittorrentsync {-        };-        dropbox = callPackage ../applications/networking/dropbox {-        };-        dropbox-cli = callPackage ../applications/networking/dropbox-cli {-        };-        lightdm = callPackage ../applications/display-managers/lightdm {-        };-        lightdm_gtk_greeter = callPackage ../applications/display-managers/lightdm-gtk-greeter {-        };-        slic3r = callPackage ../applications/misc/slic3r {-          perlPackages = perl514Packages;-          perl = perl514;-        };-        curaengine = callPackage ../applications/misc/curaengine {-        };-        cura = callPackage ../applications/misc/cura {-        };-        printrun = callPackage ../applications/misc/printrun {-        };-        slim = callPackage ../applications/display-managers/slim {-          libpng = libpng12;-        };-        smartdeblur = callPackage ../applications/graphics/smartdeblur {-        };-        snd = callPackage ../applications/audio/snd {-        };-        shntool = callPackage ../applications/audio/shntool {-        };-        sonic_visualiser = callPackage ../applications/audio/sonic-visualiser {-          inherit (pkgs.vamp) vampSDK;-          inherit (pkgs.xlibs) libX11;-          fftw = pkgs.fftwSinglePrec;-        };-        sox = callPackage ../applications/misc/audio/sox {-        };-        soxr = callPackage ../applications/misc/audio/soxr {-        };-        spotify = callPackage ../applications/audio/spotify {-          inherit (gnome) GConf;-          libpng = libpng12;-        };-        libspotify = callPackage ../development/libraries/libspotify {-          apiKey = config.libspotify.apiKey or null;-        };-        stalonetray = callPackage ../applications/window-managers/stalonetray {-        };-        stp = callPackage ../applications/science/logic/stp {-        };-        stumpwm = lispPackages.stumpwm;-        sublime = callPackage ../applications/editors/sublime {-        };-        sublime3 = lowPrio (callPackage ../applications/editors/sublime3 {-        });-        subversion = callPackage ../applications/version-management/subversion/default.nix {-          bdbSupport = true;-          httpServer = false;-          httpSupport = true;-          pythonBindings = false;-          perlBindings = false;-          javahlBindings = false;-          saslSupport = false;-          httpd = apacheHttpd;-          sasl = cyrus_sasl;-        };-        subversionClient = appendToName "client" (subversion.override {-          bdbSupport = false;-          perlBindings = true;-          pythonBindings = true;-        });-        surf = callPackage ../applications/misc/surf {-          webkit = webkitgtk2;-        };-        svk = perlPackages.SVK;-        swh_lv2 = callPackage ../applications/audio/swh-lv2 {-        };-        sylpheed = callPackage ../applications/networking/mailreaders/sylpheed {-          sslSupport = true;-          gpgSupport = true;-        };-        symlinks = callPackage ../tools/system/symlinks {-        };-        syncthing = callPackage ../applications/networking/syncthing {-        };-        synergy = callPackage ../applications/misc/synergy {-        };-        tabbed = callPackage ../applications/window-managers/tabbed {-        };-        tahoelafs = callPackage ../tools/networking/p2p/tahoe-lafs {-          inherit (pythonPackages) twisted-          foolscap simplejson nevow zfec-          pycryptopp sqlite3 darcsver-          setuptoolsTrial setuptoolsDarcs-          numpy pyasn1 mock;-        };-        tailor = builderDefsPackage (import ../applications/version-management/tailor) {-          inherit makeWrapper python;-        };-        tangogps = callPackage ../applications/misc/tangogps {-          gconf = gnome.GConf;-        };-        teamspeak_client = callPackage ../applications/networking/instant-messengers/teamspeak/client.nix {-        };-        teamspeak_server = callPackage ../applications/networking/instant-messengers/teamspeak/server.nix {-        };-        taskjuggler = callPackage ../applications/misc/taskjuggler {-        };-        taskwarrior = callPackage ../applications/misc/taskwarrior {-        };-        taskserver = callPackage ../servers/misc/taskserver {-        };-        telegram-cli = callPackage ../applications/networking/instant-messengers/telegram-cli/default.nix {-        };-        telepathy_gabble = callPackage ../applications/networking/instant-messengers/telepathy/gabble {-        };-        telepathy_haze = callPackage ../applications/networking/instant-messengers/telepathy/haze {-        };-        telepathy_logger = callPackage ../applications/networking/instant-messengers/telepathy/logger {-        };-        telepathy_mission_control = callPackage ../applications/networking/instant-messengers/telepathy/mission-control {-        };-        telepathy_rakia = callPackage ../applications/networking/instant-messengers/telepathy/rakia {-        };-        telepathy_salut = callPackage ../applications/networking/instant-messengers/telepathy/salut {-        };-        terminator = callPackage ../applications/misc/terminator {-          vte = gnome.vte.override {-            pythonSupport = true;-          };-          inherit (pythonPackages) notify;-        };-        tesseract = callPackage ../applications/graphics/tesseract {-        };-        thinkingRock = callPackage ../applications/misc/thinking-rock {-        };-        thunderbird = callPackage ../applications/networking/mailreaders/thunderbird {-          inherit (gnome) libIDL;-          inherit (pythonPackages) pysqlite;-          libpng = libpng_apng;-        };-        thunderbird-bin = callPackage ../applications/networking/mailreaders/thunderbird-bin {-          gconf = pkgs.gnome.GConf;-          inherit (pkgs.gnome) libgnome-          libgnomeui;-          inherit (pkgs.xlibs) libX11-          libXScrnSaver libXext-          libXinerama libXrender libXt;-        };-        tig = gitAndTools.tig;-        timidity = callPackage ../tools/misc/timidity {-        };-        tint2 = callPackage ../applications/misc/tint2 {-        };-        tkcvs = callPackage ../applications/version-management/tkcvs {-        };-        tla = callPackage ../applications/version-management/arch {-        };-        todo-txt-cli = callPackage ../applications/office/todo.txt-cli {-        };-        torchat = callPackage ../applications/networking/instant-messengers/torchat {-          wrapPython = pythonPackages.wrapPython;-        };-        toxic = callPackage ../applications/networking/instant-messengers/toxic {-        };-        transcode = callPackage ../applications/audio/transcode {-        };-        transmission = callPackage ../applications/networking/p2p/transmission {-        };-        transmission_gtk = transmission.override {-          enableGTK3 = true;-        };-        transmission_remote_gtk = callPackage ../applications/networking/p2p/transmission-remote-gtk {-        };-        trayer = callPackage ../applications/window-managers/trayer {-        };-        tree = callPackage ../tools/system/tree {-        };-        tribler = callPackage ../applications/networking/p2p/tribler {-        };-        twister = callPackage ../applications/networking/p2p/twister {-        };-        twmn = callPackage ../applications/misc/twmn {-        };-        twinkle = callPackage ../applications/networking/instant-messengers/twinkle {-        };-        umurmur = callPackage ../applications/networking/umurmur {-        };-        unison = callPackage ../applications/networking/sync/unison {-          inherit (ocamlPackages) lablgtk;-          enableX11 = config.unison.enableX11 or true;-        };-        uucp = callPackage ../tools/misc/uucp {-        };-        uvccapture = callPackage ../applications/video/uvccapture {-        };-        uwimap = callPackage ../tools/networking/uwimap {-        };-        uzbl = callPackage ../applications/networking/browsers/uzbl {-          webkit = webkitgtk2;-        };-        uTox = callPackage ../applications/networking/instant-messengers/utox {-        };-        vanitygen = callPackage ../applications/misc/vanitygen {-        };-        vbindiff = callPackage ../applications/editors/vbindiff {-        };-        vcprompt = callPackage ../applications/version-management/vcprompt {-        };-        vdpauinfo = callPackage ../tools/X11/vdpauinfo {-        };-        veracity = callPackage ../applications/version-management/veracity {-        };-        viewMtn = builderDefsPackage (import ../applications/version-management/viewmtn/0.10.nix) {-          inherit monotone cheetahTemplate-          highlight ctags makeWrapper-          graphviz which python;-          flup = pythonPackages.flup;-        };-        vim = callPackage ../applications/editors/vim {-        };-        macvim = callPackage ../applications/editors/vim/macvim.nix {-        };-        vimHugeX = vim_configurable;-        vim_configurable = callPackage ../applications/editors/vim/configurable.nix {-          inherit (pkgs) fetchurl fetchhg-          stdenv ncurses pkgconfig gettext-          composableDerivation lib config-          glib gtk python perl tcl ruby;-          inherit (pkgs.xlibs) libX11-          libXext libSM libXpm libXt-          libXaw libXau libXmu libICE;-          features = "huge";-          lua = pkgs.lua5;-          gui = config.vim.gui or "auto";-          flags = [ "python" "X11" ];-          inherit stdenvAdapters gccApple;-        };-        vimNox = lowPrio (vim_configurable.override {-          source = "vim-nox";-        });-        qvim = lowPrio (callPackage ../applications/editors/vim/qvim.nix {-          inherit (pkgs) fetchgit stdenv-          ncurses pkgconfig gettext-          composableDerivation lib config-          python perl tcl ruby qt4;-          inherit (pkgs.xlibs) libX11-          libXext libSM libXpm libXt-          libXaw libXau libXmu libICE;-          inherit (pkgs) stdenvAdapters-          gccApple;-          features = "huge";-          lua = pkgs.lua5;-          flags = [ "python" "X11" ];-        });-        vimpc = callPackage ../applications/audio/vimpc {-        };-        virtviewer = callPackage ../applications/virtualization/virt-viewer {-          gtkvnc = gtkvnc.override {-            enableGTK3 = true;-          };-          spice_gtk = spice_gtk.override {-            enableGTK3 = true;-          };-        };-        virtmanager = callPackage ../applications/virtualization/virt-manager {-          inherit (gnome) gnome_python;-          vte = gnome3.vte;-          dconf = gnome3.dconf;-          gtkvnc = gtkvnc.override {-            enableGTK3 = true;-          };-          spice_gtk = spice_gtk.override {-            enableGTK3 = true;-          };-        };-        virtinst = callPackage ../applications/virtualization/virtinst {-        };-        virtualgl = callPackage ../tools/X11/virtualgl {-        };-        bumblebee = callPackage ../tools/X11/bumblebee {-        };-        vkeybd = callPackage ../applications/audio/vkeybd {-          inherit (xlibs) libX11;-        };-        vlc = callPackage ../applications/video/vlc {-        };-        vmpk = callPackage ../applications/audio/vmpk {-        };-        vnstat = callPackage ../applications/networking/vnstat {-        };-        vorbisTools = callPackage ../applications/audio/vorbis-tools {-        };-        vue = callPackage ../applications/misc/vue {-          jre = icedtea7_jre;-        };-        vwm = callPackage ../applications/window-managers/vwm {-        };-        vym = callPackage ../applications/misc/vym {-        };-        w3m = callPackage ../applications/networking/browsers/w3m {-          graphicsSupport = false;-        };-        weechat = callPackage ../applications/networking/irc/weechat {-        };-        weechatDevel = lowPrio (callPackage ../applications/networking/irc/weechat/devel.nix {-        });-        weston = callPackage ../applications/window-managers/weston {-        };-        windowmaker = callPackage ../applications/window-managers/windowmaker {-        };-        winswitch = callPackage ../tools/X11/winswitch {-        };-        wings = callPackage ../applications/graphics/wings {-          erlang = erlangR14;-          esdl = esdl.override {-            erlang = erlangR14;-          };-        };-        wmname = callPackage ../applications/misc/wmname {-        };-        wmctrl = callPackage ../tools/X11/wmctrl {-        };-        wmiimenu = import ../applications/window-managers/wmii31 {-          libixp = libixp_for_wmii;-          inherit fetchurl stdenv gawk;-          inherit (xlibs) libX11;-        };-        wmiiSnap = import ../applications/window-managers/wmii {-          libixp = libixp_for_wmii;-          inherit fetchurl stdenv gawk;-          inherit (xlibs) libX11 xextproto-          libXt libXext;-          includeUnpack = config.stdenv.includeUnpack or false;-        };-        wordnet = callPackage ../applications/misc/wordnet {-        };-        wrapChromium = browser:-        wrapFirefox {-          inherit browser;-          browserName = browser.packageName;-          desktopName = "Chromium";-          icon = "${browser}/share/icons/hicolor/48x48/apps/${browser.packageName}.png";-        };-        wrapFirefox = { browser, browserName ? "firefox", desktopName ? "Firefox", icon ? "${browser}/lib/${browser.name}/browser/icons/mozicon128.png", nameSuffix ? "" }:-        let-          cfg = stdenv.lib.attrByPath [-            browserName-          ] { } config;-          enableAdobeFlash = cfg.enableAdobeFlash or false;-          enableGnash = cfg.enableGnash or false;-          in import ../applications/networking/browsers/firefox/wrapper.nix {-            inherit stdenv lib makeWrapper-            makeDesktopItem browser-            browserName desktopName-            nameSuffix icon;-            plugins = assert !(enableGnash && enableAdobeFlash); [-            ] ++ lib.optional enableGnash gnash ++ lib.optional enableAdobeFlash flashplayer ++ lib.optional (cfg.enableDjvu or false) djview4 ++ lib.optional (cfg.enableMPlayer or false) (MPlayerPlugin browser) ++ lib.optional (cfg.enableGeckoMediaPlayer or false) gecko_mediaplayer ++ lib.optional (supportsJDK && (cfg.jre or false && jrePlugin ? mozillaPlugin)) jrePlugin ++ lib.optional (cfg.enableGoogleTalkPlugin or false) google_talk_plugin ++ lib.optional (cfg.enableFriBIDPlugin or false) fribid ++ lib.optional (cfg.enableGnomeExtensions or false) gnome3.gnome_shell;-            libs = [-              gstreamer-              gst_plugins_base-            ] ++ lib.optionals (cfg.enableQuakeLive or false) (with xlibs; [-              stdenv.gcc-              libX11-              libXxf86dga-              libXxf86vm-              libXext-              libXt-              alsaLib-              zlib-            ]);-            gtk_modules = [ libcanberra ];-          };-        x11vnc = callPackage ../tools/X11/x11vnc {-        };-        x2vnc = callPackage ../tools/X11/x2vnc {-        };-        xaos = builderDefsPackage (import ../applications/graphics/xaos) {-          inherit (xlibs) libXt libX11-          libXext xextproto xproto;-          inherit gsl aalib zlib intltool-          gettext perl;-          libpng = libpng12;-        };-        xara = callPackage ../applications/graphics/xara {-        };-        xawtv = callPackage ../applications/video/xawtv {-        };-        xbindkeys = callPackage ../tools/X11/xbindkeys {-        };-        xbmc = callPackage ../applications/video/xbmc {-          ffmpeg = ffmpeg_1;-        };-        xca = callPackage ../applications/misc/xca {-        };-        xcalib = callPackage ../tools/X11/xcalib {-        };-        xcape = callPackage ../tools/X11/xcape {-        };-        xchainkeys = callPackage ../tools/X11/xchainkeys {-        };-        xchat = callPackage ../applications/networking/irc/xchat {-        };-        xchm = callPackage ../applications/misc/xchm {-        };-        xcompmgr = callPackage ../applications/window-managers/xcompmgr {-        };-        compton = callPackage ../applications/window-managers/compton {-        };-        xdaliclock = callPackage ../tools/misc/xdaliclock {-        };-        xdg-user-dirs = callPackage ../tools/X11/xdg-user-dirs {-        };-        xdg_utils = callPackage ../tools/X11/xdg-utils {-        };-        xdotool = callPackage ../tools/X11/xdotool {-        };-        xen = callPackage ../applications/virtualization/xen {-          stdenv = overrideGCC stdenv gcc45;-        };-        xfe = callPackage ../applications/misc/xfe {-          fox = fox_1_6;-        };-        xfig = callPackage ../applications/graphics/xfig {-        };-        xineUI = callPackage ../applications/video/xine-ui {-        };-        xneur_0_13 = callPackage ../applications/misc/xneur {-        };-        xneur_0_8 = callPackage ../applications/misc/xneur/0.8.nix {-        };-        xneur = xneur_0_13;-        gxneur = callPackage ../applications/misc/gxneur {-          inherit (gnome) libglade GConf;-        };-        xournal = callPackage ../applications/graphics/xournal {-          inherit (gnome) libgnomeprint-          libgnomeprintui libgnomecanvas;-        };-        xpdf = callPackage ../applications/misc/xpdf {-          motif = lesstif;-          base14Fonts = "${ghostscript}/share/ghostscript/fonts";-        };-        xkb_switch = callPackage ../tools/X11/xkb-switch {-        };-        libxpdf = callPackage ../applications/misc/xpdf/libxpdf.nix {-        };-        xpra = callPackage ../tools/X11/xpra {-        };-        xrestop = callPackage ../tools/X11/xrestop {-        };-        xscreensaver = callPackage ../misc/screensavers/xscreensaver {-          inherit (gnome) libglade;-        };-        xsynth_dssi = callPackage ../applications/audio/xsynth-dssi {-        };-        xterm = callPackage ../applications/misc/xterm {-        };-        finalterm = callPackage ../applications/misc/finalterm {-        };-        xtrace = callPackage ../tools/X11/xtrace {-        };-        xlaunch = callPackage ../tools/X11/xlaunch {-        };-        xmacro = callPackage ../tools/X11/xmacro {-        };-        xmove = callPackage ../applications/misc/xmove {-        };-        xmp = callPackage ../applications/audio/xmp {-        };-        xnee = callPackage ../tools/X11/xnee {-          stdenv = overrideInStdenv stdenv [-            gnumake381-          ];-        };-        xvidcap = callPackage ../applications/video/xvidcap {-          inherit (gnome) scrollkeeper-          libglade;-        };-        yate = callPackage ../applications/misc/yate {-        };-        inherit (gnome3) yelp;-        qgis = callPackage ../applications/misc/qgis {-        };-        qtbitcointrader = callPackage ../applications/misc/qtbitcointrader {-        };-        ykpers = callPackage ../applications/misc/ykpers {-        };-        yoshimi = callPackage ../applications/audio/yoshimi {-          fltk = fltk13;-        };-        zathuraCollection = recurseIntoAttrs (let-          callPackage = newScope pkgs.zathuraCollection;-          in import ../applications/misc/zathura {-            inherit callPackage pkgs-            fetchurl;-            useMupdf = config.zathura.useMupdf or false;-          });-        zathura = zathuraCollection.zathuraWrapper;-        zed = callPackage ../applications/editors/zed {-        };-        zeroc_ice = callPackage ../development/libraries/zeroc-ice {-        };-        girara = callPackage ../applications/misc/girara {-          gtk = gtk3;-        };-        zgrviewer = callPackage ../applications/graphics/zgrviewer {-        };-        zotero = callPackage ../applications/office/zotero {-          xulrunner = xulrunner_30;-        };-        zynaddsubfx = callPackage ../applications/audio/zynaddsubfx {-        };-        alienarena = callPackage ../games/alienarena {-        };-        andyetitmoves = if stdenv.isLinux-          then callPackage ../games/andyetitmoves {-          }-          else null;-        anki = callPackage ../games/anki {-        };-        asc = callPackage ../games/asc {-          lua = lua5;-          libsigcxx = libsigcxx12;-        };-        astromenace = callPackage ../games/astromenace {-        };-        atanks = callPackage ../games/atanks {-        };-        ballAndPaddle = callPackage ../games/ball-and-paddle {-          guile = guile_1_8;-        };-        bitsnbots = callPackage ../games/bitsnbots {-          lua = lua5;-        };-        blackshades = callPackage ../games/blackshades {-        };-        blackshadeselite = callPackage ../games/blackshadeselite {-        };-        blobby = callPackage ../games/blobby {-        };-        bsdgames = callPackage ../games/bsdgames {-        };-        btanks = callPackage ../games/btanks {-        };-        bzflag = callPackage ../games/bzflag {-        };-        castle_combat = callPackage ../games/castle-combat {-        };-        chessdb = callPackage ../games/chessdb {-        };-        construoBase = lowPrio (callPackage ../games/construo {-          mesa = null;-          freeglut = null;-        });-        construo = construoBase.override {-          inherit mesa freeglut;-        };-        crack_attack = callPackage ../games/crack-attack {-        };-        crafty = callPackage ../games/crafty {-        };-        craftyFull = appendToName "full" (crafty.override {-          fullVariant = true;-        });-        crrcsim = callPackage ../games/crrcsim {-        };-        dhewm3 = callPackage ../games/dhewm3 {-        };-        drumkv1 = callPackage ../applications/audio/drumkv1 {-        };-        dwarf_fortress = callPackage_i686 ../games/dwarf-fortress {-          SDL_image = pkgsi686Linux.SDL_image.override {-            libpng = pkgsi686Linux.libpng12;-          };-        };-        dwarf_fortress_2014 = callPackage_i686 ../games/dwarf-fortress/df2014.nix {-          SDL_image = pkgsi686Linux.SDL_image.override {-            libpng = pkgsi686Linux.libpng12;-          };-        };-        dwarf_fortress_modable = appendToName "moddable" (dwarf_fortress.override {-          copyDataDirectory = true;-        });-        dwarf_fortress_2014_modable = appendToName "moddable" (dwarf_fortress_2014.override {-          copyDataDirectory = true;-        });-        dwarf-therapist = callPackage ../games/dwarf-therapist {-        };-        d1x_rebirth = callPackage ../games/d1x-rebirth {-        };-        d2x_rebirth = callPackage ../games/d2x-rebirth {-        };-        eboard = callPackage ../games/eboard {-        };-        eduke32 = callPackage ../games/eduke32 {-        };-        egoboo = callPackage ../games/egoboo {-        };-        exult = callPackage ../games/exult {-        };-        flightgear = callPackage ../games/flightgear {-        };-        freeciv = callPackage ../games/freeciv {-        };-        freeciv_gtk = callPackage ../games/freeciv {-          gtkClient = true;-          sdlClient = false;-        };-        freedink = callPackage ../games/freedink {-        };-        fsg = callPackage ../games/fsg {-          wxGTK = wxGTK28.override {-            unicode = false;-          };-        };-        gemrb = callPackage ../games/gemrb {-        };-        gl117 = callPackage ../games/gl-117 {-        };-        glestae = callPackage ../games/glestae {-        };-        globulation2 = callPackage ../games/globulation {-        };-        gltron = callPackage ../games/gltron {-        };-        gnuchess = callPackage ../games/gnuchess {-        };-        gnugo = callPackage ../games/gnugo {-        };-        gparted = callPackage ../tools/misc/gparted {-        };-        gsmartcontrol = callPackage ../tools/misc/gsmartcontrol {-          inherit (gnome) libglademm;-        };-        gtypist = callPackage ../games/gtypist {-        };-        hexen = callPackage ../games/hexen {-        };-        icbm3d = callPackage ../games/icbm3d {-        };-        ingen = callPackage ../applications/audio/ingen {-        };-        instead = callPackage ../games/instead {-          lua = lua5;-        };-        kobodeluxe = callPackage ../games/kobodeluxe {-        };-        lincity = builderDefsPackage (import ../games/lincity) {-          inherit (xlibs) libX11 libXext-          xextproto libICE libSM xproto;-          inherit libpng zlib;-        };-        lincity_ng = callPackage ../games/lincity/ng.nix {-        };-        mars = callPackage ../games/mars {-        };-        micropolis = callPackage ../games/micropolis {-        };-        mnemosyne = callPackage ../games/mnemosyne {-          inherit (pythonPackages) matplotlib-          cherrypy sqlite3;-        };-        naev = callPackage ../games/naev {-        };-        nexuiz = callPackage ../games/nexuiz {-        };-        njam = callPackage ../games/njam {-        };-        oilrush = callPackage ../games/oilrush {-        };-        openra = callPackage ../games/openra {-        };-        openttd = callPackage ../games/openttd {-          zlib = zlibStatic;-        };-        opentyrian = callPackage ../games/opentyrian {-        };-        openxcom = callPackage ../games/openxcom {-        };-        pingus = callPackage ../games/pingus {-        };-        pioneers = callPackage ../games/pioneers {-        };-        pong3d = callPackage ../games/pong3d {-        };-        prboom = callPackage ../games/prboom {-        };-        quake3demo = callPackage ../games/quake3/wrapper {-          name = "quake3-demo-${quake3game.name}";-          description = "Demo of Quake 3 Arena, a classic first-person shooter";-          game = quake3game;-          paks = [ quake3demodata ];-        };-        quake3demodata = callPackage ../games/quake3/demo {-        };-        quake3game = callPackage ../games/quake3/game {-        };-        quantumminigolf = callPackage ../games/quantumminigolf {-        };-        racer = callPackage ../games/racer {-        };-        residualvm = callPackage ../games/residualvm {-          openglSupport = mesaSupported;-        };-        rigsofrods = callPackage ../games/rigsofrods {-          mygui = myguiSvn;-        };-        rili = callPackage ../games/rili {-        };-        rogue = callPackage ../games/rogue {-        };-        samplv1 = callPackage ../applications/audio/samplv1 {-        };-        sauerbraten = callPackage ../games/sauerbraten {-        };-        scid = callPackage ../games/scid {-        };-        scummvm = callPackage ../games/scummvm {-        };-        scorched3d = callPackage ../games/scorched3d {-        };-        sdlmame = callPackage ../games/sdlmame {-        };-        sgtpuzzles = builderDefsPackage (import ../games/sgt-puzzles) {-          inherit pkgconfig fetchsvn perl-          gtk;-          inherit (xlibs) libX11;-        };-        simutrans = callPackage ../games/simutrans {-        };-        soi = callPackage ../games/soi {-        };-        spaceOrbit = callPackage ../games/orbit {-        };-        spring = callPackage ../games/spring {-        };-        springLobby = callPackage ../games/spring/springlobby.nix {-        };-        stardust = callPackage ../games/stardust {-        };-        steam = callPackage_i686 ../games/steam {-        };-        steamChrootEnv = callPackage_i686 ../games/steam/chrootenv.nix {-          zenity = gnome2.zenity;-        };-        stuntrally = callPackage ../games/stuntrally {-        };-        superTux = callPackage ../games/super-tux {-        };-        superTuxKart = callPackage ../games/super-tux-kart {-        };-        synthv1 = callPackage ../applications/audio/synthv1 {-        };-        tbe = callPackage ../games/the-butterfly-effect {-        };-        teetertorture = callPackage ../games/teetertorture {-        };-        teeworlds = callPackage ../games/teeworlds {-        };-        tennix = callPackage ../games/tennix {-        };-        tibia = callPackage ../games/tibia {-        };-        tintin = callPackage ../games/tintin {-        };-        tpm = callPackage ../games/thePenguinMachine {-        };-        tremulous = callPackage ../games/tremulous {-        };-        speed_dreams = callPackage ../games/speed-dreams {-          plib = plib.override {-            enablePIC = !stdenv.isi686;-          };-          libpng = libpng12;-        };-        torcs = callPackage ../games/torcs {-          plib = plib.override {-            enablePIC = !stdenv.isi686;-          };-        };-        trigger = callPackage ../games/trigger {-        };-        typespeed = callPackage ../games/typespeed {-        };-        ufoai = callPackage ../games/ufoai {-        };-        ultimatestunts = callPackage ../games/ultimatestunts {-        };-        ultrastardx = callPackage ../games/ultrastardx {-          ffmpeg = ffmpeg_0_6;-          lua = lua5;-        };-        unvanquished = callPackage ../games/unvanquished {-        };-        uqm = callPackage ../games/uqm {-        };-        urbanterror = callPackage ../games/urbanterror {-        };-        ut2004demo = callPackage ../games/ut2004demo {-        };-        vdrift = callPackage ../games/vdrift {-        };-        vectoroids = callPackage ../games/vectoroids {-        };-        vessel = callPackage_i686 ../games/vessel {-        };-        warmux = callPackage ../games/warmux {-        };-        warsow = callPackage ../games/warsow {-          libjpeg = libjpeg62;-        };-        warzone2100 = callPackage ../games/warzone2100 {-        };-        widelands = callPackage ../games/widelands {-          lua = lua5_1;-        };-        worldofgoo_demo = callPackage ../games/worldofgoo {-          demo = true;-        };-        worldofgoo = callPackage ../games/worldofgoo {-        };-        xboard = callPackage ../games/xboard {-        };-        xconq = callPackage ../games/xconq {-        };-        xonotic = callPackage ../games/xonotic {-        };-        xskat = callPackage ../games/xskat {-        };-        xsokoban = builderDefsPackage (import ../games/xsokoban) {-          inherit (xlibs) libX11 xproto-          libXpm libXt;-        };-        zdoom = callPackage ../games/zdoom {-        };-        zod = callPackage ../games/zod {-        };-        zoom = callPackage ../games/zoom {-        };-        keen4 = callPackage ../games/keen4 {-        };-        zeroad = callPackage ../games/0ad {-        };-        cinnamon = recurseIntoAttrs rec {-          callPackage = newScope pkgs.cinnamon;-          inherit (gnome3) gnome_common-          libgnomekbd gnome-menus zenity;-          muffin = callPackage ../desktops/cinnamon/muffin.nix {-          };-          cinnamon-control-center = callPackage ../desktops/cinnamon/cinnamon-control-center.nix {-          };-          cinnamon-settings-daemon = callPackage ../desktops/cinnamon/cinnamon-settings-daemon.nix {-          };-          cinnamon-session = callPackage ../desktops/cinnamon/cinnamon-session.nix {-          };-          cinnamon-desktop = callPackage ../desktops/cinnamon/cinnamon-desktop.nix {-          };-          cinnamon-translations = callPackage ../desktops/cinnamon/cinnamon-translations.nix {-          };-          cjs = callPackage ../desktops/cinnamon/cjs.nix {-          };-        };-        enlightenment = callPackage ../desktops/enlightenment {-        };-        e17 = recurseIntoAttrs (let-          callPackage = newScope pkgs.e17;-          in import ../desktops/e17 {-            inherit callPackage pkgs;-          });-        e18 = recurseIntoAttrs (let-          callPackage = newScope pkgs.e18;-          in import ../desktops/e18 {-            inherit callPackage pkgs;-          });-        gnome2 = callPackage ../desktops/gnome-2 {-          callPackage = pkgs.newScope pkgs.gnome2;-          self = pkgs.gnome2;-        } // pkgs.gtkLibs // {-          inherit (pkgs) libsoup libwnck-          gtk_doc gnome_doc_utils;-        };-        gnome3 = recurseIntoAttrs (callPackage ../desktops/gnome-3/3.10 {-          callPackage = pkgs.newScope pkgs.gnome3;-          self = pkgs.gnome3;-        });-        gnome3_12 = recurseIntoAttrs (callPackage ../desktops/gnome-3/3.12 {-          callPackage = pkgs.newScope pkgs.gnome3_12;-        });-        gnome = recurseIntoAttrs gnome2;-        hsetroot = callPackage ../tools/X11/hsetroot {-        };-        kakasi = callPackage ../tools/text/kakasi {-        };-        kde4 = recurseIntoAttrs pkgs.kde412;-        kde4_next = recurseIntoAttrs (lib.lowPrioSet pkgs.kde412);-        kde412 = kdePackagesFor (pkgs.kde412 // {-          eigen = eigen2;-          libusb = libusb1;-          libcanberra = libcanberra_kde;-        }) ../desktops/kde-4.12;-        kdePackagesFor = self: dir: let-          callPackageOrig = callPackage;-          in let-            callPackage = newScope self;-            kde4 = callPackageOrig dir {-              inherit callPackage-              callPackageOrig;-            };-            in kde4 // {-              inherit kde4;-              wrapper = callPackage ../build-support/kdewrapper {-              };-              recurseForRelease = true;-              akunambol = callPackage ../applications/networking/sync/akunambol {-              };-              amarok = callPackage ../applications/audio/amarok {-              };-              bangarang = callPackage ../applications/video/bangarang {-              };-              basket = callPackage ../applications/office/basket {-              };-              bluedevil = callPackage ../tools/bluetooth/bluedevil {-              };-              calligra = callPackage ../applications/office/calligra {-              };-              colord-kde = callPackage ../tools/misc/colord-kde {-              };-              digikam = if builtins.compareVersions "4.9" kde4.release == 1-                then callPackage ../applications/graphics/digikam/2.nix {-                }-                else callPackage ../applications/graphics/digikam {-                };-              eventlist = callPackage ../applications/office/eventlist {-              };-              k3b = callPackage ../applications/misc/k3b {-              };-              kadu = callPackage ../applications/networking/instant-messengers/kadu {-              };-              kbibtex = callPackage ../applications/office/kbibtex {-              };-              kde_gtk_config = callPackage ../tools/misc/kde-gtk-config {-              };-              kde_wacomtablet = callPackage ../applications/misc/kde-wacomtablet {-              };-              kdeconnect = callPackage ../applications/misc/kdeconnect {-              };-              kdenlive = callPackage ../applications/video/kdenlive {-                mlt = mlt-qt4;-              };-              kdesvn = callPackage ../applications/version-management/kdesvn {-              };-              kdevelop = callPackage ../applications/editors/kdevelop {-              };-              kdevplatform = callPackage ../development/libraries/kdevplatform {-              };-              kdiff3 = callPackage ../tools/text/kdiff3 {-              };-              kile = callPackage ../applications/editors/kile {-              };-              kmplayer = callPackage ../applications/video/kmplayer {-              };-              kmymoney = callPackage ../applications/office/kmymoney {-              };-              kipi_plugins = callPackage ../applications/graphics/kipi-plugins {-              };-              konversation = callPackage ../applications/networking/irc/konversation {-              };-              kvirc = callPackage ../applications/networking/irc/kvirc {-              };-              krename = callPackage ../applications/misc/krename {-              };-              krusader = callPackage ../applications/misc/krusader {-              };-              ksshaskpass = callPackage ../tools/security/ksshaskpass {-              };-              ktorrent = callPackage ../applications/networking/p2p/ktorrent {-              };-              kuickshow = callPackage ../applications/graphics/kuickshow {-              };-              libalkimia = callPackage ../development/libraries/libalkimia {-              };-              libktorrent = callPackage ../development/libraries/libktorrent {-              };-              libkvkontakte = callPackage ../development/libraries/libkvkontakte {-              };-              liblikeback = callPackage ../development/libraries/liblikeback {-              };-              libmm-qt = callPackage ../development/libraries/libmm-qt {-              };-              libnm-qt = callPackage ../development/libraries/libnm-qt {-              };-              networkmanagement = callPackage ../tools/networking/networkmanagement {-              };-              partitionManager = callPackage ../tools/misc/partition-manager {-              };-              plasma-nm = callPackage ../tools/networking/plasma-nm {-              };-              polkit_kde_agent = callPackage ../tools/security/polkit-kde-agent {-              };-              psi = callPackage ../applications/networking/instant-messengers/psi {-              };-              qtcurve = callPackage ../misc/themes/qtcurve {-              };-              quassel = callPackage ../applications/networking/irc/quassel {-                dconf = gnome3.dconf;-              };-              quasselWithoutKDE = self.quassel.override {-                withKDE = false;-                tag = "-without-kde";-              };-              quasselDaemon = self.quassel.override {-                monolithic = false;-                daemon = true;-                tag = "-daemon";-              };-              quasselClient = self.quassel.override {-                monolithic = false;-                client = true;-                tag = "-client";-              };-              quasselClientWithoutKDE = self.quasselClient.override {-                withKDE = false;-                tag = "-client-without-kde";-              };-              rekonq = callPackage ../applications/networking/browsers/rekonq {-              };-              kwebkitpart = callPackage ../applications/networking/browsers/kwebkitpart {-              };-              rsibreak = callPackage ../applications/misc/rsibreak {-              };-              semnotes = callPackage ../applications/misc/semnotes {-              };-              skrooge = callPackage ../applications/office/skrooge {-              };-              telepathy = callPackage ../applications/networking/instant-messengers/telepathy/kde {-              };-              yakuake = callPackage ../applications/misc/yakuake {-              };-              zanshin = callPackage ../applications/office/zanshin {-              };-              kwooty = callPackage ../applications/networking/newsreaders/kwooty {-              };-            };-        redshift = callPackage ../applications/misc/redshift {-          inherit (xorg) libX11 libXrandr-          libxcb randrproto libXxf86vm-          xf86vidmodeproto;-          inherit (gnome) GConf;-          inherit (pythonPackages) pyxdg;-          geoclue = geoclue2;-        };-        oxygen_gtk = callPackage ../misc/themes/gtk2/oxygen-gtk {-        };-        gtk_engines = callPackage ../misc/themes/gtk2/gtk-engines {-        };-        gtk-engine-murrine = callPackage ../misc/themes/gtk2/gtk-engine-murrine {-        };-        gnome_themes_standard = gnome3.gnome_themes_standard;-        mate-icon-theme = callPackage ../misc/themes/mate-icon-theme {-        };-        mate-themes = callPackage ../misc/themes/mate-themes {-        };-        xfce = xfce4_10;-        xfce4_10 = recurseIntoAttrs (import ../desktops/xfce {-          inherit pkgs newScope;-        });-        drgeo = builderDefsPackage (import ../applications/science/geometry/drgeo) {-          inherit (gnome) libglade;-          inherit libxml2 perl intltool-          libtool pkgconfig gtk;-          guile = guile_1_8;-        };-        tetgen = callPackage ../applications/science/geometry/tetgen {-        };-        alliance = callPackage ../applications/science/electronics/alliance {-          motif = lesstif;-        };-        arb = callPackage ../applications/science/biology/arb {-          lesstif = lesstif93;-        };-        archimedes = callPackage ../applications/science/electronics/archimedes {-        };-        biolib = callPackage ../development/libraries/science/biology/biolib {-        };-        emboss = callPackage ../applications/science/biology/emboss {-        };-        mrbayes = callPackage ../applications/science/biology/mrbayes {-        };-        ncbiCTools = builderDefsPackage ../development/libraries/ncbi {-          inherit tcsh mesa lesstif;-          inherit (xlibs) libX11 libXaw-          xproto libXt libSM libICE libXmu-          libXext;-        };-        ncbi_tools = callPackage ../applications/science/biology/ncbi-tools {-        };-        paml = callPackage ../applications/science/biology/paml {-        };-        pal2nal = callPackage ../applications/science/biology/pal2nal {-        };-        plink = callPackage ../applications/science/biology/plink/default.nix {-        };-        arpack = callPackage ../development/libraries/science/math/arpack {-        };-        atlas = callPackage ../development/libraries/science/math/atlas {-          tolerateCpuTimingInaccuracy = true;-        };-        blas = callPackage ../development/libraries/science/math/blas {-        };-        content = builderDefsPackage ../applications/science/math/content {-          inherit mesa lesstif;-          inherit (xlibs) libX11 libXaw-          xproto libXt libSM libICE libXmu-          libXext libXcursor;-        };-        jags = callPackage ../applications/science/math/jags {-        };-        liblapack = callPackage ../development/libraries/science/math/liblapack {-        };-        liblapack_3_5_0 = callPackage ../development/libraries/science/math/liblapack/3.5.0.nix {-        };-        liblbfgs = callPackage ../development/libraries/science/math/liblbfgs {-        };-        openblas = callPackage ../development/libraries/science/math/openblas {-        };-        openblas_0_2_10 = callPackage ../development/libraries/science/math/openblas/0.2.10.nix {-          liblapack = liblapack_3_5_0;-        };-        mathematica = callPackage ../applications/science/math/mathematica {-        };-        sage = callPackage ../applications/science/math/sage {-        };-        gromacs = callPackage ../applications/science/molecular-dynamics/gromacs {-          singlePrec = true;-          fftw = fftwSinglePrec;-          cmake = cmakeCurses;-        };-        gromacsDouble = lowPrio (callPackage ../applications/science/molecular-dynamics/gromacs {-          singlePrec = false;-          fftw = fftw;-          cmake = cmakeCurses;-        });-        abc-verifier = callPackage ../applications/science/logic/abc {-        };-        alt-ergo = callPackage ../applications/science/logic/alt-ergo {-        };-        coq = callPackage ../applications/science/logic/coq {-          inherit (ocamlPackages) findlib-          lablgtk;-          camlp5 = ocamlPackages.camlp5_transitional;-        };-        coq_HEAD = callPackage ../applications/science/logic/coq/HEAD.nix {-          inherit (ocamlPackages) findlib-          lablgtk;-          camlp5 = ocamlPackages.camlp5_transitional;-        };-        coq_8_3 = callPackage ../applications/science/logic/coq/8.3.nix {-          inherit (ocamlPackages) findlib-          lablgtk;-          camlp5 = ocamlPackages.camlp5_transitional;-        };-        cvc3 = callPackage ../applications/science/logic/cvc3 {-        };-        ekrhyper = callPackage ../applications/science/logic/ekrhyper {-        };-        eprover = callPackage ../applications/science/logic/eprover {-          texLive = texLiveAggregationFun {-            paths = [-              texLive-              texLiveExtra-            ];-          };-        };-        ginac = callPackage ../applications/science/math/ginac {-        };-        hol = callPackage ../applications/science/logic/hol {-        };-        hol_light = callPackage ../applications/science/logic/hol_light {-          inherit (ocamlPackages) findlib;-          camlp5 = ocamlPackages.camlp5_strict;-        };-        isabelle = import ../applications/science/logic/isabelle {-          inherit (pkgs) stdenv fetchurl-          nettools perl polyml;-          inherit (pkgs.emacs24Packages) proofgeneral;-        };-        iprover = callPackage ../applications/science/logic/iprover {-        };-        leo2 = callPackage ../applications/science/logic/leo2 {-        };-        logisim = callPackage ../applications/science/logic/logisim {-        };-        ltl2ba = callPackage ../applications/science/logic/ltl2ba {-        };-        matita = callPackage ../applications/science/logic/matita {-          ocaml = ocaml_3_11_2;-          inherit (ocamlPackages_3_11_2) findlib-          lablgtk ocaml_expat gmetadom-          ocaml_http lablgtkmathview-          ocaml_mysql ocaml_sqlite3-          ocamlnet camlzip ocaml_pcre;-          ulex08 = ocamlPackages_3_11_2.ulex08.override {-            camlp5 = ocamlPackages_3_11_2.camlp5_5_transitional;-          };-        };-        matita_130312 = lowPrio (callPackage ../applications/science/logic/matita/130312.nix {-          inherit (ocamlPackages) findlib-          lablgtk ocaml_expat gmetadom-          ocaml_http ocaml_mysql ocamlnet-          ulex08 camlzip ocaml_pcre;-        });-        minisat = callPackage ../applications/science/logic/minisat {-        };-        opensmt = callPackage ../applications/science/logic/opensmt {-        };-        otter = callPackage ../applications/science/logic/otter {-        };-        picosat = callPackage ../applications/science/logic/picosat {-        };-        prooftree = callPackage ../applications/science/logic/prooftree {-          inherit (ocamlPackages) findlib-          lablgtk;-          camlp5 = ocamlPackages.camlp5_transitional;-        };-        prover9 = callPackage ../applications/science/logic/prover9 {-        };-        satallax = callPackage ../applications/science/logic/satallax {-        };-        spass = callPackage ../applications/science/logic/spass {-        };-        ssreflect = callPackage ../applications/science/logic/ssreflect {-          camlp5 = ocamlPackages.camlp5_transitional;-        };-        tptp = callPackage ../applications/science/logic/tptp {-        };-        twelf = callPackage ../applications/science/logic/twelf {-          smlnj = if stdenv.isDarwin-            then smlnjBootstrap-            else smlnj;-        };-        verifast = callPackage ../applications/science/logic/verifast {-        };-        why3 = callPackage ../applications/science/logic/why3 {-        };-        yices = callPackage ../applications/science/logic/yices {-        };-        z3 = callPackage ../applications/science/logic/z3 {-        };-        boolector = boolector15;-        boolector15 = callPackage ../applications/science/logic/boolector {-        };-        boolector16 = lowPrio (callPackage ../applications/science/logic/boolector {-          useV16 = true;-        });-        eagle = callPackage_i686 ../applications/science/electronics/eagle {-        };-        caneda = callPackage ../applications/science/electronics/caneda {-        };-        gtkwave = callPackage ../applications/science/electronics/gtkwave {-        };-        kicad = callPackage ../applications/science/electronics/kicad {-          wxGTK = wxGTK29;-        };-        ngspice = callPackage ../applications/science/electronics/ngspice {-        };-        qucs = callPackage ../applications/science/electronics/qucs {-        };-        xoscope = callPackage ../applications/science/electronics/xoscope {-        };-        ecm = callPackage ../applications/science/math/ecm {-        };-        eukleides = callPackage ../applications/science/math/eukleides {-          texinfo = texinfo4;-        };-        fricas = callPackage ../applications/science/math/fricas {-        };-        gap = callPackage ../applications/science/math/gap {-        };-        maxima = callPackage ../applications/science/math/maxima {-        };-        wxmaxima = callPackage ../applications/science/math/wxmaxima {-        };-        pari = callPackage ../applications/science/math/pari {-        };-        pspp = callPackage ../applications/science/math/pssp {-          inherit (gnome) libglade-          gtksourceview;-        };-        singular = callPackage ../applications/science/math/singular {-        };-        scilab = callPackage ../applications/science/math/scilab {-          withXaw3d = false;-          withTk = true;-          withGtk = false;-          withOCaml = true;-          withX = true;-        };-        msieve = callPackage ../applications/science/math/msieve {-        };-        weka = callPackage ../applications/science/math/weka {-        };-        yad = callPackage ../tools/misc/yad {-        };-        yacas = callPackage ../applications/science/math/yacas {-        };-        speedcrunch = callPackage ../applications/science/math/speedcrunch {-          qt = qt4;-          cmake = cmakeCurses;-        };-        boinc = callPackage ../applications/science/misc/boinc {-        };-        celestia = callPackage ../applications/science/astronomy/celestia {-          lua = lua5_1;-          inherit (xlibs) libXmu;-          inherit (pkgs.gnome) gtkglext;-        };-        fityk = callPackage ../applications/science/misc/fityk {-        };-        gravit = callPackage ../applications/science/astronomy/gravit {-        };-        golly = callPackage ../applications/science/misc/golly {-        };-        megam = callPackage ../applications/science/misc/megam {-        };-        root = callPackage ../applications/science/misc/root {-        };-        simgrid = callPackage ../applications/science/misc/simgrid {-        };-        spyder = callPackage ../applications/science/spyder {-          inherit (pythonPackages) pyflakes-          rope sphinx numpy scipy-          matplotlib;-          inherit (pythonPackages) ipython-          pep8;-          inherit pylint;-        };-        stellarium = callPackage ../applications/science/astronomy/stellarium {-        };-        tulip = callPackage ../applications/science/misc/tulip {-        };-        vite = callPackage ../applications/science/misc/vite {-        };-        xplanet = callPackage ../applications/science/astronomy/xplanet {-        };-        atari800 = callPackage ../misc/emulators/atari800 {-        };-        ataripp = callPackage ../misc/emulators/atari++ {-        };-        auctex = callPackage ../tools/typesetting/tex/auctex {-        };-        beep = callPackage ../misc/beep {-        };-        cups = callPackage ../misc/cups {-          libusb = libusb1;-        };-        cups_pdf_filter = callPackage ../misc/cups/pdf-filter.nix {-        };-        gutenprint = callPackage ../misc/drivers/gutenprint {-        };-        gutenprintBin = callPackage ../misc/drivers/gutenprint/bin.nix {-        };-        cupsBjnp = callPackage ../misc/cups/drivers/cups-bjnp {-        };-        darcnes = callPackage ../misc/emulators/darcnes {-        };-        dbacl = callPackage ../tools/misc/dbacl {-        };-        dblatex = callPackage ../tools/typesetting/tex/dblatex {-          enableAllFeatures = false;-        };-        dblatexFull = appendToName "full" (dblatex.override {-          enableAllFeatures = true;-        });-        dosbox = callPackage ../misc/emulators/dosbox {-        };-        dpkg = callPackage ../tools/package-management/dpkg {-        };-        ekiga = newScope pkgs.gnome ../applications/networking/instant-messengers/ekiga {-        };-        emulationstation = callPackage ../misc/emulators/emulationstation {-        };-        electricsheep = callPackage ../misc/screensavers/electricsheep {-        };-        fakenes = callPackage ../misc/emulators/fakenes {-        };-        fceux = callPackage ../misc/emulators/fceux {-        };-        foldingathome = callPackage ../misc/foldingathome {-        };-        foo2zjs = callPackage ../misc/drivers/foo2zjs {-        };-        foomatic_filters = callPackage ../misc/drivers/foomatic-filters {-        };-        freestyle = callPackage ../misc/freestyle {-        };-        gajim = callPackage ../applications/networking/instant-messengers/gajim {-        };-        gammu = callPackage ../applications/misc/gammu {-        };-        gensgs = callPackage_i686 ../misc/emulators/gens-gs {-        };-        ghostscript = callPackage ../misc/ghostscript {-          x11Support = false;-          cupsSupport = config.ghostscript.cups or !stdenv.isDarwin;-          gnuFork = config.ghostscript.gnu or false;-        };-        ghostscriptX = appendToName "with-X" (ghostscript.override {-          x11Support = true;-        });-        guix = callPackage ../tools/package-management/guix {-        };-        gxemul = callPackage ../misc/gxemul {-        };-        hatari = callPackage ../misc/emulators/hatari {-        };-        hplip = callPackage ../misc/drivers/hplip {-        };-        hplipWithPlugin = hplip.override {-          withPlugin = true;-        };-        jack1 = callPackage ../misc/jackaudio/jack1.nix {-        };-        jack2 = callPackage ../misc/jackaudio {-        };-        keynav = callPackage ../tools/X11/keynav {-        };-        lazylist = callPackage ../tools/typesetting/tex/lazylist {-        };-        lilypond = callPackage ../misc/lilypond {-          guile = guile_1_8;-        };-        martyr = callPackage ../development/libraries/martyr {-        };-        maven = maven3;-        maven3 = callPackage ../misc/maven {-          jdk = openjdk;-        };-        mess = callPackage ../misc/emulators/mess {-          inherit (pkgs.gnome) GConf;-        };-        mupen64plus = callPackage ../misc/emulators/mupen64plus {-        };-        mupen64plus1_5 = callPackage ../misc/emulators/mupen64plus/1.5.nix {-        };-        nix = nixStable;-        nixStable = callPackage ../tools/package-management/nix {-          storeDir = config.nix.storeDir or "/nix/store";-          stateDir = config.nix.stateDir or "/nix/var";-        };-        nixUnstable = callPackage ../tools/package-management/nix/unstable.nix {-          storeDir = config.nix.storeDir or "/nix/store";-          stateDir = config.nix.stateDir or "/nix/var";-        };-        nixops = callPackage ../tools/package-management/nixops {-        };-        nix-prefetch-scripts = callPackage ../tools/package-management/nix-prefetch-scripts {-        };-        nix-repl = callPackage ../tools/package-management/nix-repl {-        };-        nut = callPackage ../applications/misc/nut {-        };-        solfege = callPackage ../misc/solfege {-          pysqlite = pkgs.pythonPackages.sqlite3;-        };-        disnix = callPackage ../tools/package-management/disnix {-        };-        dysnomia = callPackage ../tools/package-management/disnix/dysnomia {-          enableApacheWebApplication = config.disnix.enableApacheWebApplication or false;-          enableAxis2WebService = config.disnix.enableAxis2WebService or false;-          enableEjabberdDump = config.disnix.enableEjabberdDump or false;-          enableMySQLDatabase = config.disnix.enableMySQLDatabase or false;-          enablePostgreSQLDatabase = config.disnix.enablePostgreSQLDatabase or false;-          enableSubversionRepository = config.disnix.enableSubversionRepository or false;-          enableTomcatWebApplication = config.disnix.enableTomcatWebApplication or false;-        };-        disnixos = callPackage ../tools/package-management/disnix/disnixos {-        };-        DisnixWebService = callPackage ../tools/package-management/disnix/DisnixWebService {-        };-        latex2html = callPackage ../tools/typesetting/tex/latex2html/default.nix {-          tex = tetex;-        };-        lkproof = callPackage ../tools/typesetting/tex/lkproof {-        };-        mysqlWorkbench = newScope gnome ../applications/misc/mysql-workbench {-          lua = lua5;-          inherit (pythonPackages) pexpect-          paramiko;-        };-        robomongo = callPackage ../applications/misc/robomongo {-        };-        opkg = callPackage ../tools/package-management/opkg {-        };-        pgadmin = callPackage ../applications/misc/pgadmin {-        };-        pgf = pgf2;-        pgf1 = callPackage ../tools/typesetting/tex/pgf/1.x.nix {-        };-        pgf2 = callPackage ../tools/typesetting/tex/pgf/2.x.nix {-        };-        pgfplots = callPackage ../tools/typesetting/tex/pgfplots {-        };-        pjsip = callPackage ../applications/networking/pjsip {-        };-        polytable = callPackage ../tools/typesetting/tex/polytable {-        };-        PPSSPP = callPackage ../misc/emulators/ppsspp {-        };-        uae = callPackage ../misc/emulators/uae {-        };-        putty = callPackage ../applications/networking/remote/putty {-        };-        retroarch = callPackage ../misc/emulators/retroarch {-        };-        rssglx = callPackage ../misc/screensavers/rss-glx {-        };-        xlockmore = callPackage ../misc/screensavers/xlockmore {-        };-        samsungUnifiedLinuxDriver = import ../misc/cups/drivers/samsung {-          inherit fetchurl stdenv;-          inherit cups ghostscript glibc-          patchelf;-          gcc = import ../development/compilers/gcc/4.4 {-            inherit stdenv fetchurl gmp mpfr-            noSysDirs gettext which;-            texinfo = texinfo4;-            profiledCompiler = true;-          };-        };-        saneBackends = callPackage ../applications/graphics/sane/backends.nix {-          gt68xxFirmware = config.sane.gt68xxFirmware or null;-          snapscanFirmware = config.sane.snapscanFirmware or null;-          hotplugSupport = config.sane.hotplugSupport or true;-          libusb = libusb1;-        };-        saneBackendsGit = callPackage ../applications/graphics/sane/backends-git.nix {-          gt68xxFirmware = config.sane.gt68xxFirmware or null;-          snapscanFirmware = config.sane.snapscanFirmware or null;-          hotplugSupport = config.sane.hotplugSupport or true;-        };-        mkSaneConfig = callPackage ../applications/graphics/sane/config.nix {-        };-        saneFrontends = callPackage ../applications/graphics/sane/frontends.nix {-        };-        seafile-shared = callPackage ../misc/seafile-shared {-        };-        slock = callPackage ../misc/screensavers/slock {-        };-        sourceAndTags = import ../misc/source-and-tags {-          inherit pkgs stdenv unzip lib-          ctags;-          hasktags = haskellPackages.hasktags;-        };-        splix = callPackage ../misc/cups/drivers/splix {-        };-        streamripper = callPackage ../applications/audio/streamripper {-        };-        sqsh = callPackage ../development/tools/sqsh {-        };-        tetex = callPackage ../tools/typesetting/tex/tetex {-          libpng = libpng12;-        };-        tex4ht = callPackage ../tools/typesetting/tex/tex4ht {-        };-        texFunctions = import ../tools/typesetting/tex/nix pkgs;-        texLive = builderDefsPackage (import ../tools/typesetting/tex/texlive) {-          inherit builderDefs zlib bzip2-          ncurses libpng ed lesstif ruby-          potrace gd t1lib freetype icu-          perl expat curl xz pkgconfig-          zziplib texinfo libjpeg bison-          python fontconfig flex poppler-          libpaper graphite2 makeWrapper;-          inherit (xlibs) libXaw libX11-          xproto libXt libXpm libXmu-          libXext xextproto libSM libICE;-          ghostscript = ghostscriptX;-          harfbuzz = harfbuzz.override {-            withIcu = true;-            withGraphite2 = true;-          };-        };-        texLiveFull = lib.setName "texlive-full" (texLiveAggregationFun {-          paths = [-            texLive-            texLiveExtra-            lmodern-            texLiveCMSuper-            texLiveLatexXColor-            texLivePGF-            texLiveBeamer-            texLiveModerncv-            tipa-            tex4ht-            texinfo-            texLiveModerntimeline-          ];-        });-        texLiveAggregationFun = params:-        builderDefsPackage (import ../tools/typesetting/tex/texlive/aggregate.nix) ({-          inherit poppler perl-          makeWrapper;-        } // params);-        texDisser = callPackage ../tools/typesetting/tex/disser {-        };-        texLiveContext = builderDefsPackage (import ../tools/typesetting/tex/texlive/context.nix) {-          inherit texLive;-        };-        texLiveExtra = builderDefsPackage (import ../tools/typesetting/tex/texlive/extra.nix) {-          inherit texLive xz;-        };-        texLiveCMSuper = builderDefsPackage (import ../tools/typesetting/tex/texlive/cm-super.nix) {-          inherit texLive;-        };-        texLiveLatexXColor = builderDefsPackage (import ../tools/typesetting/tex/texlive/xcolor.nix) {-          inherit texLive;-        };-        texLivePGF = builderDefsPackage (import ../tools/typesetting/tex/texlive/pgf.nix) {-          inherit texLiveLatexXColor-          texLive;-        };-        texLiveBeamer = builderDefsPackage (import ../tools/typesetting/tex/texlive/beamer.nix) {-          inherit texLiveLatexXColor-          texLivePGF texLive;-        };-        texLiveModerncv = builderDefsPackage (import ../tools/typesetting/tex/texlive/moderncv.nix) {-          inherit texLive unzip;-        };-        texLiveModerntimeline = builderDefsPackage (import ../tools/typesetting/tex/texlive/moderntimeline.nix) {-          inherit texLive unzip;-        };-        thermald = callPackage ../tools/system/thermald {-        };-        thinkfan = callPackage ../tools/system/thinkfan {-        };-        vice = callPackage ../misc/emulators/vice {-          libX11 = xlibs.libX11;-          giflib = giflib_4_1;-        };-        viewnior = callPackage ../applications/graphics/viewnior {-        };-        vimPlugins = recurseIntoAttrs (callPackage ../misc/vim-plugins {-        });-        vimprobable2 = callPackage ../applications/networking/browsers/vimprobable2 {-          webkit = webkitgtk2;-        };-        vimprobable2Wrapper = wrapFirefox {-          browser = vimprobable2;-          browserName = "vimprobable2";-          desktopName = "Vimprobable2";-        };-        vimb = callPackage ../applications/networking/browsers/vimb {-          webkit = webkitgtk2;-        };-        vimbWrapper = wrapFirefox {-          browser = vimb;-          browserName = "vimb";-          desktopName = "Vimb";-        };-        VisualBoyAdvance = callPackage ../misc/emulators/VisualBoyAdvance {-        };-        wineStable = callPackage_i686 ../misc/emulators/wine/stable.nix {-          bison = bison2;-        };-        wineUnstable = lowPrio (callPackage_i686 ../misc/emulators/wine/unstable.nix {-          bison = bison2;-        });-        wine = wineStable;-        winetricks = callPackage ../misc/emulators/wine/winetricks.nix {-          inherit (gnome2) zenity;-        };-        wxmupen64plus = callPackage ../misc/emulators/wxmupen64plus {-        };-        x2x = callPackage ../tools/X11/x2x {-        };-        xboxdrv = callPackage ../misc/drivers/xboxdrv {-        };-        xinput_calibrator = callPackage ../tools/X11/xinput_calibrator {-          inherit (xlibs) libXi-          inputproto;-        };-        xosd = callPackage ../misc/xosd {-        };-        xsane = callPackage ../applications/graphics/sane/xsane.nix {-          libpng = libpng12;-          saneBackends = saneBackends;-        };-        yafc = callPackage ../applications/networking/yafc {-        };-        yandex-disk = callPackage ../tools/filesystems/yandex-disk {-        };-        myEnvFun = import ../misc/my-env {-          inherit substituteAll pkgs;-          inherit (stdenv) mkDerivation;-        };-        PatolineEnv = pack: myEnvFun {-          name = "patoline";-          buildInputs = [-            stdenv-            ncurses-            mesa-            freeglut-            libzip-            gcc-            pack.ocaml-            pack.findlib-            pack.camomile-            pack.dypgen-            pack.ocaml_sqlite3-            pack.camlzip-            pack.lablgtk-            pack.camlimages-            pack.ocaml_cairo-            pack.lablgl-            pack.ocamlnet-            pack.cryptokit-            pack.ocaml_pcre-            pack.patoline-          ];-          extraCmds = ''-            LD_LIBRARY_PATH=\''$LD_LIBRARY_PATH:${gcc.gcc}/lib-            export LD_LIBRARY_PATH-          '';-        };-        patoline = PatolineEnv ocamlPackages_4_00_1;-        znc = callPackage ../applications/networking/znc {-        };-        zncModules = recurseIntoAttrs (callPackage ../applications/networking/znc/modules.nix {-        });-        zsnes = callPackage_i686 ../misc/emulators/zsnes {-        };-        snes9x-gtk = callPackage ../misc/emulators/snes9x-gtk {-        };-        misc = import ../misc/misc.nix {-          inherit pkgs stdenv;-        };-        bullet = callPackage ../development/libraries/bullet {-        };-        dart = callPackage ../development/interpreters/dart {-        };-        httrack = callPackage ../tools/backup/httrack {-        };-        mg = callPackage ../applications/editors/mg {-        };-        adobeReader = adobe-reader;-        asciidocFull = asciidoc-full;-        lttngTools = lttng-tools;-        lttngUst = lttng-ust;-      };-      in self;-    in pkgs
− data/nixpkgs-all-packages.nix
@@ -1,11561 +0,0 @@-/* This file composes the Nix Packages collection.  That is, it-   imports the functions that build the various packages, and calls-   them with appropriate arguments.  The result is a set of all the-   packages in the Nix Packages collection for some particular-   platform. */---{ # The system (e.g., `i686-linux') for which to build the packages.-  system ? builtins.currentSystem--, # The standard environment to use.  Only used for bootstrapping.  If-  # null, the default standard environment is used.-  bootStdenv ? null--, # Non-GNU/Linux OSes are currently "impure" platforms, with their libc-  # outside of the store.  Thus, GCC, GFortran, & co. must always look for-  # files in standard system directories (/usr/include, etc.)-  noSysDirs ? (system != "x86_64-darwin"-               && system != "x86_64-freebsd" && system != "i686-freebsd"-               && system != "x86_64-kfreebsd-gnu")--  # More flags for the bootstrapping of stdenv.-, gccWithCC ? true-, gccWithProfiling ? true--, # Allow a configuration attribute set to be passed in as an-  # argument.  Otherwise, it's read from $NIXPKGS_CONFIG or-  # ~/.nixpkgs/config.nix.-  config ? null--, crossSystem ? null-, platform ? null-}:---let config_ = config; platform_ = platform; in # rename the function arguments--let--  lib = import ../../lib;--  # The contents of the configuration file found at $NIXPKGS_CONFIG or-  # $HOME/.nixpkgs/config.nix.-  # for NIXOS (nixos-rebuild): use nixpkgs.config option-  config =-    let-      toPath = builtins.toPath;-      getEnv = x: if builtins ? getEnv then builtins.getEnv x else "";-      pathExists = name:-        builtins ? pathExists && builtins.pathExists (toPath name);--      configFile = getEnv "NIXPKGS_CONFIG";-      homeDir = getEnv "HOME";-      configFile2 = homeDir + "/.nixpkgs/config.nix";--      configExpr =-        if config_ != null then config_-        else if configFile != "" && pathExists configFile then import (toPath configFile)-        else if homeDir != "" && pathExists configFile2 then import (toPath configFile2)-        else {};--    in-      # allow both:-      # { /* the config */ } and-      # { pkgs, ... } : { /* the config */ }-      if builtins.isFunction configExpr-        then configExpr { inherit pkgs; }-        else configExpr;--  # Allow setting the platform in the config file. Otherwise, let's use a reasonable default (pc)--  platformAuto = let-      platforms = (import ./platforms.nix);-    in-      if system == "armv6l-linux" then platforms.raspberrypi-      else if system == "armv5tel-linux" then platforms.sheevaplug-      else if system == "mips64el-linux" then platforms.fuloong2f_n32-      else if system == "x86_64-linux" then platforms.pc64-      else if system == "i686-linux" then platforms.pc32-      else platforms.pcBase;--  platform = if platform_ != null then platform_-    else config.platform or platformAuto;--  # Helper functions that are exported through `pkgs'.-  helperFunctions =-    stdenvAdapters //-    (import ../build-support/trivial-builders.nix { inherit (pkgs) stdenv; inherit (pkgs.xorg) lndir; });--  stdenvAdapters =-    import ../stdenv/adapters.nix pkgs;---  # Allow packages to be overriden globally via the `packageOverrides'-  # configuration option, which must be a function that takes `pkgs'-  # as an argument and returns a set of new or overriden packages.-  # The `packageOverrides' function is called with the *original*-  # (un-overriden) set of packages, allowing packageOverrides-  # attributes to refer to the original attributes (e.g. "foo =-  # ... pkgs.foo ...").-  pkgs = applyGlobalOverrides (config.packageOverrides or (pkgs: {}));---  # Return the complete set of packages, after applying the overrides-  # returned by the `overrider' function (see above).  Warning: this-  # function is very expensive!-  applyGlobalOverrides = overrider:-    let-      # Call the overrider function.  We don't want stdenv overrides-      # in the case of cross-building, or otherwise the basic-      # overrided packages will not be built with the crossStdenv-      # adapter.-      overrides = overrider pkgsOrig //-        (lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem == null) (pkgsOrig.stdenv.overrides pkgsOrig));--      # The un-overriden packages, passed to `overrider'.-      pkgsOrig = pkgsFun pkgs {};--      # The overriden, final packages.-      pkgs = pkgsFun pkgs overrides;-    in pkgs;---  # The package compositions.  Yes, this isn't properly indented.-  pkgsFun = pkgs: overrides:-    with helperFunctions;-    let defaultScope = pkgs // pkgs.xorg; self = self_ // overrides;-    self_ = with self; helperFunctions // {--  # Make some arguments passed to all-packages.nix available-  inherit system platform;--  # Allow callPackage to fill in the pkgs argument-  inherit pkgs;---  # We use `callPackage' to be able to omit function arguments that-  # can be obtained from `pkgs' or `pkgs.xorg' (i.e. `defaultScope').-  # Use `newScope' for sets of packages in `pkgs' (see e.g. `gnome'-  # below).-  callPackage = newScope {};--  newScope = extra: lib.callPackageWith (defaultScope // extra);---  # Override system. This is useful to build i686 packages on x86_64-linux.-  forceSystem = system: kernel: (import ./all-packages.nix) {-    inherit system;-    platform = platform // { kernelArch = kernel; };-    inherit bootStdenv noSysDirs gccWithCC gccWithProfiling config-      crossSystem;-  };---  # Used by wine, firefox with debugging version of Flash, ...-  pkgsi686Linux = forceSystem "i686-linux" "i386";--  callPackage_i686 = lib.callPackageWith (pkgsi686Linux // pkgsi686Linux.xorg);---  # For convenience, allow callers to get the path to Nixpkgs.-  path = ../..;---  ### Symbolic names.--  x11 = xlibsWrapper;--  # `xlibs' is the set of X library components.  This used to be the-  # old modular X llibraries project (called `xlibs') but now it's just-  # the set of packages in the modular X.org tree (which also includes-  # non-library components like the server, drivers, fonts, etc.).-  xlibs = xorg // {xlibs = xlibsWrapper;};---  ### Helper functions.--  inherit lib config stdenvAdapters;--  inherit (lib) lowPrio hiPrio appendToName makeOverridable;-  inherit (misc) versionedDerivation;--  # Applying this to an attribute set will cause nix-env to look-  # inside the set for derivations.-  recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };--  builderDefs = lib.composedArgsAndFun (import ../build-support/builder-defs/builder-defs.nix) {-    inherit stringsWithDeps lib stdenv writeScript-      fetchurl fetchmtn fetchgit;-  };--  builderDefsPackage = builderDefs.builderDefsPackage builderDefs;--  stringsWithDeps = lib.stringsWithDeps;---  ### Nixpkgs maintainer tools--  nix-generate-from-cpan = callPackage ../../maintainers/scripts/nix-generate-from-cpan.nix { };--  nixpkgs-lint = callPackage ../../maintainers/scripts/nixpkgs-lint.nix { };---  ### STANDARD ENVIRONMENT---  allStdenvs = import ../stdenv {-    inherit system platform config;-    allPackages = args: import ./all-packages.nix ({ inherit config system; } // args);-  };--  defaultStdenv = allStdenvs.stdenv // { inherit platform; };--  stdenvCross = lowPrio (makeStdenvCross defaultStdenv crossSystem binutilsCross gccCrossStageFinal);--  stdenv =-    if bootStdenv != null then (bootStdenv // {inherit platform;}) else-      if crossSystem != null then-        stdenvCross-      else-        let-            changer = config.replaceStdenv or null;-        in if changer != null then-          changer {-            # We import again all-packages to avoid recursivities.-            pkgs = import ./all-packages.nix {-              # We remove packageOverrides to avoid recursivities-              config = removeAttrs config [ "replaceStdenv" ];-            };-          }-      else-        defaultStdenv;--  stdenvApple = stdenvAdapters.overrideGCC allStdenvs.stdenvNative gccApple;--  forceNativeDrv = drv : if crossSystem == null then drv else-    (drv // { crossDrv = drv.nativeDrv; });--  # A stdenv capable of building 32-bit binaries.  On x86_64-linux,-  # it uses GCC compiled with multilib support; on i686-linux, it's-  # just the plain stdenv.-  stdenv_32bit = lowPrio (-    if system == "x86_64-linux" then-      overrideGCC stdenv gcc48_multi-    else-      stdenv);---  ### BUILD SUPPORT--  attrSetToDir = arg: import ../build-support/upstream-updater/attrset-to-dir.nix {-    inherit writeTextFile stdenv lib;-    theAttrSet = arg;-  };--  autoreconfHook = makeSetupHook-    { substitutions = { inherit autoconf automake libtool; }; }-    ../build-support/setup-hooks/autoreconf.sh;--  buildEnv = import ../build-support/buildenv {-    inherit (pkgs) runCommand perl;-  };--  buildFHSChrootEnv = import ../build-support/build-fhs-chrootenv {-    inherit stdenv glibc glibcLocales gcc coreutils diffutils findutils;-    inherit gnused gnugrep gnutar gzip bzip2 bashInteractive xz shadow gawk;-    inherit less buildEnv;-  };--  dotnetenv = import ../build-support/dotnetenv {-    inherit stdenv;-    dotnetfx = dotnetfx40;-  };--  scatterOutputHook = makeSetupHook {} ../build-support/setup-hooks/scatter_output.sh;--  vsenv = callPackage ../build-support/vsenv {-    vs = vs90wrapper;-  };--  fetchbower = import ../build-support/fetchbower {-    inherit stdenv git;-    inherit (nodePackages) fetch-bower;-  };--  fetchbzr = import ../build-support/fetchbzr {-    inherit stdenv bazaar;-  };--  fetchcvs = import ../build-support/fetchcvs {-    inherit stdenv cvs;-  };--  fetchdarcs = import ../build-support/fetchdarcs {-    inherit stdenv darcs nix;-  };--  fetchgit = import ../build-support/fetchgit {-    inherit stdenv git cacert;-  };--  fetchgitPrivate = import ../build-support/fetchgit/private.nix {-    inherit fetchgit writeScript openssh stdenv;-  };--  fetchgitrevision = import ../build-support/fetchgitrevision runCommand git;--  fetchmtn = callPackage ../build-support/fetchmtn (config.fetchmtn or {});--  packer = callPackage ../development/tools/packer { };--  fetchpatch = callPackage ../build-support/fetchpatch { };--  fetchsvn = import ../build-support/fetchsvn {-    inherit stdenv subversion openssh;-    sshSupport = true;-  };--  fetchsvnrevision = import ../build-support/fetchsvnrevision runCommand subversion;--  fetchsvnssh = import ../build-support/fetchsvnssh {-    inherit stdenv subversion openssh expect;-    sshSupport = true;-  };--  fetchhg = import ../build-support/fetchhg {-    inherit stdenv mercurial nix;-  };--  # `fetchurl' downloads a file from the network.-  fetchurl = import ../build-support/fetchurl {-    inherit curl stdenv;-  };--  # A wrapper around fetchurl that generates miror://gnome URLs automatically-  fetchurlGnome = callPackage ../build-support/fetchurl/gnome.nix { };--  # fetchurlBoot is used for curl and its dependencies in order to-  # prevent a cyclic dependency (curl depends on curl.tar.bz2,-  # curl.tar.bz2 depends on fetchurl, fetchurl depends on curl).  It-  # uses the curl from the previous bootstrap phase (e.g. a statically-  # linked curl in the case of stdenv-linux).-  fetchurlBoot = stdenv.fetchurlBoot;--  fetchzip = import ../build-support/fetchzip { inherit lib fetchurl unzip; };--  fetchFromGitHub = { owner, repo, rev, sha256 }: fetchzip {-    name = "${repo}-${rev}-src";-    url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz";-    inherit sha256;-  };--  resolveMirrorURLs = {url}: fetchurl {-    showURLs = true;-    inherit url;-  };--  libredirect = callPackage ../build-support/libredirect { };--  makeDesktopItem = import ../build-support/make-desktopitem {-    inherit stdenv;-  };--  makeAutostartItem = import ../build-support/make-startupitem {-    inherit stdenv;-    inherit lib;-  };--  makeInitrd = {contents, compressor ? "gzip -9"}:-    import ../build-support/kernel/make-initrd.nix {-      inherit stdenv perl perlArchiveCpio cpio contents ubootChooser compressor;-    };--  makeWrapper = makeSetupHook { } ../build-support/setup-hooks/make-wrapper.sh;--  makeModulesClosure = { kernel, rootModules, allowMissing ? false }:-    import ../build-support/kernel/modules-closure.nix {-      inherit stdenv kmod kernel nukeReferences rootModules allowMissing;-    };--  pathsFromGraph = ../build-support/kernel/paths-from-graph.pl;--  srcOnly = args: (import ../build-support/src-only) ({inherit stdenv; } // args);--  substituteAll = import ../build-support/substitute/substitute-all.nix {-    inherit stdenv;-  };--  replaceDependency = import ../build-support/replace-dependency.nix {-    inherit runCommand nix lib;-  };--  nukeReferences = callPackage ../build-support/nuke-references/default.nix { };--  vmTools = import ../build-support/vm/default.nix {-    inherit pkgs;-  };--  releaseTools = import ../build-support/release/default.nix {-    inherit pkgs;-  };--  composableDerivation = (import ../../lib/composable-derivation.nix) {-    inherit pkgs lib;-  };--  platforms = import ./platforms.nix;--  setJavaClassPath = makeSetupHook { } ../build-support/setup-hooks/set-java-classpath.sh;--  fixDarwinDylibNames = makeSetupHook { } ../build-support/setup-hooks/fix-darwin-dylib-names.sh;--  keepBuildTree = makeSetupHook { } ../build-support/setup-hooks/keep-build-tree.sh;--  enableGCOVInstrumentation = makeSetupHook { } ../build-support/setup-hooks/enable-coverage-instrumentation.sh;--  makeGCOVReport = makeSetupHook-    { deps = [ pkgs.lcov pkgs.enableGCOVInstrumentation ]; }-    ../build-support/setup-hooks/make-coverage-analysis-report.sh;---  ### TOOLS--  abduco = callPackage ../tools/misc/abduco { };--  acct = callPackage ../tools/system/acct { };--  acoustidFingerprinter = callPackage ../tools/audio/acoustid-fingerprinter {-    ffmpeg = ffmpeg_1;-  };--  actdiag = pythonPackages.actdiag;--  adom = callPackage ../games/adom { };--  aefs = callPackage ../tools/filesystems/aefs { };--  aegisub = callPackage ../applications/video/aegisub {-    wxGTK = wxGTK30;-    lua = lua5_1;-  };--  aespipe = callPackage ../tools/security/aespipe { };--  aescrypt = callPackage ../tools/misc/aescrypt { };--  ahcpd = callPackage ../tools/networking/ahcpd { };--  aircrackng = callPackage ../tools/networking/aircrack-ng { };--  analog = callPackage ../tools/admin/analog {};--  apktool = callPackage ../development/tools/apktool {-    buildTools = androidenv.buildTools;-  };--  apt-offline = callPackage ../tools/misc/apt-offline { };--  archivemount = callPackage ../tools/filesystems/archivemount { };--  arandr = callPackage ../tools/X11/arandr { };--  arcanist = callPackage ../development/tools/misc/arcanist {};--  arduino_core = callPackage ../development/arduino/arduino-core {-    jdk = jdk;-    jre = jdk;-  };--  argyllcms = callPackage ../tools/graphics/argyllcms {};--  arp-scan = callPackage ../tools/misc/arp-scan { };--  ascii = callPackage ../tools/text/ascii { };--  asymptote = builderDefsPackage ../tools/graphics/asymptote {-    inherit freeglut ghostscriptX imagemagick fftw boehmgc-      mesa ncurses readline gsl libsigsegv python zlib perl-      texinfo xz;-    texLive = texLiveAggregationFun {-      paths = [ texLive texLiveExtra texLiveCMSuper ];-    };-  };--  awscli = callPackage ../tools/admin/awscli { };--  ec2_api_tools = callPackage ../tools/virtualization/ec2-api-tools { };--  ec2_ami_tools = callPackage ../tools/virtualization/ec2-ami-tools { };--  altermime = callPackage ../tools/networking/altermime {};--  amule = callPackage ../tools/networking/p2p/amule { };--  amuleDaemon = appendToName "daemon" (amule.override {-    monolithic = false;-    daemon = true;-  });--  amuleGui = appendToName "gui" (amule.override {-    monolithic = false;-    client = true;-  });--  androidenv = import ../development/mobile/androidenv {-    inherit pkgs;-    pkgs_i686 = pkgsi686Linux;-  };--  apg = callPackage ../tools/security/apg { };--  grc = callPackage ../tools/misc/grc { };--  otool = callPackage ../os-specific/darwin/otool { };--  pass = callPackage ../tools/security/pass {-    gnupg = gnupg1compat;-  };--  setfile = callPackage ../os-specific/darwin/setfile { };--  install_name_tool = callPackage ../os-specific/darwin/install_name_tool { };--  xcodeenv = callPackage ../development/mobile/xcodeenv { };--  titaniumenv = callPackage ../development/mobile/titaniumenv {-    inherit pkgs;-    pkgs_i686 = pkgsi686Linux;-  };--  inherit (androidenv) androidsdk_4_1;--  aria2 = callPackage ../tools/networking/aria2 { };-  aria = aria2;--  at = callPackage ../tools/system/at { };--  atftp = callPackage ../tools/networking/atftp {};--  autogen = callPackage ../development/tools/misc/autogen { };--  autojump = callPackage ../tools/misc/autojump { };--  autorandr = callPackage ../tools/misc/autorandr {-    inherit (xorg) xrandr xdpyinfo;-  };--  avahi = callPackage ../development/libraries/avahi {-    qt4Support = config.avahi.qt4Support or false;-  };--  aws = callPackage ../tools/virtualization/aws { };--  aws_mturk_clt = callPackage ../tools/misc/aws-mturk-clt { };--  axel = callPackage ../tools/networking/axel { };--  azureus = callPackage ../tools/networking/p2p/azureus { };--  basex = callPackage ../tools/text/xml/basex { };--  babeld = callPackage ../tools/networking/babeld { };--  badvpn = callPackage ../tools/networking/badvpn {};--  banner = callPackage ../games/banner {};--  barcode = callPackage ../tools/graphics/barcode {};--  bc = callPackage ../tools/misc/bc { };--  bcache-tools = callPackage ../tools/filesystems/bcache-tools { };--  bchunk = callPackage ../tools/cd-dvd/bchunk { };--  bfr = callPackage ../tools/misc/bfr { };--  bindfs = callPackage ../tools/filesystems/bindfs { };--  bitbucket-cli = pythonPackages.bitbucket-cli;--  blockdiag = pythonPackages.blockdiag;--  bmon = callPackage ../tools/misc/bmon { };--  bochs = callPackage ../applications/virtualization/bochs { wxSupport = false; };--  boomerang = callPackage ../development/tools/boomerang { };--  bootchart = callPackage ../tools/system/bootchart { };--  bro = callPackage ../applications/networking/ids/bro { };--  bsod = callPackage ../misc/emulators/bsod { };--  btrfsProgs = callPackage ../tools/filesystems/btrfsprogs { };--  bwm_ng = callPackage ../tools/networking/bwm-ng { };--  byobu = callPackage ../tools/misc/byobu { };--  capstone = callPackage ../development/libraries/capstone { };--  catdoc = callPackage ../tools/text/catdoc { };--  ccnet = callPackage ../tools/networking/ccnet { };--  consul = callPackage ../servers/consul { };-  consul_ui = callPackage ../servers/consul/ui.nix { };--  chntpw = callPackage ../tools/security/chntpw { };--  coprthr = callPackage ../development/libraries/coprthr {-    flex = flex_2_5_35;-  };--  crawl = callPackage ../games/crawl { lua = lua5; };--  cv = callPackage ../tools/misc/cv { };--  direnv = callPackage ../tools/misc/direnv { };--  ditaa = callPackage ../tools/graphics/ditaa { };--  dlx = callPackage ../misc/emulators/dlx { };--  eggdrop = callPackage ../tools/networking/eggdrop { };--  enca = callPackage ../tools/text/enca { };--  fasd = callPackage ../tools/misc/fasd {-    inherit (haskellPackages) pandoc;-  };--  fop = callPackage ../tools/typesetting/fop { };--  mcrl = callPackage ../tools/misc/mcrl { };--  mcrl2 = callPackage ../tools/misc/mcrl2 { };--  mpdcron = callPackage ../tools/audio/mpdcron { };--  syslogng = callPackage ../tools/system/syslog-ng { };--  syslogng_incubator = callPackage ../tools/system/syslog-ng-incubator { };--  rsyslog = callPackage ../tools/system/rsyslog { };--  mcrypt = callPackage ../tools/misc/mcrypt { };--  mcelog = callPackage ../os-specific/linux/mcelog { };--  apparix = callPackage ../tools/misc/apparix { };--  appdata-tools = callPackage ../tools/misc/appdata-tools { };--  asciidoc = callPackage ../tools/typesetting/asciidoc {-    inherit (pythonPackages) matplotlib numpy aafigure recursivePthLoader;-    enableStandardFeatures = false;-  };--  asciidoc-full = appendToName "full" (asciidoc.override {-    inherit (pythonPackages) pygments;-    enableStandardFeatures = true;-  });--  autossh = callPackage ../tools/networking/autossh { };--  bacula = callPackage ../tools/backup/bacula { };--  beanstalkd = callPackage ../servers/beanstalkd { };--  bgs = callPackage ../tools/X11/bgs { };--  biber = callPackage ../tools/typesetting/biber {-    inherit (perlPackages)-      autovivification BusinessISBN BusinessISMN BusinessISSN ConfigAutoConf-      DataCompare DataDump DateSimple EncodeEUCJPASCII EncodeHanExtra EncodeJIS2K-      ExtUtilsLibBuilder FileSlurp IPCRun3 Log4Perl LWPProtocolHttps ListAllUtils-      ListMoreUtils ModuleBuild MozillaCA ReadonlyXS RegexpCommon TextBibTeX-      UnicodeCollate UnicodeLineBreak URI XMLLibXMLSimple XMLLibXSLT XMLWriter;-  };--  bibtextools = callPackage ../tools/typesetting/bibtex-tools {-    inherit (strategoPackages016) strategoxt sdf;-  };--  bittorrent = callPackage ../tools/networking/p2p/bittorrent {-    gui = true;-  };--  bittornado = callPackage ../tools/networking/p2p/bit-tornado { };--  blueman = callPackage ../tools/bluetooth/blueman {-    inherit (pythonPackages) notify;-  };--  bmrsa = builderDefsPackage (import ../tools/security/bmrsa/11.nix) {-    inherit unzip;-  };--  bogofilter = callPackage ../tools/misc/bogofilter { };--  bsdiff = callPackage ../tools/compression/bsdiff { };--  btar = callPackage ../tools/backup/btar { };--  bud = callPackage ../tools/networking/bud {-    inherit (pythonPackages) gyp;-  };--  bup = callPackage ../tools/backup/bup {-    inherit (pythonPackages) pyxattr pylibacl setuptools fuse;-    inherit (haskellPackages) pandoc;-    par2Support = (config.bup.par2Support or false);-  };--  ori = callPackage ../tools/backup/ori { };--  atool = callPackage ../tools/archivers/atool { };--  bzip2 = callPackage ../tools/compression/bzip2 { };--  cabextract = callPackage ../tools/archivers/cabextract { };--  cadaver = callPackage ../tools/networking/cadaver { };--  cantata = callPackage ../applications/audio/cantata { };--  can-utils = callPackage ../os-specific/linux/can-utils { };--  ccid = callPackage ../tools/security/ccid { };--  ccrypt = callPackage ../tools/security/ccrypt { };--  cdecl = callPackage ../development/tools/cdecl { };--  cdrdao = callPackage ../tools/cd-dvd/cdrdao { };--  cdrkit = callPackage ../tools/cd-dvd/cdrkit { };--  ceph = callPackage ../tools/filesystems/ceph { };--  cfdg = builderDefsPackage ../tools/graphics/cfdg {-    inherit libpng bison flex ffmpeg;-  };--  checkinstall = callPackage ../tools/package-management/checkinstall { };--  cheetahTemplate = builderDefsPackage (import ../tools/text/cheetah-template/2.0.1.nix) {-    inherit makeWrapper python;-  };--  chkrootkit = callPackage ../tools/security/chkrootkit { };--  chrony = callPackage ../tools/networking/chrony { };--  chunkfs = callPackage ../tools/filesystems/chunkfs { };--  chunksync = callPackage ../tools/backup/chunksync { };--  cjdns = callPackage ../tools/networking/cjdns { };--  cksfv = callPackage ../tools/networking/cksfv { };--  clementine = callPackage ../applications/audio/clementine { };--  ciopfs = callPackage ../tools/filesystems/ciopfs { };--  colord = callPackage ../tools/misc/colord { };--  colord-gtk = callPackage ../tools/misc/colord-gtk { };--  colordiff = callPackage ../tools/text/colordiff { };--  concurrencykit = callPackage ../development/libraries/concurrencykit { };--  connect = callPackage ../tools/networking/connect { };--  conspy = callPackage ../os-specific/linux/conspy {};--  connman = callPackage ../tools/networking/connman { };--  connmanui = callPackage ../tools/networking/connmanui { };--  convertlit = callPackage ../tools/text/convertlit { };--  collectd = callPackage ../tools/system/collectd { };--  colormake = callPackage ../development/tools/build-managers/colormake { };--  cowsay = callPackage ../tools/misc/cowsay { };--  cpuminer = callPackage ../tools/misc/cpuminer { };--  cuetools = callPackage ../tools/cd-dvd/cuetools { };--  unifdef = callPackage ../development/tools/misc/unifdef { };--  "unionfs-fuse" = callPackage ../tools/filesystems/unionfs-fuse { };--  usb_modeswitch = callPackage ../development/tools/misc/usb-modeswitch { };--  biosdevname = callPackage ../tools/networking/biosdevname { };--  clamav = callPackage ../tools/security/clamav { };--  cloc = callPackage ../tools/misc/cloc {-    inherit (perlPackages) perl AlgorithmDiff RegexpCommon;-  };--  cloog = callPackage ../development/libraries/cloog { };--  cloogppl = callPackage ../development/libraries/cloog-ppl { };--  convmv = callPackage ../tools/misc/convmv { };--  cool-old-term = callPackage ../applications/misc/cool-old-term { };--  coreutils = callPackage ../tools/misc/coreutils-    {-      # TODO: Add ACL support for cross-Linux.-      aclSupport = crossSystem == null && stdenv.isLinux;-    };--  cpio = callPackage ../tools/archivers/cpio { };--  cromfs = callPackage ../tools/archivers/cromfs { };--  cron = callPackage ../tools/system/cron { };--  cudatoolkit5 = callPackage ../development/compilers/cudatoolkit/5.5.nix {-    python = python26;-  };--  cudatoolkit6 = callPackage ../development/compilers/cudatoolkit/6.0.nix {-    python = python26;-  };--  cudatoolkit = cudatoolkit5;--  curl = callPackage ../tools/networking/curl rec {-    fetchurl = fetchurlBoot;-    zlibSupport = true;-    sslSupport = zlibSupport;-    scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin;-  };--  curl3 = callPackage ../tools/networking/curl/7.15.nix rec {-    zlibSupport = true;-    sslSupport = zlibSupport;-  };--  cunit = callPackage ../tools/misc/cunit { };--  curlftpfs = callPackage ../tools/filesystems/curlftpfs { };--  cutter = callPackage ../tools/networking/cutter { };--  dadadodo = builderDefsPackage (import ../tools/text/dadadodo) { };--  daq = callPackage ../applications/networking/ids/daq { };--  dar = callPackage ../tools/archivers/dar { };--  davfs2 = callPackage ../tools/filesystems/davfs2 { };--  dbench = callPackage ../development/tools/misc/dbench { };--  dcraw = callPackage ../tools/graphics/dcraw { };--  debian_devscripts = callPackage ../tools/misc/debian-devscripts {-    inherit (perlPackages) CryptSSLeay LWP TimeDate DBFile FileDesktopEntry;-  };--  debootstrap = callPackage ../tools/misc/debootstrap { };--  detox = callPackage ../tools/misc/detox { };--  ddclient = callPackage ../tools/networking/ddclient { };--  dd_rescue = callPackage ../tools/system/dd_rescue { };--  ddrescue = callPackage ../tools/system/ddrescue { };--  deluge = pythonPackages.deluge;--  desktop_file_utils = callPackage ../tools/misc/desktop-file-utils { };--  despotify = callPackage ../development/libraries/despotify { };--  dev86 = callPackage ../development/compilers/dev86 { };--  dnsmasq = callPackage ../tools/networking/dnsmasq { };--  dnstop = callPackage ../tools/networking/dnstop { };--  dhcp = callPackage ../tools/networking/dhcp { };--  dhcpcd = callPackage ../tools/networking/dhcpcd { };--  diffstat = callPackage ../tools/text/diffstat { };--  diffutils = callPackage ../tools/text/diffutils { };--  wgetpaste = callPackage ../tools/text/wgetpaste { };--  dirmngr = callPackage ../tools/security/dirmngr { };--  disper = callPackage ../tools/misc/disper { };--  dmd = callPackage ../development/compilers/dmd { };--  dmg2img = callPackage ../tools/misc/dmg2img { };--  docbook2odf = callPackage ../tools/typesetting/docbook2odf {-    inherit (perlPackages) PerlMagick;-  };--  docbook2x = callPackage ../tools/typesetting/docbook2x {-    inherit (perlPackages) XMLSAX XMLParser XMLNamespaceSupport;-  };--  dosfstools = callPackage ../tools/filesystems/dosfstools { };--  dotnetfx35 = callPackage ../development/libraries/dotnetfx35 { };--  dotnetfx40 = callPackage ../development/libraries/dotnetfx40 { };--  dropbear = callPackage ../tools/networking/dropbear { };--  dtach = callPackage ../tools/misc/dtach { };--  duo-unix = callPackage ../tools/security/duo-unix { };--  duplicity = callPackage ../tools/backup/duplicity {-    inherit (pythonPackages) boto lockfile;-    gnupg = gnupg1;-  };--  duply = callPackage ../tools/backup/duply { };--  dvdplusrwtools = callPackage ../tools/cd-dvd/dvd+rw-tools { };--  dvgrab = callPackage ../tools/video/dvgrab { };--  dvtm = callPackage ../tools/misc/dvtm { };--  e2fsprogs = callPackage ../tools/filesystems/e2fsprogs { };--  easyrsa = callPackage ../tools/networking/easyrsa { };--  ebook_tools = callPackage ../tools/text/ebook-tools { };--  ecryptfs = callPackage ../tools/security/ecryptfs { };--  editres = callPackage ../tools/graphics/editres {-    inherit (xlibs) libXt libXaw;-    inherit (xorg) utilmacros;-  };--  edk2 = callPackage ../development/compilers/edk2 { };--  efibootmgr = callPackage ../tools/system/efibootmgr { };--  efivar = callPackage ../tools/system/efivar { };--  evemu = callPackage ../tools/system/evemu { };--  elasticsearch = callPackage ../servers/search/elasticsearch { };--  elasticsearchPlugins = recurseIntoAttrs (-    callPackage ../servers/search/elasticsearch/plugins.nix { }-  );--  emv = callPackage ../tools/misc/emv { };--  enblendenfuse = callPackage ../tools/graphics/enblend-enfuse { };--  encfs = callPackage ../tools/filesystems/encfs { };--  enscript = callPackage ../tools/text/enscript { };--  ethtool = callPackage ../tools/misc/ethtool { };--  ettercap = callPackage ../applications/networking/sniffers/ettercap { };--  euca2ools = callPackage ../tools/virtualization/euca2ools { pythonPackages = python26Packages; };--  evtest = callPackage ../applications/misc/evtest { };--  exempi = callPackage ../development/libraries/exempi { };--  execline = callPackage ../tools/misc/execline { };--  exercism = callPackage ../development/tools/exercism { };--  exif = callPackage ../tools/graphics/exif { };--  exiftags = callPackage ../tools/graphics/exiftags { };--  extundelete = callPackage ../tools/filesystems/extundelete { };--  expect = callPackage ../tools/misc/expect { };--  f2fs-tools = callPackage ../tools/filesystems/f2fs-tools { };--  fabric = pythonPackages.fabric;--  fail2ban = callPackage ../tools/security/fail2ban {-    systemd = systemd.override {-      pythonSupport = true;-    };-  };--  fakeroot = callPackage ../tools/system/fakeroot { };--  fakechroot = callPackage ../tools/system/fakechroot { };--  fcitx = callPackage ../tools/inputmethods/fcitx { };--  fcron = callPackage ../tools/system/fcron { };--  fdm = callPackage ../tools/networking/fdm {};--  figlet = callPackage ../tools/misc/figlet { };--  file = callPackage ../tools/misc/file { };--  filegive = callPackage ../tools/networking/filegive { };--  fileschanged = callPackage ../tools/misc/fileschanged { };--  findutils = callPackage ../tools/misc/findutils { };--  finger_bsd = callPackage ../tools/networking/bsd-finger { };--  fio = callPackage ../tools/system/fio { };--  flashtool = callPackage_i686 ../development/mobile/flashtool {-    platformTools = androidenv.platformTools;-  };--  flpsed = callPackage ../applications/editors/flpsed { };--  flvstreamer = callPackage ../tools/networking/flvstreamer { };--  libbsd = callPackage ../development/libraries/libbsd { };--  lprof = callPackage ../tools/graphics/lprof { };--  fdk_aac = callPackage ../development/libraries/fdk-aac { };--  flvtool2 = callPackage ../tools/video/flvtool2 { };--  fontforge = lowPrio (callPackage ../tools/misc/fontforge { });--  fontforgeX = callPackage ../tools/misc/fontforge {-    withX11 = true;-  };--  forktty = callPackage ../os-specific/linux/forktty {};--  fortune = callPackage ../tools/misc/fortune { };--  fox = callPackage ../development/libraries/fox/default.nix {-    libpng = libpng12;-  };--  fox_1_6 = callPackage ../development/libraries/fox/fox-1.6.nix { };--  fping = callPackage ../tools/networking/fping {};--  fprot = callPackage ../tools/security/fprot { };--  freeipmi = callPackage ../tools/system/freeipmi {};--  freetalk = callPackage ../applications/networking/instant-messengers/freetalk {-    guile = guile_1_8;-  };--  freetds = callPackage ../development/libraries/freetds { };--  ftgl = callPackage ../development/libraries/ftgl { };--  ftgl212 = callPackage ../development/libraries/ftgl/2.1.2.nix { };--  fuppes = callPackage ../tools/networking/fuppes {-    ffmpeg = ffmpeg_0_6_90;-  };--  fsfs = callPackage ../tools/filesystems/fsfs { };--  fuse_zip = callPackage ../tools/filesystems/fuse-zip { };--  fuse_exfat = callPackage ../tools/filesystems/fuse-exfat { };--  dos2unix = callPackage ../tools/text/dos2unix { };--  uni2ascii = callPackage ../tools/text/uni2ascii { };--  g500-control = callPackage ../tools/misc/g500-control { };--  galculator = callPackage ../applications/misc/galculator {-    gtk = gtk3;-  };--  gawk = callPackage ../tools/text/gawk { };--  gawkInteractive = appendToName "interactive"-    (gawk.override { readlineSupport = true; });--  gbdfed = callPackage ../tools/misc/gbdfed {-    gtk = gtk2;-  };--  gdmap = callPackage ../tools/system/gdmap { };--  genext2fs = callPackage ../tools/filesystems/genext2fs { };--  gengetopt = callPackage ../development/tools/misc/gengetopt { };--  getmail = callPackage ../tools/networking/getmail { };--  getopt = callPackage ../tools/misc/getopt { };--  gftp = callPackage ../tools/networking/gftp { };--  gifsicle = callPackage ../tools/graphics/gifsicle { };--  glusterfs = callPackage ../tools/filesystems/glusterfs { };--  glmark2 = callPackage ../tools/graphics/glmark2 { };--  glxinfo = callPackage ../tools/graphics/glxinfo { };--  gmvault = callPackage ../tools/networking/gmvault { };--  gnokii = builderDefsPackage (import ../tools/misc/gnokii) {-    inherit intltool perl gettext libusb pkgconfig bluez readline pcsclite-      libical gtk glib;-    inherit (xorg) libXpm;-  };--  gnufdisk = callPackage ../tools/system/fdisk {-    guile = guile_1_8;-  };--  gnugrep = callPackage ../tools/text/gnugrep {-    libiconv = libiconvOrNull;-  };--  gnulib = callPackage ../development/tools/gnulib { };--  gnupatch = callPackage ../tools/text/gnupatch { };--  gnupg1orig = callPackage ../tools/security/gnupg1 { };--  gnupg1compat = callPackage ../tools/security/gnupg1compat { };--  # use config.packageOverrides if you prefer original gnupg1-  gnupg1 = gnupg1compat;--  gnupg = callPackage ../tools/security/gnupg { libusb = libusb1; };--  gnupg2_1 = lowPrio (callPackage ../tools/security/gnupg/git.nix {-    libassuan = libassuan2_1;-  });--  gnuplot = callPackage ../tools/graphics/gnuplot { };--  gnuplot_qt = gnuplot.override { withQt = true; };--  # must have AquaTerm installed separately-  gnuplot_aquaterm = gnuplot.override { aquaterm = true; };--  gnused = callPackage ../tools/text/gnused { };--  gnutar = callPackage ../tools/archivers/gnutar { };--  gnuvd = callPackage ../tools/misc/gnuvd { };--  goaccess = callPackage ../tools/misc/goaccess { };--  googleAuthenticator = callPackage ../os-specific/linux/google-authenticator { };--  gource = callPackage ../applications/version-management/gource {};--  gpodder = callPackage ../applications/audio/gpodder { };--  gptfdisk = callPackage ../tools/system/gptfdisk { };--  grafana = callPackage ../development/tools/misc/grafana { };--  grafx2 = callPackage ../applications/graphics/grafx2 {};--  graphviz = callPackage ../tools/graphics/graphviz { };--  /* Readded by Michael Raskin. There are programs in the wild-   * that do want 2.0 but not 2.22. Please give a day's notice for-   * objections before removal.-   */-  graphviz_2_0 = callPackage ../tools/graphics/graphviz/2.0.nix { };--  grive = callPackage ../tools/filesystems/grive {-    json_c = json-c-0-11; # won't configure with 0.12; others are vulnerable-  };--  groff = callPackage ../tools/text/groff {-    ghostscript = null;-  };--  grub = callPackage_i686 ../tools/misc/grub {-    buggyBiosCDSupport = config.grub.buggyBiosCDSupport or true;-  };--  grub2 = callPackage ../tools/misc/grub/2.0x.nix { libusb = libusb1; flex = flex_2_5_35; };--  grub2_efi = grub2.override { EFIsupport = true; };--  gssdp = callPackage ../development/libraries/gssdp {-    inherit (gnome) libsoup;-  };--  gt5 = callPackage ../tools/system/gt5 { };--  gtest = callPackage ../development/libraries/gtest {};--  gtkdatabox = callPackage ../development/libraries/gtkdatabox {};--  gtkgnutella = callPackage ../tools/networking/p2p/gtk-gnutella { };--  gtkvnc = callPackage ../tools/admin/gtk-vnc {};--  gtmess = callPackage ../applications/networking/instant-messengers/gtmess { };--  gummiboot = callPackage ../tools/misc/gummiboot { };--  gupnp = callPackage ../development/libraries/gupnp {-    inherit (gnome) libsoup;-  };--  gupnp_av = callPackage ../development/libraries/gupnp-av {};--  gupnp_igd = callPackage ../development/libraries/gupnp-igd {};--  gupnptools = callPackage ../tools/networking/gupnp-tools {};--  gvpe = builderDefsPackage ../tools/networking/gvpe {-    inherit openssl gmp nettools iproute;-  };--  gvolicon = callPackage ../tools/audio/gvolicon {};--  gzip = callPackage ../tools/compression/gzip { };--  gzrt = callPackage ../tools/compression/gzrt { };--  partclone = callPackage ../tools/backup/partclone { };--  partimage = callPackage ../tools/backup/partimage { };--  pigz = callPackage ../tools/compression/pigz { };--  haproxy = callPackage ../tools/networking/haproxy { };--  haveged = callPackage ../tools/security/haveged { };--  hardlink = callPackage ../tools/system/hardlink { };--  hashcat = callPackage ../tools/security/hashcat { };--  halibut = callPackage ../tools/typesetting/halibut { };--  hddtemp = callPackage ../tools/misc/hddtemp { };--  hdf5 = callPackage ../tools/misc/hdf5 {-    szip = null;-  };--  heimdall = callPackage ../tools/misc/heimdall { };--  hevea = callPackage ../tools/typesetting/hevea { };--  highlight = callPackage ../tools/text/highlight {-    lua = lua5;-  };--  host = callPackage ../tools/networking/host { };--  hping = callPackage ../tools/networking/hping { };--  httpie = callPackage ../tools/networking/httpie { };--  httpfs2 = callPackage ../tools/filesystems/httpfs { };--  # FIXME: This Hydra snapshot is outdated and depends on the `nixPerl',-  # which no longer exists.-  #-  # hydra = callPackage ../development/tools/misc/hydra {-  #   nix = nixUnstable;-  # };--  iasl = callPackage ../development/compilers/iasl { };--  icecast = callPackage ../servers/icecast { };--  icoutils = callPackage ../tools/graphics/icoutils { };--  idutils = callPackage ../tools/misc/idutils { };--  idle3tools = callPackage ../tools/system/idle3tools { };--  iftop = callPackage ../tools/networking/iftop { };--  imapproxy = callPackage ../tools/networking/imapproxy { };--  imapsync = callPackage ../tools/networking/imapsync {-    inherit (perlPackages) MailIMAPClient;-  };--  inadyn = callPackage ../tools/networking/inadyn { };--  inetutils = callPackage ../tools/networking/inetutils { };--  ioping = callPackage ../tools/system/ioping {};--  iodine = callPackage ../tools/networking/iodine { };--  iperf = callPackage ../tools/networking/iperf { };--  ipmitool = callPackage ../tools/system/ipmitool {-    static = false;-  };--  ipmiutil = callPackage ../tools/system/ipmiutil {};--  ised = callPackage ../tools/misc/ised {};--  isl = callPackage ../development/libraries/isl { };-  isl_0_12 = callPackage ../development/libraries/isl/0.12.2.nix { };--  isync = callPackage ../tools/networking/isync { };--  jd-gui = callPackage_i686 ../tools/security/jd-gui { };--  jdiskreport = callPackage ../tools/misc/jdiskreport { };--  jfsrec = callPackage ../tools/filesystems/jfsrec {-    boost = boost144;-  };--  jfsutils = callPackage ../tools/filesystems/jfsutils { };--  jhead = callPackage ../tools/graphics/jhead { };--  jing = callPackage ../tools/text/xml/jing { };--  jmtpfs = callPackage ../tools/filesystems/jmtpfs { };--  jnettop = callPackage ../tools/networking/jnettop { };--  jq = callPackage ../development/tools/jq {};--  jscoverage = callPackage ../development/tools/misc/jscoverage { };--  jwhois = callPackage ../tools/networking/jwhois { };--  kazam = callPackage ../applications/video/kazam { };--  kalibrate-rtl = callPackage ../tools/misc/kalibrate-rtl { };--  kexectools = callPackage ../os-specific/linux/kexectools { };--  keychain = callPackage ../tools/misc/keychain { };--  kismet = callPackage ../applications/networking/sniffers/kismet { };--  less = callPackage ../tools/misc/less { };--  lockfileProgs = callPackage ../tools/misc/lockfile-progs { };--  logstash = callPackage ../tools/misc/logstash { };--  logstash-forwarder = callPackage ../tools/misc/logstash-forwarder { };--  kippo = callPackage ../servers/kippo { };--  klavaro = callPackage ../games/klavaro {};--  kzipmix = callPackage_i686 ../tools/compression/kzipmix { };--  minidlna = callPackage ../tools/networking/minidlna {-    ffmpeg = ffmpeg_0_10;-  };--  mmv = callPackage ../tools/misc/mmv { };--  most = callPackage ../tools/misc/most { };--  multitail = callPackage ../tools/misc/multitail { };--  netperf = callPackage ../applications/networking/netperf { };--  ninka = callPackage ../development/tools/misc/ninka { };--  nodejs = callPackage ../development/web/nodejs {};--  nodePackages = recurseIntoAttrs (import ./node-packages.nix {-    inherit pkgs stdenv nodejs fetchurl fetchgit;-    neededNatives = [python] ++ lib.optional (lib.elem system lib.platforms.linux) utillinux;-    self = pkgs.nodePackages;-  });--  ldapvi = callPackage ../tools/misc/ldapvi { };--  ldns = callPackage ../development/libraries/ldns { };--  lftp = callPackage ../tools/networking/lftp { };--  libconfig = callPackage ../development/libraries/libconfig { };--  libee = callPackage ../development/libraries/libee { };--  libestr = callPackage ../development/libraries/libestr { };--  libevdev = callPackage ../development/libraries/libevdev { };--  liboauth = callPackage ../development/libraries/liboauth { };--  libtirpc = callPackage ../development/libraries/ti-rpc { };--  libshout = callPackage ../development/libraries/libshout { };--  libqmi = callPackage ../development/libraries/libqmi { };--  libmbim = callPackage ../development/libraries/libmbim { };--  libtorrent = callPackage ../tools/networking/p2p/libtorrent { };--  logcheck = callPackage ../tools/system/logcheck {-    inherit (perlPackages) mimeConstruct;-  };--  logrotate = callPackage ../tools/system/logrotate { };--  logstalgia = callPackage ../tools/graphics/logstalgia {};--  lout = callPackage ../tools/typesetting/lout { };--  lrzip = callPackage ../tools/compression/lrzip { };--  # lsh installs `bin/nettle-lfib-stream' and so does Nettle.  Give the-  # former a lower priority than Nettle.-  lsh = lowPrio (callPackage ../tools/networking/lsh { });--  lshw = callPackage ../tools/system/lshw { };--  lxc = callPackage ../os-specific/linux/lxc { };--  lzip = callPackage ../tools/compression/lzip { };--  lzma = xz;--  xz = callPackage ../tools/compression/xz { };--  lzop = callPackage ../tools/compression/lzop { };--  maildrop = callPackage ../tools/networking/maildrop { };--  mailpile = callPackage ../applications/networking/mailreaders/mailpile { };--  mailutils = callPackage ../tools/networking/mailutils {-    guile = guile_1_8;-  };--  mairix = callPackage ../tools/text/mairix { };--  makemkv = callPackage ../applications/video/makemkv { };--  man = callPackage ../tools/misc/man { };--  man_db = callPackage ../tools/misc/man-db { };--  memtest86 = callPackage ../tools/misc/memtest86 { };--  memtest86plus = callPackage ../tools/misc/memtest86+ { };--  meo = callPackage ../tools/security/meo { };--  mc = callPackage ../tools/misc/mc { };--  mcabber = callPackage ../applications/networking/instant-messengers/mcabber { };--  mcron = callPackage ../tools/system/mcron {-    guile = guile_1_8;-  };--  mdbtools = callPackage ../tools/misc/mdbtools { };--  mdbtools_git = callPackage ../tools/misc/mdbtools/git.nix {-    inherit (gnome) scrollkeeper;-  };--  mednafen = callPackage ../misc/emulators/mednafen { };--  mednafen-server = callPackage ../misc/emulators/mednafen/server.nix { };--  megacli = callPackage ../tools/misc/megacli { };--  megatools = callPackage ../tools/networking/megatools { };--  mfcuk = callPackage ../tools/security/mfcuk { };--  minecraft = callPackage ../games/minecraft { };--  minecraft-server = callPackage ../games/minecraft-server { };--  minetest = callPackage ../games/minetest {-    libpng = libpng12;-  };--  miniupnpc = callPackage ../tools/networking/miniupnpc { };--  miniupnpd = callPackage ../tools/networking/miniupnpd { };--  minixml = callPackage ../development/libraries/minixml { };--  mjpegtools = callPackage ../tools/video/mjpegtools { };--  mkcue = callPackage ../tools/cd-dvd/mkcue { };--  mkpasswd = callPackage ../tools/security/mkpasswd { };--  mktemp = callPackage ../tools/security/mktemp { };--  mktorrent = callPackage ../tools/misc/mktorrent { };--  modemmanager = callPackage ../tools/networking/modemmanager {};--  monit = callPackage ../tools/system/monit { };--  mosh = callPackage ../tools/networking/mosh {-    boost = boostHeaders;-    inherit (perlPackages) IOTty;-  };--  mpage = callPackage ../tools/text/mpage { };--  mr = callPackage ../applications/version-management/mr { };--  mscgen = callPackage ../tools/graphics/mscgen { };--  msf = builderDefsPackage (import ../tools/security/metasploit/3.1.nix) {-    inherit ruby makeWrapper;-  };--  mssys = callPackage ../tools/misc/mssys { };--  mtdutils = callPackage ../tools/filesystems/mtdutils { };--  mtools = callPackage ../tools/filesystems/mtools { };--  mtr = callPackage ../tools/networking/mtr {};--  multitran = recurseIntoAttrs (let callPackage = newScope pkgs.multitran; in rec {-    multitrandata = callPackage ../tools/text/multitran/data { };--    libbtree = callPackage ../tools/text/multitran/libbtree { };--    libmtsupport = callPackage ../tools/text/multitran/libmtsupport { };--    libfacet = callPackage ../tools/text/multitran/libfacet { };--    libmtquery = callPackage ../tools/text/multitran/libmtquery { };--    mtutils = callPackage ../tools/text/multitran/mtutils { };-  });--  munge = callPackage ../tools/security/munge { };--  muscleframework = callPackage ../tools/security/muscleframework { };--  muscletool = callPackage ../tools/security/muscletool { };--  mysql2pgsql = callPackage ../tools/misc/mysql2pgsql { };--  namazu = callPackage ../tools/text/namazu { };--  nbd = callPackage ../tools/networking/nbd { };--  ndjbdns = callPackage ../tools/networking/ndjbdns { };--  netatalk = callPackage ../tools/filesystems/netatalk { };--  netcdf = callPackage ../development/libraries/netcdf { };--  nc6 = callPackage ../tools/networking/nc6 { };--  ncat = callPackage ../tools/networking/ncat { };--  ncftp = callPackage ../tools/networking/ncftp { };--  ncompress = callPackage ../tools/compression/ncompress { };--  ndisc6 = callPackage ../tools/networking/ndisc6 { };--  netboot = callPackage ../tools/networking/netboot {};--  netcat = callPackage ../tools/networking/netcat { };--  netcat-openbsd = callPackage ../tools/networking/netcat-openbsd { };--  nethogs = callPackage ../tools/networking/nethogs { };--  netkittftp = callPackage ../tools/networking/netkit/tftp { };--  netpbm = callPackage ../tools/graphics/netpbm { };--  netrw = callPackage ../tools/networking/netrw { };--  netselect = callPackage ../tools/networking/netselect { };--  networkmanager = callPackage ../tools/networking/network-manager { };--  networkmanager_openvpn = callPackage ../tools/networking/network-manager/openvpn.nix { };--  networkmanager_pptp = callPackage ../tools/networking/network-manager/pptp.nix { };--  networkmanager_vpnc = callPackage ../tools/networking/network-manager/vpnc.nix { };--  networkmanager_openconnect = callPackage ../tools/networking/network-manager/openconnect.nix { };--  networkmanagerapplet = newScope gnome ../tools/networking/network-manager-applet { dconf = gnome3.dconf; };--  newsbeuter = callPackage ../applications/networking/feedreaders/newsbeuter { };--  newsbeuter-dev = callPackage ../applications/networking/feedreaders/newsbeuter/dev.nix { };--  ngrep = callPackage ../tools/networking/ngrep { };--  ngrok = callPackage ../tools/misc/ngrok { };--  mpack = callPackage ../tools/networking/mpack { };--  pa_applet = callPackage ../tools/audio/pa-applet { };--  pnmixer = callPackage ../tools/audio/pnmixer { };--  nifskope = callPackage ../tools/graphics/nifskope { };--  nilfs_utils = callPackage ../tools/filesystems/nilfs-utils {};--  nitrogen = callPackage ../tools/X11/nitrogen {};--  nlopt = callPackage ../development/libraries/nlopt {};--  npapi_sdk = callPackage ../development/libraries/npapi-sdk {};--  npth = callPackage ../development/libraries/npth {};--  nmap = callPackage ../tools/security/nmap { };--  nmap_graphical = callPackage ../tools/security/nmap {-    inherit (pythonPackages) pysqlite;-    graphicalSupport = true;-  };--  notbit = callPackage ../applications/networking/notbit { };--  nox = callPackage ../tools/package-management/nox {-    pythonPackages = python3Packages;-    nix = nixUnstable;-  };--  nss_pam_ldapd = callPackage ../tools/networking/nss-pam-ldapd {};--  ntfs3g = callPackage ../tools/filesystems/ntfs-3g { };--  # ntfsprogs are merged into ntfs-3g-  ntfsprogs = pkgs.ntfs3g;--  ntop = callPackage ../tools/networking/ntop { };--  ntopng = callPackage ../tools/networking/ntopng { };--  ntp = callPackage ../tools/networking/ntp { };--  numdiff = callPackage ../tools/text/numdiff { };--  nssmdns = callPackage ../tools/networking/nss-mdns { };--  nwdiag = pythonPackages.nwdiag;--  nylon = callPackage ../tools/networking/nylon { };--  nzbget = callPackage ../tools/networking/nzbget { };--  oathToolkit = callPackage ../tools/security/oath-toolkit { };--  obex_data_server = callPackage ../tools/bluetooth/obex-data-server { };--  obexd = callPackage ../tools/bluetooth/obexd { };--  obexfs = callPackage ../tools/bluetooth/obexfs { };--  obexftp = callPackage ../tools/bluetooth/obexftp { };--  obnam = callPackage ../tools/backup/obnam { };--  odt2txt = callPackage ../tools/text/odt2txt { };--  offlineimap = callPackage ../tools/networking/offlineimap {-    inherit (pythonPackages) sqlite3;-  };--  opendbx = callPackage ../development/libraries/opendbx { };--  opendkim = callPackage ../development/libraries/opendkim { };--  opendylan = callPackage ../development/compilers/opendylan {-    opendylan-bootstrap = opendylan_bin;-  };--  opendylan_bin = callPackage ../development/compilers/opendylan/bin.nix { };--  openjade = callPackage ../tools/text/sgml/openjade { };--  openobex = callPackage ../tools/bluetooth/openobex { };--  openopc = callPackage ../tools/misc/openopc {-    pythonFull = python27Full.override {-      extraLibs = [ python27Packages.pyro3 ];-    };-  };--  openresolv = callPackage ../tools/networking/openresolv { };--  opensc = callPackage ../tools/security/opensc { };--  opensc_dnie_wrapper = callPackage ../tools/security/opensc-dnie-wrapper { };--  openssh =-    callPackage ../tools/networking/openssh {-      hpnSupport = false;-      withKerberos = false;-      etcDir = "/etc/ssh";-      pam = if stdenv.isLinux then pam else null;-    };--  openssh_hpn = pkgs.appendToName "with-hpn" (openssh.override { hpnSupport = true; });--  openssh_with_kerberos = pkgs.appendToName "with-kerberos" (openssh.override { withKerberos = true; });--  opensp = callPackage ../tools/text/sgml/opensp { };--  spCompat = callPackage ../tools/text/sgml/opensp/compat.nix { };--  openvpn = callPackage ../tools/networking/openvpn { };--  openvpn_learnaddress = callPackage ../tools/networking/openvpn/openvpn_learnaddress.nix { };--  optipng = callPackage ../tools/graphics/optipng {-    libpng = libpng12;-  };--  oslrd = callPackage ../tools/networking/oslrd { };--  ossec = callPackage ../tools/security/ossec {};--  otpw = callPackage ../os-specific/linux/otpw { };--  p7zip = callPackage ../tools/archivers/p7zip { };--  pal = callPackage ../tools/misc/pal { };--  panomatic = callPackage ../tools/graphics/panomatic { };--  par2cmdline = callPackage ../tools/networking/par2cmdline { };--  parallel = callPackage ../tools/misc/parallel { };--  parcellite = callPackage ../tools/misc/parcellite { };--  patchutils = callPackage ../tools/text/patchutils { };--  parted = callPackage ../tools/misc/parted { hurd = null; };--  pitivi = callPackage ../applications/video/pitivi {-    gst = gst_all_1;-    clutter-gtk = clutter_gtk;-    inherit (gnome3) gnome_icon_theme gnome_icon_theme_symbolic;-  };--  p0f = callPackage ../tools/security/p0f { };--  pngout = callPackage ../tools/graphics/pngout { };--  hurdPartedCross =-    if crossSystem != null && crossSystem.config == "i586-pc-gnu"-    then (makeOverridable-            ({ hurd }:-              (parted.override {-                # Needs the Hurd's libstore.-                inherit hurd;--                # The Hurd wants a libparted.a.-                enableStatic = true;--                gettext = null;-                readline = null;-                devicemapper = null;-              }).crossDrv)-           { hurd = gnu.hurdCrossIntermediate; })-    else null;--  ipsecTools = callPackage ../os-specific/linux/ipsec-tools { flex = flex_2_5_35; };--  patch = gnupatch;--  pbzip2 = callPackage ../tools/compression/pbzip2 { };--  pciutils = callPackage ../tools/system/pciutils { };--  pcsclite = callPackage ../tools/security/pcsclite { };--  pdf2djvu = callPackage ../tools/typesetting/pdf2djvu { };--  pdfjam = callPackage ../tools/typesetting/pdfjam { };--  jbig2enc = callPackage ../tools/graphics/jbig2enc { };--  pdfread = callPackage ../tools/graphics/pdfread { };--  briss = callPackage ../tools/graphics/briss { };--  bully = callPackage ../tools/networking/bully { };--  pdnsd = callPackage ../tools/networking/pdnsd { };--  peco = callPackage ../tools/text/peco { };--  pg_top = callPackage ../tools/misc/pg_top { };--  pdsh = callPackage ../tools/networking/pdsh {-    rsh = true;          # enable internal rsh implementation-    ssh = openssh;-  };--  pfstools = callPackage ../tools/graphics/pfstools { };--  philter = callPackage ../tools/networking/philter { };--  pinentry = callPackage ../tools/security/pinentry { };--  pius = callPackage ../tools/security/pius { };--  pk2cmd = callPackage ../tools/misc/pk2cmd { };--  plantuml = callPackage ../tools/misc/plantuml { };--  plan9port = callPackage ../tools/system/plan9port { };--  ploticus = callPackage ../tools/graphics/ploticus {-    libpng = libpng12;-  };--  plotutils = callPackage ../tools/graphics/plotutils { };--  plowshare = callPackage ../tools/misc/plowshare { };--  pngcrush = callPackage ../tools/graphics/pngcrush { };--  pngnq = callPackage ../tools/graphics/pngnq { };--  pngtoico = callPackage ../tools/graphics/pngtoico {-    libpng = libpng12;-  };--  pngquant = callPackage ../tools/graphics/pngquant { };--  podiff = callPackage ../tools/text/podiff { };--  poedit = callPackage ../tools/text/poedit { };--  polipo = callPackage ../servers/polipo { };--  polkit_gnome = callPackage ../tools/security/polkit-gnome { };--  ponysay = callPackage ../tools/misc/ponysay { };--  povray = callPackage ../tools/graphics/povray { };--  ppl = callPackage ../development/libraries/ppl { };--  ppp = callPackage ../tools/networking/ppp { };--  pptp = callPackage ../tools/networking/pptp {};--  prey-bash-client = callPackage ../tools/security/prey { };--  projectm = callPackage ../applications/audio/projectm { };--  proxychains = callPackage ../tools/networking/proxychains { };--  proxytunnel = callPackage ../tools/misc/proxytunnel { };--  cntlm = callPackage ../tools/networking/cntlm { };--  pastebinit = callPackage ../tools/misc/pastebinit { };--  psmisc = callPackage ../os-specific/linux/psmisc { };--  pstoedit = callPackage ../tools/graphics/pstoedit { };--  pv = callPackage ../tools/misc/pv { };--  pwgen = callPackage ../tools/security/pwgen { };--  pwnat = callPackage ../tools/networking/pwnat { };--  pycangjie = callPackage ../development/python-modules/pycangjie { };--  pydb = callPackage ../development/tools/pydb { };--  pystringtemplate = callPackage ../development/python-modules/stringtemplate { };--  pythonDBus = dbus_python;--  pythonIRClib = builderDefsPackage (import ../development/python-modules/irclib) {-    inherit python;-  };--  pythonSexy = builderDefsPackage (import ../development/python-modules/libsexy) {-    inherit python libsexy pkgconfig libxml2 pygtk pango gtk glib;-  };--  openmpi = callPackage ../development/libraries/openmpi { };--  qhull = callPackage ../development/libraries/qhull { };--  qjoypad = callPackage ../tools/misc/qjoypad { };--  qshowdiff = callPackage ../tools/text/qshowdiff { };--  quilt = callPackage ../development/tools/quilt { };--  radvd = callPackage ../tools/networking/radvd { };--  ranger = callPackage ../applications/misc/ranger { };--  privateer = callPackage ../games/privateer { };--  rtmpdump = callPackage ../tools/video/rtmpdump { };--  reaverwps = callPackage ../tools/networking/reaver-wps {};--  recutils = callPackage ../tools/misc/recutils { };--  recoll = callPackage ../applications/search/recoll { };--  reiser4progs = callPackage ../tools/filesystems/reiser4progs { };--  reiserfsprogs = callPackage ../tools/filesystems/reiserfsprogs { };--  relfs = callPackage ../tools/filesystems/relfs {-    inherit (gnome) gnome_vfs GConf;-  };--  remarkjs = callPackage ../development/web/remarkjs { };--  remind = callPackage ../tools/misc/remind { };--  remmina = callPackage ../applications/networking/remote/remmina {};--  renameutils = callPackage ../tools/misc/renameutils { };--  replace = callPackage ../tools/text/replace { };--  reptyr = callPackage ../os-specific/linux/reptyr {};--  rdiff_backup = callPackage ../tools/backup/rdiff-backup { };--  rdmd = callPackage ../development/compilers/rdmd { };--  rhash = callPackage ../tools/security/rhash { };--  riemann_c_client = callPackage ../tools/misc/riemann-c-client { };--  ripmime = callPackage ../tools/networking/ripmime {};--  rkflashtool = callPackage ../tools/misc/rkflashtool { };--  rmlint = callPackage ../tools/misc/rmlint {};--  rng_tools = callPackage ../tools/security/rng-tools { };--  rsnapshot = callPackage ../tools/backup/rsnapshot {-    # For the `logger' command, we can use either `utillinux' or-    # GNU Inetutils.  The latter is more portable.-    logger = inetutils;-  };--  rlwrap = callPackage ../tools/misc/rlwrap { };--  rockbox_utility = callPackage ../tools/misc/rockbox-utility { };--  rpPPPoE = builderDefsPackage (import ../tools/networking/rp-pppoe) {-    inherit ppp;-  };--  rpm = callPackage ../tools/package-management/rpm { };--  rrdtool = callPackage ../tools/misc/rrdtool { };--  rtorrent = callPackage ../tools/networking/p2p/rtorrent { };--  rubber = callPackage ../tools/typesetting/rubber { };--  rxp = callPackage ../tools/text/xml/rxp { };--  rzip = callPackage ../tools/compression/rzip { };--  s3backer = callPackage ../tools/filesystems/s3backer { };--  s3cmd = callPackage ../tools/networking/s3cmd { };--  s3cmd_15_pre_81e3842f7a = lowPrio (callPackage ../tools/networking/s3cmd/git.nix { });--  s3sync = callPackage ../tools/networking/s3sync {-    ruby = ruby18;-  };--  sablotron = callPackage ../tools/text/xml/sablotron { };--  safecopy = callPackage ../tools/system/safecopy { };--  salut_a_toi = callPackage ../applications/networking/instant-messengers/salut-a-toi {};--  samplicator = callPackage ../tools/networking/samplicator { };--  screen = callPackage ../tools/misc/screen { };--  scrot = callPackage ../tools/graphics/scrot { };--  scrypt = callPackage ../tools/security/scrypt { };--  sdcv = callPackage ../applications/misc/sdcv { };--  sec = callPackage ../tools/admin/sec { };--  seccure = callPackage ../tools/security/seccure { };--  setserial = builderDefsPackage (import ../tools/system/setserial) {-    inherit groff;-  };--  seqdiag = pythonPackages.seqdiag;--  screenfetch = callPackage ../tools/misc/screenfetch { };--  sg3_utils = callPackage ../tools/system/sg3_utils { };--  sharutils = callPackage ../tools/archivers/sharutils { };--  shotwell = callPackage ../applications/graphics/shotwell { };--  shebangfix = callPackage ../tools/misc/shebangfix { };--  shellinabox = callPackage ../servers/shellinabox { };--  siege = callPackage ../tools/networking/siege {};--  silc_client = callPackage ../applications/networking/instant-messengers/silc-client { };--  silc_server = callPackage ../servers/silc-server { };--  silver-searcher = callPackage ../tools/text/silver-searcher { };--  simplescreenrecorder = callPackage ../applications/video/simplescreenrecorder { };--  sleuthkit = callPackage ../tools/system/sleuthkit {};--  slimrat = callPackage ../tools/networking/slimrat {-    inherit (perlPackages) WWWMechanize LWP;-  };--  slsnif = callPackage ../tools/misc/slsnif { };--  smartmontools = callPackage ../tools/system/smartmontools { };--  smbldaptools = callPackage ../tools/networking/smbldaptools {-    inherit (perlPackages) NetLDAP CryptSmbHash DigestSHA1;-  };--  smbnetfs = callPackage ../tools/filesystems/smbnetfs {};--  snort = callPackage ../applications/networking/ids/snort { };--  snx = callPackage_i686 ../tools/networking/snx {-    inherit (pkgsi686Linux) pam gcc33;-    inherit (pkgsi686Linux.xlibs) libX11;-  };--  solr = callPackage ../servers/search/solr { };--  sparsehash = callPackage ../development/libraries/sparsehash { };--  spiped = callPackage ../tools/networking/spiped { };--  sproxy = haskellPackages.callPackage ../tools/networking/sproxy { };--  sproxy-web = haskellPackages.callPackage ../tools/networking/sproxy-web { };--  stardict = callPackage ../applications/misc/stardict/stardict.nix {-    inherit (gnome) libgnomeui scrollkeeper;-  };--  storebrowse = callPackage ../tools/system/storebrowse { };--  fusesmb = callPackage ../tools/filesystems/fusesmb { };--  sl = callPackage ../tools/misc/sl { };--  socat = callPackage ../tools/networking/socat { };--  socat2pre = lowPrio (callPackage ../tools/networking/socat/2.x.nix { });--  sourceHighlight = callPackage ../tools/text/source-highlight {-    # Boost 1.54 causes the "test_regexranges" test to fail-    boost = boost149;-  };--  spaceFM = callPackage ../applications/misc/spacefm { };--  squashfsTools = callPackage ../tools/filesystems/squashfs { };--  sshfsFuse = callPackage ../tools/filesystems/sshfs-fuse { };--  sshuttle = callPackage ../tools/security/sshuttle { };--  sudo = callPackage ../tools/security/sudo { };--  suidChroot = builderDefsPackage (import ../tools/system/suid-chroot) { };--  super = callPackage ../tools/security/super { };--  ssdeep = callPackage ../tools/security/ssdeep { };--  ssmtp = callPackage ../tools/networking/ssmtp {-    tlsSupport = true;-  };--  ssss = callPackage ../tools/security/ssss { };--  storeBackup = callPackage ../tools/backup/store-backup { };--  stow = callPackage ../tools/misc/stow { };--  stun = callPackage ../tools/networking/stun { };--  stunnel = callPackage ../tools/networking/stunnel { };--  su = shadow.su;--  surfraw = callPackage ../tools/networking/surfraw { };--  swec = callPackage ../tools/networking/swec {-    inherit (perlPackages) LWP URI HTMLParser HTTPServerSimple Parent;-  };--  svnfs = callPackage ../tools/filesystems/svnfs { };--  sysbench = callPackage ../development/tools/misc/sysbench {};--  system_config_printer = callPackage ../tools/misc/system-config-printer {-    libxml2 = libxml2Python;-   };--  sitecopy = callPackage ../tools/networking/sitecopy { };--  stricat = callPackage ../tools/security/stricat { };--  privoxy = callPackage ../tools/networking/privoxy { };--  t1utils = callPackage ../tools/misc/t1utils { };--  tarsnap = callPackage ../tools/backup/tarsnap { };--  tcpcrypt = callPackage ../tools/security/tcpcrypt { };--  tboot = callPackage ../tools/security/tboot { };--  tcpdump = callPackage ../tools/networking/tcpdump { };--  tcpflow = callPackage ../tools/networking/tcpflow { };--  teamviewer = callPackage_i686 ../applications/networking/remote/teamviewer { };--  # Work In Progress: it doesn't start unless running a daemon as root-  teamviewer8 = lowPrio (callPackage_i686 ../applications/networking/remote/teamviewer/8.nix { });--  telnet = callPackage ../tools/networking/telnet { };--  texmacs = callPackage ../applications/editors/texmacs {-    tex = texLive; /* tetex is also an option */-    extraFonts = true;-    guile = guile_1_8;-  };--  texmaker = callPackage ../applications/editors/texmaker { };--  texstudio = callPackage ../applications/editors/texstudio { };--  tiled-qt = callPackage ../applications/editors/tiled-qt { qt = qt4; };--  tinc = callPackage ../tools/networking/tinc { };--  tiny8086 = callPackage ../applications/virtualization/8086tiny { };--  tmpwatch = callPackage ../tools/misc/tmpwatch  { };--  tmux = callPackage ../tools/misc/tmux { };--  tor = callPackage ../tools/security/tor { };--  torbutton = callPackage ../tools/security/torbutton { };--  torbrowser = callPackage ../tools/security/tor/torbrowser.nix { };--  torsocks = callPackage ../tools/security/tor/torsocks.nix { };--  tpm-quote-tools = callPackage ../tools/security/tpm-quote-tools { };--  tpm-tools = callPackage ../tools/security/tpm-tools { };--  trickle = callPackage ../tools/networking/trickle {};--  trousers = callPackage ../tools/security/trousers { };--  ttf2pt1 = callPackage ../tools/misc/ttf2pt1 { };--  ttysnoop = callPackage ../os-specific/linux/ttysnoop {};--  twitterBootstrap = callPackage ../development/web/twitter-bootstrap {};--  txt2man = callPackage ../tools/misc/txt2man { };--  ucl = callPackage ../development/libraries/ucl { };--  ucspi-tcp = callPackage ../tools/networking/ucspi-tcp { };--  udftools = callPackage ../tools/filesystems/udftools {};--  udptunnel = callPackage ../tools/networking/udptunnel { };--  ufraw = callPackage ../applications/graphics/ufraw { };--  unetbootin = callPackage ../tools/cd-dvd/unetbootin { };--  unfs3 = callPackage ../servers/unfs3 { };--  unoconv = callPackage ../tools/text/unoconv { };--  upx = callPackage ../tools/compression/upx { };--  urlview = callPackage ../applications/misc/urlview {};--  usbmuxd = callPackage ../tools/misc/usbmuxd {};--  vacuum = callPackage ../applications/networking/instant-messengers/vacuum {};--  volatility = callPackage ../tools/security/volatility { };--  vidalia = callPackage ../tools/security/vidalia { };--  vbetool = builderDefsPackage ../tools/system/vbetool {-    inherit pciutils libx86 zlib;-  };--  vde2 = callPackage ../tools/networking/vde2 { };--  vboot_reference = callPackage ../tools/system/vboot_reference { };--  vcsh = callPackage ../applications/version-management/vcsh { };--  verilog = callPackage ../applications/science/electronics/verilog {};--  vfdecrypt = callPackage ../tools/misc/vfdecrypt { };--  vifm = callPackage ../applications/misc/vifm { };--  viking = callPackage ../applications/misc/viking {-    inherit (gnome) scrollkeeper;-  };--  vnc2flv = callPackage ../tools/video/vnc2flv {};--  vncrec = builderDefsPackage ../tools/video/vncrec {-    inherit (xlibs) imake libX11 xproto gccmakedep libXt-      libXmu libXaw libXext xextproto libSM libICE libXpm-      libXp;-  };--  vobcopy = callPackage ../tools/cd-dvd/vobcopy { };--  vobsub2srt = callPackage ../tools/cd-dvd/vobsub2srt { };--  vorbisgain = callPackage ../tools/misc/vorbisgain { };--  vpnc = callPackage ../tools/networking/vpnc { };--  openconnect = callPackage ../tools/networking/openconnect.nix { };--  vtun = callPackage ../tools/networking/vtun { };--  wal_e = callPackage ../tools/backup/wal-e { };--  watchman = callPackage ../development/tools/watchman { };--  wbox = callPackage ../tools/networking/wbox {};--  welkin = callPackage ../tools/graphics/welkin {};--  testdisk = callPackage ../tools/misc/testdisk { };--  htmlTidy = callPackage ../tools/text/html-tidy { };--  html-xml-utils = callPackage ../tools/text/xml/html-xml-utils { };--  tftp_hpa = callPackage ../tools/networking/tftp-hpa {};--  tigervnc = callPackage ../tools/admin/tigervnc {-    fontDirectories = [ xorg.fontadobe75dpi xorg.fontmiscmisc xorg.fontcursormisc-      xorg.fontbhlucidatypewriter75dpi ];-    inherit (xorg) xorgserver;-    fltk = fltk13;-  };--  tightvnc = callPackage ../tools/admin/tightvnc {-    fontDirectories = [ xorg.fontadobe75dpi xorg.fontmiscmisc xorg.fontcursormisc-      xorg.fontbhlucidatypewriter75dpi ];-  };--  time = callPackage ../tools/misc/time { };--  tkabber = callPackage ../applications/networking/instant-messengers/tkabber { };--  qfsm = callPackage ../applications/science/electronics/qfsm { };--  tkgate = callPackage ../applications/science/electronics/tkgate/1.x.nix {-    inherit (xlibs) libX11 imake xproto gccmakedep;-  };--  # The newer package is low-priority because it segfaults at startup.-  tkgate2 = lowPrio (callPackage ../applications/science/electronics/tkgate/2.x.nix {-    inherit (xlibs) libX11;-  });--  tm = callPackage ../tools/system/tm { };--  trang = callPackage ../tools/text/xml/trang { };--  tre = callPackage ../development/libraries/tre { };--  ts = callPackage ../tools/system/ts { };--  transfig = callPackage ../tools/graphics/transfig {-    libpng = libpng12;-  };--  truecrypt = callPackage ../applications/misc/truecrypt {-    wxGUI = config.truecrypt.wxGUI or true;-  };--  ttmkfdir = callPackage ../tools/misc/ttmkfdir { };--  unclutter = callPackage ../tools/misc/unclutter { };--  unbound = callPackage ../tools/networking/unbound { };--  units = callPackage ../tools/misc/units { };--  unrar = callPackage ../tools/archivers/unrar { };--  xarchive = callPackage ../tools/archivers/xarchive { };--  xarchiver = callPackage ../tools/archivers/xarchiver { };--  xcruiser = callPackage ../applications/misc/xcruiser { };--  unarj = callPackage ../tools/archivers/unarj { };--  unshield = callPackage ../tools/archivers/unshield { };--  unzip = callPackage ../tools/archivers/unzip { };--  unzipNLS = lowPrio (unzip.override { enableNLS = true; });--  uptimed = callPackage ../tools/system/uptimed { };--  varnish = callPackage ../servers/varnish { };--  varnish2 = callPackage ../servers/varnish/2.1.nix { };--  venus = callPackage ../tools/misc/venus {-    python = python27;-  };--  vlan = callPackage ../tools/networking/vlan { };--  wakelan = callPackage ../tools/networking/wakelan { };--  wavemon = callPackage ../tools/networking/wavemon { };--  w3cCSSValidator = callPackage ../tools/misc/w3c-css-validator {-    tomcat = tomcat6;-  };--  wdfs = callPackage ../tools/filesystems/wdfs { };--  wdiff = callPackage ../tools/text/wdiff { };--  webalizer = callPackage ../tools/networking/webalizer { };--  webdruid = builderDefsPackage ../tools/admin/webdruid {-    inherit zlib libpng freetype gd which-      libxml2 geoip;-  };--  weighttp = callPackage ../tools/networking/weighttp { };--  wget = callPackage ../tools/networking/wget {-    inherit (perlPackages) LWP;-  };--  which = callPackage ../tools/system/which { };--  wicd = callPackage ../tools/networking/wicd { };--  wkhtmltopdf = callPackage ../tools/graphics/wkhtmltopdf { };--  wv = callPackage ../tools/misc/wv { };--  wv2 = callPackage ../tools/misc/wv2 { };--  x86info = callPackage ../os-specific/linux/x86info { };--  x11_ssh_askpass = callPackage ../tools/networking/x11-ssh-askpass { };--  xbursttools = assert stdenv ? glibc; import ../tools/misc/xburst-tools {-    inherit stdenv fetchgit autoconf automake confuse pkgconfig libusb libusb1;-    # It needs a cross compiler for mipsel to build the firmware it will-    # load into the Ben Nanonote-    gccCross =-      let-        pkgsCross = (import ./all-packages.nix) {-          inherit system;-          inherit bootStdenv noSysDirs gccWithCC gccWithProfiling config;-          # Ben Nanonote system-          crossSystem = {-            config = "mipsel-unknown-linux";-            bigEndian = true;-            arch = "mips";-            float = "soft";-            withTLS = true;-            libc = "uclibc";-            platform = {-              name = "ben_nanonote";-              kernelMajor = "2.6";-              # It's not a bcm47xx processor, but for the headers this should work-              kernelHeadersBaseConfig = "bcm47xx_defconfig";-              kernelArch = "mips";-            };-            gcc = {-              arch = "mips32";-            };-          };-        };-      in-        pkgsCross.gccCrossStageStatic;-  };--  xclip = callPackage ../tools/misc/xclip { };--  xtitle = callPackage ../tools/misc/xtitle { };--  xdelta = callPackage ../tools/compression/xdelta { };--  xdummy = callPackage ../tools/misc/xdummy { };--  xfsprogs = callPackage ../tools/filesystems/xfsprogs { };--  xmlroff = callPackage ../tools/typesetting/xmlroff {-    inherit (gnome) libgnomeprint;-  };--  xmlstarlet = callPackage ../tools/text/xml/xmlstarlet { };--  xmlto = callPackage ../tools/typesetting/xmlto { };--  xmltv = callPackage ../tools/misc/xmltv { };--  xmpppy = builderDefsPackage (import ../development/python-modules/xmpppy) {-    inherit python setuptools;-  };--  xorriso = callPackage ../tools/cd-dvd/xorriso { };--  xpf = callPackage ../tools/text/xml/xpf {-    libxml2 = libxml2Python;-  };--  xsel = callPackage ../tools/misc/xsel { };--  xtreemfs = callPackage ../tools/filesystems/xtreemfs {};--  xvfb_run = callPackage ../tools/misc/xvfb-run { inherit (texFunctions) fontsConf; };--  youtubeDL = callPackage ../tools/misc/youtube-dl { };--  zbar = callPackage ../tools/graphics/zbar {-    pygtk = lib.overrideDerivation pygtk (x: {-      gtk = gtk2;-    });-  };--  zdelta = callPackage ../tools/compression/zdelta { };--  zfstools = callPackage ../tools/filesystems/zfstools {-    zfs = linuxPackages.zfs;-  };--  zile = callPackage ../applications/editors/zile { };--  zip = callPackage ../tools/archivers/zip { };--  zpaq = callPackage ../tools/archivers/zpaq { };-  zpaqd = callPackage ../tools/archivers/zpaq/zpaqd.nix { };--  zsync = callPackage ../tools/compression/zsync { };---  ### SHELLS--  bash = lowPrio (callPackage ../shells/bash {-    texinfo = null;-  });--  bashInteractive = appendToName "interactive" (callPackage ../shells/bash {-    interactive = true;-    readline = readline63; # Includes many vi mode fixes-  });--  bashCompletion = callPackage ../shells/bash-completion { };--  dash = callPackage ../shells/dash { };--  fish = callPackage ../shells/fish {-    python = python27Full;-  };--  tcsh = callPackage ../shells/tcsh { };--  rush = callPackage ../shells/rush { };--  zsh = callPackage ../shells/zsh { };---  ### DEVELOPMENT / COMPILERS--  abc =-    abcPatchable [];--  abcPatchable = patches :-    import ../development/compilers/abc/default.nix {-      inherit stdenv fetchurl patches jre apacheAnt;-      javaCup = callPackage ../development/libraries/java/cup { };-    };--  aldor = callPackage ../development/compilers/aldor { };--  aliceml = callPackage ../development/compilers/aliceml { };--  aspectj = callPackage ../development/compilers/aspectj { };--  ats = callPackage ../development/compilers/ats { };-  ats2 = callPackage ../development/compilers/ats2 { };--  avra = callPackage ../development/compilers/avra { };--  bigloo = callPackage ../development/compilers/bigloo { };--  chicken = callPackage ../development/compilers/chicken { };--  ccl = builderDefsPackage ../development/compilers/ccl {};--  clang = wrapClang llvmPackages.clang;--  clang_34 = wrapClang llvmPackages_34.clang;-  clang_33 = wrapClang (clangUnwrapped llvm_33 ../development/compilers/llvm/3.3/clang.nix);--  clangAnalyzer = callPackage ../development/tools/analysis/clang-analyzer {-    clang = clang_34;-    llvmPackages = llvmPackages_34;-  };--  clangUnwrapped = llvm: pkg: callPackage pkg {-    stdenv = if stdenv.isDarwin then stdenvApple else stdenv;-    inherit llvm;-  };--  clangSelf = clangWrapSelf llvmPackagesSelf.clang;--  clangWrapSelf = build: (import ../build-support/clang-wrapper) {-    clang = build;-    stdenv = clangStdenv;-    libc = glibc;-    binutils = binutils;-    shell = bash;-    inherit libcxx coreutils zlib;-    nativeTools = false;-    nativeLibc = false;-  };--  #Use this instead of stdenv to build with clang-  clangStdenv = lowPrio (stdenvAdapters.overrideGCC stdenv clang);-  libcxxStdenv = stdenvAdapters.overrideGCC stdenv (clangWrapSelf llvmPackages.clang);--  clean = callPackage ../development/compilers/clean { };--  closurecompiler = callPackage ../development/compilers/closure { };--  cmucl_binary = callPackage ../development/compilers/cmucl/binary.nix { };--  compcert = callPackage ../development/compilers/compcert {};--  cryptol1 = lowPrio (callPackage ../development/compilers/cryptol/1.8.x.nix {});-  cryptol2 = with haskellPackages_ghc763; callPackage ../development/compilers/cryptol/2.0.x.nix {-    Cabal = Cabal_1_18_1_3;-    cabalInstall = cabalInstall_1_18_0_3;-    process = process_1_2_0_0;-  };--  cython = pythonPackages.cython;-  cython3 = python3Packages.cython;--  dylan = callPackage ../development/compilers/gwydion-dylan {-    dylan = callPackage ../development/compilers/gwydion-dylan/binary.nix {  };-  };--  ecl = callPackage ../development/compilers/ecl { };--  eql = callPackage ../development/compilers/eql {};--  adobe_flex_sdk = callPackage ../development/compilers/adobe-flex-sdk { };--  fpc = callPackage ../development/compilers/fpc { };-  fpc_2_4_0 = callPackage ../development/compilers/fpc/2.4.0.nix { };--  gambit = callPackage ../development/compilers/gambit { };--  gcc = gcc48;--  gcc33 = wrapGCC (import ../development/compilers/gcc/3.3 {-    inherit fetchurl stdenv noSysDirs;-  });--  gcc34 = wrapGCC (import ../development/compilers/gcc/3.4 {-    inherit fetchurl stdenv noSysDirs;-  });--  gcc48_realCross = lib.addMetaAttrs { hydraPlatforms = []; }-    (callPackage ../development/compilers/gcc/4.8 {-      inherit noSysDirs;-      binutilsCross = binutilsCross;-      libcCross = libcCross;-      profiledCompiler = false;-      enableMultilib = false;-      crossStageStatic = false;-      cross = assert crossSystem != null; crossSystem;-    });--  gcc_realCross = gcc48_realCross;--  gccCrossStageStatic = let-      libcCross1 =-        if stdenv.cross.libc == "msvcrt" then windows.mingw_w64_headers-        else if stdenv.cross.libc == "libSystem" then darwin.xcode-        else null;-    in-      wrapGCCCross {-      gcc = forceNativeDrv (lib.addMetaAttrs { hydraPlatforms = []; } (-        gcc_realCross.override {-          crossStageStatic = true;-          langCC = false;-          libcCross = libcCross1;-          enableShared = false;-        }));-      libc = libcCross1;-      binutils = binutilsCross;-      cross = assert crossSystem != null; crossSystem;-  };--  # Only needed for mingw builds-  gccCrossMingw2 = wrapGCCCross {-    gcc = gccCrossStageStatic.gcc;-    libc = windows.mingw_headers2;-    binutils = binutilsCross;-    cross = assert crossSystem != null; crossSystem;-  };--  gccCrossStageFinal = wrapGCCCross {-    gcc = forceNativeDrv (gcc_realCross.override {-      libpthreadCross =-        # FIXME: Don't explicitly refer to `i586-pc-gnu'.-        if crossSystem != null && crossSystem.config == "i586-pc-gnu"-        then gnu.libpthreadCross-        else null;--      # XXX: We have troubles cross-compiling libstdc++ on MinGW (see-      # <http://hydra.nixos.org/build/4268232>), so don't even try.-      langCC = (crossSystem == null-                || crossSystem.config != "i686-pc-mingw32");-     });-    libc = libcCross;-    binutils = binutilsCross;-    cross = assert crossSystem != null; crossSystem;-  };--  gcc44 = lowPrio (wrapGCC (makeOverridable (import ../development/compilers/gcc/4.4) {-    inherit fetchurl stdenv gmp mpfr /* ppl cloogppl */-      gettext which noSysDirs;-    texinfo = texinfo4;-    profiledCompiler = true;-  }));--  gcc45 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.5 {-    inherit fetchurl stdenv gmp mpfr mpc libelf zlib perl-      gettext which noSysDirs;-    texinfo = texinfo4;--    ppl = null;-    cloogppl = null;--    # bootstrapping a profiled compiler does not work in the sheevaplug:-    # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43944-    profiledCompiler = !stdenv.isArm;--    # When building `gcc.crossDrv' (a "Canadian cross", with host == target-    # and host != build), `cross' must be null but the cross-libc must still-    # be passed.-    cross = null;-    libcCross = if crossSystem != null then libcCross else null;-    libpthreadCross =-      if crossSystem != null && crossSystem.config == "i586-pc-gnu"-      then gnu.libpthreadCross-      else null;-  }));--  gcc46 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.6 {-    inherit noSysDirs;--    ppl = null;-    cloog = null;--    # bootstrapping a profiled compiler does not work in the sheevaplug:-    # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43944-    profiledCompiler = false;--    # When building `gcc.crossDrv' (a "Canadian cross", with host == target-    # and host != build), `cross' must be null but the cross-libc must still-    # be passed.-    cross = null;-    libcCross = if crossSystem != null then libcCross else null;-    libpthreadCross =-      if crossSystem != null && crossSystem.config == "i586-pc-gnu"-      then gnu.libpthreadCross-      else null;-    texinfo = texinfo413;-  }));--  gcc48 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.8 {-    inherit noSysDirs;--    # PGO seems to speed up compilation by gcc by ~10%, see #445 discussion-    profiledCompiler = with stdenv; (!isDarwin && (isi686 || isx86_64));--    # When building `gcc.crossDrv' (a "Canadian cross", with host == target-    # and host != build), `cross' must be null but the cross-libc must still-    # be passed.-    cross = null;-    libcCross = if crossSystem != null then libcCross else null;-    libpthreadCross =-      if crossSystem != null && crossSystem.config == "i586-pc-gnu"-      then gnu.libpthreadCross-      else null;-  }));--  gcc48_multi =-    if system == "x86_64-linux" then lowPrio (-      wrapGCCWith (import ../build-support/gcc-wrapper) glibc_multi (gcc48.gcc.override {-        stdenv = overrideGCC stdenv (wrapGCCWith (import ../build-support/gcc-wrapper) glibc_multi gcc.gcc);-        profiledCompiler = false;-        enableMultilib = true;-      }))-    else throw "Multilib gcc not supported on ‘${system}’";--  gcc48_debug = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.8 {-    stripped = false;--    inherit noSysDirs;-    cross = null;-    libcCross = null;-    binutilsCross = null;-  }));--  gcc49 = lowPrio (wrapGCC (callPackage ../development/compilers/gcc/4.9 {-    inherit noSysDirs;--    # PGO seems to speed up compilation by gcc by ~10%, see #445 discussion-    profiledCompiler = with stdenv; (!isDarwin && (isi686 || isx86_64));--    # When building `gcc.crossDrv' (a "Canadian cross", with host == target-    # and host != build), `cross' must be null but the cross-libc must still-    # be passed.-    cross = null;-    libcCross = if crossSystem != null then libcCross else null;-    libpthreadCross =-      if crossSystem != null && crossSystem.config == "i586-pc-gnu"-      then gnu.libpthreadCross-      else null;-  }));--  gccApple =-    assert stdenv.isDarwin;-    wrapGCC (makeOverridable (import ../development/compilers/gcc/4.2-apple64) {-      inherit fetchurl noSysDirs;-      profiledCompiler = true;-      # Since it fails to build with GCC 4.6, build it with the "native"-      # Apple-GCC.-      stdenv = allStdenvs.stdenvNative;-    });--  gfortran = gfortran48;--  gfortran48 = wrapGCC (gcc48.gcc.override {-    name = "gfortran";-    langFortran = true;-    langCC = false;-    langC = false;-    profiledCompiler = false;-  });--  gcj = gcj48;--  gcj48 = wrapGCC (gcc48.gcc.override {-    name = "gcj";-    langJava = true;-    langFortran = false;-    langCC = false;-    langC = false;-    profiledCompiler = false;-    inherit zip unzip zlib boehmgc gettext pkgconfig perl;-    inherit gtk;-    inherit (gnome) libart_lgpl;-    inherit (xlibs) libX11 libXt libSM libICE libXtst libXi libXrender-      libXrandr xproto renderproto xextproto inputproto randrproto;-  });--  gnat = gnat45;--  gnat45 = wrapGCC (gcc45.gcc.override {-    name = "gnat";-    langCC = false;-    langC = true;-    langAda = true;-    profiledCompiler = false;-    inherit gnatboot;-    # We can't use the ppl stuff, because we would have-    # libstdc++ problems.-    cloogppl = null;-    ppl = null;-  });--  gnat46 = wrapGCC (gcc46.gcc.override {-    name = "gnat";-    langCC = false;-    langC = true;-    langAda = true;-    profiledCompiler = false;-    gnatboot = gnat45;-    # We can't use the ppl stuff, because we would have-    # libstdc++ problems.-    ppl = null;-    cloog = null;-  });--  gnatboot = wrapGCC (import ../development/compilers/gnatboot {-    inherit fetchurl stdenv;-  });--  gccgo = gccgo48;--  gccgo48 = wrapGCC (gcc48.gcc.override {-    name = "gccgo";-    langCC = true; #required for go.-    langC = true;-    langGo = true;-  });--  ghdl = wrapGCC (import ../development/compilers/gcc/4.3 {-    inherit stdenv fetchurl gmp mpfr noSysDirs gnat;-    texinfo = texinfo4;-    name = "ghdl";-    langVhdl = true;-    langCC = false;-    langC = false;-    profiledCompiler = false;-    enableMultilib = false;-  });--  ghdl_mcode = callPackage ../development/compilers/ghdl { };--  gcl = builderDefsPackage ../development/compilers/gcl {-    inherit mpfr m4 binutils fetchcvs emacs zlib which-      texinfo;-    gmp = gmp4;-    inherit (xlibs) libX11 xproto inputproto libXi-      libXext xextproto libXt libXaw libXmu;-    inherit stdenv;-    texLive = texLiveAggregationFun {-      paths = [-        texLive texLiveExtra-      ];-    };-  };--  jhc = callPackage ../development/compilers/jhc {-    inherit (haskellPackages_ghc763) ghc binary zlib utf8String readline fgl-      regexCompat HsSyck random;-  };--  gcc-arm-embedded-4_7 = callPackage_i686 ../development/compilers/gcc-arm-embedded {-    version = "4.7-2013q3-20130916";-    releaseType = "update";-    sha256 = "1bd9bi9q80xn2rpy0rn1vvj70rh15kb7dmah0qs4q2rv78fqj40d";-  };-  gcc-arm-embedded-4_8 = callPackage_i686 ../development/compilers/gcc-arm-embedded {-    version = "4.8-2014q1-20140314";-    releaseType = "update";-    sha256 = "ce92859550819d4a3d1a6e2672ea64882b30afa2c08cf67fa8e1d93788c2c577";-  };-  gcc-arm-embedded = gcc-arm-embedded-4_8;--  # Haskell and GHC--  # Import Haskell infrastructure.--  haskell = let pkgs_       = pkgs // { gmp = gmp.override { withStatic = true; }; };-                callPackage = newScope pkgs_;-                newScope    = extra: lib.callPackageWith (pkgs_ // pkgs_.xorg // extra);-            in callPackage ./haskell-defaults.nix { pkgs = pkgs_; inherit callPackage newScope; };--  # Available GHC versions.--  # For several compiler versions, we export a large set of Haskell-related-  # packages.--  # NOTE (recurseIntoAttrs): After discussion, we originally decided to-  # enable it for all GHC versions. However, this is getting too much,-  # particularly in connection with Hydra builds for all these packages.-  # So we enable it for selected versions only. We build all ghcs, though--  ghc = recurseIntoAttrs (lib.mapAttrs' (name: value:-    lib.nameValuePair (builtins.substring (builtins.stringLength "packages_") (builtins.stringLength name) name) value.ghc-  ) (lib.filterAttrs (name: value:-    builtins.substring 0 (builtins.stringLength "packages_") name == "packages_"-  ) haskell));--  haskellPackages = haskellPackages_ghc783;-  haskellPlatform = haskellPlatformPackages."2013_2_0_0";--  haskellPackages_ghc6104 = haskell.packages_ghc6104;-  haskellPackages_ghc6123 = haskell.packages_ghc6123;-  haskellPackages_ghc704  = haskell.packages_ghc704;-  haskellPackages_ghc722  = haskell.packages_ghc722;-  haskellPackages_ghc742  = haskell.packages_ghc742;-  haskellPackages_ghc763  = haskell.packages_ghc763;-  haskellPackages_ghc783_no_profiling = recurseIntoAttrs haskell.packages_ghc783.noProfiling;-  haskellPackages_ghc783_profiling    = recurseIntoAttrs haskell.packages_ghc783.profiling;-  haskellPackages_ghc783              = recurseIntoAttrs haskell.packages_ghc783.highPrio;-  haskellPackages_ghcHEAD = haskell.packages_ghcHEAD;--  haskellPlatformPackages = recurseIntoAttrs (import ../development/libraries/haskell/haskell-platform { inherit pkgs; });--  haxe = callPackage ../development/compilers/haxe { };--  hhvm = callPackage ../development/compilers/hhvm { };-  hiphopvm = hhvm; /* Compatibility alias */--  falcon = builderDefsPackage (import ../development/interpreters/falcon) {-    inherit cmake;-  };--  fsharp = callPackage ../development/compilers/fsharp {};--  go_1_0 = callPackage ../development/compilers/go { };--  go_1_1 =-    if stdenv.isDarwin then-      callPackage ../development/compilers/go/1.1-darwin.nix { }-    else-      callPackage ../development/compilers/go/1.1.nix { };--  go_1_2 = callPackage ../development/compilers/go/1.2.nix { };--  go_1_3 = callPackage ../development/compilers/go/1.3.nix { };--  go = go_1_3;--  gox = callPackage ../development/compilers/go/gox.nix { };--  gprolog = callPackage ../development/compilers/gprolog { };--  gwt240 = callPackage ../development/compilers/gwt/2.4.0.nix { };--  icedtea7_jdk = callPackage ../development/compilers/icedtea rec {-    jdk = openjdk;-    jdkPath = "${openjdk}/lib/openjdk";-  } // { outputs = [ "out" ]; };--  icedtea7_jre = (lib.setName "icedtea7-${lib.getVersion pkgs.icedtea7_jdk.jre}" (lib.addMetaAttrs-    { description = "Free Java runtime environment based on OpenJDK 7.0 and the IcedTea project"; }-    pkgs.icedtea7_jdk.jre)) // { outputs = [ "jre" ]; };--  icedtea7_web = callPackage ../development/compilers/icedtea-web {-    jdk = "${icedtea7_jdk}/lib/icedtea";-  };--  ikarus = callPackage ../development/compilers/ikarus { };--  hugs = callPackage ../development/compilers/hugs { };--  path64 = callPackage ../development/compilers/path64 { };--  openjdk =-    if stdenv.isDarwin then-      callPackage ../development/compilers/openjdk-darwin { }-    else-      let-        openjdkBootstrap = callPackage ../development/compilers/openjdk/bootstrap.nix { };-      in (callPackage ../development/compilers/openjdk {-        jdk = openjdkBootstrap;-      }) // { outputs = [ "out" ]; };--  # FIXME: Need a way to set per-output meta attributes.-  openjre = (lib.setName "openjre-${lib.getVersion pkgs.openjdk.jre}" (lib.addMetaAttrs-    { description = "The open-source Java Runtime Environment"; }-    pkgs.openjdk.jre)) // { outputs = [ "jre" ]; };--  jdk = if stdenv.isDarwin || stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"-    then pkgs.openjdk-    else pkgs.oraclejdk;-  jre = if stdenv.isDarwin || stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"-    then pkgs.openjre-    else pkgs.oraclejre;--  oraclejdk = pkgs.jdkdistro true false;--  oraclejdk7 = pkgs.oraclejdk7distro true false;--  oraclejdk8 = pkgs.oraclejdk8distro true false;--  oraclejre = lowPrio (pkgs.jdkdistro false false);--  oraclejre7 = lowPrio (pkgs.oraclejdk7distro false false);--  oraclejre8 = lowPrio (pkgs.oraclejdk8distro false false);--  jrePlugin = lowPrio (pkgs.jdkdistro false true);--  supportsJDK =-    system == "i686-linux" ||-    system == "x86_64-linux";--  jdkdistro = installjdk: pluginSupport:-    assert supportsJDK;-    (if pluginSupport then appendToName "with-plugin" else x: x)-      (callPackage ../development/compilers/oraclejdk/jdk6-linux.nix { });--  oraclejdk7distro = installjdk: pluginSupport:-    assert supportsJDK;-    (if pluginSupport then appendToName "with-plugin" else x: x)-      (callPackage ../development/compilers/oraclejdk/jdk7-linux.nix { inherit installjdk; });--  oraclejdk8distro = installjdk: pluginSupport:-    assert supportsJDK;-    (if pluginSupport then appendToName "with-plugin" else x: x)-      (callPackage ../development/compilers/oraclejdk/jdk8-linux.nix { inherit installjdk; });--  jikes = callPackage ../development/compilers/jikes { };--  juliaGit = callPackage ../development/compilers/julia/git-20131013.nix {-    liblapack = liblapack.override {shared = true;};-    llvm = llvm_33;-  };-  julia021 = callPackage ../development/compilers/julia/0.2.1.nix {-    liblapack = liblapack.override {shared = true;};-    llvm = llvm_33;-  };-  julia030 = let-    liblapack = liblapack_3_5_0.override {shared = true;};-  in callPackage ../development/compilers/julia/0.3.0.nix {-    inherit liblapack;-    suitesparse = suitesparse.override {-      inherit liblapack;-    };-    openblas = openblas_0_2_10;-    llvm = llvm_34;-  };-  julia = julia021;--  lazarus = builderDefsPackage (import ../development/compilers/fpc/lazarus.nix) {-    inherit makeWrapper gtk glib pango atk gdk_pixbuf;-    inherit (xlibs) libXi inputproto libX11 xproto libXext xextproto;-    fpc = fpc;-  };--  lessc = callPackage ../development/compilers/lessc { };--  llvm = llvmPackages.llvm;--  llvm_34 = llvmPackages_34.llvm;-  llvm_33 = llvm_v ../development/compilers/llvm/3.3/llvm.nix;--  llvm_v = path: callPackage path {-    stdenv = if stdenv.isDarwin then stdenvApple else stdenv;-  };--  llvmPackages = if !stdenv.isDarwin then llvmPackages_34 else llvmPackages_34 // {-    # until someone solves build problems with _34-    llvm = llvm_33;-    clang = clang_33;-  };--  llvmPackages_34 = recurseIntoAttrs (import ../development/compilers/llvm/3.4 {-    inherit stdenv newScope fetchurl;-    isl = isl_0_12;-  });-  llvmPackagesSelf = import ../development/compilers/llvm/3.4 { inherit newScope fetchurl; isl = isl_0_12; stdenv = libcxxStdenv; };--  manticore = callPackage ../development/compilers/manticore { };--  mentorToolchains = recurseIntoAttrs (-    callPackage_i686 ../development/compilers/mentor {}-  );--  mercury = callPackage ../development/compilers/mercury { };--  mitscheme = callPackage ../development/compilers/mit-scheme { };--  mlton = callPackage ../development/compilers/mlton { };--  mono = callPackage ../development/compilers/mono {-    inherit (xlibs) libX11;-  };--  monoDLLFixer = callPackage ../build-support/mono-dll-fixer { };--  mozart = callPackage ../development/compilers/mozart { };--  neko = callPackage ../development/compilers/neko { };--  nasm = callPackage ../development/compilers/nasm { };--  nvidia_cg_toolkit = callPackage ../development/compilers/nvidia-cg-toolkit { };--  ocaml = ocamlPackages.ocaml;--  ocaml_3_08_0 = callPackage ../development/compilers/ocaml/3.08.0.nix { };--  ocaml_3_10_0 = callPackage ../development/compilers/ocaml/3.10.0.nix { };--  ocaml_3_11_2 = callPackage ../development/compilers/ocaml/3.11.2.nix { };--  ocaml_3_12_1 = callPackage ../development/compilers/ocaml/3.12.1.nix { };--  ocaml_4_00_1 = callPackage ../development/compilers/ocaml/4.00.1.nix { };--  ocaml_4_01_0 = callPackage ../development/compilers/ocaml/4.01.0.nix { };--  orc = callPackage ../development/compilers/orc { };--  metaocaml_3_09 = callPackage ../development/compilers/ocaml/metaocaml-3.09.nix { };--  ber_metaocaml_003 = callPackage ../development/compilers/ocaml/ber-metaocaml-003.nix { };--  mkOcamlPackages = ocaml: self: let callPackage = newScope self; in rec {-    inherit ocaml;--    camlidl = callPackage ../development/tools/ocaml/camlidl { };--    camlp5_5_strict = callPackage ../development/tools/ocaml/camlp5/5.15.nix { };--    camlp5_5_transitional = callPackage ../development/tools/ocaml/camlp5/5.15.nix {-      transitional = true;-    };--    camlp5_6_strict = callPackage ../development/tools/ocaml/camlp5 { };--    camlp5_6_transitional = callPackage ../development/tools/ocaml/camlp5 {-      transitional = true;-    };--    camlp5_strict = camlp5_6_strict;--    camlp5_transitional = camlp5_6_transitional;--    camlzip = callPackage ../development/ocaml-modules/camlzip { };--    camomile_0_8_2 = callPackage ../development/ocaml-modules/camomile/0.8.2.nix { };-    camomile = callPackage ../development/ocaml-modules/camomile { };--    camlimages = callPackage ../development/ocaml-modules/camlimages {-      libpng = libpng12;-      giflib = giflib_4_1;-    };--    biniou = callPackage ../development/ocaml-modules/biniou { };--    ocaml_cairo = callPackage ../development/ocaml-modules/ocaml-cairo { };--    cppo = callPackage ../development/tools/ocaml/cppo { };--    cryptokit = callPackage ../development/ocaml-modules/cryptokit { };--    csv = callPackage ../development/ocaml-modules/csv { };--    deriving = callPackage ../development/tools/ocaml/deriving { };--    easy-format = callPackage ../development/ocaml-modules/easy-format { };--    findlib = callPackage ../development/tools/ocaml/findlib { };--    javalib = callPackage ../development/ocaml-modules/javalib {-      extlib = ocaml_extlib_maximal;-    };--    dypgen = callPackage ../development/ocaml-modules/dypgen { };--    patoline = callPackage ../tools/typesetting/patoline { };--    gmetadom = callPackage ../development/ocaml-modules/gmetadom { };--    lablgl = callPackage ../development/ocaml-modules/lablgl { };--    lablgtk = callPackage ../development/ocaml-modules/lablgtk {-      inherit (gnome) libgnomecanvas libglade gtksourceview;-    };--    lablgtkmathview = callPackage ../development/ocaml-modules/lablgtkmathview {-      gtkmathview = callPackage ../development/libraries/gtkmathview { };-    };--    menhir = callPackage ../development/ocaml-modules/menhir { };--    merlin = callPackage ../development/tools/ocaml/merlin { };--    mldonkey = callPackage ../applications/networking/p2p/mldonkey { };--    mlgmp =  callPackage ../development/ocaml-modules/mlgmp { };--    ocaml_batteries = callPackage ../development/ocaml-modules/batteries { };--    ocaml_cryptgps = callPackage ../development/ocaml-modules/cryptgps { };--    ocaml_data_notation = callPackage ../development/ocaml-modules/odn { };--    ocaml_expat = callPackage ../development/ocaml-modules/expat { };--    ocamlgraph = callPackage ../development/ocaml-modules/ocamlgraph { };--    ocaml_http = callPackage ../development/ocaml-modules/http { };--    ocamlify = callPackage ../development/tools/ocaml/ocamlify { };--    ocaml_lwt = callPackage ../development/ocaml-modules/lwt { };--    ocamlmod = callPackage ../development/tools/ocaml/ocamlmod { };--    ocaml_mysql = callPackage ../development/ocaml-modules/mysql { };--    ocamlnet = callPackage ../development/ocaml-modules/ocamlnet { };--    ocaml_oasis = callPackage ../development/tools/ocaml/oasis { };--    ocaml_pcre = callPackage ../development/ocaml-modules/pcre {-      inherit pcre;-    };--    ocaml_react = callPackage ../development/ocaml-modules/react { };--    ocamlsdl= callPackage ../development/ocaml-modules/ocamlsdl { };--    ocaml_sqlite3 = callPackage ../development/ocaml-modules/sqlite3 { };--    ocaml_ssl = callPackage ../development/ocaml-modules/ssl { };--    ounit = callPackage ../development/ocaml-modules/ounit { };--    ulex = callPackage ../development/ocaml-modules/ulex { };--    ulex08 = callPackage ../development/ocaml-modules/ulex/0.8 {-      camlp5 = camlp5_transitional;-    };--    ocaml_typeconv = callPackage ../development/ocaml-modules/typeconv { };--    ocaml_typeconv_3_0_5 = callPackage ../development/ocaml-modules/typeconv/3.0.5.nix { };--    ocaml_sexplib = callPackage ../development/ocaml-modules/sexplib { };--    ocaml_extlib = callPackage ../development/ocaml-modules/extlib { };-    ocaml_extlib_maximal = callPackage ../development/ocaml-modules/extlib {-      minimal = false;-    };--    pycaml = callPackage ../development/ocaml-modules/pycaml { };--    opam_1_0_0 = callPackage ../development/tools/ocaml/opam/1.0.0.nix { };-    opam_1_1 = callPackage ../development/tools/ocaml/opam/1.1.nix { };-    opam = opam_1_1;--    sawja = callPackage ../development/ocaml-modules/sawja { };--    uucd = callPackage ../development/ocaml-modules/uucd { };-    uunf = callPackage ../development/ocaml-modules/uunf { };-    uutf = callPackage ../development/ocaml-modules/uutf { };-    xmlm = callPackage ../development/ocaml-modules/xmlm { };--    yojson = callPackage ../development/ocaml-modules/yojson { };--    zarith = callPackage ../development/ocaml-modules/zarith { };-  };--  ocamlPackages = recurseIntoAttrs ocamlPackages_4_01_0;-  ocamlPackages_3_10_0 = mkOcamlPackages ocaml_3_10_0 pkgs.ocamlPackages_3_10_0;-  ocamlPackages_3_11_2 = mkOcamlPackages ocaml_3_11_2 pkgs.ocamlPackages_3_11_2;-  ocamlPackages_3_12_1 = mkOcamlPackages ocaml_3_12_1 pkgs.ocamlPackages_3_12_1;-  ocamlPackages_4_00_1 = mkOcamlPackages ocaml_4_00_1 pkgs.ocamlPackages_4_00_1;-  ocamlPackages_4_01_0 = mkOcamlPackages ocaml_4_01_0 pkgs.ocamlPackages_4_01_0;-  ocamlPackages_latest = ocamlPackages_4_01_0;--  ocaml_make = callPackage ../development/ocaml-modules/ocamlmake { };--  opa = let callPackage = newScope pkgs.ocamlPackages_4_00_1; in callPackage ../development/compilers/opa { };--  ocamlnat = let callPackage = newScope pkgs.ocamlPackages_3_12_1; in callPackage ../development/ocaml-modules/ocamlnat { };--  qcmm = callPackage ../development/compilers/qcmm {-    lua   = lua4;-    ocaml = ocaml_3_08_0;-  };--  roadsend = callPackage ../development/compilers/roadsend { };--  rustc       = callPackage ../development/compilers/rustc/0.11.nix {};-  rustcMaster = callPackage ../development/compilers/rustc/head.nix {};--  rust = rustc;---  sbclBootstrap = callPackage ../development/compilers/sbcl/bootstrap.nix {};-  sbcl = callPackage ../development/compilers/sbcl {-    clisp = clisp;-  };--  scala_2_9 = callPackage ../development/compilers/scala/2.9.nix { };-  scala_2_10 = callPackage ../development/compilers/scala/2.10.nix { };-  scala_2_11 = callPackage ../development/compilers/scala { };-  scala = scala_2_11;--  sdcc = callPackage ../development/compilers/sdcc { };--  smlnjBootstrap = callPackage ../development/compilers/smlnj/bootstrap.nix { };-  smlnj = callPackage_i686 ../development/compilers/smlnj { };--  stalin = callPackage ../development/compilers/stalin { };--  strategoPackages = recurseIntoAttrs strategoPackages018;--  strategoPackages016 = callPackage ../development/compilers/strategoxt/0.16.nix {-    stdenv = overrideInStdenv stdenv [gnumake380];-  };--  strategoPackages017 = callPackage ../development/compilers/strategoxt/0.17.nix {-    readline = readline5;-  };--  strategoPackages018 = callPackage ../development/compilers/strategoxt/0.18.nix {-    readline = readline5;-  };--  metaBuildEnv = callPackage ../development/compilers/meta-environment/meta-build-env { };--  swiProlog = callPackage ../development/compilers/swi-prolog { };--  tbb = callPackage ../development/libraries/tbb { };--  tinycc = callPackage ../development/compilers/tinycc { };--  urweb = callPackage ../development/compilers/urweb { };--  vala = callPackage ../development/compilers/vala/default.nix { };--  visualcpp = callPackage ../development/compilers/visual-c++ { };--  vs90wrapper = callPackage ../development/compilers/vs90wrapper { };--  webdsl = callPackage ../development/compilers/webdsl { };--  win32hello = callPackage ../development/compilers/visual-c++/test { };--  wrapGCCWith = gccWrapper: glibc: baseGCC: gccWrapper {-    nativeTools = stdenv ? gcc && stdenv.gcc.nativeTools;-    nativeLibc = stdenv ? gcc && stdenv.gcc.nativeLibc;-    nativePrefix = if stdenv ? gcc then stdenv.gcc.nativePrefix else "";-    gcc = baseGCC;-    libc = glibc;-    shell = bash;-    inherit stdenv binutils coreutils zlib;-  };--  wrapClangWith = clangWrapper: glibc: baseClang: clangWrapper {-    nativeTools = stdenv.gcc.nativeTools or false;-    nativeLibc = stdenv.gcc.nativeLibc or false;-    nativePrefix = stdenv.gcc.nativePrefix or "";-    clang = baseClang;-    libc = glibc;-    shell = bash;-    binutils = stdenv.gcc.binutils;-    inherit stdenv coreutils zlib;-  };--  wrapClang = wrapClangWith (makeOverridable (import ../build-support/clang-wrapper)) glibc;--  wrapGCC = wrapGCCWith (makeOverridable (import ../build-support/gcc-wrapper)) glibc;--  wrapGCCCross =-    {gcc, libc, binutils, cross, shell ? "", name ? "gcc-cross-wrapper"}:--    forceNativeDrv (import ../build-support/gcc-cross-wrapper {-      nativeTools = false;-      nativeLibc = false;-      noLibc = (libc == null);-      inherit stdenv gcc binutils libc shell name cross;-    });--  # prolog-  yap = callPackage ../development/compilers/yap { };--  yasm = callPackage ../development/compilers/yasm { };---  ### DEVELOPMENT / INTERPRETERS--  acl2 = builderDefsPackage ../development/interpreters/acl2 {-    inherit sbcl;-  };--  angelscript = callPackage ../development/interpreters/angelscript {};--  clisp = callPackage ../development/interpreters/clisp { };--  # compatibility issues in 2.47 - at list 2.44.1 is known good-  # for sbcl bootstrap-  clisp_2_44_1 = callPackage ../development/interpreters/clisp/2.44.1.nix {-    libsigsegv = libsigsegv_25;-  };--  clojure = callPackage ../development/interpreters/clojure { };--  clooj = callPackage ../development/interpreters/clojure/clooj.nix { };--  erlangR14 = callPackage ../development/interpreters/erlang/R14.nix { };-  erlangR15 = callPackage ../development/interpreters/erlang/R15.nix { };-  erlangR16 = callPackage ../development/interpreters/erlang/R16.nix { };-  erlangR17 = callPackage ../development/interpreters/erlang/R17.nix { };-  erlang = erlangR17;--  rebar = callPackage ../development/tools/build-managers/rebar { };--  elixir = callPackage ../development/interpreters/elixir { };--  groovy = callPackage ../development/interpreters/groovy { };--  guile_1_8 = callPackage ../development/interpreters/guile/1.8.nix { };--  guile_2_0 = callPackage ../development/interpreters/guile { };--  guile = guile_2_0;--  hadoop = callPackage ../applications/networking/cluster/hadoop { };--  io = callPackage ../development/interpreters/io { };--  j = callPackage ../development/interpreters/j {};--  jmeter = callPackage ../applications/networking/jmeter {};--  davmail = callPackage ../applications/networking/davmail {};--  lxappearance = callPackage ../applications/misc/lxappearance {};--  kona = callPackage ../development/interpreters/kona {};--  love = callPackage ../development/interpreters/love {lua=lua5;};-  love_luajit = callPackage ../development/interpreters/love {lua=luajit;};-  love_0_9 = callPackage ../development/interpreters/love/0.9.nix { };--  lua4 = callPackage ../development/interpreters/lua-4 { };-  lua5_0 = callPackage ../development/interpreters/lua-5/5.0.3.nix { };-  lua5_1 = callPackage ../development/interpreters/lua-5/5.1.nix { };-  lua5_2 = callPackage ../development/interpreters/lua-5/5.2.nix { };-  lua5_2_compat = callPackage ../development/interpreters/lua-5/5.2.nix {-    compat = true;-  };-  lua5 = lua5_1;-  lua = lua5;--  lua5_sockets = callPackage ../development/interpreters/lua-5/sockets.nix {};-  lua5_expat = callPackage ../development/interpreters/lua-5/expat.nix {};-  lua5_filesystem = callPackage ../development/interpreters/lua-5/filesystem.nix {};-  lua5_sec = callPackage ../development/interpreters/lua-5/sec.nix {};--  luarocks = callPackage ../development/tools/misc/luarocks {-     lua = lua5;-  };--  luajit = callPackage ../development/interpreters/luajit {};--  lush2 = callPackage ../development/interpreters/lush {};--  maude = callPackage ../development/interpreters/maude {-    bison = bison2;-    flex = flex_2_5_35;-  };--  mesos = callPackage ../applications/networking/cluster/mesos {-    sasl = cyrus_sasl;-    automake = automake114x;-    inherit (pythonPackages) python boto setuptools distutils-cfg wrapPython;-    pythonProtobuf = pythonPackages.protobuf;-  };--  octave = callPackage ../development/interpreters/octave {-    fltk = fltk13;-    qt = null;-    ghostscript = null;-    llvm = null;-    hdf5 = null;-    glpk = null;-    suitesparse = null;-    openjdk = null;-    gnuplot = null;-    readline = readline63;-  };-  octaveFull = (lowPrio (callPackage ../development/interpreters/octave {-    fltk = fltk13;-    qt = qt4;-  }));--  # mercurial (hg) bleeding edge version-  octaveHG = callPackage ../development/interpreters/octave/hg.nix { };--  ocropus = callPackage ../applications/misc/ocropus { };--  perl514 = callPackage ../development/interpreters/perl/5.14 { };--  perl516 = callPackage ../development/interpreters/perl/5.16 {-    fetchurl = fetchurlBoot;-  };--  perl520 = callPackage ../development/interpreters/perl/5.20 { };--  perl = if system != "i686-cygwin" then perl516 else sysPerl;--  php = php54;--  phpPackages = recurseIntoAttrs (import ./php-packages.nix {-    inherit php pkgs;-  });--  php53 = callPackage ../development/interpreters/php/5.3.nix { };--  php_fpm53 = callPackage ../development/interpreters/php/5.3.nix {-    config = config // {-      php = (config.php or {}) // {-        fpm = true;-        apxs2 = false;-      };-    };-  };--  php54 = callPackage ../development/interpreters/php/5.4.nix { };--  picolisp = callPackage ../development/interpreters/picolisp {};--  pltScheme = racket; # just to be sure--  polyml = callPackage ../development/compilers/polyml { };--  pure = callPackage ../development/interpreters/pure {-    llvm = llvm_33 ;-  };--  python = python2;-  python2 = python27;-  python3 = python34;--  # pythonPackages further below, but assigned here because they need to be in sync-  pythonPackages = python2Packages;-  python2Packages = python27Packages;-  python3Packages = python34Packages;--  pythonFull = python2Full;-  python2Full = python27Full;--  python26 = callPackage ../development/interpreters/python/2.6 { db = db47; };-  python27 = callPackage ../development/interpreters/python/2.7 { };-  python32 = callPackage ../development/interpreters/python/3.2 { };-  python33 = callPackage ../development/interpreters/python/3.3 { };-  python34 = hiPrio (callPackage ../development/interpreters/python/3.4 { });--  pypy = callPackage ../development/interpreters/pypy/2.3 { };--  python26Full = callPackage ../development/interpreters/python/wrapper.nix {-    extraLibs = [];-    postBuild = "";-    python = python26;-    inherit (python26Packages) recursivePthLoader;-  };-  python27Full = callPackage ../development/interpreters/python/wrapper.nix {-    extraLibs = [];-    postBuild = "";-    python = python27;-    inherit (python27Packages) recursivePthLoader;-  };--  pythonDocs = recurseIntoAttrs (import ../development/interpreters/python/docs {-    inherit stdenv fetchurl lib;-  });--  pythonLinkmeWrapper = callPackage ../development/interpreters/python/python-linkme-wrapper.nix { };--  pypi2nix = python27Packages.pypi2nix;--  pyrex = pyrex095;--  pyrex095 = callPackage ../development/interpreters/pyrex/0.9.5.nix { };--  pyrex096 = callPackage ../development/interpreters/pyrex/0.9.6.nix { };--  qi = callPackage ../development/compilers/qi { };--  racket = callPackage ../development/interpreters/racket { };--  rakudo = callPackage ../development/interpreters/rakudo { };--  rascal = callPackage ../development/interpreters/rascal { };--  regina = callPackage ../development/interpreters/regina { };--  renpy = callPackage ../development/interpreters/renpy {-    wrapPython = pythonPackages.wrapPython;-  };--  ruby18 = callPackage ../development/interpreters/ruby/ruby-18.nix { };-  ruby19 = callPackage ../development/interpreters/ruby/ruby-19.nix { };-  ruby2 = lowPrio (callPackage ../development/interpreters/ruby/ruby-2.0.nix { });--  ruby = ruby19;--  rubyLibs = recurseIntoAttrs (callPackage ../development/interpreters/ruby/libs.nix { });--  rake = rubyLibs.rake;--  rubySqlite3 = callPackage ../development/ruby-modules/sqlite3 { };--  rubygemsFun = ruby: builderDefsPackage (import ../development/interpreters/ruby/rubygems.nix) {-    inherit ruby makeWrapper;-  };-  rubygems = hiPrio (rubygemsFun ruby);--  rq = callPackage ../applications/networking/cluster/rq { };--  scsh = callPackage ../development/interpreters/scsh { };--  scheme48 = callPackage ../development/interpreters/scheme48 { };--  spark = callPackage ../applications/networking/cluster/spark { };--  spidermonkey = callPackage ../development/interpreters/spidermonkey { };-  spidermonkey_1_8_0rc1 = callPackage ../development/interpreters/spidermonkey/1.8.0-rc1.nix { };-  spidermonkey_185 = callPackage ../development/interpreters/spidermonkey/185-1.0.0.nix { };-  spidermonkey_17 = callPackage ../development/interpreters/spidermonkey/17.0.nix { };-  spidermonkey_24 = callPackage ../development/interpreters/spidermonkey/24.2.nix { };--  supercollider = callPackage ../development/interpreters/supercollider {-    qt = qt4;-    fftw = fftwSinglePrec;-  };--  supercollider_scel = supercollider.override { useSCEL = true; };--  sysPerl = callPackage ../development/interpreters/perl/sys-perl { };--  tcl = callPackage ../development/interpreters/tcl { };--  xulrunner = callPackage ../development/interpreters/xulrunner {-    inherit (gnome) libIDL;-    inherit (pythonPackages) pysqlite;-  };--  xulrunner_30 = firefox30Pkgs.xulrunner;---  ### DEVELOPMENT / MISC--  amdadlsdk = callPackage ../development/misc/amdadl-sdk { };--  amdappsdk26 = callPackage ../development/misc/amdapp-sdk {-    version = "2.6";-  };--  amdappsdk27 = callPackage ../development/misc/amdapp-sdk {-    version = "2.7";-  };--  amdappsdk28 = callPackage ../development/misc/amdapp-sdk {-    version = "2.8";-  };--  amdappsdk = amdappsdk28;--  amdappsdkFull = callPackage ../development/misc/amdapp-sdk {-    version = "2.8";-    samples = true;-  };--  avrgcclibc = callPackage ../development/misc/avr-gcc-with-avr-libc {-    gcc = gcc46;-    stdenv = overrideGCC stdenv gcc46;-  };--  avr8burnomat = callPackage ../development/misc/avr8-burn-omat { };--  sourceFromHead = import ../build-support/source-from-head-fun.nix {-    inherit config;-  };--  ecj = callPackage ../development/eclipse/ecj { };--  jdtsdk = callPackage ../development/eclipse/jdt-sdk { };--  jruby165 = callPackage ../development/interpreters/jruby { };--  guileCairo = callPackage ../development/guile-modules/guile-cairo { };--  guileGnome = callPackage ../development/guile-modules/guile-gnome {-    gconf = gnome.GConf;-    inherit (gnome) gnome_vfs libglade libgnome libgnomecanvas libgnomeui;-  };--  guile_lib = callPackage ../development/guile-modules/guile-lib { };--  guile_ncurses = callPackage ../development/guile-modules/guile-ncurses { };--  guile-xcb = callPackage ../development/guile-modules/guile-xcb { };--  pharo-vm = callPackage_i686 ../development/pharo/vm { };--  srecord = callPackage ../development/tools/misc/srecord { };--  windowssdk = (-    import ../development/misc/windows-sdk {-      inherit fetchurl stdenv cabextract;-    });---  ### DEVELOPMENT / TOOLS--  ansible = callPackage ../tools/system/ansible { };--  antlr = callPackage ../development/tools/parsing/antlr/2.7.7.nix { };--  antlr3 = callPackage ../development/tools/parsing/antlr { };--  ant = apacheAnt;--  apacheAnt = callPackage ../development/tools/build-managers/apache-ant { };--  astyle = callPackage ../development/tools/misc/astyle { };--  autobuild = callPackage ../development/tools/misc/autobuild { };--  autoconf = callPackage ../development/tools/misc/autoconf { };--  autoconf213 = callPackage ../development/tools/misc/autoconf/2.13.nix { };--  autocutsel = callPackage ../tools/X11/autocutsel{ };--  automake = automake112x;--  automake111x = callPackage ../development/tools/misc/automake/automake-1.11.x.nix { };--  automake112x = callPackage ../development/tools/misc/automake/automake-1.12.x.nix { };--  automake113x = callPackage ../development/tools/misc/automake/automake-1.13.x.nix { };--  automake114x = callPackage ../development/tools/misc/automake/automake-1.14.x.nix { };--  automoc4 = callPackage ../development/tools/misc/automoc4 { };--  avrdude = callPackage ../development/tools/misc/avrdude { };--  avarice = callPackage ../development/tools/misc/avarice { };--  babeltrace = callPackage ../development/tools/misc/babeltrace { };--  bam = callPackage ../development/tools/build-managers/bam {};--  binutils = callPackage ../development/tools/misc/binutils {-    inherit noSysDirs;-  };--  binutils_nogold = lowPrio (callPackage ../development/tools/misc/binutils {-    inherit noSysDirs;-    gold = false;-  });--  binutilsCross =-    if crossSystem != null && crossSystem.libc == "libSystem" then darwin.cctools-    else lowPrio (forceNativeDrv (import ../development/tools/misc/binutils {-      inherit stdenv fetchurl zlib bison;-      noSysDirs = true;-      cross = assert crossSystem != null; crossSystem;-    }));--  bison2 = callPackage ../development/tools/parsing/bison/2.x.nix { };-  bison3 = callPackage ../development/tools/parsing/bison/3.x.nix { };-  bison = bison3;--  buildbot = callPackage ../development/tools/build-managers/buildbot {-    inherit (pythonPackages) twisted jinja2 sqlalchemy sqlalchemy_migrate;-    dateutil = pythonPackages.dateutil_1_5;-  };--  buildbotSlave = callPackage ../development/tools/build-managers/buildbot-slave {-    inherit (pythonPackages) twisted;-  };--  byacc = callPackage ../development/tools/parsing/byacc { };--  casperjs = callPackage ../development/tools/casperjs { };--  cbrowser = callPackage ../development/tools/misc/cbrowser { };--  ccache = callPackage ../development/tools/misc/ccache { };--  # Wrapper that works as gcc or g++-  # It can be used by setting in nixpkgs config like this, for example:-  #    replaceStdenv = { pkgs }: pkgs.ccacheStdenv;-  # But if you build in chroot, you should have that path in chroot-  # If instantiated directly, it will use the HOME/.ccache as cache directory.-  # You can use an override in packageOverrides to set extraConfig:-  #    packageOverrides = pkgs: {-  #     ccacheWrapper = pkgs.ccacheWrapper.override {-  #       extraConfig = ''-  #         CCACHE_COMPRESS=1-  #         CCACHE_DIR=/bin/.ccache-  #       '';-  #     };-  #-  ccacheWrapper = makeOverridable ({ extraConfig ? "" }:-     wrapGCC (ccache.links extraConfig)) {};-  ccacheStdenv = lowPrio (overrideGCC stdenv ccacheWrapper);--  cccc = callPackage ../development/tools/analysis/cccc { };--  cgdb = callPackage ../development/tools/misc/cgdb { };--  chromedriver = callPackage ../development/tools/selenium/chromedriver { gconf = gnome.GConf; };--  chrpath = callPackage ../development/tools/misc/chrpath { };--  "cl-launch" = callPackage ../development/tools/misc/cl-launch {};--  complexity = callPackage ../development/tools/misc/complexity { };--  ctags = callPackage ../development/tools/misc/ctags { };--  ctagsWrapped = import ../development/tools/misc/ctags/wrapped.nix {-    inherit pkgs ctags writeScriptBin;-  };--  cmake = callPackage ../development/tools/build-managers/cmake { };--  cmake264 = callPackage ../development/tools/build-managers/cmake/264.nix { };--  cmakeCurses = cmake.override { useNcurses = true; };--  cmakeWithGui = cmakeCurses.override { useQt4 = true; };--  coccinelle = callPackage ../development/tools/misc/coccinelle { };--  framac = callPackage ../development/tools/analysis/frama-c { };--  cppi = callPackage ../development/tools/misc/cppi { };--  cproto = callPackage ../development/tools/misc/cproto { };--  cflow = callPackage ../development/tools/misc/cflow { };--  cov-build = callPackage ../development/tools/analysis/cov-build {};--  cppcheck = callPackage ../development/tools/analysis/cppcheck { };--  cscope = callPackage ../development/tools/misc/cscope { };--  csslint = callPackage ../development/web/csslint { };--  libcxx = callPackage ../development/libraries/libc++ { stdenv = pkgs.clangStdenv; };-  libcxxabi = callPackage ../development/libraries/libc++abi { stdenv = pkgs.clangStdenv; };--  libsigrok = callPackage ../development/tools/libsigrok { };--  libsigrokdecode = callPackage ../development/tools/libsigrokdecode { };--  dejagnu = callPackage ../development/tools/misc/dejagnu { };--  dfeet = callPackage ../development/tools/misc/d-feet {-    inherit (pythonPackages) pep8;-  };--  dfu-programmer = callPackage ../development/tools/misc/dfu-programmer { };--  ddd = callPackage ../development/tools/misc/ddd { };--  distcc = callPackage ../development/tools/misc/distcc { };--  # distccWrapper: wrapper that works as gcc or g++-  # It can be used by setting in nixpkgs config like this, for example:-  #    replaceStdenv = { pkgs }: pkgs.distccStdenv;-  # But if you build in chroot, a default 'nix' will create-  # a new net namespace, and won't have network access.-  # You can use an override in packageOverrides to set extraConfig:-  #    packageOverrides = pkgs: {-  #     distccWrapper = pkgs.distccWrapper.override {-  #       extraConfig = ''-  #         DISTCC_HOSTS="myhost1 myhost2"-  #       '';-  #     };-  #-  distccWrapper = makeOverridable ({ extraConfig ? "" }:-     wrapGCC (distcc.links extraConfig)) {};-  distccStdenv = lowPrio (overrideGCC stdenv distccWrapper);--  distccMasquerade = callPackage ../development/tools/misc/distcc/masq.nix {-    gccRaw = gcc.gcc;-    binutils = binutils;-  };--  docutils = builderDefsPackage (import ../development/tools/documentation/docutils) {-    inherit python pil makeWrapper;-  };--  doxygen = callPackage ../development/tools/documentation/doxygen {-    qt4 = null;-  };--  doxygen_gui = lowPrio (doxygen.override { inherit qt4; });--  drush = callPackage ../development/tools/misc/drush { };--  eggdbus = callPackage ../development/tools/misc/eggdbus { };--  elfutils = callPackage ../development/tools/misc/elfutils { };--  epm = callPackage ../development/tools/misc/epm { };--  emma = callPackage ../development/tools/analysis/emma { };--  findbugs = callPackage ../development/tools/analysis/findbugs { };--  pmd = callPackage ../development/tools/analysis/pmd { };--  jdepend = callPackage ../development/tools/analysis/jdepend { };--  checkstyle = callPackage ../development/tools/analysis/checkstyle { };--  flex_2_5_35 = callPackage ../development/tools/parsing/flex/2.5.35.nix { };-  flex_2_5_39 = callPackage ../development/tools/parsing/flex/2.5.39.nix { };-  flex = flex_2_5_39;--  m4 = gnum4;--  global = callPackage ../development/tools/misc/global { };--  gnome_doc_utils = callPackage ../development/tools/documentation/gnome-doc-utils {};--  gnum4 = callPackage ../development/tools/misc/gnum4 { };--  gnumake380 = callPackage ../development/tools/build-managers/gnumake/3.80 { };-  gnumake381 = callPackage ../development/tools/build-managers/gnumake/3.81 { };-  gnumake382 = callPackage ../development/tools/build-managers/gnumake/3.82 { };-  gnumake40  = callPackage ../development/tools/build-managers/gnumake/4.0  { };-  gnumake = gnumake382;--  gob2 = callPackage ../development/tools/misc/gob2 { };--  gradle = callPackage ../development/tools/build-managers/gradle { };--  gperf = callPackage ../development/tools/misc/gperf { };--  gtk_doc = callPackage ../development/tools/documentation/gtk-doc { };--  gtkdialog = callPackage ../development/tools/misc/gtkdialog { };--  guileLint = callPackage ../development/tools/guile/guile-lint { };--  gwrap = callPackage ../development/tools/guile/g-wrap { };--  help2man = callPackage ../development/tools/misc/help2man {-    inherit (perlPackages) LocaleGettext;-  };--  hyenae = callPackage ../tools/networking/hyenae { };--  ibus = callPackage ../development/libraries/ibus { };--  iconnamingutils = callPackage ../development/tools/misc/icon-naming-utils {-    inherit (perlPackages) XMLSimple;-  };--  indent = callPackage ../development/tools/misc/indent { };--  ino = callPackage ../development/arduino/ino { };--  inotifyTools = callPackage ../development/tools/misc/inotify-tools { };--  intel-gpu-tools = callPackage ../development/tools/misc/intel-gpu-tools {-    inherit (xorg) libpciaccess dri2proto libX11 libXext libXv libXrandr;-  };--  ired = callPackage ../development/tools/analysis/radare/ired.nix { };--  itstool = callPackage ../development/tools/misc/itstool { };--  jam = callPackage ../development/tools/build-managers/jam { };--  jikespg = callPackage ../development/tools/parsing/jikespg { };--  jenkins = callPackage ../development/tools/continuous-integration/jenkins { };--  lcov = callPackage ../development/tools/analysis/lcov { };--  leiningen = callPackage ../development/tools/build-managers/leiningen { };--  libtool = libtool_2;--  libtool_1_5 = callPackage ../development/tools/misc/libtool { };--  libtool_2 = callPackage ../development/tools/misc/libtool/libtool2.nix { };--  lsof = callPackage ../development/tools/misc/lsof { };--  ltrace = callPackage ../development/tools/misc/ltrace { };--  lttng-tools = callPackage ../development/tools/misc/lttng-tools { };--  lttng-ust = callPackage ../development/tools/misc/lttng-ust { };--  lttv = callPackage ../development/tools/misc/lttv { };--  mk = callPackage ../development/tools/build-managers/mk { };--  neoload = callPackage ../development/tools/neoload {-    licenseAccepted = (config.neoload.accept_license or false);-  };--  ninja = callPackage ../development/tools/build-managers/ninja { };--  nixbang = callPackage ../development/tools/misc/nixbang {-      pythonPackages = python3Packages;-  };--  node_webkit = callPackage ../development/tools/node-webkit {-    gconf = pkgs.gnome.GConf;-  };--  noweb = callPackage ../development/tools/literate-programming/noweb { };--  omake = callPackage ../development/tools/ocaml/omake { };-  omake_rc1 = callPackage ../development/tools/ocaml/omake/0.9.8.6-rc1.nix { };--  opengrok = callPackage ../development/tools/misc/opengrok { };--  openocd = callPackage ../development/tools/misc/openocd { };--  oprofile = callPackage ../development/tools/profiling/oprofile { };--  patchelf = callPackage ../development/tools/misc/patchelf { };--  peg = callPackage ../development/tools/parsing/peg { };--  phantomjs = callPackage ../development/tools/phantomjs {-    stdenv = if stdenv.isDarwin-      then overrideGCC stdenv gccApple-      else stdenv;-  };--  pmccabe = callPackage ../development/tools/misc/pmccabe { };--  /* Make pkgconfig always return a nativeDrv, never a proper crossDrv,-     because most usage of pkgconfig as buildInput (inheritance of-     pre-cross nixpkgs) means using it using as nativeBuildInput-     cross_renaming: we should make all programs use pkgconfig as-     nativeBuildInput after the renaming.-     */-  pkgconfig = forceNativeDrv (callPackage ../development/tools/misc/pkgconfig { });-  pkgconfigUpstream = lowPrio (pkgconfig.override { vanilla = true; });--  prelink = callPackage ../development/tools/misc/prelink { };--  premake3 = callPackage ../development/tools/misc/premake/3.nix { };--  premake4 = callPackage ../development/tools/misc/premake { };--  premake = premake4;--  pstack = callPackage ../development/tools/misc/gdb/pstack.nix { };--  radare = callPackage ../development/tools/analysis/radare {-    inherit (gnome) vte;-    lua = lua5;-    useX11 = config.radare.useX11 or false;-    pythonBindings = config.radare.pythonBindings or false;-    rubyBindings = config.radare.rubyBindings or false;-    luaBindings = config.radare.luaBindings or false;-  };--  ragel = callPackage ../development/tools/parsing/ragel { };--  re2c = callPackage ../development/tools/parsing/re2c { };--  remake = callPackage ../development/tools/build-managers/remake { };--  saleae-logic = callPackage ../development/tools/misc/saleae-logic { };--  # couldn't find the source yet-  seleniumRCBin = callPackage ../development/tools/selenium/remote-control {-    jre = jdk;-  };--  selenium-server-standalone = callPackage ../development/tools/selenium/server { };--  scons = callPackage ../development/tools/build-managers/scons { };--  simpleBuildTool = callPackage ../development/tools/build-managers/simple-build-tool { };--  sigrok-cli = callPackage ../development/tools/sigrok-cli { };--  slimerjs = callPackage ../development/tools/slimerjs {};--  sloccount = callPackage ../development/tools/misc/sloccount { };--  smatch = callPackage ../development/tools/analysis/smatch {-    buildllvmsparse = false;-    buildc2xml = false;-  };--  smc = callPackage ../tools/misc/smc { };--  sparse = callPackage ../development/tools/analysis/sparse { };--  speedtest_cli = callPackage ../tools/networking/speedtest-cli { };--  spin = callPackage ../development/tools/analysis/spin { };--  splint = callPackage ../development/tools/analysis/splint {-    flex = flex_2_5_35;-  };--  stm32flash = callPackage ../development/tools/misc/stm32flash { };--  strace = callPackage ../development/tools/misc/strace { };--  swig = callPackage ../development/tools/misc/swig { };--  swig2 = callPackage ../development/tools/misc/swig/2.x.nix { };--  swig3 = callPackage ../development/tools/misc/swig/3.x.nix { };--  swigWithJava = swig;--  swfmill = callPackage ../tools/video/swfmill { };--  swftools = callPackage ../tools/video/swftools { };--  tcptrack = callPackage ../development/tools/misc/tcptrack { };--  teensy-loader = callPackage ../development/tools/misc/teensy { };--  texinfo413 = callPackage ../development/tools/misc/texinfo/4.13a.nix { };-  texinfo5 = callPackage ../development/tools/misc/texinfo/5.2.nix { };-  texinfo4 = texinfo413;-  texinfo = texinfo5;-  texinfoInteractive = appendToName "interactive" (-    texinfo.override { interactive = true; }-  );--  texi2html = callPackage ../development/tools/misc/texi2html { };--  uhd = callPackage ../development/tools/misc/uhd { };--  uisp = callPackage ../development/tools/misc/uisp { };--  uncrustify = callPackage ../development/tools/misc/uncrustify { };--  vagrant = callPackage ../development/tools/vagrant {-    ruby = ruby2;-  };--  gdb = callPackage ../development/tools/misc/gdb {-    hurd = gnu.hurdCross;-    readline = readline63;-    inherit (gnu) mig;-  };--  gdbCross = lowPrio (callPackage ../development/tools/misc/gdb {-    target = crossSystem;-  });--  valgrind = callPackage ../development/tools/analysis/valgrind {-    stdenv =-      # On Darwin, Valgrind 3.7.0 expects Apple's GCC (for-      # `__private_extern'.)-      if stdenv.isDarwin-      then overrideGCC stdenv gccApple-      else stdenv;-  };--  valkyrie = callPackage ../development/tools/analysis/valkyrie { };--  xc3sprog = callPackage ../development/tools/misc/xc3sprog { };--  xmlindent = callPackage ../development/web/xmlindent {};--  xpwn = callPackage ../development/mobile/xpwn {};--  xxdiff = callPackage ../development/tools/misc/xxdiff {-    bison = bison2;-  };--  yacc = bison;--  yodl = callPackage ../development/tools/misc/yodl { };---  ### DEVELOPMENT / LIBRARIES--  a52dec = callPackage ../development/libraries/a52dec { };--  aacskeys = callPackage ../development/libraries/aacskeys { };--  aalib = callPackage ../development/libraries/aalib { };--  accountsservice = callPackage ../development/libraries/accountsservice { };--  acl = callPackage ../development/libraries/acl { };--  activemq = callPackage ../development/libraries/apache-activemq { };--  adns = callPackage ../development/libraries/adns { };--  afflib = callPackage ../development/libraries/afflib {};--  agg = callPackage ../development/libraries/agg { };--  allegro = callPackage ../development/libraries/allegro {};-  allegro5 = callPackage ../development/libraries/allegro/5.nix {};-  allegro5unstable = callPackage-    ../development/libraries/allegro/5-unstable.nix {};--  amrnb = callPackage ../development/libraries/amrnb { };--  amrwb = callPackage ../development/libraries/amrwb { };--  apr = callPackage ../development/libraries/apr { };--  aprutil = callPackage ../development/libraries/apr-util {-    bdbSupport = true;-  };--  asio = callPackage ../development/libraries/asio { };--  aspell = callPackage ../development/libraries/aspell { };--  aspellDicts = recurseIntoAttrs (import ../development/libraries/aspell/dictionaries.nix {-    inherit fetchurl stdenv aspell which;-  });--  aterm = aterm25;--  aterm25 = callPackage ../development/libraries/aterm/2.5.nix { };--  aterm28 = lowPrio (callPackage ../development/libraries/aterm/2.8.nix { });--  attica = callPackage ../development/libraries/attica { };--  attr = callPackage ../development/libraries/attr { };--  at_spi2_core = callPackage ../development/libraries/at-spi2-core { };--  at_spi2_atk = callPackage ../development/libraries/at-spi2-atk { };--  aqbanking = callPackage ../development/libraries/aqbanking { };--  aubio = callPackage ../development/libraries/aubio { };--  audiofile = callPackage ../development/libraries/audiofile { };--  axis = callPackage ../development/libraries/axis { };--  babl_0_0_22 = callPackage ../development/libraries/babl/0_0_22.nix { };--  babl = callPackage ../development/libraries/babl { };--  beecrypt = callPackage ../development/libraries/beecrypt { };--  boehmgc = callPackage ../development/libraries/boehm-gc { };--  boolstuff = callPackage ../development/libraries/boolstuff { };--  boost144 = callPackage ../development/libraries/boost/1.44.nix { };-  boost149 = callPackage ../development/libraries/boost/1.49.nix { };-  boost155 = callPackage ../development/libraries/boost/1.55.nix { };-  boost = boost155;--  boostHeaders = callPackage ../development/libraries/boost/header-only-wrapper.nix { };--  botan = callPackage ../development/libraries/botan { };-  botanUnstable = callPackage ../development/libraries/botan/unstable.nix { };--  box2d = callPackage ../development/libraries/box2d { };-  box2d_2_0_1 = callPackage ../development/libraries/box2d/2.0.1.nix { };--  buddy = callPackage ../development/libraries/buddy { };--  bwidget = callPackage ../development/libraries/bwidget { };--  c-ares = callPackage ../development/libraries/c-ares {-    fetchurl = fetchurlBoot;-  };--  caelum = callPackage ../development/libraries/caelum { };--  capnproto = callPackage ../development/libraries/capnproto { };--  scmccid = callPackage ../development/libraries/scmccid { };--  ccrtp = callPackage ../development/libraries/ccrtp { };-  ccrtp_1_8 = callPackage ../development/libraries/ccrtp/1.8.nix { };--  celt = callPackage ../development/libraries/celt {};-  celt_0_7 = callPackage ../development/libraries/celt/0.7.nix {};-  celt_0_5_1 = callPackage ../development/libraries/celt/0.5.1.nix {};--  cgal = callPackage ../development/libraries/CGAL {};--  cgui = callPackage ../development/libraries/cgui {};--  check = callPackage ../development/libraries/check { };--  chipmunk = builderDefsPackage (import ../development/libraries/chipmunk) {-    inherit cmake freeglut mesa;-    inherit (xlibs) libX11 xproto inputproto libXi libXmu;-  };--  chmlib = callPackage ../development/libraries/chmlib { };--  chromaprint = callPackage ../development/libraries/chromaprint { };--  cil = callPackage ../development/libraries/cil { };--  cilaterm = callPackage ../development/libraries/cil-aterm {-    stdenv = overrideInStdenv stdenv [gnumake380];-  };--  clanlib = callPackage ../development/libraries/clanlib { };--  classads = callPackage ../development/libraries/classads { };--  classpath = callPackage ../development/libraries/java/classpath {-    javac = gcj;-    jvm = gcj;-    gconf = gnome.GConf;-  };--  clearsilver = callPackage ../development/libraries/clearsilver { };--  cln = callPackage ../development/libraries/cln { };--  clppcre = builderDefsPackage (import ../development/libraries/cl-ppcre) { };--  clucene_core_2 = callPackage ../development/libraries/clucene-core/2.x.nix { };--  clucene_core_1 = callPackage ../development/libraries/clucene-core { };--  clucene_core = clucene_core_1;--  clutter = callPackage ../development/libraries/clutter { };--  clutter_1_18 = callPackage ../development/libraries/clutter/1.18.nix {-    cogl = cogl_1_18;-  };--  clutter-gst = callPackage ../development/libraries/clutter-gst { };--  clutter_gtk = callPackage ../development/libraries/clutter-gtk { };-  clutter_gtk_0_10 = callPackage ../development/libraries/clutter-gtk/0.10.8.nix { };--  cminpack = callPackage ../development/libraries/cminpack { };--  cogl = callPackage ../development/libraries/cogl { };--  cogl_1_18 = callPackage ../development/libraries/cogl/1.18.nix { };--  coin3d = callPackage ../development/libraries/coin3d { };--  commoncpp2 = callPackage ../development/libraries/commoncpp2 { };--  confuse = callPackage ../development/libraries/confuse { };--  coredumper = callPackage ../development/libraries/coredumper { };--  ctl = callPackage ../development/libraries/ctl { };--  cpp-netlib = callPackage ../development/libraries/cpp-netlib { };--  cppunit = callPackage ../development/libraries/cppunit { };--  cppnetlib = callPackage ../development/libraries/cppnetlib {-    boost = boostHeaders;-  };--  cracklib = callPackage ../development/libraries/cracklib { };--  cryptopp = callPackage ../development/libraries/crypto++ { };--  cyrus_sasl = callPackage ../development/libraries/cyrus-sasl { };--  # Make bdb5 the default as it is the last release under the custom-  # bsd-like license-  db = db5;-  db4 = db48;-  db44 = callPackage ../development/libraries/db/db-4.4.nix { };-  db45 = callPackage ../development/libraries/db/db-4.5.nix { };-  db47 = callPackage ../development/libraries/db/db-4.7.nix { };-  db48 = callPackage ../development/libraries/db/db-4.8.nix { };-  db5 = db53;-  db53 = callPackage ../development/libraries/db/db-5.3.nix { };-  db6 = db60;-  db60 = callPackage ../development/libraries/db/db-6.0.nix { };--  dbus = callPackage ../development/libraries/dbus { };-  dbus_cplusplus  = callPackage ../development/libraries/dbus-cplusplus { };-  dbus_glib       = callPackage ../development/libraries/dbus-glib { };-  dbus_java       = callPackage ../development/libraries/java/dbus-java { };-  dbus_python     = callPackage ../development/python-modules/dbus { };--  # Should we deprecate these? Currently there are many references.-  dbus_tools = pkgs.dbus.tools;-  dbus_libs = pkgs.dbus.libs;-  dbus_daemon = pkgs.dbus.daemon;--  dhex = callPackage ../applications/editors/dhex { };--  dclib = callPackage ../development/libraries/dclib { };--  dillo = callPackage ../applications/networking/browsers/dillo {-    fltk = fltk13;-  };--  directfb = callPackage ../development/libraries/directfb { };--  dotconf = callPackage ../development/libraries/dotconf { };--  dssi = callPackage ../development/libraries/dssi {};--  dragonegg = llvmPackages.dragonegg;--  dxflib = callPackage ../development/libraries/dxflib {};--  eigen = callPackage ../development/libraries/eigen {};--  eigen2 = callPackage ../development/libraries/eigen/2.0.nix {};--  enchant = callPackage ../development/libraries/enchant { };--  enet = callPackage ../development/libraries/enet { };--  enginepkcs11 = callPackage ../development/libraries/enginepkcs11 { };--  epoxy = callPackage ../development/libraries/epoxy {-    inherit (xorg) utilmacros libX11;-  };--  esdl = callPackage ../development/libraries/esdl { };--  exiv2 = callPackage ../development/libraries/exiv2 { };--  expat = callPackage ../development/libraries/expat { };--  extremetuxracer = builderDefsPackage (import ../games/extremetuxracer) {-    inherit mesa tcl freeglut SDL SDL_mixer pkgconfig-      gettext intltool;-    inherit (xlibs) libX11 xproto libXi inputproto-      libXmu libXext xextproto libXt libSM libICE;-    libpng = libpng12;-  };--  eventlog = callPackage ../development/libraries/eventlog { };--  facile = callPackage ../development/libraries/facile { };--  faac = callPackage ../development/libraries/faac { };--  faad2 = callPackage ../development/libraries/faad2 { };--  farsight2 = callPackage ../development/libraries/farsight2 { };--  farstream = callPackage ../development/libraries/farstream {-    inherit (gst_all_1)-      gstreamer gst-plugins-base gst-python gst-plugins-good gst-plugins-bad-      gst-libav;-  };--  fcgi = callPackage ../development/libraries/fcgi { };--  ffmpeg_0_6 = callPackage ../development/libraries/ffmpeg/0.6.nix {-    vpxSupport = !stdenv.isMips;-  };--  ffmpeg_0_6_90 = callPackage ../development/libraries/ffmpeg/0.6.90.nix {-    vpxSupport = !stdenv.isMips;-  };--  ffmpeg_0_10 = callPackage ../development/libraries/ffmpeg/0.10.nix {-    vpxSupport = !stdenv.isMips;--    stdenv = if stdenv.isDarwin-      then overrideGCC stdenv gccApple-      else stdenv;-  };--  ffmpeg_1 = callPackage ../development/libraries/ffmpeg/1.x.nix {-    vpxSupport = !stdenv.isMips;-  };--  ffmpeg_2 = callPackage ../development/libraries/ffmpeg/2.x.nix { };--  ffmpeg = ffmpeg_2;--  ffms = callPackage ../development/libraries/ffms { };--  fftw = callPackage ../development/libraries/fftw { };-  fftwSinglePrec = fftw.override { precision = "single"; };-  fftwFloat = fftwSinglePrec; # the configure option is just an alias--  flann = callPackage ../development/libraries/flann { };--  flite = callPackage ../development/libraries/flite { };--  fltk13 = callPackage ../development/libraries/fltk/fltk13.nix { };--  fltk20 = callPackage ../development/libraries/fltk { };--  fmod = callPackage ../development/libraries/fmod { };--  freeimage = callPackage ../development/libraries/freeimage { };--  freetts = callPackage ../development/libraries/freetts { };--  cfitsio = callPackage ../development/libraries/cfitsio { };--  fontconfig = callPackage ../development/libraries/fontconfig { };--  makeFontsConf = let fontconfig_ = fontconfig; in {fontconfig ? fontconfig_, fontDirectories}:-    import ../development/libraries/fontconfig/make-fonts-conf.nix {-      inherit runCommand libxslt fontconfig fontDirectories;-    };--  freealut = callPackage ../development/libraries/freealut { };--  freeglut = callPackage ../development/libraries/freeglut { };--  freetype = callPackage ../development/libraries/freetype { };--  frei0r = callPackage ../development/libraries/frei0r { };--  fribidi = callPackage ../development/libraries/fribidi { };--  funambol = callPackage ../development/libraries/funambol { };--  fam = gamin;--  gamin = callPackage ../development/libraries/gamin { };--  ganv = callPackage ../development/libraries/ganv { };--  gav = callPackage ../games/gav { };--  gsb = callPackage ../games/gsb { };--  gdome2 = callPackage ../development/libraries/gdome2 {-    inherit (gnome) gtkdoc;-  };--  gdbm = callPackage ../development/libraries/gdbm { };--  gegl = callPackage ../development/libraries/gegl {-    #  avocodec avformat librsvg-  };--  gegl_0_0_22 = callPackage ../development/libraries/gegl/0_0_22.nix {-    #  avocodec avformat librsvg-    libpng = libpng12;-  };--  geoclue = callPackage ../development/libraries/geoclue {};--  geoclue2 = callPackage ../development/libraries/geoclue/2.0.nix {};--  geoip = callPackage ../development/libraries/geoip { };--  geoipjava = callPackage ../development/libraries/java/geoipjava { };--  geos = callPackage ../development/libraries/geos { };--  gettext = gettext_0_18;--  gettext_0_17 = callPackage ../development/libraries/gettext/0.17.nix { };-  gettext_0_18 = callPackage ../development/libraries/gettext { };--  gd = callPackage ../development/libraries/gd { };--  gdal = callPackage ../development/libraries/gdal { };--  ggz_base_libs = callPackage ../development/libraries/ggz_base_libs {};--  giblib = callPackage ../development/libraries/giblib { };--  libgit2 = callPackage ../development/libraries/git2 { };--  glew = callPackage ../development/libraries/glew { };--  glfw = glfw3;-  glfw2 = callPackage ../development/libraries/glfw/2.x.nix { };-  glfw3 = callPackage ../development/libraries/glfw/3.x.nix { };--  glibc = callPackage ../development/libraries/glibc/2.19 {-    kernelHeaders = linuxHeaders;-    installLocales = config.glibc.locales or false;-    machHeaders = null;-    hurdHeaders = null;-    gccCross = null;-  };--  glibc_memusage = callPackage ../development/libraries/glibc/2.19 {-    kernelHeaders = linuxHeaders;-    installLocales = false;-    withGd = true;-  };--  glibcCross = forceNativeDrv (makeOverridable (import ../development/libraries/glibc/2.19)-    (let crossGNU = crossSystem != null && crossSystem.config == "i586-pc-gnu";-     in {-       inherit stdenv fetchurl;-       gccCross = gccCrossStageStatic;-       kernelHeaders = if crossGNU then gnu.hurdHeaders else linuxHeadersCross;-       installLocales = config.glibc.locales or false;-     }-     // lib.optionalAttrs crossGNU {-        inherit (gnu) machHeaders hurdHeaders libpthreadHeaders mig;-        inherit fetchgit;-      }));---  # We can choose:-  libcCrossChooser = name : if name == "glibc" then glibcCross-    else if name == "uclibc" then uclibcCross-    else if name == "msvcrt" then windows.mingw_w64-    else if name == "libSystem" then darwin.xcode-    else throw "Unknown libc";--  libcCross = assert crossSystem != null; libcCrossChooser crossSystem.libc;--  eglibc = callPackage ../development/libraries/eglibc {-    kernelHeaders = linuxHeaders;-    installLocales = config.glibc.locales or false;-  };--  glibcLocales = callPackage ../development/libraries/glibc/2.19/locales.nix { };--  glibcInfo = callPackage ../development/libraries/glibc/2.19/info.nix { };--  glibc_multi =-    runCommand "${glibc.name}-multi"-      { glibc64 = glibc;-        glibc32 = (import ./all-packages.nix {system = "i686-linux";}).glibc;-      }-      ''-        mkdir -p $out-        ln -s $glibc64/* $out/--        rm $out/lib $out/lib64-        mkdir -p $out/lib-        ln -s $glibc64/lib/* $out/lib-        ln -s $glibc32/lib $out/lib/32-        ln -s lib $out/lib64--        # fixing ldd RLTDLIST-        rm $out/bin-        cp -rs $glibc64/bin $out-        chmod u+w $out/bin-        rm $out/bin/ldd-        sed -e "s|^RTLDLIST=.*$|RTLDLIST=\"$out/lib/ld-2.19.so $out/lib/32/ld-linux.so.2\"|g" \-            $glibc64/bin/ldd > $out/bin/ldd-        chmod 555 $out/bin/ldd--        rm $out/include-        cp -rs $glibc32/include $out-        chmod -R u+w $out/include-        cp -rsf $glibc64/include $out-      '' # */-      ;--  glm = callPackage ../development/libraries/glm { };--  glog = callPackage ../development/libraries/glog { };--  gloox = callPackage ../development/libraries/gloox { };--  glpk = callPackage ../development/libraries/glpk { };--  glsurf = callPackage ../applications/science/math/glsurf {-    inherit (ocamlPackages) lablgl findlib camlimages ocaml_mysql mlgmp;-    libpng = libpng12;-    giflib = giflib_4_1;-  };--  gmime = callPackage ../development/libraries/gmime { };--  gmm = callPackage ../development/libraries/gmm { };--  gmp = gmp5;-  gmp5 = gmp51;--  gmpxx = appendToName "with-cxx" (gmp.override { cxx = true; });--  # The GHC bootstrap binaries link against libgmp.so.3, which is in GMP 4.x.-  gmp4 = callPackage ../development/libraries/gmp/4.3.2.nix { };--  gmp51 = callPackage ../development/libraries/gmp/5.1.x.nix { };--  #GMP ex-satellite, so better keep it near gmp-  mpfr = callPackage ../development/libraries/mpfr/default.nix { };--  gobjectIntrospection = callPackage ../development/libraries/gobject-introspection { };--  goocanvas = callPackage ../development/libraries/goocanvas { };--  google-gflags = callPackage ../development/libraries/google-gflags { };--  gperftools = callPackage ../development/libraries/gperftools { };--  gst_all_1 = recurseIntoAttrs(callPackage ../development/libraries/gstreamer {-    callPackage = pkgs.newScope (pkgs // { libav = pkgs.libav_10; });-  });--  gst_all = {-    inherit (pkgs) gstreamer gnonlin gst_python qt_gstreamer;-    gstPluginsBase = pkgs.gst_plugins_base;-    gstPluginsBad = pkgs.gst_plugins_bad;-    gstPluginsGood = pkgs.gst_plugins_good;-    gstPluginsUgly = pkgs.gst_plugins_ugly;-    gstFfmpeg = pkgs.gst_ffmpeg;-  };--  gstreamer = callPackage ../development/libraries/gstreamer/legacy/gstreamer {-    bison = bison2;-  };--  gst_plugins_base = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-base {};--  gst_plugins_good = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-good {};--  gst_plugins_bad = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-bad {};--  gst_plugins_ugly = callPackage ../development/libraries/gstreamer/legacy/gst-plugins-ugly {};--  gst_ffmpeg = callPackage ../development/libraries/gstreamer/legacy/gst-ffmpeg {-    ffmpeg = ffmpeg_0_10;-  };--  gst_python = callPackage ../development/libraries/gstreamer/legacy/gst-python {};--  gstreamermm = callPackage ../development/libraries/gstreamer/legacy/gstreamermm { };--  gnonlin = callPackage ../development/libraries/gstreamer/legacy/gnonlin {};--  gusb = callPackage ../development/libraries/gusb {-    inherit (gnome) gtkdoc;-  };--  qt_gstreamer = callPackage ../development/libraries/gstreamer/legacy/qt-gstreamer {};--  gnet = callPackage ../development/libraries/gnet { };--  gnu-efi = callPackage ../development/libraries/gnu-efi { };--  gnutls = gnutls32;--  gnutls31 = callPackage ../development/libraries/gnutls/3.1.nix {-    guileBindings = config.gnutls.guile or false;-  };--  gnutls32 = callPackage ../development/libraries/gnutls/3.2.nix {-    guileBindings = config.gnutls.guile or false;-  };--  gnutls_with_guile = lowPrio (gnutls.override { guileBindings = true; });--  gpac = callPackage ../applications/video/gpac { };--  gpgme = callPackage ../development/libraries/gpgme {-    gnupg1 = gnupg1orig;-  };--  grantlee = callPackage ../development/libraries/grantlee { };--  gsasl = callPackage ../development/libraries/gsasl { };--  gsl = callPackage ../development/libraries/gsl { };--  gsm = callPackage ../development/libraries/gsm {};--  gsoap = callPackage ../development/libraries/gsoap { };--  gss = callPackage ../development/libraries/gss { };--  gtkimageview = callPackage ../development/libraries/gtkimageview { };--  gtkmathview = callPackage ../development/libraries/gtkmathview { };--  gtkLibs = {-    inherit (pkgs) glib glibmm atk atkmm cairo pango pangomm gdk_pixbuf gtk-      gtkmm;-  };--  glib = callPackage ../development/libraries/glib { };-  glib-tested = glib.override { doCheck = true; }; # checked version separate to break cycles-  glibmm = callPackage ../development/libraries/glibmm { };--  glib_networking = callPackage ../development/libraries/glib-networking {};--  atk = callPackage ../development/libraries/atk { };-  atkmm = callPackage ../development/libraries/atkmm { };--  pixman = callPackage ../development/libraries/pixman { };--  cairo = callPackage ../development/libraries/cairo {-    glSupport = config.cairo.gl or (stdenv.isLinux &&-      !stdenv.isArm && !stdenv.isMips);-  };-  cairomm = callPackage ../development/libraries/cairomm { };--  pango = callPackage ../development/libraries/pango { };-  pangomm = callPackage ../development/libraries/pangomm { };--  pangox_compat = callPackage ../development/libraries/pangox-compat { };--  gdk_pixbuf = callPackage ../development/libraries/gdk-pixbuf {-    # workaround signal 10 in gdk_pixbuf tests-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  gtk2 = callPackage ../development/libraries/gtk+/2.x.nix {-    cupsSupport = config.gtk2.cups or stdenv.isLinux;-  };--  gtk3 = callPackage ../development/libraries/gtk+/3.x.nix { };--  gtk = pkgs.gtk2;--  gtkmm = callPackage ../development/libraries/gtkmm/2.x.nix { };-  gtkmm3 = callPackage ../development/libraries/gtkmm/3.x.nix { };--  gtkmozembedsharp = callPackage ../development/libraries/gtkmozembed-sharp {-    gtksharp = gtksharp2;-  };--  gtksharp1 = callPackage ../development/libraries/gtk-sharp-1 {-    inherit (gnome) libglade libgtkhtml gtkhtml-              libgnomecanvas libgnomeui libgnomeprint-              libgnomeprintui GConf;-  };--  gtksharp2 = callPackage ../development/libraries/gtk-sharp-2 {-    inherit (gnome) libglade libgtkhtml gtkhtml-              libgnomecanvas libgnomeui libgnomeprint-              libgnomeprintui GConf gnomepanel;-  };--  gtksourceviewsharp = callPackage ../development/libraries/gtksourceview-sharp {-    inherit (gnome) gtksourceview;-    gtksharp = gtksharp2;-  };--  gtkspell = callPackage ../development/libraries/gtkspell { };--  gtkspell3 = callPackage ../development/libraries/gtkspell/3.nix { };--  gts = callPackage ../development/libraries/gts { };--  gvfs = callPackage ../development/libraries/gvfs { gconf = gnome.GConf; };--  gwenhywfar = callPackage ../development/libraries/gwenhywfar { };--  hamlib = callPackage ../development/libraries/hamlib { };--  # TODO : Add MIT Kerberos and let admin choose.-  kerberos = heimdal;--  heimdal = callPackage ../development/libraries/kerberos/heimdal.nix { };--  harfbuzz = callPackage ../development/libraries/harfbuzz { };--  hawknl = callPackage ../development/libraries/hawknl { };--  herqq = callPackage ../development/libraries/herqq { };--  hspell = callPackage ../development/libraries/hspell { };--  hspellDicts = callPackage ../development/libraries/hspell/dicts.nix { };--  hsqldb = callPackage ../development/libraries/java/hsqldb { };--  http-parser = callPackage ../development/libraries/http-parser { inherit (pythonPackages) gyp; };--  hunspell = callPackage ../development/libraries/hunspell { };--  hwloc = callPackage ../development/libraries/hwloc {-    inherit (xlibs) libX11;-  };--  hydraAntLogger = callPackage ../development/libraries/java/hydra-ant-logger { };--  icu = callPackage ../development/libraries/icu { };--  id3lib = callPackage ../development/libraries/id3lib { };--  iksemel = callPackage ../development/libraries/iksemel { };--  ilbc = callPackage ../development/libraries/ilbc { };--  ilixi = callPackage ../development/libraries/ilixi { };--  ilmbase = callPackage ../development/libraries/ilmbase { };--  imlib = callPackage ../development/libraries/imlib {-    libpng = libpng12;-  };--  imlib2 = callPackage ../development/libraries/imlib2 { };--  incrtcl = callPackage ../development/libraries/incrtcl { };--  indilib = callPackage ../development/libraries/indilib { };--  iniparser = callPackage ../development/libraries/iniparser { };--  intltool = callPackage ../development/tools/misc/intltool { };--  irrlicht3843 = callPackage ../development/libraries/irrlicht { };--  isocodes = callPackage ../development/libraries/iso-codes { };--  itk = callPackage ../development/libraries/itk { };--  jamp = builderDefsPackage ../games/jamp {-    inherit mesa SDL SDL_image SDL_mixer;-  };--  jasper = callPackage ../development/libraries/jasper { };--  jama = callPackage ../development/libraries/jama { };--  jansson = callPackage ../development/libraries/jansson { };--  jbig2dec = callPackage ../development/libraries/jbig2dec { };--  jetty_gwt = callPackage ../development/libraries/java/jetty-gwt { };--  jetty_util = callPackage ../development/libraries/java/jetty-util { };--  json_glib = callPackage ../development/libraries/json-glib { };--  json-c-0-11 = callPackage ../development/libraries/json-c/0.11.nix { }; # vulnerable-  json_c = callPackage ../development/libraries/json-c { };--  jsoncpp = callPackage ../development/libraries/jsoncpp { };--  libjson = callPackage ../development/libraries/libjson { };--  judy = callPackage ../development/libraries/judy { };--  keybinder = callPackage ../development/libraries/keybinder {-    automake = automake111x;-    lua = lua5_1;-  };--  keybinder3 = callPackage ../development/libraries/keybinder3 {-    automake = automake111x;-    lua = lua5_1;-  };--  krb5 = callPackage ../development/libraries/kerberos/krb5.nix { };--  lcms = lcms1;--  lcms1 = callPackage ../development/libraries/lcms { };--  lcms2 = callPackage ../development/libraries/lcms2 { };--  lensfun = callPackage ../development/libraries/lensfun { };--  lesstif = callPackage ../development/libraries/lesstif { };--  lesstif93 = callPackage ../development/libraries/lesstif-0.93 { };--  leveldb = callPackage ../development/libraries/leveldb { };--  levmar = callPackage ../development/libraries/levmar { };--  leptonica = callPackage ../development/libraries/leptonica {-    libpng = libpng12;-  };--  lgi = callPackage ../development/libraries/lgi {-    lua = lua5_1;-  };--  lib3ds = callPackage ../development/libraries/lib3ds { };--  libaacs = callPackage ../development/libraries/libaacs { };--  libaal = callPackage ../development/libraries/libaal { };--  libao = callPackage ../development/libraries/libao {-    usePulseAudio = config.pulseaudio or true;-  };--  libarchive = callPackage ../development/libraries/libarchive { };--  libass = callPackage ../development/libraries/libass { };--  libassuan1 = callPackage ../development/libraries/libassuan1 { };--  libassuan = callPackage ../development/libraries/libassuan { };--  libassuan2_1 = callPackage ../development/libraries/libassuan/git.nix { };--  libatomic_ops = callPackage ../development/libraries/libatomic_ops {};--  libav = libav_10;-  libav_all = callPackage ../development/libraries/libav { };-  inherit (libav_all) libav_0_8 libav_9 libav_10;--  libavc1394 = callPackage ../development/libraries/libavc1394 { };--  libbluedevil = callPackage ../development/libraries/libbluedevil { };--  libbluray = callPackage ../development/libraries/libbluray { };--  libbs2b = callPackage ../development/libraries/audio/libbs2b { };--  libcaca = callPackage ../development/libraries/libcaca { };--  libcanberra = callPackage ../development/libraries/libcanberra { };-  libcanberra_gtk3 = libcanberra.override { gtk = gtk3; };-  libcanberra_kde = if (config.kde_runtime.libcanberraWithoutGTK or true)-    then libcanberra.override { gtk = null; }-    else libcanberra;--  libcello = callPackage ../development/libraries/libcello {};--  libcdaudio = callPackage ../development/libraries/libcdaudio { };--  libcddb = callPackage ../development/libraries/libcddb { };--  libcdio = callPackage ../development/libraries/libcdio { };-  libcdio082 = callPackage ../development/libraries/libcdio/0.82.nix { };--  libcdr = callPackage ../development/libraries/libcdr { lcms = lcms2; };--  libchamplain = callPackage ../development/libraries/libchamplain {-    inherit (gnome) libsoup;-  };--  libchamplain_0_6 = callPackage ../development/libraries/libchamplain/0.6.nix {};--  libchop = callPackage ../development/libraries/libchop { };--  libcm = callPackage ../development/libraries/libcm { };--  inherit (gnome3) libcroco;--  libcangjie = callPackage ../development/libraries/libcangjie { };--  libcredis = callPackage ../development/libraries/libcredis { };--  libctemplate = callPackage ../development/libraries/libctemplate { };--  libcue = callPackage ../development/libraries/libcue { };--  libdaemon = callPackage ../development/libraries/libdaemon { };--  libdbi = callPackage ../development/libraries/libdbi { };--  libdbiDriversBase = callPackage ../development/libraries/libdbi-drivers {-    mysql = null;-    sqlite = null;-  };--  libdbiDrivers = libdbiDriversBase.override {-    inherit sqlite mysql;-  };--  libdbusmenu_qt = callPackage ../development/libraries/libdbusmenu-qt { };--  libdc1394 = callPackage ../development/libraries/libdc1394 { };--  libdc1394avt = callPackage ../development/libraries/libdc1394avt { };--  libdevil = callPackage ../development/libraries/libdevil { };--  libdiscid = callPackage ../development/libraries/libdiscid { };--  libdivsufsort = callPackage ../development/libraries/libdivsufsort { };--  libdmtx = callPackage ../development/libraries/libdmtx { };--  libdnet = callPackage ../development/libraries/libdnet { };--  libdrm = callPackage ../development/libraries/libdrm {-    inherit fetchurl stdenv pkgconfig;-    inherit (xorg) libpthreadstubs;-  };--  libdv = callPackage ../development/libraries/libdv { };--  libdvbpsi = callPackage ../development/libraries/libdvbpsi { };--  libdwg = callPackage ../development/libraries/libdwg { };--  libdvdcss = callPackage ../development/libraries/libdvdcss { };--  libdvdnav = callPackage ../development/libraries/libdvdnav { };--  libdvdread = callPackage ../development/libraries/libdvdread { };--  libdwarf = callPackage ../development/libraries/libdwarf { };--  libeatmydata = callPackage ../development/libraries/libeatmydata { };--  libebml = callPackage ../development/libraries/libebml { };--  libedit = callPackage ../development/libraries/libedit { };--  libelf = callPackage ../development/libraries/libelf { };--  libfm = callPackage ../development/libraries/libfm { };--  libgadu = callPackage ../development/libraries/libgadu { };--  libgdata = gnome3.libgdata;--  libgig = callPackage ../development/libraries/libgig { };--  libgnome_keyring = callPackage ../development/libraries/libgnome-keyring { };-  libgnome_keyring3 = gnome3.libgnome_keyring;--  libgnurl = callPackage ../development/libraries/libgnurl { };--  libseccomp = callPackage ../development/libraries/libseccomp { };--  libsecret = callPackage ../development/libraries/libsecret { };--  libserialport = callPackage ../development/libraries/libserialport { };--  libgtop = callPackage ../development/libraries/libgtop {};--  liblo = callPackage ../development/libraries/liblo { };--  liblrdf = librdf;--  liblscp = callPackage ../development/libraries/liblscp { };--  libe-book = callPackage ../development/libraries/libe-book {};-  libe-book_00 = callPackage ../development/libraries/libe-book/0.0.nix {};--  libev = builderDefsPackage ../development/libraries/libev { };--  libevent14 = callPackage ../development/libraries/libevent/1.4.nix { };-  libevent = callPackage ../development/libraries/libevent { };--  libewf = callPackage ../development/libraries/libewf { };--  libexif = callPackage ../development/libraries/libexif { };--  libexosip = callPackage ../development/libraries/exosip {};--  libexosip_3 = callPackage ../development/libraries/exosip/3.x.nix {-    libosip = libosip_3;-  };--  libextractor = callPackage ../development/libraries/libextractor {-    libmpeg2 = mpeg2dec;-  };--  libexttextcat = callPackage ../development/libraries/libexttextcat {};--  libf2c = callPackage ../development/libraries/libf2c {};--  libfixposix = callPackage ../development/libraries/libfixposix {};--  libffcall = builderDefsPackage (import ../development/libraries/libffcall) {-    inherit fetchcvs;-  };--  libffi = callPackage ../development/libraries/libffi { };--  libftdi = callPackage ../development/libraries/libftdi { };--  libftdi1 = callPackage ../development/libraries/libftdi/1.x.nix { };--  libgcrypt = callPackage ../development/libraries/libgcrypt { };--  libgcrypt_1_6 = lowPrio (callPackage ../development/libraries/libgcrypt/1.6.nix { });--  libgdiplus = callPackage ../development/libraries/libgdiplus { };--  libgksu = callPackage ../development/libraries/libgksu { };--  libgpgerror = callPackage ../development/libraries/libgpg-error { };--  libgphoto2 = callPackage ../development/libraries/libgphoto2 { };--  libgphoto2_4 = callPackage ../development/libraries/libgphoto2/2.4.nix { };--  libgpod = callPackage ../development/libraries/libgpod {-    inherit (pkgs.pythonPackages) mutagen;-  };--  libharu = callPackage ../development/libraries/libharu { };--  libical = callPackage ../development/libraries/libical { };--  libicns = callPackage ../development/libraries/libicns { };--  libimobiledevice = callPackage ../development/libraries/libimobiledevice { };--  libiodbc = callPackage ../development/libraries/libiodbc {-    useGTK = config.libiodbc.gtk or false;-  };--  libivykis = callPackage ../development/libraries/libivykis { };--  liblastfmSF = callPackage ../development/libraries/liblastfmSF { };--  liblastfm = callPackage ../development/libraries/liblastfm { };--  liblqr1 = callPackage ../development/libraries/liblqr-1 { };--  liblockfile = callPackage ../development/libraries/liblockfile { };--  liblogging = callPackage ../development/libraries/liblogging { };--  libmcrypt = callPackage ../development/libraries/libmcrypt {};--  libmhash = callPackage ../development/libraries/libmhash {};--  libmodbus = callPackage ../development/libraries/libmodbus {};--  libmtp = callPackage ../development/libraries/libmtp { };--  libmsgpack = callPackage ../development/libraries/libmsgpack { };--  libnatspec = callPackage ../development/libraries/libnatspec { };--  libnfc = callPackage ../development/libraries/libnfc { };--  libnfsidmap = callPackage ../development/libraries/libnfsidmap { };--  libnice = callPackage ../development/libraries/libnice { };--  liboping = callPackage ../development/libraries/liboping { };--  libplist = callPackage ../development/libraries/libplist { };--  libQGLViewer = callPackage ../development/libraries/libqglviewer { };--  libre = callPackage ../development/libraries/libre {};-  librem = callPackage ../development/libraries/librem {};--  libresample = callPackage ../development/libraries/libresample {};--  librevenge = callPackage ../development/libraries/librevenge {};--  librevisa = callPackage ../development/libraries/librevisa { };--  libsamplerate = callPackage ../development/libraries/libsamplerate { };--  libspectre = callPackage ../development/libraries/libspectre { };--  libgsf = callPackage ../development/libraries/libgsf { };--  libiconv = callPackage ../development/libraries/libiconv { };--  libiconvOrEmpty = if libiconvOrNull == null then [] else [libiconv];--  libiconvOrNull =-    if gcc.libc or null != null || stdenv.isGlibc-    then null-    else libiconv;--  # The logic behind this attribute is broken: libiconvOrNull==null does-  # NOT imply libiconv=glibc! On Darwin, for example, we have a native-  # libiconv library which is not glibc.-  libiconvOrLibc = if libiconvOrNull == null then gcc.libc else libiconv;--  # On non-GNU systems we need GNU Gettext for libintl.-  libintlOrEmpty = stdenv.lib.optional (!stdenv.isLinux) gettext;--  libid3tag = callPackage ../development/libraries/libid3tag { };--  libidn = callPackage ../development/libraries/libidn { };--  libiec61883 = callPackage ../development/libraries/libiec61883 { };--  libinfinity = callPackage ../development/libraries/libinfinity {-    inherit (gnome) gtkdoc;-  };--  libiptcdata = callPackage ../development/libraries/libiptcdata { };--  libjpeg_original = callPackage ../development/libraries/libjpeg { };-  libjpeg_turbo = callPackage ../development/libraries/libjpeg-turbo { };-  libjpeg = if (stdenv.isLinux) then libjpeg_turbo else libjpeg_original; # some problems, both on FreeBSD and Darwin--  libjpeg62 = callPackage ../development/libraries/libjpeg/62.nix {-    libtool = libtool_1_5;-  };--  libjson_rpc_cpp = callPackage ../development/libraries/libjson-rpc-cpp { };--  libkate = callPackage ../development/libraries/libkate { };--  libksba = callPackage ../development/libraries/libksba { };--  libmad = callPackage ../development/libraries/libmad { };--  libmatchbox = callPackage ../development/libraries/libmatchbox { };--  libmatthew_java = callPackage ../development/libraries/java/libmatthew-java { };--  libmatroska = callPackage ../development/libraries/libmatroska { };--  libmcs = callPackage ../development/libraries/libmcs { };--  libmemcached = callPackage ../development/libraries/libmemcached { };--  libmicrohttpd = callPackage ../development/libraries/libmicrohttpd { };--  libmikmod = callPackage ../development/libraries/libmikmod {-    # resolve the "stray '@' in program" errors-    stdenv = if stdenv.isDarwin-      then overrideGCC stdenv gccApple-      else stdenv;-  };--  libmilter = callPackage ../development/libraries/libmilter { };--  libmkv = callPackage ../development/libraries/libmkv { };--  libmms = callPackage ../development/libraries/libmms { };--  libmowgli = callPackage ../development/libraries/libmowgli { };--  libmng = callPackage ../development/libraries/libmng { };--  libmnl = callPackage ../development/libraries/libmnl { };--  libmodplug = callPackage ../development/libraries/libmodplug {};--  libmpcdec = callPackage ../development/libraries/libmpcdec { };--  libmp3splt = callPackage ../development/libraries/libmp3splt { };--  libmrss = callPackage ../development/libraries/libmrss { };--  libmsn = callPackage ../development/libraries/libmsn { };--  libmspack = callPackage ../development/libraries/libmspack { };--  libmusclecard = callPackage ../development/libraries/libmusclecard { };--  libmusicbrainz2 = callPackage ../development/libraries/libmusicbrainz/2.x.nix { };--  libmusicbrainz3 = callPackage ../development/libraries/libmusicbrainz { };--  libmusicbrainz5 = callPackage ../development/libraries/libmusicbrainz/5.x.nix { };--  libmusicbrainz = libmusicbrainz3;--  libmwaw = callPackage ../development/libraries/libmwaw { };-  libmwaw_02 = callPackage ../development/libraries/libmwaw/0.2.nix { };--  libmx = callPackage ../development/libraries/libmx { };--  libnet = callPackage ../development/libraries/libnet { };--  libnetfilter_conntrack = callPackage ../development/libraries/libnetfilter_conntrack { };--  libnetfilter_queue = callPackage ../development/libraries/libnetfilter_queue { };--  libnfnetlink = callPackage ../development/libraries/libnfnetlink { };--  libnftnl = callPackage ../development/libraries/libnftnl { };--  libnih = callPackage ../development/libraries/libnih { };--  libnova = callPackage ../development/libraries/libnova { };--  libnxml = callPackage ../development/libraries/libnxml { };--  libodfgen = callPackage ../development/libraries/libodfgen { };--  libofa = callPackage ../development/libraries/libofa { };--  libofx = callPackage ../development/libraries/libofx { };--  libogg = callPackage ../development/libraries/libogg { };--  liboggz = callPackage ../development/libraries/liboggz { };--  liboil = callPackage ../development/libraries/liboil { };--  liboop = callPackage ../development/libraries/liboop { };--  libopus = callPackage ../development/libraries/libopus { };--  libosinfo = callPackage ../development/libraries/libosinfo {};--  libosip = callPackage ../development/libraries/osip {};--  libosip_3 = callPackage ../development/libraries/osip/3.nix {};--  libotr = callPackage ../development/libraries/libotr {-    libgcrypt = libgcrypt_1_6;-  };--  libotr_3_2 = callPackage ../development/libraries/libotr/3.2.nix { };--  libp11 = callPackage ../development/libraries/libp11 { };--  libpar2 = callPackage ../development/libraries/libpar2 { };--  libpcap = callPackage ../development/libraries/libpcap { };--  libpipeline = callPackage ../development/libraries/libpipeline { };--  libpng = callPackage ../development/libraries/libpng { };-  libpng_apng = libpng.override { apngSupport = true; };-  libpng12 = callPackage ../development/libraries/libpng/12.nix { };-  libpng15 = callPackage ../development/libraries/libpng/15.nix { };--  libpaper = callPackage ../development/libraries/libpaper { };--  libproxy = callPackage ../development/libraries/libproxy {-    stdenv = if stdenv.isDarwin-      then overrideGCC stdenv gcc-      else stdenv;-  };--  libpseudo = callPackage ../development/libraries/libpseudo { };--  libpwquality = callPackage ../development/libraries/libpwquality { };--  libqalculate = callPackage ../development/libraries/libqalculate { };--  librsvg = callPackage ../development/libraries/librsvg {-    gtk2 = null; gtk3 = null; # neither gtk version by default-  };--  librsync = callPackage ../development/libraries/librsync { };--  libsearpc = callPackage ../development/libraries/libsearpc { };--  libsigcxx = callPackage ../development/libraries/libsigcxx { };--  libsigcxx12 = callPackage ../development/libraries/libsigcxx/1.2.nix { };--  libsigsegv = callPackage ../development/libraries/libsigsegv { };--  # To bootstrap SBCL, I need CLisp 2.44.1; it needs libsigsegv 2.5-  libsigsegv_25 = callPackage ../development/libraries/libsigsegv/2.5.nix { };--  libsndfile = callPackage ../development/libraries/libsndfile { };--  libsodium = callPackage ../development/libraries/libsodium { };--  libsoup = callPackage ../development/libraries/libsoup { };--  libssh = callPackage ../development/libraries/libssh { };--  libssh2 = callPackage ../development/libraries/libssh2 { };--  libstartup_notification = callPackage ../development/libraries/startup-notification { };--  libspatialindex = callPackage ../development/libraries/libspatialindex { };--  libspatialite = callPackage ../development/libraries/libspatialite { };--  libtar = callPackage ../development/libraries/libtar { };--  libtasn1 = callPackage ../development/libraries/libtasn1 { };--  libtheora = callPackage ../development/libraries/libtheora { };--  libtiff = callPackage ../development/libraries/libtiff { };--  libtiger = callPackage ../development/libraries/libtiger { };--  libtommath = callPackage ../development/libraries/libtommath { };--  libtorrentRasterbar = callPackage ../development/libraries/libtorrent-rasterbar {-    # fix "unrecognized option -arch" error-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  libtoxcore = callPackage ../development/libraries/libtoxcore { };--  libtsm = callPackage ../development/libraries/libtsm { };--  libtunepimp = callPackage ../development/libraries/libtunepimp { };--  libtxc_dxtn = callPackage ../development/libraries/libtxc_dxtn { };--  libtxc_dxtn_s2tc = callPackage ../development/libraries/libtxc_dxtn_s2tc { };--  libgeotiff = callPackage ../development/libraries/libgeotiff { };--  libunistring = callPackage ../development/libraries/libunistring { };--  libupnp = callPackage ../development/libraries/pupnp { };--  giflib = callPackage ../development/libraries/giflib { };-  giflib_4_1 = callPackage ../development/libraries/giflib/4.1.nix { };--  libungif = callPackage ../development/libraries/giflib/libungif.nix { };--  libunibreak = callPackage ../development/libraries/libunibreak { };--  libunique = callPackage ../development/libraries/libunique/default.nix { };--  liburcu = callPackage ../development/libraries/liburcu { };--  libusb = callPackage ../development/libraries/libusb {};--  libusb1 = callPackage ../development/libraries/libusb1 {-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  libunwind = callPackage ../development/libraries/libunwind { };--  libuvVersions = callPackage ../development/libraries/libuv { };--  libv4l = lowPrio (v4l_utils.override {-    withQt4 = false;-  });--  libva = callPackage ../development/libraries/libva { };--  libvdpau = callPackage ../development/libraries/libvdpau { };--  libvirt = callPackage ../development/libraries/libvirt { };--  libvirt-glib = callPackage ../development/libraries/libvirt-glib { };--  libvisio = callPackage ../development/libraries/libvisio { };--  libvisual = callPackage ../development/libraries/libvisual { };--  libvncserver = callPackage ../development/libraries/libvncserver {};--  libviper = callPackage ../development/libraries/libviper { };--  libvpx = callPackage ../development/libraries/libvpx { };--  libvterm = callPackage ../development/libraries/libvterm { };--  libvorbis = callPackage ../development/libraries/libvorbis { };--  libwebp = callPackage ../development/libraries/libwebp { };--  libwmf = callPackage ../development/libraries/libwmf { };--  libwnck = libwnck2;-  libwnck2 = callPackage ../development/libraries/libwnck { };-  libwnck3 = callPackage ../development/libraries/libwnck/3.x.nix { };--  libwpd = callPackage ../development/libraries/libwpd { };--  libwpd_08 = callPackage ../development/libraries/libwpd/0.8.nix { };--  libwpg = callPackage ../development/libraries/libwpg { };--  libx86 = builderDefsPackage ../development/libraries/libx86 {};--  libxdg_basedir = callPackage ../development/libraries/libxdg-basedir { };--  libxkbcommon = callPackage ../development/libraries/libxkbcommon { };--  libxklavier = callPackage ../development/libraries/libxklavier { };--  libxmi = callPackage ../development/libraries/libxmi { };--  libxml2 = callPackage ../development/libraries/libxml2 {-    pythonSupport = false;-  };--  libxml2Python = lowPrio (libxml2.override {-    pythonSupport = true;-  });--  libxmlxx = callPackage ../development/libraries/libxmlxx { };--  libxmp = callPackage ../development/libraries/libxmp { };--  libxslt = callPackage ../development/libraries/libxslt { };--  libixp_for_wmii = lowPrio (import ../development/libraries/libixp_for_wmii {-    inherit fetchurl stdenv;-  });--  libyaml = callPackage ../development/libraries/libyaml { };--  libyamlcpp = callPackage ../development/libraries/libyaml-cpp { };-  libyamlcpp03 = callPackage ../development/libraries/libyaml-cpp/0.3.x.nix { };--  libyubikey = callPackage ../development/libraries/libyubikey {};--  libzip = callPackage ../development/libraries/libzip { };--  libzdb = callPackage ../development/libraries/libzdb { };--  libzrtpcpp = callPackage ../development/libraries/libzrtpcpp { };-  libzrtpcpp_1_6 = callPackage ../development/libraries/libzrtpcpp/1.6.nix {-    ccrtp = ccrtp_1_8;-  };--  libwacom = callPackage ../development/libraries/libwacom { };--  lightning = callPackage ../development/libraries/lightning { };--  lirc = callPackage ../development/libraries/lirc { };--  liquidwar = builderDefsPackage ../games/liquidwar {-    inherit (xlibs) xproto libX11 libXrender;-    inherit gmp mesa libjpeg-      expat gettext perl-      SDL SDL_image SDL_mixer SDL_ttf-      curl sqlite-      libogg libvorbis libcaca csound cunit-      ;-    guile = guile_1_8;-    libpng = libpng15; # 0.0.13 needs libpng 1.2--1.5-  };--  log4cpp = callPackage ../development/libraries/log4cpp { };--  log4cxx = callPackage ../development/libraries/log4cxx { };--  log4cplus = callPackage ../development/libraries/log4cplus { };--  loudmouth = callPackage ../development/libraries/loudmouth { };--  lzo = callPackage ../development/libraries/lzo { };--  mdds_0_7_1 = callPackage ../development/libraries/mdds/0.7.1.nix { };-  mdds = callPackage ../development/libraries/mdds { };--  # failed to build-  mediastreamer = callPackage ../development/libraries/mediastreamer { };--  menu-cache = callPackage ../development/libraries/menu-cache { };--  mesaSupported = lib.elem system lib.platforms.mesaPlatforms;--  mesaDarwinOr = alternative: if stdenv.isDarwin-    then callPackage ../development/libraries/mesa-darwin { }-    else alternative;-  mesa_noglu = mesaDarwinOr (callPackage ../development/libraries/mesa {-    # makes it slower, but during runtime we link against just mesa_drivers-    # through /run/opengl-driver*, which is overriden according to config.grsecurity-    grsecEnabled = true;-  });-  mesa_glu =  mesaDarwinOr (callPackage ../development/libraries/mesa-glu { });-  mesa_drivers = mesaDarwinOr (-    let mo = mesa_noglu.override {-      grsecEnabled = config.grsecurity or false;-    };-    in mo.drivers-  );-  mesa = mesaDarwinOr (buildEnv {-    name = "mesa-${mesa_noglu.version}";-    paths = [ mesa_noglu mesa_glu ];-  });--  metaEnvironment = recurseIntoAttrs (let callPackage = newScope pkgs.metaEnvironment; in rec {-    sdfLibrary    = callPackage ../development/libraries/sdf-library { aterm = aterm28; };-    toolbuslib    = callPackage ../development/libraries/toolbuslib { aterm = aterm28; inherit (windows) w32api; };-    cLibrary      = callPackage ../development/libraries/c-library { aterm = aterm28; };-    errorSupport  = callPackage ../development/libraries/error-support { aterm = aterm28; };-    ptSupport     = callPackage ../development/libraries/pt-support { aterm = aterm28; };-    ptableSupport = callPackage ../development/libraries/ptable-support { aterm = aterm28; };-    configSupport = callPackage ../development/libraries/config-support { aterm = aterm28; };-    asfSupport    = callPackage ../development/libraries/asf-support { aterm = aterm28; };-    tideSupport   = callPackage ../development/libraries/tide-support { aterm = aterm28; };-    rstoreSupport = callPackage ../development/libraries/rstore-support { aterm = aterm28; };-    sdfSupport    = callPackage ../development/libraries/sdf-support { aterm = aterm28; };-    sglr          = callPackage ../development/libraries/sglr { aterm = aterm28; };-    ascSupport    = callPackage ../development/libraries/asc-support { aterm = aterm28; };-    pgen          = callPackage ../development/libraries/pgen { aterm = aterm28; };-  });--  ming = callPackage ../development/libraries/ming { };--  minizip = callPackage ../development/libraries/minizip { };--  minmay = callPackage ../development/libraries/minmay { };--  miro = callPackage ../applications/video/miro {-    inherit (pythonPackages) pywebkitgtk pysqlite pycurl mutagen;-  };--  mkvtoolnix = callPackage ../applications/video/mkvtoolnix { };--  mlt-qt4 = callPackage ../development/libraries/mlt {-    qt = qt4;-    SDL = SDL_pulseaudio;-  };--  mlt-qt5 = callPackage ../development/libraries/mlt {-    qt = qt5;-    SDL = SDL_pulseaudio;-  };--  movit = callPackage ../development/libraries/movit { };--  mps = callPackage ../development/libraries/mps { };--  libmpeg2 = callPackage ../development/libraries/libmpeg2 { };--  mpeg2dec = libmpeg2;--  msilbc = callPackage ../development/libraries/msilbc { };--  mp4v2 = callPackage ../development/libraries/mp4v2 { };--  mpc = callPackage ../development/libraries/mpc { };--  mpich2 = callPackage ../development/libraries/mpich2 { };--  mtdev = callPackage ../development/libraries/mtdev { };--  mtpfs = callPackage ../tools/filesystems/mtpfs { };--  mu = callPackage ../tools/networking/mu {-    texinfo = texinfo4;-  };--  muparser = callPackage ../development/libraries/muparser { };--  mygpoclient = callPackage ../development/python-modules/mygpoclient { };--  mygui = callPackage ../development/libraries/mygui {};--  myguiSvn = callPackage ../development/libraries/mygui/svn.nix {};--  mysocketw = callPackage ../development/libraries/mysocketw { };--  mythes = callPackage ../development/libraries/mythes { };--  nanomsg = callPackage ../development/libraries/nanomsg { };--  ncurses = callPackage ../development/libraries/ncurses {-    unicode = system != "i686-cygwin";-  };--  neon = callPackage ../development/libraries/neon {-    compressionSupport = true;-    sslSupport = true;-  };--  nethack = builderDefsPackage (import ../games/nethack) {-    inherit ncurses flex bison;-  };--  nettle = callPackage ../development/libraries/nettle { };--  newt = callPackage ../development/libraries/newt { };--  nix-plugins = callPackage ../development/libraries/nix-plugins {-    nix = pkgs.nixUnstable;-  };--  nspr = callPackage ../development/libraries/nspr { };--  nss = lowPrio (callPackage ../development/libraries/nss { });--  nssTools = callPackage ../development/libraries/nss {-    includeTools = true;-  };--  ntrack = callPackage ../development/libraries/ntrack { };--  nvidia-texture-tools = callPackage ../development/libraries/nvidia-texture-tools { };--  ode = builderDefsPackage (import ../development/libraries/ode) { };--  ogre = callPackage ../development/libraries/ogre {};--  ogrepaged = callPackage ../development/libraries/ogrepaged { };--  oniguruma = callPackage ../development/libraries/oniguruma { };--  openal = callPackage ../development/libraries/openal { };--  # added because I hope that it has been easier to compile on x86 (for blender)-  openalSoft = callPackage ../development/libraries/openal-soft { };--  openbabel = callPackage ../development/libraries/openbabel { };--  opencascade = callPackage ../development/libraries/opencascade { };--  opencascade_6_5 = callPackage ../development/libraries/opencascade/6.5.nix {-    automake = automake111x;-    ftgl = ftgl212;-  };--  opencascade_oce = callPackage ../development/libraries/opencascade/oce.nix { };--  opencsg = callPackage ../development/libraries/opencsg { };--  openct = callPackage ../development/libraries/openct { };--  opencv = callPackage ../development/libraries/opencv { };--  opencv_2_1 = callPackage ../development/libraries/opencv/2.1.nix {-    libpng = libpng12;-  };--  # this ctl version is needed by openexr_viewers-  openexr_ctl = callPackage ../development/libraries/openexr_ctl { };--  openexr = callPackage ../development/libraries/openexr { };--  openldap = callPackage ../development/libraries/openldap { };--  openlierox = callPackage ../games/openlierox { };--  libopensc_dnie = callPackage ../development/libraries/libopensc-dnie { };--  opencolorio = callPackage ../development/libraries/opencolorio { };--  ois = callPackage ../development/libraries/ois {};--  opal = callPackage ../development/libraries/opal {};--  openjpeg = callPackage ../development/libraries/openjpeg { lcms = lcms2; };--  openscenegraph = callPackage ../development/libraries/openscenegraph {-    giflib = giflib_4_1;-    ffmpeg = ffmpeg_0_10;-  };--  openspades = callPackage ../games/openspades {};--  libressl = callPackage ../development/libraries/libressl { };--  boringssl = callPackage ../development/libraries/boringssl { };--  openssl = callPackage ../development/libraries/openssl {-    fetchurl = fetchurlBoot;-    cryptodevHeaders = linuxPackages.cryptodev.override {-      fetchurl = fetchurlBoot;-      onlyHeaders = true;-    };-  };--  ortp = callPackage ../development/libraries/ortp {-    srtp = srtp_linphone;-  };--  p11_kit = callPackage ../development/libraries/p11-kit { };--  paperkey = callPackage ../tools/security/paperkey { };--  pangoxsl = callPackage ../development/libraries/pangoxsl { };--  pcl = callPackage ../development/libraries/pcl {-    vtk = vtkWithQt4;-  };--  pcre = callPackage ../development/libraries/pcre {-    unicodeSupport = config.pcre.unicode or true;-  };--  pdf2xml = callPackage ../development/libraries/pdf2xml {} ;--  phonon = callPackage ../development/libraries/phonon { };--  phonon_backend_gstreamer = callPackage ../development/libraries/phonon-backend-gstreamer { };--  phonon_backend_vlc = callPackage ../development/libraries/phonon-backend-vlc { };--  physfs = callPackage ../development/libraries/physfs { };--  pkcs11helper = callPackage ../development/libraries/pkcs11helper { };--  plib = callPackage ../development/libraries/plib { };--  pocketsphinx = callPackage ../development/libraries/pocketsphinx { };--  podofo = callPackage ../development/libraries/podofo { };--  polkit = callPackage ../development/libraries/polkit {-    spidermonkey = spidermonkey_185;-  };--  polkit_qt_1 = callPackage ../development/libraries/polkit-qt-1 { };--  policykit = callPackage ../development/libraries/policykit { };--  poppler = callPackage ../development/libraries/poppler { lcms = lcms2; };-  popplerQt4 = poppler.poppler_qt4;--  popt = callPackage ../development/libraries/popt { };--  portaudio = callPackage ../development/libraries/portaudio {-    # resolves a variety of compile-time errors-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  portaudioSVN = callPackage ../development/libraries/portaudio/svn-head.nix { };--  portmidi = callPackage ../development/libraries/portmidi {};--  prison = callPackage ../development/libraries/prison { };--  proj = callPackage ../development/libraries/proj { };--  postgis = callPackage ../development/libraries/postgis { };--  protobuf = callPackage ../development/libraries/protobuf { };--  protobufc = callPackage ../development/libraries/protobufc { };--  pth = callPackage ../development/libraries/pth { };--  ptlib = callPackage ../development/libraries/ptlib {};--  re2 = callPackage ../development/libraries/re2 { };--  qca2 = callPackage ../development/libraries/qca2 {};--  qca2_ossl = callPackage ../development/libraries/qca2/ossl.nix {};--  qimageblitz = callPackage ../development/libraries/qimageblitz {};--  qjson = callPackage ../development/libraries/qjson { };--  qoauth = callPackage ../development/libraries/qoauth { };--  qt3 = callPackage ../development/libraries/qt-3 {-    openglSupport = mesaSupported;-    libpng = libpng12;-  };--  qt4 = pkgs.kde4.qt4;--  qt48 = callPackage ../development/libraries/qt-4.x/4.8 {-    # GNOME dependencies are not used unless gtkStyle == true-    mesa = mesa_noglu;-    inherit (pkgs.gnome) libgnomeui GConf gnome_vfs;-    cups = if stdenv.isLinux then cups else null;--    # resolve unrecognised flag '-fconstant-cfstrings' errors-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  qt48Full = qt48.override {-    docs = true;-    demos = true;-    examples = true;-    developerBuild = true;-  };--  qt4SDK = qtcreator.override {-    sdkBuild = true;-    qtLib = qt48Full;-  };--  qt53Full = qt53.override {-    buildDocs = true;-    buildExamples = true;-    buildTests = true;-    developerBuild = true;-  };--  qt53 = callPackage ../development/libraries/qt-5/qt-5.3.nix {-    mesa = mesa_noglu;-    cups = if stdenv.isLinux then cups else null;-    # GNOME dependencies are not used unless gtkStyle == true-    inherit (gnome) libgnomeui GConf gnome_vfs;-    bison = bison2; # error: too few arguments to function 'int yylex(...-  };--  qt5 = callPackage ../development/libraries/qt-5 {-    mesa = mesa_noglu;-    cups = if stdenv.isLinux then cups else null;-    # GNOME dependencies are not used unless gtkStyle == true-    inherit (gnome) libgnomeui GConf gnome_vfs;-    bison = bison2; # error: too few arguments to function 'int yylex(...-  };--  qt5Full = qt5.override {-    buildDocs = true;-    buildExamples = true;-    buildTests = true;-    developerBuild = true;-  };--  qt5SDK = qtcreator.override {-    sdkBuild = true;-    qtLib = qt5Full;-  };--  qtcreator = callPackage ../development/qtcreator {-    qtLib = qt48.override { developerBuild = true; };-  };--  qtscriptgenerator = callPackage ../development/libraries/qtscriptgenerator { };--  quesoglc = callPackage ../development/libraries/quesoglc { };--  qwt = callPackage ../development/libraries/qwt {};--  qwt6 = callPackage ../development/libraries/qwt/6.nix { };--  rabbitmq-c = callPackage ../development/libraries/rabbitmq-c {};--  rabbitmq-java-client = callPackage ../development/libraries/rabbitmq-java-client {};--  raul = callPackage ../development/libraries/audio/raul { };--  readline = readline6; # 6.2 works, 6.3 breaks python, parted--  readline4 = callPackage ../development/libraries/readline/readline4.nix { };--  readline5 = callPackage ../development/libraries/readline/readline5.nix { };--  readline6 = callPackage ../development/libraries/readline/readline6.nix { };--  readline63 = callPackage ../development/libraries/readline/readline6.3.nix { };--  librdf_raptor = callPackage ../development/libraries/librdf/raptor.nix { };--  librdf_raptor2 = callPackage ../development/libraries/librdf/raptor2.nix { };--  librdf_rasqal = callPackage ../development/libraries/librdf/rasqal.nix { };--  librdf_redland = callPackage ../development/libraries/librdf/redland.nix { };--  librdf = callPackage ../development/libraries/librdf { };--  lilv = callPackage ../development/libraries/audio/lilv { };--  lv2 = callPackage ../development/libraries/audio/lv2 { };--  lvtk = callPackage ../development/libraries/audio/lvtk { };--  qrupdate = callPackage ../development/libraries/qrupdate { };--  redland = pkgs.librdf_redland;--  rhino = callPackage ../development/libraries/java/rhino {-    javac = gcj;-    jvm = gcj;-  };--  rlog = callPackage ../development/libraries/rlog { };--  rubberband = callPackage ../development/libraries/rubberband {-    fftw = fftwSinglePrec;-    inherit (vamp) vampSDK;-  };--  sbc = callPackage ../development/libraries/sbc { };--  schroedinger = callPackage ../development/libraries/schroedinger { };--  SDL = callPackage ../development/libraries/SDL {-    openglSupport = mesaSupported;-    alsaSupport = (!stdenv.isDarwin);-    x11Support = true;-    pulseaudioSupport = stdenv.isDarwin; # better go through ALSA--    # resolve the unrecognized -fpascal-strings option error-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  # Fixes major problems with choppy sound in MLT / Kdenlive / Shotcut-  SDL_pulseaudio = SDL.override { pulseaudioSupport = true; };--  SDL_gfx = callPackage ../development/libraries/SDL_gfx { };--  SDL_image = callPackage ../development/libraries/SDL_image {-    # provide an Objective-C compiler-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  SDL_mixer = callPackage ../development/libraries/SDL_mixer { };--  SDL_net = callPackage ../development/libraries/SDL_net { };--  SDL_sound = callPackage ../development/libraries/SDL_sound { };--  SDL_ttf = callPackage ../development/libraries/SDL_ttf { };--  SDL2 = callPackage ../development/libraries/SDL2 {-    openglSupport = mesaSupported;-    alsaSupport = true;-    x11Support = true;-    pulseaudioSupport = false; # better go through ALSA-  };--  SDL2_image = callPackage ../development/libraries/SDL2_image { };--  SDL2_mixer = callPackage ../development/libraries/SDL2_mixer { };--  SDL2_net = callPackage ../development/libraries/SDL2_net { };--  SDL2_gfx = callPackage ../development/libraries/SDL2_gfx { };--  serd = callPackage ../development/libraries/serd {};--  serf = callPackage ../development/libraries/serf {};--  silgraphite = callPackage ../development/libraries/silgraphite {};-  graphite2 = callPackage ../development/libraries/silgraphite/graphite2.nix {};--  simgear = callPackage ../development/libraries/simgear { };--  sfml_git = callPackage ../development/libraries/sfml { };--  skalibs = callPackage ../development/libraries/skalibs { };--  slang = callPackage ../development/libraries/slang { };--  slibGuile = callPackage ../development/libraries/slib {-    scheme = guile_1_8;-    texinfo = texinfo4; # otherwise erros: must be after `@defun' to use `@defunx'-  };--  smpeg = callPackage ../development/libraries/smpeg { };--  snack = callPackage ../development/libraries/snack {-        # optional-  };--  snappy = callPackage ../development/libraries/snappy { };--  sodium = callPackage ../development/libraries/sodium {};--  sofia_sip = callPackage ../development/libraries/sofia-sip { };--  soprano = callPackage ../development/libraries/soprano { };--  soqt = callPackage ../development/libraries/soqt { };--  sord = callPackage ../development/libraries/sord {};--  spandsp = callPackage ../development/libraries/spandsp {};--  speechd = callPackage ../development/libraries/speechd { };--  speech_tools = callPackage ../development/libraries/speech-tools {};--  speex = callPackage ../development/libraries/speex { };--  sphinxbase = callPackage ../development/libraries/sphinxbase { };--  spice = callPackage ../development/libraries/spice {-    celt = celt_0_5_1;-    inherit (xlibs) libXrandr libXfixes libXext libXrender libXinerama;-    inherit (pythonPackages) pyparsing;-  };--  spice_gtk = callPackage ../development/libraries/spice-gtk { };--  spice_protocol = callPackage ../development/libraries/spice-protocol { };--  sratom = callPackage ../development/libraries/audio/sratom { };--  srtp = callPackage ../development/libraries/srtp {};--  srtp_linphone = callPackage ../development/libraries/srtp/linphone.nix { };--  sqlite = lowPrio (callPackage ../development/libraries/sqlite {-    readline = null;-    ncurses = null;-  });--  sqliteInteractive = appendToName "interactive" (sqlite.override {-    inherit readline ncurses;-  });--  sqlcipher = lowPrio (callPackage ../development/libraries/sqlcipher {-    readline = null;-    ncurses = null;-  });--  stfl = callPackage ../development/libraries/stfl {-    stdenv = if stdenv.isDarwin-      then overrideGCC stdenv gccApple-      else stdenv;-  };--  stlink = callPackage ../development/tools/misc/stlink { };--  steghide = callPackage ../tools/security/steghide {};--  stepmania = callPackage ../games/stepmania {};--  stlport = callPackage ../development/libraries/stlport { };--  strigi = callPackage ../development/libraries/strigi { clucene_core = clucene_core_2; };--  subtitleeditor = callPackage ../applications/video/subtitleeditor { };--  suil = callPackage ../development/libraries/audio/suil { };--  suitesparse = callPackage ../development/libraries/suitesparse { };--  sutils = callPackage ../tools/misc/sutils { };--  sword = callPackage ../development/libraries/sword { };--  szip = callPackage ../development/libraries/szip { };--  t1lib = callPackage ../development/libraries/t1lib { };--  taglib = callPackage ../development/libraries/taglib { };--  taglib_extras = callPackage ../development/libraries/taglib-extras { };--  talloc = callPackage ../development/libraries/talloc { };--  tclap = callPackage ../development/libraries/tclap {};--  tclgpg = callPackage ../development/libraries/tclgpg { };--  tcllib = callPackage ../development/libraries/tcllib { };--  tcltls = callPackage ../development/libraries/tcltls { };--  tdb = callPackage ../development/libraries/tdb { };--  tecla = callPackage ../development/libraries/tecla { };--  telepathy_glib = callPackage ../development/libraries/telepathy/glib { };--  telepathy_farstream = callPackage ../development/libraries/telepathy/farstream {};--  telepathy_qt = callPackage ../development/libraries/telepathy/qt { };--  thrift = callPackage ../development/libraries/thrift { };--  tinyxml = tinyxml2;--  tinyxml2 = callPackage ../development/libraries/tinyxml/2.6.2.nix { };--  tk = callPackage ../development/libraries/tk { };--  tnt = callPackage ../development/libraries/tnt { };--  tokyocabinet = callPackage ../development/libraries/tokyo-cabinet { };-  tokyotyrant = callPackage ../development/libraries/tokyo-tyrant { };--  tremor = callPackage ../development/libraries/tremor { };--  unicap = callPackage ../development/libraries/unicap {};--  tsocks = callPackage ../development/libraries/tsocks { };--  unixODBC = callPackage ../development/libraries/unixODBC { };--  unixODBCDrivers = recurseIntoAttrs (import ../development/libraries/unixODBCDrivers {-    inherit fetchurl stdenv unixODBC glibc libtool openssl zlib;-    inherit postgresql mysql sqlite;-  });--  urt = callPackage ../development/libraries/urt { };--  ustr = callPackage ../development/libraries/ustr { };--  usbredir = callPackage ../development/libraries/usbredir {-    libusb = libusb1;-  };--  ucommon = callPackage ../development/libraries/ucommon { };--  v8 = callPackage ../development/libraries/v8 {-    inherit (pythonPackages) gyp;-  };--  vaapiIntel = callPackage ../development/libraries/vaapi-intel { };--  vaapiVdpau = callPackage ../development/libraries/vaapi-vdpau { };--  vamp = callPackage ../development/libraries/audio/vamp { };--  vcdimager = callPackage ../development/libraries/vcdimager { };--  vigra = callPackage ../development/libraries/vigra {-    inherit (pkgs.pythonPackages) numpy;-  };--  vlock = callPackage ../misc/screensavers/vlock { };--  vmime = callPackage ../development/libraries/vmime { };--  vrpn = callPackage ../development/libraries/vrpn { };--  vtk = callPackage ../development/libraries/vtk { };--  vtkWithQt4 = vtk.override { qtLib = qt4; };--  vxl = callPackage ../development/libraries/vxl {-    libpng = libpng12;-  };--  wayland = callPackage ../development/libraries/wayland { };--  webkit = webkitgtk;--  webkitgtk = callPackage ../development/libraries/webkitgtk {-    harfbuzz = harfbuzz.override {-      withIcu = true;-    };-    gst-plugins-base = gst_all_1.gst-plugins-base;-  };--  webkitgtk2 = webkitgtk.override {-    withGtk2 = true;-    enableIntrospection = false;-  };--  wildmidi = callPackage ../development/libraries/wildmidi { };--  wvstreams = callPackage ../development/libraries/wvstreams { };--  wxGTK = wxGTK28;--  wxGTK28 = callPackage ../development/libraries/wxGTK-2.8 {-    inherit (gnome) GConf;-    withMesa = lib.elem system lib.platforms.mesaPlatforms;-  };--  wxGTK29 = callPackage ../development/libraries/wxGTK-2.9/default.nix {-    inherit (gnome) GConf;-    withMesa = lib.elem system lib.platforms.mesaPlatforms;--    # use for Objective-C++ compiler-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  wxGTK30 = callPackage ../development/libraries/wxGTK-3.0/default.nix {-    inherit (gnome) GConf;-    withMesa = lib.elem system lib.platforms.mesaPlatforms;--    # use for Objective-C++ compiler-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  wtk = callPackage ../development/libraries/wtk { };--  x264 = callPackage ../development/libraries/x264 { };--  xapian = callPackage ../development/libraries/xapian { };--  xapianBindings = callPackage ../development/libraries/xapian/bindings {  # TODO perl php Java, tcl, C#, python-  };--  xapian10 = callPackage ../development/libraries/xapian/1.0.x.nix { };--  xapianBindings10 = callPackage ../development/libraries/xapian/bindings/1.0.x.nix {  # TODO perl php Java, tcl, C#, python-  };--  Xaw3d = callPackage ../development/libraries/Xaw3d { };--  xbase = callPackage ../development/libraries/xbase { };--  xcb-util-cursor = callPackage ../development/libraries/xcb-util-cursor { };--  xdo = callPackage ../tools/misc/xdo { };--  xineLib = callPackage ../development/libraries/xine-lib {-    ffmpeg = ffmpeg_1;-  };--  xautolock = callPackage ../misc/screensavers/xautolock { };--  xercesc = callPackage ../development/libraries/xercesc {};--  xlibsWrapper = callPackage ../development/libraries/xlibs-wrapper {-    packages = [-      freetype fontconfig xlibs.xproto xlibs.libX11 xlibs.libXt-      xlibs.libXft xlibs.libXext xlibs.libSM xlibs.libICE-      xlibs.xextproto-    ];-  };--  xmlrpc_c = callPackage ../development/libraries/xmlrpc-c { };--  xmlsec = callPackage ../development/libraries/xmlsec { };--  xvidcore = callPackage ../development/libraries/xvidcore { };--  xylib = callPackage ../development/libraries/xylib { };--  yajl = callPackage ../development/libraries/yajl { };--  zangband = builderDefsPackage (import ../games/zangband) {-    inherit ncurses flex bison autoconf automake m4 coreutils;-  };--  zeitgeist = callPackage ../development/libraries/zeitgeist { };--  zlib = callPackage ../development/libraries/zlib {-    fetchurl = fetchurlBoot;-  };--  zlibStatic = lowPrio (appendToName "static" (callPackage ../development/libraries/zlib {-    static = true;-  }));--  zeromq2 = callPackage ../development/libraries/zeromq/2.x.nix {};-  zeromq3 = callPackage ../development/libraries/zeromq/3.x.nix {};-  zeromq4 = callPackage ../development/libraries/zeromq/4.x.nix {};--  zziplib = callPackage ../development/libraries/zziplib { };---  ### DEVELOPMENT / LIBRARIES / JAVA--  atermjava = callPackage ../development/libraries/java/aterm {-    stdenv = overrideInStdenv stdenv [gnumake380];-  };--  commonsFileUpload = callPackage ../development/libraries/java/jakarta-commons/file-upload { };--  fastjar = callPackage ../development/tools/java/fastjar { };--  httpunit = callPackage ../development/libraries/java/httpunit { };--  gwtdragdrop = callPackage ../development/libraries/java/gwt-dragdrop { };--  gwtwidgets = callPackage ../development/libraries/java/gwt-widgets { };--  jakartabcel = callPackage ../development/libraries/java/jakarta-bcel {-    regexp = jakartaregexp;-  };--  jakartaregexp = callPackage ../development/libraries/java/jakarta-regexp { };--  javaCup = callPackage ../development/libraries/java/cup { };--  javasvn = callPackage ../development/libraries/java/javasvn { };--  jclasslib = callPackage ../development/tools/java/jclasslib { };--  jdom = callPackage ../development/libraries/java/jdom { };--  jflex = callPackage ../development/libraries/java/jflex { };--  jjtraveler = callPackage ../development/libraries/java/jjtraveler {-    stdenv = overrideInStdenv stdenv [gnumake380];-  };--  junit = callPackage ../development/libraries/java/junit { antBuild = releaseTools.antBuild; };--  junixsocket = callPackage ../development/libraries/java/junixsocket { };--  jzmq = callPackage ../development/libraries/java/jzmq { };--  lucene = callPackage ../development/libraries/java/lucene { };--  mockobjects = callPackage ../development/libraries/java/mockobjects { };--  saxon = callPackage ../development/libraries/java/saxon { };--  saxonb = callPackage ../development/libraries/java/saxon/default8.nix { };--  sharedobjects = callPackage ../development/libraries/java/shared-objects {-    stdenv = overrideInStdenv stdenv [gnumake380];-  };--  smack = callPackage ../development/libraries/java/smack { };--  swt = callPackage ../development/libraries/java/swt {-    inherit (gnome) libsoup;-  };---  ### DEVELOPMENT / LIBRARIES / JAVASCRIPT--  jquery_ui = callPackage ../development/libraries/javascript/jquery-ui { };--  yuicompressor = callPackage ../development/tools/yuicompressor { };--  ### DEVELOPMENT / LISP MODULES--  asdf = callPackage ../development/lisp-modules/asdf {-    texLive = null;-  };--  clwrapperFunction = callPackage ../development/lisp-modules/clwrapper;--  wrapLisp = lisp: clwrapperFunction { inherit lisp; };--  lispPackagesFor = clwrapper: callPackage ../development/lisp-modules/lisp-packages.nix {-    inherit clwrapper;-  };--  lispPackagesClisp = lispPackagesFor (wrapLisp clisp);-  lispPackagesSBCL = lispPackagesFor (wrapLisp sbcl);-  lispPackages = recurseIntoAttrs lispPackagesSBCL;---  ### DEVELOPMENT / PERL MODULES--  buildPerlPackage = import ../development/perl-modules/generic perl;--  perlPackages = recurseIntoAttrs (import ./perl-packages.nix {-    inherit pkgs;-    overrides = (config.perlPackageOverrides or (p: {})) pkgs;-  });--  perl514Packages = import ./perl-packages.nix {-    pkgs = pkgs // {-      perl = perl514;-      buildPerlPackage = import ../development/perl-modules/generic perl514;-    };-    overrides = (config.perl514PackageOverrides or (p: {})) pkgs;-  };--  perlXMLParser = perlPackages.XMLParser;--  ack = perlPackages.ack;--  perlArchiveCpio = perlPackages.ArchiveCpio;--  perlcritic = perlPackages.PerlCritic;--  planetary_annihilation = callPackage ../games/planetaryannihilation { };---  ### DEVELOPMENT / PYTHON MODULES--  # python function with default python interpreter-  buildPythonPackage = pythonPackages.buildPythonPackage;--  # `nix-env -i python-nose` installs for 2.7, the default python.-  # Therefore we do not recurse into attributes here, in contrast to-  # python27Packages. `nix-env -iA python26Packages.nose` works-  # regardless.-  python26Packages = import ./python-packages.nix {-    inherit pkgs;-    python = python26;-  };--  python27Packages = lib.hiPrioSet (recurseIntoAttrs (import ./python-packages.nix {-    inherit pkgs;-    python = python27;-  }));--  python32Packages = import ./python-packages.nix {-    inherit pkgs;-    python = python32;-  };--  python33Packages = recurseIntoAttrs (import ./python-packages.nix {-    inherit pkgs;-    python = python33;-  });--  python34Packages = recurseIntoAttrs (import ./python-packages.nix {-    inherit pkgs;-    python = python34;-  });--  pypyPackages = recurseIntoAttrs (import ./python-packages.nix {-    inherit pkgs;-    python = pypy;-  });--  foursuite = callPackage ../development/python-modules/4suite { };--  bsddb3 = callPackage ../development/python-modules/bsddb3 { };--  ecdsa = callPackage ../development/python-modules/ecdsa { };--  numeric = callPackage ../development/python-modules/numeric { };--  pil = pythonPackages.pil;--  psyco = callPackage ../development/python-modules/psyco { };--  pycairo = pythonPackages.pycairo;--  pycapnp = pythonPackages.pycapnp;--  pycrypto = pythonPackages.pycrypto;--  pycups = callPackage ../development/python-modules/pycups { };--  pyexiv2 = callPackage ../development/python-modules/pyexiv2 { };--  pygame = callPackage ../development/python-modules/pygame { };--  pygobject = pythonPackages.pygobject;--  pygobject3 = pythonPackages.pygobject3;--  pygtk = pythonPackages.pygtk;--  pyGtkGlade = pythonPackages.pyGtkGlade;--  pylint = callPackage ../development/python-modules/pylint { };--  pyopenssl = builderDefsPackage (import ../development/python-modules/pyopenssl) {-    inherit python openssl;-  };--  rhpl = callPackage ../development/python-modules/rhpl { };--  sip = callPackage ../development/python-modules/sip { };--  pyqt4 = callPackage ../development/python-modules/pyqt/4.x.nix {-    stdenv = if stdenv.isDarwin-      then clangStdenv-      else stdenv;-  };--  pysideApiextractor = callPackage ../development/python-modules/pyside/apiextractor.nix { };--  pysideGeneratorrunner = callPackage ../development/python-modules/pyside/generatorrunner.nix { };--  pyside = callPackage ../development/python-modules/pyside { };--  pysideTools = callPackage ../development/python-modules/pyside/tools.nix { };--  pysideShiboken = callPackage ../development/python-modules/pyside/shiboken.nix { };--  pyx = callPackage ../development/python-modules/pyx { };--  pyxml = callPackage ../development/python-modules/pyxml { };--  rbtools = callPackage ../development/python-modules/rbtools { };--  setuptools = pythonPackages.setuptools;--  slowaes = callPackage ../development/python-modules/slowaes { };--  wxPython = pythonPackages.wxPython;-  wxPython28 = pythonPackages.wxPython28;--  twisted = pythonPackages.twisted;--  ZopeInterface = pythonPackages.zope_interface;--  ### DEVELOPMENT / R MODULES--  R = callPackage ../applications/science/math/R {-    inherit (xlibs) libX11 libXt;-    texLive = texLiveAggregationFun { paths = [ texLive texLiveExtra ]; };-    withRecommendedPackages = false;-  };--  rWrapper = callPackage ../development/r-modules/wrapper.nix {-    # Those packages are usually installed as part of the R build.-    recommendedPackages = with rPackages; [ MASS lattice Matrix nlme-      survival boot cluster codetools foreign KernSmooth rpart class-      nnet spatial mgcv ];-    # Override this attribute to register additional libraries.-    packages = [];-  };--  rPackages = import ../development/r-modules/cran-packages.nix {-    inherit pkgs;-    overrides = (config.rPackageOverrides or (p: {})) pkgs;-  };--  ### SERVERS--  rdf4store = callPackage ../servers/http/4store { };--  apacheHttpd = pkgs.apacheHttpd_2_2;--  apacheHttpd_2_2 = callPackage ../servers/http/apache-httpd/2.2.nix {-    sslSupport = true;-  };--  apacheHttpd_2_4 = lowPrio (callPackage ../servers/http/apache-httpd/2.4.nix {-    sslSupport = true;-  });--  apcupsd = callPackage ../servers/apcupsd { };--  sabnzbd = callPackage ../servers/sabnzbd { };--  bind = callPackage ../servers/dns/bind { };--  bird = callPackage ../servers/bird { };--  couchdb = callPackage ../servers/http/couchdb {-    spidermonkey = spidermonkey_185;-    python = python27;-    sphinx = python27Packages.sphinx;-    erlang = erlangR16;-  };--  dico = callPackage ../servers/dico { };--  dict = callPackage ../servers/dict {-      libmaa = callPackage ../servers/dict/libmaa.nix {};-  };--  dictdDBs = recurseIntoAttrs (import ../servers/dict/dictd-db.nix {-    inherit builderDefs;-  });--  dictDBCollector = import ../servers/dict/dictd-db-collector.nix {-    inherit stdenv lib dict;-  };--  dictdWiktionary = callPackage ../servers/dict/dictd-wiktionary.nix {};--  dictdWordnet = callPackage ../servers/dict/dictd-wordnet.nix {};--  diod = callPackage ../servers/diod { };--  dovecot = dovecot21;--  dovecot21 = callPackage ../servers/mail/dovecot { };--  dovecot22 = callPackage ../servers/mail/dovecot/2.2.x.nix { };--  dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole { };--  etcd = callPackage ../servers/etcd { };--  ejabberd = callPackage ../servers/xmpp/ejabberd {-    erlang = erlangR16;-  };--  elasticmq = callPackage ../servers/elasticmq { };--  etcdctl = callPackage ../development/tools/etcdctl { };--  fcgiwrap = callPackage ../servers/fcgiwrap { };--  felix = callPackage ../servers/felix { };--  felix_remoteshell = callPackage ../servers/felix/remoteshell.nix { };--  fingerd_bsd = callPackage ../servers/fingerd/bsd-fingerd { };--  firebird = callPackage ../servers/firebird { icu = null; };-  firebirdSuper = callPackage ../servers/firebird { superServer = true; };--  fleet = callPackage ../servers/fleet { };--  freepops = callPackage ../servers/mail/freepops { };--  freeswitch = callPackage ../servers/sip/freeswitch { };--  ghostOne = callPackage ../servers/games/ghost-one {-    boost = boost144.override { taggedLayout = true; };-  };--  ircdHybrid = callPackage ../servers/irc/ircd-hybrid { };--  jboss = callPackage ../servers/http/jboss { };--  jboss_mysql_jdbc = callPackage ../servers/http/jboss/jdbc/mysql { };--  jetty = callPackage ../servers/http/jetty { };--  jetty61 = callPackage ../servers/http/jetty/6.1 { };--  joseki = callPackage ../servers/http/joseki {};--  leafnode = callPackage ../servers/news/leafnode { };--  lighttpd = callPackage ../servers/http/lighttpd { };--  mailman = callPackage ../servers/mail/mailman { };--  mediatomb = callPackage ../servers/mediatomb { };--  memcached = callPackage ../servers/memcached {};--  mod_dnssd = callPackage ../servers/http/apache-modules/mod_dnssd/default.nix { };--  mod_evasive = callPackage ../servers/http/apache-modules/mod_evasive { };--  mod_python = callPackage ../servers/http/apache-modules/mod_python { };--  mod_fastcgi = callPackage ../servers/http/apache-modules/mod_fastcgi { };--  mod_wsgi = callPackage ../servers/http/apache-modules/mod_wsgi { };--  mpd = callPackage ../servers/mpd {-    aacSupport    = config.mpd.aacSupport or true;-    ffmpegSupport = config.mpd.ffmpegSupport or true;-  };--  mpd_clientlib = callPackage ../servers/mpd/clientlib.nix { };--  miniHttpd = callPackage ../servers/http/mini-httpd {};--  mlmmj = callPackage ../servers/mail/mlmmj { };--  myserver = callPackage ../servers/http/myserver { };--  nginx = callPackage ../servers/http/nginx {-    rtmp        = true;-    fullWebDAV  = true;-    syslog      = true;-    moreheaders = true;-  };--  ngircd = callPackage ../servers/irc/ngircd { };--  nix-binary-cache = callPackage ../servers/http/nix-binary-cache {};--  nsd = callPackage ../servers/dns/nsd { };--  nsq = callPackage ../servers/nsq { };--  openresty = callPackage ../servers/http/openresty { };--  opensmtpd = callPackage ../servers/mail/opensmtpd { };--  petidomo = callPackage ../servers/mail/petidomo { };--  popa3d = callPackage ../servers/mail/popa3d { };--  postfix = callPackage ../servers/mail/postfix { };--  postfix211 = callPackage ../servers/mail/postfix/2.11.nix { };--  pulseaudio = callPackage ../servers/pulseaudio {-    gconf = gnome.GConf;-    # The following are disabled in the default build, because if this-    # functionality is desired, they are only needed in the PulseAudio-    # server.-    bluez = null;-    avahi = null;-  };-  pulseaudioFull = pulseaudio.override {-    bluez = bluez5;-    avahi = avahi;-    jackaudioSupport = true;-    x11Support = true;-  };--  tomcat_connectors = callPackage ../servers/http/apache-modules/tomcat-connectors { };--  pies = callPackage ../servers/pies { };--  portmap = callPackage ../servers/portmap { };--  rpcbind = callPackage ../servers/rpcbind { };--  #monetdb = callPackage ../servers/sql/monetdb { };--  mariadb = callPackage ../servers/sql/mariadb {};--  mongodb = callPackage ../servers/nosql/mongodb { };--  riak = callPackage ../servers/nosql/riak/1.3.1.nix { };--  influxdb = callPackage ../servers/nosql/influxdb { };--  mysql51 = import ../servers/sql/mysql/5.1.x.nix {-    inherit fetchurl ncurses zlib perl openssl stdenv;-    ps = procps; /* !!! Linux only */-  };--  mysql55 = callPackage ../servers/sql/mysql/5.5.x.nix { };--  mysql = mysql51;--  mysql_jdbc = callPackage ../servers/sql/mysql/jdbc { };--  nagios = callPackage ../servers/monitoring/nagios { };--  munin = callPackage ../servers/monitoring/munin { };--  nagiosPluginsOfficial = callPackage ../servers/monitoring/nagios/plugins/official-2.x.nix { };--  neo4j = callPackage ../servers/nosql/neo4j { };--  net_snmp = callPackage ../servers/monitoring/net-snmp { };--  riemann = callPackage ../servers/monitoring/riemann { };--  oidentd = callPackage ../servers/identd/oidentd { };--  openfire = callPackage ../servers/xmpp/openfire { };--  oracleXE = callPackage ../servers/sql/oracle-xe { };--  OVMF = callPackage ../applications/virtualization/OVMF { };--  postgresql = postgresql92;--  postgresql84 = callPackage ../servers/sql/postgresql/8.4.x.nix { };--  postgresql90 = callPackage ../servers/sql/postgresql/9.0.x.nix { };--  postgresql91 = callPackage ../servers/sql/postgresql/9.1.x.nix { };--  postgresql92 = callPackage ../servers/sql/postgresql/9.2.x.nix { };--  postgresql93 = callPackage ../servers/sql/postgresql/9.3.x.nix { };--  postgresql_jdbc = callPackage ../servers/sql/postgresql/jdbc { };--  psqlodbc = callPackage ../servers/sql/postgresql/psqlodbc { };--  pyIRCt = builderDefsPackage (import ../servers/xmpp/pyIRCt) {-    inherit xmpppy pythonIRClib python makeWrapper;-  };--  pyMAILt = builderDefsPackage (import ../servers/xmpp/pyMAILt) {-    inherit xmpppy python makeWrapper fetchcvs;-  };--  qpid-cpp = callPackage ../servers/amqp/qpid-cpp { };--  rabbitmq_server = callPackage ../servers/amqp/rabbitmq-server { };--  radius = callPackage ../servers/radius { };--  redis = callPackage ../servers/nosql/redis { };--  redstore = callPackage ../servers/http/redstore { };--  restund = callPackage ../servers/restund {};--  rethinkdb = callPackage ../servers/nosql/rethinkdb { };--  rippled = callPackage ../servers/rippled { };--  s6 = callPackage ../servers/s6 { };--  spamassassin = callPackage ../servers/mail/spamassassin {-    inherit (perlPackages) HTMLParser NetDNS NetAddrIP DBFile-      HTTPDate MailDKIM LWP IOSocketSSL;-  };--  samba = callPackage ../servers/samba { };--  # A lightweight Samba, useful for non-Linux-based OSes.-  samba_light = lowPrio (callPackage ../servers/samba {-    pam = null;-    fam = null;-    cups = null;-    acl = null;-    openldap = null;-    # libunwind 1.0.1 is not ported to GNU/Hurd.-    libunwind = null;-  });--  serfdom = callPackage ../servers/serfdom { };--  seyren = callPackage ../servers/monitoring/seyren { };--  shishi = callPackage ../servers/shishi { };--  sipwitch = callPackage ../servers/sip/sipwitch { };--  spawn_fcgi = callPackage ../servers/http/spawn-fcgi { };--  squids = recurseIntoAttrs( import ../servers/squid/squids.nix {-    inherit fetchurl stdenv perl lib composableDerivation-      openldap pam db cyrus_sasl kerberos libcap expat libxml2 libtool-      openssl;-  });-  squid = squids.squid31; # has ipv6 support--  thttpd = callPackage ../servers/http/thttpd { };--  storm = callPackage ../servers/computing/storm { };--  tomcat5 = callPackage ../servers/http/tomcat/5.0.nix { };--  tomcat6 = callPackage ../servers/http/tomcat/6.0.nix { };--  tomcat_mysql_jdbc = callPackage ../servers/http/tomcat/jdbc/mysql { };--  axis2 = callPackage ../servers/http/tomcat/axis2 { };--  unifi = callPackage ../servers/unifi { };--  virtuoso6 = callPackage ../servers/sql/virtuoso/6.x.nix { };--  virtuoso7 = callPackage ../servers/sql/virtuoso/7.x.nix { };--  virtuoso = virtuoso6;--  vsftpd = callPackage ../servers/ftp/vsftpd { };--  winstone = callPackage ../servers/http/winstone { };--  xinetd = callPackage ../servers/xinetd { };--  xquartz = callPackage ../servers/x11/xquartz { };-  quartz-wm = callPackage ../servers/x11/quartz-wm { stdenv = clangStdenv; };--  xorg = recurseIntoAttrs (import ../servers/x11/xorg/default.nix {-    inherit clangStdenv fetchurl fetchgit fetchpatch stdenv pkgconfig intltool freetype fontconfig-      libxslt expat libpng zlib perl mesa_drivers spice_protocol-      dbus libuuid openssl gperf m4-      autoconf automake libtool xmlto asciidoc flex bison python mtdev pixman;-    mesa = mesa_noglu;-    udev = if stdenv.isLinux then udev else null;-    libdrm = if stdenv.isLinux then libdrm else null;-  } // {-    xf86videointel-testing = callPackage ../servers/x11/xorg/xf86-video-intel-testing.nix { };-  });--  xorgReplacements = callPackage ../servers/x11/xorg/replacements.nix { };--  xorgVideoUnichrome = callPackage ../servers/x11/xorg/unichrome/default.nix { };--  yaws = callPackage ../servers/http/yaws { };--  zabbix = recurseIntoAttrs (import ../servers/monitoring/zabbix {-    inherit fetchurl stdenv pkgconfig postgresql curl openssl zlib;-  });--  zabbix20 = callPackage ../servers/monitoring/zabbix/2.0.nix { };-  zabbix22 = callPackage ../servers/monitoring/zabbix/2.2.nix { };---  ### OS-SPECIFIC--  afuse = callPackage ../os-specific/linux/afuse { };--  amdUcode = callPackage ../os-specific/linux/microcode/amd.nix { };--  autofs5 = callPackage ../os-specific/linux/autofs/autofs-v5.nix { };--  _915resolution = callPackage ../os-specific/linux/915resolution { };--  nfsUtils = callPackage ../os-specific/linux/nfs-utils { };--  acpi = callPackage ../os-specific/linux/acpi { };--  acpid = callPackage ../os-specific/linux/acpid { };--  acpitool = callPackage ../os-specific/linux/acpitool { };--  alienfx = callPackage ../os-specific/linux/alienfx { };--  alsaLib = callPackage ../os-specific/linux/alsa-lib { };--  alsaPlugins = callPackage ../os-specific/linux/alsa-plugins {-    jack2 = null;-  };--  alsaPluginWrapper = callPackage ../os-specific/linux/alsa-plugins/wrapper.nix { };--  alsaUtils = callPackage ../os-specific/linux/alsa-utils { };-  alsaOss = callPackage ../os-specific/linux/alsa-oss { };--  microcode2ucode = callPackage ../os-specific/linux/microcode/converter.nix { };--  microcodeIntel = callPackage ../os-specific/linux/microcode/intel.nix { };--  apparmor = callPackage ../os-specific/linux/apparmor {-    inherit (perlPackages) LocaleGettext TermReadKey RpcXML;-    bison = bison2;-  };--  atop = callPackage ../os-specific/linux/atop { };--  audit = callPackage ../os-specific/linux/audit { };--  b43Firmware_5_1_138 = callPackage ../os-specific/linux/firmware/b43-firmware/5.1.138.nix { };--  b43FirmwareCutter = callPackage ../os-specific/linux/firmware/b43-firmware-cutter { };--  batctl = callPackage ../os-specific/linux/batman-adv/batctl.nix { };--  bluez4 = callPackage ../os-specific/linux/bluez {-    pygobject = pygobject3;-  };--  bluez5 = lowPrio (callPackage ../os-specific/linux/bluez/bluez5.nix { });--  bluez = bluez4;--  inherit (pythonPackages) bedup;--  beret = callPackage ../games/beret { };--  bridge_utils = callPackage ../os-specific/linux/bridge-utils { };--  busybox = callPackage ../os-specific/linux/busybox { };--  checkpolicy = callPackage ../os-specific/linux/checkpolicy { };--  checksec = callPackage ../os-specific/linux/checksec { };--  cifs_utils = callPackage ../os-specific/linux/cifs-utils { };--  conky = callPackage ../os-specific/linux/conky {-    mpdSupport   = config.conky.mpdSupport   or true;-    x11Support   = config.conky.x11Support   or false;-    xdamage      = config.conky.xdamage      or false;-    wireless     = config.conky.wireless     or false;-    luaSupport   = config.conky.luaSupport   or false;-    rss          = config.conky.rss          or false;-    weatherMetar = config.conky.weatherMetar or false;-    weatherXoap  = config.conky.weatherXoap  or false;-  };--  cpufrequtils = callPackage ../os-specific/linux/cpufrequtils { };--  cryopid = callPackage ../os-specific/linux/cryopid { };--  criu = callPackage ../os-specific/linux/criu { };--  cryptsetup = callPackage ../os-specific/linux/cryptsetup { };--  cramfsswap = callPackage ../os-specific/linux/cramfsswap { };--  darwin = rec {-    cctools = forceNativeDrv (callPackage ../os-specific/darwin/cctools-port {-      cross = assert crossSystem != null; crossSystem;-      inherit maloader;-      xctoolchain = xcode.toolchain;-    });--    maloader = callPackage ../os-specific/darwin/maloader {-      inherit opencflite;-    };--    opencflite = callPackage ../os-specific/darwin/opencflite {};--    xcode = callPackage ../os-specific/darwin/xcode {};-  };--  devicemapper = lvm2;--  disk_indicator = callPackage ../os-specific/linux/disk-indicator { };--  dmidecode = callPackage ../os-specific/linux/dmidecode { };--  dmtcp = callPackage ../os-specific/linux/dmtcp { };--  dietlibc = callPackage ../os-specific/linux/dietlibc { };--  directvnc = builderDefsPackage ../os-specific/linux/directvnc {-    inherit libjpeg pkgconfig zlib directfb;-    inherit (xlibs) xproto;-  };--  dmraid = callPackage ../os-specific/linux/dmraid { };--  drbd = callPackage ../os-specific/linux/drbd { };--  dstat = callPackage ../os-specific/linux/dstat {-    # pythonFull includes the "curses" standard library module, for pretty-    # dstat color output-    python = pythonFull;-  };--  libossp_uuid = callPackage ../development/libraries/libossp-uuid { };--  libuuid =-    if crossSystem != null && crossSystem.config == "i586-pc-gnu"-    then (utillinux // {-      crossDrv = lib.overrideDerivation utillinux.crossDrv (args: {-        # `libblkid' fails to build on GNU/Hurd.-        configureFlags = args.configureFlags-          + " --disable-libblkid --disable-mount --disable-libmount"-          + " --disable-fsck --enable-static --disable-partx";-        doCheck = false;-        CPPFLAGS =                    # ugly hack for ugly software!-          lib.concatStringsSep " "-            (map (v: "-D${v}=4096")-                 [ "PATH_MAX" "MAXPATHLEN" "MAXHOSTNAMELEN" ]);-      });-    })-    else if stdenv.isLinux-    then utillinux-    else null;--  e3cfsprogs = callPackage ../os-specific/linux/e3cfsprogs { };--  ebtables = callPackage ../os-specific/linux/ebtables { };--  eject = utillinux;--  ffado = callPackage ../os-specific/linux/ffado { };--  fbterm = callPackage ../os-specific/linux/fbterm { };--  firejail = callPackage ../os-specific/linux/firejail {};--  fuse = callPackage ../os-specific/linux/fuse { };--  fxload = callPackage ../os-specific/linux/fxload { };--  gfxtablet = callPackage ../os-specific/linux/gfxtablet {};--  gpm = callPackage ../servers/gpm { };--  gradm = callPackage ../os-specific/linux/gradm {-    flex = flex_2_5_35;-  };--  hdparm = callPackage ../os-specific/linux/hdparm { };--  hibernate = callPackage ../os-specific/linux/hibernate { };--  hostapd = callPackage ../os-specific/linux/hostapd { };--  htop =-    if stdenv.isLinux then-      callPackage ../os-specific/linux/htop { }-    else if stdenv.isDarwin then-      callPackage ../os-specific/darwin/htop { }-    else null;--  # GNU/Hurd core packages.-  gnu = recurseIntoAttrs (callPackage ../os-specific/gnu {-    inherit platform crossSystem;-  });--  hwdata = callPackage ../os-specific/linux/hwdata { };--  i7z = callPackage ../os-specific/linux/i7z { };--  ifplugd = callPackage ../os-specific/linux/ifplugd { };--  iomelt = callPackage ../os-specific/linux/iomelt { };--  iotop = callPackage ../os-specific/linux/iotop { };--  iproute = callPackage ../os-specific/linux/iproute { };--  iputils = callPackage ../os-specific/linux/iputils {-    sp = spCompat;-    inherit (perlPackages) SGMLSpm;-  };--  iptables = callPackage ../os-specific/linux/iptables { };--  iw = callPackage ../os-specific/linux/iw { };--  jujuutils = callPackage ../os-specific/linux/jujuutils { };--  kbd = callPackage ../os-specific/linux/kbd { };--  kmscon = callPackage ../os-specific/linux/kmscon { };--  latencytop = callPackage ../os-specific/linux/latencytop { };--  ldm = callPackage ../os-specific/linux/ldm { };--  libaio = callPackage ../os-specific/linux/libaio { };--  libatasmart = callPackage ../os-specific/linux/libatasmart { };--  libcgroup = callPackage ../os-specific/linux/libcgroup { };--  libnl = callPackage ../os-specific/linux/libnl { };-  libnl_3_2_19 = callPackage ../os-specific/linux/libnl/3.2.19.nix { };--  linuxConsoleTools = callPackage ../os-specific/linux/consoletools { };--  # -- Linux kernel expressions --------------------------------------------------  linuxHeaders = linuxHeaders_3_7;--  linuxHeaders24Cross = forceNativeDrv (import ../os-specific/linux/kernel-headers/2.4.nix {-    inherit stdenv fetchurl perl;-    cross = assert crossSystem != null; crossSystem;-  });--  linuxHeaders26Cross = forceNativeDrv (import ../os-specific/linux/kernel-headers/2.6.32.nix {-    inherit stdenv fetchurl perl;-    cross = assert crossSystem != null; crossSystem;-  });--  linuxHeaders_3_7 = callPackage ../os-specific/linux/kernel-headers/3.7.nix { };--  linuxHeaders_3_14 = callPackage ../os-specific/linux/kernel-headers/3.14.nix { };--  # We can choose:-  linuxHeadersCrossChooser = ver : if ver == "2.4" then linuxHeaders24Cross-    else if ver == "2.6" then linuxHeaders26Cross-    else throw "Unknown linux kernel version";--  linuxHeadersCross = assert crossSystem != null;-    linuxHeadersCrossChooser crossSystem.platform.kernelMajor;--  kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { };--  linux_3_2 = makeOverridable (import ../os-specific/linux/kernel/linux-3.2.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = [];-  };--  linux_3_2_xen = lowPrio (linux_3_2.override {-    extraConfig = ''-      XEN_DOM0 y-    '';-  });--  linux_3_4 = makeOverridable (import ../os-specific/linux/kernel/linux-3.4.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-      ];-  };--  linux_3_6_rpi = makeOverridable (import ../os-specific/linux/kernel/linux-rpi-3.6.nix) {-    inherit fetchurl stdenv perl buildLinux;-  };--  linux_3_10 = makeOverridable (import ../os-specific/linux/kernel/linux-3.10.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  linux_3_12 = makeOverridable (import ../os-specific/linux/kernel/linux-3.12.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  linux_3_14 = makeOverridable (import ../os-specific/linux/kernel/linux-3.14.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  linux_3_15 = makeOverridable (import ../os-specific/linux/kernel/linux-3.15.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  linux_3_16 = makeOverridable (import ../os-specific/linux/kernel/linux-3.16.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  linux_testing = makeOverridable (import ../os-specific/linux/kernel/linux-testing.nix) {-    inherit fetchurl stdenv perl buildLinux;-    kernelPatches = lib.optionals ((platform.kernelArch or null) == "mips")-      [ kernelPatches.mips_fpureg_emu-        kernelPatches.mips_fpu_sigill-        kernelPatches.mips_ext3_n32-      ];-  };--  /* grsec configuration--     We build several flavors of 'default' grsec kernels. These are-     built by default with Hydra. If the user selects a matching-     'default' flavor, then the pre-canned package set can be-     chosen. Typically, users will make very basic choices like-     'security' + 'server' or 'performance' + 'desktop' with-     virtualisation support. These will then be picked.--     Note: Xen guest kernels are included for e.g. NixOps deployments-     to EC2, where Xen is the Hypervisor.-  */--  grFlavors = import ../build-support/grsecurity/flavors.nix;--  mkGrsecurity = opts:-    (import ../build-support/grsecurity {-      grsecOptions = opts;-      inherit pkgs lib;-    });--  grKernel  = opts: (mkGrsecurity opts).grsecKernel;-  grPackage = opts: recurseIntoAttrs (mkGrsecurity opts).grsecPackage;--  # Stable kernels-  linux_grsec_stable_desktop    = grKernel grFlavors.linux_grsec_stable_desktop;-  linux_grsec_stable_server     = grKernel grFlavors.linux_grsec_stable_server;-  linux_grsec_stable_server_xen = grKernel grFlavors.linux_grsec_stable_server_xen;--  # Testing kernels-  linux_grsec_testing_desktop = grKernel grFlavors.linux_grsec_testing_desktop;-  linux_grsec_testing_server  = grKernel grFlavors.linux_grsec_testing_server;-  linux_grsec_testing_server_xen = grKernel grFlavors.linux_grsec_testing_server_xen;--  /* Linux kernel modules are inherently tied to a specific kernel.  So-     rather than provide specific instances of those packages for a-     specific kernel, we have a function that builds those packages-     for a specific kernel.  This function can then be called for-     whatever kernel you're using. */--  linuxPackagesFor = kernel: self: let callPackage = newScope self; in {-    inherit kernel;--    acpi_call = callPackage ../os-specific/linux/acpi-call {};--    batman_adv = callPackage ../os-specific/linux/batman-adv {};--    bbswitch = callPackage ../os-specific/linux/bbswitch {};--    ati_drivers_x11 = callPackage ../os-specific/linux/ati-drivers { };--    blcr = callPackage ../os-specific/linux/blcr { };--    cryptodev = callPackage ../os-specific/linux/cryptodev { };--    cpupower = callPackage ../os-specific/linux/cpupower { };--    e1000e = callPackage ../os-specific/linux/e1000e {};--    v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { };--    frandom = callPackage ../os-specific/linux/frandom { };--    ktap = callPackage ../os-specific/linux/ktap { };--    lttng-modules = callPackage ../os-specific/linux/lttng-modules { };--    broadcom_sta = callPackage ../os-specific/linux/broadcom-sta/default.nix { };--    nvidiabl = callPackage ../os-specific/linux/nvidiabl { };--    nvidia_x11 = callPackage ../os-specific/linux/nvidia-x11 { };--    nvidia_x11_legacy173 = callPackage ../os-specific/linux/nvidia-x11/legacy173.nix { };-    nvidia_x11_legacy304 = callPackage ../os-specific/linux/nvidia-x11/legacy304.nix { };--    openafsClient = callPackage ../servers/openafs-client { };--    openiscsi = callPackage ../os-specific/linux/open-iscsi { };--    wis_go7007 = callPackage ../os-specific/linux/wis-go7007 { };--    kernelHeaders = callPackage ../os-specific/linux/kernel-headers { };--    klibc = callPackage ../os-specific/linux/klibc { };--    klibcShrunk = lowPrio (callPackage ../os-specific/linux/klibc/shrunk.nix { });---    /* compiles but has to be integrated into the kernel somehow-       Let's have it uncommented and finish it..-    */-    ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { };--    netatop = callPackage ../os-specific/linux/netatop { };--    perf = callPackage ../os-specific/linux/kernel/perf.nix { };--    psmouse_alps = callPackage ../os-specific/linux/psmouse-alps { };--    spl = callPackage ../os-specific/linux/spl { };-    spl_git = callPackage ../os-specific/linux/spl/git.nix { };--    sysdig = callPackage ../os-specific/linux/sysdig {};--    tp_smapi = callPackage ../os-specific/linux/tp_smapi { };--    v86d = callPackage ../os-specific/linux/v86d { };--    virtualbox = callPackage ../applications/virtualization/virtualbox {-      stdenv = stdenv_32bit;-      inherit (gnome) libIDL;-      enableExtensionPack = config.virtualbox.enableExtensionPack or false;-    };--    virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { };--    zfs = callPackage ../os-specific/linux/zfs { };-    zfs_git = callPackage ../os-specific/linux/zfs/git.nix { };-  };--  # The current default kernel / kernel modules.-  linux = linuxPackages.kernel;-  linuxPackages = linuxPackages_3_12;--  # Update this when adding the newest kernel major version!-  linux_latest = pkgs.linux_3_16;-  linuxPackages_latest = pkgs.linuxPackages_3_16;--  # Build the kernel modules for the some of the kernels.-  linuxPackages_3_2 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_2 linuxPackages_3_2);-  linuxPackages_3_2_xen = linuxPackagesFor pkgs.linux_3_2_xen linuxPackages_3_2_xen;-  linuxPackages_3_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_4 linuxPackages_3_4);-  linuxPackages_3_6_rpi = linuxPackagesFor pkgs.linux_3_6_rpi linuxPackages_3_6_rpi;-  linuxPackages_3_10 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_10 linuxPackages_3_10);-  linuxPackages_3_10_tuxonice = linuxPackagesFor pkgs.linux_3_10_tuxonice linuxPackages_3_10_tuxonice;-  linuxPackages_3_12 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_12 linuxPackages_3_12);-  linuxPackages_3_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_14 linuxPackages_3_14);-  linuxPackages_3_15 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_15 linuxPackages_3_15);-  linuxPackages_3_16 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_3_16 linuxPackages_3_16);-  linuxPackages_testing = recurseIntoAttrs (linuxPackagesFor pkgs.linux_testing linuxPackages_testing);--  # grsecurity flavors-  # Stable kernels-  linuxPackages_grsec_stable_desktop    = grPackage grFlavors.linux_grsec_stable_desktop;-  linuxPackages_grsec_stable_server     = grPackage grFlavors.linux_grsec_stable_server;-  linuxPackages_grsec_stable_server_xen = grPackage grFlavors.linux_grsec_stable_server_xen;--  # Testing kernels-  linuxPackages_grsec_testing_desktop = grPackage grFlavors.linux_grsec_testing_desktop;-  linuxPackages_grsec_testing_server  = grPackage grFlavors.linux_grsec_testing_server;-  linuxPackages_grsec_testing_server_xen = grPackage grFlavors.linux_grsec_testing_server_xen;--  # A function to build a manually-configured kernel-  linuxManualConfig = pkgs.buildLinux;-  buildLinux = import ../os-specific/linux/kernel/manual-config.nix {-    inherit (pkgs) stdenv runCommand nettools bc perl kmod writeTextFile ubootChooser;-  };--  keyutils = callPackage ../os-specific/linux/keyutils { };--  libselinux = callPackage ../os-specific/linux/libselinux { };--  libsemanage = callPackage ../os-specific/linux/libsemanage { };--  libraw = callPackage ../development/libraries/libraw { };--  libraw1394 = callPackage ../development/libraries/libraw1394 { };--  libsexy = callPackage ../development/libraries/libsexy { };--  libsepol = callPackage ../os-specific/linux/libsepol { };--  libsmbios = callPackage ../os-specific/linux/libsmbios { };--  lm_sensors = callPackage ../os-specific/linux/lm-sensors { };--  lockdep = callPackage ../os-specific/linux/lockdep { };--  lsiutil = callPackage ../os-specific/linux/lsiutil { };--  kmod = callPackage ../os-specific/linux/kmod { };--  kmod-blacklist-ubuntu = callPackage ../os-specific/linux/kmod-blacklist-ubuntu { };--  kvm = qemu_kvm;--  libcap = callPackage ../os-specific/linux/libcap { };--  libcap_progs = callPackage ../os-specific/linux/libcap/progs.nix { };--  libcap_pam = callPackage ../os-specific/linux/libcap/pam.nix { };--  libcap_manpages = callPackage ../os-specific/linux/libcap/man.nix { };--  libcap_ng = callPackage ../os-specific/linux/libcap-ng { };--  libnscd = callPackage ../os-specific/linux/libnscd { };--  libnotify = callPackage ../development/libraries/libnotify { };--  libvolume_id = callPackage ../os-specific/linux/libvolume_id { };--  lsscsi = callPackage ../os-specific/linux/lsscsi { };--  lvm2 = callPackage ../os-specific/linux/lvm2 { };--  mdadm = callPackage ../os-specific/linux/mdadm { };--  mingetty = callPackage ../os-specific/linux/mingetty { };--  module_init_tools = callPackage ../os-specific/linux/module-init-tools { };--  aggregateModules = modules:-    callPackage ../os-specific/linux/kmod/aggregator.nix {-      inherit modules;-    };--  multipath_tools = callPackage ../os-specific/linux/multipath-tools { };--  musl = callPackage ../os-specific/linux/musl { };--  nettools = callPackage ../os-specific/linux/net-tools { };--  neverball = callPackage ../games/neverball {-    libpng = libpng15;-  };--  nftables = callPackage ../os-specific/linux/nftables { };--  numactl = callPackage ../os-specific/linux/numactl { };--  gocode = callPackage ../development/tools/gocode { };--  gogoclient = callPackage ../os-specific/linux/gogoclient { };--  nss_ldap = callPackage ../os-specific/linux/nss_ldap { };--  pam = callPackage ../os-specific/linux/pam { };--  # pam_bioapi ( see http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader )--  pam_ccreds = callPackage ../os-specific/linux/pam_ccreds { };--  pam_console = callPackage ../os-specific/linux/pam_console {-    libtool = libtool_1_5;-  };--  pam_devperm = callPackage ../os-specific/linux/pam_devperm { };--  pam_krb5 = callPackage ../os-specific/linux/pam_krb5 { };--  pam_ldap = callPackage ../os-specific/linux/pam_ldap { };--  pam_login = callPackage ../os-specific/linux/pam_login { };--  pam_ssh_agent_auth = callPackage ../os-specific/linux/pam_ssh_agent_auth { };--  pam_usb = callPackage ../os-specific/linux/pam_usb { };--  paxctl = callPackage ../os-specific/linux/paxctl { };--  pax-utils = callPackage ../os-specific/linux/pax-utils { };--  pcmciaUtils = callPackage ../os-specific/linux/pcmciautils {-    firmware = config.pcmciaUtils.firmware or [];-    config = config.pcmciaUtils.config or null;-  };--  plymouth = callPackage ../os-specific/linux/plymouth {-    automake = automake113x;-  };--  pmount = callPackage ../os-specific/linux/pmount { };--  pmutils = callPackage ../os-specific/linux/pm-utils { };--  pmtools = callPackage ../os-specific/linux/pmtools { };--  policycoreutils = callPackage ../os-specific/linux/policycoreutils { };--  powertop = callPackage ../os-specific/linux/powertop { };--  prayer = callPackage ../servers/prayer { };--  procps = procps-ng;--  procps-old = lowPrio (callPackage ../os-specific/linux/procps { });--  procps-ng = callPackage ../os-specific/linux/procps-ng { };--  watch = callPackage ../os-specific/linux/procps/watch.nix { };--  qemu_kvm = lowPrio (qemu.override { x86Only = true; });--  firmwareLinuxNonfree = callPackage ../os-specific/linux/firmware/firmware-linux-nonfree { };--  radeontools = callPackage ../os-specific/linux/radeontools { };--  raspberrypifw = callPackage ../os-specific/linux/firmware/raspberrypi {};--  regionset = callPackage ../os-specific/linux/regionset { };--  rfkill = callPackage ../os-specific/linux/rfkill { };--  rfkill_udev = callPackage ../os-specific/linux/rfkill/udev.nix { };--  rtkit = callPackage ../os-specific/linux/rtkit { };--  sdparm = callPackage ../os-specific/linux/sdparm { };--  sepolgen = callPackage ../os-specific/linux/sepolgen { };--  setools = callPackage ../os-specific/linux/setools { };--  shadow = callPackage ../os-specific/linux/shadow { };--  statifier = builderDefsPackage (import ../os-specific/linux/statifier) { };--  sysdig = callPackage ../os-specific/linux/sysdig {-    kernel = null;-  }; # pkgs.sysdig is a client, for a driver look at linuxPackagesFor--  sysfsutils = callPackage ../os-specific/linux/sysfsutils { };--  sysprof = callPackage ../development/tools/profiling/sysprof {-    inherit (gnome) libglade;-  };--  # Provided with sysfsutils.-  libsysfs = sysfsutils;-  systool = sysfsutils;--  sysklogd = callPackage ../os-specific/linux/sysklogd { };--  syslinux = callPackage ../os-specific/linux/syslinux { };--  sysstat = callPackage ../os-specific/linux/sysstat { };--  systemd = callPackage ../os-specific/linux/systemd {-    linuxHeaders = linuxHeaders_3_14;-  };--  systemtap = callPackage ../development/tools/profiling/systemtap {-    inherit (gnome) libglademm;-  };--  # In nixos, you can set systemd.package = pkgs.systemd_with_lvm2 to get-  # LVM2 working in systemd.-  systemd_with_lvm2 = pkgs.lib.overrideDerivation pkgs.systemd (p: {-      name = p.name + "-with-lvm2";-      postInstall = p.postInstall + ''-        cp "${pkgs.lvm2}/lib/systemd/system-generators/"* $out/lib/systemd/system-generators-      '';-  });--  sysvinit = callPackage ../os-specific/linux/sysvinit { };--  sysvtools = callPackage ../os-specific/linux/sysvinit {-    withoutInitTools = true;-  };--  # FIXME: `tcp-wrapper' is actually not OS-specific.-  tcp_wrappers = callPackage ../os-specific/linux/tcp-wrappers { };--  trackballs = callPackage ../games/trackballs {-    debug = false;-    guile = guile_1_8;-  };--  tunctl = callPackage ../os-specific/linux/tunctl { };--  ubootChooser = name : if name == "upstream" then ubootUpstream-    else if name == "sheevaplug" then ubootSheevaplug-    else if name == "guruplug" then ubootGuruplug-    else if name == "nanonote" then ubootNanonote-    else throw "Unknown uboot";--  ubootUpstream = callPackage ../misc/uboot { };--  ubootSheevaplug = callPackage ../misc/uboot/sheevaplug.nix { };--  ubootNanonote = callPackage ../misc/uboot/nanonote.nix { };--  ubootGuruplug = callPackage ../misc/uboot/guruplug.nix { };--  uclibc = callPackage ../os-specific/linux/uclibc { };--  uclibcCross = lowPrio (callPackage ../os-specific/linux/uclibc {-    inherit fetchurl stdenv libiconv;-    linuxHeaders = linuxHeadersCross;-    gccCross = gccCrossStageStatic;-    cross = assert crossSystem != null; crossSystem;-  });--  udev145 = callPackage ../os-specific/linux/udev/145.nix { };-  udev = pkgs.systemd;--  udisks1 = callPackage ../os-specific/linux/udisks/1-default.nix { };-  udisks2 = callPackage ../os-specific/linux/udisks/2-default.nix { };-  udisks = udisks1;--  udisks_glue = callPackage ../os-specific/linux/udisks-glue { };--  untie = callPackage ../os-specific/linux/untie { };--  upower = callPackage ../os-specific/linux/upower { };--  upower_99 = callPackage ../os-specific/linux/upower/0.99.nix { };--  upstart = callPackage ../os-specific/linux/upstart { };--  usbutils = callPackage ../os-specific/linux/usbutils { };--  usermount = callPackage ../os-specific/linux/usermount { };--  utillinux = lowPrio (callPackage ../os-specific/linux/util-linux {-    ncurses = null;-    perl = null;-  });--  utillinuxCurses = utillinux.override {-    inherit ncurses perl;-  };--  v4l_utils = callPackage ../os-specific/linux/v4l-utils {-    withQt4 = true;-  };--  windows = rec {-    cygwinSetup = callPackage ../os-specific/windows/cygwin-setup { };--    jom = callPackage ../os-specific/windows/jom { };--    w32api = callPackage ../os-specific/windows/w32api {-      gccCross = gccCrossStageStatic;-      binutilsCross = binutilsCross;-    };--    w32api_headers = w32api.override {-      onlyHeaders = true;-    };--    mingw_runtime = callPackage ../os-specific/windows/mingwrt {-      gccCross = gccCrossMingw2;-      binutilsCross = binutilsCross;-    };--    mingw_runtime_headers = mingw_runtime.override {-      onlyHeaders = true;-    };--    mingw_headers1 = buildEnv {-      name = "mingw-headers-1";-      paths = [ w32api_headers mingw_runtime_headers ];-    };--    mingw_headers2 = buildEnv {-      name = "mingw-headers-2";-      paths = [ w32api mingw_runtime_headers ];-    };--    mingw_headers3 = buildEnv {-      name = "mingw-headers-3";-      paths = [ w32api mingw_runtime ];-    };--    mingw_w64 = callPackage ../os-specific/windows/mingw-w64 {-      gccCross = gccCrossStageStatic;-      binutilsCross = binutilsCross;-    };--    mingw_w64_headers = callPackage ../os-specific/windows/mingw-w64 {-      onlyHeaders = true;-    };--    mingw_w64_pthreads = callPackage ../os-specific/windows/mingw-w64 {-      onlyPthreads = true;-    };--    pthreads = callPackage ../os-specific/windows/pthread-w32 {-      mingw_headers = mingw_headers3;-    };--    wxMSW = callPackage ../os-specific/windows/wxMSW-2.8 { };-  };--  wesnoth = callPackage ../games/wesnoth {-    lua = lua5;-  };--  wirelesstools = callPackage ../os-specific/linux/wireless-tools { };--  wpa_supplicant = callPackage ../os-specific/linux/wpa_supplicant { };--  wpa_supplicant_gui = callPackage ../os-specific/linux/wpa_supplicant/gui.nix { };--  xf86_input_mtrack = callPackage ../os-specific/linux/xf86-input-mtrack {-    inherit (xorg) utilmacros xproto inputproto xorgserver;-  };--  xf86_input_multitouch =-    callPackage ../os-specific/linux/xf86-input-multitouch { };--  xf86_input_wacom = callPackage ../os-specific/linux/xf86-input-wacom { };--  xf86_video_nested = callPackage ../os-specific/linux/xf86-video-nested {-    inherit (xorg) fontsproto renderproto utilmacros xorgserver;-  };--  xf86_video_nouveau = xorg.xf86videonouveau;--  xmoto = builderDefsPackage (import ../games/xmoto) {-    inherit chipmunk sqlite curl zlib bzip2 libjpeg libpng-      freeglut mesa SDL SDL_mixer SDL_image SDL_net SDL_ttf-      lua5 ode libxdg_basedir libxml2;-  };--  xorg_sys_opengl = callPackage ../os-specific/linux/opengl/xorg-sys { };--  zd1211fw = callPackage ../os-specific/linux/firmware/zd1211 { };---  ### DATA--  andagii = callPackage ../data/fonts/andagii {};--  anonymousPro = callPackage ../data/fonts/anonymous-pro {};--  arkpandora_ttf = builderDefsPackage (import ../data/fonts/arkpandora) { };--  aurulent-sans = callPackage ../data/fonts/aurulent-sans { };--  bakoma_ttf = callPackage ../data/fonts/bakoma-ttf { };--  cacert = callPackage ../data/misc/cacert { };--  cantarell_fonts = callPackage ../data/fonts/cantarell-fonts { };--  corefonts = callPackage ../data/fonts/corefonts { };--  wrapFonts = paths : ((import ../data/fonts/fontWrap) {-    inherit fetchurl stdenv builderDefs paths;-    inherit (xorg) mkfontdir mkfontscale;-  });--  clearlyU = callPackage ../data/fonts/clearlyU { };--  cm_unicode = callPackage ../data/fonts/cm-unicode {};--  dejavu_fonts = callPackage ../data/fonts/dejavu-fonts {-    inherit (perlPackages) FontTTF;-  };--  docbook5 = callPackage ../data/sgml+xml/schemas/docbook-5.0 { };--  docbook_sgml_dtd_31 = callPackage ../data/sgml+xml/schemas/sgml-dtd/docbook/3.1.nix { };--  docbook_sgml_dtd_41 = callPackage ../data/sgml+xml/schemas/sgml-dtd/docbook/4.1.nix { };--  docbook_xml_dtd_412 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.1.2.nix { };--  docbook_xml_dtd_42 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.2.nix { };--  docbook_xml_dtd_43 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.3.nix { };--  docbook_xml_dtd_45 = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook/4.5.nix { };--  docbook_xml_ebnf_dtd = callPackage ../data/sgml+xml/schemas/xml-dtd/docbook-ebnf { };--  docbook_xml_xslt = docbook_xsl;--  docbook_xsl = callPackage ../data/sgml+xml/stylesheets/xslt/docbook-xsl { };--  docbook5_xsl = docbook_xsl_ns;--  docbook_xsl_ns = callPackage ../data/sgml+xml/stylesheets/xslt/docbook-xsl-ns { };--  dosemu_fonts = callPackage ../data/fonts/dosemu-fonts { };--  eb-garamond = callPackage ../data/fonts/eb-garamond { };--  fira = callPackage ../data/fonts/fira { };--  freefont_ttf = callPackage ../data/fonts/freefont-ttf { };--  freepats = callPackage ../data/misc/freepats { };--  gentium = callPackage ../data/fonts/gentium {};--  gnome_user_docs = callPackage ../data/documentation/gnome-user-docs { };--  inherit (gnome3) gsettings_desktop_schemas;--  hicolor_icon_theme = callPackage ../data/icons/hicolor-icon-theme { };--  inconsolata = callPackage ../data/fonts/inconsolata {};--  ipafont = callPackage ../data/fonts/ipafont {};--  junicode = callPackage ../data/fonts/junicode { };--  kochi-substitute = callPackage ../data/fonts/kochi-substitute {};--  kochi-substitute-naga10 = callPackage ../data/fonts/kochi-substitute-naga10 {};--  liberation_ttf = callPackage ../data/fonts/redhat-liberation-fonts { };--  libertine = builderDefsPackage (import ../data/fonts/libertine) {-    inherit fetchurl fontforge lib;-  };--  lmmath = callPackage ../data/fonts/lmodern/lmmath.nix {};--  lmodern = callPackage ../data/fonts/lmodern { };--  lohit-fonts = callPackage ../data/fonts/lohit-fonts { };--  manpages = callPackage ../data/documentation/man-pages { };--  miscfiles = callPackage ../data/misc/miscfiles { };--  mobile_broadband_provider_info = callPackage ../data/misc/mobile-broadband-provider-info { };--  mph_2b_damase = callPackage ../data/fonts/mph-2b-damase { };--  nafees = callPackage ../data/fonts/nafees { };--  oldstandard = callPackage ../data/fonts/oldstandard { };--  opensans-ttf = callPackage ../data/fonts/opensans-ttf { };--  poly = callPackage ../data/fonts/poly { };--  posix_man_pages = callPackage ../data/documentation/man-pages-posix { };--  pthreadmanpages = callPackage ../data/documentation/pthread-man-pages { };--  shared_mime_info = callPackage ../data/misc/shared-mime-info { };--  shared_desktop_ontologies = callPackage ../data/misc/shared-desktop-ontologies { };--  stdmanpages = callPackage ../data/documentation/std-man-pages { };--  symbola = callPackage ../data/fonts/symbola { };--  iana_etc = callPackage ../data/misc/iana-etc { };--  poppler_data = callPackage ../data/misc/poppler-data { };--  r3rs = callPackage ../data/documentation/rnrs/r3rs.nix { };--  r4rs = callPackage ../data/documentation/rnrs/r4rs.nix { };--  r5rs = callPackage ../data/documentation/rnrs/r5rs.nix { };--  source-code-pro = callPackage ../data/fonts/source-code-pro {};--  source-sans-pro = callPackage ../data/fonts/source-sans-pro { };--  source-serif-pro = callPackage ../data/fonts/source-serif-pro { };--  source-han-sans-japanese = callPackage ../data/fonts/source-han-sans/japanese.nix {};-  source-han-sans-korean = callPackage ../data/fonts/source-han-sans/korean.nix {};-  source-han-sans-simplified-chinese = callPackage ../data/fonts/source-han-sans/simplified-chinese.nix {};-  source-han-sans-traditional-chinese = callPackage ../data/fonts/source-han-sans/traditional-chinese.nix {};--  tango-icon-theme = callPackage ../data/icons/tango-icon-theme { };--  themes = name: import (../data/misc/themes + ("/" + name + ".nix")) {-    inherit fetchurl;-  };--  theano = callPackage ../data/fonts/theano { };--  tempora_lgc = callPackage ../data/fonts/tempora-lgc { };--  terminus_font = callPackage ../data/fonts/terminus-font { };--  tipa = callPackage ../data/fonts/tipa { };--  ttf_bitstream_vera = callPackage ../data/fonts/ttf-bitstream-vera { };--  tzdata = callPackage ../data/misc/tzdata { };--  ubuntu_font_family = callPackage ../data/fonts/ubuntu-font-family { };--  ucsFonts = callPackage ../data/fonts/ucs-fonts { };--  unifont = callPackage ../data/fonts/unifont { };--  vistafonts = callPackage ../data/fonts/vista-fonts { };--  wqy_microhei = callPackage ../data/fonts/wqy-microhei { };--  wqy_zenhei = callPackage ../data/fonts/wqy-zenhei { };--  xhtml1 = callPackage ../data/sgml+xml/schemas/xml-dtd/xhtml1 { };--  xkeyboard_config = xorg.xkeyboardconfig;---  ### APPLICATIONS--  a2jmidid = callPackage ../applications/audio/a2jmidid { };--  aangifte2006 = callPackage_i686 ../applications/taxes/aangifte-2006 { };--  aangifte2007 = callPackage_i686 ../applications/taxes/aangifte-2007 { };--  aangifte2008 = callPackage_i686 ../applications/taxes/aangifte-2008 { };--  aangifte2009 = callPackage_i686 ../applications/taxes/aangifte-2009 { };--  aangifte2010 = callPackage_i686 ../applications/taxes/aangifte-2010 { };--  aangifte2011 = callPackage_i686 ../applications/taxes/aangifte-2011 { };--  aangifte2012 = callPackage_i686 ../applications/taxes/aangifte-2012 { };--  aangifte2013 = callPackage_i686 ../applications/taxes/aangifte-2013 { };--  abcde = callPackage ../applications/audio/abcde {-    inherit (perlPackages) DigestSHA MusicBrainz MusicBrainzDiscID;-    libcdio = libcdio082;-  };--  abiword = callPackage ../applications/office/abiword {-    inherit (gnome) libglade libgnomecanvas;-  };--  abook = callPackage ../applications/misc/abook { };--  adobe-reader = callPackage_i686 ../applications/misc/adobe-reader { };--  aewan = callPackage ../applications/editors/aewan { };--  alchemy = callPackage ../applications/graphics/alchemy { };--  ams-lv2 = callPackage ../applications/audio/ams-lv2 { };--  amsn = callPackage ../applications/networking/instant-messengers/amsn { };--  antiword = callPackage ../applications/office/antiword {};--  ardour = ardour3;--  ardour3 =  lowPrio (callPackage ../applications/audio/ardour {-    inherit (gnome) libgnomecanvas libgnomecanvasmm;-  });--  arora = callPackage ../applications/networking/browsers/arora { };--  atom = callPackage ../applications/editors/atom {-    gconf = gnome.GConf;-  };--  aseprite = callPackage ../applications/editors/aseprite {-    giflib = giflib_4_1;-  };--  audacious = callPackage ../applications/audio/audacious { };--  audacity = callPackage ../applications/audio/audacity {-    ffmpeg = ffmpeg_0_10;-  };--  milkytracker = callPackage ../applications/audio/milkytracker { };--  aumix = callPackage ../applications/audio/aumix {-    gtkGUI = false;-  };--  autopanosiftc = callPackage ../applications/graphics/autopanosiftc { };--  avidemux = callPackage ../applications/video/avidemux { };--  avogadro = callPackage ../applications/science/chemistry/avogadro {-    eigen = eigen2;-  };--  avrdudess = callPackage ../applications/misc/avrdudess { };--  avxsynth = callPackage ../applications/video/avxsynth { };--  awesome-3-4 = callPackage ../applications/window-managers/awesome/3.4.nix {-    lua = lua5;-    cairo = cairo.override { xcbSupport = true; };-  };-  awesome-3-5 = callPackage ../applications/window-managers/awesome {-    lua   = lua5_1;-    cairo = cairo.override { xcbSupport = true; };-  };-  awesome = awesome-3-5;--  inherit (gnome3) baobab;--  bar = callPackage ../applications/window-managers/bar { };--  baresip = callPackage ../applications/networking/instant-messengers/baresip {-    ffmpeg = ffmpeg_1;-  };--  batik = callPackage ../applications/graphics/batik { };--  bazaar = callPackage ../applications/version-management/bazaar { };--  bazaarTools = builderDefsPackage (import ../applications/version-management/bazaar/tools.nix) {-    inherit bazaar;-  };--  beast = callPackage ../applications/audio/beast {-    inherit (gnome) libgnomecanvas libart_lgpl;-    guile = guile_1_8;-  };--  bibletime = callPackage ../applications/misc/bibletime { };--  bitcoin = callPackage ../applications/misc/bitcoin { };--  bitlbee = callPackage ../applications/networking/instant-messengers/bitlbee {-    gnutls = gnutls;-    libotr = libotr_3_2;-  };--  blender = callPackage  ../applications/misc/blender {-    python = python34;-  };--  bristol = callPackage ../applications/audio/bristol { };--  bspwm = callPackage ../applications/window-managers/bspwm { };--  bvi = callPackage ../applications/editors/bvi { };--  calf = callPackage ../applications/audio/calf {-      inherit (gnome) libglade;-  };--  calibre = callPackage ../applications/misc/calibre {-    inherit (pythonPackages) pyqt5 sip_4_16;-  };--  camlistore = callPackage ../applications/misc/camlistore { };--  carrier = builderDefsPackage (import ../applications/networking/instant-messengers/carrier/2.5.0.nix) {-    inherit fetchurl stdenv pkgconfig perl perlXMLParser libxml2 openssl nss-      gtkspell aspell gettext ncurses avahi dbus dbus_glib python-      libtool automake autoconf gstreamer;-    inherit gtk glib;-    inherit (gnome) startupnotification GConf ;-    inherit (xlibs) libXScrnSaver scrnsaverproto libX11 xproto kbproto;-  };-  funpidgin = carrier;--  cc1394 = callPackage ../applications/video/cc1394 { };--  cddiscid = callPackage ../applications/audio/cd-discid { };--  cdparanoia = cdparanoiaIII;--  cdparanoiaIII = callPackage ../applications/audio/cdparanoia { };--  cdrtools = callPackage ../applications/misc/cdrtools { };--  centerim = callPackage ../applications/networking/instant-messengers/centerim { };--  cgit = callPackage ../applications/version-management/git-and-tools/cgit { };--  cgminer = callPackage ../applications/misc/cgminer {-    amdappsdk = amdappsdk28;-  };--  chatzilla = callPackage ../applications/networking/irc/chatzilla { };--  chromium = lowPrio (callPackage ../applications/networking/browsers/chromium {-    channel = "stable";-    pulseSupport = config.pulseaudio or true;-    enablePepperFlash = config.chromium.enablePepperFlash or false;-    enablePepperPDF = config.chromium.enablePepperPDF or false;-  });--  chromiumBeta = lowPrio (chromium.override { channel = "beta"; });-  chromiumBetaWrapper = lowPrio (wrapChromium chromiumBeta);--  chromiumDev = lowPrio (chromium.override { channel = "dev"; });-  chromiumDevWrapper = lowPrio (wrapChromium chromiumDev);--  chromiumWrapper = wrapChromium chromium;--  cinelerra = callPackage ../applications/video/cinelerra { };--  clipit = callPackage ../applications/misc/clipit { };--  cmus = callPackage ../applications/audio/cmus { };--  compiz = callPackage ../applications/window-managers/compiz {-    inherit (gnome) GConf ORBit2 metacity;-    boost = boost149; # https://bugs.launchpad.net/compiz/+bug/1131864-  };--  coriander = callPackage ../applications/video/coriander {-    inherit (gnome) libgnomeui GConf;-  };--  csound = callPackage ../applications/audio/csound { };--  cinepaint = callPackage ../applications/graphics/cinepaint {-    fltk = fltk13;-    libpng = libpng12;-  };--  codeblocks = callPackage ../applications/editors/codeblocks { };-  codeblocksFull = callPackage ../applications/editors/codeblocks { contribPlugins = true; };--  codeville = builderDefsPackage (import ../applications/version-management/codeville/0.8.0.nix) {-    inherit makeWrapper;-    python = pythonFull;-  };--  comical = callPackage ../applications/graphics/comical { };--  conkeror = callPackage ../applications/networking/browsers/conkeror { };--  conkerorWrapper = wrapFirefox {-    browser = conkeror;-    browserName = "conkeror";-    desktopName = "Conkeror";-  };--  cuneiform = builderDefsPackage (import ../tools/graphics/cuneiform) {-    inherit cmake patchelf;-    imagemagick = imagemagick;-  };--  cvs = callPackage ../applications/version-management/cvs { };--  cvsps = callPackage ../applications/version-management/cvsps { };--  cvs2svn = callPackage ../applications/version-management/cvs2svn { };--  d4x = callPackage ../applications/misc/d4x { };--  darcs = with haskellPackages_ghc783; callPackage ../applications/version-management/darcs {-    cabal = cabal.override {-      extension = self : super : {-        isLibrary = false;-        configureFlags = "-f-library " + super.configureFlags or "";-      };-    };-  };--  darktable = callPackage ../applications/graphics/darktable {-    inherit (gnome) GConf libglade;-  };--  dd-agent = callPackage ../tools/networking/dd-agent { inherit (pythonPackages) tornado; };--  dia = callPackage ../applications/graphics/dia {-    inherit (pkgs.gnome) libart_lgpl libgnomeui;-  };--  diffuse = callPackage ../applications/version-management/diffuse { };--  distrho = callPackage ../applications/audio/distrho {};--  djvulibre = callPackage ../applications/misc/djvulibre { };--  djvu2pdf = callPackage ../tools/typesetting/djvu2pdf { };--  djview = callPackage ../applications/graphics/djview { };-  djview4 = pkgs.djview;--  dmenu = callPackage ../applications/misc/dmenu {-    enableXft = config.dmenu.enableXft or false;-  };--  dmtx = builderDefsPackage (import ../tools/graphics/dmtx) {-    inherit libpng libtiff libjpeg imagemagick librsvg-      pkgconfig bzip2 zlib libtool freetype fontconfig-      ghostscript jasper xz;-    inherit (xlibs) libX11;-  };--  docker = callPackage ../applications/virtualization/docker { };--  doodle = callPackage ../applications/search/doodle { };--  dunst = callPackage ../applications/misc/dunst { };--  dvb_apps  = callPackage ../applications/video/dvb-apps { };--  dvdauthor = callPackage ../applications/video/dvdauthor { };--  dwb = callPackage ../applications/networking/browsers/dwb { dconf = gnome3.dconf; };--  dwbWrapper = wrapFirefox-    { browser = dwb; browserName = "dwb"; desktopName = "dwb";-    };--  dwm = callPackage ../applications/window-managers/dwm {-    patches = config.dwm.patches or [];-  };--  dzen2 = callPackage ../applications/window-managers/dzen2 { };--  eaglemode = callPackage ../applications/misc/eaglemode { };--  eclipses = recurseIntoAttrs (callPackage ../applications/editors/eclipse { });--  ed = callPackage ../applications/editors/ed { };--  ekho = callPackage ../applications/audio/ekho { };--  electrum = callPackage ../applications/misc/electrum { };--  elinks = callPackage ../applications/networking/browsers/elinks { };--  elvis = callPackage ../applications/editors/elvis { };--  emacs = emacs24;--  emacs24 = callPackage ../applications/editors/emacs-24 {-    # use override to enable additional features-    libXaw = xlibs.libXaw;-    Xaw3d = null;-    gconf = null;-    librsvg = null;-    alsaLib = null;-    imagemagick = null;-  };--  emacs24-nox = lowPrio (appendToName "nox" (emacs24.override {-    withX = false;-  }));--  emacs24Macport = lowPrio (callPackage ../applications/editors/emacs-24/macport.nix {-    stdenv = pkgs.clangStdenv;-  });--  emacsPackages = emacs: self: let callPackage = newScope self; in rec {-    inherit emacs;--    autoComplete = callPackage ../applications/editors/emacs-modes/auto-complete { };--    bbdb = callPackage ../applications/editors/emacs-modes/bbdb { };--    bbdb3 = callPackage ../applications/editors/emacs-modes/bbdb/3.nix {};--    cedet = callPackage ../applications/editors/emacs-modes/cedet { };--    calfw = callPackage ../applications/editors/emacs-modes/calfw { };--    coffee = callPackage ../applications/editors/emacs-modes/coffee { };--    colorTheme = callPackage ../applications/editors/emacs-modes/color-theme { };--    colorThemeSolarized = callPackage ../applications/editors/emacs-modes/color-theme-solarized { };--    cryptol = callPackage ../applications/editors/emacs-modes/cryptol { };--    cua = callPackage ../applications/editors/emacs-modes/cua { };--    darcsum = callPackage ../applications/editors/emacs-modes/darcsum { };--    # ecb = callPackage ../applications/editors/emacs-modes/ecb { };--    jabber = callPackage ../applications/editors/emacs-modes/jabber { };--    emacsClangCompleteAsync = callPackage ../applications/editors/emacs-modes/emacs-clang-complete-async { };--    emacsSessionManagement = callPackage ../applications/editors/emacs-modes/session-management-for-emacs { };--    emacsw3m = callPackage ../applications/editors/emacs-modes/emacs-w3m { };--    emms = callPackage ../applications/editors/emacs-modes/emms { };--    ess = callPackage ../applications/editors/emacs-modes/ess { };--    flymakeCursor = callPackage ../applications/editors/emacs-modes/flymake-cursor { };--    gh = callPackage ../applications/editors/emacs-modes/gh { };--    graphvizDot = callPackage ../applications/editors/emacs-modes/graphviz-dot { };--    gist = callPackage ../applications/editors/emacs-modes/gist { };--    idris = callPackage ../applications/editors/emacs-modes/idris { };--    jade = callPackage ../applications/editors/emacs-modes/jade { };--    jdee = callPackage ../applications/editors/emacs-modes/jdee {-      # Requires Emacs 23, for `avl-tree'.-    };--    js2 = callPackage ../applications/editors/emacs-modes/js2 { };--    stratego = callPackage ../applications/editors/emacs-modes/stratego { };--    haskellMode = callPackage ../applications/editors/emacs-modes/haskell { };--    ocamlMode = callPackage ../applications/editors/emacs-modes/ocaml { };--    structuredHaskellMode = callPackage ../applications/editors/emacs-modes/structured-haskell-mode {-      inherit (haskellPackages) cabal haskellSrcExts;-    };--    tuaregMode = callPackage ../applications/editors/emacs-modes/tuareg { };--    hol_light_mode = callPackage ../applications/editors/emacs-modes/hol_light { };--    htmlize = callPackage ../applications/editors/emacs-modes/htmlize { };--    logito = callPackage ../applications/editors/emacs-modes/logito { };--    loremIpsum = callPackage ../applications/editors/emacs-modes/lorem-ipsum { };--    magit = callPackage ../applications/editors/emacs-modes/magit { };--    maudeMode = callPackage ../applications/editors/emacs-modes/maude { };--    metaweblog = callPackage ../applications/editors/emacs-modes/metaweblog { };--    notmuch = lowPrio (callPackage ../applications/networking/mailreaders/notmuch { });--    offlineimap = callPackage ../applications/editors/emacs-modes/offlineimap {};--    # This is usually a newer version of Org-Mode than that found in GNU Emacs, so-    # we want it to have higher precedence.-    org = hiPrio (callPackage ../applications/editors/emacs-modes/org { });--    org2blog = callPackage ../applications/editors/emacs-modes/org2blog { };--    pcache = callPackage ../applications/editors/emacs-modes/pcache { };--    phpMode = callPackage ../applications/editors/emacs-modes/php { };--    prologMode = callPackage ../applications/editors/emacs-modes/prolog { };--    proofgeneral_4_2 = callPackage ../applications/editors/emacs-modes/proofgeneral/4.2.nix {-      texinfo = texinfo4 ;-      texLive = pkgs.texLiveAggregationFun {-        paths = [ pkgs.texLive pkgs.texLiveCMSuper ];-      };-    };-    proofgeneral_4_3_pre = callPackage ../applications/editors/emacs-modes/proofgeneral/4.3pre.nix {-      texinfo = texinfo4 ;-      texLive = pkgs.texLiveAggregationFun {-        paths = [ pkgs.texLive pkgs.texLiveCMSuper ];-      };-    };-    proofgeneral = self.proofgeneral_4_2;--    quack = callPackage ../applications/editors/emacs-modes/quack { };--    rectMark = callPackage ../applications/editors/emacs-modes/rect-mark { };--    remember = callPackage ../applications/editors/emacs-modes/remember { };--    rudel = callPackage ../applications/editors/emacs-modes/rudel { };--    sbtMode = callPackage ../applications/editors/emacs-modes/sbt-mode { };--    scalaMode1 = callPackage ../applications/editors/emacs-modes/scala-mode/v1.nix { };-    scalaMode2 = callPackage ../applications/editors/emacs-modes/scala-mode/v2.nix { };--    sunriseCommander = callPackage ../applications/editors/emacs-modes/sunrise-commander { };--    writeGood = callPackage ../applications/editors/emacs-modes/writegood { };--    xmlRpc = callPackage ../applications/editors/emacs-modes/xml-rpc { };-  };--  emacs24Packages = recurseIntoAttrs (emacsPackages emacs24 pkgs.emacs24Packages);--  inherit (gnome3) empathy;--  epdfview = callPackage ../applications/misc/epdfview { };--  inherit (gnome3) epiphany;--  espeak = callPackage ../applications/audio/espeak { };--  espeakedit = callPackage ../applications/audio/espeak/edit.nix { };--  esniper = callPackage ../applications/networking/esniper { };--  etherape = callPackage ../applications/networking/sniffers/etherape {-    inherit (gnome) gnomedocutils libgnome libglade libgnomeui scrollkeeper;-  };--  evopedia = callPackage ../applications/misc/evopedia { };--  keepassx = callPackage ../applications/misc/keepassx { };-  keepassx2 = callPackage ../applications/misc/keepassx/2.0.nix { };--  inherit (gnome3) evince;-  evolution_data_server = gnome3.evolution_data_server;--  keepass = callPackage ../applications/misc/keepass { };--  exrdisplay = callPackage ../applications/graphics/exrdisplay {-    fltk = fltk20;-  };--  fbpanel = callPackage ../applications/window-managers/fbpanel { };--  fbreader = callPackage ../applications/misc/fbreader { };--  fetchmail = import ../applications/misc/fetchmail {-    inherit stdenv fetchurl openssl;-  };--  fldigi = callPackage ../applications/audio/fldigi { };--  fluidsynth = callPackage ../applications/audio/fluidsynth { };--  fossil = callPackage ../applications/version-management/fossil { };--  fribid = callPackage ../applications/networking/browsers/mozilla-plugins/fribid { };--  fvwm = callPackage ../applications/window-managers/fvwm { };--  geany = callPackage ../applications/editors/geany { };--  gksu = callPackage ../applications/misc/gksu { };--  gnuradio = callPackage ../applications/misc/gnuradio {-    inherit (pythonPackages) lxml numpy scipy matplotlib pyopengl;-    fftw = fftwFloat;-  };--  gnuradio-osmosdr = callPackage ../applications/misc/gnuradio-osmosdr { };--  goldendict = callPackage ../applications/misc/goldendict { };--  google-musicmanager = callPackage ../applications/audio/google-musicmanager { };--  gpicview = callPackage ../applications/graphics/gpicview { };--  gqrx = callPackage ../applications/misc/gqrx { };--  grass = import ../applications/misc/grass {-    inherit (xlibs) libXmu libXext libXp libX11 libXt libSM libICE libXpm-      libXaw libXrender;-    inherit config composableDerivation stdenv fetchurl-      lib flex bison cairo fontconfig-      gdal zlib ncurses gdbm proj pkgconfig swig-      blas liblapack libjpeg libpng mysql unixODBC mesa postgresql python-      readline sqlite tcl tk libtiff freetype makeWrapper wxGTK;-    fftw = fftwSinglePrec;-    ffmpeg = ffmpeg_0_10;-    motif = lesstif;-    opendwg = libdwg;-    wxPython = wxPython28;-  };--  grip = callPackage ../applications/misc/grip {-    inherit (gnome) libgnome libgnomeui vte;-  };--  gtimelog = pythonPackages.gtimelog;--  inherit (gnome3) gucharmap;--  guitarix = callPackage ../applications/audio/guitarix {-    fftw = fftwSinglePrec;-  };--  photivo = callPackage ../applications/graphics/photivo { };--  wavesurfer = callPackage ../applications/misc/audio/wavesurfer { };--  wireshark = callPackage ../applications/networking/sniffers/wireshark { };--  wvdial = callPackage ../os-specific/linux/wvdial { };--  fbida = callPackage ../applications/graphics/fbida { };--  fdupes = callPackage ../tools/misc/fdupes { };--  feh = callPackage ../applications/graphics/feh { };--  filezilla = callPackage ../applications/networking/ftp/filezilla { };--  firefox13Pkgs = callPackage ../applications/networking/browsers/firefox/13.0.nix {-    inherit (gnome) libIDL;-  };--  firefox13Wrapper = wrapFirefox { browser = firefox13Pkgs.firefox; };--  firefox30Pkgs = callPackage ../applications/networking/browsers/firefox/30.nix {-    inherit (gnome) libIDL;-    inherit (pythonPackages) pysqlite;-    libpng = libpng_apng;-  };--  firefox = callPackage ../applications/networking/browsers/firefox {-    inherit (gnome) libIDL;-    inherit (pythonPackages) pysqlite;-  };--  firefoxWrapper = wrapFirefox { browser = pkgs.firefox; };--  firefox-bin = callPackage ../applications/networking/browsers/firefox-bin {-    gconf = pkgs.gnome.GConf;-    inherit (pkgs.gnome) libgnome libgnomeui;-    inherit (pkgs.xlibs) libX11 libXScrnSaver libXext-      libXinerama libXrender libXt;-  };--  flac = callPackage ../applications/audio/flac { };--  flashplayer = callPackage ../applications/networking/browsers/mozilla-plugins/flashplayer-11 {-    debug = config.flashplayer.debug or false;-  };--  fluxbox = callPackage ../applications/window-managers/fluxbox { };--  freecad = callPackage ../applications/graphics/freecad {-    opencascade = opencascade_6_5;-    inherit (pythonPackages) matplotlib pycollada;-  };--  freemind = callPackage ../applications/misc/freemind {-    jdk = jdk;-    jre = jdk;-  };--  freenet = callPackage ../applications/networking/p2p/freenet { };--  freepv = callPackage ../applications/graphics/freepv { };--  xfontsel = callPackage ../applications/misc/xfontsel { };-  xlsfonts = callPackage ../applications/misc/xlsfonts { };--  freerdp = callPackage ../applications/networking/remote/freerdp {-    ffmpeg = ffmpeg_1;-  };--  freerdpUnstable = callPackage ../applications/networking/remote/freerdp/unstable.nix { };--  freicoin = callPackage ../applications/misc/freicoin { };--  fspot = callPackage ../applications/graphics/f-spot {-    inherit (gnome) libgnome libgnomeui;-    gtksharp = gtksharp1;-  };--  fuze = callPackage ../applications/networking/instant-messengers/fuze {};--  gcolor2 = callPackage ../applications/graphics/gcolor2 { };--  get_iplayer = callPackage ../applications/misc/get_iplayer {};--  gimp_2_8 = callPackage ../applications/graphics/gimp/2.8.nix {-    inherit (gnome) libart_lgpl;-    webkit = null;-    lcms = lcms2;-    wrapPython = pythonPackages.wrapPython;-  };--  gimp = gimp_2_8;--  gimpPlugins = recurseIntoAttrs (import ../applications/graphics/gimp/plugins {-    inherit pkgs gimp;-  });--  gitAndTools = recurseIntoAttrs (import ../applications/version-management/git-and-tools {-    inherit pkgs;-  });-  git = gitAndTools.git;-  gitFull = gitAndTools.gitFull;-  gitSVN = gitAndTools.gitSVN;--  gitRepo = callPackage ../applications/version-management/git-repo {-    python = python27;-  };--  gitolite = callPackage ../applications/version-management/gitolite { };--  inherit (gnome3) gitg;--  giv = callPackage ../applications/graphics/giv {-    pcre = pcre.override { unicodeSupport = true; };-  };--  gmrun = callPackage ../applications/misc/gmrun {};--  gnucash = callPackage ../applications/office/gnucash {-    inherit (gnome2) libgnomeui libgtkhtml gtkhtml libbonoboui libgnomeprint libglade libart_lgpl;-    gconf = gnome2.GConf;-    guile = guile_1_8;-    slibGuile = slibGuile.override { scheme = guile_1_8; };-    goffice = goffice_0_8;-  };--  goffice_0_8 = callPackage ../desktops/gnome-3/3.10/misc/goffice/0.8.nix {-    inherit (gnome2) libglade libgnomeui;-    gconf = gnome2.GConf;-    libart = gnome2.libart_lgpl;-  }; # latest version: gnome3.goffice--  ideas = recurseIntoAttrs (  (callPackage ../applications/editors/idea { })-                           // (callPackage ../applications/editors/idea/pycharm.nix { }));--  libquvi = callPackage ../applications/video/quvi/library.nix { };--  mi2ly = callPackage ../applications/audio/mi2ly {};--  praat = callPackage ../applications/audio/praat { };--  quvi = callPackage ../applications/video/quvi/tool.nix { };--  quvi_scripts = callPackage ../applications/video/quvi/scripts.nix { };--  qjackctl = callPackage ../applications/audio/qjackctl { };--  gkrellm = callPackage ../applications/misc/gkrellm { };--  gmu = callPackage ../applications/audio/gmu { };--  gnash = callPackage ../applications/video/gnash {-    inherit (gnome) gtkglext;-  };--  gnome_mplayer = callPackage ../applications/video/gnome-mplayer {-    inherit (gnome) GConf;-  };--  gnumeric = callPackage ../applications/office/gnumeric {-    inherit (gnome3) goffice gnome_icon_theme;-  };--  gnunet = callPackage ../applications/networking/p2p/gnunet {-    libgcrypt = libgcrypt_1_6;-  };--  gnunet_svn = lowPrio (callPackage ../applications/networking/p2p/gnunet/svn.nix {-    libgcrypt = libgcrypt_1_6;-  });--  gocr = callPackage ../applications/graphics/gocr { };--  gobby5 = callPackage ../applications/editors/gobby {-    inherit (gnome) gtksourceview;-  };--  gphoto2 = callPackage ../applications/misc/gphoto2 { };--  gphoto2fs = builderDefsPackage ../applications/misc/gphoto2/gphotofs.nix {-    inherit libgphoto2 fuse pkgconfig glib libtool;-  };--  graphicsmagick = callPackage ../applications/graphics/graphicsmagick { };-  graphicsmagick_q16 = callPackage ../applications/graphics/graphicsmagick { quantumdepth = 16; };--  graphicsmagick137 = callPackage ../applications/graphics/graphicsmagick/1.3.7.nix {-    libpng = libpng12;-  };--  gtkpod = callPackage ../applications/audio/gtkpod {-    inherit (gnome) libglade;-  };--  jbidwatcher = callPackage ../applications/misc/jbidwatcher {-    java = if stdenv.isLinux then jre else jdk;-  };--  qrdecode = builderDefsPackage (import ../tools/graphics/qrdecode) {-    libpng = libpng12;-    opencv = opencv_2_1;-  };--  qrencode = callPackage ../tools/graphics/qrencode { };--  gecko_mediaplayer = callPackage ../applications/networking/browsers/mozilla-plugins/gecko-mediaplayer {-    inherit (gnome) GConf;-    browser = firefox;-  };--  geeqie = callPackage ../applications/graphics/geeqie { };--  gigedit = callPackage ../applications/audio/gigedit { };--  gqview = callPackage ../applications/graphics/gqview { };--  gmpc = callPackage ../applications/audio/gmpc { };--  gmtk = callPackage ../applications/networking/browsers/mozilla-plugins/gmtk {-    inherit (gnome) GConf;-  };--  googleearth = callPackage_i686 ../applications/misc/googleearth { };--  google_talk_plugin = callPackage ../applications/networking/browsers/mozilla-plugins/google-talk-plugin {-    libpng = libpng12;-  };--  gosmore = builderDefsPackage ../applications/misc/gosmore {-    inherit fetchsvn curl pkgconfig libxml2 gtk;-  };--  gpsbabel = callPackage ../applications/misc/gpsbabel { };--  gpscorrelate = callPackage ../applications/misc/gpscorrelate { };--  gpsd = callPackage ../servers/gpsd { };--  guitone = callPackage ../applications/version-management/guitone { };--  gv = callPackage ../applications/misc/gv { };--  guvcview = callPackage ../os-specific/linux/guvcview { };--  hello = callPackage ../applications/misc/hello/ex-2 { };--  herbstluftwm = callPackage ../applications/window-managers/herbstluftwm { };--  hexchat = callPackage ../applications/networking/irc/hexchat { };--  hexedit = callPackage ../applications/editors/hexedit { };--  hipchat = callPackage ../applications/networking/instant-messengers/hipchat { };--  homebank = callPackage ../applications/office/homebank { };--  htmldoc = callPackage ../applications/misc/htmldoc {-    fltk = fltk13;-  };--  hugin = callPackage ../applications/graphics/hugin { };--  hydrogen = callPackage ../applications/audio/hydrogen { };--  i3 = callPackage ../applications/window-managers/i3 { };--  i3lock = callPackage ../applications/window-managers/i3/lock.nix {-    inherit (xorg) libxkbfile;-    cairo = cairo.override { xcbSupport = true; };-  };--  i3minator = callPackage ../tools/misc/i3minator { };--  i3status = callPackage ../applications/window-managers/i3/status.nix { };--  i810switch = callPackage ../os-specific/linux/i810switch { };--  icewm = callPackage ../applications/window-managers/icewm { };--  id3v2 = callPackage ../applications/audio/id3v2 { };--  ifenslave = callPackage ../os-specific/linux/ifenslave { };--  ii = callPackage ../applications/networking/irc/ii { };--  ike = callPackage ../applications/ike { };--  ikiwiki = callPackage ../applications/misc/ikiwiki {-    inherit (perlPackages) TextMarkdown URI HTMLParser HTMLScrubber-      HTMLTemplate TimeDate CGISession DBFile CGIFormBuilder LocaleGettext-      RpcXML XMLSimple PerlMagick YAML YAMLLibYAML HTMLTree Filechdir-      AuthenPassphrase NetOpenIDConsumer LWPxParanoidAgent CryptSSLeay;-  };--  imagemagick = callPackage ../applications/graphics/ImageMagick {-    tetex = null;-    librsvg = null;-  };--  imagemagickBig = lowPrio (callPackage ../applications/graphics/ImageMagick { });--  # Impressive, formerly known as "KeyJNote".-  impressive = callPackage ../applications/office/impressive {-    # XXX These are the PyOpenGL dependencies, which we need here.-    inherit (pythonPackages) pyopengl;-  };--  inferno = callPackage_i686 ../applications/inferno { };--  inkscape = callPackage ../applications/graphics/inkscape {-    inherit (pythonPackages) lxml;-    lcms = lcms2;-  };--  ion3 = callPackage ../applications/window-managers/ion-3 {-    lua = lua5;-  };--  ipe = callPackage ../applications/graphics/ipe { };--  iptraf = callPackage ../applications/networking/iptraf { };--  irssi = callPackage ../applications/networking/irc/irssi {-    # compile with gccApple on darwin to support the -no-cpp-precompile flag-    stdenv = if stdenv.isDarwin-      then stdenvAdapters.overrideGCC stdenv gccApple-      else stdenv;-  };--  irssi_fish = callPackage ../applications/networking/irc/irssi/fish { };--  irssi_otr = callPackage ../applications/networking/irc/irssi/otr { };--  bip = callPackage ../applications/networking/irc/bip { };--  jack_capture = callPackage ../applications/audio/jack-capture { };--  jack_oscrolloscope = callPackage ../applications/audio/jack-oscrolloscope { };--  jack_rack = callPackage ../applications/audio/jack-rack { };--  jackmeter = callPackage ../applications/audio/jackmeter { };--  jalv = callPackage ../applications/audio/jalv { };--  jedit = callPackage ../applications/editors/jedit { };--  jigdo = callPackage ../applications/misc/jigdo { };--  jitsi = callPackage ../applications/networking/instant-messengers/jitsi { };--  joe = callPackage ../applications/editors/joe { };--  jbrout = callPackage ../applications/graphics/jbrout {-    inherit (pythonPackages) lxml;-  };--  jwm = callPackage ../applications/window-managers/jwm { };--  k3d = callPackage ../applications/graphics/k3d {-    inherit (pkgs.gnome2) gtkglext;-  };--  keepnote = callPackage ../applications/office/keepnote {-    pygtk = pyGtkGlade;-  };--  kermit = callPackage ../tools/misc/kermit { };--  keymon = callPackage ../applications/video/key-mon { };--  kino = callPackage ../applications/video/kino {-    inherit (gnome) libglade;-  };--  lame = callPackage ../applications/audio/lame { };--  larswm = callPackage ../applications/window-managers/larswm { };--  lash = callPackage ../applications/audio/lash { };--  ladspaH = callPackage ../applications/audio/ladspa-plugins/ladspah.nix { };--  ladspaPlugins = callPackage ../applications/audio/ladspa-plugins {-    fftw = fftwSinglePrec;-  };--  caps = callPackage ../applications/audio/caps { };--  lastwatch = callPackage ../applications/audio/lastwatch { };--  lastfmsubmitd = callPackage ../applications/audio/lastfmsubmitd { };--  lbdb = callPackage ../tools/misc/lbdb { };--  lci = callPackage ../applications/science/logic/lci {};--  ldcpp = callPackage ../applications/networking/p2p/ldcpp {-    inherit (gnome) libglade;-  };--  librecad = callPackage ../applications/misc/librecad { };--  librecad2 = callPackage ../applications/misc/librecad/2.0.nix { };--  libreoffice = callPackage ../applications/office/libreoffice {-    inherit (perlPackages) ArchiveZip CompressZlib;-    inherit (gnome) GConf ORBit2 gnome_vfs;-    zip = zip.override { enableNLS = false; };-    boost = boost155;-    jdk = openjdk;-    fontsConf = makeFontsConf {-      fontDirectories = [-        freefont_ttf xorg.fontmiscmisc xorg.fontbhttf-      ];-    };-    clucene_core = clucene_core_2;-    lcms = lcms2;-    harfbuzz = harfbuzz.override {-      withIcu = true; withGraphite2 = true;-    };-  };--  liferea = callPackage ../applications/networking/newsreaders/liferea { };--  lingot = callPackage ../applications/audio/lingot {-    inherit (gnome) libglade;-  };--  links = callPackage ../applications/networking/browsers/links { };--  ledger = callPackage ../applications/office/ledger/2.6.3.nix { };-  ledger3 = callPackage ../applications/office/ledger/3.0.nix { };--  lighttable = callPackage ../applications/editors/lighttable {};--  links2 = callPackage ../applications/networking/browsers/links2 { };--  linphone = callPackage ../applications/networking/instant-messengers/linphone rec {-    inherit (gnome) libglade;-    libexosip = libexosip_3;-    libosip = libosip_3;-  };--  linuxsampler = callPackage ../applications/audio/linuxsampler {-    bison = bison2;-  };--  llpp = callPackage ../applications/misc/llpp { inherit (ocamlPackages) lablgl; };--  lmms = callPackage ../applications/audio/lmms { };--  lrzsz = callPackage ../tools/misc/lrzsz { };--  luminanceHDR = callPackage ../applications/graphics/luminance-hdr { };--  lxdvdrip = callPackage ../applications/video/lxdvdrip { };--  handbrake = callPackage ../applications/video/handbrake { };--  lynx = callPackage ../applications/networking/browsers/lynx { };--  lyx = callPackage ../applications/misc/lyx { };--  makeself = callPackage ../applications/misc/makeself { };--  matchbox = callPackage ../applications/window-managers/matchbox { };--  mcpp = callPackage ../development/compilers/mcpp { };--  mda_lv2 = callPackage ../applications/audio/mda-lv2 { };--  meld = callPackage ../applications/version-management/meld {-    inherit (gnome) scrollkeeper;-    pygtk = pyGtkGlade;-  };--  mcomix = callPackage ../applications/graphics/mcomix { };--  mercurial = callPackage ../applications/version-management/mercurial {-    inherit (pythonPackages) curses docutils;-    guiSupport = false; # use mercurialFull to get hgk GUI-  };--  mercurialFull = appendToName "full" (pkgs.mercurial.override { guiSupport = true; });--  merkaartor = callPackage ../applications/misc/merkaartor { };--  meshlab = callPackage ../applications/graphics/meshlab { };--  mhwaveedit = callPackage ../applications/audio/mhwaveedit {};--  mid2key = callPackage ../applications/audio/mid2key { };--  midori = callPackage ../applications/networking/browsers/midori { };--  midoriWrapper = wrapFirefox-    { browser = midori; browserName = "midori"; desktopName = "Midori";-      icon = "${midori}/share/icons/hicolor/22x22/apps/midori.png";-    };--  mikmod = callPackage ../applications/audio/mikmod { };--  minicom = callPackage ../tools/misc/minicom { };--  minimodem = callPackage ../applications/audio/minimodem { };--  minidjvu = callPackage ../applications/graphics/minidjvu { };--  mirage = callPackage ../applications/graphics/mirage {};--  mixxx = callPackage ../applications/audio/mixxx {-    inherit (vamp) vampSDK;-  };--  mmex = callPackage ../applications/office/mmex { };--  moc = callPackage ../applications/audio/moc { };--  monkeysAudio = callPackage ../applications/audio/monkeys-audio { };--  monodevelop = callPackage ../applications/editors/monodevelop {-    inherit (gnome) gnome_vfs libbonobo libglade libgnome GConf;-    mozilla = firefox;-    gtksharp = gtksharp2;-  };--  monodoc = callPackage ../applications/editors/monodoc {-    gtksharp = gtksharp1;-  };--  monotone = callPackage ../applications/version-management/monotone {-    lua = lua5;-    boost = boost149;-  };--  monotoneViz = builderDefsPackage (import ../applications/version-management/monotone-viz/mtn-head.nix) {-    inherit ocaml graphviz pkgconfig autoconf automake libtool glib gtk;-    inherit (ocamlPackages) lablgtk;-    inherit (gnome) libgnomecanvas;-  };--  mopidy = callPackage ../applications/audio/mopidy { };--  mopidy-spotify = callPackage ../applications/audio/mopidy-spotify { };--  mopidy-moped = callPackage ../applications/audio/mopidy-moped { };--  mozilla = callPackage ../applications/networking/browsers/mozilla {-    inherit (gnome) libIDL;-  };--  mozplugger = builderDefsPackage (import ../applications/networking/browsers/mozilla-plugins/mozplugger) {-    inherit firefox;-    inherit (xlibs) libX11 xproto;-  };--  easytag = callPackage ../applications/audio/easytag { };--  mp3info = callPackage ../applications/audio/mp3info { };--  mp3splt = callPackage ../applications/audio/mp3splt { };--  mpc123 = callPackage ../applications/audio/mpc123 { };--  mpg123 = callPackage ../applications/audio/mpg123 { };--  mpg321 = callPackage ../applications/audio/mpg321 { };--  mpc_cli = callPackage ../applications/audio/mpc { };--  ncmpc = callPackage ../applications/audio/ncmpc { };--  ncmpcpp = callPackage ../applications/audio/ncmpcpp { };--  normalize = callPackage ../applications/audio/normalize { };--  mplayer = callPackage ../applications/video/mplayer {-    pulseSupport = config.pulseaudio or false;-    vdpauSupport = config.mplayer.vdpauSupport or false;-  };--  mplayer2 = callPackage ../applications/video/mplayer2 {-    ffmpeg = libav_9; # see https://trac.macports.org/ticket/44386-  };--  MPlayerPlugin = browser:-    import ../applications/networking/browsers/mozilla-plugins/mplayerplug-in {-      inherit browser;-      inherit fetchurl stdenv pkgconfig gettext;-      inherit (xlibs) libXpm;-      # !!! should depend on MPlayer-    };--  mpv = callPackage ../applications/video/mpv {-    lua = lua5_1;-    bs2bSupport = true;-    quviSupport = true;-    cacaSupport = true;-  };--  mrxvt = callPackage ../applications/misc/mrxvt { };--  multisync = callPackage ../applications/misc/multisync {-    inherit (gnome) ORBit2 libbonobo libgnomeui GConf;-  };--  mumble = callPackage ../applications/networking/mumble {-    avahi = avahi.override {-      withLibdnssdCompat = true;-    };-    jackSupport = config.mumble.jackSupport or false;-    speechdSupport = config.mumble.speechdSupport or false;-  };--  murmur = callPackage ../applications/networking/mumble/murmur.nix {-    avahi = avahi.override {-      withLibdnssdCompat = true;-    };-    iceSupport = config.murmur.iceSupport or true;-  };--  mutt = callPackage ../applications/networking/mailreaders/mutt { };--  pcmanfm = callPackage ../applications/misc/pcmanfm { };--  ruby_gpgme = callPackage ../development/libraries/ruby_gpgme {-    ruby = ruby19;-    hoe = rubyLibs.hoe;-  };--  ruby_ncursesw_sup = callPackage ../development/libraries/ruby_ncursesw_sup { };--  shotcut = callPackage ../applications/video/shotcut { mlt = mlt-qt5; };--  smplayer = callPackage ../applications/video/smplayer { };--  sup = with rubyLibs; callPackage ../applications/networking/mailreaders/sup {-    ruby = ruby19.override {-      cursesSupport = true;-    };--    inherit gettext highline iconv locale lockfile-      text trollop xapian_ruby which;--    rmail_sup = ""; # missing-    unicode = "";--    # See https://github.com/NixOS/nixpkgs/issues/1804 and-    # https://github.com/NixOS/nixpkgs/issues/2146-    bundler = pkgs.lib.overrideDerivation pkgs.rubyLibs.bundler (-      oldAttrs: {-        dontPatchShebangs = 1;-      }-    );-    chronic      = chronic;-    gpgme        = ruby_gpgme;-    mime_types   = mime_types;-    ncursesw_sup = ruby_ncursesw_sup;-    rake         = rake;-  };--  synfigstudio = callPackage ../applications/graphics/synfigstudio {-    fontsConf = makeFontsConf { fontDirectories = [ freefont_ttf ]; };-  };--  sxhkd = callPackage ../applications/window-managers/sxhkd { };--  msmtp = callPackage ../applications/networking/msmtp { };--  imapfilter = callPackage ../applications/networking/mailreaders/imapfilter.nix {-    lua = lua5;- };--  mupdf = callPackage ../applications/misc/mupdf { };--  mypaint = callPackage ../applications/graphics/mypaint { };--  mythtv = callPackage ../applications/video/mythtv { };--  tvtime = callPackage ../applications/video/tvtime {-    kernel = linux;-  };--  nano = callPackage ../applications/editors/nano { };--  navipowm = callPackage ../applications/misc/navipowm { };--  navit = callPackage ../applications/misc/navit { };--  netbeans = callPackage ../applications/editors/netbeans { };--  ncdu = callPackage ../tools/misc/ncdu { };--  ncdc = callPackage ../applications/networking/p2p/ncdc { };--  nedit = callPackage ../applications/editors/nedit {-    motif = lesstif;-  };--  netsurfBrowser = netsurf.browser;-  netsurf = recurseIntoAttrs (import ../applications/networking/browsers/netsurf { inherit pkgs; });--  notmuch = callPackage ../applications/networking/mailreaders/notmuch {-    # use emacsPackages.notmuch if you want emacs support-    emacs = null;-  };--  nova = callPackage ../applications/virtualization/nova { };--  novaclient = callPackage ../applications/virtualization/nova/client.nix { };--  nspluginwrapper = callPackage ../applications/networking/browsers/mozilla-plugins/nspluginwrapper {};--  nvi = callPackage ../applications/editors/nvi { };--  nvpy = callPackage ../applications/editors/nvpy { };--  obconf = callPackage ../tools/X11/obconf {-    inherit (gnome) libglade;-  };--  ocrad = callPackage ../applications/graphics/ocrad { };--  offrss = callPackage ../applications/networking/offrss { };--  ogmtools = callPackage ../applications/video/ogmtools { };--  omxplayer = callPackage ../applications/video/omxplayer { };--  oneteam = callPackage ../applications/networking/instant-messengers/oneteam {};--  openbox = callPackage ../applications/window-managers/openbox { };--  openimageio = callPackage ../applications/graphics/openimageio { };--  openjump = callPackage ../applications/misc/openjump { };--  openscad = callPackage ../applications/graphics/openscad {};--  opera = callPackage ../applications/networking/browsers/opera {-    inherit (pkgs.kde4) kdelibs;-  };--  opusfile = callPackage ../applications/audio/opusfile { };--  opusTools = callPackage ../applications/audio/opus-tools { };--  pamixer = callPackage ../applications/audio/pamixer { };--  pan = callPackage ../applications/networking/newsreaders/pan {-    spellChecking = false;-  };--  panotools = callPackage ../applications/graphics/panotools { };--  pavucontrol = callPackage ../applications/audio/pavucontrol { };--  paraview = callPackage ../applications/graphics/paraview { };--  pencil = callPackage ../applications/graphics/pencil { };--  petrifoo = callPackage ../applications/audio/petrifoo {-    inherit (gnome) libgnomecanvas;-  };--  pdftk = callPackage ../tools/typesetting/pdftk { };-  pdfgrep  = callPackage ../tools/typesetting/pdfgrep { };--  pianobar = callPackage ../applications/audio/pianobar { };--  pianobooster = callPackage ../applications/audio/pianobooster { };--  picard = callPackage ../applications/audio/picard { };--  picocom = callPackage ../tools/misc/picocom { };--  pidgin = callPackage ../applications/networking/instant-messengers/pidgin {-    openssl = if config.pidgin.openssl or true then openssl else null;-    gnutls = if config.pidgin.gnutls or false then gnutls else null;-    libgcrypt = if config.pidgin.gnutls or false then libgcrypt else null;-    startupnotification = libstartup_notification;-  };--  pidginlatex = callPackage ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex {-    imagemagick = imagemagickBig;-  };--  pidginlatexSF = builderDefsPackage-    (import ../applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/pidgin-latex-sf.nix)-    {-      inherit pkgconfig pidgin texLive imagemagick which glib gtk;-    };--  pidginmsnpecan = callPackage ../applications/networking/instant-messengers/pidgin-plugins/msn-pecan { };--  pidginotr = callPackage ../applications/networking/instant-messengers/pidgin-plugins/otr { };--  pidginsipe = callPackage ../applications/networking/instant-messengers/pidgin-plugins/sipe { };--  toxprpl = callPackage ../applications/networking/instant-messengers/pidgin-plugins/tox-prpl { };--  pinfo = callPackage ../applications/misc/pinfo { };--  pinta = callPackage ../applications/graphics/pinta {-    gtksharp = gtksharp2;-  };--  pommed = callPackage ../os-specific/linux/pommed {-    inherit (xorg) libXpm;-  };--  potrace = callPackage ../applications/graphics/potrace {};--  posterazor = callPackage ../applications/misc/posterazor { };--  pqiv = callPackage ../applications/graphics/pqiv { };--  qiv = callPackage ../applications/graphics/qiv { };--  # perhaps there are better apps for this task? It's how I had configured my preivous system.-  # And I don't want to rewrite all rules-  procmail = callPackage ../applications/misc/procmail { };--  pstree = callPackage ../applications/misc/pstree { };--  pulseview = callPackage ../applications/science/electronics/pulseview { };--  puredata = callPackage ../applications/audio/puredata { };--  pythonmagick = callPackage ../applications/graphics/PythonMagick { };--  qbittorrent = callPackage ../applications/networking/p2p/qbittorrent { };--  eiskaltdcpp = callPackage ../applications/networking/p2p/eiskaltdcpp { };--  qemu = callPackage ../applications/virtualization/qemu { };--  qmmp = callPackage ../applications/audio/qmmp { };--  qsampler = callPackage ../applications/audio/qsampler { };--  qsynth = callPackage ../applications/audio/qsynth { };--  qtpfsgui = callPackage ../applications/graphics/qtpfsgui { };--  qtractor = callPackage ../applications/audio/qtractor { };--  quodlibet = callPackage ../applications/audio/quodlibet {-    inherit (pythonPackages) mutagen;-  };--  quodlibet-with-gst-plugins = callPackage ../applications/audio/quodlibet {-    inherit (pythonPackages) mutagen;-    withGstPlugins = true;-    gst_plugins_bad = null;-  };--  rakarrack = callPackage ../applications/audio/rakarrack {-    inherit (xorg) libXpm libXft;-    fltk = fltk13;-  };--  rapcad = callPackage ../applications/graphics/rapcad {};--  rapidsvn = callPackage ../applications/version-management/rapidsvn { };--  ratpoison = callPackage ../applications/window-managers/ratpoison { };--  rawtherapee = callPackage ../applications/graphics/rawtherapee {-    fftw = fftwSinglePrec;-  };--  rcs = callPackage ../applications/version-management/rcs { };--  rdesktop = callPackage ../applications/networking/remote/rdesktop { };--  recode = callPackage ../tools/text/recode { };--  retroshare = callPackage ../applications/networking/p2p/retroshare {-    qt = qt4;-  };--  retroshare06 = lowPrio (callPackage ../applications/networking/p2p/retroshare/0.6.nix {-    qt = qt4;-  });--  rsync = callPackage ../applications/networking/sync/rsync {-    enableACLs = !(stdenv.isDarwin || stdenv.isSunOS || stdenv.isFreeBSD);-    enableCopyDevicesPatch = (config.rsync.enableCopyDevicesPatch or false);-  };--  rtl-sdr = callPackage ../applications/misc/rtl-sdr { };--  rubyripper = callPackage ../applications/audio/rubyripper {};--  rxvt = callPackage ../applications/misc/rxvt { };--  # = urxvt-  rxvt_unicode = callPackage ../applications/misc/rxvt_unicode {-    perlSupport = true;-    gdkPixbufSupport = true;-    unicode3Support = true;-  };--  sakura = callPackage ../applications/misc/sakura {-    inherit (gnome) vte;-  };--  sbagen = callPackage ../applications/misc/sbagen { };--  scite = callPackage ../applications/editors/scite { };--  scribus = callPackage ../applications/office/scribus {-    inherit (gnome) libart_lgpl;-  };--  seafile-client = callPackage ../applications/networking/seafile-client { };--  seeks = callPackage ../tools/networking/p2p/seeks {-    opencv = opencv_2_1;-  };--  seg3d = callPackage ../applications/graphics/seg3d {-    wxGTK = wxGTK28.override { unicode = false; };-  };--  seq24 = callPackage ../applications/audio/seq24 { };--  setbfree = callPackage ../applications/audio/setbfree { };--  sflphone = callPackage ../applications/networking/instant-messengers/sflphone {-    gtk = gtk3;-  };--  siproxd = callPackage ../applications/networking/siproxd { };--  skype = callPackage_i686 ../applications/networking/instant-messengers/skype { };--  skype4pidgin = callPackage ../applications/networking/instant-messengers/pidgin-plugins/skype4pidgin { };--  skype_call_recorder = callPackage ../applications/networking/instant-messengers/skype-call-recorder { };--  slrn = callPackage ../applications/networking/newsreaders/slrn { };--  spideroak = callPackage ../applications/networking/spideroak { };--  ssvnc = callPackage ../applications/networking/remote/ssvnc { };--  st = callPackage ../applications/misc/st {-    conf = config.st.conf or null;-  };--  linuxstopmotion = callPackage ../applications/video/linuxstopmotion { };--  sweethome3d = recurseIntoAttrs (  (callPackage ../applications/misc/sweethome3d { })-                                 // (callPackage ../applications/misc/sweethome3d/editors.nix {-                                      sweethome3dApp = sweethome3d.application;-                                    })-                                 );--  sxiv = callPackage ../applications/graphics/sxiv { };--  bittorrentSync = callPackage ../applications/networking/bittorrentsync { };--  dropbox = callPackage ../applications/networking/dropbox { };--  dropbox-cli = callPackage ../applications/networking/dropbox-cli { };--  lightdm = callPackage ../applications/display-managers/lightdm { };--  lightdm_gtk_greeter = callPackage ../applications/display-managers/lightdm-gtk-greeter { };--  # slic3r 0.9.10b says: "Running Slic3r under Perl >= 5.16 is not supported nor recommended"-  slic3r = callPackage ../applications/misc/slic3r {-    perlPackages = perl514Packages;-    perl = perl514;-  };--  curaengine = callPackage ../applications/misc/curaengine { };--  cura = callPackage ../applications/misc/cura { };--  printrun = callPackage ../applications/misc/printrun { };--  slim = callPackage ../applications/display-managers/slim {-    libpng = libpng12;-  };--  smartdeblur = callPackage ../applications/graphics/smartdeblur { };--  snd = callPackage ../applications/audio/snd { };--  shntool = callPackage ../applications/audio/shntool { };--  sonic_visualiser = callPackage ../applications/audio/sonic-visualiser {-    inherit (pkgs.vamp) vampSDK;-    inherit (pkgs.xlibs) libX11;-    fftw = pkgs.fftwSinglePrec;-  };--  sox = callPackage ../applications/misc/audio/sox { };--  soxr = callPackage ../applications/misc/audio/soxr { };--  spotify = callPackage ../applications/audio/spotify {-    inherit (gnome) GConf;-    libpng = libpng12;-  };--  libspotify = callPackage ../development/libraries/libspotify {-    apiKey = config.libspotify.apiKey or null;-  };--  stalonetray = callPackage ../applications/window-managers/stalonetray {};--  stp = callPackage ../applications/science/logic/stp {};--  stumpwm = lispPackages.stumpwm;--  sublime = callPackage ../applications/editors/sublime { };--  sublime3 = lowPrio (callPackage ../applications/editors/sublime3 { });--  subversion = callPackage ../applications/version-management/subversion/default.nix {-    bdbSupport = true;-    httpServer = false;-    httpSupport = true;-    pythonBindings = false;-    perlBindings = false;-    javahlBindings = false;-    saslSupport = false;-    httpd = apacheHttpd;-    sasl = cyrus_sasl;-  };--  subversionClient = appendToName "client" (subversion.override {-    bdbSupport = false;-    perlBindings = true;-    pythonBindings = true;-  });--  surf = callPackage ../applications/misc/surf {-    webkit = webkitgtk2;-  };--  svk = perlPackages.SVK;--  swh_lv2 = callPackage ../applications/audio/swh-lv2 { };--  sylpheed = callPackage ../applications/networking/mailreaders/sylpheed {-    sslSupport = true;-    gpgSupport = true;-  };--  symlinks = callPackage ../tools/system/symlinks { };--  syncthing = callPackage ../applications/networking/syncthing { };--  # linux only by now-  synergy = callPackage ../applications/misc/synergy { };--  tabbed = callPackage ../applications/window-managers/tabbed { };--  tahoelafs = callPackage ../tools/networking/p2p/tahoe-lafs {-    inherit (pythonPackages) twisted foolscap simplejson nevow zfec-      pycryptopp sqlite3 darcsver setuptoolsTrial setuptoolsDarcs-      numpy pyasn1 mock;-  };--  tailor = builderDefsPackage (import ../applications/version-management/tailor) {-    inherit makeWrapper python;-  };--  tangogps = callPackage ../applications/misc/tangogps {-    gconf = gnome.GConf;-  };--  teamspeak_client = callPackage ../applications/networking/instant-messengers/teamspeak/client.nix { };-  teamspeak_server = callPackage ../applications/networking/instant-messengers/teamspeak/server.nix { };--  taskjuggler = callPackage ../applications/misc/taskjuggler { };--  taskwarrior = callPackage ../applications/misc/taskwarrior { };--  taskserver = callPackage ../servers/misc/taskserver { };--  telegram-cli = callPackage ../applications/networking/instant-messengers/telegram-cli/default.nix { };--  telepathy_gabble = callPackage ../applications/networking/instant-messengers/telepathy/gabble { };--  telepathy_haze = callPackage ../applications/networking/instant-messengers/telepathy/haze {};--  telepathy_logger = callPackage ../applications/networking/instant-messengers/telepathy/logger {};--  telepathy_mission_control = callPackage ../applications/networking/instant-messengers/telepathy/mission-control { };--  telepathy_rakia = callPackage ../applications/networking/instant-messengers/telepathy/rakia { };--  telepathy_salut = callPackage ../applications/networking/instant-messengers/telepathy/salut {};--  terminator = callPackage ../applications/misc/terminator {-    vte = gnome.vte.override { pythonSupport = true; };-    inherit (pythonPackages) notify;-  };--  tesseract = callPackage ../applications/graphics/tesseract { };--  thinkingRock = callPackage ../applications/misc/thinking-rock { };--  thunderbird = callPackage ../applications/networking/mailreaders/thunderbird {-    inherit (gnome) libIDL;-    inherit (pythonPackages) pysqlite;-    libpng = libpng_apng;-  };--  thunderbird-bin = callPackage ../applications/networking/mailreaders/thunderbird-bin {-    gconf = pkgs.gnome.GConf;-    inherit (pkgs.gnome) libgnome libgnomeui;-    inherit (pkgs.xlibs) libX11 libXScrnSaver libXext-      libXinerama libXrender libXt;-  };--  tig = gitAndTools.tig;--  timidity = callPackage ../tools/misc/timidity { };--  tint2 = callPackage ../applications/misc/tint2 { };--  tkcvs = callPackage ../applications/version-management/tkcvs { };--  tla = callPackage ../applications/version-management/arch { };--  todo-txt-cli = callPackage ../applications/office/todo.txt-cli { };--  torchat = callPackage ../applications/networking/instant-messengers/torchat {-    wrapPython = pythonPackages.wrapPython;-  };--  toxic = callPackage ../applications/networking/instant-messengers/toxic { };--  transcode = callPackage ../applications/audio/transcode { };--  transmission = callPackage ../applications/networking/p2p/transmission { };-  transmission_gtk = transmission.override { enableGTK3 = true; };--  transmission_remote_gtk = callPackage ../applications/networking/p2p/transmission-remote-gtk {};--  trayer = callPackage ../applications/window-managers/trayer { };--  tree = callPackage ../tools/system/tree {};--  tribler = callPackage ../applications/networking/p2p/tribler { };--  twister = callPackage ../applications/networking/p2p/twister { };--  twmn = callPackage ../applications/misc/twmn { };--  twinkle = callPackage ../applications/networking/instant-messengers/twinkle { };--  umurmur = callPackage ../applications/networking/umurmur { };--  unison = callPackage ../applications/networking/sync/unison {-    inherit (ocamlPackages) lablgtk;-    enableX11 = config.unison.enableX11 or true;-  };--  uucp = callPackage ../tools/misc/uucp { };--  uvccapture = callPackage ../applications/video/uvccapture { };--  uwimap = callPackage ../tools/networking/uwimap { };--  uzbl = callPackage ../applications/networking/browsers/uzbl {-    webkit = webkitgtk2;-  };--  uTox = callPackage ../applications/networking/instant-messengers/utox { };--  vanitygen = callPackage ../applications/misc/vanitygen { };--  vbindiff = callPackage ../applications/editors/vbindiff { };--  vcprompt = callPackage ../applications/version-management/vcprompt { };--  vdpauinfo = callPackage ../tools/X11/vdpauinfo { };--  veracity = callPackage ../applications/version-management/veracity {};--  viewMtn = builderDefsPackage (import ../applications/version-management/viewmtn/0.10.nix)-  {-    inherit monotone cheetahTemplate highlight ctags-      makeWrapper graphviz which python;-    flup = pythonPackages.flup;-  };--  vim = callPackage ../applications/editors/vim { };--  macvim = callPackage ../applications/editors/vim/macvim.nix { };--  vimHugeX = vim_configurable;--  vim_configurable = callPackage ../applications/editors/vim/configurable.nix {-    inherit (pkgs) fetchurl fetchhg stdenv ncurses pkgconfig gettext-      composableDerivation lib config glib gtk python perl tcl ruby;-    inherit (pkgs.xlibs) libX11 libXext libSM libXpm libXt libXaw libXau libXmu-      libICE;--    features = "huge"; # one of  tiny, small, normal, big or huge-    lua = pkgs.lua5;-    gui = config.vim.gui or "auto";--    # optional features by flags-    flags = [ "python" "X11" ]; # only flag "X11" by now--    # so that we can use gccApple if we're building on darwin-    inherit stdenvAdapters gccApple;-  };--  vimNox = lowPrio (vim_configurable.override { source = "vim-nox"; });--  qvim = lowPrio (callPackage ../applications/editors/vim/qvim.nix {-    inherit (pkgs) fetchgit stdenv ncurses pkgconfig gettext-      composableDerivation lib config python perl tcl ruby qt4;-    inherit (pkgs.xlibs) libX11 libXext libSM libXpm libXt libXaw libXau libXmu-      libICE;--    inherit (pkgs) stdenvAdapters gccApple;--    features = "huge"; # one of  tiny, small, normal, big or huge-    lua = pkgs.lua5;-    flags = [ "python" "X11" ]; # only flag "X11" by now-  });--  vimpc = callPackage ../applications/audio/vimpc { };--  virtviewer = callPackage ../applications/virtualization/virt-viewer {-    gtkvnc = gtkvnc.override { enableGTK3 = true; };-    spice_gtk = spice_gtk.override { enableGTK3 = true; };-  };-  virtmanager = callPackage ../applications/virtualization/virt-manager {-    inherit (gnome) gnome_python;-    vte = gnome3.vte;-    dconf = gnome3.dconf;-    gtkvnc = gtkvnc.override { enableGTK3 = true; };-    spice_gtk = spice_gtk.override { enableGTK3 = true; };-  };--  virtinst = callPackage ../applications/virtualization/virtinst {};--  virtualgl = callPackage ../tools/X11/virtualgl { };--  bumblebee = callPackage ../tools/X11/bumblebee { };--  vkeybd = callPackage ../applications/audio/vkeybd {-    inherit (xlibs) libX11;-  };--  vlc = callPackage ../applications/video/vlc { };--  vmpk = callPackage ../applications/audio/vmpk { };--  vnstat = callPackage ../applications/networking/vnstat { };--  vorbisTools = callPackage ../applications/audio/vorbis-tools { };--  vue = callPackage ../applications/misc/vue {-    jre = icedtea7_jre;-  };--  vwm = callPackage ../applications/window-managers/vwm { };--  vym = callPackage ../applications/misc/vym { };--  w3m = callPackage ../applications/networking/browsers/w3m {-    graphicsSupport = false;-  };--  weechat = callPackage ../applications/networking/irc/weechat { };--  weechatDevel = lowPrio (callPackage ../applications/networking/irc/weechat/devel.nix { });--  weston = callPackage ../applications/window-managers/weston { };--  windowmaker = callPackage ../applications/window-managers/windowmaker { };--  winswitch = callPackage ../tools/X11/winswitch { };--  wings = callPackage ../applications/graphics/wings {-    erlang = erlangR14;-    esdl = esdl.override { erlang = erlangR14; };-  };--  wmname = callPackage ../applications/misc/wmname { };--  wmctrl = callPackage ../tools/X11/wmctrl { };--  # I'm keen on wmiimenu only  >wmii-3.5 no longer has it...-  wmiimenu = import ../applications/window-managers/wmii31 {-    libixp = libixp_for_wmii;-    inherit fetchurl /* fetchhg */ stdenv gawk;-    inherit (xlibs) libX11;-  };--  wmiiSnap = import ../applications/window-managers/wmii {-    libixp = libixp_for_wmii;-    inherit fetchurl /* fetchhg */ stdenv gawk;-    inherit (xlibs) libX11 xextproto libXt libXext;-    includeUnpack = config.stdenv.includeUnpack or false;-  };--  wordnet = callPackage ../applications/misc/wordnet { };--  wrapChromium = browser: wrapFirefox {-    inherit browser;-    browserName = browser.packageName;-    desktopName = "Chromium";-    icon = "${browser}/share/icons/hicolor/48x48/apps/${browser.packageName}.png";-  };--  wrapFirefox =-    { browser, browserName ? "firefox", desktopName ? "Firefox", nameSuffix ? ""-    , icon ? "${browser}/lib/${browser.name}/browser/icons/mozicon128.png" }:-    let-      cfg = stdenv.lib.attrByPath [ browserName ] {} config;-      enableAdobeFlash = cfg.enableAdobeFlash or false;-      enableGnash = cfg.enableGnash or false;-    in-    import ../applications/networking/browsers/firefox/wrapper.nix {-      inherit stdenv lib makeWrapper makeDesktopItem browser browserName desktopName nameSuffix icon;-      plugins =-         assert !(enableGnash && enableAdobeFlash);-         ([ ]-          ++ lib.optional enableGnash gnash-          ++ lib.optional enableAdobeFlash flashplayer-          ++ lib.optional (cfg.enableDjvu or false) (djview4)-          ++ lib.optional (cfg.enableMPlayer or false) (MPlayerPlugin browser)-          ++ lib.optional (cfg.enableGeckoMediaPlayer or false) gecko_mediaplayer-          ++ lib.optional (supportsJDK && cfg.jre or false && jrePlugin ? mozillaPlugin) jrePlugin-          ++ lib.optional (cfg.enableGoogleTalkPlugin or false) google_talk_plugin-          ++ lib.optional (cfg.enableFriBIDPlugin or false) fribid-          ++ lib.optional (cfg.enableGnomeExtensions or false) gnome3.gnome_shell-         );-      libs = [ gstreamer gst_plugins_base ] ++ lib.optionals (cfg.enableQuakeLive or false)-             (with xlibs; [ stdenv.gcc libX11 libXxf86dga libXxf86vm libXext libXt alsaLib zlib ]);-      gtk_modules = [ libcanberra ];-    };--  x11vnc = callPackage ../tools/X11/x11vnc { };--  x2vnc = callPackage ../tools/X11/x2vnc { };--  xaos = builderDefsPackage (import ../applications/graphics/xaos) {-    inherit (xlibs) libXt libX11 libXext xextproto xproto;-    inherit gsl aalib zlib intltool gettext perl;-    libpng = libpng12;-  };--  xara = callPackage ../applications/graphics/xara { };--  xawtv = callPackage ../applications/video/xawtv { };--  xbindkeys = callPackage ../tools/X11/xbindkeys { };--  xbmc = callPackage ../applications/video/xbmc {-    ffmpeg = ffmpeg_1;-  };--  xca = callPackage ../applications/misc/xca { };--  xcalib = callPackage ../tools/X11/xcalib { };--  xcape = callPackage ../tools/X11/xcape { };--  xchainkeys = callPackage ../tools/X11/xchainkeys { };--  xchat = callPackage ../applications/networking/irc/xchat { };--  xchm = callPackage ../applications/misc/xchm { };--  xcompmgr = callPackage ../applications/window-managers/xcompmgr { };--  compton = callPackage ../applications/window-managers/compton { };--  xdaliclock = callPackage ../tools/misc/xdaliclock {};--  xdg-user-dirs = callPackage ../tools/X11/xdg-user-dirs { };--  xdg_utils = callPackage ../tools/X11/xdg-utils { };--  xdotool = callPackage ../tools/X11/xdotool { };--  xen = callPackage ../applications/virtualization/xen {-    stdenv = overrideGCC stdenv gcc45;-  };--  xfe = callPackage ../applications/misc/xfe {-    fox = fox_1_6;-  };--  xfig = callPackage ../applications/graphics/xfig { };--  xineUI = callPackage ../applications/video/xine-ui { };--  xneur_0_13 = callPackage ../applications/misc/xneur { };--  xneur_0_8 = callPackage ../applications/misc/xneur/0.8.nix { };--  xneur = xneur_0_13;--  gxneur = callPackage ../applications/misc/gxneur  {-    inherit (gnome) libglade GConf;-  };--  xournal = callPackage ../applications/graphics/xournal {-    inherit (gnome) libgnomeprint libgnomeprintui libgnomecanvas;-  };--  xpdf = callPackage ../applications/misc/xpdf {-    motif = lesstif;-    base14Fonts = "${ghostscript}/share/ghostscript/fonts";-  };--  xkb_switch = callPackage ../tools/X11/xkb-switch { };--  libxpdf = callPackage ../applications/misc/xpdf/libxpdf.nix { };--  xpra = callPackage ../tools/X11/xpra { };--  xrestop = callPackage ../tools/X11/xrestop { };--  xscreensaver = callPackage ../misc/screensavers/xscreensaver {-    inherit (gnome) libglade;-  };--  xsynth_dssi = callPackage ../applications/audio/xsynth-dssi { };--  xterm = callPackage ../applications/misc/xterm { };--  finalterm = callPackage ../applications/misc/finalterm { };--  xtrace = callPackage ../tools/X11/xtrace { };--  xlaunch = callPackage ../tools/X11/xlaunch { };--  xmacro = callPackage ../tools/X11/xmacro { };--  xmove = callPackage ../applications/misc/xmove { };--  xmp = callPackage ../applications/audio/xmp { };--  xnee = callPackage ../tools/X11/xnee {-    # Work around "missing separator" error.-    stdenv = overrideInStdenv stdenv [ gnumake381 ];-  };--  xvidcap = callPackage ../applications/video/xvidcap {-    inherit (gnome) scrollkeeper libglade;-  };--  yate = callPackage ../applications/misc/yate { };--  inherit (gnome3) yelp;--  qgis = callPackage ../applications/misc/qgis {};--  qtbitcointrader = callPackage ../applications/misc/qtbitcointrader { };--  ykpers = callPackage ../applications/misc/ykpers {};--  yoshimi = callPackage ../applications/audio/yoshimi {-    fltk = fltk13;-  };--  zathuraCollection = recurseIntoAttrs-    (let callPackage = newScope pkgs.zathuraCollection; in-      import ../applications/misc/zathura {-        inherit callPackage pkgs fetchurl;-        useMupdf = config.zathura.useMupdf or false;-      });--  zathura = zathuraCollection.zathuraWrapper;--  zed = callPackage ../applications/editors/zed { };--  zeroc_ice = callPackage ../development/libraries/zeroc-ice { };--  girara = callPackage ../applications/misc/girara {-    gtk = gtk3;-  };--  zgrviewer = callPackage ../applications/graphics/zgrviewer {};--  zotero = callPackage ../applications/office/zotero {-    xulrunner = xulrunner_30;-  };--  zynaddsubfx = callPackage ../applications/audio/zynaddsubfx { };---  ### GAMES--  alienarena = callPackage ../games/alienarena { };--  andyetitmoves = if stdenv.isLinux then callPackage ../games/andyetitmoves {} else null;--  anki = callPackage ../games/anki { };--  asc = callPackage ../games/asc {-    lua = lua5;-    libsigcxx = libsigcxx12;-  };--  astromenace = callPackage ../games/astromenace { };--  atanks = callPackage ../games/atanks {};--  ballAndPaddle = callPackage ../games/ball-and-paddle {-    guile = guile_1_8;-  };--  bitsnbots = callPackage ../games/bitsnbots {-    lua = lua5;-  };--  blackshades = callPackage ../games/blackshades { };--  blackshadeselite = callPackage ../games/blackshadeselite { };--  blobby = callPackage ../games/blobby { };--  bsdgames = callPackage ../games/bsdgames { };--  btanks = callPackage ../games/btanks { };--  bzflag = callPackage ../games/bzflag { };--  castle_combat = callPackage ../games/castle-combat { };--  chessdb = callPackage ../games/chessdb { };--  construoBase = lowPrio (callPackage ../games/construo {-    mesa = null;-    freeglut = null;-  });--  construo = construoBase.override {-    inherit mesa freeglut;-  };--  crack_attack = callPackage ../games/crack-attack { };--  crafty = callPackage ../games/crafty { };-  craftyFull = appendToName "full" (crafty.override { fullVariant = true; });--  crrcsim = callPackage ../games/crrcsim {};--  dhewm3 = callPackage ../games/dhewm3 {};--  drumkv1 = callPackage ../applications/audio/drumkv1 { };--  dwarf_fortress = callPackage_i686 ../games/dwarf-fortress {-    SDL_image = pkgsi686Linux.SDL_image.override {-      libpng = pkgsi686Linux.libpng12;-    };-  };--  dwarf_fortress_2014 = callPackage_i686 ../games/dwarf-fortress/df2014.nix {-    SDL_image = pkgsi686Linux.SDL_image.override {-      libpng = pkgsi686Linux.libpng12;-    };-  };--  dwarf_fortress_modable = appendToName "moddable" (dwarf_fortress.override {-    copyDataDirectory = true;-  });--  dwarf_fortress_2014_modable = appendToName "moddable" (dwarf_fortress_2014.override {-    copyDataDirectory = true;-  });--  dwarf-therapist = callPackage ../games/dwarf-therapist { };--  d1x_rebirth = callPackage ../games/d1x-rebirth { };--  d2x_rebirth = callPackage ../games/d2x-rebirth { };--  eboard = callPackage ../games/eboard { };--  eduke32 = callPackage ../games/eduke32 { };--  egoboo = callPackage ../games/egoboo { };--  exult = callPackage ../games/exult { };--  flightgear = callPackage ../games/flightgear { };--  freeciv = callPackage ../games/freeciv { };--  freeciv_gtk = callPackage ../games/freeciv {-    gtkClient = true;-    sdlClient = false;-  };--  freedink = callPackage ../games/freedink { };--  fsg = callPackage ../games/fsg {-    wxGTK = wxGTK28.override { unicode = false; };-  };--  gemrb = callPackage ../games/gemrb { };--  gl117 = callPackage ../games/gl-117 {};--  glestae = callPackage ../games/glestae {};--  globulation2 = callPackage ../games/globulation {};--  gltron = callPackage ../games/gltron { };--  gnuchess = callPackage ../games/gnuchess { };--  gnugo = callPackage ../games/gnugo { };--  gparted = callPackage ../tools/misc/gparted { };--  gsmartcontrol = callPackage ../tools/misc/gsmartcontrol {-    inherit (gnome) libglademm;-  };--  gtypist = callPackage ../games/gtypist { };--  hexen = callPackage ../games/hexen { };--  icbm3d = callPackage ../games/icbm3d { };--  ingen = callPackage ../applications/audio/ingen { };--  instead = callPackage ../games/instead {-    lua = lua5;-  };--  kobodeluxe = callPackage ../games/kobodeluxe { };--  lincity = builderDefsPackage (import ../games/lincity) {-    inherit (xlibs) libX11 libXext xextproto-      libICE libSM xproto;-    inherit libpng zlib;-  };--  lincity_ng = callPackage ../games/lincity/ng.nix {};--  mars = callPackage ../games/mars { };--  micropolis = callPackage ../games/micropolis { };--  mnemosyne = callPackage ../games/mnemosyne {-    inherit (pythonPackages) matplotlib cherrypy sqlite3;-  };--  naev = callPackage ../games/naev { };--  nexuiz = callPackage ../games/nexuiz { };--  njam = callPackage ../games/njam { };--  oilrush = callPackage ../games/oilrush { };--  openra = callPackage ../games/openra { };--  openttd = callPackage ../games/openttd {-    zlib = zlibStatic;-  };--  opentyrian = callPackage ../games/opentyrian { };--  openxcom = callPackage ../games/openxcom { };--  pingus = callPackage ../games/pingus {};--  pioneers = callPackage ../games/pioneers { };--  pong3d = callPackage ../games/pong3d { };--  prboom = callPackage ../games/prboom { };--  quake3demo = callPackage ../games/quake3/wrapper {-    name = "quake3-demo-${quake3game.name}";-    description = "Demo of Quake 3 Arena, a classic first-person shooter";-    game = quake3game;-    paks = [quake3demodata];-  };--  quake3demodata = callPackage ../games/quake3/demo { };--  quake3game = callPackage ../games/quake3/game { };--  quantumminigolf = callPackage ../games/quantumminigolf {};--  racer = callPackage ../games/racer { };--  residualvm = callPackage ../games/residualvm {-    openglSupport = mesaSupported;-  };--  rigsofrods = callPackage ../games/rigsofrods {-    mygui = myguiSvn;-  };--  rili = callPackage ../games/rili { };--  rogue = callPackage ../games/rogue { };--  samplv1 = callPackage ../applications/audio/samplv1 { };--  sauerbraten = callPackage ../games/sauerbraten {};--  scid = callPackage ../games/scid { };--  scummvm = callPackage ../games/scummvm { };--  scorched3d = callPackage ../games/scorched3d { };--  sdlmame = callPackage ../games/sdlmame { };--  sgtpuzzles = builderDefsPackage (import ../games/sgt-puzzles) {-    inherit pkgconfig fetchsvn perl gtk;-    inherit (xlibs) libX11;-  };--  simutrans = callPackage ../games/simutrans { };--  soi = callPackage ../games/soi {};--  # You still can override by passing more arguments.-  spaceOrbit = callPackage ../games/orbit { };--  spring = callPackage ../games/spring { };--  springLobby = callPackage ../games/spring/springlobby.nix { };--  stardust = callPackage ../games/stardust {};--  steam = callPackage_i686 ../games/steam {};--  steamChrootEnv = callPackage_i686 ../games/steam/chrootenv.nix {-    zenity = gnome2.zenity;-  };--  stuntrally = callPackage ../games/stuntrally { };--  superTux = callPackage ../games/super-tux { };--  superTuxKart = callPackage ../games/super-tux-kart { };--  synthv1 = callPackage ../applications/audio/synthv1 { };--  tbe = callPackage ../games/the-butterfly-effect {};--  teetertorture = callPackage ../games/teetertorture { };--  teeworlds = callPackage ../games/teeworlds { };--  tennix = callPackage ../games/tennix { };--  tibia = callPackage ../games/tibia { };--  tintin = callPackage ../games/tintin { };--  tpm = callPackage ../games/thePenguinMachine { };--  tremulous = callPackage ../games/tremulous { };--  speed_dreams = callPackage ../games/speed-dreams {-    # Torcs wants to make shared libraries linked with plib libraries (it provides static).-    # i686 is the only platform I know than can do that linking without plib built with -fPIC-    plib = plib.override { enablePIC = !stdenv.isi686; };-    libpng = libpng12;-  };--  torcs = callPackage ../games/torcs {-    # Torcs wants to make shared libraries linked with plib libraries (it provides static).-    # i686 is the only platform I know than can do that linking without plib built with -fPIC-    plib = plib.override { enablePIC = !stdenv.isi686; };-  };--  trigger = callPackage ../games/trigger { };--  typespeed = callPackage ../games/typespeed { };--  ufoai = callPackage ../games/ufoai { };--  ultimatestunts = callPackage ../games/ultimatestunts { };--  ultrastardx = callPackage ../games/ultrastardx {-    ffmpeg = ffmpeg_0_6;-    lua = lua5;-  };--  unvanquished = callPackage ../games/unvanquished { };--  uqm = callPackage ../games/uqm { };--  urbanterror = callPackage ../games/urbanterror { };--  ut2004demo = callPackage ../games/ut2004demo { };--  vdrift = callPackage ../games/vdrift { };--  vectoroids = callPackage ../games/vectoroids { };--  vessel = callPackage_i686 ../games/vessel { };--  warmux = callPackage ../games/warmux { };--  warsow = callPackage ../games/warsow {-    libjpeg = libjpeg62;-  };--  warzone2100 = callPackage ../games/warzone2100 { };--  widelands = callPackage ../games/widelands {-    lua = lua5_1;-  };--  worldofgoo_demo = callPackage ../games/worldofgoo {-    demo = true;-  };--  worldofgoo = callPackage ../games/worldofgoo { };--  xboard =  callPackage ../games/xboard { };--  xconq = callPackage ../games/xconq {};--  # TODO: the corresponding nix file is missing-  # xracer = callPackage ../games/xracer { };--  xonotic = callPackage ../games/xonotic { };--  xskat = callPackage ../games/xskat { };--  xsokoban = builderDefsPackage (import ../games/xsokoban) {-    inherit (xlibs) libX11 xproto libXpm libXt;-  };--  zdoom = callPackage ../games/zdoom { };--  zod = callPackage ../games/zod { };--  zoom = callPackage ../games/zoom { };--  keen4 = callPackage ../games/keen4 { };--  zeroad = callPackage ../games/0ad { };--  ### DESKTOP ENVIRONMENTS--  cinnamon = recurseIntoAttrs rec {-    callPackage = newScope pkgs.cinnamon;-    inherit (gnome3) gnome_common libgnomekbd gnome-menus zenity;--    muffin = callPackage ../desktops/cinnamon/muffin.nix { } ;--    cinnamon-control-center = callPackage ../desktops/cinnamon/cinnamon-control-center.nix{ };--    cinnamon-settings-daemon = callPackage ../desktops/cinnamon/cinnamon-settings-daemon.nix{ };--    cinnamon-session = callPackage ../desktops/cinnamon/cinnamon-session.nix{ } ;--    cinnamon-desktop = callPackage ../desktops/cinnamon/cinnamon-desktop.nix { };--    cinnamon-translations = callPackage ../desktops/cinnamon/cinnamon-translations.nix { };--    cjs = callPackage ../desktops/cinnamon/cjs.nix { };-  };--  enlightenment = callPackage ../desktops/enlightenment { };--  e17 = recurseIntoAttrs (-    let callPackage = newScope pkgs.e17; in-    import ../desktops/e17 { inherit callPackage pkgs; }-  );--  e18 = recurseIntoAttrs (-    let callPackage = newScope pkgs.e18; in-    import ../desktops/e18 { inherit callPackage pkgs; }-  );--  gnome2 = callPackage ../desktops/gnome-2 {-    callPackage = pkgs.newScope pkgs.gnome2;-    self = pkgs.gnome2;-  }  // pkgs.gtkLibs // {-    # Backwards compatibility;-    inherit (pkgs) libsoup libwnck gtk_doc gnome_doc_utils;-  };--  gnome3 = recurseIntoAttrs (callPackage ../desktops/gnome-3/3.10 {-    callPackage = pkgs.newScope pkgs.gnome3;-    self = pkgs.gnome3;-  });--  gnome3_12 = recurseIntoAttrs (callPackage ../desktops/gnome-3/3.12 {-    callPackage = pkgs.newScope pkgs.gnome3_12;-  });--  gnome = recurseIntoAttrs gnome2;--  hsetroot = callPackage ../tools/X11/hsetroot { };--  kakasi = callPackage ../tools/text/kakasi { };--  kde4 = recurseIntoAttrs pkgs.kde412;--  kde4_next = recurseIntoAttrs( lib.lowPrioSet pkgs.kde412 );--  kde412 = kdePackagesFor (pkgs.kde412 // {-      eigen = eigen2;-      libusb = libusb1;-      libcanberra = libcanberra_kde;-    }) ../desktops/kde-4.12;--  kdePackagesFor = self: dir:-    let callPackageOrig = callPackage; in-    let-      callPackage = newScope self;-      kde4 = callPackageOrig dir {-        inherit callPackage callPackageOrig;-      };-    in kde4 // {-      inherit kde4;--      wrapper = callPackage ../build-support/kdewrapper {};--      recurseForRelease = true;--      akunambol = callPackage ../applications/networking/sync/akunambol { };--      amarok = callPackage ../applications/audio/amarok { };--      bangarang = callPackage ../applications/video/bangarang { };--      basket = callPackage ../applications/office/basket { };--      bluedevil = callPackage ../tools/bluetooth/bluedevil { };--      calligra = callPackage ../applications/office/calligra { };--      colord-kde = callPackage ../tools/misc/colord-kde { };--      digikam = if builtins.compareVersions "4.9" kde4.release == 1 then-          callPackage ../applications/graphics/digikam/2.nix { }-        else-          callPackage ../applications/graphics/digikam { };--      eventlist = callPackage ../applications/office/eventlist {};--      k3b = callPackage ../applications/misc/k3b { };--      kadu = callPackage ../applications/networking/instant-messengers/kadu { };--      kbibtex = callPackage ../applications/office/kbibtex { };--      kde_gtk_config = callPackage ../tools/misc/kde-gtk-config { };--      kde_wacomtablet = callPackage ../applications/misc/kde-wacomtablet { };--      kdeconnect = callPackage ../applications/misc/kdeconnect { };--      kdenlive = callPackage ../applications/video/kdenlive { mlt = mlt-qt4; };--      kdesvn = callPackage ../applications/version-management/kdesvn { };--      kdevelop = callPackage ../applications/editors/kdevelop { };--      kdevplatform = callPackage ../development/libraries/kdevplatform { };--      kdiff3 = callPackage ../tools/text/kdiff3 { };--      kile = callPackage ../applications/editors/kile { };--      kmplayer = callPackage ../applications/video/kmplayer { };--      kmymoney = callPackage ../applications/office/kmymoney { };--      kipi_plugins = callPackage ../applications/graphics/kipi-plugins { };--      konversation = callPackage ../applications/networking/irc/konversation { };--      kvirc = callPackage ../applications/networking/irc/kvirc { };--      krename = callPackage ../applications/misc/krename { };--      krusader = callPackage ../applications/misc/krusader { };--      ksshaskpass = callPackage ../tools/security/ksshaskpass {};--      ktorrent = callPackage ../applications/networking/p2p/ktorrent { };--      kuickshow = callPackage ../applications/graphics/kuickshow { };--      libalkimia = callPackage ../development/libraries/libalkimia { };--      libktorrent = callPackage ../development/libraries/libktorrent { };--      libkvkontakte = callPackage ../development/libraries/libkvkontakte { };--      liblikeback = callPackage ../development/libraries/liblikeback { };--      libmm-qt = callPackage ../development/libraries/libmm-qt { };--      libnm-qt = callPackage ../development/libraries/libnm-qt { };--      networkmanagement = callPackage ../tools/networking/networkmanagement { };--      partitionManager = callPackage ../tools/misc/partition-manager { };--      plasma-nm = callPackage ../tools/networking/plasma-nm { };--      polkit_kde_agent = callPackage ../tools/security/polkit-kde-agent { };--      psi = callPackage ../applications/networking/instant-messengers/psi { };--      qtcurve = callPackage ../misc/themes/qtcurve { };--      quassel = callPackage ../applications/networking/irc/quassel { dconf = gnome3.dconf; };--      quasselWithoutKDE = (self.quassel.override {-        withKDE = false;-        tag = "-without-kde";-      });--      quasselDaemon = (self.quassel.override {-        monolithic = false;-        daemon = true;-        tag = "-daemon";-      });--      quasselClient = (self.quassel.override {-        monolithic = false;-        client = true;-        tag = "-client";-      });--      quasselClientWithoutKDE = (self.quasselClient.override {-        withKDE = false;-        tag = "-client-without-kde";-      });--      rekonq = callPackage ../applications/networking/browsers/rekonq { };--      kwebkitpart = callPackage ../applications/networking/browsers/kwebkitpart { };--      rsibreak = callPackage ../applications/misc/rsibreak { };--      semnotes = callPackage ../applications/misc/semnotes { };--      skrooge = callPackage ../applications/office/skrooge { };--      telepathy = callPackage ../applications/networking/instant-messengers/telepathy/kde {};--      yakuake = callPackage ../applications/misc/yakuake { };--      zanshin = callPackage ../applications/office/zanshin { };--      kwooty = callPackage ../applications/networking/newsreaders/kwooty { };-    };--  redshift = callPackage ../applications/misc/redshift {-    inherit (xorg) libX11 libXrandr libxcb randrproto libXxf86vm-      xf86vidmodeproto;-    inherit (gnome) GConf;-    inherit (pythonPackages) pyxdg;-    geoclue = geoclue2;-  };--  oxygen_gtk = callPackage ../misc/themes/gtk2/oxygen-gtk { };--  gtk_engines = callPackage ../misc/themes/gtk2/gtk-engines { };--  gtk-engine-murrine = callPackage ../misc/themes/gtk2/gtk-engine-murrine { };--  gnome_themes_standard = gnome3.gnome_themes_standard;--  mate-icon-theme = callPackage ../misc/themes/mate-icon-theme { };--  mate-themes = callPackage ../misc/themes/mate-themes { };--  xfce = xfce4_10;-  xfce4_10 = recurseIntoAttrs (import ../desktops/xfce { inherit pkgs newScope; });---  ### SCIENCE--  ### SCIENCE/GEOMETRY--  drgeo = builderDefsPackage (import ../applications/science/geometry/drgeo) {-    inherit (gnome) libglade;-    inherit libxml2 perl intltool libtool pkgconfig gtk;-    guile = guile_1_8;-  };--  tetgen = callPackage ../applications/science/geometry/tetgen { };---  ### SCIENCE/BIOLOGY--  alliance = callPackage ../applications/science/electronics/alliance {-    motif = lesstif;-  };--  arb = callPackage ../applications/science/biology/arb {-    lesstif = lesstif93;-  };--  archimedes = callPackage ../applications/science/electronics/archimedes { };--  biolib = callPackage ../development/libraries/science/biology/biolib { };--  emboss = callPackage ../applications/science/biology/emboss { };--  mrbayes = callPackage ../applications/science/biology/mrbayes { };--  ncbiCTools = builderDefsPackage ../development/libraries/ncbi {-    inherit tcsh mesa lesstif;-    inherit (xlibs) libX11 libXaw xproto libXt libSM libICE-      libXmu libXext;-  };--  ncbi_tools = callPackage ../applications/science/biology/ncbi-tools { };--  paml = callPackage ../applications/science/biology/paml { };--  pal2nal = callPackage ../applications/science/biology/pal2nal { };--  plink = callPackage ../applications/science/biology/plink/default.nix { };---  ### SCIENCE/MATH--  arpack = callPackage ../development/libraries/science/math/arpack { };--  atlas = callPackage ../development/libraries/science/math/atlas {-    # The build process measures CPU capabilities and optimizes the-    # library to perform best on that particular machine. That is a-    # great feature, but it's of limited use with pre-built binaries-    # coming from a central build farm.-    tolerateCpuTimingInaccuracy = true;-  };--  blas = callPackage ../development/libraries/science/math/blas { };--  content = builderDefsPackage ../applications/science/math/content {-    inherit mesa lesstif;-    inherit (xlibs) libX11 libXaw xproto libXt libSM libICE-      libXmu libXext libXcursor;-  };--  jags = callPackage ../applications/science/math/jags { };--  liblapack = callPackage ../development/libraries/science/math/liblapack { };-  liblapack_3_5_0 = callPackage ../development/libraries/science/math/liblapack/3.5.0.nix { };--  liblbfgs = callPackage ../development/libraries/science/math/liblbfgs { };--  openblas = callPackage ../development/libraries/science/math/openblas { };-  openblas_0_2_10 = callPackage ../development/libraries/science/math/openblas/0.2.10.nix { -    liblapack = liblapack_3_5_0;-  };--  mathematica = callPackage ../applications/science/math/mathematica { };--  sage = callPackage ../applications/science/math/sage { };--  ### SCIENCE/MOLECULAR-DYNAMICS--  gromacs = callPackage ../applications/science/molecular-dynamics/gromacs {-    singlePrec = true;-    fftw = fftwSinglePrec;-    cmake = cmakeCurses;-  };--  gromacsDouble = lowPrio (callPackage ../applications/science/molecular-dynamics/gromacs {-    singlePrec = false;-    fftw = fftw;-    cmake = cmakeCurses;-  });---  ### SCIENCE/LOGIC--  abc-verifier = callPackage ../applications/science/logic/abc {};--  alt-ergo = callPackage ../applications/science/logic/alt-ergo {};--  coq = callPackage ../applications/science/logic/coq {-    inherit (ocamlPackages) findlib lablgtk;-    camlp5 = ocamlPackages.camlp5_transitional;-  };--  coq_HEAD = callPackage ../applications/science/logic/coq/HEAD.nix {-    inherit (ocamlPackages) findlib lablgtk;-    camlp5 = ocamlPackages.camlp5_transitional;-  };--  coq_8_3 = callPackage ../applications/science/logic/coq/8.3.nix {-    inherit (ocamlPackages) findlib lablgtk;-    camlp5 = ocamlPackages.camlp5_transitional;-  };--  cvc3 = callPackage ../applications/science/logic/cvc3 {};--  ekrhyper = callPackage ../applications/science/logic/ekrhyper {};--  eprover = callPackage ../applications/science/logic/eprover {-    texLive = texLiveAggregationFun {-      paths = [-        texLive texLiveExtra-      ];-    };-  };--  ginac = callPackage ../applications/science/math/ginac { };--  hol = callPackage ../applications/science/logic/hol { };--  hol_light = callPackage ../applications/science/logic/hol_light {-    inherit (ocamlPackages) findlib;-    camlp5 = ocamlPackages.camlp5_strict;-  };--  isabelle = import ../applications/science/logic/isabelle {-    inherit (pkgs) stdenv fetchurl nettools perl polyml;-    inherit (pkgs.emacs24Packages) proofgeneral;-  };--  iprover = callPackage ../applications/science/logic/iprover {};--  leo2 = callPackage ../applications/science/logic/leo2 {};--  logisim = callPackage ../applications/science/logic/logisim {};--  ltl2ba = callPackage ../applications/science/logic/ltl2ba {};--  matita = callPackage ../applications/science/logic/matita {-    ocaml = ocaml_3_11_2;-    inherit (ocamlPackages_3_11_2) findlib lablgtk ocaml_expat gmetadom ocaml_http-            lablgtkmathview ocaml_mysql ocaml_sqlite3 ocamlnet camlzip ocaml_pcre;-    ulex08 = ocamlPackages_3_11_2.ulex08.override { camlp5 = ocamlPackages_3_11_2.camlp5_5_transitional; };-  };--  matita_130312 = lowPrio (callPackage ../applications/science/logic/matita/130312.nix {-    inherit (ocamlPackages) findlib lablgtk ocaml_expat gmetadom ocaml_http-            ocaml_mysql ocamlnet ulex08 camlzip ocaml_pcre;-  });--  minisat = callPackage ../applications/science/logic/minisat {};--  opensmt = callPackage ../applications/science/logic/opensmt { };--  otter = callPackage ../applications/science/logic/otter {};--  picosat = callPackage ../applications/science/logic/picosat {};--  prooftree = callPackage ../applications/science/logic/prooftree {-    inherit (ocamlPackages) findlib lablgtk;-    camlp5 = ocamlPackages.camlp5_transitional;-  };--  prover9 = callPackage ../applications/science/logic/prover9 { };--  satallax = callPackage ../applications/science/logic/satallax {};--  spass = callPackage ../applications/science/logic/spass {};--  ssreflect = callPackage ../applications/science/logic/ssreflect {-    camlp5 = ocamlPackages.camlp5_transitional;-  };--  tptp = callPackage ../applications/science/logic/tptp {};--  twelf = callPackage ../applications/science/logic/twelf {-    smlnj = if stdenv.isDarwin-      then smlnjBootstrap-      else smlnj;-  };--  verifast = callPackage ../applications/science/logic/verifast {};--  why3 = callPackage ../applications/science/logic/why3 {};--  yices = callPackage ../applications/science/logic/yices {};--  z3 = callPackage ../applications/science/logic/z3 {};--  boolector   = boolector15;-  boolector15 = callPackage ../applications/science/logic/boolector {};-  boolector16 = lowPrio (callPackage ../applications/science/logic/boolector {-    useV16 = true;-  });--  ### SCIENCE / ELECTRONICS--  eagle = callPackage_i686 ../applications/science/electronics/eagle { };--  caneda = callPackage ../applications/science/electronics/caneda { };--  gtkwave = callPackage ../applications/science/electronics/gtkwave { };--  kicad = callPackage ../applications/science/electronics/kicad {-    wxGTK = wxGTK29;-  };--  ngspice = callPackage ../applications/science/electronics/ngspice { };--  qucs = callPackage ../applications/science/electronics/qucs { };--  xoscope = callPackage ../applications/science/electronics/xoscope { };---  ### SCIENCE / MATH--  ecm = callPackage ../applications/science/math/ecm { };--  eukleides = callPackage ../applications/science/math/eukleides {-    texinfo = texinfo4;-  };--  fricas = callPackage ../applications/science/math/fricas { };--  gap = callPackage ../applications/science/math/gap { };--  maxima = callPackage ../applications/science/math/maxima { };--  wxmaxima = callPackage ../applications/science/math/wxmaxima { };--  pari = callPackage ../applications/science/math/pari {};--  pspp = callPackage ../applications/science/math/pssp {-    inherit (gnome) libglade gtksourceview;-  };--  singular = callPackage ../applications/science/math/singular {};--  scilab = callPackage ../applications/science/math/scilab {-    withXaw3d = false;-    withTk = true;-    withGtk = false;-    withOCaml = true;-    withX = true;-  };--  msieve = callPackage ../applications/science/math/msieve { };--  weka = callPackage ../applications/science/math/weka { };--  yad = callPackage ../tools/misc/yad { };--  yacas = callPackage ../applications/science/math/yacas { };--  speedcrunch = callPackage ../applications/science/math/speedcrunch {-    qt = qt4;-    cmake = cmakeCurses;-  };---  ### SCIENCE / MISC--  boinc = callPackage ../applications/science/misc/boinc { };--  celestia = callPackage ../applications/science/astronomy/celestia {-    lua = lua5_1;-    inherit (xlibs) libXmu;-    inherit (pkgs.gnome) gtkglext;-  };--  fityk = callPackage ../applications/science/misc/fityk { };--  gravit = callPackage ../applications/science/astronomy/gravit { };--  golly = callPackage ../applications/science/misc/golly { };--  megam = callPackage ../applications/science/misc/megam { };--  root = callPackage ../applications/science/misc/root { };--  simgrid = callPackage ../applications/science/misc/simgrid { };--  spyder = callPackage ../applications/science/spyder {-    inherit (pythonPackages) pyflakes rope sphinx numpy scipy matplotlib; # recommended-    inherit (pythonPackages) ipython pep8; # optional-    inherit pylint;-  };--  stellarium = callPackage ../applications/science/astronomy/stellarium { };--  tulip = callPackage ../applications/science/misc/tulip { };--  vite = callPackage ../applications/science/misc/vite { };--  xplanet = callPackage ../applications/science/astronomy/xplanet { };--  ### MISC--  atari800 = callPackage ../misc/emulators/atari800 { };--  ataripp = callPackage ../misc/emulators/atari++ { };--  auctex = callPackage ../tools/typesetting/tex/auctex { };--  beep = callPackage ../misc/beep { };--  cups = callPackage ../misc/cups { libusb = libusb1; };--  cups_pdf_filter = callPackage ../misc/cups/pdf-filter.nix { };--  gutenprint = callPackage ../misc/drivers/gutenprint { };--  gutenprintBin = callPackage ../misc/drivers/gutenprint/bin.nix { };--  cupsBjnp = callPackage ../misc/cups/drivers/cups-bjnp { };--  darcnes = callPackage ../misc/emulators/darcnes { };--  dbacl = callPackage ../tools/misc/dbacl { };--  dblatex = callPackage ../tools/typesetting/tex/dblatex {-    enableAllFeatures = false;-  };--  dblatexFull = appendToName "full" (dblatex.override {-    enableAllFeatures = true;-  });--  dosbox = callPackage ../misc/emulators/dosbox { };--  dpkg = callPackage ../tools/package-management/dpkg { };--  ekiga = newScope pkgs.gnome ../applications/networking/instant-messengers/ekiga { };--  emulationstation = callPackage ../misc/emulators/emulationstation { };--  electricsheep = callPackage ../misc/screensavers/electricsheep { };--  fakenes = callPackage ../misc/emulators/fakenes { };--  fceux = callPackage ../misc/emulators/fceux { };--  foldingathome = callPackage ../misc/foldingathome { };--  foo2zjs = callPackage ../misc/drivers/foo2zjs {};--  foomatic_filters = callPackage ../misc/drivers/foomatic-filters {};--  freestyle = callPackage ../misc/freestyle { };--  gajim = callPackage ../applications/networking/instant-messengers/gajim { };--  gammu = callPackage ../applications/misc/gammu { };--  gensgs = callPackage_i686 ../misc/emulators/gens-gs { };--  ghostscript = callPackage ../misc/ghostscript {-    x11Support = false;-    cupsSupport = config.ghostscript.cups or (!stdenv.isDarwin);-    gnuFork = config.ghostscript.gnu or false;-  };--  ghostscriptX = appendToName "with-X" (ghostscript.override {-    x11Support = true;-  });--  guix = callPackage ../tools/package-management/guix { };--  gxemul = callPackage ../misc/gxemul { };--  hatari = callPackage ../misc/emulators/hatari { };--  hplip = callPackage ../misc/drivers/hplip { };--  hplipWithPlugin = hplip.override { withPlugin = true; };--  # using the new configuration style proposal which is unstable-  jack1 = callPackage ../misc/jackaudio/jack1.nix { };--  jack2 = callPackage ../misc/jackaudio { };--  keynav = callPackage ../tools/X11/keynav { };--  lazylist = callPackage ../tools/typesetting/tex/lazylist { };--  lilypond = callPackage ../misc/lilypond { guile = guile_1_8; };--  martyr = callPackage ../development/libraries/martyr { };--  maven = maven3;-  maven3 = callPackage ../misc/maven { jdk = openjdk; };--  mess = callPackage ../misc/emulators/mess {-    inherit (pkgs.gnome) GConf;-  };--  mupen64plus = callPackage ../misc/emulators/mupen64plus { };--  mupen64plus1_5 = callPackage ../misc/emulators/mupen64plus/1.5.nix { };--  nix = nixStable;--  nixStable = callPackage ../tools/package-management/nix {-    storeDir = config.nix.storeDir or "/nix/store";-    stateDir = config.nix.stateDir or "/nix/var";-  };--  nixUnstable = callPackage ../tools/package-management/nix/unstable.nix {-    storeDir = config.nix.storeDir or "/nix/store";-    stateDir = config.nix.stateDir or "/nix/var";-  };--  nixops = callPackage ../tools/package-management/nixops { };--  nix-prefetch-scripts = callPackage ../tools/package-management/nix-prefetch-scripts { };--  nix-repl = callPackage ../tools/package-management/nix-repl { };--  nut = callPackage ../applications/misc/nut { };--  solfege = callPackage ../misc/solfege {-      pysqlite = pkgs.pythonPackages.sqlite3;-  };--  disnix = callPackage ../tools/package-management/disnix { };--  dysnomia = callPackage ../tools/package-management/disnix/dysnomia {-    enableApacheWebApplication = config.disnix.enableApacheWebApplication or false;-    enableAxis2WebService = config.disnix.enableAxis2WebService or false;-    enableEjabberdDump = config.disnix.enableEjabberdDump or false;-    enableMySQLDatabase = config.disnix.enableMySQLDatabase or false;-    enablePostgreSQLDatabase = config.disnix.enablePostgreSQLDatabase or false;-    enableSubversionRepository = config.disnix.enableSubversionRepository or false;-    enableTomcatWebApplication = config.disnix.enableTomcatWebApplication or false;-  };--  disnixos = callPackage ../tools/package-management/disnix/disnixos { };--  DisnixWebService = callPackage ../tools/package-management/disnix/DisnixWebService { };--  latex2html = callPackage ../tools/typesetting/tex/latex2html/default.nix {-    tex = tetex;-  };--  lkproof = callPackage ../tools/typesetting/tex/lkproof { };--  mysqlWorkbench = newScope gnome ../applications/misc/mysql-workbench {-    lua = lua5;-    inherit (pythonPackages) pexpect paramiko;-  };--  robomongo = callPackage ../applications/misc/robomongo { };--  opkg = callPackage ../tools/package-management/opkg { };--  pgadmin = callPackage ../applications/misc/pgadmin { };--  pgf = pgf2;--  # Keep the old PGF since some documents don't render properly with-  # the new one.-  pgf1 = callPackage ../tools/typesetting/tex/pgf/1.x.nix { };--  pgf2 = callPackage ../tools/typesetting/tex/pgf/2.x.nix { };--  pgfplots = callPackage ../tools/typesetting/tex/pgfplots { };--  pjsip = callPackage ../applications/networking/pjsip { };--  polytable = callPackage ../tools/typesetting/tex/polytable { };--  PPSSPP = callPackage ../misc/emulators/ppsspp { };--  uae = callPackage ../misc/emulators/uae { };--  putty = callPackage ../applications/networking/remote/putty { };--  retroarch = callPackage ../misc/emulators/retroarch { };--  rssglx = callPackage ../misc/screensavers/rss-glx { };--  xlockmore = callPackage ../misc/screensavers/xlockmore { };--  samsungUnifiedLinuxDriver = import ../misc/cups/drivers/samsung {-    inherit fetchurl stdenv;-    inherit cups ghostscript glibc patchelf;-    gcc = import ../development/compilers/gcc/4.4 {-      inherit stdenv fetchurl gmp mpfr noSysDirs gettext which;-      texinfo = texinfo4;-      profiledCompiler = true;-    };-  };--  saneBackends = callPackage ../applications/graphics/sane/backends.nix {-    gt68xxFirmware = config.sane.gt68xxFirmware or null;-    snapscanFirmware = config.sane.snapscanFirmware or null;-    hotplugSupport = config.sane.hotplugSupport or true;-    libusb = libusb1;-  };--  saneBackendsGit = callPackage ../applications/graphics/sane/backends-git.nix {-    gt68xxFirmware = config.sane.gt68xxFirmware or null;-    snapscanFirmware = config.sane.snapscanFirmware or null;-    hotplugSupport = config.sane.hotplugSupport or true;-  };--  mkSaneConfig = callPackage ../applications/graphics/sane/config.nix { };--  saneFrontends = callPackage ../applications/graphics/sane/frontends.nix { };--  seafile-shared = callPackage ../misc/seafile-shared { };--  slock = callPackage ../misc/screensavers/slock { };--  sourceAndTags = import ../misc/source-and-tags {-    inherit pkgs stdenv unzip lib ctags;-    hasktags = haskellPackages.hasktags;-  };--  splix = callPackage ../misc/cups/drivers/splix { };--  streamripper = callPackage ../applications/audio/streamripper { };--  sqsh = callPackage ../development/tools/sqsh { };--  tetex = callPackage ../tools/typesetting/tex/tetex { libpng = libpng12; };--  tex4ht = callPackage ../tools/typesetting/tex/tex4ht { };--  texFunctions = import ../tools/typesetting/tex/nix pkgs;--  texLive = builderDefsPackage (import ../tools/typesetting/tex/texlive) {-    inherit builderDefs zlib bzip2 ncurses libpng ed lesstif ruby potrace-      gd t1lib freetype icu perl expat curl xz pkgconfig zziplib texinfo-      libjpeg bison python fontconfig flex poppler libpaper graphite2-      makeWrapper;-    inherit (xlibs) libXaw libX11 xproto libXt libXpm-      libXmu libXext xextproto libSM libICE;-    ghostscript = ghostscriptX;-    harfbuzz = harfbuzz.override {-      withIcu = true; withGraphite2 = true;-    };-  };--  texLiveFull = lib.setName "texlive-full" (texLiveAggregationFun {-    paths = [ texLive texLiveExtra lmodern texLiveCMSuper texLiveLatexXColor-              texLivePGF texLiveBeamer texLiveModerncv tipa tex4ht texinfo-              texLiveModerntimeline ];-  });--  /* Look in configurations/misc/raskin.nix for usage example (around revisions-  where TeXLive was added)--  (texLiveAggregationFun {-    paths = [texLive texLiveExtra texLiveCMSuper-      texLiveBeamer-    ];-  })--  You need to use texLiveAggregationFun to regenerate, say, ls-R (TeX-related file list)-  Just installing a few packages doesn't work.-  */-  texLiveAggregationFun = params:-    builderDefsPackage (import ../tools/typesetting/tex/texlive/aggregate.nix)-      ({inherit poppler perl makeWrapper;} // params);--  texDisser = callPackage ../tools/typesetting/tex/disser {};--  texLiveContext = builderDefsPackage (import ../tools/typesetting/tex/texlive/context.nix) {-    inherit texLive;-  };--  texLiveExtra = builderDefsPackage (import ../tools/typesetting/tex/texlive/extra.nix) {-    inherit texLive xz;-  };--  texLiveCMSuper = builderDefsPackage (import ../tools/typesetting/tex/texlive/cm-super.nix) {-    inherit texLive;-  };--  texLiveLatexXColor = builderDefsPackage (import ../tools/typesetting/tex/texlive/xcolor.nix) {-    inherit texLive;-  };--  texLivePGF = builderDefsPackage (import ../tools/typesetting/tex/texlive/pgf.nix) {-    inherit texLiveLatexXColor texLive;-  };--  texLiveBeamer = builderDefsPackage (import ../tools/typesetting/tex/texlive/beamer.nix) {-    inherit texLiveLatexXColor texLivePGF texLive;-  };--  texLiveModerncv = builderDefsPackage (import ../tools/typesetting/tex/texlive/moderncv.nix) {-    inherit texLive unzip;-  };--  texLiveModerntimeline = builderDefsPackage (import ../tools/typesetting/tex/texlive/moderntimeline.nix) {-    inherit texLive unzip;-  };--  thermald = callPackage ../tools/system/thermald { };--  thinkfan = callPackage ../tools/system/thinkfan { };--  vice = callPackage ../misc/emulators/vice {-    libX11 = xlibs.libX11;-    giflib = giflib_4_1;-  };--  viewnior = callPackage ../applications/graphics/viewnior { };--  vimPlugins = recurseIntoAttrs (callPackage ../misc/vim-plugins { });--  vimprobable2 = callPackage ../applications/networking/browsers/vimprobable2 {-    webkit = webkitgtk2;-  };--  vimprobable2Wrapper = wrapFirefox-    { browser = vimprobable2; browserName = "vimprobable2"; desktopName = "Vimprobable2";-    };--  vimb = callPackage ../applications/networking/browsers/vimb {-    webkit = webkitgtk2;-  };--  vimbWrapper = wrapFirefox {-    browser = vimb;-    browserName = "vimb";-    desktopName = "Vimb";-  };--  VisualBoyAdvance = callPackage ../misc/emulators/VisualBoyAdvance { };--  # Wine cannot be built in 64-bit; use a 32-bit build instead.-  wineStable = callPackage_i686 ../misc/emulators/wine/stable.nix {-    bison = bison2;-  };--  wineUnstable = lowPrio (callPackage_i686 ../misc/emulators/wine/unstable.nix {-    bison = bison2;-  });--  wine = wineStable;--  winetricks = callPackage ../misc/emulators/wine/winetricks.nix {-    inherit (gnome2) zenity;-  };--  wxmupen64plus = callPackage ../misc/emulators/wxmupen64plus { };--  x2x = callPackage ../tools/X11/x2x { };--  xboxdrv = callPackage ../misc/drivers/xboxdrv { };--  xinput_calibrator = callPackage ../tools/X11/xinput_calibrator {-    inherit (xlibs) libXi inputproto;-  };--  xosd = callPackage ../misc/xosd { };--  xsane = callPackage ../applications/graphics/sane/xsane.nix {-    libpng = libpng12;-    saneBackends = saneBackends;-  };--  yafc = callPackage ../applications/networking/yafc { };--  yandex-disk = callPackage ../tools/filesystems/yandex-disk { };--  myEnvFun = import ../misc/my-env {-    inherit substituteAll pkgs;-    inherit (stdenv) mkDerivation;-  };--  # patoline requires a rather large ocaml compilation environment.-  # this is why it is build as an environment and not just a normal package.-  # remark : the emacs mode is also installed, but you have to adjust your load-path.-  PatolineEnv = pack: myEnvFun {-      name = "patoline";-      buildInputs = [ stdenv ncurses mesa freeglut libzip gcc-                                   pack.ocaml pack.findlib pack.camomile-                                   pack.dypgen pack.ocaml_sqlite3 pack.camlzip-                                   pack.lablgtk pack.camlimages pack.ocaml_cairo-                                   pack.lablgl pack.ocamlnet pack.cryptokit-                                   pack.ocaml_pcre pack.patoline-                                   ];-    # this is to circumvent the bug with libgcc_s.so.1 which is-    # not found when using thread-    extraCmds = ''-       LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${gcc.gcc}/lib-       export LD_LIBRARY_PATH-    '';-  };--  patoline = PatolineEnv ocamlPackages_4_00_1;--  znc = callPackage ../applications/networking/znc { };--  zncModules = recurseIntoAttrs (-    callPackage ../applications/networking/znc/modules.nix { }-  );--  zsnes = callPackage_i686 ../misc/emulators/zsnes { };--  snes9x-gtk = callPackage ../misc/emulators/snes9x-gtk { };--  misc = import ../misc/misc.nix { inherit pkgs stdenv; };--  bullet = callPackage ../development/libraries/bullet {};--  dart = callPackage ../development/interpreters/dart { };--  httrack = callPackage ../tools/backup/httrack { };--  mg = callPackage ../applications/editors/mg { };---  # Attributes for backward compatibility.-  adobeReader = adobe-reader;-  asciidocFull = asciidoc-full;  # added 2014-06-22-  lttngTools = lttng-tools;  # added 2014-07-31-  lttngUst = lttng-ust;  # added 2014-07-31---}; in self; in pkgs
− data/simple-pretty.nix
@@ -1,28 +0,0 @@-{-  a = 3;-  b = 4;-  c = {-    inherit ({ a = 3; }) a;-    e = 4;-    f = 5;-  };-  d = if true-    then { a = 1; b = 2; c = 3; }-    else if false-      then null-      else {-        inherit ({-          a = 3;-          b = 4;-          cdefgads = 5;-        }) cdefgads;-      };-  f = x: x;-  list = [-    1-    2-    (f 3)-    ((x: x) 3)-    [ 4 5 ]-  ];-}
− data/simple.nix
@@ -1,1 +0,0 @@-{ a = 3; b = 4; c = { inherit ({a = 3; }) a; e = 4; f = 5; }; d = if true then { a = 1; b = 2; c = 3; } else if false then null else { inherit ({a = 3; b = 4; cdefgads = 5; }) cdefgads; }; f = x: x; list = [ 1 2 (f 3) ((x: x) 3) [ 4 5 ] ]; }
hnix.cabal view
@@ -1,138 +1,291 @@-Name:                hnix-Version:             0.4.0-Synopsis:            Haskell implementation of the Nix language-Description:-  Haskell implementation of the Nix language.+-- This file has been generated from package.yaml by hpack version 0.27.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: 98a178891c03317cef1e5f7a984b3d7156bb38b0ca183bea91bab9acdaff4fb3 -License:             BSD3-License-file:        LICENSE-Author:              John Wiegley-Maintainer:          johnw@newartisans.com-Category:            Data, Nix-Build-type:          Simple-Cabal-version:       >=1.10-Homepage:            http://github.com/jwiegley/hnix+name:           hnix+version:        0.5.0+synopsis:       Haskell implementation of the Nix language+description:    Haskell implementation of the Nix language.+category:       System, Data, Nix+homepage:       https://github.com/jwiegley/hnix#readme+bug-reports:    https://github.com/jwiegley/hnix/issues+author:         John Wiegley+maintainer:     johnw@newartisans.com+license:        BSD3+license-file:   LICENSE+build-type:     Simple+cabal-version:  >= 1.10 -Extra-source-files: data/*.nix+extra-source-files:+    README.md -Flag Parsec-  Description: Use parsec instead of Trifecta-  Default: False+source-repository head+  type: git+  location: https://github.com/jwiegley/hnix -Library-  Default-language: Haskell2010-  Exposed-modules:-    Nix.Atoms-    Nix.Eval-    Nix.Parser-    Nix.Expr-    Nix.Pretty-    Nix.Parser.Operators-    Nix.StringOperations-  Other-modules:-    Nix.Parser.Library-    Nix.Expr.Types-    Nix.Expr.Types.Annotated-    Nix.Expr.Shorthands-  Default-extensions:-    DataKinds-    DeriveDataTypeable-    DeriveFunctor-    DeriveGeneric-    FlexibleContexts-    FlexibleInstances-    GADTs-    KindSignatures-    LambdaCase-    MultiWayIf-    NoImplicitPrelude-    OverloadedStrings-    PatternGuards-    RankNTypes-    TupleSections-  Build-depends:-      base                     >= 4.9          && < 5+flag optimize+  description: Enable all optimization flags+  manual: True+  default: False++flag profiling+  description: Enable profiling+  manual: True+  default: False++flag tracing+  description: Enable full debug tracing+  manual: True+  default: False++library+  exposed-modules:+      Nix+      Nix.Atoms+      Nix.Builtins+      Nix.Cache+      Nix.Context+      Nix.Convert+      Nix.Effects+      Nix.Eval+      Nix.Exec+      Nix.Expr+      Nix.Expr.Shorthands+      Nix.Expr.Types+      Nix.Expr.Types.Annotated+      Nix.Frames+      Nix.Lint+      Nix.Normal+      Nix.Options+      Nix.Parser+      Nix.Pretty+      Nix.Reduce+      Nix.Render+      Nix.Render.Frame+      Nix.Scope+      Nix.Strings+      Nix.TH+      Nix.Thunk+      Nix.Type.Assumption+      Nix.Type.Env+      Nix.Type.Infer+      Nix.Type.Type+      Nix.Utils+      Nix.Value+      Nix.XML+  other-modules:+      Paths_hnix+  hs-source-dirs:+      src+  ghc-options: -Wall+  build-depends:+      aeson     , ansi-wl-pprint+    , array >=0.4 && <0.6+    , base >=4.9 && <5+    , binary+    , bytestring     , containers-    , deriving-compat >= 0.3 && < 0.4-    , text-    , transformers-    , parsers >= 0.10-    , unordered-containers     , data-fix-    , deepseq-    , semigroups >= 0.18 && < 0.19+    , deepseq >=1.4.2 && <1.5+    , deriving-compat >=0.3 && <0.5+    , directory+    , exceptions+    , filepath+    , hashing+    , http-client+    , http-client-tls+    , http-types+    , lens-family+    , lens-family-core+    , lens-family-th+    , logict+    , megaparsec >=6.0 && <6.6+    , monadlist+    , mtl+    , optparse-applicative+    , process     , regex-tdfa     , regex-tdfa-text-  if flag(parsec)-    Cpp-options: -DUSE_PARSEC-    Build-depends: parsec+    , scientific+    , semigroups >=0.18 && <0.19+    , split+    , syb+    , template-haskell+    , text+    , these+    , time+    , transformers+    , unix+    , unordered-containers >=0.2.9 && <0.3+    , vector+    , xml+  if !impl(ghcjs)+    build-depends:+        base16-bytestring+      , cryptohash-md5+      , cryptohash-sha1+      , cryptohash-sha256+      , cryptohash-sha512+      , serialise+  if impl(ghcjs)+    build-depends:+        hashable >=1.2.4 && <1.3   else-    Build-depends: trifecta-  ghc-options: -Wall -fno-warn-name-shadowing+    exposed-modules:+        Nix.Options.Parser+    build-depends:+        hashable >=1.2.5 && <1.3+      , haskeline+      , pretty-show+  default-language: Haskell2010 -Executable hnix-  Default-language: Haskell2010-  Main-is: Main.hs-  Hs-source-dirs: main-  Default-extensions:-    DataKinds-    DeriveDataTypeable-    DeriveFunctor-    DeriveGeneric-    FlexibleContexts-    FlexibleInstances-    GADTs-    KindSignatures-    LambdaCase-    MultiWayIf-    OverloadedStrings-    PatternGuards-    RankNTypes-    TupleSections-  Build-depends:-      base                     >= 4.3          && < 5-    , hnix-    , containers+executable hnix+  main-is: Main.hs+  other-modules:+      Repl+      Paths_hnix+  hs-source-dirs:+      main+  ghc-options: -Wall+  build-depends:+      aeson     , ansi-wl-pprint+    , base >=4.9 && <5+    , bytestring+    , containers     , data-fix-    , deepseq-  Ghc-options: -Wall+    , deepseq >=1.4.2 && <1.5+    , exceptions+    , filepath+    , hashing+    , haskeline+    , hnix+    , mtl+    , optparse-applicative+    , pretty-show+    , repline+    , template-haskell+    , text+    , time+    , transformers+    , unordered-containers >=0.2.9 && <0.3+  if !impl(ghcjs)+    build-depends:+        base16-bytestring+      , cryptohash-md5+      , cryptohash-sha1+      , cryptohash-sha256+      , cryptohash-sha512+      , serialise+  if impl(ghcjs)+    buildable: False+  else+    buildable: True+  default-language: Haskell2010 -Test-suite hnix-tests-  Type: exitcode-stdio-1.0-  Hs-source-dirs: tests-  Default-language: Haskell2010-  Main-is: Main.hs-  Other-modules:-    ParserTests-    EvalTests-    ShorthandTests-    PrettyTests-  Build-depends:-      base >= 4.3 && < 5+test-suite hnix-tests+  type: exitcode-stdio-1.0+  main-is: Main.hs+  other-modules:+      EvalTests+      NixLanguageTests+      ParserTests+      PrettyParseTests+      PrettyTests+      TestCommon+      Paths_hnix+  hs-source-dirs:+      tests+  ghc-options: -Wall -threaded+  build-depends:+      Diff+    , Glob+    , QuickCheck+    , ansi-wl-pprint+    , base >=4.9 && <5+    , bytestring     , containers-    , text     , data-fix+    , deepseq >=1.4.2 && <1.5+    , directory+    , exceptions+    , filepath+    , generic-random+    , hashing     , hnix+    , interpolate+    , megaparsec+    , mtl+    , optparse-applicative+    , pretty-show+    , process+    , quickcheck-instances+    , split     , tasty-    , tasty-th     , tasty-hunit+    , tasty-quickcheck+    , tasty-th+    , template-haskell+    , text+    , time+    , transformers+    , unix+    , unordered-containers >=0.2.9 && <0.3+  if !impl(ghcjs)+    build-depends:+        base16-bytestring+      , cryptohash-md5+      , cryptohash-sha1+      , cryptohash-sha256+      , cryptohash-sha512+      , serialise+  if impl(ghcjs)+    buildable: False+  else+    buildable: True+  default-language: Haskell2010 -Benchmark hnix-benchmarks-  Type: exitcode-stdio-1.0-  Hs-source-dirs: benchmarks-  Default-language: Haskell2010-  Main-is: Main.hs-  Other-modules:-    ParserBench-  Build-depends:-      base >= 4.3 && < 5+benchmark hnix-benchmarks+  type: exitcode-stdio-1.0+  main-is: Main.hs+  other-modules:+      ParserBench+      Paths_hnix+  hs-source-dirs:+      benchmarks+  ghc-options: -Wall+  build-depends:+      ansi-wl-pprint+    , base >=4.9 && <5+    , bytestring     , containers-    , text-    , hnix     , criterion--source-repository head-  type:     git-  location: git://github.com/jwiegley/hnix.git+    , data-fix+    , deepseq >=1.4.2 && <1.5+    , exceptions+    , filepath+    , hashing+    , hnix+    , mtl+    , optparse-applicative+    , template-haskell+    , text+    , time+    , transformers+    , unordered-containers >=0.2.9 && <0.3+  if !impl(ghcjs)+    build-depends:+        base16-bytestring+      , cryptohash-md5+      , cryptohash-sha1+      , cryptohash-sha256+      , cryptohash-sha512+      , serialise+  if impl(ghcjs)+    buildable: False+  else+    buildable: True+  default-language: Haskell2010
main/Main.hs view
@@ -1,38 +1,221 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+ module Main where -import Nix.Parser-import Nix.Pretty-import Nix.Expr+import qualified Control.DeepSeq as Deep+import qualified Control.Exception as Exc+import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.IO.Class+-- import           Control.Monad.ST+import qualified Data.Aeson.Encoding as A+import qualified Data.Aeson.Text as A+import qualified Data.HashMap.Lazy as M+import qualified Data.Map as Map+import           Data.List (sortOn)+import           Data.Maybe (fromJust)+import           Data.Time+import qualified Data.Text as Text+import qualified Data.Text.IO as Text+import qualified Data.Text.Lazy.Encoding as TL+import qualified Data.Text.Lazy.IO as TL+import           Nix+import           Nix.Convert+import qualified Nix.Eval as Eval+-- import           Nix.Lint+import           Nix.Options.Parser+import qualified Nix.Type.Env as Env+import qualified Nix.Type.Infer as HM+import           Nix.Utils+import           Options.Applicative hiding (ParserResult(..))+import qualified Repl+import           System.FilePath+import           System.IO+import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))+import qualified Text.Show.Pretty as PS -import System.Environment-import System.IO-import Text.PrettyPrint.ANSI.Leijen+main :: IO ()+main = do+    time <- liftIO getCurrentTime+    opts <- execParser (nixOptionsInfo time)+    runLazyM opts $ case readFrom opts of+        Just path -> do+            let file = addExtension (dropExtension path) "nix"+            process opts (Just file) =<< liftIO (readCache path)+        Nothing -> case expression opts of+            Just s -> handleResult opts Nothing (parseNixTextLoc s)+            Nothing  -> case fromFile opts of+                Just "-" ->+                    mapM_ (processFile opts)+                        =<< (lines <$> liftIO getContents)+                Just path ->+                    mapM_ (processFile opts)+                        =<< (lines <$> liftIO (readFile path))+                Nothing -> case filePaths opts of+                    [] -> Repl.shell (pure ())+                    ["-"] ->+                        handleResult opts Nothing . parseNixTextLoc+                            =<< liftIO Text.getContents+                    paths ->+                        mapM_ (processFile opts) paths+  where+    processFile opts path = do+        eres <- parseNixFileLoc path+        handleResult opts (Just path) eres -nix :: FilePath -> IO ()-nix path = parseNixFile path >>= displayNExpr+    handleResult opts mpath = \case+        Failure err ->+            (if ignoreErrors opts+             then liftIO . hPutStrLn stderr+             else errorWithoutStackTrace) $ "Parse failed: " ++ show err -nixString :: String -> IO ()-nixString = displayNExpr . parseNixString+        Success expr -> do+            when (check opts) $ do+                expr' <- liftIO (reduceExpr mpath expr)+                case HM.inferTop Env.empty [("it", stripAnnotation expr')] of+                    Left err ->+                        errorWithoutStackTrace $ "Type error: " ++ PS.ppShow err+                    Right ty ->+                        liftIO $ putStrLn $ "Type of expression: "+                            ++ PS.ppShow (fromJust (Map.lookup "it" (Env.types ty))) -displayNExpr :: Result NExpr -> IO ()-displayNExpr = \case-  Success n -> displayIO stdout $ renderPretty 0.4 80 (prettyNix n)-  Failure e -> hPutStrLn stderr $ "Parse failed: " ++ show e+                -- liftIO $ putStrLn $ runST $+                --     runLintM opts . renderSymbolic =<< lint opts expr -main :: IO ()-main = do-  let usageStr = "Parses a nix file and prints to stdout.\n\-                 \\n\-                 \Usage:\n\-                 \  hnix --help\n\-                 \  hnix <path>\n\-                 \  hnix --expr <expr>\n"-  let argErr msg = error $ "Invalid arguments: " ++ msg ++ "\n" ++ usageStr-  getArgs >>= \case-    "--help":_ -> putStrLn usageStr-    "--expr":expr:_ -> nixString expr-    "--expr":_ -> argErr "Provide an expression."-    ('-':_):_ -> argErr "Provide a path to a nix file."-    path:_ -> nix path-    _ -> argErr "Provide a path to a nix file."+            catch (process opts mpath expr) $ \case+                NixException frames ->+                    errorWithoutStackTrace . show+                        =<< renderFrames @(NThunk (Lazy IO)) frames++            when (repl opts) $ Repl.shell (pure ())++    process opts mpath expr+        | evaluate opts, tracing opts =+              evaluateExpression mpath+                  Nix.nixTracingEvalExprLoc printer expr++        | evaluate opts, Just path <- reduce opts =+              evaluateExpression mpath (reduction path) printer expr++        | evaluate opts, not (null (arg opts) && null (argstr opts)) =+              evaluateExpression mpath+                  Nix.nixEvalExprLoc printer expr++        | evaluate opts =+              processResult printer =<< Nix.nixEvalExprLoc mpath expr++        | xml opts =+              error "Rendering expression trees to XML is not yet implemented"++        | json opts =+              liftIO $ TL.putStrLn $+                  A.encodeToLazyText (stripAnnotation expr)++        | verbose opts >= DebugInfo =+              liftIO $ putStr $ PS.ppShow $ stripAnnotation expr++        | cache opts, Just path <- mpath =+              liftIO $ writeCache (addExtension (dropExtension path) "nixc") expr++        | parseOnly opts =+              void $ liftIO $ Exc.evaluate $ Deep.force expr++        | otherwise =+              liftIO $ displayIO stdout+                  . renderPretty 0.4 80+                  . prettyNix+                  . stripAnnotation $ expr+      where+        printer :: forall e m. (MonadNix e m, MonadIO m, Typeable m)+                => NValue m -> m ()+        printer+            | finder opts =+              fromValue @(AttrSet (NThunk m)) >=> findAttrs+            | xml opts =+              liftIO . putStrLn . toXML <=< normalForm+            | json opts =+              liftIO . TL.putStrLn+                     . TL.decodeUtf8+                     . A.encodingToLazyByteString+                     . toEncodingSorted+                     <=< fromNix+            | normalize opts =+              liftIO . print . prettyNValueNF <=< normalForm+            | values opts  =+              liftIO . print <=< prettyNValueProv+            | otherwise  =+              liftIO . print <=< prettyNValue+          where+            findAttrs = go ""+              where+                go prefix s = do+                    xs <- forM (sortOn fst (M.toList s))+                        $ \(k, nv@(NThunk _ t)) -> case t of+                            Value v -> pure (k, Just v)+                            Thunk _ _ ref -> do+                                let path = prefix ++ Text.unpack k+                                    (_, descend) = filterEntry path k+                                val <- readVar ref+                                case val of+                                    Computed _ -> pure (k, Nothing)+                                    _ | descend   -> (k,) <$> forceEntry path nv+                                      | otherwise -> pure (k, Nothing)++                    forM_ xs $ \(k, mv) -> do+                        let path = prefix ++ Text.unpack k+                            (report, descend) = filterEntry path k+                        when report $ do+                            liftIO $ putStrLn path+                            when descend $ case mv of+                                Nothing -> return ()+                                Just v -> case v of+                                    NVSet s' _ -> go (path ++ ".") s'+                                    _ -> return ()+                  where+                    filterEntry path k = case (path, k) of+                        ("stdenv", "stdenv")           -> (True,  True)+                        (_,        "stdenv")           -> (False, False)+                        (_,        "out")              -> (True,  False)+                        (_,        "src")              -> (True,  False)+                        (_,        "mirrorsFile")      -> (True,  False)+                        (_,        "buildPhase")       -> (True,  False)+                        (_,        "builder")          -> (False,  False)+                        (_,        "drvPath")          -> (False,  False)+                        (_,        "outPath")          -> (False,  False)+                        (_,        "__impureHostDeps") -> (False,  False)+                        (_,        "__sandboxProfile") -> (False,  False)+                        ("pkgs",   "pkgs")             -> (True,  True)+                        (_,        "pkgs")             -> (False, False)+                        (_,        "drvAttrs")         -> (False, False)+                        _ -> (True, True)++                    forceEntry k v = catch (Just <$> force v pure)+                        $ \(NixException frames) -> do+                              liftIO . putStrLn+                                     . ("Exception forcing " ++)+                                     . (k ++)+                                     . (": " ++) . show+                                  =<< renderFrames @(NThunk (Lazy IO)) frames+                              return Nothing++    reduction path mp x = do+        eres <- Nix.withNixContext mp $+            Nix.reducingEvalExpr (Eval.eval . annotated . getCompose) mp x+        handleReduced path eres++    handleReduced :: (MonadThrow m, MonadIO m)+                  => FilePath+                  -> (NExprLoc, Either SomeException (NValue m))+                  -> m (NValue m)+    handleReduced path (expr', eres) = do+        liftIO $ do+            putStrLn $ "Wrote winnowed expression tree to " ++ path+            writeFile path $ show $ prettyNix (stripAnnotation expr')+        case eres of+            Left err -> throwM err+            Right v  -> return v
+ main/Repl.hs view
@@ -0,0 +1,196 @@+{- This code was authored by:++     Stephen Diehl+     Kwang Yul Seo <kwangyul.seo@gmail.com>++   It was made available under the MIT license. See the src/Nix/Type+   directory for more details.+-}++{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeSynonymInstances #-}++{-# OPTIONS_GHC -Wno-unused-matches #-}+{-# OPTIONS_GHC -Wno-unused-imports #-}++module Repl where++import           Nix+import           Nix.Convert+import           Nix.Eval+import           Nix.Scope+import qualified Nix.Type.Env as Env+import           Nix.Type.Infer+import           Nix.Utils++import qualified Data.HashMap.Lazy as M+import           Data.List (isPrefixOf, foldl')+import qualified Data.Map as Map+import           Data.Monoid+import           Data.Text (unpack, pack)+import qualified Data.Text as Text+import qualified Data.Text.IO as Text++import           Control.Monad.Identity+import           Control.Monad.Reader+import           Control.Monad.State.Strict++import           System.Console.Haskeline.MonadException+import           System.Console.Repline+import           System.Environment+import           System.Exit++-------------------------------------------------------------------------------+-- Types+-------------------------------------------------------------------------------++data TermEnv++data IState = IState+  { -- tyctx :: Env.Env  -- Type environment+  -- ,+    tmctx :: TermEnv  -- Value environment+  }++initState :: IState+initState = IState {-Env.empty-} undefined++type Repl e m a = HaskelineT (StateT IState m) a+hoistErr :: MonadIO m => Result a -> Repl e m a+hoistErr (Success val) = return val+hoistErr (Failure err) = do+  liftIO $ print err+  abort++-------------------------------------------------------------------------------+-- Execution+-------------------------------------------------------------------------------++exec :: forall e m. (MonadNix e m, MonadIO m, MonadException m)+     => Bool -> Text.Text -> Repl e m ()+exec update source = do+  -- Get the current interpreter state+  st <- get++  -- Parser ( returns AST )+  expr <- hoistErr $ parseNixTextLoc source++  -- Type Inference ( returns Typing Environment )+  -- tyctx' <- hoistErr $ inferTop (tyctx st) expr++  -- Create the new environment+  let st' = st { tmctx = tmctx st -- foldl' evalDef (tmctx st) expr+               -- , tyctx = tyctx' <> tyctx st+               }++  -- Update the interpreter state+  when update (put st')++  -- If a value is entered, print it.+  lift $ lift $ do+    -- jww (2018-04-12): Once the user is able to establish definitions in+    -- the repl, they should be passed here.+    pushScope @(NThunk m) M.empty $ catch (go expr) $ \case+      NixException frames -> do+        liftIO . print =<< renderFrames @(NThunk m) frames+ where+  go expr = do+    val <- evalExprLoc expr+    opts :: Nix.Options <- asks (view hasLens)+    if | normalize opts ->+         liftIO . print . prettyNValueNF =<< normalForm val+       | values opts ->+         liftIO . print =<< prettyNValueProv val+       | otherwise ->+         liftIO . print =<< prettyNValue val++cmd :: (MonadNix e m, MonadIO m, MonadException m) => String -> Repl e m ()+cmd source = exec True (Text.pack source)++-------------------------------------------------------------------------------+-- Commands+-------------------------------------------------------------------------------++-- :browse command+browse :: MonadNix e m => [String] -> Repl e m ()+browse _ = do+  st <- get+  undefined+  -- liftIO $ mapM_ putStrLn $ ppenv (tyctx st)++-- :load command+load :: (MonadNix e m, MonadIO m, MonadException m) => [String] -> Repl e m ()+load args = do+  contents <- liftIO $ Text.readFile (unwords args)+  exec True contents++-- :type command+-- typeof :: [String] -> Repl e m ()+-- typeof args = do+--   st <- get+--   let arg = unwords args+--   case Env.lookup (pack arg) (tyctx st) of+--     Just val -> liftIO $ putStrLn $ undefined -- ppsignature (arg, val)+--     Nothing -> exec False (Text.pack arg)++-- :quit command+quit :: (MonadNix e m, MonadIO m) => a -> Repl e m ()+quit _ = liftIO exitSuccess++-------------------------------------------------------------------------------+-- Interactive Shell+-------------------------------------------------------------------------------++-- Prefix tab completer+defaultMatcher :: MonadIO m => [(String, CompletionFunc m)]+defaultMatcher = [+    (":load"  , fileCompleter)+  --, (":type"  , values)+  ]++-- Default tab completer+comp :: (Monad m, MonadState IState m) => WordCompleter m+comp n = do+  let cmds = [":load", ":type", ":browse", ":quit"]+  -- Env.TypeEnv ctx <- gets tyctx+  -- let defs = map unpack $ Map.keys ctx+  return $ filter (isPrefixOf n) (cmds {-++ defs-})++options :: (MonadNix e m, MonadIO m, MonadException m)+        => [(String, [String] -> Repl e m ())]+options = [+    ("load"   , load)+  , ("browse" , browse)+  , ("quit"   , quit)+  -- , ("type"   , Repl.typeof)+  ]++-------------------------------------------------------------------------------+-- Entry Point+-------------------------------------------------------------------------------++completer :: (MonadNix e m, MonadIO m) => CompleterStyle (StateT IState m)+completer = Prefix (wordCompleter comp) defaultMatcher++shell :: (MonadNix e m, MonadIO m, MonadException m) => Repl e m a -> m ()+shell pre = flip evalStateT initState $+    evalRepl "hnix> " cmd options completer pre++-------------------------------------------------------------------------------+-- Toplevel+-------------------------------------------------------------------------------++-- main :: IO ()+-- main = do+--   args <- getArgs+--   case args of+--     []      -> shell (return ())+--     [fname] -> shell (load [fname])+--     ["test", fname] -> shell (load [fname] >> browse [] >> quit ())+--     _ -> putStrLn "invalid arguments"
+ src/Nix.hs view
@@ -0,0 +1,151 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ViewPatterns #-}++module Nix (module Nix.Cache,+            module Nix.Exec,+            module Nix.Expr,+            module Nix.Frames,+            module Nix.Render.Frame,+            module Nix.Normal,+            module Nix.Options,+            module Nix.Parser,+            module Nix.Pretty,+            module Nix.Reduce,+            module Nix.Thunk,+            module Nix.Value,+            module Nix.XML,+            withNixContext,+            nixEvalExpr, nixEvalExprLoc, nixTracingEvalExprLoc,+            evaluateExpression, processResult) where++import           Control.Applicative+import           Control.Arrow (second)+import           Control.Monad.Reader+import           Data.Fix+import qualified Data.HashMap.Lazy as M+import qualified Data.Text as Text+import qualified Data.Text.Read as Text+import           Nix.Builtins+import           Nix.Cache+import qualified Nix.Eval as Eval+import           Nix.Exec+import           Nix.Expr+import           Nix.Frames+import           Nix.Normal+import           Nix.Options+import           Nix.Parser+import           Nix.Pretty+import           Nix.Reduce+import           Nix.Render.Frame+import           Nix.Scope+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value+import           Nix.XML++-- | Evaluate a nix expression in the default context+withNixContext :: forall e m r. (MonadNix e m, Has e Options)+               => Maybe FilePath -> m r -> m r+withNixContext mpath action = do+    base <- builtins+    opts :: Options <- asks (view hasLens)+    let i = value @(NValue m) @(NThunk m) @m $ nvList $+            map (value @(NValue m) @(NThunk m) @m+                     . flip nvStr mempty . Text.pack) (include opts)+    pushScope (M.singleton "__includes" i) $+        pushScopes base $ case mpath of+            Nothing -> action+            Just path -> do+                traceM $ "Setting __cur_file = " ++ show path+                let ref = value @(NValue m) @(NThunk m) @m $ nvPath path+                pushScope (M.singleton "__cur_file" ref) action++-- | This is the entry point for all evaluations, whatever the expression tree+--   type. It sets up the common Nix environment and applies the+--   transformations, allowing them to be easily composed.+nixEval :: (MonadNix e m, Has e Options, Functor f)+        => Maybe FilePath -> Transform f (m a) -> Alg f (m a) -> Fix f -> m a+nixEval mpath xform alg = withNixContext mpath . adi alg xform++-- | Evaluate a nix expression in the default context+nixEvalExpr :: forall e m. (MonadNix e m, Has e Options)+            => Maybe FilePath -> NExpr -> m (NValue m)+nixEvalExpr mpath = nixEval mpath id Eval.eval++-- | Evaluate a nix expression in the default context+nixEvalExprLoc :: forall e m. (MonadNix e m, Has e Options)+               => Maybe FilePath -> NExprLoc -> m (NValue m)+nixEvalExprLoc mpath =+    nixEval mpath (Eval.addStackFrames @(NThunk m) . Eval.addSourcePositions)+            (Eval.eval . annotated . getCompose)++-- | Evaluate a nix expression with tracing in the default context. Note that+--   this function doesn't do any tracing itself, but 'evalExprLoc' will be+--   'tracing' is set to 'True' in the Options structure (accessible through+--   'MonadNix'). All this function does is provide the right type class+--   context.+nixTracingEvalExprLoc+    :: forall e m. (MonadNix e m, Has e Options, MonadIO m, Alternative m)+    => Maybe FilePath -> NExprLoc -> m (NValue m)+nixTracingEvalExprLoc mpath = withNixContext mpath . evalExprLoc++evaluateExpression+    :: (MonadNix e m, Has e Options)+    => Maybe FilePath+    -> (Maybe FilePath -> NExprLoc -> m (NValue m))+    -> (NValue m -> m a)+    -> NExprLoc+    -> m a+evaluateExpression mpath evaluator handler expr = do+    opts :: Options <- asks (view hasLens)+    args <- traverse (traverse eval') $+        map (second parseArg) (arg opts) +++        map (second mkStr) (argstr opts)+    compute evaluator expr (argmap args) handler+  where+    parseArg s = case parseNixText s of+        Success x -> x+        Failure err -> errorWithoutStackTrace (show err)++    eval' = (normalForm =<<) . nixEvalExpr mpath++    argmap args = embed $ Fix $ NVSetF (M.fromList args) mempty++    compute ev x args p = do+         f <- ev mpath x+         processResult p =<< case f of+             NVClosure _ g -> g args+             _ -> pure f++processResult :: forall e m a. (MonadNix e m, Has e Options)+              => (NValue m -> m a) -> NValue m -> m a+processResult h val = do+    opts :: Options <- asks (view hasLens)+    case attr opts of+        Nothing -> h val+        Just (Text.splitOn "." -> keys) -> go keys val+  where+    go :: [Text.Text] -> NValue m -> m a+    go [] v = h v+    go ((Text.decimal -> Right (n,"")):ks) v = case v of+        NVList xs -> case ks of+            [] -> force @(NValue m) @(NThunk m) (xs !! n) h+            _  -> force (xs !! n) (go ks)+        _ -> errorWithoutStackTrace $+                "Expected a list for selector '" ++ show n+                    ++ "', but got: " ++ show v+    go (k:ks) v = case v of+        NVSet xs _ -> case M.lookup k xs of+            Nothing ->+                errorWithoutStackTrace $+                    "Set does not contain key '"+                        ++ Text.unpack k ++ "'"+            Just v' -> case ks of+                [] -> force v' h+                _  -> force v' (go ks)+        _ -> errorWithoutStackTrace $+            "Expected a set for selector '" ++ Text.unpack k+                ++ "', but got: " ++ show v
+ src/Nix/Atoms.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE CPP            #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}++module Nix.Atoms where++#if MIN_VERSION_serialise(0, 2, 0)+import Codec.Serialise+#endif+import Control.DeepSeq+import Data.Data+import Data.Hashable+import Data.Text (Text, pack)+import GHC.Generics++-- | Atoms are values that evaluate to themselves. This means that+-- they appear in both the parsed AST (in the form of literals) and+-- the evaluated form.+data NAtom+  -- | An integer. The c nix implementation currently only supports+  -- integers that fit in the range of 'Int64'.+  = NInt Integer+  -- | A floating point number+  | NFloat Float+  -- | Booleans.+  | NBool Bool+  -- | Null values. There's only one of this variant.+  | NNull+  deriving (Eq, Ord, Generic, Typeable, Data, Show, Read, NFData,+            Hashable)++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise NAtom+#endif++-- | Translate an atom into its nix representation.+atomText :: NAtom -> Text+atomText (NInt i)   = pack (show i)+atomText (NFloat f) = pack (show f)+atomText (NBool b)  = if b then "true" else "false"+atomText NNull      = "null"
+ src/Nix/Builtins.hs view
@@ -0,0 +1,996 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE PartialTypeSignatures #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ViewPatterns #-}++{-# OPTIONS_GHC -Wno-missing-signatures #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}++module Nix.Builtins (builtins) where++import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.ListM (sortByM)+import           Control.Monad.Reader (asks)++-- Using package imports here because there is a bug in cabal2nix that forces+-- us to put the hashing package in the unconditional dependency list.+-- See https://github.com/NixOS/cabal2nix/issues/348 for more info+#if MIN_VERSION_hashing(0, 1, 0)+import           Crypto.Hash+import qualified "hashing" Crypto.Hash.MD5 as MD5+import qualified "hashing" Crypto.Hash.SHA1 as SHA1+import qualified "hashing" Crypto.Hash.SHA256 as SHA256+import qualified "hashing" Crypto.Hash.SHA512 as SHA512+#else+import           Data.ByteString.Base16 as Base16+import qualified "cryptohash-md5" Crypto.Hash.MD5 as MD5+import qualified "cryptohash-sha1" Crypto.Hash.SHA1 as SHA1+import qualified "cryptohash-sha256" Crypto.Hash.SHA256 as SHA256+import qualified "cryptohash-sha512" Crypto.Hash.SHA512 as SHA512+#endif+import qualified Data.Aeson as A+import qualified Data.Aeson.Encoding as A+import           Data.Align (alignWith)+import           Data.Array+import           Data.ByteString (ByteString)+import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as LBS+import           Data.Char (isDigit)+import           Data.Coerce+import           Data.Fix+import           Data.Foldable (foldrM)+import qualified Data.HashMap.Lazy as M+import           Data.List+import           Data.Maybe+import           Data.Semigroup+import           Data.Set (Set)+import qualified Data.Set as S+import           Data.Text (Text)+import qualified Data.Text as Text+import           Data.Text.Encoding+import qualified Data.Text.Lazy as LazyText+import qualified Data.Text.Lazy.Builder as Builder+import           Data.These (fromThese)+import qualified Data.Time.Clock.POSIX as Time+import           Data.Traversable (mapM)+import           Language.Haskell.TH.Syntax (addDependentFile, runIO)+import           Nix.Atoms+import           Nix.Convert+import           Nix.Effects+import qualified Nix.Eval as Eval+import           Nix.Exec+import           Nix.Expr.Types+import           Nix.Expr.Types.Annotated+import           Nix.Frames+import           Nix.Normal+import           Nix.Options+import           Nix.Parser+import           Nix.Render+import           Nix.Scope+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value+import           Nix.XML+import           System.FilePath+import           System.Posix.Files+import           Text.Regex.TDFA++builtins :: (MonadNix e m, Scoped e (NThunk m) m)+         => m (Scopes m (NThunk m))+builtins = do+    ref <- thunk $ flip nvSet M.empty <$> buildMap+    lst <- ([("builtins", ref)] ++) <$> topLevelBuiltins+    pushScope (M.fromList lst) currentScopes+  where+    buildMap = M.fromList . map mapping <$> builtinsList+    topLevelBuiltins = map mapping <$> fullBuiltinsList++    fullBuiltinsList = map go <$> builtinsList+      where+        go b@(Builtin TopLevel _) = b+        go (Builtin Normal (name, builtin)) =+            Builtin TopLevel ("__" <> name, builtin)++data BuiltinType = Normal | TopLevel+data Builtin m = Builtin+    { _kind   :: BuiltinType+    , mapping :: (Text, NThunk m)+    }++valueThunk :: forall e m. MonadNix e m => NValue m -> NThunk m+valueThunk = value @_ @_ @m++force' :: forall e m. MonadNix e m => NThunk m -> m (NValue m)+force' = force ?? pure++builtinsList :: forall e m. MonadNix e m => m [ Builtin m ]+builtinsList = sequence [+      do version <- toValue ("2.0" :: Text)+         pure $ Builtin Normal ("nixVersion", version)++    , do version <- toValue (5 :: Int)+         pure $ Builtin Normal ("langVersion", version)++    , add0 Normal   "nixPath"                    nixPath+    , add  TopLevel "abort"                      throw_ -- for now+    , add2 Normal   "add"                        add_+    , add2 Normal   "all"                        all_+    , add2 Normal   "any"                        any_+    , add  Normal   "attrNames"                  attrNames+    , add  Normal   "attrValues"                 attrValues+    , add  TopLevel "baseNameOf"                 baseNameOf+    , add2 Normal   "catAttrs"                   catAttrs+    , add2 Normal   "compareVersions"            compareVersions_+    , add  Normal   "concatLists"                concatLists+    , add' Normal   "concatStringsSep"           (arity2 Text.intercalate)+    , add0 Normal   "currentSystem"              currentSystem+    , add0 Normal   "currentTime"                currentTime_+    , add2 Normal   "deepSeq"                    deepSeq+#if MIN_VERSION_base(4, 10, 0)+    -- TODO Remove this CPP after the Lift instance for NExpr works with GHC 8.0+    , add0 TopLevel "derivation"                 $(do+          let f = "data/nix/corepkgs/derivation.nix"+          addDependentFile f+          Success expr <- runIO $ parseNixFile f+          [| cata Eval.eval expr |]+      )+#endif+    , add  TopLevel "derivationStrict"           derivationStrict_+    , add  TopLevel "dirOf"                      dirOf+    , add2 Normal   "div"                        div_+    , add2 Normal   "elem"                       elem_+    , add2 Normal   "elemAt"                     elemAt_+    , add  Normal   "exec"                       exec_+    , add0 Normal   "false"                      (return $ nvConstant $ NBool False)+    , add  Normal   "fetchTarball"               fetchTarball+    , add  Normal   "fetchurl"                   fetchurl+    , add2 Normal   "filter"                     filter_+    , add3 Normal   "foldl'"                     foldl'_+    , add  Normal   "fromJSON"                   fromJSON+    , add  Normal   "functionArgs"               functionArgs+    , add2 Normal   "genList"                    genList+    , add  Normal   "genericClosure"             genericClosure+    , add2 Normal   "getAttr"                    getAttr+    , add  Normal   "getEnv"                     getEnv_+    , add2 Normal   "hasAttr"                    hasAttr+    , add  Normal   "hasContext"                 hasContext+    , add' Normal   "hashString"                 hashString+    , add  Normal   "head"                       head_+    , add  TopLevel "import"                     import_+    , add2 Normal   "intersectAttrs"             intersectAttrs+    , add  Normal   "isAttrs"                    isAttrs+    , add  Normal   "isBool"                     isBool+    , add  Normal   "isFloat"                    isFloat+    , add  Normal   "isFunction"                 isFunction+    , add  Normal   "isInt"                      isInt+    , add  Normal   "isList"                     isList+    , add  TopLevel "isNull"                     isNull+    , add  Normal   "isString"                   isString+    , add  Normal   "length"                     length_+    , add2 Normal   "lessThan"                   lessThan+    , add  Normal   "listToAttrs"                listToAttrs+    , add2 TopLevel "map"                        map_+    , add2 Normal   "match"                      match_+    , add2 Normal   "mul"                        mul_+    , add0 Normal   "null"                       (return $ nvConstant NNull)+    , add  Normal   "parseDrvName"               parseDrvName+    , add2 Normal   "partition"                  partition_+    , add  Normal   "pathExists"                 pathExists_+    , add  TopLevel "placeholder"                placeHolder+    , add  Normal   "readDir"                    readDir_+    , add  Normal   "readFile"                   readFile_+    , add2 TopLevel "removeAttrs"                removeAttrs+    , add3 Normal   "replaceStrings"             replaceStrings+    , add2 TopLevel "scopedImport"               scopedImport+    , add2 Normal   "seq"                        seq_+    , add2 Normal   "sort"                       sort_+    , add2 Normal   "split"                      split_+    , add  Normal   "splitVersion"               splitVersion_+    , add0 Normal   "storeDir"                   (return $ nvPath "/nix/store")+    , add' Normal   "stringLength"               (arity1 Text.length)+    , add' Normal   "sub"                        (arity2 ((-) @Integer))+    , add' Normal   "substring"                  substring+    , add  Normal   "tail"                       tail_+    , add0 Normal   "true"                       (return $ nvConstant $ NBool True)+    , add  TopLevel "throw"                      throw_+    , add' Normal   "toJSON"+      (arity1 $ decodeUtf8 . LBS.toStrict . A.encodingToLazyByteString+                           . toEncodingSorted)+    , add  Normal   "toPath"                     toPath+    , add  TopLevel "toString"                   toString+    , add  Normal   "toXML"                      toXML_+    , add2 TopLevel "trace"                      trace_+    , add  Normal   "tryEval"                    tryEval+    , add  Normal   "typeOf"                     typeOf+    , add  Normal   "unsafeDiscardStringContext" unsafeDiscardStringContext+    , add2 Normal   "unsafeGetAttrPos"           unsafeGetAttrPos+    , add  Normal   "valueSize"                  getRecursiveSize+  ]+  where+    wrap t n f = Builtin t (n, f)++    arity1 f = Prim . pure . f+    arity2 f = ((Prim . pure) .) . f++    mkThunk n = thunk . withFrame Info+        (ErrorCall $ "While calling builtin " ++ Text.unpack n ++ "\n")++    add0 t n v = wrap t n <$> mkThunk n v+    add  t n v = wrap t n <$> mkThunk n (builtin  (Text.unpack n) v)+    add2 t n v = wrap t n <$> mkThunk n (builtin2 (Text.unpack n) v)+    add3 t n v = wrap t n <$> mkThunk n (builtin3 (Text.unpack n) v)++    add' :: ToBuiltin m a => BuiltinType -> Text -> a -> m (Builtin m)+    add' t n v = wrap t n <$> mkThunk n (toBuiltin (Text.unpack n) v)++-- Primops++foldNixPath :: forall e m r. MonadNix e m+            => (FilePath -> Maybe String -> r -> m r) -> r -> m r+foldNixPath f z = do+    mres <- lookupVar @_ @(NThunk m) "__includes"+    dirs <- case mres of+        Nothing -> return []+        Just v  -> fromNix @[Text] v+    menv <- getEnvVar "NIX_PATH"+    foldrM go z $ dirs ++ case menv of+        Nothing -> []+        Just str -> Text.splitOn ":" (Text.pack str)+  where+    go x rest = case Text.splitOn "=" x of+        [p]    -> f (Text.unpack p) Nothing rest+        [n, p] -> f (Text.unpack p) (Just (Text.unpack n)) rest+        _ -> throwError $ ErrorCall $ "Unexpected entry in NIX_PATH: " ++ show x++nixPath :: MonadNix e m => m (NValue m)+nixPath = fmap nvList $ flip foldNixPath [] $ \p mn rest ->+    pure $ valueThunk+        (flip nvSet mempty $ M.fromList+            [ ("path",   valueThunk $ nvPath p)+            , ("prefix", valueThunk $+                   nvStr (Text.pack (fromMaybe "" mn)) mempty) ]) : rest++toString :: MonadNix e m => m (NValue m) -> m (NValue m)+toString str =+    str >>= normalForm >>= valueText False >>= toNix @(Text, DList Text)++hasAttr :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+hasAttr x y =+    fromValue @Text x >>= \key ->+    fromValue @(AttrSet (NThunk m), AttrSet SourcePos) y >>= \(aset, _) ->+        toNix $ M.member key aset++attrsetGet :: MonadNix e m => Text -> AttrSet t -> m t+attrsetGet k s = case M.lookup k s of+    Just v -> pure v+    Nothing ->+        throwError $ ErrorCall $ "Attribute '" ++ Text.unpack k ++ "' required"++hasContext :: MonadNix e m => m (NValue m) -> m (NValue m)+hasContext =+    toNix . not . null . (appEndo ?? []) . snd <=< fromValue @(Text, DList Text)++getAttr :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+getAttr x y = x >>= \x' -> y >>= \y' -> case (x', y') of+    (NVStr key _, NVSet aset _) -> attrsetGet key aset >>= force'+    (x, y) -> throwError $ ErrorCall $ "Invalid types for builtin.getAttr: "+                 ++ show (x, y)++unsafeGetAttrPos :: forall e m. MonadNix e m+                 => m (NValue m) -> m (NValue m) -> m (NValue m)+unsafeGetAttrPos x y = x >>= \x' -> y >>= \y' -> case (x', y') of+    (NVStr key _, NVSet _ apos) -> case M.lookup key apos of+        Nothing -> pure $ nvConstant NNull+        Just delta -> toValue delta+    (x, y) -> throwError $ ErrorCall $ "Invalid types for builtin.unsafeGetAttrPos: "+                 ++ show (x, y)++-- This function is a bit special in that it doesn't care about the contents+-- of the list.+length_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+length_ = toValue . (length :: [NThunk m] -> Int) <=< fromValue++add_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+add_ x y = x >>= \x' -> y >>= \y' -> case (x', y') of+    (NVConstant (NInt x),   NVConstant (NInt y))   ->+        toNix ( x + y :: Integer)+    (NVConstant (NFloat x), NVConstant (NInt y))   -> toNix (x + fromInteger y)+    (NVConstant (NInt x),   NVConstant (NFloat y)) -> toNix (fromInteger x + y)+    (NVConstant (NFloat x), NVConstant (NFloat y)) -> toNix (x + y)+    (_, _) ->+        throwError $ Addition x' y'++mul_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+mul_ x y = x >>= \x' -> y >>= \y' -> case (x', y') of+    (NVConstant (NInt x),   NVConstant (NInt y))   ->+        toNix ( x * y :: Integer)+    (NVConstant (NFloat x), NVConstant (NInt y))   -> toNix (x * fromInteger y)+    (NVConstant (NInt x),   NVConstant (NFloat y)) -> toNix (fromInteger x * y)+    (NVConstant (NFloat x), NVConstant (NFloat y)) -> toNix (x * y)+    (_, _) ->+        throwError $ Multiplication x' y'++div_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+div_ x y = x >>= \x' -> y >>= \y' -> case (x', y') of+    (NVConstant (NInt x),   NVConstant (NInt y))   ->+        toNix (floor (fromInteger x / fromInteger y :: Double) :: Integer)+    (NVConstant (NFloat x), NVConstant (NInt y))   -> toNix (x / fromInteger y)+    (NVConstant (NInt x),   NVConstant (NFloat y)) -> toNix (fromInteger x / y)+    (NVConstant (NFloat x), NVConstant (NFloat y)) -> toNix (x / y)+    (_, _) ->+        throwError $ Division x' y'++anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool+anyM _ []       = return False+anyM p (x:xs)   = do+        q <- p x+        if q then return True+             else anyM p xs++any_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+any_ fun xs = fun >>= \f ->+    toNix <=< anyM fromValue <=< mapM ((f `callFunc`) . force')+          <=< fromValue $ xs++allM :: Monad m => (a -> m Bool) -> [a] -> m Bool+allM _ []       = return True+allM p (x:xs)   = do+        q <- p x+        if q then allM p xs+             else return False++all_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+all_ fun xs = fun >>= \f ->+    toNix <=< allM fromValue <=< mapM ((f `callFunc`) . force')+          <=< fromValue $ xs++foldl'_ :: forall e m. MonadNix e m+        => m (NValue m) -> m (NValue m) -> m (NValue m) -> m (NValue m)+foldl'_ fun z xs =+    fun >>= \f -> fromValue @[NThunk m] xs >>= foldl' (go f) z+  where+    go f b a = f `callFunc` b >>= (`callFunc` force' a)++head_ :: MonadNix e m => m (NValue m) -> m (NValue m)+head_ = fromValue >=> \case+    [] -> throwError $ ErrorCall "builtins.head: empty list"+    h:_ -> force' h++tail_ :: MonadNix e m => m (NValue m) -> m (NValue m)+tail_ = fromValue >=> \case+    [] -> throwError $ ErrorCall "builtins.tail: empty list"+    _:t -> return $ nvList t++data VersionComponent+   = VersionComponent_Pre -- ^ The string "pre"+   | VersionComponent_String Text -- ^ A string other than "pre"+   | VersionComponent_Number Integer -- ^ A number+   deriving (Show, Read, Eq, Ord)++versionComponentToString :: VersionComponent -> Text+versionComponentToString = \case+  VersionComponent_Pre -> "pre"+  VersionComponent_String s -> s+  VersionComponent_Number n -> Text.pack $ show n++-- | Based on https://github.com/NixOS/nix/blob/4ee4fda521137fed6af0446948b3877e0c5db803/src/libexpr/names.cc#L44+versionComponentSeparators :: String+versionComponentSeparators = ".-"++splitVersion :: Text -> [VersionComponent]+splitVersion s = case Text.uncons s of+    Nothing -> []+    Just (h, t)+      | h `elem` versionComponentSeparators -> splitVersion t+      | isDigit h ->+          let (digits, rest) = Text.span isDigit s+          in VersionComponent_Number (read $ Text.unpack digits) : splitVersion rest+      | otherwise ->+          let (chars, rest) = Text.span (\c -> not $ isDigit c || c `elem` versionComponentSeparators) s+              thisComponent = case chars of+                  "pre" -> VersionComponent_Pre+                  x -> VersionComponent_String x+          in thisComponent : splitVersion rest++splitVersion_ :: MonadNix e m => m (NValue m) -> m (NValue m)+splitVersion_ = fromValue >=> \s -> do+    let vals = flip map (splitVersion s) $ \c ->+            valueThunk $ nvStr (versionComponentToString c) mempty+    return $ nvList vals++compareVersions :: Text -> Text -> Ordering+compareVersions s1 s2 =+    mconcat $ alignWith f (splitVersion s1) (splitVersion s2)+  where+    z = VersionComponent_String ""+    f = uncurry compare . fromThese z z++compareVersions_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+compareVersions_ t1 t2 =+    fromValue t1 >>= \s1 ->+    fromValue t2 >>= \s2 ->+        return $ nvConstant $ NInt $ case compareVersions s1 s2 of+            LT -> -1+            EQ -> 0+            GT -> 1++splitDrvName :: Text -> (Text, Text)+splitDrvName s =+    let sep = "-"+        pieces = Text.splitOn sep s+        isFirstVersionPiece p = case Text.uncons p of+            Just (h, _) | isDigit h -> True+            _ -> False+        -- Like 'break', but always puts the first item into the first result+        -- list+        breakAfterFirstItem :: (a -> Bool) -> [a] -> ([a], [a])+        breakAfterFirstItem f = \case+            h : t ->+                let (a, b) = break f t+                in (h : a, b)+            [] -> ([], [])+        (namePieces, versionPieces) =+          breakAfterFirstItem isFirstVersionPiece pieces+    in (Text.intercalate sep namePieces, Text.intercalate sep versionPieces)++parseDrvName :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+parseDrvName = fromValue >=> \(s :: Text) -> do+    let (name :: Text, version :: Text) = splitDrvName s+    -- jww (2018-04-15): There should be an easier way to write this.+    (toValue =<<) $ sequence $ M.fromList+        [ ("name" :: Text, thunk (toValue @_ @_ @(NValue m) name))+        , ("version",     thunk (toValue version)) ]++match_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+match_ pat str =+    fromValue pat >>= \p ->+    fromValue str >>= \s -> do+        let re = makeRegex (encodeUtf8 p) :: Regex+        case matchOnceText re (encodeUtf8 s) of+            Just ("", sarr, "") -> do+                let s = map fst (elems sarr)+                nvList <$> traverse (toValue . decodeUtf8)+                    (if length s > 1 then tail s else s)+            _ -> pure $ nvConstant NNull++split_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+split_ pat str =+    fromValue pat >>= \p ->+    fromValue str >>= \s -> do+        let re = makeRegex (encodeUtf8 p) :: Regex+            haystack = encodeUtf8 s+        return $ nvList $+            splitMatches 0 (map elems $ matchAllText re haystack) haystack++splitMatches+  :: forall e m. MonadNix e m+  => Int+  -> [[(ByteString, (Int, Int))]]+  -> ByteString+  -> [NThunk m]+splitMatches _ [] haystack = [thunkStr haystack]+splitMatches _ ([]:_) _ = error "Error in splitMatches: this should never happen!"+splitMatches numDropped (((_,(start,len)):captures):mts) haystack =+    thunkStr before : caps : splitMatches (numDropped + relStart + len) mts (B.drop len rest)+  where+    relStart = max 0 start - numDropped+    (before,rest) = B.splitAt relStart haystack+    caps = valueThunk $ nvList (map f captures)+    f (a,(s,_)) = if s < 0 then valueThunk (nvConstant NNull) else thunkStr a++thunkStr s = valueThunk (nvStr (decodeUtf8 s) mempty)++substring :: MonadNix e m => Int -> Int -> Text -> Prim m Text+substring start len str = Prim $+    if start < 0 --NOTE: negative values of 'len' are OK+    then throwError $ ErrorCall $ "builtins.substring: negative start position: " ++ show start+    else pure $ Text.take len $ Text.drop start str++attrNames :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+attrNames = fromValue @(ValueSet m) >=> toNix . sort . M.keys++attrValues :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+attrValues = fromValue @(ValueSet m) >=>+    toValue . fmap snd . sortOn (fst @Text @(NThunk m)) . M.toList++map_ :: forall e m. MonadNix e m+     => m (NValue m) -> m (NValue m) -> m (NValue m)+map_ fun xs = fun >>= \f ->+    toNix <=< traverse (thunk . withFrame Debug+                                    (ErrorCall "While applying f in map:\n")+                              . (f `callFunc`) . force')+          <=< fromValue @[NThunk m] $ xs++filter_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+filter_ fun xs = fun >>= \f ->+    toNix <=< filterM (fromValue <=< callFunc f . force')+          <=< fromValue @[NThunk m] $ xs++catAttrs :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+catAttrs attrName xs =+    fromValue @Text attrName >>= \n ->+    fromValue @[NThunk m] xs >>= \l ->+        fmap (nvList . catMaybes) $+            forM l $ fmap (M.lookup n) . fromValue++baseNameOf :: MonadNix e m => m (NValue m) -> m (NValue m)+baseNameOf x = x >>= \case+    NVStr path ctx -> pure $ nvStr (Text.pack $ takeFileName $ Text.unpack path) ctx+    NVPath path -> pure $ nvPath $ takeFileName path+    v -> throwError $ ErrorCall $ "dirOf: expected string or path, got " ++ show v++dirOf :: MonadNix e m => m (NValue m) -> m (NValue m)+dirOf x = x >>= \case+    NVStr path ctx -> pure $ nvStr (Text.pack $ takeDirectory $ Text.unpack path) ctx+    NVPath path -> pure $ nvPath $ takeDirectory path+    v -> throwError $ ErrorCall $ "dirOf: expected string or path, got " ++ show v++-- jww (2018-04-28): This should only be a string argument, and not coerced?+unsafeDiscardStringContext :: MonadNix e m => m (NValue m) -> m (NValue m)+unsafeDiscardStringContext = fromValue @Text >=> toNix++seq_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+seq_ a b = a >> b++deepSeq :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+deepSeq a b = do+    -- We evaluate 'a' only for its effects, so data cycles are ignored.+    _ <- normalFormBy (forceEffects . coerce . _baseThunk) 0 =<< a++    -- Then we evaluate the other argument to deepseq, thus this function+    -- should always produce a result (unlike applying 'deepseq' on infinitely+    -- recursive data structures in Haskell).+    b++elem_ :: forall e m. MonadNix e m+      => m (NValue m) -> m (NValue m) -> m (NValue m)+elem_ x xs = x >>= \x' ->+    toValue <=< anyM (valueEq x' <=< force') <=< fromValue @[NThunk m] $ xs++elemAt :: [a] -> Int -> Maybe a+elemAt ls i = case drop i ls of+   [] -> Nothing+   a:_ -> Just a++elemAt_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+elemAt_ xs n = fromValue n >>= \n' -> fromValue xs >>= \xs' ->+    case elemAt xs' n' of+      Just a -> force' a+      Nothing -> throwError $ ErrorCall $ "builtins.elem: Index " ++ show n'+          ++ " too large for list of length " ++ show (length xs')++genList :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+genList generator = fromValue @Integer >=> \n ->+    if n >= 0+    then generator >>= \f ->+        toNix =<< forM [0 .. n - 1] (\i -> thunk $ f `callFunc` toNix i)+    else throwError $ ErrorCall $ "builtins.genList: Expected a non-negative number, got "+             ++ show n++genericClosure :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+genericClosure = fromValue @(AttrSet (NThunk m)) >=> \s ->+    case (M.lookup "startSet" s, M.lookup "operator" s) of+      (Nothing, Nothing) ->+          throwError $ ErrorCall $+              "builtins.genericClosure: "+                  ++ "Attributes 'startSet' and 'operator' required"+      (Nothing, Just _) ->+          throwError $ ErrorCall $+              "builtins.genericClosure: Attribute 'startSet' required"+      (Just _, Nothing) ->+          throwError $ ErrorCall $+              "builtins.genericClosure: Attribute 'operator' required"+      (Just startSet, Just operator) ->+          fromValue @[NThunk m] startSet >>= \ss ->+          force operator $ \op ->+              toValue @[NThunk m] =<< snd <$> go op ss S.empty+  where+    go :: NValue m -> [NThunk m] -> Set (NValue m)+       -> m (Set (NValue m), [NThunk m])+    go _ [] ks = pure (ks, [])+    go op (t:ts) ks =+        force t $ \v -> fromValue @(AttrSet (NThunk m)) t >>= \s ->+            case M.lookup "key" s of+                Nothing ->+                    throwError $ ErrorCall $+                        "builtins.genericClosure: Attribute 'key' required"+                Just k -> force k $ \k' ->+                    if S.member k' ks+                        then go op ts ks+                        else do+                            ys <- fromValue @[NThunk m] =<< (op `callFunc` pure v)+                            case S.toList ks of+                                []  -> checkComparable k' k'+                                j:_ -> checkComparable k' j+                            fmap (t:) <$> go op (ts ++ ys) (S.insert k' ks)++replaceStrings :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m) -> m (NValue m)+replaceStrings tfrom tto ts =+    fromNix tfrom >>= \(from :: [Text]) ->+    fromNix tto   >>= \(to   :: [Text]) ->+    fromValue ts  >>= \(s    :: Text) -> do+        when (length from /= length to) $+            throwError $ ErrorCall $+                "'from' and 'to' arguments to 'replaceStrings'"+                    ++ " have different lengths"+        let lookupPrefix s = do+                (prefix, replacement) <-+                    find ((`Text.isPrefixOf` s) . fst) $ zip from to+                let rest = Text.drop (Text.length prefix) s+                return (prefix, replacement, rest)+            finish = LazyText.toStrict . Builder.toLazyText+            go orig result = case lookupPrefix orig of+                Nothing -> case Text.uncons orig of+                    Nothing -> finish result+                    Just (h, t) -> go t $ result <> Builder.singleton h+                Just (prefix, replacement, rest) -> case prefix of+                    "" -> case Text.uncons rest of+                        Nothing -> finish $ result <> Builder.fromText replacement+                        Just (h, t) -> go t $ mconcat+                            [ result+                            , Builder.fromText replacement+                            , Builder.singleton h+                            ]+                    _ -> go rest $ result <> Builder.fromText replacement+        toNix $ go s mempty++removeAttrs :: forall e m. MonadNix e m+            => m (NValue m) -> m (NValue m) -> m (NValue m)+removeAttrs set = fromNix >=> \(toRemove :: [Text]) ->+    fromValue @(AttrSet (NThunk m),+                AttrSet SourcePos) set >>= \(m, p) ->+        toNix (go m toRemove, go p toRemove)+  where+    go = foldl' (flip M.delete)++intersectAttrs :: forall e m. MonadNix e m+               => m (NValue m) -> m (NValue m) -> m (NValue m)+intersectAttrs set1 set2 =+    fromValue @(AttrSet (NThunk m),+                AttrSet SourcePos) set1 >>= \(s1, p1) ->+    fromValue @(AttrSet (NThunk m),+                AttrSet SourcePos) set2 >>= \(s2, p2) ->+        return $ nvSet (s2 `M.intersection` s1) (p2 `M.intersection` p1)++functionArgs :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+functionArgs fun = fun >>= \case+    NVClosure p _ -> toValue @(AttrSet (NThunk m)) $+        valueThunk . nvConstant . NBool <$>+            case p of+                Param name -> M.singleton name False+                ParamSet s _ _ -> isJust <$> M.fromList s+    v -> throwError $ ErrorCall $+            "builtins.functionArgs: expected function, got " ++ show v++toPath :: MonadNix e m => m (NValue m) -> m (NValue m)+toPath = fromValue @Path >=> toNix @Path++pathExists_ :: MonadNix e m => m (NValue m) -> m (NValue m)+pathExists_ path = path >>= \case+    NVPath p  -> toNix =<< pathExists p+    NVStr s _ -> toNix =<< pathExists (Text.unpack s)+    v -> throwError $ ErrorCall $+            "builtins.pathExists: expected path, got " ++ show v++hasKind :: forall a e m. (MonadNix e m, FromValue a m (NValue m))+        => m (NValue m) -> m (NValue m)+hasKind = fromValueMay >=> toNix . \case Just (_ :: a) -> True; _ -> False++isAttrs :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isAttrs = hasKind @(ValueSet m)++isList :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isList = hasKind @[NThunk m]++isString :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isString = hasKind @Text++isInt :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isInt = hasKind @Int++isFloat :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isFloat = hasKind @Float++isBool :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isBool = hasKind @Bool++isNull :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+isNull = hasKind @()++isFunction :: MonadNix e m => m (NValue m) -> m (NValue m)+isFunction func = func >>= \case+    NVClosure {} -> toValue True+    _ -> toValue False++throw_ :: MonadNix e m => m (NValue m) -> m (NValue m)+throw_ = fromValue >=> throwError . ErrorCall . Text.unpack++import_ :: MonadNix e m => m (NValue m) -> m (NValue m)+import_ = fromValue >=> importPath M.empty . getPath++scopedImport :: forall e m. MonadNix e m+             => m (NValue m) -> m (NValue m) -> m (NValue m)+scopedImport aset path =+    fromValue aset >>= \s ->+    fromValue   path >>= \p -> importPath @m s (getPath p)++getEnv_ :: MonadNix e m => m (NValue m) -> m (NValue m)+getEnv_ = fromValue >=> \s -> do+    mres <- getEnvVar (Text.unpack s)+    toNix $ case mres of+        Nothing -> ""+        Just v  -> Text.pack v++sort_ :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+sort_ comparator xs = comparator >>= \comp ->+    fromValue xs >>= sortByM (cmp comp) >>= toValue+  where+    cmp f a b = do+        isLessThan <- f `callFunc` force' a >>= (`callFunc` force' b)+        fromValue isLessThan >>= \case+            True -> pure LT+            False -> do+                isGreaterThan <- f `callFunc` force' b >>= (`callFunc` force' a)+                fromValue isGreaterThan <&> \case+                    True  -> GT+                    False -> EQ++lessThan :: MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+lessThan ta tb = ta >>= \va -> tb >>= \vb -> do+    let badType = throwError $ ErrorCall $+            "builtins.lessThan: expected two numbers or two strings, "+                ++ "got " ++ show va ++ " and " ++ show vb+    nvConstant . NBool <$> case (va, vb) of+        (NVConstant ca, NVConstant cb) -> case (ca, cb) of+            (NInt   a, NInt   b) -> pure $ a < b+            (NFloat a, NInt   b) -> pure $ a < fromInteger b+            (NInt   a, NFloat b) -> pure $ fromInteger a < b+            (NFloat a, NFloat b) -> pure $ a < b+            _ -> badType+        (NVStr a _, NVStr b _) -> pure $ a < b+        _ -> badType++concatLists :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+concatLists = fromValue @[NThunk m]+    >=> mapM (fromValue @[NThunk m] >=> pure)+    >=> toValue . concat++listToAttrs :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+listToAttrs = fromValue @[NThunk m] >=> \l ->+    fmap (flip nvSet M.empty . M.fromList . reverse) $+        forM l $ fromValue @(AttrSet (NThunk m)) >=> \s -> do+            name <- attrsetGet "name" s+            val  <- attrsetGet "value" s+            fromValue name <&> (, val)++hashString :: MonadNix e m => Text -> Text -> Prim m Text+hashString algo s = Prim $ do+    case algo of+        "md5"    -> pure $+#if MIN_VERSION_hashing(0, 1, 0)+          Text.pack $ show (hash (encodeUtf8 s) :: MD5.MD5)+#else+          decodeUtf8 $ Base16.encode $ MD5.hash $ encodeUtf8 s+#endif+        "sha1"   -> pure $+#if MIN_VERSION_hashing(0, 1, 0)+          Text.pack $ show (hash (encodeUtf8 s) :: SHA1.SHA1)+#else+          decodeUtf8 $ Base16.encode $ SHA1.hash $ encodeUtf8 s+#endif+        "sha256" -> pure $+#if MIN_VERSION_hashing(0, 1, 0)+          Text.pack $ show (hash (encodeUtf8 s) :: SHA256.SHA256)+#else+          decodeUtf8 $ Base16.encode $ SHA256.hash $ encodeUtf8 s+#endif+        "sha512" -> pure $+#if MIN_VERSION_hashing(0, 1, 0)+          Text.pack $ show (hash (encodeUtf8 s) :: SHA512.SHA512)+#else+          decodeUtf8 $ Base16.encode $ SHA512.hash $ encodeUtf8 s+#endif+        _ -> throwError $ ErrorCall $ "builtins.hashString: "+            ++ "expected \"md5\", \"sha1\", \"sha256\", or \"sha512\", got " ++ show algo++placeHolder :: MonadNix e m => m (NValue m) -> m (NValue m)+placeHolder = fromValue @Text >=> \_ -> do+    h <- runPrim (hashString "sha256" "fdasdfas")+    toNix h++absolutePathFromValue :: MonadNix e m => NValue m -> m FilePath+absolutePathFromValue = \case+    NVStr pathText _ -> do+        let path = Text.unpack pathText+        unless (isAbsolute path) $+            throwError $ ErrorCall $ "string " ++ show path ++ " doesn't represent an absolute path"+        pure path+    NVPath path -> pure path+    v -> throwError $ ErrorCall $ "expected a path, got " ++ show v++readFile_ :: MonadNix e m => m (NValue m) -> m (NValue m)+readFile_ path =+    path >>= absolutePathFromValue >>= Nix.Render.readFile >>= toNix++data FileType+   = FileTypeRegular+   | FileTypeDirectory+   | FileTypeSymlink+   | FileTypeUnknown+   deriving (Show, Read, Eq, Ord)++instance Applicative m => ToNix FileType m (NValue m) where+    toNix = toNix . \case+        FileTypeRegular   -> "regular" :: Text+        FileTypeDirectory -> "directory"+        FileTypeSymlink   -> "symlink"+        FileTypeUnknown   -> "unknown"++readDir_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+readDir_ pathThunk = do+    path  <- absolutePathFromValue =<< pathThunk+    items <- listDirectory path+    itemsWithTypes <- forM items $ \item -> do+        s <- Nix.Effects.getSymbolicLinkStatus $ path </> item+        let t = if+                | isRegularFile s  -> FileTypeRegular+                | isDirectory s    -> FileTypeDirectory+                | isSymbolicLink s -> FileTypeSymlink+                | otherwise        -> FileTypeUnknown+        pure (Text.pack item, t)+    toNix (M.fromList itemsWithTypes)++fromJSON :: MonadNix e m => m (NValue m) -> m (NValue m)+fromJSON = fromValue >=> \encoded ->+    case A.eitherDecodeStrict' @A.Value $ encodeUtf8 encoded of+        Left jsonError ->+            throwError $ ErrorCall $ "builtins.fromJSON: " ++ jsonError+        Right v -> toValue v++toXML_ :: MonadNix e m => m (NValue m) -> m (NValue m)+toXML_ v = v >>= normalForm >>= \x ->+    pure $ nvStr (Text.pack (toXML x)) mempty++typeOf :: MonadNix e m => m (NValue m) -> m (NValue m)+typeOf v = v >>= toNix @Text . \case+    NVConstant a -> case a of+        NInt _   -> "int"+        NFloat _ -> "float"+        NBool _  -> "bool"+        NNull    -> "null"+    NVStr _ _     -> "string"+    NVList _      -> "list"+    NVSet _ _     -> "set"+    NVClosure {}  -> "lambda"+    NVPath _      -> "path"+    NVBuiltin _ _ -> "lambda"+    _ -> error "Pattern synonyms obscure complete patterns"++tryEval :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+tryEval e = catch (onSuccess <$> e) (pure . onError)+  where+    onSuccess v = flip nvSet M.empty $ M.fromList+        [ ("success", valueThunk (nvConstant (NBool True)))+        , ("value", valueThunk v)+        ]++    onError :: SomeException -> NValue m+    onError _ = flip nvSet M.empty $ M.fromList+        [ ("success", valueThunk (nvConstant (NBool False)))+        , ("value", valueThunk (nvConstant (NBool False)))+        ]++trace_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)+trace_ msg action = do+  traceEffect . Text.unpack =<< fromValue @Text msg+  action++exec_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+exec_ xs = do+  ls <- fromValue @[NThunk m] xs+  xs <- traverse (fromValue @Text . force') ls+  exec (map Text.unpack xs)++fetchTarball :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+fetchTarball v = v >>= \case+    NVSet s _ -> case M.lookup "url" s of+        Nothing -> throwError $ ErrorCall+                      "builtins.fetchTarball: Missing url attribute"+        Just url -> force url $ go (M.lookup "sha256" s)+    v@NVStr {} -> go Nothing v+    v -> throwError $ ErrorCall $+            "builtins.fetchTarball: Expected URI or set, got " ++ show v+ where+    go :: Maybe (NThunk m) -> NValue m -> m (NValue m)+    go msha = \case+        NVStr uri _ -> fetch uri msha+        v -> throwError $ ErrorCall $+                "builtins.fetchTarball: Expected URI or string, got " ++ show v++{- jww (2018-04-11): This should be written using pipes in another module+    fetch :: Text -> Maybe (NThunk m) -> m (NValue m)+    fetch uri msha = case takeExtension (Text.unpack uri) of+        ".tgz" -> undefined+        ".gz"  -> undefined+        ".bz2" -> undefined+        ".xz"  -> undefined+        ".tar" -> undefined+        ext -> throwError $ ErrorCall $ "builtins.fetchTarball: Unsupported extension '"+                  ++ ext ++ "'"+-}++    fetch :: Text -> Maybe (NThunk m) -> m (NValue m)+    fetch uri Nothing =+        nixInstantiateExpr $ "builtins.fetchTarball \"" +++            Text.unpack uri ++ "\""+    fetch url (Just m) = fromValue m >>= \sha ->+        nixInstantiateExpr $ "builtins.fetchTarball { "+          ++ "url    = \"" ++ Text.unpack url ++ "\"; "+          ++ "sha256 = \"" ++ Text.unpack sha ++ "\"; }"++fetchurl :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m)+fetchurl v = v >>= \case+    NVSet s _ -> attrsetGet "url" s >>= force ?? (go (M.lookup "sha256" s))+    v@NVStr {} -> go Nothing v+    v -> throwError $ ErrorCall $ "builtins.fetchurl: Expected URI or set, got "+            ++ show v+ where+    go :: Maybe (NThunk m) -> NValue m -> m (NValue m)+    go _msha = \case+        NVStr uri _ -> getURL uri -- msha+        v -> throwError $ ErrorCall $+                 "builtins.fetchurl: Expected URI or string, got " ++ show v++partition_ :: forall e m. MonadNix e m+           => m (NValue m) -> m (NValue m) -> m (NValue m)+partition_ fun xs = fun >>= \f ->+    fromValue @[NThunk m] xs >>= \l -> do+        let match t = f `callFunc` force' t >>= fmap (, t) . fromValue+        selection <- traverse match l+        let (right, wrong) = partition fst selection+        let makeSide = valueThunk . nvList . map snd+        toValue @(AttrSet (NThunk m)) $+            M.fromList [("right", makeSide right), ("wrong", makeSide wrong)]++currentSystem :: MonadNix e m => m (NValue m)+currentSystem = do+  os <- getCurrentSystemOS+  arch <- getCurrentSystemArch+  return $ nvStr (arch <> "-" <> os) mempty++currentTime_ :: MonadNix e m => m (NValue m)+currentTime_ = do+    opts :: Options <- asks (view hasLens)+    toNix @Integer $ round $ Time.utcTimeToPOSIXSeconds (currentTime opts)++derivationStrict_ :: MonadNix e m => m (NValue m) -> m (NValue m)+derivationStrict_ = (>>= derivationStrict)++newtype Prim m a = Prim { runPrim :: m a }++-- | Types that support conversion to nix in a particular monad+class ToBuiltin m a | a -> m where+    toBuiltin :: String -> a -> m (NValue m)++instance (MonadNix e m, ToNix a m (NValue m))+      => ToBuiltin m (Prim m a) where+    toBuiltin _ p = toNix =<< runPrim p++instance (MonadNix e m, FromNix a m (NValue m), ToBuiltin m b)+      => ToBuiltin m (a -> b) where+    toBuiltin name f = return $ nvBuiltin name (fromNix >=> toBuiltin name . f)
+ src/Nix/Cache.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE CPP #-}++module Nix.Cache where++import qualified Data.ByteString.Lazy as BS+import           Nix.Expr.Types.Annotated++#if defined (__linux__) && MIN_VERSION_base(4, 10, 0)+#define USE_COMPACT 1+#endif++#ifdef USE_COMPACT+import qualified Data.Compact as C+import qualified Data.Compact.Serialize as C+#endif+#if MIN_VERSION_serialise(0, 2, 0)+import qualified Codec.Serialise as S+#endif++readCache :: FilePath -> IO NExprLoc+readCache path = do+#if USE_COMPACT+    eres <- C.unsafeReadCompact path+    case eres of+        Left err -> error $ "Error reading cache file: " ++ err+        Right expr -> return $ C.getCompact expr+#else+#if MIN_VERSION_serialise(0, 2, 0)+    eres <- S.deserialiseOrFail <$> BS.readFile path+    case eres of+        Left err -> error $ "Error reading cache file: " ++ show err+        Right expr -> return expr+#else+    error "readCache not implemented for this platform"+#endif+#endif++writeCache :: FilePath -> NExprLoc -> IO ()+writeCache path expr =+#ifdef USE_COMPACT+    C.writeCompact path =<< C.compact expr+#else+#if MIN_VERSION_serialise(0, 2, 0)+    BS.writeFile path (S.serialise expr)+#else+    error "writeCache not implemented for this platform"+#endif+#endif
+ src/Nix/Context.hs view
@@ -0,0 +1,33 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}++module Nix.Context where++import Nix.Options+import Nix.Scope+import Nix.Frames+import Nix.Utils+import Nix.Expr.Types.Annotated (SrcSpan, nullSpan)++data Context m v = Context+    { scopes  :: Scopes m v+    , source  :: SrcSpan+    , frames  :: Frames+    , options :: Options+    }++instance Has (Context m v) (Scopes m v) where+    hasLens f (Context x y z w) = (\x' -> Context x' y z w) <$> f x++instance Has (Context m v) SrcSpan where+    hasLens f (Context x y z w) = (\y' -> Context x y' z w) <$> f y++instance Has (Context m v) Frames where+    hasLens f (Context x y z w) = (\z' -> Context x y z' w) <$> f z++instance Has (Context m v) Options where+    hasLens f (Context x y z w) = (\w' -> Context x y z w') <$> f w++newContext :: Options -> Context m v+newContext = Context emptyScopes nullSpan []
+ src/Nix/Convert.hs view
@@ -0,0 +1,583 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MonoLocalBinds #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE UndecidableInstances #-}++{-# OPTIONS_GHC -Wno-missing-signatures #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}++-- | Although there are a lot of instances in this file, really it's just a+--   combinatorial explosion of the following combinations:+--+--   - Several Haskell types being converted to/from Nix wrappers+--   - Several types of Nix wrappers+--   - Whether to be shallow or deep while unwrapping++module Nix.Convert where++import           Control.Monad+import           Data.Aeson (toJSON)+import qualified Data.Aeson as A+import           Data.ByteString+import           Data.Fix+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.Scientific+import           Data.Text (Text)+import qualified Data.Text as Text+import           Data.Text.Encoding (encodeUtf8, decodeUtf8)+import qualified Data.Vector as V+import           Nix.Atoms+import           Nix.Effects+import           Nix.Expr.Types+import           Nix.Expr.Types.Annotated+import           Nix.Frames+import           Nix.Normal+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value++class FromValue a m v where+    fromValue    :: v -> m a+    fromValueMay :: v -> m (Maybe a)++type Convertible e m = (Framed e m, MonadVar m, Typeable m)++instance Convertible e m => FromValue () m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF NNull) -> pure $ Just ()+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TNull v++instance Convertible e m+      => FromValue () m (NValue m) where+    fromValueMay = \case+        NVConstant NNull -> pure $ Just ()+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TNull v++instance Convertible e m+      => FromValue Bool m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF (NBool b)) -> pure $ Just b+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TBool v++instance Convertible e m+      => FromValue Bool m (NValue m) where+    fromValueMay = \case+        NVConstant (NBool b) -> pure $ Just b+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TBool v++instance Convertible e m+      => FromValue Int m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF (NInt b)) -> pure $ Just (fromInteger b)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TInt v++instance Convertible e m+      => FromValue Int m (NValue m) where+    fromValueMay = \case+        NVConstant (NInt b) -> pure $ Just (fromInteger b)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TInt v++instance Convertible e m+      => FromValue Integer m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF (NInt b)) -> pure $ Just b+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TInt v++instance Convertible e m+      => FromValue Integer m (NValue m) where+    fromValueMay = \case+        NVConstant (NInt b) -> pure $ Just b+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TInt v++instance Convertible e m+      => FromValue Float m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF (NFloat b)) -> pure $ Just b+        Fix (NVConstantF (NInt i)) -> pure $ Just (fromInteger i)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TFloat v++instance Convertible e m+      => FromValue Float m (NValue m) where+    fromValueMay = \case+        NVConstant (NFloat b) -> pure $ Just b+        NVConstant (NInt i) -> pure $ Just (fromInteger i)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TFloat v++instance (Convertible e m, MonadEffects m)+      => FromValue Text m (NValueNF m) where+    fromValueMay = \case+        Fix (NVStrF t _) -> pure $ Just t+        Fix (NVPathF p) -> Just . Text.pack . unStorePath <$> addPath p+        Fix (NVSetF s _) -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fromValueMay @Text p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TString v++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m, MonadEffects m)+      => FromValue Text m (NValue m) where+    fromValueMay = \case+        NVStr t _ -> pure $ Just t+        NVPath p -> Just . Text.pack . unStorePath <$> addPath p+        NVSet s _ -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fromValueMay @Text p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TString v++instance (Convertible e m, MonadEffects m)+      => FromValue (Text, DList Text) m (NValueNF m) where+    fromValueMay = \case+        Fix (NVStrF t d) -> pure $ Just (t, d)+        Fix (NVPathF p) -> Just . (,mempty) . Text.pack . unStorePath <$> addPath p+        Fix (NVSetF s _) -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fmap (,mempty) <$> fromValueMay @Text p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TString v++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m, MonadEffects m)+      => FromValue (Text, DList Text) m (NValue m) where+    fromValueMay = \case+        NVStr t d -> pure $ Just (t, d)+        NVPath p -> Just . (,mempty) . Text.pack . unStorePath <$> addPath p+        NVSet s _ -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fmap (,mempty) <$> fromValueMay @Text p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TString v++instance Convertible e m+      => FromValue ByteString m (NValueNF m) where+    fromValueMay = \case+        Fix (NVStrF t _) -> pure $ Just (encodeUtf8 t)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TString v++instance Convertible e m+      => FromValue ByteString m (NValue m) where+    fromValueMay = \case+        NVStr t _ -> pure $ Just (encodeUtf8 t)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TString v++newtype Path = Path { getPath :: FilePath }+    deriving Show++instance Convertible e m => FromValue Path m (NValueNF m) where+    fromValueMay = \case+        Fix (NVPathF p) -> pure $ Just (Path p)+        Fix (NVStrF s _) -> pure $ Just (Path (Text.unpack s))+        Fix (NVSetF s _) -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fromValueMay @Path p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TPath v++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m)+      => FromValue Path m (NValue m) where+    fromValueMay = \case+        NVPath p -> pure $ Just (Path p)+        NVStr s _ -> pure $ Just (Path (Text.unpack s))+        NVSet s _ -> case M.lookup "outPath" s of+            Nothing -> pure Nothing+            Just p -> fromValueMay @Path p+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TPath v++instance (Convertible e m, FromValue a m (NValueNF m), Show a)+      => FromValue [a] m (NValueNF m) where+    fromValueMay = \case+        Fix (NVListF l) -> sequence <$> traverse fromValueMay l+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TList v++instance Convertible e m => FromValue [NThunk m] m (NValue m) where+    fromValueMay = \case+        NVList l -> pure $ Just l+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TList v++instance Convertible e m+      => FromValue (HashMap Text (NValueNF m)) m (NValueNF m) where+    fromValueMay = \case+        Fix (NVSetF s _) -> pure $ Just s+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TSet v++instance Convertible e m+      => FromValue (HashMap Text (NThunk m)) m (NValue m) where+    fromValueMay = \case+        NVSet s _ -> pure $ Just s+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TSet v++instance Convertible e m+      => FromValue (HashMap Text (NValueNF m),+                 HashMap Text SourcePos) m (NValueNF m) where+    fromValueMay = \case+        Fix (NVSetF s p) -> pure $ Just (s, p)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ ExpectationNF TSet v++instance Convertible e m+      => FromValue (HashMap Text (NThunk m),+                   HashMap Text SourcePos) m (NValue m) where+    fromValueMay = \case+        NVSet s p -> pure $ Just (s, p)+        _ -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TSet v++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m)+      => FromValue (NThunk m) m (NValue m) where+    fromValueMay = pure . Just . value @_ @_ @m+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> error "Impossible, see fromValueMay"++instance (Monad m, FromValue a m v) => FromValue a m (m v) where+    fromValueMay = (>>= fromValueMay)+    fromValue    = (>>= fromValue)++instance (MonadThunk (NValue m) (NThunk m) m, FromValue a m (NValue m))+      => FromValue a m (NThunk m) where+    fromValueMay = force ?? fromValueMay+    fromValue    = force ?? fromValue++instance (Convertible e m, MonadEffects m)+      => FromValue A.Value m (NValueNF m) where+    fromValueMay = \case+        Fix (NVConstantF a) -> pure $ Just $ case a of+            NInt n   -> toJSON n+            NFloat n -> toJSON n+            NBool b  -> toJSON b+            NNull    -> A.Null+        Fix (NVStrF s _)     -> pure $ Just $ toJSON s+        Fix (NVListF l)      -> fmap (A.Array . V.fromList) . sequence+                                  <$> traverse fromValueMay l+        Fix (NVSetF m _)     -> fmap A.Object . sequence <$> traverse fromValueMay m+        Fix NVClosureF {}    -> pure Nothing+        Fix (NVPathF p)      -> Just . toJSON . unStorePath <$> addPath p+        Fix (NVBuiltinF _ _) -> pure Nothing+    fromValue v = fromValueMay v >>= \case+        Just b -> pure b+        _ -> throwError $ CoercionToJsonNF v++class ToValue a m v where+    toValue :: a -> m v++instance Applicative m => ToValue () m (NValueNF m) where+    toValue _ = pure . Fix . NVConstantF $ NNull++instance Applicative m => ToValue () m (NValue m) where+    toValue _ = pure . nvConstant $ NNull++instance Applicative m => ToValue Bool m (NValueNF m) where+    toValue = pure . Fix . NVConstantF . NBool++instance Applicative m => ToValue Bool m (NValue m) where+    toValue = pure . nvConstant . NBool++instance Applicative m => ToValue Int m (NValueNF m) where+    toValue = pure . Fix . NVConstantF . NInt . toInteger++instance Applicative m => ToValue Int m (NValue m) where+    toValue = pure . nvConstant . NInt . toInteger++instance Applicative m => ToValue Integer m (NValueNF m) where+    toValue = pure . Fix . NVConstantF . NInt++instance Applicative m => ToValue Integer m (NValue m) where+    toValue = pure . nvConstant . NInt++instance Applicative m => ToValue Float m (NValueNF m) where+    toValue = pure . Fix . NVConstantF . NFloat++instance Applicative m => ToValue Float m (NValue m) where+    toValue = pure . nvConstant . NFloat++instance Applicative m => ToValue Text m (NValueNF m) where+    toValue = pure . Fix . flip NVStrF mempty++instance Applicative m => ToValue Text m (NValue m) where+    toValue = pure . flip nvStr mempty++instance Applicative m => ToValue (Text, DList Text) m (NValueNF m) where+    toValue = pure . Fix . uncurry NVStrF++instance Applicative m => ToValue (Text, DList Text) m (NValue m) where+    toValue = pure . uncurry nvStr++instance Applicative m => ToValue ByteString m (NValueNF m) where+    toValue = pure . Fix . flip NVStrF mempty . decodeUtf8++instance Applicative m => ToValue ByteString m (NValue m) where+    toValue = pure . flip nvStr mempty . decodeUtf8++instance Applicative m => ToValue Path m (NValueNF m) where+    toValue = pure . Fix . NVPathF . getPath++instance Applicative m => ToValue Path m (NValue m) where+    toValue = pure . nvPath . getPath++instance MonadThunk (NValue m) (NThunk m) m+      => ToValue SourcePos m (NValue m) where+    toValue (SourcePos f l c) = do+        f' <- toValue (Text.pack f)+        l' <- toValue (unPos l)+        c' <- toValue (unPos c)+        let pos = M.fromList+                [ ("file" :: Text, value @_ @_ @m f')+                , ("line",        value @_ @_ @m l')+                , ("column",      value @_ @_ @m c') ]+        pure $ nvSet pos mempty++instance (ToValue a m (NValueNF m), Applicative m)+      => ToValue [a] m (NValueNF m) where+    toValue = fmap (Fix . NVListF) . traverse toValue++instance Applicative m => ToValue [NThunk m] m (NValue m) where+    toValue = pure . nvList++instance Applicative m+      => ToValue (HashMap Text (NValueNF m)) m (NValueNF m) where+    toValue = pure . Fix . flip NVSetF M.empty++instance Applicative m => ToValue (HashMap Text (NThunk m)) m (NValue m) where+    toValue = pure . flip nvSet M.empty++instance Applicative m => ToValue (HashMap Text (NValueNF m),+                HashMap Text SourcePos) m (NValueNF m) where+    toValue (s, p) = pure $ Fix $ NVSetF s p++instance Applicative m => ToValue (HashMap Text (NThunk m),+                HashMap Text SourcePos) m (NValue m) where+    toValue (s, p) = pure $ nvSet s p++instance (MonadThunk (NValue m) (NThunk m) m, ToValue a m (NValue m))+      => ToValue a m (NThunk m) where+    toValue = fmap (value @(NValue m) @_ @m) . toValue++instance Applicative m => ToValue Bool m (NExprF r) where+    toValue = pure . NConstant . NBool++instance Applicative m => ToValue () m (NExprF r) where+    toValue _ = pure . NConstant $ NNull++whileForcingThunk :: forall s e m r. (Framed e m, Exception s, Typeable m)+                  => s -> m r -> m r+whileForcingThunk frame =+    withFrame Debug (ForcingThunk @m) . withFrame Debug frame++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m)+      => ToValue A.Value m (NValue m) where+    toValue = \case+        A.Object m -> flip nvSet M.empty+            <$> traverse (thunk . toValue @_ @_ @(NValue m)) m+        A.Array l -> nvList <$>+            traverse (\x -> thunk . whileForcingThunk (CoercionFromJson @m x)+                                 . toValue $ x) (V.toList l)+        A.String s -> pure $ nvStr s mempty+        A.Number n -> pure $ nvConstant $ case floatingOrInteger n of+            Left r -> NFloat r+            Right i -> NInt i+        A.Bool b -> pure $ nvConstant $ NBool b+        A.Null -> pure $ nvConstant NNull++class FromNix a m v where+    fromNix :: v -> m a+    default fromNix :: FromValue a m v => v -> m a+    fromNix = fromValue++    fromNixMay :: v -> m (Maybe a)+    default fromNixMay :: FromValue a m v => v -> m (Maybe a)+    fromNixMay = fromValueMay++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m,+          FromNix a m (NValue m))+      => FromNix [a] m (NValue m) where+    fromNixMay = \case+        NVList l -> sequence <$> traverse (`force` fromNixMay) l+        _ -> pure Nothing+    fromNix v = fromNixMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TList v++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m,+          FromNix a m (NValue m))+      => FromNix (HashMap Text a) m (NValue m) where+    fromNixMay = \case+        NVSet s _ -> sequence <$> traverse (`force` fromNixMay) s+        _ -> pure Nothing+    fromNix v = fromNixMay v >>= \case+        Just b -> pure b+        _ -> throwError $ Expectation TSet v++instance Convertible e m => FromNix () m (NValueNF m) where+instance Convertible e m => FromNix () m (NValue m) where+instance Convertible e m => FromNix Bool m (NValueNF m) where+instance Convertible e m => FromNix Bool m (NValue m) where+instance Convertible e m => FromNix Int m (NValueNF m) where+instance Convertible e m => FromNix Int m (NValue m) where+instance Convertible e m => FromNix Integer m (NValueNF m) where+instance Convertible e m => FromNix Integer m (NValue m) where+instance Convertible e m => FromNix Float m (NValueNF m) where+instance Convertible e m => FromNix Float m (NValue m) where+instance (Convertible e m, MonadEffects m) => FromNix Text m (NValueNF m) where+instance (Convertible e m, MonadEffects m, MonadThunk (NValue m) (NThunk m) m) => FromNix Text m (NValue m) where+instance (Convertible e m, MonadEffects m) => FromNix (Text, DList Text) m (NValueNF m) where+instance (Convertible e m, MonadEffects m, MonadThunk (NValue m) (NThunk m) m) => FromNix (Text, DList Text) m (NValue m) where+instance Convertible e m => FromNix ByteString m (NValueNF m) where+instance Convertible e m => FromNix ByteString m (NValue m) where+instance Convertible e m => FromNix Path m (NValueNF m) where+instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m) => FromNix Path m (NValue m) where+instance (Convertible e m, FromValue a m (NValueNF m), Show a) => FromNix [a] m (NValueNF m) where+instance Convertible e m => FromNix (HashMap Text (NValueNF m)) m (NValueNF m) where+instance Convertible e m => FromNix (HashMap Text (NValueNF m), HashMap Text SourcePos) m (NValueNF m) where+instance Convertible e m => FromNix (HashMap Text (NThunk m), HashMap Text SourcePos) m (NValue m) where+instance (Convertible e m, MonadEffects m, MonadThunk (NValue m) (NThunk m) m) => FromNix A.Value m (NValueNF m) where++instance (Convertible e m, MonadEffects m,+          MonadThunk (NValue m) (NThunk m) m) => FromNix A.Value m (NValue m) where+    fromNixMay = fromNixMay <=< normalForm+    fromNix    = fromNix <=< normalForm++instance (Monad m, FromNix a m v) => FromNix a m (m v) where+    fromNixMay = (>>= fromNixMay)+    fromNix    = (>>= fromNix)++instance (MonadThunk (NValue m) (NThunk m) m, FromNix a m (NValue m))+      => FromNix a m (NThunk m) where+    fromNixMay = force ?? fromNixMay+    fromNix    = force ?? fromNix++instance MonadThunk (NValue m) (NThunk m) m+      => FromNix (NThunk m) m (NValue m) where+    fromNixMay = pure . Just . value+    fromNix    = pure . value++class ToNix a m v where+    toNix :: a -> m v+    default toNix :: ToValue a m v => a -> m v+    toNix = toValue++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m,+          ToNix a m (NValue m))+      => ToNix [a] m (NValue m) where+    toNix = fmap nvList+        . traverse (thunk . ((\v -> whileForcingThunk (ConcerningValue v) (pure v))+                                <=< toNix))++instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m,+          ToNix a m (NValue m))+      => ToNix (HashMap Text a) m (NValue m) where+    toNix = fmap (flip nvSet M.empty)+        . traverse (thunk . ((\v -> whileForcingThunk (ConcerningValue v) (pure v))+                                <=< toNix))++instance Applicative m => ToNix () m (NValueNF m) where+instance Applicative m => ToNix () m (NValue m) where+instance Applicative m => ToNix Bool m (NValueNF m) where+instance Applicative m => ToNix Bool m (NValue m) where+instance Applicative m => ToNix Int m (NValueNF m) where+instance Applicative m => ToNix Int m (NValue m) where+instance Applicative m => ToNix Integer m (NValueNF m) where+instance Applicative m => ToNix Integer m (NValue m) where+instance Applicative m => ToNix Float m (NValueNF m) where+instance Applicative m => ToNix Float m (NValue m) where+instance Applicative m => ToNix Text m (NValueNF m) where+instance Applicative m => ToNix Text m (NValue m) where+instance Applicative m => ToNix (Text, DList Text) m (NValueNF m) where+instance Applicative m => ToNix (Text, DList Text) m (NValue m) where+instance Applicative m => ToNix ByteString m (NValueNF m) where+instance Applicative m => ToNix ByteString m (NValue m) where+instance Applicative m => ToNix Path m (NValueNF m) where+instance Applicative m => ToNix Path m (NValue m) where+instance Applicative m => ToNix (HashMap Text (NValueNF m)) m (NValueNF m) where+instance Applicative m => ToNix (HashMap Text (NValueNF m), HashMap Text SourcePos) m (NValueNF m) where+instance Applicative m => ToNix (HashMap Text (NThunk m), HashMap Text SourcePos) m (NValue m) where+instance (Convertible e m, MonadThunk (NValue m) (NThunk m) m) => ToNix A.Value m (NValue m) where+instance Applicative m => ToNix Bool m (NExprF r) where+instance Applicative m => ToNix () m (NExprF r) where++instance (MonadThunk (NValue m) (NThunk m) m, ToNix a m (NValue m))+      => ToNix a m (NThunk m) where+    toNix = thunk . toNix++instance (Applicative m, ToNix a m (NValueNF m)) => ToNix [a] m (NValueNF m) where+    toNix = fmap (Fix . NVListF) . traverse toNix++instance MonadThunk (NValue m) (NThunk m) m => ToNix (NThunk m) m (NValue m) where+    toNix = force ?? pure++convertNix :: forall a t m v. (FromNix a m t, ToNix a m v, Monad m) => t -> m v+convertNix = fromNix @a >=> toNix
+ src/Nix/Effects.hs view
@@ -0,0 +1,40 @@+module Nix.Effects where++import Data.Text (Text)+import Nix.Render+import Nix.Utils+import Nix.Value+import System.Posix.Files++-- | A path into the nix store+newtype StorePath = StorePath { unStorePath :: FilePath }++class MonadFile m => MonadEffects m where+    -- | Import a path into the nix store, and return the resulting path+    addPath :: FilePath -> m StorePath++    -- | Determine the absolute path of relative path in the current context+    makeAbsolutePath :: FilePath -> m FilePath+    findEnvPath :: String -> m FilePath++    pathExists :: FilePath -> m Bool+    importPath :: AttrSet (NThunk m) -> FilePath -> m (NValue m)++    getEnvVar :: String -> m (Maybe String)+    getCurrentSystemOS :: m Text+    getCurrentSystemArch :: m Text++    listDirectory :: FilePath -> m [FilePath]+    getSymbolicLinkStatus :: FilePath -> m FileStatus++    derivationStrict :: NValue m -> m (NValue m)++    nixInstantiateExpr :: String -> m (NValue m)++    getURL :: Text -> m (NValue m)++    getRecursiveSize :: a -> m (NValue m)++    traceEffect :: String -> m ()++    exec :: [String] -> m (NValue m)
+ src/Nix/Eval.hs view
@@ -0,0 +1,442 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE PartialTypeSignatures #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}++{-# OPTIONS_GHC -fno-warn-name-shadowing #-}++module Nix.Eval where++import           Control.Monad+import           Control.Monad.Fix+import           Control.Monad.Reader+import           Control.Monad.State.Strict+import           Data.Align.Key+import           Data.Fix+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.List (partition, foldl')+import           Data.List.NonEmpty (NonEmpty(..))+import           Data.Maybe (fromMaybe, catMaybes)+import           Data.Text (Text)+import qualified Data.Text as Text+import           Data.These+import           Data.Traversable (for)+import           Nix.Atoms+import           Nix.Convert+import           Nix.Expr+import           Nix.Frames+import           Nix.Scope+import           Nix.Strings (runAntiquoted)+import           Nix.Thunk+import           Nix.Utils++class (Show v, Monad m) => MonadEval v m | v -> m where+    freeVariable :: Text -> m v+    attrMissing  :: NonEmpty Text -> Maybe v -> m v+    evaledSym    :: Text -> v -> m v++    evalCurPos      :: m v+    evalConstant    :: NAtom -> m v+    evalString      :: NString (m v) -> m v+    evalLiteralPath :: FilePath -> m v+    evalEnvPath     :: FilePath -> m v+    evalUnary       :: NUnaryOp -> v -> m v+    evalBinary      :: NBinaryOp -> v -> m v -> m v+    -- ^ The second argument is an action because operators such as boolean &&+    -- and || may not evaluate the second argument.+    evalWith        :: m v -> m v -> m v+    evalIf          :: v -> m v -> m v -> m v+    evalAssert      :: v -> m v -> m v+    evalApp         :: v -> m v -> m v+    evalAbs         :: Params (m v)+                    -> (forall a. m v -> (AttrSet (m v) -> m v -> m (a, v)) -> m (a, v))+                    -> m v++{-+    evalSelect     :: v -> NonEmpty Text -> Maybe (m v) -> m v+    evalHasAttr    :: v -> NonEmpty Text -> m v++    -- | This and the following methods are intended to allow things like+    --   adding provenance information.+    evalListElem   :: [m v] -> Int -> m v -> m v+    evalList       :: [t] -> m v+    evalSetElem    :: AttrSet (m v) -> Text -> m v -> m v+    evalSet        :: AttrSet t -> AttrSet SourcePos -> m v+    evalRecSetElem :: AttrSet (m v) -> Text -> m v -> m v+    evalRecSet     :: AttrSet t -> AttrSet SourcePos -> m v+    evalLetElem    :: Text -> m v -> m v+    evalLet        :: m v -> m v+-}++    evalError :: Exception s => s -> m a++type MonadNixEval e v t m =+    (MonadEval v m,+     Scoped e t m,+     MonadThunk v t m,+     MonadFix m,+     ToValue Bool m v,+     ToValue [t] m v,+     FromValue (Text, DList Text) m v,+     ToValue (AttrSet t, AttrSet SourcePos) m v,+     FromValue (AttrSet t, AttrSet SourcePos) m v)++data EvalFrame m v+    = EvaluatingExpr (Scopes m v) NExprLoc+    | ForcingExpr (Scopes m v) NExprLoc+    | Calling String SrcSpan+    deriving (Show, Typeable)++instance (Typeable m, Typeable v) => Exception (EvalFrame m v)++eval :: forall e v t m. MonadNixEval e v t m => NExprF (m v) -> m v++eval (NSym "__curPos") = evalCurPos++eval (NSym var) =+    lookupVar var >>= maybe (freeVariable var) (force ?? evaledSym var)++eval (NConstant x)          = evalConstant x+eval (NStr str)             = evalString str+eval (NLiteralPath p)       = evalLiteralPath p+eval (NEnvPath p)           = evalEnvPath p+eval (NUnary op arg)        = evalUnary op =<< arg++eval (NBinary NApp fun arg) = do+    scope <- currentScopes @_ @t+    evalApp ?? withScopes scope arg =<< fun++eval (NBinary op larg rarg) = larg >>= \lval -> evalBinary op lval rarg++eval (NSelect aset attr alt) = do+    traceM "NSelect"+    mres <- evalSelect aset attr+    traceM "NSelect..2"+    case mres of+        Right v -> v+        Left (s, ks) -> fromMaybe (attrMissing ks (Just s)) alt++eval (NHasAttr aset attr) =+    toValue . either (const False) (const True) =<< evalSelect aset attr++eval (NList l) = do+    scope <- currentScopes+    toValue =<< for l (thunk . withScopes @t scope)++eval (NSet binds) = do+    traceM "NSet..1"+    (s, p) <- evalBinds True False binds+    traceM $ "NSet..2: s = " ++ show (void s)+    traceM $ "NSet..2: p = " ++ show (void p)+    toValue (s, p)++eval (NRecSet binds) = do+    traceM "NRecSet..1"+    (s, p) <- evalBinds True True (desugarBinds (eval . NRecSet) binds)+    traceM $ "NRecSet..2: s = " ++ show (void s)+    traceM $ "NRecSet..2: p = " ++ show (void p)+    toValue (s, p)++eval (NLet binds body) = do+    traceM "Let..1"+    (s, _) <- evalBinds True True binds+    traceM $ "Let..2: s = " ++ show (void s)+    pushScope s body++eval (NIf cond t f) = cond >>= \v -> evalIf v t f++eval (NWith scope body) = evalWith scope body++eval (NAssert cond body) = cond >>= evalAssert ?? body++eval (NAbs params body) = do+    -- It is the environment at the definition site, not the call site, that+    -- needs to be used when evaluating the body and default arguments, hence+    -- we defer here so the present scope is restored when the parameters and+    -- body are forced during application.+    scope <- currentScopes @_ @t+    evalAbs params $ \arg k ->+        withScopes @t scope $ do+            args <- buildArgument params arg+            pushScope args (k (M.map (`force` pure) args) body)++-- | If you know that the 'scope' action will result in an 'AttrSet t', then+--   this implementation may be used as an implementation for 'evalWith'.+evalWithAttrSet :: forall e v t m. MonadNixEval e v t m => m v -> m v -> m v+evalWithAttrSet scope body = do+    -- The scope is deliberately wrapped in a thunk here, since it is+    -- evaluated each time a name is looked up within the weak scope, and+    -- we want to be sure the action it evaluates is to force a thunk, so+    -- its value is only computed once.+    cur <- currentScopes @_ @t+    s <- thunk $ withScopes cur scope+    pushWeakScope ?? body $ force s $+        fmap fst . fromValue @(AttrSet t, AttrSet SourcePos)++attrSetAlter :: forall e v t m. MonadNixEval e v t m+             => [Text]+             -> AttrSet (m v)+             -> m v+             -> m (AttrSet (m v))+attrSetAlter [] _ _ =+    evalError @v $ ErrorCall "invalid selector with no components"+attrSetAlter (p:ps) m val = case M.lookup p m of+    Nothing+        | null ps   -> go+        | otherwise -> recurse M.empty+    Just x+        | null ps   -> go+        | otherwise ->+          x >>= fromValue @(AttrSet t, AttrSet SourcePos)+              >>= \(s, _) -> recurse (force ?? pure <$> s)+  where+    go = return $ M.insert p val m++    recurse s = attrSetAlter ps s val <&> \m' ->+        M.insert p (toValue @(AttrSet t, AttrSet SourcePos)+                        =<< fmap (, mempty)+                                 (fmap (value @_ @_ @m) <$> sequence m')) m++desugarBinds :: forall r. ([Binding r] -> r) -> [Binding r] -> [Binding r]+desugarBinds embed binds = evalState (mapM (go <=< collect) binds) M.empty+  where+    collect :: Binding r+            -> State (HashMap VarName (SourcePos, [Binding r]))+                     (Either VarName (Binding r))+    collect (NamedVar (StaticKey x :| y:ys) val p) = do+        m <- get+        let v = case M.lookup x m of+                Nothing     -> (p, [NamedVar (y:|ys) val p])+                Just (p, v) -> (p, NamedVar (y:|ys) val p : v)+        put $ M.insert x v m+        pure $ Left x+    collect x = pure $ Right x++    go :: Either VarName (Binding r)+       -> State (HashMap VarName (SourcePos, [Binding r]))+                (Binding r)+    go (Right x) = pure x+    go (Left x) = do+        Just (p, v) <- gets $ M.lookup x+        pure $ NamedVar (StaticKey x :| []) (embed v) p++evalBinds :: forall e v t m. MonadNixEval e v t m+          => Bool+          -> Bool+          -> [Binding (m v)]+          -> m (AttrSet t, AttrSet SourcePos)+evalBinds allowDynamic recursive binds = do+    scope <- currentScopes @_ @t+    buildResult scope . concat =<< mapM (go scope) (moveOverridesLast binds)+  where+    moveOverridesLast = (\(x, y) -> y ++ x) .+        partition (\case NamedVar (StaticKey "__overrides" :| []) _ _pos -> True+                         _ -> False)++    go :: Scopes m t -> Binding (m v) -> m [([Text], SourcePos, m v)]+    go _ (NamedVar (StaticKey "__overrides" :| []) finalValue pos) =+        finalValue >>= fromValue >>= \(o', p') ->+            -- jww (2018-05-09): What to do with the key position here?+            return $ map (\(k, v) -> ([k], fromMaybe pos (M.lookup k p'),+                                     force v pure))+                         (M.toList o')++    go _ (NamedVar pathExpr finalValue pos) = do+        let go :: NAttrPath (m v) -> m ([Text], SourcePos, m v)+            go = \case+                h :| t -> evalSetterKeyName allowDynamic h >>= \case+                    Nothing ->+                        pure ([], nullPos,+                              toValue @(AttrSet t, AttrSet SourcePos)+                                  (mempty, mempty))+                    Just k -> case t of+                        [] -> pure ([k], pos, finalValue)+                        x:xs -> do+                            (restOfPath, _, v) <- go (x:|xs)+                            pure (k : restOfPath, pos, v)+        go pathExpr <&> \case+            -- When there are no path segments, e.g. `${null} = 5;`, we don't+            -- bind anything+            ([], _, _) -> []+            result -> [result]++    go scope (Inherit ms names pos) = fmap catMaybes $ forM names $+        evalSetterKeyName allowDynamic >=> \case+            Nothing -> return Nothing+            Just key -> return $ Just ([key], pos, do+                mv <- case ms of+                    Nothing -> withScopes scope $ lookupVar key+                    Just s -> s+                        >>= fromValue @(AttrSet t, AttrSet SourcePos)+                        >>= \(s, _) ->+                            clearScopes @t $ pushScope s $ lookupVar key+                case mv of+                    Nothing -> attrMissing (key :| []) Nothing+                    Just v -> force v pure)++    buildResult :: Scopes m t+                -> [([Text], SourcePos, m v)]+                -> m (AttrSet t, AttrSet SourcePos)+    buildResult scope bindings = do+        s <- foldM insert M.empty bindings+        res <- if recursive+               then loebM (encapsulate <$> s)+               else traverse (thunk . withScopes scope) s+        return (res, foldl' go M.empty bindings)+      where+        go m ([k], pos, _) = M.insert k pos m+        go m _ = m++        encapsulate f attrs =+            thunk . withScopes scope . pushScope attrs $ f++        insert m (path, _, value) = attrSetAlter path m value++evalSelect :: forall e v t m. MonadNixEval e v t m+           => m v+           -> NAttrPath (m v)+           -> m (Either (v, NonEmpty Text) (m v))+evalSelect aset attr = do+    traceM "evalSelect"+    s <- aset+    traceM "evalSelect..2"+    path <- evalSelector True attr+    traceM $ "evalSelect..3: " ++ show path+    res <- extract s path+    traceM "evalSelect..4"+    return res+  where+    extract x path@(k:|ks) = fromValueMay x >>= \case+        Just (s :: AttrSet t, p :: AttrSet SourcePos) ->+            case M.lookup k s of+                Just t -> do+                    traceM $ "Forcing value at selector " ++ Text.unpack k+                    case ks of+                        []   -> pure $ Right $ force t pure+                        y:ys -> force t $ extract ?? (y:|ys)+                Nothing ->+                    Left . (, path) <$> toValue (s, p)+        Nothing ->+            return $ Left (x, path)++evalSelector :: (MonadEval v m, FromValue (Text, DList Text) m v)+             => Bool -> NAttrPath (m v) -> m (NonEmpty Text)+evalSelector = traverse . evalGetterKeyName++-- | Evaluate a component of an attribute path in a context where we are+-- *retrieving* a value+evalGetterKeyName :: (MonadEval v m, FromValue (Text, DList Text) m v)+                  => Bool -> NKeyName (m v) -> m Text+evalGetterKeyName canBeDynamic+    | canBeDynamic = evalKeyNameDynamicNotNull+    | otherwise    = evalKeyNameStatic++evalKeyNameStatic :: forall v m. MonadEval v m => NKeyName (m v) -> m Text+evalKeyNameStatic = \case+    StaticKey k -> pure k+    _ -> evalError @v $ ErrorCall "dynamic attribute not allowed in this context"++evalKeyNameDynamicNotNull+    :: forall v m. (MonadEval v m, FromValue (Text, DList Text) m v)+    => NKeyName (m v) -> m Text+evalKeyNameDynamicNotNull = evalKeyNameDynamicNullable >=> \case+    Just k -> pure k+    Nothing -> evalError @v $ ErrorCall "value is null while a string was expected"++-- | Evaluate a component of an attribute path in a context where we are+-- *binding* a value+evalSetterKeyName :: (MonadEval v m, FromValue (Text, DList Text) m v)+                  => Bool -> NKeyName (m v) -> m (Maybe Text)+evalSetterKeyName canBeDynamic+    | canBeDynamic = evalKeyNameDynamicNullable+    | otherwise    = fmap Just . evalKeyNameStatic++-- | Returns Nothing iff the key value is null+evalKeyNameDynamicNullable+    :: forall v m. (MonadEval v m, FromValue (Text, DList Text) m v)+    => NKeyName (m v)+    -> m (Maybe Text)+evalKeyNameDynamicNullable = \case+    StaticKey k -> pure (Just k)+    DynamicKey k ->+        runAntiquoted "\n" assembleString (>>= fromValueMay) k+            <&> \case Just (t, _) -> Just t+                      _ -> Nothing++assembleString :: forall v m. (MonadEval v m, FromValue (Text, DList Text) m v)+               => NString (m v) -> m (Maybe (Text, DList Text))+assembleString = \case+    Indented _   parts -> fromParts parts+    DoubleQuoted parts -> fromParts parts+  where+    go = runAntiquoted "\n" (pure . Just . (, mempty)) (>>= fromValueMay)++    fromParts parts = fmap mconcat . sequence <$> mapM go parts++buildArgument :: forall e v t m. MonadNixEval e v t m+              => Params (m v) -> m v -> m (AttrSet t)+buildArgument params arg = do+    scope <- currentScopes @_ @t+    case params of+        Param name -> M.singleton name+            <$> thunk (withScopes scope arg)+        ParamSet s isVariadic m ->+            arg >>= fromValue @(AttrSet t, AttrSet SourcePos)+                >>= \(args, _) -> do+                let inject = case m of+                        Nothing -> id+                        Just n -> M.insert n $ const $+                            thunk (withScopes scope arg)+                loebM (inject $ alignWithKey (assemble scope isVariadic)+                                             args (M.fromList s))+  where+    assemble :: Scopes m t+             -> Bool+             -> Text+             -> These t (Maybe (m v))+             -> AttrSet t+             -> m t+    assemble scope isVariadic k = \case+        That Nothing  ->+            const $ evalError @v $ ErrorCall $+                "Missing value for parameter: " ++ show k+        That (Just f) -> \args ->+            thunk $ withScopes scope $ pushScope args f+        This x | isVariadic -> const (pure x)+               | otherwise  ->+                 const $ evalError @v $ ErrorCall $+                     "Unexpected parameter: " ++ show k+        These x _ -> const (pure x)++addSourcePositions :: (MonadReader e m, Has e SrcSpan)+                   => Transform NExprLocF (m a)+addSourcePositions f v@(Fix (Compose (Ann ann _))) =+    local (set hasLens ann) (f v)++addStackFrames+    :: forall t e m a. (Scoped e t m, Framed e m, Typeable t, Typeable m)+    => Transform NExprLocF (m a)+addStackFrames f v = do+    scopes <- currentScopes @e @t+    withFrame Info (EvaluatingExpr scopes v) (f v)++framedEvalExprLoc+    :: forall t e v m.+      (MonadNixEval e v t m, Framed e m, Has e SrcSpan,+       Typeable t, Typeable m)+    => NExprLoc -> m v+framedEvalExprLoc = adi (eval . annotated . getCompose)+                        (addStackFrames @t . addSourcePositions)
+ src/Nix/Exec.hs view
@@ -0,0 +1,758 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PartialTypeSignatures #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE ViewPatterns #-}++{-# OPTIONS_GHC -Wno-missing-signatures #-}+{-# OPTIONS_GHC -Wno-orphans #-}+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}++module Nix.Exec where++import           Control.Applicative+import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.Fix+import           Control.Monad.IO.Class+import           Control.Monad.Reader+import           Control.Monad.State.Strict+import           Control.Monad.Trans.Reader (ReaderT(..))+import           Control.Monad.Trans.State.Strict (StateT(..))+import qualified Data.ByteString as BS+import           Data.Coerce+import           Data.Fix+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.IORef+import           Data.List+import qualified Data.List.NonEmpty as NE+import           Data.List.Split+import           Data.Text (Text)+import qualified Data.Text as Text+import           Data.Typeable+import           Network.HTTP.Client+import           Network.HTTP.Client.TLS+import           Network.HTTP.Types+import           Nix.Atoms+import           Nix.Context+import           Nix.Convert+import           Nix.Effects+import           Nix.Eval as Eval+import           Nix.Expr+import           Nix.Frames+import           Nix.Normal+import           Nix.Options+import           Nix.Parser+import           Nix.Pretty+import           Nix.Render+import           Nix.Scope+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value+#if MIN_VERSION_haskeline(0, 4, 7)+import           System.Console.Haskeline.MonadException hiding (catch)+#endif+import           System.Directory+import           System.Environment+import           System.Exit (ExitCode (ExitSuccess))+import           System.FilePath+import qualified System.Info+import           System.Posix.Files+import           System.Process (readProcessWithExitCode)+import           Text.PrettyPrint.ANSI.Leijen (text)+import qualified Text.PrettyPrint.ANSI.Leijen as P++#ifdef MIN_VERSION_ghc_datasize+#if MIN_VERSION_ghc_datasize(0,2,0) && __GLASGOW_HASKELL__ >= 804+import           GHC.DataSize+#endif+#endif++type MonadNix e m =+    (Scoped e (NThunk m) m, Framed e m, Has e SrcSpan, Has e Options,+     Typeable m, MonadVar m, MonadEffects m, MonadFix m, MonadCatch m,+     Alternative m)++data ExecFrame m = Assertion SrcSpan (NValue m)+    deriving (Show, Typeable)++instance Typeable m => Exception (ExecFrame m)++nverr :: forall s e m a. (MonadNix e m, Exception s) => s -> m a+nverr = evalError @(NValue m)++currentPos :: forall e m. (MonadReader e m, Has e SrcSpan) => m SrcSpan+currentPos = asks (view hasLens)++wrapExprLoc :: SrcSpan -> NExprLocF r -> NExprLoc+wrapExprLoc span x = Fix (Fix (NSym_ span "<?>") <$ x)++instance MonadNix e m => MonadThunk (NValue m) (NThunk m) m where+    thunk mv = do+        opts :: Options <- asks (view hasLens)++        if thunks opts+            then do+                frames :: Frames <- asks (view hasLens)++                -- Gather the current evaluation context at the time of thunk+                -- creation, and record it along with the thunk.+                let go (fromException ->+                            Just (EvaluatingExpr scope+                                     (Fix (Compose (Ann span e))))) =+                        let e' = Compose (Ann span (Nothing <$ e))+                        in [Provenance scope e']+                    go _ = []+                    ps = concatMap (go . frame) frames++                fmap (NThunk ps . coerce) . buildThunk $ mv+            else+                fmap (NThunk [] . coerce) . buildThunk $ mv++    -- The ThunkLoop exception is thrown as an exception with MonadThrow,+    -- which does not capture the current stack frame information to provide+    -- it in a NixException, so we catch and re-throw it here using+    -- 'throwError' from Frames.hs.+    force (NThunk ps t) f = catch go (throwError @ThunkLoop)+      where+        go = case ps of+            [] -> forceThunk t f+            Provenance scope e@(Compose (Ann span _)):_ ->+                withFrame Info (ForcingExpr scope (wrapExprLoc span e))+                    (forceThunk t f)++    value = NThunk [] . coerce . valueRef++{-+prov :: MonadNix e m+     => (NValue m -> Provenance m) -> NValue m -> m (NValue m)+prov p v = do+    opts :: Options <- asks (view hasLens)+    pure $ if values opts+           then addProvenance p v+           else v+-}++instance MonadNix e m => MonadEval (NValue m) m where+    freeVariable var =+        nverr $ ErrorCall $ "Undefined variable '" ++ Text.unpack var ++ "'"++    attrMissing ks Nothing =+        evalError @(NValue m) $ ErrorCall $+            "Inheriting unknown attribute: "+                ++ intercalate "." (map Text.unpack (NE.toList ks))++    attrMissing ks (Just s) =+        evalError @(NValue m) $ ErrorCall $ "Could not look up attribute "+            ++ intercalate "." (map Text.unpack (NE.toList ks))+            ++ " in " ++ show s++    evalCurPos = do+        scope <- currentScopes+        span@(SrcSpan delta _) <- currentPos+        addProvenance (\_ -> Provenance scope (NSym_ span "__curPos"))+            <$> toValue delta++    evaledSym name val = do+        scope <- currentScopes+        span <- currentPos+        pure $ addProvenance (const $ Provenance scope (NSym_ span name)) val++    evalConstant c = do+        scope <- currentScopes+        span  <- currentPos+        pure $ nvConstantP (Provenance scope (NConstant_ span c)) c++    evalString = assembleString >=> \case+        Just (s, c) -> do+            scope <- currentScopes+            span  <- currentPos+            pure $ nvStrP (Provenance scope+                           (NStr_ span (DoubleQuoted [Plain s]))) s c+        Nothing -> nverr $ ErrorCall "Failed to assemble string"++    evalLiteralPath p = do+        scope <- currentScopes+        span  <- currentPos+        nvPathP (Provenance scope (NLiteralPath_ span p)) <$> makeAbsolutePath p++    evalEnvPath p = do+        scope <- currentScopes+        span  <- currentPos+        nvPathP (Provenance scope (NEnvPath_ span p)) <$> findEnvPath p++    evalUnary op arg = do+        scope <- currentScopes+        span  <- currentPos+        execUnaryOp scope span op arg++    evalBinary op larg rarg = do+        scope <- currentScopes+        span  <- currentPos+        execBinaryOp scope span op larg rarg++    evalWith c b = do+        scope <- currentScopes+        span <- currentPos+        addProvenance (\b -> Provenance scope (NWith_ span Nothing (Just b)))+            <$> evalWithAttrSet c b++    evalIf c t f = do+        scope <- currentScopes+        span  <- currentPos+        fromValue c >>= \b ->+            if b+            then addProvenance (\t -> Provenance scope (NIf_ span (Just c) (Just t) Nothing)) <$> t+            else addProvenance (\f -> Provenance scope (NIf_ span (Just c) Nothing (Just f))) <$> f++    evalAssert c body = fromValue c >>= \b -> do+        span  <- currentPos+        if b+            then do+                scope <- currentScopes+                addProvenance (\b -> Provenance scope (NAssert_ span (Just c) (Just b))) <$> body+            else nverr $ Assertion span c++    evalApp f x = do+        scope <- currentScopes+        span <- currentPos+        addProvenance (const $ Provenance scope (NBinary_ span NApp (Just f) Nothing))+            <$> callFunc f x++    evalAbs p k = do+        scope <- currentScopes+        span  <- currentPos+        pure $ nvClosureP (Provenance scope (NAbs_ span (Nothing <$ p) Nothing))+            (void p) (\arg -> snd <$> k arg (\_ b -> ((),) <$> b))++    evalError = throwError++infixl 1 `callFunc`+callFunc :: forall e m. (MonadNix e m, Typeable m)+         => NValue m -> m (NValue m) -> m (NValue m)+callFunc fun arg = case fun of+    NVClosure params f -> do+        traceM $ "callFunc:NVFunction taking " ++ show params+        f arg+    NVBuiltin name f -> do+        span <- currentPos+        withFrame Info (Calling @m @(NThunk m) name span) $ f arg+    s@(NVSet m _) | Just f <- M.lookup "__functor" m -> do+        traceM "callFunc:__functor"+        force f $ (`callFunc` pure s) >=> (`callFunc` arg)+    x -> throwError $ ErrorCall $ "Attempt to call non-function: " ++ show x++execUnaryOp :: (Framed e m, MonadVar m)+            => Scopes m (NThunk m) -> SrcSpan -> NUnaryOp -> NValue m+            -> m (NValue m)+execUnaryOp scope span op arg = do+    traceM "NUnary"+    case arg of+        NVConstant c -> case (op, c) of+            (NNeg, NInt   i) -> unaryOp $ NInt   (-i)+            (NNeg, NFloat f) -> unaryOp $ NFloat (-f)+            (NNot, NBool  b) -> unaryOp $ NBool  (not b)+            _ -> throwError $ ErrorCall $+                "unsupported argument type for unary operator " ++ show op+        x -> throwError $ ErrorCall $ "argument to unary operator"+                ++ " must evaluate to an atomic type: " ++ show x+  where+    unaryOp = pure . nvConstantP (Provenance scope (NUnary_ span op (Just arg)))++execBinaryOp+    :: forall e m. (MonadNix e m, MonadEval (NValue m) m)+    => Scopes m (NThunk m)+    -> SrcSpan+    -> NBinaryOp+    -> NValue m+    -> m (NValue m)+    -> m (NValue m)++execBinaryOp scope span NOr larg rarg = fromNix larg >>= \l ->+    if l+    then orOp Nothing True+    else rarg >>= \rval -> fromNix @Bool rval >>= orOp (Just rval)+  where+    orOp r b = pure $+        nvConstantP (Provenance scope (NBinary_ span NOr (Just larg) r)) (NBool b)++execBinaryOp scope span NAnd larg rarg = fromNix larg >>= \l ->+    if l+    then rarg >>= \rval -> fromNix @Bool rval >>= andOp (Just rval)+    else andOp Nothing False+  where+    andOp r b = pure $+        nvConstantP (Provenance scope (NBinary_ span NAnd (Just larg) r)) (NBool b)++execBinaryOp scope span op lval rarg = do+    rval <- rarg+    let bin :: (Provenance m -> a) -> a+        bin f  = f (Provenance scope (NBinary_ span op (Just lval) (Just rval)))+        toBool = pure . bin nvConstantP . NBool+    case (lval, rval) of+        (NVConstant lc, NVConstant rc) -> case (op, lc, rc) of+            (NEq,  _, _)       -> toBool =<< valueEq lval rval+            (NNEq, _, _)       -> toBool . not =<< valueEq lval rval+            (NLt,  l, r)       -> toBool $ l <  r+            (NLte, l, r)       -> toBool $ l <= r+            (NGt,  l, r)       -> toBool $ l >  r+            (NGte, l, r)       -> toBool $ l >= r+            (NAnd,  _, _)      ->+                nverr $ ErrorCall "should be impossible: && is handled above"+            (NOr,   _, _)      ->+                nverr $ ErrorCall "should be impossible: || is handled above"+            (NPlus,  l, r)     -> numBinOp bin (+) l r+            (NMinus, l, r)     -> numBinOp bin (-) l r+            (NMult,  l, r)     -> numBinOp bin (*) l r+            (NDiv,   l, r)     -> numBinOp' bin div (/) l r+            (NImpl,+             NBool l, NBool r) -> toBool $ not l || r+            _                  -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVStr ls lc, NVStr rs rc) -> case op of+            NPlus -> pure $ bin nvStrP (ls `mappend` rs) (lc `mappend` rc)+            NEq   -> toBool =<< valueEq lval rval+            NNEq  -> toBool . not =<< valueEq lval rval+            NLt   -> toBool $ ls <  rs+            NLte  -> toBool $ ls <= rs+            NGt   -> toBool $ ls >  rs+            NGte  -> toBool $ ls >= rs+            _     -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVStr _ _, NVConstant NNull) -> case op of+            NEq  -> toBool =<< valueEq lval (nvStr "" mempty)+            NNEq -> toBool . not =<< valueEq lval (nvStr "" mempty)+            _    -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVConstant NNull, NVStr _ _) -> case op of+            NEq  -> toBool =<< valueEq (nvStr "" mempty) rval+            NNEq -> toBool . not =<< valueEq (nvStr "" mempty) rval+            _    -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVSet ls lp, NVSet rs rp) -> case op of+            NUpdate -> pure $ bin nvSetP (rs `M.union` ls) (rp `M.union` lp)+            NEq     -> toBool =<< valueEq lval rval+            NNEq    -> toBool . not =<< valueEq lval rval+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVSet ls lp, NVConstant NNull) -> case op of+            NUpdate -> pure $ bin nvSetP ls lp+            NEq     -> toBool =<< valueEq lval (nvSet M.empty M.empty)+            NNEq    -> toBool . not =<< valueEq lval (nvSet M.empty M.empty)+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVConstant NNull, NVSet rs rp) -> case op of+            NUpdate -> pure $ bin nvSetP rs rp+            NEq     -> toBool =<< valueEq (nvSet M.empty M.empty) rval+            NNEq    -> toBool . not =<< valueEq (nvSet M.empty M.empty) rval+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVList ls, NVList rs) -> case op of+            NConcat -> pure $ bin nvListP $ ls ++ rs+            NEq     -> toBool =<< valueEq lval rval+            NNEq    -> toBool . not =<< valueEq lval rval+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVList ls, NVConstant NNull) -> case op of+            NConcat -> pure $ bin nvListP ls+            NEq     -> toBool =<< valueEq lval (nvList [])+            NNEq    -> toBool . not =<< valueEq lval (nvList [])+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVConstant NNull, NVList rs) -> case op of+            NConcat -> pure $ bin nvListP rs+            NEq     -> toBool =<< valueEq (nvList []) rval+            NNEq    -> toBool . not =<< valueEq (nvList []) rval+            _       -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVPath p, NVStr s _) -> case op of+            NEq   -> toBool $ p == Text.unpack s+            NNEq  -> toBool $ p /= Text.unpack s+            NPlus -> bin nvPathP <$> makeAbsolutePath (p `mappend` Text.unpack s)+            _     -> nverr $ ErrorCall $ unsupportedTypes lval rval++        (NVPath ls, NVPath rs) -> case op of+            NPlus -> bin nvPathP <$> makeAbsolutePath (ls ++ rs)+            _     -> nverr $ ErrorCall $ unsupportedTypes lval rval++        _ -> case op of+            NEq   -> toBool False+            NNEq  -> toBool True+            _ -> nverr $ ErrorCall $ unsupportedTypes lval rval+  where+    unsupportedTypes :: Show a => a -> a -> String+    unsupportedTypes lval rval =+        "Unsupported argument types for binary operator "+            ++ show op ++ ": " ++ show lval ++ ", " ++ show rval++    numBinOp :: (forall r. (Provenance m -> r) -> r)+             -> (forall a. Num a => a -> a -> a) -> NAtom -> NAtom -> m (NValue m)+    numBinOp bin f = numBinOp' bin f f++    numBinOp' :: (forall r. (Provenance m -> r) -> r)+              -> (Integer -> Integer -> Integer)+              -> (Float -> Float -> Float)+              -> NAtom -> NAtom -> m (NValue m)+    numBinOp' bin intF floatF l r = case (l, r) of+        (NInt   li, NInt   ri) -> toInt   $             li `intF`               ri+        (NInt   li, NFloat rf) -> toFloat $ fromInteger li `floatF`             rf+        (NFloat lf, NInt   ri) -> toFloat $             lf `floatF` fromInteger ri+        (NFloat lf, NFloat rf) -> toFloat $             lf `floatF`             rf+        _ -> nverr $ ErrorCall $ unsupportedTypes l r+      where+        toInt   = pure . bin nvConstantP . NInt+        toFloat = pure . bin nvConstantP . NFloat++coerceToString :: MonadNix e m => NValue m -> m String+coerceToString = \case+    NVConstant (NBool b)+        | b               -> pure "1"+        | otherwise       -> pure ""+    NVConstant (NInt n)   -> pure $ show n+    NVConstant (NFloat n) -> pure $ show n+    NVConstant NNull      -> pure ""++    NVStr t _ -> pure $ Text.unpack t+    NVPath p  -> unStorePath <$> addPath p+    NVList l  -> unwords <$> traverse (`force` coerceToString) l++    v@(NVSet s _) | Just p <- M.lookup "__toString" s ->+        force p $ (`callFunc` pure v) >=> coerceToString++    NVSet s _ | Just p <- M.lookup "outPath" s ->+        force p coerceToString++    v -> throwError $ ErrorCall $ "Expected a string, but saw: " ++ show v++newtype Lazy m a = Lazy+    { runLazy :: ReaderT (Context (Lazy m) (NThunk (Lazy m)))+                        (StateT (HashMap FilePath NExprLoc) m) a }+    deriving (Functor, Applicative, Alternative, Monad, MonadPlus,+              MonadFix, MonadIO,+              MonadReader (Context (Lazy m) (NThunk (Lazy m))))++instance MonadIO m => MonadVar (Lazy m) where+    type Var (Lazy m) = IORef++    newVar = liftIO . newIORef+    readVar = liftIO . readIORef+    writeVar = (liftIO .) . writeIORef+    atomicModifyVar = (liftIO .) . atomicModifyIORef++instance (MonadIO m, Monad m) => MonadFile m where+    readFile = liftIO . BS.readFile++instance MonadCatch m => MonadCatch (Lazy m) where+    catch (Lazy (ReaderT m)) f = Lazy $ ReaderT $ \e ->+        catch (m e) ((`runReaderT` e) . runLazy . f)++instance MonadThrow m => MonadThrow (Lazy m) where+    throwM = Lazy . throwM++#if MIN_VERSION_haskeline(0, 4, 7)+instance MonadException m => MonadException (Lazy m) where+  controlIO f = Lazy $ controlIO $ \(RunIO run) ->+      let run' = RunIO (fmap Lazy . run . runLazy)+      in runLazy <$> f run'+#endif++instance (MonadFix m, MonadCatch m, MonadIO m, Alternative m,+          MonadPlus m, Typeable m)+      => MonadEffects (Lazy m) where+    addPath path = do+        (exitCode, out, _) <-+            liftIO $ readProcessWithExitCode "nix-store" ["--add", path] ""+        case exitCode of+          ExitSuccess -> do+            let dropTrailingLinefeed p = take (length p - 1) p+            return $ StorePath $ dropTrailingLinefeed out+          _ -> throwError $ ErrorCall $+                  "addPath: failed: nix-store --add " ++ show path++    makeAbsolutePath origPath = do+        origPathExpanded <- liftIO $ expandHomePath origPath+        absPath <- if isAbsolute origPathExpanded then pure origPathExpanded else do+            cwd <- do+                mres <- lookupVar @_ @(NThunk (Lazy m)) "__cur_file"+                case mres of+                    Nothing -> liftIO getCurrentDirectory+                    Just v -> force v $ \case+                        NVPath s -> return $ takeDirectory s+                        v -> throwError $ ErrorCall $ "when resolving relative path,"+                                ++ " __cur_file is in scope,"+                                ++ " but is not a path; it is: "+                                ++ show v+            pure $ cwd <///> origPathExpanded+        liftIO $ removeDotDotIndirections <$> canonicalizePath absPath++    findEnvPath = findEnvPathM++    pathExists = liftIO . fileExist++    importPath scope origPath = do+        path <- liftIO $ pathToDefaultNixFile origPath+        mres <- lookupVar @(Context (Lazy m) (NThunk (Lazy m)))+                         "__cur_file"+        path' <- case mres of+            Nothing  -> do+                traceM "No known current directory"+                return path+            Just p -> fromValue @_ @_ @(NThunk (Lazy m)) p >>= \(Path p') -> do+                traceM $ "Current file being evaluated is: " ++ show p'+                return $ takeDirectory p' </> path++        traceM $ "Importing file " ++ path'+        withFrame Info (ErrorCall $ "While importing file " ++ show path') $ do+            imports <- Lazy $ ReaderT $ const get+            expr <- case M.lookup path' imports of+                Just expr -> pure expr+                Nothing -> do+                    eres <- Lazy $ parseNixFileLoc path'+                    case eres of+                        Failure err  ->+                            throwError $ ErrorCall . show $+                                text "Parse during import failed:" P.</> err+                        Success expr -> do+                            Lazy $ ReaderT $ const $+                                modify (M.insert origPath expr)+                            pure expr++            let ref = value @_ @_ @(Lazy m) (nvPath path')+            -- Use this cookie so that when we evaluate the next+            -- import, we'll remember which directory its containing+            -- file was in.+            pushScope (M.singleton "__cur_file" ref) $+                pushScope scope $ evalExprLoc expr++    getEnvVar = liftIO . lookupEnv++    getCurrentSystemOS = return $ Text.pack System.Info.os++    -- Invert the conversion done by GHC_CONVERT_CPU in GHC's aclocal.m4+    getCurrentSystemArch = return $ Text.pack $ case System.Info.arch of+      "i386" -> "i686"+      arch -> arch++    listDirectory         = liftIO . System.Directory.listDirectory+    getSymbolicLinkStatus = liftIO . System.Posix.Files.getSymbolicLinkStatus++    derivationStrict = fromValue @(ValueSet (Lazy m)) >=> \s -> do+        nn <- maybe (pure False) fromNix (M.lookup "__ignoreNulls" s)+        s' <- M.fromList <$> mapMaybeM (handleEntry nn) (M.toList s)+        v' <- normalForm =<< toValue @(ValueSet (Lazy m)) s'+        nixInstantiateExpr $ "derivationStrict " ++ show (prettyNValueNF v')+      where+        mapMaybeM :: (a -> Lazy m (Maybe b)) -> [a] -> Lazy m [b]+        mapMaybeM op = foldr f (return [])+          where f x xs = op x >>= \case+                    Nothing -> xs+                    Just x  -> (x:) <$> xs++        handleEntry ignoreNulls (k, v) = fmap (k,) <$> case k of+            -- The `args' attribute is special: it supplies the command-line+            -- arguments to the builder.+            "args"          -> Just <$> convertNix @[Text] v+            "__ignoreNulls" -> pure Nothing+            _               -> force v $ \case+                NVConstant NNull | ignoreNulls -> pure Nothing+                v' -> Just <$> (toNix =<< Text.pack <$> coerceToString v')++    nixInstantiateExpr expr = do+        traceM $ "Executing: "+            ++ show ["nix-instantiate", "--eval", "--expr ", expr]+        (exitCode, out, err) <-+            liftIO $ readProcessWithExitCode "nix-instantiate"+                [ "--eval", "--expr", expr] ""+        case exitCode of+            ExitSuccess -> case parseNixTextLoc (Text.pack out) of+                Failure err ->+                    throwError $ ErrorCall $+                        "Error parsing output of nix-instantiate: " ++ show err+                Success v -> evalExprLoc v+            status ->+                throwError $ ErrorCall $ "nix-instantiate failed: " ++ show status+                    ++ ": " ++ err++    getRecursiveSize =+#ifdef MIN_VERSION_ghc_datasize+#if MIN_VERSION_ghc_datasize(0,2,0) && __GLASGOW_HASKELL__ >= 804+        toNix @Integer <=< fmap fromIntegral . liftIO . recursiveSize+#else+        const $ toNix (0 :: Integer)+#endif+#else+        const $ toNix (0 :: Integer)+#endif++    getURL url = do+        let urlstr = Text.unpack url+        traceM $ "fetching HTTP URL: " ++ urlstr+        response <- liftIO $ do+          req <- parseRequest urlstr+          manager <-+            if secure req+            then newTlsManager+            else newManager defaultManagerSettings+          -- print req+          httpLbs (req { method = "GET" }) manager+          -- return response+        let status = statusCode (responseStatus response)+        if  status /= 200+          then throwError $ ErrorCall $ +                 "fail, got " ++ show status ++ " when fetching url:" ++ urlstr+          else -- do+            -- let bstr = responseBody response+            -- liftIO $ print bstr+            throwError $ ErrorCall $ +              "success in downloading but hnix-store is not yet ready; url = " ++ urlstr++    traceEffect = liftIO . putStrLn++    exec = \case+      [] -> throwError $ ErrorCall "exec: missing program"+      (prog:args) -> do+        (exitCode, out, _) <-+            liftIO $ readProcessWithExitCode prog args ""+        let t = Text.strip (Text.pack out)+        let emsg = "program[" ++ prog ++ "] args=" ++ show args+        case exitCode of+          ExitSuccess ->+            if Text.null t+            then throwError $ ErrorCall $ "exec has no output :" ++ emsg+            else case parseNixTextLoc t of+              Failure err ->+                throwError $ ErrorCall $+                    "Error parsing output of exec: " ++ show err ++ " " ++ emsg+              Success v -> evalExprLoc v+          err -> throwError $ ErrorCall $+                    "exec  failed: " ++ show err ++ " " ++ emsg++runLazyM :: Options -> MonadIO m => Lazy m a -> m a+runLazyM opts = (`evalStateT` M.empty)+              . (`runReaderT` newContext opts)+              . runLazy++-- | Incorrectly normalize paths by rewriting patterns like @a/b/..@ to @a@.+--   This is incorrect on POSIX systems, because if @b@ is a symlink, its+--   parent may be a different directory from @a@. See the discussion at+--   https://hackage.haskell.org/package/directory-1.3.1.5/docs/System-Directory.html#v:canonicalizePath+removeDotDotIndirections :: FilePath -> FilePath+removeDotDotIndirections = intercalate "/" . go [] . splitOn "/"+    where go s [] = reverse s+          go (_:s) ("..":rest) = go s rest+          go s (this:rest) = go (this:s) rest++expandHomePath :: FilePath -> IO FilePath+expandHomePath ('~' : xs) = flip (++) xs <$> getHomeDirectory+expandHomePath p = return p++-- Given a path, determine the nix file to load+pathToDefaultNixFile :: FilePath -> IO FilePath+pathToDefaultNixFile p = do+    isDir <- doesDirectoryExist p+    pure $ if isDir then p </> "default.nix" else p++infixr 9 <///>+(<///>) :: FilePath -> FilePath -> FilePath+x <///> y | isAbsolute y || "." `isPrefixOf` y = x </> y+          | otherwise = joinByLargestOverlap x y+  where+    joinByLargestOverlap (splitDirectories -> xs) (splitDirectories -> ys) =+        joinPath $ head [ xs ++ drop (length tx) ys+                        | tx <- tails xs, tx `elem` inits ys ]++nixFilePath :: (MonadEffects m, MonadIO m) => FilePath -> m (Maybe FilePath)+nixFilePath path = do+    path <- makeAbsolutePath path+    exists <- liftIO $ doesDirectoryExist path+    path' <- if exists+            then makeAbsolutePath $ path </> "default.nix"+            else return path+    exists <- liftIO $ doesFileExist path'+    return $ if exists then Just path' else Nothing++findEnvPathM :: forall e m. (MonadNix e m, MonadIO m)+             => FilePath -> m FilePath+findEnvPathM name = do+    mres <- lookupVar @_ @(NThunk m) "__nixPath"+    mpath <- case mres of+        Nothing -> error "impossible"+        Just x -> force x $ fromValue >=> \(l :: [NThunk m]) ->+            foldM go Nothing l+    case mpath of+        Nothing ->+            throwError $ ErrorCall $ "file '" ++ name+                ++ "' was not found in the Nix search path"+                ++ " (add it using $NIX_PATH or -I)"+        Just path -> return path+  where+    go :: Maybe FilePath -> NThunk m -> m (Maybe FilePath)+    go p@(Just _) _ = pure p+    go Nothing l = force l $ fromValue >=> \(s :: HashMap Text (NThunk m)) ->+        case M.lookup "path" s of+            Just p -> force p $ fromValue >=> \(Path path) ->+                case M.lookup "prefix" s of+                    Nothing -> tryPath path Nothing+                    Just pf -> force pf $ fromValueMay >=> \case+                        Just (pfx :: Text) | not (Text.null pfx) ->+                            tryPath path (Just (Text.unpack pfx))+                        _ -> tryPath path Nothing+            Nothing ->+                throwError $ ErrorCall $ "__nixPath must be a list of attr sets"+                    ++ " with 'path' elements, but saw: " ++ show s++    tryPath p (Just n) | n':ns <- splitDirectories name, n == n' =+        nixFilePath $ p <///> joinPath ns+    tryPath p _ = nixFilePath $ p <///> name++addTracing :: (MonadNix e m, Has e Options, MonadIO m,+              MonadReader Int n, Alternative n)+           => Alg NExprLocF (m a) -> Alg NExprLocF (n (m a))+addTracing k v = do+    depth <- ask+    guard (depth < 2000)+    local succ $ do+        v'@(Compose (Ann span x)) <- sequence v+        return $ do+            opts :: Options <- asks (view hasLens)+            let rendered =+                    if verbose opts >= Chatty+                    then show (void x)+                    else show (prettyNix (Fix (Fix (NSym "?") <$ x)))+                msg x = "eval: " ++ replicate depth ' ' ++ x+            loc <- renderLocation span (text (msg rendered ++ " ..."))+            liftIO $ putStr $ show loc+            res <- k v'+            liftIO $ putStrLn $ msg (rendered ++ " ...done")+            return res++evalExprLoc :: forall e m. (MonadNix e m, Has e Options, MonadIO m)+            => NExprLoc -> m (NValue m)+evalExprLoc expr = do+    opts :: Options <- asks (view hasLens)+    if tracing opts+        then join . (`runReaderT` (0 :: Int)) $+             adi (addTracing phi)+                 (raise (addStackFrames @(NThunk m) . addSourcePositions))+                 expr+        else adi phi (addStackFrames @(NThunk m) . addSourcePositions) expr+  where+    phi = Eval.eval @_ @(NValue m) @(NThunk m) @m . annotated . getCompose+    raise k f x = ReaderT $ \e -> k (\t -> runReaderT (f t) e) x
+ src/Nix/Expr.hs view
@@ -0,0 +1,10 @@+-- | Wraps the expression submodules.+module Nix.Expr (+  module Nix.Expr.Types,+  module Nix.Expr.Types.Annotated,+  module Nix.Expr.Shorthands+  ) where++import Nix.Expr.Types+import Nix.Expr.Shorthands+import Nix.Expr.Types.Annotated
+ src/Nix/Expr/Shorthands.hs view
@@ -0,0 +1,231 @@+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++-- | A bunch of shorthands for making nix expressions.+--+-- Functions with an @F@ suffix return a more general type without the outer+-- 'Fix' wrapper.+module Nix.Expr.Shorthands where++import Data.Fix+import Data.List.NonEmpty (NonEmpty(..))+import Data.Monoid+import Data.Text (Text)+import Nix.Atoms+import Nix.Expr.Types+import Text.Megaparsec.Pos (SourcePos)++-- | Make an integer literal expression.+mkInt :: Integer -> NExpr+mkInt = Fix . mkIntF++mkIntF :: Integer -> NExprF a+mkIntF = NConstant . NInt++-- | Make an floating point literal expression.+mkFloat :: Float -> NExpr+mkFloat = Fix . mkFloatF++mkFloatF :: Float -> NExprF a+mkFloatF = NConstant . NFloat++-- | Make a regular (double-quoted) string.+mkStr :: Text -> NExpr+mkStr = Fix . NStr . DoubleQuoted . \case+  "" -> []+  x -> [Plain x]++-- | Make an indented string.+mkIndentedStr :: Int -> Text -> NExpr+mkIndentedStr w = Fix . NStr . Indented w . \case+  "" -> []+  x -> [Plain x]++-- | Make a path. Use 'True' if the path should be read from the+-- environment, else 'False'.+mkPath :: Bool -> FilePath -> NExpr+mkPath b = Fix . mkPathF b++mkPathF :: Bool -> FilePath -> NExprF a+mkPathF False = NLiteralPath+mkPathF True = NEnvPath++-- | Make a path expression which pulls from the NIX_PATH env variable.+mkEnvPath :: FilePath -> NExpr+mkEnvPath = Fix . mkEnvPathF++mkEnvPathF :: FilePath -> NExprF a+mkEnvPathF = mkPathF True++-- | Make a path expression which references a relative path.+mkRelPath :: FilePath -> NExpr+mkRelPath = Fix . mkRelPathF++mkRelPathF :: FilePath -> NExprF a+mkRelPathF = mkPathF False++-- | Make a variable (symbol)+mkSym :: Text -> NExpr+mkSym = Fix . mkSymF++mkSymF :: Text -> NExprF a+mkSymF = NSym++mkSelector :: Text -> NAttrPath NExpr+mkSelector = (:| []) . StaticKey++mkBool :: Bool -> NExpr+mkBool = Fix . mkBoolF++mkBoolF :: Bool -> NExprF a+mkBoolF = NConstant . NBool++mkNull :: NExpr+mkNull = Fix mkNullF++mkNullF :: NExprF a+mkNullF = NConstant NNull++mkOper :: NUnaryOp -> NExpr -> NExpr+mkOper op = Fix . NUnary op++mkOper2 :: NBinaryOp -> NExpr -> NExpr -> NExpr+mkOper2 op a = Fix . NBinary op a++mkParamset :: [(Text, Maybe NExpr)] -> Bool -> Params NExpr+mkParamset params variadic = ParamSet params variadic Nothing++mkRecSet :: [Binding NExpr] -> NExpr+mkRecSet = Fix . NRecSet++mkNonRecSet :: [Binding NExpr] -> NExpr+mkNonRecSet = Fix . NSet++mkLets :: [Binding NExpr] -> NExpr -> NExpr+mkLets bindings = Fix . NLet bindings++mkList :: [NExpr] -> NExpr+mkList = Fix . NList++mkWith :: NExpr -> NExpr -> NExpr+mkWith e = Fix . NWith e++mkAssert :: NExpr -> NExpr -> NExpr+mkAssert e = Fix . NWith e++mkIf :: NExpr -> NExpr -> NExpr -> NExpr+mkIf e1 e2 = Fix . NIf e1 e2++mkFunction :: Params NExpr -> NExpr -> NExpr+mkFunction params = Fix . NAbs params++{-+mkDot :: NExpr -> Text -> NExpr+mkDot e key = mkDots e [key]++-- | Create a dotted expression using only text.+mkDots :: NExpr -> [Text] -> NExpr+mkDots e [] = e+mkDots (Fix (NSelect e keys' x)) keys =+  -- Special case: if the expression in the first argument is already+  -- a dotted expression, just extend it.+  Fix (NSelect e (keys' <> map (StaticKey ?? Nothing) keys) x)+mkDots e keys = Fix $ NSelect e (map (StaticKey ?? Nothing) keys) Nothing+-}++-- | An `inherit` clause without an expression to pull from.+inherit :: [NKeyName e] -> SourcePos -> Binding e+inherit = Inherit Nothing++-- | An `inherit` clause with an expression to pull from.+inheritFrom :: e -> [NKeyName e] -> SourcePos -> Binding e+inheritFrom expr = Inherit (Just expr)++-- | Shorthand for producing a binding of a name to an expression.+bindTo :: Text -> NExpr -> Binding NExpr+bindTo name x = NamedVar (mkSelector name) x nullPos++-- | Infix version of bindTo.+($=) :: Text -> NExpr -> Binding NExpr+($=) = bindTo++infixr 2 $=++-- | Append a list of bindings to a set or let expression.+-- For example, adding `[a = 1, b = 2]` to `let c = 3; in 4` produces+-- `let a = 1; b = 2; c = 3; in 4`.+appendBindings :: [Binding NExpr] -> NExpr -> NExpr+appendBindings newBindings (Fix e) = case e of+  NLet bindings e' -> Fix $ NLet (bindings <> newBindings) e'+  NSet bindings -> Fix $ NSet (bindings <> newBindings)+  NRecSet bindings -> Fix $ NRecSet (bindings <> newBindings)+  _ -> error "Can only append bindings to a set or a let"++-- | Applies a transformation to the body of a nix function.+modifyFunctionBody :: (NExpr -> NExpr) -> NExpr -> NExpr+modifyFunctionBody f (Fix e) = case e of+  NAbs params body -> Fix $ NAbs params (f body)+  _ -> error "Not a function"++-- | A let statement with multiple assignments.+letsE :: [(Text, NExpr)] -> NExpr -> NExpr+letsE pairs = Fix . NLet (map (uncurry bindTo) pairs)++-- | Wrapper for a single-variable @let@.+letE :: Text -> NExpr -> NExpr -> NExpr+letE varName varExpr = letsE [(varName, varExpr)]++-- | Make an attribute set (non-recursive).+attrsE :: [(Text, NExpr)] -> NExpr+attrsE pairs = Fix $ NSet (map (uncurry bindTo) pairs)++-- | Make an attribute set (recursive).+recAttrsE :: [(Text, NExpr)] -> NExpr+recAttrsE pairs = Fix $ NRecSet (map (uncurry bindTo) pairs)++-- | Logical negation.+mkNot :: NExpr -> NExpr+mkNot = Fix . NUnary NNot++-- -- | Dot-reference into an attribute set.+-- (!.) :: NExpr -> Text -> NExpr+-- (!.) = mkDot+-- infixl 8 !.++mkBinop :: NBinaryOp -> NExpr -> NExpr -> NExpr+mkBinop op e1 e2 = Fix (NBinary op e1 e2)++-- | Various nix binary operators+($==), ($!=), ($<), ($<=), ($>), ($>=), ($&&), ($||), ($->),+  ($//), ($+), ($-), ($*), ($/), ($++)+  :: NExpr -> NExpr -> NExpr+e1 $== e2 = mkBinop NEq e1 e2+e1 $!= e2 = mkBinop NNEq e1 e2+e1 $< e2 = mkBinop NLt e1 e2+e1 $<= e2 = mkBinop NLte e1 e2+e1 $> e2 = mkBinop NGt e1 e2+e1 $>= e2 = mkBinop NGte e1 e2+e1 $&& e2 = mkBinop NAnd e1 e2+e1 $|| e2 = mkBinop NOr e1 e2+e1 $-> e2 = mkBinop NImpl e1 e2+e1 $// e2 = mkBinop NUpdate e1 e2+e1 $+ e2 = mkBinop NPlus e1 e2+e1 $- e2 = mkBinop NMinus e1 e2+e1 $* e2 = mkBinop NMult e1 e2+e1 $/ e2 = mkBinop NDiv e1 e2+e1 $++ e2 = mkBinop NConcat e1 e2++-- | Function application expression.+(@@) :: NExpr -> NExpr -> NExpr+f @@ arg = mkBinop NApp f arg+infixl 1 @@++-- | Lambda shorthand.+(==>) :: Params NExpr -> NExpr -> NExpr+(==>) = mkFunction++infixr 1 ==>++(@.) :: NExpr -> Text -> NExpr+obj @. name = Fix (NSelect obj (StaticKey name :| []) Nothing)+infixl 2 @.
+ src/Nix/Expr/Types.hs view
@@ -0,0 +1,558 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}++{-# OPTIONS_GHC -Wno-orphans #-}+{-# OPTIONS_GHC -Wno-missing-signatures #-}++-- | The nix expression type and supporting types.+module Nix.Expr.Types where++#if MIN_VERSION_serialise(0, 2, 0)+import           Codec.Serialise (Serialise)+import qualified Codec.Serialise as Ser+#endif+import           Control.Applicative+import           Control.DeepSeq+import           Control.Monad+import           Data.Aeson+import           Data.Aeson.TH+import           Data.Binary (Binary)+import qualified Data.Binary as Bin+import           Data.Data+import           Data.Eq.Deriving+import           Data.Fix+import           Data.Functor.Classes+import           Data.Hashable+#if MIN_VERSION_hashable(1, 2, 5)+import           Data.Hashable.Lifted+#endif+import           Data.List (inits, tails)+import           Data.List.NonEmpty (NonEmpty(..))+import qualified Data.List.NonEmpty as NE+import           Data.Maybe (fromMaybe)+import           Data.Monoid+import           Data.Ord.Deriving+import           Data.Text (Text, pack, unpack)+import           Data.Traversable+import           GHC.Exts+import           GHC.Generics+import           Language.Haskell.TH.Syntax+import           Lens.Family2+import           Lens.Family2.TH+import           Nix.Atoms+import           Nix.Utils+import           Text.Megaparsec.Pos+import           Text.Read.Deriving+import           Text.Show.Deriving+#if MIN_VERSION_base(4, 10, 0)+import           Type.Reflection (eqTypeRep)+import qualified Type.Reflection as Reflection+#endif++type VarName = Text++-- unfortunate orphans+#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 NonEmpty+#endif++#if !MIN_VERSION_base(4, 10, 0)+instance Eq1 NonEmpty where+  liftEq eq (a NE.:| as) (b NE.:| bs) = eq a b && liftEq eq as bs+instance Show1 NonEmpty where+  liftShowsPrec shwP shwL p (a NE.:| as) = showParen (p > 5) $+    shwP 6 a . showString " :| " . shwL as+#endif++#if !MIN_VERSION_binary(0, 8, 4)+instance Binary a => Binary (NE.NonEmpty a) where+  get = fmap NE.fromList Bin.get+  put = Bin.put . NE.toList+#endif++-- | The main nix expression type. This is polymorphic so that it can be made+-- a functor, which allows us to traverse expressions and map functions over+-- them. The actual 'NExpr' type is a fixed point of this functor, defined+-- below.+data NExprF r+  = NConstant !NAtom+  -- ^ Constants: ints, bools, URIs, and null.+  | NStr !(NString r)+  -- ^ A string, with interpolated expressions.+  | NSym !VarName+  -- ^ A variable. For example, in the expression @f a@, @f@ is represented+  -- as @NSym "f"@ and @a@ as @NSym "a"@.+  | NList ![r]+  -- ^ A list literal.+  | NSet ![Binding r]+  -- ^ An attribute set literal, not recursive.+  | NRecSet ![Binding r]+  -- ^ An attribute set literal, recursive.+  | NLiteralPath !FilePath+  -- ^ A path expression, which is evaluated to a store path. The path here+  -- can be relative, in which case it's evaluated relative to the file in+  -- which it appears.+  | NEnvPath !FilePath+  -- ^ A path which refers to something in the Nix search path (the NIX_PATH+  -- environment variable. For example, @<nixpkgs/pkgs>@.+  | NUnary !NUnaryOp !r+  -- ^ Application of a unary operator to an expression.+  | NBinary !NBinaryOp !r !r+  -- ^ Application of a binary operator to two expressions.+  | NSelect !r !(NAttrPath r) !(Maybe r)+  -- ^ Dot-reference into an attribute set, optionally providing an+  -- alternative if the key doesn't exist.+  | NHasAttr !r !(NAttrPath r)+  -- ^ Ask if a set contains a given attribute path.+  | NAbs !(Params r) !r+  -- ^ A function literal (lambda abstraction).+  | NLet ![Binding r] !r+  -- ^ Evaluate the second argument after introducing the bindings.+  | NIf !r !r !r+  -- ^ If-then-else statement.+  | NWith !r !r+  -- ^ Evaluate an attribute set, bring its bindings into scope, and+  -- evaluate the second argument.+  | NAssert !r !r+  -- ^ Assert that the first returns true before evaluating the second.+  deriving (Ord, Eq, Generic, Generic1, Typeable, Data, Functor,+            Foldable, Traversable, Show, NFData,+            Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 NExprF+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData1 NExprF+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (NExprF r)+#endif++-- | We make an `IsString` for expressions, where the string is interpreted+-- as an identifier. This is the most common use-case...+instance IsString NExpr where+  fromString = Fix . NSym . fromString++#if MIN_VERSION_base(4, 10, 0)+instance Lift (Fix NExprF) where+    lift = dataToExpQ $ \b ->+        case Reflection.typeOf b `eqTypeRep` Reflection.typeRep @Text of+            Just HRefl -> Just [| pack $(liftString $ unpack b) |]+            Nothing -> Nothing+#endif++-- | The monomorphic expression type is a fixed point of the polymorphic one.+type NExpr = Fix NExprF++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise NExpr+#endif++-- | A single line of the bindings section of a let expression or of a set.+data Binding r+  = NamedVar !(NAttrPath r) !r !SourcePos+  -- ^ An explicit naming, such as @x = y@ or @x.y = z@.+  | Inherit !(Maybe r) ![NKeyName r] !SourcePos+  -- ^ Using a name already in scope, such as @inherit x;@ which is shorthand+  --   for @x = x;@ or @inherit (x) y;@ which means @y = x.y;@. The+  --   unsafeGetAttrPos for every name so inherited is the position of the+  --   first name, whether that be the first argument to this constructor, or+  --   the first member of the list in the second argument.+  deriving (Generic, Generic1, Typeable, Data, Ord, Eq, Functor,+            Foldable, Traversable, Show, NFData,+            Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 Binding+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData1 Binding+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (Binding r)+#endif++-- | @Params@ represents all the ways the formal parameters to a+-- function can be represented.+data Params r+  = Param !VarName+  -- ^ For functions with a single named argument, such as @x: x + 1@.+  | ParamSet !(ParamSet r) !Bool !(Maybe VarName)+  -- ^ Explicit parameters (argument must be a set). Might specify a name to+  -- bind to the set in the function body. The bool indicates whether it is+  -- variadic or not.+  deriving (Ord, Eq, Generic, Generic1, Typeable, Data, Functor, Show,+            Foldable, Traversable, NFData, Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 Params+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData1 Params+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (Params r)+#endif++-- This uses an association list because nix XML serialization preserves the+-- order of the param set.+type ParamSet r = [(VarName, Maybe r)]++instance IsString (Params r) where+  fromString = Param . fromString++-- | 'Antiquoted' represents an expression that is either+-- antiquoted (surrounded by ${...}) or plain (not antiquoted).+data Antiquoted (v :: *) (r :: *) = Plain !v | EscapedNewline | Antiquoted !r+  deriving (Ord, Eq, Generic, Generic1, Typeable, Data, Functor, Foldable,+            Traversable, Show, Read, NFData, Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable v => Hashable1 (Antiquoted v)++instance Hashable2 Antiquoted where+    liftHashWithSalt2 ha _ salt (Plain a) =+        ha (salt `hashWithSalt` (0 :: Int)) a+    liftHashWithSalt2 _ _ salt EscapedNewline =+        salt `hashWithSalt` (1 :: Int)+    liftHashWithSalt2 _ hb salt (Antiquoted b) =+        hb (salt `hashWithSalt` (2 :: Int)) b+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData v => NFData1 (Antiquoted v)+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance (Serialise v, Serialise r) => Serialise (Antiquoted v r)+#endif++-- | An 'NString' is a list of things that are either a plain string+-- or an antiquoted expression. After the antiquotes have been evaluated,+-- the final string is constructed by concating all the parts.+data NString r+  = DoubleQuoted ![Antiquoted Text r]+  -- ^ Strings wrapped with double-quotes (") can contain literal newline+  -- characters, but the newlines are preserved and no indentation is stripped.+  | Indented !Int ![Antiquoted Text r]+  -- ^ Strings wrapped with two single quotes ('') can contain newlines, and+  --   their indentation will be stripped, but the amount stripped is+  --   remembered.+  deriving (Eq, Ord, Generic, Generic1, Typeable, Data, Functor, Foldable,+            Traversable, Show, Read, NFData, Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 NString+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData1 NString+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (NString r)+#endif++-- | For the the 'IsString' instance, we use a plain doublequoted string.+instance IsString (NString r) where+  fromString "" = DoubleQuoted []+  fromString string = DoubleQuoted [Plain $ pack string]++-- | A 'KeyName' is something that can appear on the left side of an+-- equals sign. For example, @a@ is a 'KeyName' in @{ a = 3; }@, @let a = 3;+-- in ...@, @{}.a@ or @{} ? a@.+--+-- Nix supports both static keynames (just an identifier) and dynamic+-- identifiers. Dynamic identifiers can be either a string (e.g.:+-- @{ "a" = 3; }@) or an antiquotation (e.g.: @let a = "example";+-- in { ${a} = 3; }.example@).+--+-- Note: There are some places where a dynamic keyname is not allowed.+-- In particular, those include:+--+--   * The RHS of a @binding@ inside @let@: @let ${"a"} = 3; in ...@+--     produces a syntax error.+--   * The attribute names of an 'inherit': @inherit ${"a"};@ is forbidden.+--+-- Note: In Nix, a simple string without antiquotes such as @"foo"@ is+-- allowed even if the context requires a static keyname, but the+-- parser still considers it a 'DynamicKey' for simplicity.+data NKeyName r+  = DynamicKey !(Antiquoted (NString r) r)+  | StaticKey !VarName+  deriving (Eq, Ord, Generic, Typeable, Data, Show, Read, NFData,+            Hashable)++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (NKeyName r)++instance Serialise Pos where+    encode x = Ser.encode (unPos x)+    decode = mkPos <$> Ser.decode++instance Serialise SourcePos where+    encode (SourcePos f l c) = Ser.encode f <> Ser.encode l <> Ser.encode c+    decode = SourcePos <$> Ser.decode <*> Ser.decode <*> Ser.decode+#endif++instance Hashable Pos where+    hashWithSalt salt x = hashWithSalt salt (unPos x)++instance Hashable SourcePos where+    hashWithSalt salt (SourcePos f l c) =+        salt `hashWithSalt` f `hashWithSalt` l `hashWithSalt` c++instance Generic1 NKeyName where+  type Rep1 NKeyName = NKeyName+  from1 = id+  to1   = id++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData1 NKeyName where+    liftRnf _ (StaticKey !_) = ()+    liftRnf _ (DynamicKey (Plain !_)) = ()+    liftRnf _ (DynamicKey EscapedNewline) = ()+    liftRnf k (DynamicKey (Antiquoted r)) = k r+#endif++-- | Most key names are just static text, so this instance is convenient.+instance IsString (NKeyName r) where+  fromString = StaticKey . fromString++instance Eq1 NKeyName where+  liftEq eq (DynamicKey a) (DynamicKey b) = liftEq2 (liftEq eq) eq a b+  liftEq _ (StaticKey a) (StaticKey b) = a == b+  liftEq _ _ _ = False++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable1 NKeyName where+  liftHashWithSalt h salt (DynamicKey a) =+      liftHashWithSalt2 (liftHashWithSalt h) h (salt `hashWithSalt` (0 :: Int)) a+  liftHashWithSalt _ salt (StaticKey n) =+      salt `hashWithSalt` (1 :: Int) `hashWithSalt` n+#endif++-- Deriving this instance automatically is not possible because @r@+-- occurs not only as last argument in @Antiquoted (NString r) r@+instance Show1 NKeyName where+  liftShowsPrec sp sl p = \case+    DynamicKey a -> showsUnaryWith (liftShowsPrec2 (liftShowsPrec sp sl) (liftShowList sp sl) sp sl) "DynamicKey" p a+    StaticKey t -> showsUnaryWith showsPrec "StaticKey" p t++-- Deriving this instance automatically is not possible because @r@+-- occurs not only as last argument in @Antiquoted (NString r) r@+instance Functor NKeyName where+  fmap = fmapDefault++-- Deriving this instance automatically is not possible because @r@+-- occurs not only as last argument in @Antiquoted (NString r) r@+instance Foldable NKeyName where+  foldMap = foldMapDefault++-- Deriving this instance automatically is not possible because @r@+-- occurs not only as last argument in @Antiquoted (NString r) r@+instance Traversable NKeyName where+  traverse f = \case+    DynamicKey (Plain str)    -> DynamicKey . Plain <$> traverse f str+    DynamicKey (Antiquoted e) -> DynamicKey . Antiquoted <$> f e+    DynamicKey EscapedNewline -> pure $ DynamicKey EscapedNewline+    StaticKey key -> pure (StaticKey key)++-- | A selector (for example in a @let@ or an attribute set) is made up+-- of strung-together key names.+type NAttrPath r = NonEmpty (NKeyName r)++-- | There are two unary operations: logical not and integer negation.+data NUnaryOp = NNeg | NNot+  deriving (Eq, Ord, Generic, Typeable, Data, Show, Read, NFData,+            Hashable)++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise NUnaryOp+#endif++-- | Binary operators expressible in the nix language.+data NBinaryOp+  = NEq      -- ^ Equality (==)+  | NNEq     -- ^ Inequality (!=)+  | NLt      -- ^ Less than (<)+  | NLte     -- ^ Less than or equal (<=)+  | NGt      -- ^ Greater than (>)+  | NGte     -- ^ Greater than or equal (>=)+  | NAnd     -- ^ Logical and (&&)+  | NOr      -- ^ Logical or (||)+  | NImpl    -- ^ Logical implication (->)+  | NUpdate  -- ^ Joining two attribut sets (//)+  | NPlus    -- ^ Addition (+)+  | NMinus   -- ^ Subtraction (-)+  | NMult    -- ^ Multiplication (*)+  | NDiv     -- ^ Division (/)+  | NConcat  -- ^ List concatenation (++)+  | NApp     -- ^ Apply a function to an argument.+  deriving (Eq, Ord, Generic, Typeable, Data, Show, Read, NFData,+            Hashable)++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise NBinaryOp+#endif++-- | Get the name out of the parameter (there might be none).+paramName :: Params r -> Maybe VarName+paramName (Param n) = Just n+paramName (ParamSet _ _ n) = n++$(deriveEq1 ''NExprF)+$(deriveEq1 ''NString)+$(deriveEq1 ''Binding)+$(deriveEq1 ''Params)+$(deriveEq1 ''Antiquoted)+$(deriveEq2 ''Antiquoted)++$(deriveOrd1 ''NString)+$(deriveOrd1 ''Params)+$(deriveOrd1 ''Antiquoted)+$(deriveOrd2 ''Antiquoted)++$(deriveRead1 ''NString)+$(deriveRead1 ''Params)+$(deriveRead1 ''Antiquoted)+$(deriveRead2 ''Antiquoted)++$(deriveShow1 ''NExprF)+$(deriveShow1 ''NString)+$(deriveShow1 ''Params)+$(deriveShow1 ''Binding)+$(deriveShow1 ''Antiquoted)+$(deriveShow2 ''Antiquoted)++-- $(deriveJSON1 defaultOptions ''NExprF)+$(deriveJSON1 defaultOptions ''NString)+$(deriveJSON1 defaultOptions ''Params)+-- $(deriveJSON1 defaultOptions ''Binding)+$(deriveJSON1 defaultOptions ''Antiquoted)+$(deriveJSON2 defaultOptions ''Antiquoted)++instance (Binary v, Binary a) => Binary (Antiquoted v a)+instance Binary a => Binary (NString a)+instance Binary a => Binary (Binding a)+instance Binary Pos where+    put x = Bin.put (unPos x)+    get = mkPos <$> Bin.get+instance Binary SourcePos+instance Binary a => Binary (NKeyName a)+instance Binary a => Binary (Params a)+instance Binary NAtom+instance Binary NUnaryOp+instance Binary NBinaryOp+instance Binary a => Binary (NExprF a)++instance (ToJSON v, ToJSON a) => ToJSON (Antiquoted v a)+instance ToJSON a => ToJSON (NString a)+instance ToJSON a => ToJSON (Binding a)+instance ToJSON Pos where+    toJSON x = toJSON (unPos x)+instance ToJSON SourcePos+instance ToJSON a => ToJSON (NKeyName a)+instance ToJSON a => ToJSON (Params a)+instance ToJSON NAtom+instance ToJSON NUnaryOp+instance ToJSON NBinaryOp+instance ToJSON a => ToJSON (NExprF a)+instance ToJSON NExpr++instance (FromJSON v, FromJSON a) => FromJSON (Antiquoted v a)+instance FromJSON a => FromJSON (NString a)+instance FromJSON a => FromJSON (Binding a)+instance FromJSON Pos where+    parseJSON = fmap mkPos . parseJSON+instance FromJSON SourcePos+instance FromJSON a => FromJSON (NKeyName a)+instance FromJSON a => FromJSON (Params a)+instance FromJSON NAtom+instance FromJSON NUnaryOp+instance FromJSON NBinaryOp+instance FromJSON a => FromJSON (NExprF a)+instance FromJSON NExpr++$(makeTraversals ''NExprF)+$(makeTraversals ''Binding)+$(makeTraversals ''Params)+$(makeTraversals ''Antiquoted)+$(makeTraversals ''NString)+$(makeTraversals ''NKeyName)+$(makeTraversals ''NUnaryOp)+$(makeTraversals ''NBinaryOp)++-- $(makeLenses ''Fix)++class NExprAnn ann g | g -> ann where+    fromNExpr :: g r -> (NExprF r, ann)+    toNExpr :: (NExprF r, ann) -> g r++ekey :: NExprAnn ann g+     => NonEmpty Text+     -> SourcePos+     -> Lens' (Fix g) (Maybe (Fix g))+ekey keys pos f e@(Fix x) | (NSet xs, ann) <- fromNExpr x =+    case go xs of+        ((v, []):_) -> fromMaybe e <$> f (Just v)+        ((v, r:rest):_) -> ekey (r :| rest) pos f v++        _ -> f Nothing <&> \case+            Nothing -> e+            Just v  ->+                let entry = NamedVar (NE.map StaticKey keys) v pos+                in Fix (toNExpr (NSet (entry : xs), ann))+  where+    go xs = do+        let keys' = NE.toList keys+        (ks, rest) <- zip (inits keys') (tails keys')+        case ks of+            [] -> empty+            j:js -> do+                NamedVar ns v _p <- xs+                guard $ (j:js) == (NE.toList ns ^.. traverse._StaticKey)+                return (v, rest)++ekey _ _ f e = fromMaybe e <$> f Nothing++stripPositionInfo :: NExpr -> NExpr+stripPositionInfo = transport phi+  where+    phi (NSet binds)         = NSet (map go binds)+    phi (NRecSet binds)      = NRecSet (map go binds)+    phi (NLet binds body)    = NLet (map go binds) body+    phi x = x++    go (NamedVar path r _pos)  = NamedVar path r nullPos+    go (Inherit ms names _pos) = Inherit ms names nullPos++nullPos :: SourcePos+nullPos = SourcePos "<string>" (mkPos 1) (mkPos 1)
+ src/Nix/Expr/Types/Annotated.hs view
@@ -0,0 +1,240 @@+{-# LANGUAGE CPP                #-}+{-# LANGUAGE DeriveAnyClass     #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable     #-}+{-# LANGUAGE DeriveFunctor      #-}+{-# LANGUAGE DeriveGeneric      #-}+{-# LANGUAGE DeriveTraversable  #-}+{-# LANGUAGE FlexibleInstances  #-}+{-# LANGUAGE KindSignatures     #-}+{-# LANGUAGE LambdaCase         #-}+{-# LANGUAGE OverloadedStrings  #-}+{-# LANGUAGE PatternSynonyms    #-}+{-# LANGUAGE RankNTypes         #-}+{-# LANGUAGE TemplateHaskell    #-}++-- | The source location annotated nix expression type and supporting types.+--+module Nix.Expr.Types.Annotated+  ( module Nix.Expr.Types.Annotated+  , module Data.Functor.Compose+  , SourcePos(..), unPos, mkPos+  )where++#if MIN_VERSION_serialise(0, 2, 0)+import Codec.Serialise+#endif+import Control.DeepSeq+import Data.Aeson (ToJSON(..), FromJSON(..))+import Data.Aeson.TH+import Data.Binary (Binary(..))+import Data.Data+import Data.Eq.Deriving+import Data.Fix+import Data.Function (on)+import Data.Functor.Compose+import Data.Hashable+#if MIN_VERSION_hashable(1, 2, 5)+import Data.Hashable.Lifted+#endif+import Data.Ord.Deriving+import Data.Semigroup+import Data.Text (Text, pack)+import GHC.Generics+import Nix.Atoms+import Nix.Expr.Types+import Text.Megaparsec (unPos, mkPos)+import Text.Megaparsec.Pos (SourcePos(..))+import Text.Read.Deriving+import Text.Show.Deriving++-- | A location in a source file+data SrcSpan = SrcSpan+    { spanBegin :: SourcePos+    , spanEnd   :: SourcePos+    }+    deriving (Ord, Eq, Generic, Typeable, Data, Show, NFData,+              Hashable)++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise SrcSpan+#endif++-- | A type constructor applied to a type along with an annotation+--+-- Intended to be used with 'Fix':+-- @type MyType = Fix (Compose (Ann Annotation) F)@+data Ann ann a = Ann+    { annotation :: ann+    , annotated  :: a+    }+    deriving (Ord, Eq, Data, Generic, Generic1, Typeable, Functor, Foldable,+              Traversable, Read, Show, NFData, Hashable)++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable ann => Hashable1 (Ann ann)+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance (Serialise ann, Serialise a) => Serialise (Ann ann a)+#endif++#if MIN_VERSION_deepseq(1, 4, 3)+instance NFData ann => NFData1 (Ann ann)+#endif++$(deriveEq1   ''Ann)+$(deriveEq2   ''Ann)+$(deriveOrd1  ''Ann)+$(deriveOrd2  ''Ann)+$(deriveRead1 ''Ann)+$(deriveRead2 ''Ann)+$(deriveShow1 ''Ann)+$(deriveShow2 ''Ann)+$(deriveJSON1 defaultOptions ''Ann)+$(deriveJSON2 defaultOptions ''Ann)++instance Semigroup SrcSpan where+  s1 <> s2 = SrcSpan ((min `on` spanBegin) s1 s2)+                     ((max `on` spanEnd) s1 s2)++type AnnF ann f = Compose (Ann ann) f++annToAnnF :: Ann ann (f (Fix (AnnF ann f))) -> Fix (AnnF ann f)+annToAnnF (Ann ann a) = AnnE ann a++type NExprLocF = AnnF SrcSpan NExprF++-- | A nix expression with source location at each subexpression.+type NExprLoc = Fix NExprLocF++#if MIN_VERSION_hashable(1, 2, 5) && MIN_VERSION_deepseq(1, 4, 3)+-- Needs deepseq-1.4.3 because Compose requires NFData1+instance NFData NExprLoc+#endif++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise NExprLoc+#endif++#if MIN_VERSION_hashable(1, 2, 5)+instance Hashable NExprLoc+#endif++instance Binary SrcSpan+instance (Binary ann, Binary a) => Binary (Ann ann a)+instance Binary r => Binary (NExprLocF r)+instance Binary NExprLoc++instance ToJSON SrcSpan+instance FromJSON SrcSpan++#if MIN_VERSION_serialise(0, 2, 0)+instance Serialise r => Serialise (Compose (Ann SrcSpan) NExprF r) where+    encode (Compose (Ann ann a)) = encode ann <> encode a+    decode = (Compose .) . Ann <$> decode <*> decode+#endif++pattern AnnE :: forall ann (g :: * -> *). ann+             -> g (Fix (Compose (Ann ann) g)) -> Fix (Compose (Ann ann) g)+pattern AnnE ann a = Fix (Compose (Ann ann a))++stripAnnotation :: Functor f => Fix (AnnF ann f) -> Fix f+stripAnnotation = ana (annotated . getCompose . unFix)++stripAnn :: AnnF ann f r -> f r+stripAnn = annotated . getCompose++nUnary :: Ann SrcSpan NUnaryOp -> NExprLoc -> NExprLoc+nUnary (Ann s1 u) e1@(AnnE s2 _) = AnnE (s1 <> s2) (NUnary u e1)+nUnary _ _ = error "nUnary: unexpected"++nBinary :: Ann SrcSpan NBinaryOp -> NExprLoc -> NExprLoc -> NExprLoc+nBinary (Ann s1 b) e1@(AnnE s2 _) e2@(AnnE s3 _) =+  AnnE (s1 <> s2 <> s3) (NBinary b e1 e2)+nBinary _ _ _ = error "nBinary: unexpected"++nSelectLoc :: NExprLoc -> Ann SrcSpan (NAttrPath NExprLoc) -> Maybe NExprLoc+           -> NExprLoc+nSelectLoc e1@(AnnE s1 _) (Ann s2 ats) d = case d of+  Nothing               -> AnnE (s1 <> s2) (NSelect e1 ats Nothing)+  Just (e2@(AnnE s3 _)) -> AnnE (s1 <> s2 <> s3) (NSelect e1 ats (Just e2))+  _ -> error "nSelectLoc: unexpected"+nSelectLoc _ _ _ = error "nSelectLoc: unexpected"++nHasAttr :: NExprLoc -> Ann SrcSpan (NAttrPath NExprLoc) -> NExprLoc+nHasAttr e1@(AnnE s1 _) (Ann s2 ats) = AnnE (s1 <> s2) (NHasAttr e1 ats)+nHasAttr _ _ = error "nHasAttr: unexpected"++nApp :: NExprLoc -> NExprLoc -> NExprLoc+nApp e1@(AnnE s1 _) e2@(AnnE s2 _) = AnnE (s1 <> s2) (NBinary NApp e1 e2)+nApp _ _ = error "nApp: unexpected"++nAbs :: Ann SrcSpan (Params NExprLoc) -> NExprLoc -> NExprLoc+nAbs (Ann s1 ps) e1@(AnnE s2 _) = AnnE (s1 <> s2) (NAbs ps e1)+nAbs _ _ = error "nAbs: unexpected"++nStr :: Ann SrcSpan (NString NExprLoc) -> NExprLoc+nStr (Ann s1 s) = AnnE s1 (NStr s)++deltaInfo :: SourcePos -> (Text, Int, Int)+deltaInfo (SourcePos fp l c) = (pack fp, unPos l, unPos c)++nNull :: NExprLoc+nNull = Fix (Compose (Ann nullSpan (NConstant NNull)))++nullSpan :: SrcSpan+nullSpan = SrcSpan nullPos nullPos++-- | Pattern systems for matching on NExprLocF constructions.++pattern NSym_ :: SrcSpan -> VarName -> NExprLocF r+pattern NSym_ ann x = Compose (Ann ann (NSym x))++pattern NConstant_ :: SrcSpan -> NAtom -> NExprLocF r+pattern NConstant_ ann x = Compose (Ann ann (NConstant x))++pattern NStr_ :: SrcSpan -> NString r -> NExprLocF r+pattern NStr_ ann x = Compose (Ann ann (NStr x))++pattern NList_ :: SrcSpan -> [r] -> NExprLocF r+pattern NList_ ann x = Compose (Ann ann (NList x))++pattern NSet_ :: SrcSpan -> [Binding r] -> NExprLocF r+pattern NSet_ ann x = Compose (Ann ann (NSet x))++pattern NRecSet_ :: SrcSpan -> [Binding r] -> NExprLocF r+pattern NRecSet_ ann x = Compose (Ann ann (NRecSet x))++pattern NLiteralPath_ :: SrcSpan -> FilePath -> NExprLocF r+pattern NLiteralPath_ ann x = Compose (Ann ann (NLiteralPath x))++pattern NEnvPath_ :: SrcSpan -> FilePath -> NExprLocF r+pattern NEnvPath_ ann x = Compose (Ann ann (NEnvPath x))++pattern NSelect_ :: SrcSpan -> r -> NAttrPath r -> Maybe r -> NExprLocF r+pattern NSelect_ ann x p v = Compose (Ann ann (NSelect x p v))++pattern NHasAttr_ :: SrcSpan -> r -> NAttrPath r -> NExprLocF r+pattern NHasAttr_ ann x p = Compose (Ann ann (NHasAttr x p))++pattern NAbs_ :: SrcSpan -> Params r-> r -> NExprLocF r+pattern NAbs_ ann x b = Compose (Ann ann (NAbs x b))++pattern NLet_ :: SrcSpan -> [Binding r] -> r -> NExprLocF r+pattern NLet_ ann x b = Compose (Ann ann (NLet x b))++pattern NIf_ :: SrcSpan -> r -> r -> r -> NExprLocF r+pattern NIf_ ann c t e = Compose (Ann ann (NIf c t e))++pattern NWith_ :: SrcSpan -> r -> r -> NExprLocF r+pattern NWith_ ann x y = Compose (Ann ann (NWith x y))++pattern NAssert_ :: SrcSpan -> r -> r -> NExprLocF r+pattern NAssert_ ann x y = Compose (Ann ann (NAssert x y))++pattern NUnary_ :: SrcSpan -> NUnaryOp -> r -> NExprLocF r+pattern NUnary_ ann op x = Compose (Ann ann (NUnary op x))++pattern NBinary_ :: SrcSpan -> NBinaryOp -> r -> r -> NExprLocF r+pattern NBinary_ ann op x y = Compose (Ann ann (NBinary op x y))
+ src/Nix/Frames.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Nix.Frames (NixLevel(..), Frames, Framed, NixFrame(..),+                   NixException(..), withFrame, throwError,+                   module Data.Typeable,+                   module Control.Exception) where++import Control.Exception hiding (catch, evaluate)+import Control.Monad.Catch+import Control.Monad.Reader+import Data.Typeable hiding (typeOf)+import Nix.Utils++data NixLevel = Fatal | Error | Warning | Info | Debug+    deriving (Ord, Eq, Bounded, Enum, Show)++data NixFrame = NixFrame+    { frameLevel :: NixLevel+    , frame      :: SomeException+    }++instance Show NixFrame where+    show (NixFrame level f) =+        "Nix frame at level " ++ show level ++ ": "++ show f++type Frames = [NixFrame]++type Framed e m = (MonadReader e m, Has e Frames, MonadThrow m)++newtype NixException = NixException Frames+    deriving Show++instance Exception NixException++withFrame :: forall s e m a. (Framed e m, Exception s) => NixLevel -> s -> m a -> m a+withFrame level f = local (over hasLens (NixFrame level (toException f) :))++throwError :: forall s e m a. (Framed e m, Exception s, MonadThrow m) => s -> m a+throwError err = do+    context <- asks (view hasLens)+    traceM "Throwing error..."+    throwM $ NixException (NixFrame Error (toException err):context)
+ src/Nix/Lint.hs view
@@ -0,0 +1,418 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UndecidableInstances #-}++{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -Wno-missing-methods #-}++module Nix.Lint where++import           Control.Exception+import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.Fix+import           Control.Monad.Reader (MonadReader)+import           Control.Monad.ST+import           Control.Monad.Trans.Reader+import           Data.Coerce+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.List+import qualified Data.List.NonEmpty as NE+import           Data.STRef+import           Data.Text (Text)+import qualified Data.Text as Text+import           Nix.Atoms+import           Nix.Context+import           Nix.Convert+import           Nix.Eval (MonadEval(..))+import qualified Nix.Eval as Eval+import           Nix.Expr+import           Nix.Frames+import           Nix.Options+import           Nix.Scope+import           Nix.Thunk+import           Nix.Utils++data TAtom+  = TInt+  | TFloat+  | TBool+  | TNull+  deriving (Show, Eq, Ord)++data NTypeF (m :: * -> *) r+    = TConstant [TAtom]+    | TStr+    | TList r+    | TSet (Maybe (HashMap Text r))+    | TClosure (Params ())+    | TPath+    | TBuiltin String (SThunk m -> m (Symbolic m))+    deriving Functor++compareTypes :: NTypeF m r -> NTypeF m r -> Ordering+compareTypes (TConstant _)   (TConstant _)   = EQ+compareTypes (TConstant _)   _               = LT+compareTypes _               (TConstant _)   = GT+compareTypes TStr            TStr            = EQ+compareTypes TStr            _               = LT+compareTypes _               TStr            = GT+compareTypes (TList _)       (TList _)       = EQ+compareTypes (TList _)       _               = LT+compareTypes _               (TList _)       = GT+compareTypes (TSet _)        (TSet _)        = EQ+compareTypes (TSet _)        _               = LT+compareTypes _               (TSet _)        = GT+compareTypes TClosure {}     TClosure {}     = EQ+compareTypes TClosure {}     _               = LT+compareTypes _               TClosure {}     = GT+compareTypes TPath           TPath           = EQ+compareTypes TPath            _              = LT+compareTypes _               TPath           = GT+compareTypes (TBuiltin _ _)  (TBuiltin _ _)  = EQ++data NSymbolicF r+    = NAny+    | NMany [r]+    deriving (Show, Eq, Ord, Functor, Foldable, Traversable)++newtype SThunk m = SThunk { getSThunk :: Thunk m (Symbolic m) }++newtype Symbolic m =+    Symbolic { getSymbolic :: Var m (NSymbolicF (NTypeF m (SThunk m))) }++instance Show (Symbolic m) where+    show _ = "<symbolic>"++everyPossible :: MonadVar m => m (Symbolic m)+everyPossible = packSymbolic NAny++mkSymbolic :: MonadVar m => [NTypeF m (SThunk m)] -> m (Symbolic m)+mkSymbolic xs = packSymbolic (NMany xs)++packSymbolic :: MonadVar m+             => NSymbolicF (NTypeF m (SThunk m)) -> m (Symbolic m)+packSymbolic = fmap coerce . newVar++unpackSymbolic :: MonadVar m+               => Symbolic m -> m (NSymbolicF (NTypeF m (SThunk m)))+unpackSymbolic = readVar . coerce++type MonadLint e m = (Scoped e (SThunk m) m, Framed e m, MonadVar m)++symerr :: forall e m a. MonadLint e m => String -> m a+symerr = evalError @(Symbolic m) . ErrorCall++renderSymbolic :: MonadLint e m => Symbolic m -> m String+renderSymbolic = unpackSymbolic >=> \case+    NAny -> return "<any>"+    NMany xs -> fmap (intercalate ", ") $ forM xs $ \case+        TConstant ys  -> fmap (intercalate ", ") $ forM ys $ \case+            TInt   -> return "int"+            TFloat -> return "float"+            TBool  -> return "bool"+            TNull  -> return "null"+        TStr            -> return "string"+        TList r         -> do+            x <- force r renderSymbolic+            return $ "[" ++ x ++ "]"+        TSet Nothing    -> return "<any set>"+        TSet (Just s)   -> do+            x <- traverse (`force` renderSymbolic) s+            return $ "{" ++ show x ++ "}"+        f@(TClosure p) -> do+            (args, sym) <- do+                f' <- mkSymbolic [f]+                lintApp (NAbs (void p) ()) f' everyPossible+            args' <- traverse renderSymbolic args+            sym'  <- renderSymbolic sym+            return $ "(" ++ show args' ++ " -> " ++ sym' ++ ")"+        TPath           -> return "path"+        TBuiltin _n _f    -> return "<builtin function>"++-- This function is order and uniqueness preserving (of types).+merge :: forall e m. MonadLint e m+      => NExprF () -> [NTypeF m (SThunk m)] -> [NTypeF m (SThunk m)]+      -> m [NTypeF m (SThunk m)]+merge context = go+  where+    go :: [NTypeF m (SThunk m)] -> [NTypeF m (SThunk m)]+       -> m [NTypeF m (SThunk m)]+    go [] _ = return []+    go _ [] = return []+    go (x:xs) (y:ys) = case (x, y) of+        (TStr,  TStr)  -> (TStr :)  <$> go xs ys+        (TPath, TPath) -> (TPath :) <$> go xs ys+        (TConstant ls, TConstant rs) ->+            (TConstant (ls `intersect` rs) :) <$> go xs ys+        (TList l, TList r) -> force l $ \l' -> force r $ \r' -> do+            m <- thunk $ unify context l' r'+            (TList m :) <$> go xs ys+        (TSet x, TSet Nothing) -> (TSet x :) <$> go xs ys+        (TSet Nothing, TSet x) -> (TSet x :) <$> go xs ys+        (TSet (Just l), TSet (Just r)) -> do+            m <- sequenceA $ M.intersectionWith+                (\i j -> i >>= \i' -> j >>= \j' ->+                        force i' $ \i'' -> force j' $ \j'' ->+                            thunk $ unify context i'' j'')+                (return <$> l) (return <$> r)+            if M.null m+                then go xs ys+                else (TSet (Just m) :) <$> go xs ys+        (TClosure {}, TClosure {}) ->+            throwError $ ErrorCall "Cannot unify functions"+        (TBuiltin _ _, TBuiltin _ _) ->+            throwError $ ErrorCall "Cannot unify builtin functions"+        _ | compareTypes x y == LT -> go xs (y:ys)+          | compareTypes x y == GT -> go (x:xs) ys+          | otherwise              -> error "impossible"++{-+    mergeFunctions pl nl fl pr fr xs ys = do+        m <- sequenceA $ M.intersectionWith+            (\i j -> i >>= \i' -> j >>= \j' -> case (i', j') of+                    (Nothing, Nothing) -> return $ Just Nothing+                    (_, Nothing) -> return Nothing+                    (Nothing, _) -> return Nothing+                    (Just i'', Just j'') ->+                        Just . Just <$> unify context i'' j'')+            (return <$> pl) (return <$> pr)+        let Just m' = sequenceA $ M.filter isJust m+        if M.null m'+            then go xs ys+            else do+                g <- unify context fl fr+                (TClosure (ParamSet m' False nl) g :)+                    <$> go xs ys+-}++-- | unify raises an error if the result is would be 'NMany []'.+unify :: forall e m. MonadLint e m+      => NExprF () -> Symbolic m -> Symbolic m -> m (Symbolic m)+unify context (Symbolic x) (Symbolic y) = do+    x' <- readVar x+    y' <- readVar y+    case (x', y') of+        (NAny, _) -> do+            writeVar x y'+            return $ Symbolic y+        (_, NAny) -> do+            writeVar y x'+            return $ Symbolic x+        (NMany xs, NMany ys) -> do+            m <- merge context xs ys+            if null m+                then do+                    -- x' <- renderSymbolic (Symbolic x)+                    -- y' <- renderSymbolic (Symbolic y)+                    throwError $ ErrorCall "Cannot unify "+                        -- ++ show x' ++ " with " ++ show y'+                        --  ++ " in context: " ++ show context+                else do+                    writeVar x (NMany m)+                    writeVar y (NMany m)+                    packSymbolic (NMany m)++-- These aren't worth defining yet, because once we move to Hindley-Milner,+-- we're not going to be managing Symbolic values this way anymore.++instance ToValue Bool m (Symbolic m) where++instance ToValue [SThunk m] m (Symbolic m) where++instance FromValue (Text, DList Text) m (Symbolic m) where++instance FromValue (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where++instance ToValue (AttrSet (SThunk m), AttrSet SourcePos) m (Symbolic m) where++instance MonadLint e m => MonadThunk (Symbolic m) (SThunk m) m where+    thunk = fmap coerce . buildThunk+    force = forceThunk . coerce+    value = coerce . valueRef++instance MonadLint e m => MonadEval (Symbolic m) m where+    freeVariable var = symerr $+        "Undefined variable '" ++ Text.unpack var ++ "'"++    attrMissing ks Nothing =+        evalError @(Symbolic m) $ ErrorCall $+            "Inheriting unknown attribute: "+                ++ intercalate "." (map Text.unpack (NE.toList ks))++    attrMissing ks (Just s) =+        evalError @(Symbolic m) $ ErrorCall $ "Could not look up attribute "+            ++ intercalate "." (map Text.unpack (NE.toList ks))+            ++ " in " ++ show s++    evalCurPos = do+        f <- value <$> mkSymbolic [TPath]+        l <- value <$> mkSymbolic [TConstant [TInt]]+        c <- value <$> mkSymbolic [TConstant [TInt]]+        mkSymbolic [TSet (Just (M.fromList (go f l c)))]+      where+        go f l c =+            [ (Text.pack "file", f)+            , (Text.pack "line", l)+            , (Text.pack "col",  c) ]++    evalConstant c  = mkSymbolic [TConstant [go c]]+      where+        go = \case+          NInt _   -> TInt+          NFloat _ -> TFloat+          NBool _  -> TBool+          NNull    -> TNull++    evalString      = const $ mkSymbolic [TStr]+    evalLiteralPath = const $ mkSymbolic [TPath]+    evalEnvPath     = const $ mkSymbolic [TPath]++    evalUnary op arg =+        unify (void (NUnary op arg)) arg+            =<< mkSymbolic [TConstant [TInt, TBool]]++    evalBinary = lintBinaryOp++    evalWith scope body = do+        -- The scope is deliberately wrapped in a thunk here, since it is+        -- evaluated each time a name is looked up within the weak scope, and+        -- we want to be sure the action it evaluates is to force a thunk, so+        -- its value is only computed once.+        s <- thunk scope+        pushWeakScope ?? body $ force s $ unpackSymbolic >=> \case+            NMany [TSet (Just s')] -> return s'+            NMany [TSet Nothing] -> error "NYI: with unknown"+            _ -> throwError $ ErrorCall "scope must be a set in with statement"++    evalIf cond t f = do+        t' <- t+        f' <- f+        let e = NIf cond t' f'+        _ <- unify (void e) cond =<< mkSymbolic [TConstant [TBool]]+        unify (void e) t' f'++    evalAssert cond body = do+        body' <- body+        let e = NAssert cond body'+        _ <- unify (void e) cond =<< mkSymbolic [TConstant [TBool]]+        pure body'++    evalApp = (fmap snd .) . lintApp (NBinary NApp () ())+    evalAbs params _ = mkSymbolic [TClosure (void params)]++    evalError = throwError++lintBinaryOp+    :: forall e m. (MonadLint e m, MonadEval (Symbolic m) m)+    => NBinaryOp -> Symbolic m -> m (Symbolic m) -> m (Symbolic m)+lintBinaryOp op lsym rarg = do+    rsym <- rarg+    y <- thunk everyPossible+    case op of+        NApp   -> symerr "lintBinaryOp:NApp: should never get here"+        NEq    -> check lsym rsym [ TConstant [TInt, TBool, TNull]+                                 , TStr+                                 , TList y ]+        NNEq   -> check lsym rsym [ TConstant [TInt, TBool, TNull]+                                 , TStr+                                 , TList y ]++        NLt    -> check lsym rsym [ TConstant [TInt, TBool, TNull] ]+        NLte   -> check lsym rsym [ TConstant [TInt, TBool, TNull] ]+        NGt    -> check lsym rsym [ TConstant [TInt, TBool, TNull] ]+        NGte   -> check lsym rsym [ TConstant [TInt, TBool, TNull] ]++        NAnd   -> check lsym rsym [ TConstant [TBool] ]+        NOr    -> check lsym rsym [ TConstant [TBool] ]+        NImpl  -> check lsym rsym [ TConstant [TBool] ]++        -- jww (2018-04-01): NYI: Allow Path + Str+        NPlus  -> check lsym rsym [ TConstant [TInt], TStr, TPath ]+        NMinus -> check lsym rsym [ TConstant [TInt] ]+        NMult  -> check lsym rsym [ TConstant [TInt] ]+        NDiv   -> check lsym rsym [ TConstant [TInt] ]++        NUpdate -> check lsym rsym [ TSet Nothing ]++        NConcat -> check lsym rsym [ TList y ]+  where+    check lsym rsym xs = do+        let e = NBinary op lsym rsym+        m <- mkSymbolic xs+        _ <- unify (void e) lsym m+        _ <- unify (void e) rsym m+        unify (void e) lsym rsym++infixl 1 `lintApp`+lintApp :: forall e m. MonadLint e m+        => NExprF () -> Symbolic m -> m (Symbolic m)+        -> m (HashMap VarName (Symbolic m), Symbolic m)+lintApp context fun arg = unpackSymbolic fun >>= \case+    NAny -> throwError $ ErrorCall+        "Cannot apply something not known to be a function"+    NMany xs -> do+        (args:_, ys) <- fmap unzip $ forM xs $ \case+            TClosure _params -> arg >>= unpackSymbolic >>= \case+                NAny -> do+                    error "NYI"++                NMany [TSet (Just _)] -> do+                    error "NYI"++                NMany _ -> throwError $ ErrorCall "NYI: lintApp NMany not set"+            TBuiltin _ _f -> throwError $ ErrorCall "NYI: lintApp builtin"+            TSet _m -> throwError $ ErrorCall "NYI: lintApp Set"+            _x -> throwError $ ErrorCall "Attempt to call non-function"++        y <- everyPossible+        (args,) <$> foldM (unify context) y ys++newtype Lint s a = Lint+    { runLint :: ReaderT (Context (Lint s) (SThunk (Lint s))) (ST s) a }+    deriving (Functor, Applicative, Monad, MonadFix,+              MonadReader (Context (Lint s) (SThunk (Lint s))))++instance MonadVar (Lint s) where+    type Var (Lint s) = STRef s++    newVar x     = Lint $ ReaderT $ \_ -> newSTRef x+    readVar x    = Lint $ ReaderT $ \_ -> readSTRef x+    writeVar x y = Lint $ ReaderT $ \_ -> writeSTRef x y+    atomicModifyVar x f = Lint $ ReaderT $ \_ -> do+        res <- snd . f <$> readSTRef x+        _ <- modifySTRef x (fst . f)+        return res++instance MonadThrow (Lint s) where+    throwM e = Lint $ ReaderT $ \_ -> throw e++runLintM :: Options -> Lint s a -> ST s a+runLintM opts = flip runReaderT (newContext opts) . runLint++symbolicBaseEnv :: Monad m => m (Scopes m (SThunk m))+symbolicBaseEnv = return emptyScopes++lint :: Options -> NExprLoc -> ST s (Symbolic (Lint s))+lint opts expr = runLintM opts $+    symbolicBaseEnv+        >>= (`pushScopes`+                adi (Eval.eval . annotated . getCompose)+                    Eval.addSourcePositions expr)
+ src/Nix/Normal.hs view
@@ -0,0 +1,98 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++module Nix.Normal where++import           Control.Monad+import           Data.Fix+import qualified Data.HashMap.Lazy as M+import           Data.Text (Text)+import qualified Data.Text as Text+import           Nix.Atoms+import           Nix.Effects+import           Nix.Frames+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value++newtype NormalLoop m = NormalLoop (NValue m)+    deriving Show++instance Typeable m => Exception (NormalLoop m)++normalFormBy+    :: forall e m. (Framed e m, MonadVar m, Typeable m)+    => (forall r. NThunk m -> (NValue m -> m r) -> m r)+    -> Int+    -> NValue m+    -> m (NValueNF m)+normalFormBy k n v = do+    when (n > 2000) $ throwError $ NormalLoop v+    case v of+        NVConstant a     -> return $ Fix $ NVConstantF a+        NVStr t s        -> return $ Fix $ NVStrF t s+        NVList l         ->+            fmap (Fix . NVListF) $ forM (zip [0..] l) $ \(i :: Int, t) -> do+                traceM $ replicate n ' ' ++ "normalFormBy: List[" ++ show i ++ "]"+                t `k` normalFormBy k (succ n)+        NVSet s p        ->+            fmap (Fix . flip NVSetF p) $ sequence $ flip M.mapWithKey s $ \ky t -> do+                traceM $ replicate n ' ' ++ "normalFormBy: Set{" ++ show ky ++ "}"+                t `k` normalFormBy k (succ n)+        NVClosure p f    -> return $ Fix $ NVClosureF p f+        NVPath fp        -> return $ Fix $ NVPathF fp+        NVBuiltin name f -> return $ Fix $ NVBuiltinF name f+        _ -> error "Pattern synonyms mask complete matches"++normalForm :: (Framed e m, MonadVar m, Typeable m,+              MonadThunk (NValue m) (NThunk m) m)+           => NValue m -> m (NValueNF m)+normalForm = normalFormBy force 0++embed :: forall m. (MonadThunk (NValue m) (NThunk m) m)+      => NValueNF m -> m (NValue m)+embed (Fix x) = case x of+    NVConstantF a     -> return $ nvConstant a+    NVStrF t s        -> return $ nvStr t s+    NVListF l         -> nvList . fmap (value @_ @_ @m)+        <$> traverse embed l+    NVSetF s p        -> flip nvSet p . fmap (value @_ @_ @m)+        <$> traverse embed s+    NVClosureF p f    -> return $ nvClosure p f+    NVPathF fp        -> return $ nvPath fp+    NVBuiltinF name f -> return $ nvBuiltin name f++valueText :: forall e m. (Framed e m, MonadEffects m, Typeable m)+          => Bool -> NValueNF m -> m (Text, DList Text)+valueText addPathsToStore = cata phi+  where+    phi :: NValueF m (m (Text, DList Text)) -> m (Text, DList Text)+    phi (NVConstantF a) = pure (atomText a, mempty)+    phi (NVStrF t c)    = pure (t, c)+    phi v@(NVListF _)   = coercionFailed v+    phi v@(NVSetF s _)+      | Just asString <- M.lookup "__asString" s = asString+      | otherwise = coercionFailed v+    phi v@NVClosureF {} = coercionFailed v+    phi (NVPathF originalPath)+        | addPathsToStore = do+            storePath <- addPath originalPath+            pure (Text.pack $ unStorePath storePath, mempty)+        | otherwise = pure (Text.pack originalPath, mempty)+    phi v@(NVBuiltinF _ _) = coercionFailed v++    coercionFailed v =+        throwError $ Coercion @m (valueType v) TString++valueTextNoContext :: (Framed e m, MonadEffects m, Typeable m)+                   => Bool -> NValueNF m -> m Text+valueTextNoContext addPathsToStore = fmap fst . valueText addPathsToStore
+ src/Nix/Options.hs view
@@ -0,0 +1,79 @@+module Nix.Options where++import           Data.Text (Text)+import           Data.Time++data Options = Options+    { verbose      :: Verbosity+    , tracing      :: Bool+    , thunks       :: Bool+    , values       :: Bool+    , reduce       :: Maybe FilePath+    , reduceSets   :: Bool+    , reduceLists  :: Bool+    , parse        :: Bool+    , parseOnly    :: Bool+    , finder       :: Bool+    , findFile     :: Maybe FilePath+    , strict       :: Bool+    , normalize    :: Bool+    , evaluate     :: Bool+    , json         :: Bool+    , xml          :: Bool+    , attr         :: Maybe Text+    , include      :: [FilePath]+    , check        :: Bool+    , readFrom     :: Maybe FilePath+    , cache        :: Bool+    , repl         :: Bool+    , ignoreErrors :: Bool+    , expression   :: Maybe Text+    , arg          :: [(Text, Text)]+    , argstr       :: [(Text, Text)]+    , fromFile     :: Maybe FilePath+    , currentTime  :: UTCTime+    , filePaths    :: [FilePath]+    }+    deriving Show++defaultOptions :: UTCTime -> Options+defaultOptions current = Options+    { verbose      = ErrorsOnly+    , tracing      = False+    , thunks       = False+    , values       = False+    , reduce       = Nothing+    , reduceSets   = False+    , reduceLists  = False+    , parse        = False+    , parseOnly    = False+    , finder       = False+    , findFile     = Nothing+    , strict       = False+    , normalize    = False+    , evaluate     = False+    , json         = False+    , xml          = False+    , attr         = Nothing+    , include      = []+    , check        = False+    , readFrom     = Nothing+    , cache        = False+    , repl         = False+    , ignoreErrors = False+    , expression   = Nothing+    , arg          = []+    , argstr       = []+    , fromFile     = Nothing+    , currentTime  = current+    , filePaths    = []+    }++data Verbosity+    = ErrorsOnly+    | Informational+    | Talkative+    | Chatty+    | DebugInfo+    | Vomit+    deriving (Eq, Ord, Enum, Bounded, Show)
+ src/Nix/Options/Parser.hs view
@@ -0,0 +1,130 @@+module Nix.Options.Parser where++import           Control.Arrow (second)+import           Data.Char (isDigit)+import           Data.Maybe (fromMaybe)+import           Data.Text (Text)+import qualified Data.Text as Text+import           Data.Time+import           Nix.Options+import           Options.Applicative hiding (ParserResult(..))+import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))++decodeVerbosity :: Int -> Verbosity+decodeVerbosity 0 = ErrorsOnly+decodeVerbosity 1 = Informational+decodeVerbosity 2 = Talkative+decodeVerbosity 3 = Chatty+decodeVerbosity 4 = DebugInfo+decodeVerbosity _ = Vomit++argPair :: Mod OptionFields (Text, Text) -> Parser (Text, Text)+argPair = option $ str >>= \s ->+    case Text.findIndex (== '=') s of+        Nothing -> errorWithoutStackTrace+            "Format of --arg/--argstr in hnix is: name=expr"+        Just i -> return $ second Text.tail $ Text.splitAt i s++nixOptions :: UTCTime -> Parser Options+nixOptions current = Options+    <$> (fromMaybe ErrorsOnly <$>+         optional+           (option (do a <- str+                       if all isDigit a+                       then pure $ decodeVerbosity (read a)+                       else fail "Argument to -v/--verbose must be a number")+            (   short 'v'+             <> long "verbose"+             <> help "Verbose output")))+    <*> switch+        (   long "trace"+         <> help "Enable tracing code (even more can be seen if built with --flags=tracing)")+    <*> switch+        (   long "thunks"+         <> help "Enable reporting of thunk tracing as well as regular evaluation")+    <*> switch+        (   long "values"+         <> help "Enable reporting of value provenance in error messages")+    <*> optional (strOption+        (   long "reduce"+         <> help "When done evaluating, output the evaluated part of the expression to FILE"))+    <*> switch+        (   long "reduce-sets"+         <> help "Reduce set members that aren't used; breaks if hasAttr is used")+    <*> switch+        (   long "reduce-lists"+         <> help "Reduce list members that aren't used; breaks if elemAt is used")+    <*> switch+        (   long "parse"+         <> help "Whether to parse the file (also the default right now)")+    <*> switch+        (   long "parse-only"+         <> help "Whether to parse only, no pretty printing or checking")+    <*> switch+        (   long "find"+         <> help "If selected, find paths within attr trees")+    <*> optional (strOption+        (   long "find-file"+         <> help "Look up the given files in Nix's search path"))+    <*> switch+        (   long "strict"+         <> help "When used with --eval, recursively evaluate list elements and attributes")+    <*> switch+        (   long "force"+         <> help "Whether to force the results of evaluation to normal form")+    <*> switch+        (   long "eval"+         <> help "Whether to evaluate, or just pretty-print")+    <*> switch+        (   long "json"+         <> help "Print the resulting value as an JSON representation")+    <*> switch+        (   long "xml"+         <> help "Print the resulting value as an XML representation")+    <*> optional (strOption+        (   short 'A'+         <> long "attr"+         <> help "Select an attribute from the top-level Nix expression being evaluated"))+    <*> many (strOption+        (   short 'I'+         <> long "include"+         <> help "Add a path to the Nix expression search path"))+    <*> switch+        (   long "check"+         <> help "Whether to check for syntax errors after parsing")+    <*> optional (strOption+        (   long "read"+         <> help "Read in an expression tree from a binary cache"))+    <*> switch+        (   long "cache"+         <> help "Write out the parsed expression tree to a binary cache")+    <*> switch+        (   long "repl"+         <> help "After performing any indicated actions, enter the REPL")+    <*> switch+        (   long "ignore-errors"+         <> help "Continue parsing files, even if there are errors")+    <*> optional (strOption+        (   short 'E'+         <> long "expr"+         <> help "Expression to parse or evaluate"))+    <*> many (argPair+        (   long "arg"+         <> help "Argument to pass to an evaluated lambda"))+    <*> many (argPair+        (   long "argstr"+         <> help "Argument string to pass to an evaluated lambda"))+    <*> optional (strOption+        (   short 'f'+         <> long "file"+         <> help "Parse all of the files given in FILE; - means stdin"))+    <*> option (parseTimeOrError True defaultTimeLocale "%Y/%m/%d %H:%M:%S" <$> str)+        (   long "now"+         <> value current+         <> help "Set current time for testing purposes")+    <*> many (strArgument (metavar "FILE" <> help "Path of file to parse"))++nixOptionsInfo :: UTCTime -> ParserInfo Options+nixOptionsInfo current =+    info (helper <*> nixOptions current)+         (fullDesc <> progDesc "" <> header "hnix")
+ src/Nix/Parser.hs view
@@ -0,0 +1,548 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -Wno-missing-signatures #-}++module Nix.Parser+    ( parseNixFile+    , parseNixFileLoc+    , parseNixText+    , parseNixTextLoc+    , parseFromFileEx+    , parseFromText+    , Result(..)+    , reservedNames+    , OperatorInfo(..)+    , NSpecialOp(..)+    , NAssoc(..)+    , NOperatorDef+    , getUnaryOperator+    , getBinaryOperator+    , getSpecialOperator+    ) where++import           Control.Applicative hiding (many, some)+import           Control.DeepSeq+import           Control.Monad+import           Control.Monad.IO.Class+import           Data.Char (isAlpha, isDigit, isSpace)+import           Data.Data (Data(..))+import           Data.Foldable (concat)+import           Data.Functor+import           Data.Functor.Identity+import           Data.HashSet (HashSet)+import qualified Data.HashSet as HashSet+import           Data.List.NonEmpty (NonEmpty(..))+import qualified Data.List.NonEmpty as NE+import qualified Data.Map as Map+import           Data.Text (Text)+import           Data.Text hiding (map, foldr1, concat, concatMap, zipWith)+import qualified Data.Text.IO as T+import           Data.Typeable (Typeable)+import           Data.Void+import           GHC.Generics hiding (Prefix)+import           Nix.Expr hiding (($>))+import           Nix.Strings+import           Text.Megaparsec+import           Text.Megaparsec.Char+import qualified Text.Megaparsec.Char.Lexer as L+import           Text.Megaparsec.Expr+import           Text.PrettyPrint.ANSI.Leijen (Doc, text)++infixl 3 <+>+(<+>) :: MonadPlus m => m a -> m a -> m a+(<+>) = mplus++--------------------------------------------------------------------------------++nixExprLoc :: Parser NExprLoc+nixExprLoc = makeExprParser nixTerm $ map (map snd) (nixOperators nixSelector)++antiStart :: Parser Text+antiStart = symbol "${" <?> show ("${" :: String)++nixAntiquoted :: Parser a -> Parser (Antiquoted a NExprLoc)+nixAntiquoted p =+        Antiquoted <$> (antiStart *> nixToplevelForm <* symbol "}")+    <+> Plain <$> p+    <?> "anti-quotation"++selDot :: Parser ()+selDot = try (symbol "." *> notFollowedBy nixPath) <?> "."++nixSelect :: Parser NExprLoc -> Parser NExprLoc+nixSelect term = do+    res <- build+        <$> term+        <*> optional ((,) <$> (selDot *> nixSelector)+                          <*> optional (reserved "or" *> nixTerm))+    continues <- optional $ lookAhead selDot+    case continues of+        Nothing -> pure res+        Just _  -> nixSelect (pure res)+ where+  build :: NExprLoc+        -> Maybe (Ann SrcSpan (NAttrPath NExprLoc), Maybe NExprLoc)+        -> NExprLoc+  build t Nothing = t+  build t (Just (s,o)) = nSelectLoc t s o++nixSelector :: Parser (Ann SrcSpan (NAttrPath NExprLoc))+nixSelector = annotateLocation $ do+    (x:xs) <- keyName `sepBy1` selDot+    return $ x :| xs++nixTerm :: Parser NExprLoc+nixTerm = do+    c <- try $ lookAhead $ satisfy $ \x ->+        pathChar x ||+        x == '(' ||+        x == '{' ||+        x == '[' ||+        x == '<' ||+        x == '/' ||+        x == '"' ||+        x == '\''+    case c of+        '('  -> nixSelect nixParens+        '{'  -> nixSelect nixSet+        '['  -> nixList+        '<'  -> nixSPath+        '/'  -> nixPath+        '"'  -> nixStringExpr+        '\'' -> nixStringExpr+        _    -> msum $+            [ nixSelect nixSet | c == 'r' ] +++            [ nixPath | pathChar c ] +++            if isDigit c+            then [ nixFloat+                 , nixInt ]+            else [ nixUri | isAlpha c ] +++                 [ nixBool | c == 't' || c == 'f' ] +++                 [ nixNull | c == 'n' ] +++                 [ nixSelect nixSym ]++nixToplevelForm :: Parser NExprLoc+nixToplevelForm = keywords <+> nixLambda <+> nixExprLoc+  where+    keywords = nixLet <+> nixIf <+> nixAssert <+> nixWith++nixSym :: Parser NExprLoc+nixSym = annotateLocation1 $ mkSymF <$> identifier++nixInt :: Parser NExprLoc+nixInt = annotateLocation1 (mkIntF <$> integer <?> "integer")++nixFloat :: Parser NExprLoc+nixFloat = annotateLocation1 (try (mkFloatF . realToFrac <$> float) <?> "float")++nixBool :: Parser NExprLoc+nixBool = annotateLocation1 (bool "true" True <+>+                             bool "false" False) <?> "bool" where+  bool str b = mkBoolF b <$ reserved str++nixNull :: Parser NExprLoc+nixNull = annotateLocation1 (mkNullF <$ reserved "null" <?> "null")++nixParens :: Parser NExprLoc+nixParens = parens nixToplevelForm <?> "parens"++nixList :: Parser NExprLoc+nixList = annotateLocation1 (brackets (NList <$> many nixTerm) <?> "list")++pathChar :: Char -> Bool+pathChar x = isAlpha x || isDigit x || x == '.' || x == '_' || x == '-' || x == '+' || x == '~'++slash :: Parser Char+slash = try (char '/' <* notFollowedBy (satisfy (\x -> x == '/' || x == '*' || isSpace x)))+    <?> "slash"++-- | A path surrounded by angle brackets, indicating that it should be+-- looked up in the NIX_PATH environment variable at evaluation.+nixSPath :: Parser NExprLoc+nixSPath = annotateLocation1+    (mkPathF True <$> try (char '<' *> many (satisfy pathChar <+> slash) <* symbol ">")+         <?> "spath")++pathStr :: Parser FilePath+pathStr = lexeme $ liftM2 (++) (many (satisfy pathChar))+    (Prelude.concat <$> some (liftM2 (:) slash (some (satisfy pathChar))))++nixPath :: Parser NExprLoc+nixPath = annotateLocation1 (try (mkPathF False <$> pathStr) <?> "path")++nixLet :: Parser NExprLoc+nixLet = annotateLocation1 (reserved "let"+    *> (letBody <+> letBinders)+    <?> "let block")+  where+    letBinders = NLet+        <$> nixBinders+        <*> (reserved "in" *> nixToplevelForm)+    -- Let expressions `let {..., body = ...}' are just desugared+    -- into `(rec {..., body = ...}).body'.+    letBody = (\x -> NSelect x (StaticKey "body" :| []) Nothing) <$> aset+    aset = annotateLocation1 $ NRecSet <$> braces nixBinders++nixIf :: Parser NExprLoc+nixIf = annotateLocation1 (NIf+     <$> (reserved "if" *> nixExprLoc)+     <*> (reserved "then" *> nixToplevelForm)+     <*> (reserved "else" *> nixToplevelForm)+     <?> "if")++nixAssert :: Parser NExprLoc+nixAssert = annotateLocation1 (NAssert+  <$> (reserved "assert" *> nixExprLoc)+  <*> (semi *> nixToplevelForm)+  <?> "assert")++nixWith :: Parser NExprLoc+nixWith = annotateLocation1 (NWith+  <$> (reserved "with" *> nixToplevelForm)+  <*> (semi *> nixToplevelForm)+  <?> "with")++nixLambda :: Parser NExprLoc+nixLambda = nAbs <$> annotateLocation (try argExpr) <*> nixToplevelForm++nixStringExpr :: Parser NExprLoc+nixStringExpr = nStr <$> annotateLocation nixString++nixUri :: Parser NExprLoc+nixUri = annotateLocation1 $ lexeme $ try $ do+    start <- letterChar+    protocol <- many $ satisfy $ \x ->+        isAlpha x || isDigit x || x `elem` ("+-." :: String)+    _ <- string ":"+    address  <- some $ satisfy $ \x ->+        isAlpha x || isDigit x || x `elem` ("%/?:@&=+$,-_.!~*'" :: String)+    return $ NStr $+        DoubleQuoted [Plain $ pack $ start : protocol ++ ':' : address]++nixString :: Parser (NString NExprLoc)+nixString = lexeme (doubleQuoted <+> indented <?> "string")+  where+    doubleQuoted :: Parser (NString NExprLoc)+    doubleQuoted = DoubleQuoted . removePlainEmpty . mergePlain+                <$> (doubleQ *> many (stringChar doubleQ (void $ char '\\')+                                                 doubleEscape)+                             <* doubleQ)+                <?> "double quoted string"++    doubleQ = void (char '"')+    doubleEscape = Plain . singleton <$> (char '\\' *> escapeCode)++    indented :: Parser (NString NExprLoc)+    indented = stripIndent+            <$> (indentedQ *> many (stringChar indentedQ indentedQ+                                               indentedEscape)+                           <* indentedQ)+            <?> "indented string"++    indentedQ = void (string "''" <?> "\"''\"")+    indentedEscape = try $ do+        indentedQ+        (Plain <$> ("''" <$ char '\'' <+> "$"  <$ char '$')) <+> do+            _ <- char '\\'+            c <- escapeCode+            pure $ if c == '\n'+                   then EscapedNewline+                   else Plain $ singleton c++    stringChar end escStart esc =+            Antiquoted <$> (antiStart *> nixToplevelForm <* char '}')+        <+> Plain . singleton <$> char '$'+        <+> esc+        <+> Plain . pack <$> some plainChar+     where+       plainChar =+           notFollowedBy (end <+> void (char '$') <+> escStart) *> anyChar++    escapeCode = msum [ c <$ char e | (c,e) <- escapeCodes ] <+> anyChar++-- | Gets all of the arguments for a function.+argExpr :: Parser (Params NExprLoc)+argExpr = msum [atLeft, onlyname, atRight] <* symbol ":" where+  -- An argument not in curly braces. There's some potential ambiguity+  -- in the case of, for example `x:y`. Is it a lambda function `x: y`, or+  -- a URI `x:y`? Nix syntax says it's the latter. So we need to fail if+  -- there's a valid URI parse here.+  onlyname = msum [nixUri >> unexpected (Label ('v' NE.:| "alid uri")),+                     Param <$> identifier]++  -- Parameters named by an identifier on the left (`args @ {x, y}`)+  atLeft = try $ do+    name <- identifier <* symbol "@"+    (variadic, params) <- params+    return $ ParamSet params variadic (Just name)++  -- Parameters named by an identifier on the right, or none (`{x, y} @ args`)+  atRight = do+    (variadic, params) <- params+    name <- optional $ symbol "@" *> identifier+    return $ ParamSet params variadic name++  -- Return the parameters set.+  params = do+    (args, dotdots) <- braces getParams+    return (dotdots, args)++  -- Collects the parameters within curly braces. Returns the parameters and+  -- a boolean indicating if the parameters are variadic.+  getParams :: Parser ([(Text, Maybe NExprLoc)], Bool)+  getParams = go [] where+    -- Attempt to parse `...`. If this succeeds, stop and return True.+    -- Otherwise, attempt to parse an argument, optionally with a+    -- default. If this fails, then return what has been accumulated+    -- so far.+    go acc = ((acc, True) <$ symbol "...") <+> getMore acc+    getMore acc =+      -- Could be nothing, in which just return what we have so far.+      option (acc, False) $ do+        -- Get an argument name and an optional default.+        pair <- liftM2 (,) identifier (optional $ question *> nixToplevelForm)+        -- Either return this, or attempt to get a comma and restart.+        option (acc ++ [pair], False) $ comma >> go (acc ++ [pair])++nixBinders :: Parser [Binding NExprLoc]+nixBinders = (inherit <+> namedVar) `endBy` semi where+  inherit = do+      x <- reserved "inherit" *> optional scope+      p <- getPosition+      Inherit x <$> many keyName <*> pure p <?> "inherited binding"+  namedVar = do+      p <- getPosition+      NamedVar <$> (annotated <$> nixSelector)+               <*> (equals *> nixToplevelForm)+               <*> pure p+               <?> "variable binding"+  scope = parens nixToplevelForm <?> "inherit scope"++keyName :: Parser (NKeyName NExprLoc)+keyName = dynamicKey <+> staticKey where+  staticKey = StaticKey <$> identifier+  dynamicKey = DynamicKey <$> nixAntiquoted nixString++nixSet :: Parser NExprLoc+nixSet = annotateLocation1 ((isRec <*> braces nixBinders) <?> "set") where+  isRec = (reserved "rec" $> NRecSet <?> "recursive set")+       <+> pure NSet++parseNixFile :: MonadIO m => FilePath -> m (Result NExpr)+parseNixFile =+    parseFromFileEx $ stripAnnotation <$> (whiteSpace *> nixToplevelForm <* eof)++parseNixFileLoc :: MonadIO m => FilePath -> m (Result NExprLoc)+parseNixFileLoc = parseFromFileEx (whiteSpace *> nixToplevelForm <* eof)++parseNixText :: Text -> Result NExpr+parseNixText =+    parseFromText $ stripAnnotation <$> (whiteSpace *> nixToplevelForm <* eof)++parseNixTextLoc :: Text -> Result NExprLoc+parseNixTextLoc = parseFromText (whiteSpace *> nixToplevelForm <* eof)++{- Parser.Library -}++skipLineComment' :: Tokens Text -> Parser ()+skipLineComment' prefix =+  string prefix+      *> void (takeWhileP (Just "character") (\x -> x /= '\n' && x /= '\r'))++whiteSpace :: Parser ()+whiteSpace = L.space space1 lineCmnt blockCmnt+  where+    lineCmnt  = skipLineComment' "#"+    blockCmnt = L.skipBlockComment "/*" "*/"++lexeme :: Parser a -> Parser a+lexeme p = p <* whiteSpace++symbol :: Text -> Parser Text+symbol = lexeme . string++reservedEnd :: Char -> Bool+reservedEnd x = isSpace x ||+    x == '{' || x == '(' || x == '[' ||+    x == '}' || x == ')' || x == ']' ||+    x == ';' || x == ':' || x == '.' ||+    x == '"' || x == '\'' || x == ','++reserved :: Text -> Parser ()+reserved n = lexeme $ try $+    string n *> lookAhead (void (satisfy reservedEnd) <|> eof)++identifier = lexeme $ try $ do+    ident <- cons <$> satisfy (\x -> isAlpha x || x == '_')+                 <*> takeWhileP Nothing identLetter+    guard (not (ident `HashSet.member` reservedNames))+    return ident+  where+    identLetter x = isAlpha x || isDigit x || x == '_' || x == '\'' || x == '-'++parens    = between (symbol "(") (symbol ")")+braces    = between (symbol "{") (symbol "}")+-- angles    = between (symbol "<") (symbol ">")+brackets  = between (symbol "[") (symbol "]")+semi      = symbol ";"+comma     = symbol ","+-- colon     = symbol ":"+-- dot       = symbol "."+equals    = symbol "="+question  = symbol "?"++integer :: Parser Integer+integer = lexeme L.decimal++float :: Parser Double+float = lexeme L.float++reservedNames :: HashSet Text+reservedNames = HashSet.fromList+    [ "let", "in"+    , "if", "then", "else"+    , "assert"+    , "with"+    , "rec"+    , "inherit"+    , "true", "false" ]++type Parser = ParsecT Void Text Identity++data Result a = Success a | Failure Doc deriving Show++parseFromFileEx :: MonadIO m => Parser a -> FilePath -> m (Result a)+parseFromFileEx p path = do+    txt <- liftIO (T.readFile path)+    return $ either (Failure . text . parseErrorPretty' txt) Success+           $ parse p path txt++parseFromText :: Parser a -> Text -> Result a+parseFromText p txt =+    either (Failure . text . parseErrorPretty' txt) Success $+        parse p "<string>" txt++{- Parser.Operators -}++data NSpecialOp = NHasAttrOp | NSelectOp+  deriving (Eq, Ord, Generic, Typeable, Data, Show, NFData)++data NAssoc = NAssocNone | NAssocLeft | NAssocRight+  deriving (Eq, Ord, Generic, Typeable, Data, Show, NFData)++data NOperatorDef+  = NUnaryDef Text NUnaryOp+  | NBinaryDef Text NBinaryOp NAssoc+  | NSpecialDef Text NSpecialOp NAssoc+  deriving (Eq, Ord, Generic, Typeable, Data, Show, NFData)++annotateLocation :: Parser a -> Parser (Ann SrcSpan a)+annotateLocation p = do+  begin <- getPosition+  res   <- p+  end   <- getPosition+  pure $ Ann (SrcSpan begin end) res++annotateLocation1 :: Parser (NExprF NExprLoc) -> Parser NExprLoc+annotateLocation1 = fmap annToAnnF . annotateLocation++manyUnaryOp f = foldr1 (.) <$> some f++operator "-" = lexeme . try $ string "-" <* notFollowedBy (char '>')+operator "/" = lexeme . try $ string "/" <* notFollowedBy (char '/')+operator "<" = lexeme . try $ string "<" <* notFollowedBy (char '=')+operator ">" = lexeme . try $ string ">" <* notFollowedBy (char '=')+operator n   = symbol n++opWithLoc :: Text -> o -> (Ann SrcSpan o -> a) -> Parser a+opWithLoc name op f = do+    Ann ann _ <- annotateLocation $ {- dbg (unpack name) $ -} operator name+    return $ f (Ann ann op)++binaryN name op = (NBinaryDef name op NAssocNone,+                   InfixN  (opWithLoc name op nBinary))+binaryL name op = (NBinaryDef name op NAssocLeft,+                   InfixL  (opWithLoc name op nBinary))+binaryR name op = (NBinaryDef name op NAssocRight,+                   InfixR  (opWithLoc name op nBinary))+prefix  name op = (NUnaryDef name op,+                   Prefix  (manyUnaryOp (opWithLoc name op nUnary)))+-- postfix name op = (NUnaryDef name op,+--                    Postfix (opWithLoc name op nUnary))++nixOperators+    :: Parser (Ann SrcSpan (NAttrPath NExprLoc))+    -> [[(NOperatorDef, Operator Parser NExprLoc)]]+nixOperators selector =+  [ -- This is not parsed here, even though technically it's part of the+    -- expression table. The problem is that in some cases, such as list+    -- membership, it's also a term. And since terms are effectively the+    -- highest precedence entities parsed by the expression parser, it ends up+    -- working out that we parse them as a kind of "meta-term".++    -- {-  1 -} [ (NSpecialDef "." NSelectOp NAssocLeft,+    --             Postfix $ do+    --                    sel <- seldot *> selector+    --                    mor <- optional (reserved "or" *> term)+    --                    return $ \x -> nSelectLoc x sel mor) ]++    {-  2 -} [ (NBinaryDef " " NApp NAssocLeft,+                -- Thanks to Brent Yorgey for showing me this trick!+                InfixL $ nApp <$ symbol "") ]+  , {-  3 -} [ prefix  "-"  NNeg ]+  , {-  4 -} [ (NSpecialDef "?" NHasAttrOp NAssocLeft,+                Postfix $ symbol "?" *> (flip nHasAttr <$> selector)) ]+  , {-  5 -} [ binaryR "++" NConcat ]+  , {-  6 -} [ binaryL "*"  NMult+             , binaryL "/"  NDiv ]+  , {-  7 -} [ binaryL "+"  NPlus+             , binaryL "-"  NMinus ]+  , {-  8 -} [ prefix  "!"  NNot ]+  , {-  9 -} [ binaryR "//" NUpdate ]+  , {- 10 -} [ binaryL "<"  NLt+             , binaryL ">"  NGt+             , binaryL "<=" NLte+             , binaryL ">=" NGte ]+  , {- 11 -} [ binaryN "==" NEq+             , binaryN "!=" NNEq ]+  , {- 12 -} [ binaryL "&&" NAnd ]+  , {- 13 -} [ binaryL "||" NOr ]+  , {- 14 -} [ binaryN "->" NImpl ]+  ]++data OperatorInfo = OperatorInfo+  { precedence    :: Int+  , associativity :: NAssoc+  , operatorName  :: Text+  } deriving (Eq, Ord, Generic, Typeable, Data, Show)++getUnaryOperator :: NUnaryOp -> OperatorInfo+getUnaryOperator = (m Map.!) where+  m = Map.fromList $ concat $ zipWith buildEntry [1..]+          (nixOperators (error "unused"))+  buildEntry i = concatMap $ \case+    (NUnaryDef name op, _) -> [(op, OperatorInfo i NAssocNone name)]+    _ -> []++getBinaryOperator :: NBinaryOp -> OperatorInfo+getBinaryOperator = (m Map.!) where+  m = Map.fromList $ concat $ zipWith buildEntry [1..]+          (nixOperators (error "unused"))+  buildEntry i = concatMap $ \case+    (NBinaryDef name op assoc, _) -> [(op, OperatorInfo i assoc name)]+    _ -> []++getSpecialOperator :: NSpecialOp -> OperatorInfo+getSpecialOperator NSelectOp = OperatorInfo 1 NAssocLeft "."+getSpecialOperator o = m Map.! o where+  m = Map.fromList $ concat $ zipWith buildEntry [1..]+          (nixOperators (error "unused"))+  buildEntry i = concatMap $ \case+    (NSpecialDef name op assoc, _) -> [(op, OperatorInfo i assoc name)]+    _ -> []
+ src/Nix/Pretty.hs view
@@ -0,0 +1,305 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE ViewPatterns #-}++{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Nix.Pretty where++import           Control.Monad+import           Data.Fix+import           Data.HashMap.Lazy (toList)+import qualified Data.HashMap.Lazy as M+import qualified Data.HashSet as HashSet+import           Data.List (isPrefixOf, sort)+import           Data.List.NonEmpty (NonEmpty(..))+import qualified Data.List.NonEmpty as NE+import           Data.Maybe (isJust, fromMaybe)+import           Data.Text (pack, unpack, replace, strip)+import qualified Data.Text as Text+import           Nix.Atoms+import           Nix.Expr+import           Nix.Parser+import           Nix.Strings+import           Nix.Thunk+#if ENABLE_TRACING+import           Nix.Utils+#else+import           Nix.Utils hiding ((<$>))+#endif+import           Nix.Value+import           Prelude hiding ((<$>))+import           Text.PrettyPrint.ANSI.Leijen++-- | This type represents a pretty printed nix expression+-- together with some information about the expression.+data NixDoc = NixDoc+  { -- | The rendered expression, without any parentheses.+    withoutParens    :: Doc++    -- | The root operator is the operator at the root of+    -- the expression tree. For example, in '(a * b) + c', '+' would be the root+    -- operator. It is needed to determine if we need to wrap the expression in+    -- parentheses.+  , rootOp :: OperatorInfo+  , wasPath :: Bool -- This is needed so that when a path is used in a selector path+                    -- we can add brackets appropiately+  }++mkNixDoc :: Doc -> OperatorInfo -> NixDoc+mkNixDoc d o = NixDoc { withoutParens = d, rootOp = o, wasPath = False }++-- | A simple expression is never wrapped in parentheses. The expression+--   behaves as if its root operator had a precedence higher than all+--   other operators (including function application).+simpleExpr :: Doc -> NixDoc+simpleExpr d = mkNixDoc d (OperatorInfo minBound NAssocNone "simple expr")++pathExpr :: Doc -> NixDoc+pathExpr d = (simpleExpr d) { wasPath = True }++-- | An expression that behaves as if its root operator had a precedence lower+--   than all other operators. That ensures that the expression is wrapped in+--   parantheses in almost always, but it's still rendered without parentheses+--   in cases where parentheses are never required (such as in the LHS of a+--   binding).+leastPrecedence :: Doc -> NixDoc+leastPrecedence =+    flip mkNixDoc $ OperatorInfo maxBound NAssocNone "least precedence"++appOp :: OperatorInfo+appOp = getBinaryOperator NApp++appOpNonAssoc :: OperatorInfo+appOpNonAssoc = (getBinaryOperator NApp) { associativity = NAssocNone }++selectOp :: OperatorInfo+selectOp = getSpecialOperator NSelectOp++hasAttrOp :: OperatorInfo+hasAttrOp = getSpecialOperator NHasAttrOp++wrapParens :: OperatorInfo -> NixDoc -> Doc+wrapParens op sub+  | precedence (rootOp sub) < precedence op = withoutParens sub+  | precedence (rootOp sub) == precedence op+    && associativity (rootOp sub) == associativity op+    && associativity op /= NAssocNone = withoutParens sub+  | otherwise = parens $ withoutParens sub++-- Used in the selector case to print a path in a selector as+-- "${./abc}"+wrapPath :: OperatorInfo -> NixDoc -> Doc+wrapPath op sub =+  if wasPath sub then dquotes (text "$" <> braces (withoutParens sub))+                else wrapParens op sub++prettyString :: NString NixDoc -> Doc+prettyString (DoubleQuoted parts) = dquotes . hcat . map prettyPart $ parts+  where prettyPart (Plain t)      = text . concatMap escape . unpack $ t+        prettyPart EscapedNewline = text "''\\n"+        prettyPart (Antiquoted r) = text "$" <> braces (withoutParens r)+        escape '"' = "\\\""+        escape x = maybe [x] (('\\':) . (:[])) $ toEscapeCode x+prettyString (Indented _ parts)+  = group $ nest 2 (squote <> squote <$$> content) <$$> squote <> squote+ where+  content = vsep . map prettyLine . stripLastIfEmpty . splitLines $ parts+  stripLastIfEmpty = reverse . f . reverse where+    f ([Plain t] : xs) | Text.null (strip t) = xs+    f xs = xs+  prettyLine = hcat . map prettyPart+  prettyPart (Plain t) = text . unpack . replace "${" "''${" . replace "''" "'''" $ t+  prettyPart EscapedNewline = text "\\n"+  prettyPart (Antiquoted r) = text "$" <> braces (withoutParens r)++prettyParams :: Params NixDoc -> Doc+prettyParams (Param n) = text $ unpack n+prettyParams (ParamSet s v mname) = prettyParamSet s v <> case mname of+  Nothing -> empty+  Just name | Text.null name -> empty+            | otherwise -> text "@" <> text (unpack name)++prettyParamSet :: ParamSet NixDoc -> Bool -> Doc+prettyParamSet args var =+    encloseSep (lbrace <> space) (align (space <> rbrace)) sep (map prettySetArg args ++ prettyVariadic)+  where+    prettySetArg (n, maybeDef) = case maybeDef of+      Nothing -> text (unpack n)+      Just v -> text (unpack n) <+> text "?" <+> withoutParens v+    prettyVariadic = [text "..." | var]+    sep = align (comma <> space)++prettyBind :: Binding NixDoc -> Doc+prettyBind (NamedVar n v _p) =+    prettySelector n <+> equals <+> withoutParens v <> semi+prettyBind (Inherit s ns _p)+  = text "inherit" <+> scope <> align (fillSep (map prettyKeyName ns)) <> semi+ where scope = maybe empty ((<> space) . parens . withoutParens) s++prettyKeyName :: NKeyName NixDoc -> Doc+prettyKeyName (StaticKey "") = dquotes $ text ""+prettyKeyName (StaticKey key)+  | HashSet.member key reservedNames = dquotes $ text $ unpack key+prettyKeyName (StaticKey key) = text . unpack $ key+prettyKeyName (DynamicKey key) =+    runAntiquoted (DoubleQuoted [Plain "\n"])+        prettyString ((text "$" <>) . braces . withoutParens) key++prettySelector :: NAttrPath NixDoc -> Doc+prettySelector = hcat . punctuate dot . map prettyKeyName . NE.toList++prettyAtom :: NAtom -> NixDoc+prettyAtom atom = simpleExpr $ text $ unpack $ atomText atom++prettyNix :: NExpr -> Doc+prettyNix = withoutParens . cata exprFNixDoc++prettyOriginExpr :: NExprLocF (Maybe (NValue m)) -> Doc+prettyOriginExpr = withoutParens . go+  where+    go = exprFNixDoc . annotated . getCompose . fmap render++    render Nothing = simpleExpr $ text "_"+    render (Just (NValue (reverse -> p:_) _)) = go (_originExpr p)+    render (Just (NValue _ _)) = simpleExpr $ text "?"+        -- simpleExpr $ foldr ((<$>) . parens . indent 2 . withoutParens+        --                           . go . originExpr)+        --     mempty (reverse ps)++exprFNixDoc :: NExprF NixDoc -> NixDoc+exprFNixDoc = \case+    NConstant atom -> prettyAtom atom+    NStr str -> simpleExpr $ prettyString str+    NList [] -> simpleExpr $ lbracket <> rbracket+    NList xs -> simpleExpr $ group $+        nest 2 (vsep $ lbracket : map (wrapParens appOpNonAssoc) xs) <$> rbracket+    NSet [] -> simpleExpr $ lbrace <> rbrace+    NSet xs -> simpleExpr $ group $+        nest 2 (vsep $ lbrace : map prettyBind xs) <$> rbrace+    NRecSet [] -> simpleExpr $ recPrefix <> lbrace <> rbrace+    NRecSet xs -> simpleExpr $ group $+        nest 2 (vsep $ recPrefix <> lbrace : map prettyBind xs) <$> rbrace+    NAbs args body -> leastPrecedence $+        nest 2 ((prettyParams args <> colon) <$> withoutParens body)+    NBinary NApp fun arg ->+        mkNixDoc (wrapParens appOp fun <+> wrapParens appOpNonAssoc arg) appOp+    NBinary op r1 r2 -> flip mkNixDoc opInfo $ hsep+        [ wrapParens (f NAssocLeft) r1+        , text $ unpack $ operatorName opInfo+        , wrapParens (f NAssocRight) r2+        ]+      where+        opInfo = getBinaryOperator op+        f x | associativity opInfo /= x = opInfo { associativity = NAssocNone }+            | otherwise = opInfo+    NUnary op r1 ->+        mkNixDoc (text (unpack (operatorName opInfo)) <> wrapParens opInfo r1) opInfo+      where opInfo = getUnaryOperator op+    NSelect r attr o ->+      (if isJust o then leastPrecedence else flip mkNixDoc selectOp) $+          wrapPath selectOp r <> dot <> prettySelector attr <> ordoc+      where ordoc = maybe empty (((space <> text "or") <+>) . wrapParens selectOp) o+    NHasAttr r attr ->+        mkNixDoc (wrapParens hasAttrOp r <+> text "?" <+> prettySelector attr) hasAttrOp+    NEnvPath p -> simpleExpr $ text ("<" ++ p ++ ">")+    NLiteralPath p -> pathExpr $ text $ case p of+        "./" -> "./."+        "../" -> "../."+        ".." -> "../."+        txt | "/" `isPrefixOf` txt -> txt+            | "~/" `isPrefixOf` txt -> txt+            | "./" `isPrefixOf` txt -> txt+            | "../" `isPrefixOf` txt -> txt+            | otherwise -> "./" ++ txt+    NSym name -> simpleExpr $ text (unpack name)+    NLet binds body -> leastPrecedence $ group $ text "let" <$> indent 2 (+        vsep (map prettyBind binds)) <$> text "in" <+> withoutParens body+    NIf cond trueBody falseBody -> leastPrecedence $+        group $ nest 2 $ (text "if" <+> withoutParens cond) <$>+          (  align (text "then" <+> withoutParens trueBody)+         <$> align (text "else" <+> withoutParens falseBody)+          )+    NWith scope body -> leastPrecedence $+        text "with"  <+> withoutParens scope <> semi <$> align (withoutParens body)+    NAssert cond body -> leastPrecedence $+        text "assert" <+> withoutParens cond <> semi <$> align (withoutParens body)+  where+    recPrefix = text "rec" <> space++prettyNValueNF :: Functor m => NValueNF m -> Doc+prettyNValueNF = prettyNix . valueToExpr+  where valueToExpr :: Functor m => NValueNF m -> NExpr+        valueToExpr = transport go++        go (NVConstantF a) = NConstant a+        go (NVStrF t _) = NStr (DoubleQuoted [Plain t])+        go (NVListF l) = NList l+        go (NVSetF s p) = NSet+            [ NamedVar (StaticKey k :| []) v (fromMaybe nullPos (M.lookup k p))+            | (k, v) <- toList s ]+        go (NVClosureF _ _) = NSym . pack $ "<closure>"+        go (NVPathF p) = NLiteralPath p+        go (NVBuiltinF name _) = NSym $ Text.pack $ "builtins." ++ name++printNix :: Functor m => NValueNF m -> String+printNix = cata phi+  where phi :: NValueF m String -> String+        phi (NVConstantF a) = unpack $ atomText a+        phi (NVStrF t _) = show t+        phi (NVListF l) = "[ " ++ unwords l ++ " ]"+        phi (NVSetF s _) =+            "{ " ++ concat [ unpack k ++ " = " ++ v ++ "; "+                           | (k, v) <- sort $ toList s ] ++ "}"+        phi NVClosureF {} = "<<lambda>>"+        phi (NVPathF fp) = fp+        phi (NVBuiltinF name _) = "<<builtin " ++ name ++ ">>"++removeEffects :: Functor m => NValueF m (NThunk m) -> NValueNF m+removeEffects = Fix . fmap dethunk+  where+    dethunk (NThunk _ (Value v)) = removeEffects (_baseValue v)+    dethunk (NThunk _ _) = Fix $ NVStrF "<thunk>" mempty++removeEffectsM :: MonadVar m => NValueF m (NThunk m) -> m (NValueNF m)+removeEffectsM = fmap Fix . traverse dethunk++prettyNValueF :: MonadVar m => NValueF m (NThunk m) -> m Doc+prettyNValueF = fmap prettyNValueNF . removeEffectsM++prettyNValue :: MonadVar m => NValue m -> m Doc+prettyNValue (NValue _ v) = prettyNValueF v++prettyNValueProv :: MonadVar m => NValue m -> m Doc+prettyNValueProv = \case+    NValue [] v -> prettyNValueF v+    NValue ps v -> do+        v' <- prettyNValueF v+        pure $ v' </> indent 2 (parens (mconcat+            (text "from: " : map (prettyOriginExpr . _originExpr) ps)))++prettyNThunk :: MonadVar m => NThunk m -> m Doc+prettyNThunk = \case+    t@(NThunk ps _) -> do+        v' <- fmap prettyNValueNF (dethunk t)+        pure $ v' </> indent 2 (parens (mconcat+            (text "thunk from: " : map (prettyOriginExpr . _originExpr) ps)))++dethunk :: MonadVar m => NThunk m -> m (NValueNF m)+dethunk = \case+    NThunk _ (Value v) -> removeEffectsM (_baseValue v)+    NThunk _ (Thunk _ active ref) -> do+        nowActive <- atomicModifyVar active (True,)+        if nowActive+            then pure $ Fix $ NVStrF "<thunk>" mempty+            else do+                eres <- readVar ref+                case eres of+                    Computed v -> removeEffectsM (_baseValue v)+                    _ -> pure $ Fix $ NVStrF "<thunk>" mempty
+ src/Nix/Reduce.hs view
@@ -0,0 +1,363 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PartialTypeSignatures #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}++{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -Wno-orphans #-}++-- | This module provides a "reducing" expression evaluator, which reduces+--   away pure, non self-referential aspects of an expression tree, yielding a+--   new expression tree. It does not yet attempt to reduce everything+--   possible, and will always yield a tree with the same meaning as the+--   original. It should be seen as an opportunistic simplifier, but which+--   gives up easily if faced with any potential for ambiguity in the result.++module Nix.Reduce (reduceExpr, reducingEvalExpr) where++import           Control.Applicative+import           Control.Arrow (second)+import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.Fix+import           Control.Monad.IO.Class+import           Control.Monad.Reader+import           Control.Monad.State.Strict+import           Control.Monad.Trans.Reader (ReaderT(..))+import           Control.Monad.Trans.State.Strict (StateT(..))+import           Data.Fix+-- import           Data.Foldable+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+-- import           Data.HashSet (HashSet)+-- import qualified Data.HashSet as S+import           Data.IORef+import           Data.List.NonEmpty (NonEmpty(..))+import qualified Data.List.NonEmpty as NE+import           Data.Maybe (fromMaybe, mapMaybe, catMaybes)+import           Data.Text (Text)+import           Nix.Atoms+import           Nix.Exec+import           Nix.Expr+import           Nix.Frames+import           Nix.Options (Options, reduceSets, reduceLists)+import           Nix.Parser+import           Nix.Scope+import           Nix.Utils+import           System.Directory+import           System.FilePath++newtype Reducer m a = Reducer+    { runReducer :: ReaderT (Maybe FilePath, Scopes (Reducer m) NExprLoc)+                           (StateT (HashMap FilePath NExprLoc) m) a }+    deriving (Functor, Applicative, Alternative, Monad, MonadPlus,+              MonadFix, MonadIO,+              MonadReader (Maybe FilePath, Scopes (Reducer m) NExprLoc),+              MonadState (HashMap FilePath NExprLoc))++staticImport+    :: forall e m.+      (MonadIO m, Scoped e NExprLoc m,+       MonadReader (Maybe FilePath, Scopes m NExprLoc) m,+       MonadState (HashMap FilePath NExprLoc) m)+    => SrcSpan -> FilePath -> m NExprLoc+staticImport pann path = do+    imports <- get+    case M.lookup path imports of+        Just expr -> pure expr+        Nothing -> go+  where+    go = do+        mfile <- asks fst+        path  <- liftIO $ pathToDefaultNixFile path+        path' <- liftIO $ pathToDefaultNixFile =<< canonicalizePath+            (maybe path (\p -> takeDirectory p </> path) mfile)++        liftIO $ putStrLn $ "Importing file " ++ path'++        eres <- liftIO $ parseNixFileLoc path'+        case eres of+            Failure err  -> error $ "Parse failed: " ++ show err+            Success x -> do+                let pos  = SourcePos "Reduce.hs" (mkPos 1) (mkPos 1)+                    span = SrcSpan pos pos+                    cur  = NamedVar (StaticKey "__cur_file" :| [])+                        (Fix (NLiteralPath_ pann path')) pos+                    x'   = Fix (NLet_ span [cur] x)+                modify (M.insert path x')+                local (const (Just path',+                              emptyScopes @m @NExprLoc)) $ do+                    x'' <- cata reduce x'+                    modify (M.insert path x'')+                    return x''++-- gatherNames :: NExprLoc -> HashSet VarName+-- gatherNames = cata $ \case+--     NSym_ _ var -> S.singleton var+--     Compose (Ann _ x) -> fold x++reduceExpr :: MonadIO m => Maybe FilePath -> NExprLoc -> m NExprLoc+reduceExpr mpath expr+    = (`evalStateT` M.empty)+    . (`runReaderT` (mpath, emptyScopes))+    . runReducer+    $ cata reduce expr++reduce :: forall e m.+           (MonadIO m, Scoped e NExprLoc m,+            MonadReader (Maybe FilePath, Scopes m NExprLoc) m,+            MonadState (HashMap FilePath NExprLoc) m)+       => NExprLocF (m NExprLoc) -> m NExprLoc++reduce (NSym_ ann var) = lookupVar var <&> \case+    Nothing -> Fix (NSym_ ann var)+    Just v  -> v++reduce (NUnary_ uann op arg) = arg >>= \x -> case (op, x) of+    (NNeg, Fix (NConstant_ cann (NInt n))) ->+        return $ Fix $ NConstant_ cann (NInt (negate n))+    (NNot, Fix (NConstant_ cann (NBool b))) ->+        return $ Fix $ NConstant_ cann (NBool (not b))+    _ -> return $ Fix $ NUnary_ uann op x++reduce (NBinary_ bann NApp fun arg) = fun >>= \case+    f@(Fix (NSym_ _ "import")) -> arg >>= \case+        -- Fix (NEnvPath_     pann origPath) -> staticImport pann origPath+        Fix (NLiteralPath_ pann origPath) -> staticImport pann origPath+        v -> return $ Fix $ NBinary_ bann NApp f v++    Fix (NAbs_ _ (Param name) body) -> do+        x <- arg+        pushScope (M.singleton name x) (cata reduce body)++    f -> Fix . NBinary_ bann NApp f <$> arg++reduce (NBinary_ bann op larg rarg) = do+    lval <- larg+    rval <- rarg+    case (op, lval, rval) of+        (NPlus, Fix (NConstant_ ann (NInt x)), Fix (NConstant_ _ (NInt y))) ->+            return $ Fix (NConstant_ ann (NInt (x + y)))+        _ -> pure $ Fix $ NBinary_ bann op lval rval++-- reduce (NSelect aset attr alt) = do++-- reduce (NHasAttr aset attr) =++reduce e@(NSet_ ann binds) = do+    let usesInherit = flip any binds $ \case+            Inherit {} -> True+            _ -> False+    if usesInherit+        then clearScopes @NExprLoc $+            Fix . NSet_ ann <$> traverse sequence binds+        else Fix <$> sequence e++-- Encountering a 'rec set' construction eliminates any hope of inlining+-- definitions.+reduce (NRecSet_ ann binds) =+    clearScopes @NExprLoc $ Fix . NRecSet_ ann <$> traverse sequence binds++-- Encountering a 'with' construction eliminates any hope of inlining+-- definitions.+reduce (NWith_ ann scope body) =+    clearScopes @NExprLoc $ fmap Fix $ NWith_ ann <$> scope <*> body++reduce (NLet_ ann binds body) = do+    s <- fmap (M.fromList . catMaybes) $ forM binds $ \case+        NamedVar (StaticKey name :| []) def _pos -> def >>= \case+            d@(Fix NAbs_ {})      -> pure $ Just (name, d)+            d@(Fix NConstant_ {}) -> pure $ Just (name, d)+            d@(Fix NStr_ {})      -> pure $ Just (name, d)+            _ -> pure Nothing+        _ -> pure Nothing+    body' <- pushScope s body+    binds' <- traverse sequence binds+    -- let names = gatherNames body'+    -- binds' <- traverse sequence binds <&> \b -> flip filter b $ \case+    --     NamedVar (StaticKey name _ :| []) _ ->+    --         name `S.member` names+    --     _ -> True+    pure $ Fix $ NLet_ ann binds' body'+  -- where+  --   go m [] = pure m+  --   go m (x:xs) = case x of+  --       NamedVar (StaticKey name _ :| []) def -> do+  --           v <- pushScope m def+  --           go (M.insert name v m) xs+  --       _ -> go m xs++reduce e@(NIf_ _ b t f) = b >>= \case+    Fix (NConstant_ _ (NBool b')) -> if b' then t else f+    _ -> Fix <$> sequence e++reduce e@(NAssert_ _ b body) = b >>= \case+    Fix (NConstant_ _ (NBool b')) | b' -> body+    _ -> Fix <$> sequence e++reduce (NAbs_ ann params body) = do+    params' <- sequence params+    -- Make sure that variable definitions in scope do not override function+    -- arguments.+    let args = case params' of+            Param name -> M.singleton name (Fix (NSym_ ann name))+            ParamSet pset _ _ ->+                M.fromList $ map (\(k, _) -> (k, Fix (NSym_ ann k))) pset+    Fix . NAbs_ ann params' <$> pushScope args body++reduce v = Fix <$> sequence v++-- newtype FlaggedF f r = FlaggedF { flagged :: (IORef Bool, f r) }+newtype FlaggedF f r = FlaggedF (IORef Bool, f r)+    deriving (Functor, Foldable, Traversable)++instance Show (f r) => Show (FlaggedF f r) where+    show (FlaggedF (_, x)) = show x++type Flagged f = Fix (FlaggedF f)++flagExprLoc :: (MonadIO n, Traversable f)+            => Fix f -> n (Flagged f)+flagExprLoc = cataM $ \x -> do+    flag <- liftIO $ newIORef False+    pure $ Fix $ FlaggedF (flag, x)++-- stripFlags :: Functor f => Flagged f -> Fix f+-- stripFlags = cata $ Fix . snd . flagged++pruneTree :: MonadIO n => Options -> Flagged NExprLocF -> n (Maybe NExprLoc)+pruneTree opts = cataM $ \(FlaggedF (b, Compose x)) -> do+    used <- liftIO $ readIORef b+    pure $ if used+           then Fix . Compose <$> traverse prune x+           else Nothing+  where+    prune :: NExprF (Maybe NExprLoc) -> Maybe (NExprF NExprLoc)+    prune = \case+        NStr str                  -> Just $ NStr (pruneString str)+        NHasAttr (Just aset) attr -> Just $ NHasAttr aset (NE.map pruneKeyName attr)+        NAbs params (Just body)   -> Just $ NAbs (pruneParams params) body++        NList l       | reduceLists opts -> Just $ NList   (catMaybes l)+                      | otherwise        -> Just $ NList   (map (fromMaybe nNull) l)+        NSet binds    | reduceSets opts  -> Just $ NSet    (mapMaybe sequence binds)+                      | otherwise        -> Just $ NSet    (map (fmap (fromMaybe nNull)) binds)+        NRecSet binds | reduceSets opts  -> Just $ NRecSet (mapMaybe sequence binds)+                      | otherwise        -> Just $ NRecSet (map (fmap (fromMaybe nNull)) binds)++        NLet binds (Just body@(Fix (Compose (Ann _ x)))) ->+            Just $ case mapMaybe pruneBinding binds of+                [] -> x+                xs -> NLet xs body++        NSelect (Just aset) attr alt ->+            Just $ NSelect aset (NE.map pruneKeyName attr) (join alt)++        -- These are the only short-circuiting binary operators+        NBinary NAnd (Just (Fix (Compose (Ann _ larg)))) _ -> Just larg+        NBinary NOr  (Just (Fix (Compose (Ann _ larg)))) _ -> Just larg++        -- If the function was never called, it means its argument was in a+        -- thunk that was forced elsewhere.+        NBinary NApp Nothing (Just _) -> Nothing++        -- The idea behind emitted a binary operator where one side may be+        -- invalid is that we're trying to emit what will reproduce whatever+        -- error the user encountered, which means providing all aspects of+        -- the evaluation path they ultimately followed.+        NBinary op Nothing (Just rarg) -> Just $ NBinary op nNull rarg+        NBinary op (Just larg) Nothing -> Just $ NBinary op larg nNull++        -- If the scope of a with was never referenced, it's not needed+        NWith Nothing (Just (Fix (Compose (Ann _ body)))) -> Just body++        NAssert Nothing _ ->+            error "How can an assert be used, but its condition not?"++        NAssert _ (Just (Fix (Compose (Ann _ body)))) -> Just body+        NAssert (Just cond) _ -> Just $ NAssert cond nNull++        NIf Nothing _ _ ->+            error "How can an if be used, but its condition not?"++        NIf _ Nothing (Just (Fix (Compose (Ann _ f)))) -> Just f+        NIf _ (Just (Fix (Compose (Ann _ t)))) Nothing -> Just t++        x -> sequence x++    pruneString :: NString (Maybe NExprLoc) -> NString NExprLoc+    pruneString (DoubleQuoted xs) =+        DoubleQuoted (mapMaybe pruneAntiquotedText xs)+    pruneString (Indented n xs)   =+        Indented n (mapMaybe pruneAntiquotedText xs)++    pruneAntiquotedText+        :: Antiquoted Text (Maybe NExprLoc)+        -> Maybe (Antiquoted Text NExprLoc)+    pruneAntiquotedText (Plain v)             = Just (Plain v)+    pruneAntiquotedText EscapedNewline        = Just EscapedNewline+    pruneAntiquotedText (Antiquoted Nothing)  = Nothing+    pruneAntiquotedText (Antiquoted (Just k)) = Just (Antiquoted k)++    pruneAntiquoted+        :: Antiquoted (NString (Maybe NExprLoc)) (Maybe NExprLoc)+        -> Maybe (Antiquoted (NString NExprLoc) NExprLoc)+    pruneAntiquoted (Plain v)             = Just (Plain (pruneString v))+    pruneAntiquoted EscapedNewline        = Just EscapedNewline+    pruneAntiquoted (Antiquoted Nothing)  = Nothing+    pruneAntiquoted (Antiquoted (Just k)) = Just (Antiquoted k)++    pruneKeyName :: NKeyName (Maybe NExprLoc) -> NKeyName NExprLoc+    pruneKeyName (StaticKey n) = StaticKey n+    pruneKeyName (DynamicKey k)+        | Just k' <- pruneAntiquoted k = DynamicKey k'+        | otherwise = StaticKey "<unused?>"++    pruneParams :: Params (Maybe NExprLoc) -> Params NExprLoc+    pruneParams (Param n) = Param n+    pruneParams (ParamSet xs b n)+        | reduceSets opts =+              ParamSet (map (second (maybe (Just nNull) Just+                                     . fmap (fromMaybe nNull))) xs) b n+        | otherwise =+              ParamSet (map (second (fmap (fromMaybe nNull))) xs) b n++    pruneBinding :: Binding (Maybe NExprLoc) -> Maybe (Binding NExprLoc)+    pruneBinding (NamedVar _ Nothing _)  = Nothing+    pruneBinding (NamedVar xs (Just x) pos) =+        Just (NamedVar (NE.map pruneKeyName xs) x pos)+    pruneBinding (Inherit _ [] _)  = Nothing+    pruneBinding (Inherit (join -> Nothing) _ _) = Nothing+    pruneBinding (Inherit (join -> m) xs pos) =+        Just (Inherit m (map pruneKeyName xs) pos)++reducingEvalExpr+    :: (Framed e m, Has e Options, Exception r, MonadCatch m, MonadIO m)+    => (NExprLocF (m a) -> m a)+    -> Maybe FilePath+    -> NExprLoc+    -> m (NExprLoc, Either r a)+reducingEvalExpr eval mpath expr = do+    expr'  <- flagExprLoc =<< liftIO (reduceExpr mpath expr)+    eres   <- catch (Right <$> cata (addEvalFlags eval) expr') (pure . Left)+    opts :: Options <- asks (view hasLens)+    expr'' <- pruneTree opts expr'+    return (fromMaybe nNull expr'', eres)+  where+    addEvalFlags k (FlaggedF (b, x)) = liftIO (writeIORef b True) *> k x
+ src/Nix/Render.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++module Nix.Render where++import           Data.ByteString (ByteString)+import           Data.List.NonEmpty (NonEmpty((:|)))+import qualified Data.Set as Set+import           Data.Void+import           Nix.Expr.Types.Annotated+import           Text.Megaparsec.Error+import           Text.Megaparsec.Pos (SourcePos(..))+import           Text.PrettyPrint.ANSI.Leijen++class Monad m => MonadFile m where+    readFile :: FilePath -> m ByteString++posAndMsg :: SourcePos -> Doc -> ParseError t Void+posAndMsg beg msg =+    FancyError (beg :| [])+        (Set.fromList [ErrorFail (show msg) :: ErrorFancy Void])++renderLocation :: MonadFile m => SrcSpan -> Doc -> m Doc+renderLocation (SrcSpan beg@(SourcePos "<string>" _ _) _) msg =+    return $ text $ init $ parseErrorPretty @Char (posAndMsg beg msg)++renderLocation (SrcSpan beg@(SourcePos path _ _) _) msg = do+    contents <- Nix.Render.readFile path+    return $ text $ init $ parseErrorPretty' contents (posAndMsg beg msg)
+ src/Nix/Render/Frame.hs view
@@ -0,0 +1,175 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++module Nix.Render.Frame where++import           Control.Monad.Reader+import           Data.Fix+import           Data.Typeable+import           Nix.Eval+import           Nix.Exec+import           Nix.Expr+import           Nix.Frames+import           Nix.Normal+import           Nix.Options+import           Nix.Pretty+import           Nix.Render+import           Nix.Thunk+import           Nix.Utils+import           Nix.Value+import           Text.Megaparsec.Pos+import qualified Text.PrettyPrint.ANSI.Leijen as P+import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))+#if MIN_VERSION_pretty_show(1, 6, 16)+import qualified Text.Show.Pretty as PS+#endif++renderFrames :: forall v e m.+               (MonadReader e m, Has e Options,+                MonadVar m, MonadFile m, Typeable m, Typeable v)+             => Frames -> m Doc+renderFrames [] = pure mempty+renderFrames (x:xs) = do+    opts :: Options <- asks (view hasLens)+    frames <-+        if | verbose opts <= ErrorsOnly ->+             renderFrame @v x+           | verbose opts <= Informational -> do+             f <- renderFrame @v x+             pure $ concatMap go (reverse xs) ++ f+           | otherwise ->+             concat <$> mapM (renderFrame @v) (reverse (x:xs))+    pure $ case frames of+        [] -> mempty+        _  -> foldr1 (P.<$>) frames+  where+    go :: NixFrame -> [Doc]+    go f = case framePos @v @m f of+        Just pos ->+            [text "While evaluating at "+                <> text (sourcePosPretty pos)+                <> colon]+        Nothing -> []++framePos :: forall v (m :: * -> *). (Typeable m, Typeable v) => NixFrame+         -> Maybe SourcePos+framePos (NixFrame _ f)+    | Just (e :: EvalFrame m v) <- fromException f = case e of+          EvaluatingExpr _ (Fix (Compose (Ann (SrcSpan beg _) _))) ->+              Just beg+          _ -> Nothing+    | otherwise = Nothing++renderFrame :: forall v e m.+              (MonadReader e m, Has e Options, MonadVar m,+               MonadFile m, Typeable m, Typeable v)+            => NixFrame -> m [Doc]+renderFrame (NixFrame level f)+    | Just (e :: EvalFrame m v) <- fromException f = renderEvalFrame level e+    | Just (e :: ThunkLoop)     <- fromException f = renderThunkLoop level e+    | Just (e :: ValueFrame m)  <- fromException f = renderValueFrame level e+    | Just (_ :: NormalLoop m)  <- fromException f =+      pure [text "<<loop during normalization>>"]+    | Just (e :: ExecFrame m)   <- fromException f = renderExecFrame level e+    | Just (e :: ErrorCall)     <- fromException f = pure [text (show e)]+    | otherwise = error $ "Unrecognized frame: " ++ show f++wrapExpr :: NExprF r -> NExpr+wrapExpr x = Fix (Fix (NSym "<?>") <$ x)++renderEvalFrame :: (MonadReader e m, Has e Options, MonadFile m)+                => NixLevel -> EvalFrame m v -> m [Doc]+renderEvalFrame level f = do+    opts :: Options <- asks (view hasLens)+    case f of+        EvaluatingExpr _scope e@(Fix (Compose (Ann ann _))) ->+            fmap (:[]) $ renderLocation ann+                =<< renderExpr level "While evaluating" "Expression" e++        ForcingExpr _scope e@(Fix (Compose (Ann ann _)))+            | thunks opts ->+                  fmap (:[]) $ renderLocation ann+                      =<< renderExpr level "While forcing thunk from"+                                     "Forcing thunk" e++        Calling name ann ->+            fmap (:[]) $ renderLocation ann $+                text "While calling builtins." <> text name++        _ -> pure []++renderExpr :: (MonadReader e m, Has e Options, MonadFile m)+           => NixLevel -> String -> String -> NExprLoc -> m Doc+renderExpr _level longLabel shortLabel e@(Fix (Compose (Ann _ x))) = do+    opts :: Options <- asks (view hasLens)+    let rendered+            | verbose opts >= DebugInfo =+#if MIN_VERSION_pretty_show(1, 6, 16)+              text (PS.ppShow (stripAnnotation e))+#else+              text (show (stripAnnotation e))+#endif+            | verbose opts >= Chatty =+              prettyNix (stripAnnotation e)+            | otherwise =+              prettyNix (Fix (Fix (NSym "<?>") <$ x))+    pure $ if verbose opts >= Chatty+           then text (longLabel ++ ":\n>>>>>>>>")+                    P.<$> indent 2 rendered+                    P.<$> text "<<<<<<<<"+           else text shortLabel <> text ": " </> rendered++renderValueFrame :: (MonadReader e m, Has e Options, MonadFile m)+                 => NixLevel -> ValueFrame m -> m [Doc]+renderValueFrame level = pure . (:[]) . \case+    ForcingThunk       -> text "ForcingThunk"+    ConcerningValue _v -> text "ConcerningValue"+    Comparison _ _     -> text "Comparing"+    Addition _ _       -> text "Adding"+    Division _ _       -> text "Dividing"+    Multiplication _ _ -> text "Multiplying"++    Coercion x y ->+        text desc <> text (describeValue x)+            <> text " to " <> text (describeValue y)+      where+        desc | level <= Error = "Cannot coerce "+             | otherwise     = "While coercing "++    CoercionToJsonNF _v -> text "CoercionToJsonNF"+    CoercionFromJson _j -> text "CoercionFromJson"+    ExpectationNF _t _v -> text "ExpectationNF"+    Expectation _t _v   -> text "Expectation"++renderValue :: (MonadReader e m, Has e Options, MonadFile m, MonadVar m)+            => NixLevel -> String -> String -> NValue m -> m Doc+renderValue _level _longLabel _shortLabel v = do+    opts :: Options <- asks (view hasLens)+    if values opts+        then prettyNValueProv v+        else prettyNValue v++renderExecFrame :: (MonadReader e m, Has e Options, MonadVar m, MonadFile m)+                => NixLevel -> ExecFrame m -> m [Doc]+renderExecFrame level = \case+    Assertion ann v ->+        fmap (:[]) $ renderLocation ann+            =<< ((text "Assertion failed:" </>)+                     <$> renderValue level "" "" v)++renderThunkLoop :: (MonadReader e m, Has e Options, MonadFile m)+                => NixLevel -> ThunkLoop -> m [Doc]+renderThunkLoop _level = pure . (:[]) . \case+    ThunkLoop Nothing -> text "<<loop>>"+    ThunkLoop (Just n) ->+        text $ "<<loop forcing thunk #" ++ show n ++ ">>"
+ src/Nix/Scope.hs view
@@ -0,0 +1,83 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}++module Nix.Scope where++import           Control.Applicative+import           Control.Monad.Reader+import qualified Data.HashMap.Lazy as M+import           Data.Semigroup+import           Data.Text (Text)+import           Lens.Family2+import           Nix.Utils++newtype Scope a = Scope { getScope :: AttrSet a }+    deriving (Functor, Foldable, Traversable)++instance Show (Scope a) where+    show (Scope m) = show (M.keys m)++newScope :: AttrSet a -> Scope a+newScope = Scope++scopeLookup :: Text -> [Scope v] -> Maybe v+scopeLookup key = foldr go Nothing+  where+    go (Scope m) rest = M.lookup key m <|> rest++data Scopes m v = Scopes+    { lexicalScopes :: [Scope v]+    , dynamicScopes :: [m (Scope v)]+    }++instance Show (Scopes m v) where+    show (Scopes m v) =+        "Scopes: " ++ show m ++ ", and "+            ++ show (length v) ++ " with-scopes"++instance Semigroup (Scopes m v) where+    Scopes ls lw <> Scopes rs rw = Scopes (ls <> rs) (lw <> rw)++instance Monoid (Scopes m v) where+    mempty  = emptyScopes+    mappend = (<>)++type Scoped e v m = (MonadReader e m, Has e (Scopes m v))++emptyScopes :: Scopes m v+emptyScopes = Scopes [] []++currentScopes :: Scoped e v m => m (Scopes m v)+currentScopes = asks (view hasLens)++clearScopes :: forall v m e r. Scoped e v m => m r -> m r+clearScopes = local (set hasLens (emptyScopes @m @v))++pushScope :: forall v m e r. Scoped e v m => AttrSet v -> m r -> m r+pushScope s = pushScopes (Scopes [Scope s] [])++pushWeakScope :: forall v m e r. Scoped e v m => m (AttrSet v) -> m r -> m r+pushWeakScope s = pushScopes (Scopes [] [Scope <$> s])++pushScopes :: Scoped e v m => Scopes m v -> m r -> m r+pushScopes s = local (over hasLens (s <>))++lookupVar :: forall e v m. (Scoped e v m, Monad m) => Text -> m (Maybe v)+lookupVar k = do+    mres <- asks (scopeLookup k . lexicalScopes @m . view hasLens)+    case mres of+        Just sym -> return $ Just sym+        Nothing -> do+            ws <- asks (dynamicScopes . view hasLens)+            foldr (\x -> liftM2 (<|>) (M.lookup k . getScope <$> x))+                  (return Nothing) ws++withScopes :: forall v m e a. Scoped e v m => Scopes m v -> m a -> m a+withScopes scope = clearScopes @v . pushScopes scope
+ src/Nix/Strings.hs view
@@ -0,0 +1,112 @@+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Functions for manipulating nix strings.+module Nix.Strings where++import           Data.List (intercalate, dropWhileEnd, inits)+import           Data.Monoid ((<>))+import           Data.Text (Text)+import qualified Data.Text as T+import           Data.Tuple (swap)+import           Nix.Expr++-- | Merge adjacent 'Plain' values with 'mappend'.+mergePlain :: [Antiquoted Text r] -> [Antiquoted Text r]+mergePlain [] = []+mergePlain (Plain a: EscapedNewline : Plain b: xs) =+    mergePlain (Plain (a <> "\n" <> b) : xs)+mergePlain (Plain a: Plain b: xs) = mergePlain (Plain (a <> b) : xs)+mergePlain (x:xs) = x : mergePlain xs++-- | Remove 'Plain' values equal to 'mempty', as they don't have any+-- informational content.+removePlainEmpty :: [Antiquoted Text r] -> [Antiquoted Text r]+removePlainEmpty = filter f where+  f (Plain x) = x /= mempty+  f _ = True++  -- trimEnd xs+  --     | null xs = xs+  --     | otherwise = case last xs of+  --           Plain x -> init xs ++ [Plain (T.dropWhileEnd (== ' ') x)]+  --           _ -> xs++-- | Equivalent to case splitting on 'Antiquoted' strings.+runAntiquoted :: v -> (v -> a) -> (r -> a) -> Antiquoted v r -> a+runAntiquoted _  f _ (Plain v)      = f v+runAntiquoted nl f _ EscapedNewline = f nl+runAntiquoted _  _ k (Antiquoted r) = k r++-- | Split a stream representing a string with antiquotes on line breaks.+splitLines :: [Antiquoted Text r] -> [[Antiquoted Text r]]+splitLines = uncurry (flip (:)) . go where+  go (Plain t : xs) = (Plain l :) <$> foldr f (go xs) ls where+    (l : ls) = T.split (=='\n') t+    f prefix (finished, current) = ((Plain prefix : current) : finished, [])+  go (Antiquoted a : xs) = (Antiquoted a :) <$> go xs+  go (EscapedNewline : xs) = (EscapedNewline :) <$> go xs+  go [] = ([],[])++-- | Join a stream of strings containing antiquotes again. This is the inverse+-- of 'splitLines'.+unsplitLines :: [[Antiquoted Text r]] -> [Antiquoted Text r]+unsplitLines = intercalate [Plain "\n"]++-- | Form an indented string by stripping spaces equal to the minimal indent.+stripIndent :: [Antiquoted Text r] -> NString r+stripIndent [] = Indented 0 []+stripIndent xs =+  Indented minIndent+      . removePlainEmpty+      . mergePlain+      . map snd+      . dropWhileEnd cleanup+      . (\ys -> zip (map (\case [] -> Nothing+                                x -> Just (last x))+                        (inits ys)) ys)+      . unsplitLines $ ls'+  where+    ls = stripEmptyOpening $ splitLines xs+    ls' = map (dropSpaces minIndent) ls++    minIndent = case stripEmptyLines ls of+      [] -> 0+      nonEmptyLs -> minimum $ map (countSpaces . mergePlain) nonEmptyLs++    stripEmptyLines = filter $ \case+      [Plain t] -> not $ T.null $ T.strip t+      _ -> True++    stripEmptyOpening ([Plain t]:ts) | T.null (T.strip t) = ts+    stripEmptyOpening ts = ts++    countSpaces (Antiquoted _:_) = 0+    countSpaces (EscapedNewline:_) = 0+    countSpaces (Plain t : _) = T.length . T.takeWhile (== ' ') $ t+    countSpaces [] = 0++    dropSpaces 0 x = x+    dropSpaces n (Plain t : cs) = Plain (T.drop n t) : cs+    dropSpaces _ _ = error "stripIndent: impossible"++    cleanup (Nothing, Plain y) = T.all (== ' ') y+    cleanup (Just (Plain x), Plain y)+        | "\n" `T.isSuffixOf` x = T.all (== ' ') y+    cleanup _ = False++escapeCodes :: [(Char, Char)]+escapeCodes =+  [ ('\n', 'n' )+  , ('\r', 'r' )+  , ('\t', 't' )+  , ('\\', '\\')+  , ('$' , '$' )+  , ('"', '"')+  ]++fromEscapeCode :: Char -> Maybe Char+fromEscapeCode = (`lookup` map swap escapeCodes)++toEscapeCode :: Char -> Maybe Char+toEscapeCode = (`lookup` escapeCodes)
+ src/Nix/TH.hs view
@@ -0,0 +1,36 @@+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TemplateHaskell #-}++{-# OPTIONS_GHC -Wno-missing-fields #-}++module Nix.TH where++import           Data.Fix+import           Data.Generics.Aliases+import           Data.Set (Set)+import qualified Data.Set as Set+import qualified Data.Text as Text+import           Language.Haskell.TH+import           Language.Haskell.TH.Quote+import           Nix.Expr+import           Nix.Parser++quoteExprExp :: String -> ExpQ+quoteExprExp s = do+    expr <- case parseNixText (Text.pack s) of+        Failure err -> fail $ show err+        Success e   -> return e+    dataToExpQ (const Nothing `extQ` metaExp (freeVars expr)) expr++freeVars :: NExpr -> Set VarName+freeVars = error "NYI: Implement an evaluator to find free variables"++metaExp :: Set VarName -> NExpr -> Maybe ExpQ+metaExp fvs (Fix (NSym x)) | x `Set.member` fvs =+  Just [| toExpr $(varE (mkName (Text.unpack x))) |]+metaExp _ _ = Nothing++nix :: QuasiQuoter+nix = QuasiQuoter+    { quoteExp = quoteExprExp+    }
+ src/Nix/Thunk.hs view
@@ -0,0 +1,111 @@+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE CPP #-}++#if ENABLE_TRACING+{-# LANGUAGE BangPatterns #-}+#endif++{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeFamilies #-}++module Nix.Thunk where++import Control.Exception+import Control.Monad.Catch+import Data.Typeable++#if ENABLE_TRACING+import Data.IORef+import System.IO.Unsafe+import Nix.Utils++counter :: IORef Int+counter = unsafePerformIO $ newIORef 0+{-# NOINLINE counter #-}+#endif++data Deferred m v = Deferred (m v) | Computed v+    deriving (Functor, Foldable, Traversable)++class Monad m => MonadVar m where+    type Var m :: * -> *+    newVar :: a -> m (Var m a)+    readVar :: Var m a -> m a+    writeVar :: Var m a -> a -> m ()+    atomicModifyVar :: Var m a -> (a -> (a, b)) -> m b++class Monad m => MonadThunk v t m | v -> m, v -> t, t -> m, t -> v where+    thunk :: m v -> m t+    force :: t -> (v -> m r) -> m r+    value :: v -> t++data Thunk m v+    = Value v+    | Thunk Int (Var m Bool) (Var m (Deferred m v))++newtype ThunkLoop = ThunkLoop (Maybe Int)+    deriving (Show, Typeable)++instance Exception ThunkLoop++valueRef :: v -> Thunk m v+valueRef = Value++buildThunk :: MonadVar m => m v -> m (Thunk m v)+buildThunk action =+#if ENABLE_TRACING+    let !x = unsafePerformIO (atomicModifyIORef' counter (\c -> (succ c, c))) in+    Thunk x+#else+    Thunk 0+#endif+        <$> newVar False <*> newVar (Deferred action)++forceThunk :: (MonadVar m, MonadThrow m) => Thunk m v -> (v -> m a) -> m a+forceThunk (Value ref) k = k ref+#if ENABLE_TRACING+forceThunk (Thunk n active ref) k = do+#else+forceThunk (Thunk _ active ref) k = do+#endif+    eres <- readVar ref+    case eres of+        Computed v -> k v+        Deferred action -> do+            nowActive <- atomicModifyVar active (True,)+            if nowActive+                then+#if ENABLE_TRACING+                    throwM $ ThunkLoop (Just n)+#else+                    throwM $ ThunkLoop Nothing+#endif+                else do+#if ENABLE_TRACING+                    traceM $ "Forcing " ++ show n+#endif+                    v <- action+                    writeVar ref (Computed v)+                    _ <- atomicModifyVar active (False,)+                    k v++forceEffects :: MonadVar m => Thunk m v -> (v -> m a) -> m a+forceEffects (Value ref) k = k ref+forceEffects (Thunk _ active ref) k = do+    nowActive <- atomicModifyVar active (True,)+    if nowActive+        then return $ error "forceEffects: a value was expected"+        else do+            eres <- readVar ref+            case eres of+                Computed v -> k v+                Deferred action -> do+                    v <- action+                    writeVar ref (Computed v)+                    _ <- atomicModifyVar active (False,)+                    k v
+ src/Nix/Type/Assumption.hs view
@@ -0,0 +1,44 @@+module Nix.Type.Assumption (+  Assumption(..),+  empty,+  lookup,+  remove,+  extend,+  keys,+  merge,+  mergeAssumptions,+  singleton,+) where++import Prelude hiding (lookup)++import Nix.Type.Type++import Data.Foldable++newtype Assumption = Assumption { assumptions :: [(Name, Type)] }+  deriving (Eq, Show)++empty :: Assumption+empty = Assumption []++extend :: Assumption -> (Name, Type) -> Assumption+extend (Assumption a) (x, s) = Assumption ((x, s) : a)++remove :: Assumption -> Name -> Assumption+remove (Assumption a) var = Assumption (filter (\(n, _) -> n /= var) a)++lookup :: Name -> Assumption -> [Type]+lookup key (Assumption a) = map snd (filter (\(n, _) -> n == key) a)++merge :: Assumption -> Assumption -> Assumption+merge (Assumption a) (Assumption b) = Assumption (a ++ b)++mergeAssumptions :: [Assumption] -> Assumption+mergeAssumptions = foldl' merge empty++singleton :: Name -> Type -> Assumption+singleton x y = Assumption [(x, y)]++keys :: Assumption -> [Name]+keys (Assumption a) = map fst a
+ src/Nix/Type/Env.hs view
@@ -0,0 +1,70 @@+module Nix.Type.Env (+  Env(..),+  empty,+  lookup,+  remove,+  extend,+  extends,+  merge,+  mergeEnvs,+  singleton,+  keys,+  fromList,+  toList,+) where++import           Prelude hiding (lookup)++import           Nix.Type.Type++import           Data.Foldable hiding (toList)+import qualified Data.Map as Map+import           Data.Semigroup++-------------------------------------------------------------------------------+-- Typing Environment+-------------------------------------------------------------------------------++newtype Env = TypeEnv { types :: Map.Map Name [Scheme] }+  deriving (Eq, Show)++empty :: Env+empty = TypeEnv Map.empty++extend :: Env -> (Name, [Scheme]) -> Env+extend env (x, s) = env { types = Map.insert x s (types env) }++remove :: Env -> Name -> Env+remove (TypeEnv env) var = TypeEnv (Map.delete var env)++extends :: Env -> [(Name, [Scheme])] -> Env+extends env xs =+    env { types = Map.union (Map.fromList xs) (types env) }++lookup :: Name -> Env -> Maybe [Scheme]+lookup key (TypeEnv tys) = Map.lookup key tys++merge :: Env -> Env -> Env+merge (TypeEnv a) (TypeEnv b) = TypeEnv (Map.union a b)++mergeEnvs :: [Env] -> Env+mergeEnvs = foldl' merge empty++singleton :: Name -> Scheme -> Env+singleton x y = TypeEnv (Map.singleton x [y])++keys :: Env -> [Name]+keys (TypeEnv env) = Map.keys env++fromList :: [(Name, [Scheme])] -> Env+fromList xs = TypeEnv (Map.fromList xs)++toList :: Env -> [(Name, [Scheme])]+toList (TypeEnv env) = Map.toList env++instance Semigroup Env where+  (<>) = merge++instance Monoid Env where+  mempty = empty+  mappend = merge
+ src/Nix/Type/Infer.hs view
@@ -0,0 +1,612 @@+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeSynonymInstances #-}++{-# OPTIONS_GHC -Wno-name-shadowing #-}++module Nix.Type.Infer (+  Constraint(..),+  TypeError(..),+  InferError(..),+  Subst(..),+  inferTop+) where++import           Control.Applicative+import           Control.Arrow+import           Control.Monad.Catch+import           Control.Monad.Except+import           Control.Monad.Logic+import           Control.Monad.Reader+import           Control.Monad.ST+import           Control.Monad.State+import           Data.Fix+import           Data.Foldable+import qualified Data.HashMap.Lazy as M+import           Data.List (delete, find, nub, intersect, (\\))+import           Data.Map (Map)+import qualified Data.Map as Map+import           Data.Maybe (fromJust)+import           Data.STRef+import           Data.Semigroup+import qualified Data.Set as Set+import           Data.Text (Text)+import           Nix.Atoms+import           Nix.Convert+import           Nix.Eval (MonadEval(..))+import qualified Nix.Eval as Eval+import           Nix.Expr.Types+import           Nix.Expr.Types.Annotated+import           Nix.Scope+import           Nix.Thunk+import qualified Nix.Type.Assumption as As+import           Nix.Type.Env+import qualified Nix.Type.Env as Env+import           Nix.Type.Type+import           Nix.Utils++-------------------------------------------------------------------------------+-- Classes+-------------------------------------------------------------------------------++-- | Inference monad+newtype Infer s a = Infer+    { getInfer ::+        ReaderT (Set.Set TVar, Scopes (Infer s) (JThunk s))+            (StateT InferState (ExceptT InferError (ST s))) a+    }+    deriving (Functor, Applicative, Alternative, Monad, MonadPlus, MonadFix,+              MonadReader (Set.Set TVar, Scopes (Infer s) (JThunk s)),+              MonadState InferState, MonadError InferError)++-- | Inference state+newtype InferState = InferState { count :: Int }++-- | Initial inference state+initInfer :: InferState+initInfer = InferState { count = 0 }++data Constraint+    = EqConst Type Type+    | ExpInstConst Type Scheme+    | ImpInstConst Type (Set.Set TVar) Type+    deriving (Show, Eq, Ord)++newtype Subst = Subst (Map TVar Type)+  deriving (Eq, Ord, Show, Semigroup, Monoid)++class Substitutable a where+  apply :: Subst -> a -> a++instance Substitutable TVar where+  apply (Subst s) a = tv+    where t = TVar a+          (TVar tv) = Map.findWithDefault t a s++instance Substitutable Type where+  apply _ (TCon a)           = TCon a+  apply s (TSet b a)         = TSet b (M.map (apply s) a)+  apply s (TList a)          = TList (map (apply s) a)+  apply (Subst s) t@(TVar a) = Map.findWithDefault t a s+  apply s (t1 `TArr` t2)     = apply s t1 `TArr` apply s t2+  apply s (TMany ts)         = TMany (map (apply s) ts)++instance Substitutable Scheme where+  apply (Subst s) (Forall as t) = Forall as $ apply s' t+    where s' = Subst $ foldr Map.delete s as++instance Substitutable Constraint where+   apply s (EqConst t1 t2)         = EqConst (apply s t1) (apply s t2)+   apply s (ExpInstConst t sc)     = ExpInstConst (apply s t) (apply s sc)+   apply s (ImpInstConst t1 ms t2) = ImpInstConst (apply s t1) (apply s ms) (apply s t2)++instance Substitutable a => Substitutable [a] where+  apply = map . apply++instance (Ord a, Substitutable a) => Substitutable (Set.Set a) where+  apply = Set.map . apply+++class FreeTypeVars a where+  ftv :: a -> Set.Set TVar++instance FreeTypeVars Type where+  ftv TCon{}         = Set.empty+  ftv (TVar a)       = Set.singleton a+  ftv (TSet _ a)     = Set.unions (map ftv (M.elems a))+  ftv (TList a)      = Set.unions (map ftv a)+  ftv (t1 `TArr` t2) = ftv t1 `Set.union` ftv t2+  ftv (TMany ts)     = Set.unions (map ftv ts)++instance FreeTypeVars TVar where+  ftv = Set.singleton++instance FreeTypeVars Scheme where+  ftv (Forall as t) = ftv t `Set.difference` Set.fromList as++instance FreeTypeVars a => FreeTypeVars [a] where+  ftv   = foldr (Set.union . ftv) Set.empty++instance (Ord a, FreeTypeVars a) => FreeTypeVars (Set.Set a) where+  ftv   = foldr (Set.union . ftv) Set.empty+++class ActiveTypeVars a where+  atv :: a -> Set.Set TVar++instance ActiveTypeVars Constraint where+  atv (EqConst t1 t2)         = ftv t1 `Set.union` ftv t2+  atv (ImpInstConst t1 ms t2) = ftv t1 `Set.union` (ftv ms `Set.intersection` ftv t2)+  atv (ExpInstConst t s)      = ftv t `Set.union` ftv s++instance ActiveTypeVars a => ActiveTypeVars [a] where+  atv = foldr (Set.union . atv) Set.empty++data TypeError+  = UnificationFail Type Type+  | InfiniteType TVar Type+  | UnboundVariables [Text]+  | Ambigious [Constraint]+  | UnificationMismatch [Type] [Type]+  deriving (Eq, Show)++data InferError+  = TypeInferenceErrors [TypeError]+  | TypeInferenceAborted+  | forall s. Exception s => EvaluationError s++typeError :: MonadError InferError m => TypeError -> m ()+typeError err = throwError $ TypeInferenceErrors [err]++deriving instance Show InferError+instance Exception InferError++instance Semigroup InferError where+    x <> _ = x++instance Monoid InferError where+    mempty  = TypeInferenceAborted+    mappend = (<>)++-------------------------------------------------------------------------------+-- Inference+-------------------------------------------------------------------------------++-- | Run the inference monad+runInfer' :: Infer s a -> ST s (Either InferError a)+runInfer' = runExceptT+          . (`evalStateT` initInfer)+          . (`runReaderT` (Set.empty, emptyScopes))+          . getInfer++runInfer :: (forall s. Infer s a) -> Either InferError a+runInfer m = runST (runInfer' m)++inferType :: Env -> NExpr -> Infer s [(Subst, Type)]+inferType env ex = do+  Judgment as cs t <- infer ex+  let unbounds = Set.fromList (As.keys as) `Set.difference`+                 Set.fromList (Env.keys env)+  unless (Set.null unbounds) $+      typeError $ UnboundVariables (nub (Set.toList unbounds))+  let cs' = [ ExpInstConst t s+            | (x, ss) <- Env.toList env+            , s <- ss+            , t <- As.lookup x as]+  inferState <- get+  let eres = (`evalState` inferState) $ runSolver $ do+          subst <- solve (cs ++ cs')+          return (subst, subst `apply` t)+  case eres of+      Left errs -> throwError $ TypeInferenceErrors errs+      Right xs  -> pure xs++-- | Solve for the toplevel type of an expression in a given environment+inferExpr :: Env -> NExpr -> Either InferError [Scheme]+inferExpr env ex = case runInfer (inferType env ex) of+  Left err -> Left err+  Right xs -> Right $ map (\(subst, ty) -> closeOver (subst `apply` ty)) xs++-- | Canonicalize and return the polymorphic toplevel type.+closeOver :: Type -> Scheme+closeOver = normalize . generalize Set.empty++extendMSet :: TVar -> Infer s a -> Infer s a+extendMSet x = Infer . local (first (Set.insert x)) . getInfer++letters :: [String]+letters = [1..] >>= flip replicateM ['a'..'z']++fresh :: MonadState InferState m => m Type+fresh = do+    s <- get+    put s{count = count s + 1}+    return $ TVar $ TV (letters !! count s)++instantiate :: MonadState InferState m => Scheme -> m Type+instantiate (Forall as t) = do+    as' <- mapM (const fresh) as+    let s = Subst $ Map.fromList $ zip as as'+    return $ apply s t++generalize :: Set.Set TVar -> Type -> Scheme+generalize free t  = Forall as t+    where as = Set.toList $ ftv t `Set.difference` free++unops :: Type -> NUnaryOp -> [Constraint]+unops u1 = \case+    NNot -> [ EqConst u1 (typeFun [typeBool, typeBool]) ]+    NNeg -> [ EqConst u1 (TMany [ typeFun [typeInt,   typeInt]+                               , typeFun [typeFloat, typeFloat] ]) ]++binops :: Type -> NBinaryOp -> [Constraint]+binops u1 = \case+    NApp    -> []                -- this is handled separately++    -- Equality tells you nothing about the types, because any two types are+    -- allowed.+    NEq     -> []+    NNEq    -> []++    NGt     -> inequality+    NGte    -> inequality+    NLt     -> inequality+    NLte    -> inequality++    NAnd    -> [ EqConst u1 (typeFun [typeBool, typeBool, typeBool]) ]+    NOr     -> [ EqConst u1 (typeFun [typeBool, typeBool, typeBool]) ]+    NImpl   -> [ EqConst u1 (typeFun [typeBool, typeBool, typeBool]) ]++    NConcat -> [ EqConst u1 (TMany [ typeFun [typeList,   typeList,   typeList]+                                  , typeFun [typeList,   typeNull,   typeList]+                                  , typeFun [typeNull,   typeList,   typeList]+                                  ]) ]++    NUpdate -> [ EqConst u1 (TMany [ typeFun [typeSet,    typeSet,    typeSet]+                                  , typeFun [typeSet,    typeNull,   typeSet]+                                  , typeFun [typeNull,   typeSet,    typeSet]+                                  ]) ]++    NPlus   -> [ EqConst u1 (TMany [ typeFun [typeInt,    typeInt,    typeInt]+                                  , typeFun [typeFloat,  typeFloat,  typeFloat]+                                  , typeFun [typeInt,    typeFloat,  typeFloat]+                                  , typeFun [typeFloat,  typeInt,    typeFloat]+                                  , typeFun [typeString, typeString, typeString]+                                  , typeFun [typePath,   typePath,   typePath]+                                  , typeFun [typeString, typeString, typePath]+                                  ]) ]+    NMinus  -> arithmetic+    NMult   -> arithmetic+    NDiv    -> arithmetic+  where+    inequality =+        [ EqConst u1 (TMany [ typeFun [typeInt,    typeInt,    typeBool]+                            , typeFun [typeFloat,  typeFloat,  typeBool]+                            , typeFun [typeInt,    typeFloat,  typeBool]+                            , typeFun [typeFloat,  typeInt,    typeBool]+                            ]) ]++    arithmetic =+        [ EqConst u1 (TMany [ typeFun [typeInt,    typeInt,    typeInt]+                            , typeFun [typeFloat,  typeFloat,  typeFloat]+                            , typeFun [typeInt,    typeFloat,  typeFloat]+                            , typeFun [typeFloat,  typeInt,    typeFloat]+                            ]) ]++instance MonadVar (Infer s) where+    type Var (Infer s) = STRef s++    newVar x     = Infer $ lift $ lift $ lift $ newSTRef x+    readVar x    = Infer $ lift $ lift $ lift $ readSTRef x+    writeVar x y = Infer $ lift $ lift $ lift $ writeSTRef x y+    atomicModifyVar x f = Infer $ lift $ lift $ lift $ do+        res <- snd . f <$> readSTRef x+        _ <- modifySTRef x (fst . f)+        return res++newtype JThunk s = JThunk (Thunk (Infer s) (Judgment s))++instance MonadThrow (Infer s) where+    throwM = throwError . EvaluationError++instance MonadCatch (Infer s) where+    catch m h = catchError m $ \case+        EvaluationError e ->+            maybe (error $ "Exception was not an exception: " ++ show e) h+                  (fromException (toException e))+        err -> error $ "Unexpected error: " ++ show err++instance MonadThunk (Judgment s) (JThunk s) (Infer s) where+    thunk = fmap JThunk . buildThunk++    force (JThunk t) f = catch (forceThunk t f) $ \(_ :: ThunkLoop) ->+        -- If we have a thunk loop, we just don't know the type.+        f =<< Judgment As.empty [] <$> fresh++    value = JThunk . valueRef++instance MonadEval (Judgment s) (Infer s) where+    freeVariable var = do+        tv <- fresh+        return $ Judgment (As.singleton var tv) [] tv++    -- If we fail to look up an attribute, we just don't know the type.+    attrMissing _ _ = Judgment As.empty [] <$> fresh++    evaledSym _ = pure++    evalCurPos =+        return $ Judgment As.empty [] $ TSet False $ M.fromList+            [ ("file", typePath)+            , ("line", typeInt)+            , ("col",  typeInt) ]++    evalConstant c  = return $ Judgment As.empty [] (go c)+      where+        go = \case+          NInt _   -> typeInt+          NFloat _ -> typeFloat+          NBool _  -> typeBool+          NNull    -> typeNull++    evalString      = const $ return $ Judgment As.empty [] typeString+    evalLiteralPath = const $ return $ Judgment As.empty [] typePath+    evalEnvPath     = const $ return $ Judgment As.empty [] typePath++    evalUnary op (Judgment as1 cs1 t1) = do+        tv <- fresh+        return $ Judgment as1 (cs1 ++ unops (t1 `TArr` tv) op) tv++    evalBinary op (Judgment as1 cs1 t1) e2 = do+        Judgment as2 cs2 t2 <- e2+        tv <- fresh+        return $ Judgment+            (as1 `As.merge` as2)+            (cs1 ++ cs2 ++ binops (t1 `TArr` (t2 `TArr` tv)) op)+            tv++    evalWith = Eval.evalWithAttrSet++    evalIf (Judgment as1 cs1 t1) t f = do+        Judgment as2 cs2 t2 <- t+        Judgment as3 cs3 t3 <- f+        return $ Judgment+            (as1 `As.merge` as2 `As.merge` as3)+            (cs1 ++ cs2 ++ cs3 ++ [EqConst t1 typeBool, EqConst t2 t3])+            t2++    evalAssert (Judgment as1 cs1 t1) body = do+        Judgment as2 cs2 t2 <- body+        return $ Judgment+            (as1 `As.merge` as2)+            (cs1 ++ cs2 ++ [EqConst t1 typeBool])+            t2++    evalApp (Judgment as1 cs1 t1) e2 = do+        Judgment as2 cs2 t2 <- e2+        tv <- fresh+        return $ Judgment+            (as1 `As.merge` as2)+            (cs1 ++ cs2 ++ [EqConst t1 (t2 `TArr` tv)])+            tv++    evalAbs (Param x) k = do+        tv@(TVar a) <- fresh+        ((), Judgment as cs t) <-+            extendMSet a (k (pure (Judgment (As.singleton x tv) [] tv))+                            (\_ b -> ((),) <$> b))+        return $ Judgment+            (as `As.remove` x)+            (cs ++ [EqConst t' tv | t' <- As.lookup x as])+            (tv `TArr` t)++    evalAbs (ParamSet ps variadic _mname) k = do+        js <- fmap concat $ forM ps $ \(name, _) -> do+                tv <- fresh+                pure [(name, tv)]++        let (env, tys) = (\f -> foldl' f (As.empty, M.empty) js)+                $ \(as1, t1) (k, t) ->+                    (as1 `As.merge` As.singleton k t, M.insert k t t1)+            arg   = pure $ Judgment env [] (TSet True tys)+            call  = k arg $ \args b -> (args,) <$> b+            names = map fst js++        (args, Judgment as cs t) <-+            foldr (\(_, TVar a) -> extendMSet a) call js++        ty <- TSet variadic <$> traverse (inferredType <$>) args++        return $ Judgment+            (foldl' As.remove as names)+            (cs ++ [ EqConst t' (tys M.! x)+                   | x  <- names+                   , t' <- As.lookup x as])+            (ty `TArr` t)++    evalError = throwError . EvaluationError++data Judgment s = Judgment+    { assumptions     :: As.Assumption+    , typeConstraints :: [Constraint]+    , inferredType    :: Type+    }+    deriving Show++instance FromValue (Text, DList Text) (Infer s) (Judgment s) where+    fromValueMay _ = return Nothing+    fromValue _ = error "Unused"++instance FromValue (AttrSet (JThunk s), AttrSet SourcePos) (Infer s) (Judgment s) where+    fromValueMay (Judgment _ _ (TSet _ xs)) = do+        let sing _ = Judgment As.empty []+        pure $ Just (M.mapWithKey (\k v -> value (sing k v)) xs, M.empty)+    fromValueMay _ = pure Nothing+    fromValue = fromValueMay >=> \case+        Just v  -> pure v+        Nothing -> pure (M.empty, M.empty)++instance ToValue (AttrSet (JThunk s), AttrSet SourcePos) (Infer s) (Judgment s) where+    toValue (xs, _) = Judgment+        <$> foldrM go As.empty xs+        <*> (concat <$> traverse (`force` (pure . typeConstraints)) xs)+        <*> (TSet True <$> traverse (`force` (pure . inferredType)) xs)+      where+        go x rest = force x $ \x' -> pure $ As.merge (assumptions x') rest++instance ToValue [JThunk s] (Infer s) (Judgment s) where+    toValue xs = Judgment+        <$> foldrM go As.empty xs+        <*> (concat <$> traverse (`force` (pure . typeConstraints)) xs)+        <*> (TList <$> traverse (`force` (pure . inferredType)) xs)+      where+        go x rest = force x $ \x' -> pure $ As.merge (assumptions x') rest++instance ToValue Bool (Infer s) (Judgment s) where+    toValue _ = pure $ Judgment As.empty [] typeBool++infer :: NExpr -> Infer s (Judgment s)+infer = cata Eval.eval++inferTop :: Env -> [(Text, NExpr)] -> Either InferError Env+inferTop env [] = Right env+inferTop env ((name, ex):xs) = case inferExpr env ex of+  Left err -> Left err+  Right ty -> inferTop (extend env (name, ty)) xs++normalize :: Scheme -> Scheme+normalize (Forall _ body) = Forall (map snd ord) (normtype body)+  where+    ord = zip (nub $ fv body) (map TV letters)++    fv (TVar a)    = [a]+    fv (TArr a b)  = fv a ++ fv b+    fv (TCon _)    = []+    fv (TSet _ a)  = concatMap fv (M.elems a)+    fv (TList a)   = concatMap fv a+    fv (TMany ts)  = concatMap fv ts++    normtype (TArr a b)  = TArr (normtype a) (normtype b)+    normtype (TCon a)    = TCon a+    normtype (TSet b a)  = TSet b (M.map normtype a)+    normtype (TList a)   = TList (map normtype a)+    normtype (TMany ts)  = TMany (map normtype ts)+    normtype (TVar a)    =+      case Prelude.lookup a ord of+        Just x -> TVar x+        Nothing -> error "type variable not in signature"++-------------------------------------------------------------------------------+-- Constraint Solver+-------------------------------------------------------------------------------++newtype Solver m a = Solver (LogicT (StateT [TypeError] m) a)+    deriving (Functor, Applicative, Alternative, Monad, MonadPlus,+              MonadLogic, MonadState [TypeError])++instance MonadTrans Solver where+    lift = Solver . lift . lift++instance Monad m => MonadError TypeError (Solver m) where+    throwError err = Solver $ lift (modify (err:)) >> mzero+    catchError _ _ = error "This is never used"++runSolver :: Monad m => Solver m a -> m (Either [TypeError] [a])+runSolver (Solver s) = do+    res <- runStateT (observeAllT s) []+    pure $ case res of+        (x:xs, _) -> Right (x:xs)+        (_, es)   -> Left (nub es)++-- | The empty substitution+emptySubst :: Subst+emptySubst = mempty++-- | Compose substitutions+compose :: Subst -> Subst -> Subst+Subst s1 `compose` Subst s2 =+    Subst $ Map.map (apply (Subst s1)) s2 `Map.union` s1++unifyMany :: Monad m => [Type] -> [Type] -> Solver m Subst+unifyMany [] [] = return emptySubst+unifyMany (t1 : ts1) (t2 : ts2) =+  do su1 <- unifies t1 t2+     su2 <- unifyMany (apply su1 ts1) (apply su1 ts2)+     return (su2 `compose` su1)+unifyMany t1 t2 = throwError $ UnificationMismatch t1 t2++allSameType :: [Type] -> Bool+allSameType [] = True+allSameType [_] = True+allSameType (x:y:ys) = x == y && allSameType (y:ys)++unifies :: Monad m => Type -> Type -> Solver m Subst+unifies t1 t2 | t1 == t2 = return emptySubst+unifies (TVar v) t = v `bind` t+unifies t (TVar v) = v `bind` t+unifies (TList xs) (TList ys)+    | allSameType xs && allSameType ys = case (xs, ys) of+          (x:_, y:_) -> unifies x y+          _ -> return emptySubst+    | length xs == length ys = unifyMany xs ys+-- We assume that lists of different lengths containing various types cannot+-- be unified.+unifies t1@(TList _) t2@(TList _) = throwError $ UnificationFail t1 t2+unifies (TSet True _) (TSet True _) = return emptySubst+unifies (TSet False b) (TSet True s)+    | M.keys b `intersect` M.keys s == M.keys s = return emptySubst+unifies (TSet True s) (TSet False b)+    | M.keys b `intersect` M.keys s == M.keys b = return emptySubst+unifies (TSet False s) (TSet False b)+    | null (M.keys b \\ M.keys s) = return emptySubst+unifies (TArr t1 t2) (TArr t3 t4) = unifyMany [t1, t2] [t3, t4]+unifies (TMany t1s) t2 = considering t1s >>- unifies ?? t2+unifies t1 (TMany t2s) = considering t2s >>- unifies t1+unifies t1 t2 = throwError $ UnificationFail t1 t2++bind :: Monad m => TVar -> Type -> Solver m Subst+bind a t | t == TVar a     = return emptySubst+         | occursCheck a t = throwError $ InfiniteType a t+         | otherwise       = return (Subst $ Map.singleton a t)++occursCheck ::  FreeTypeVars a => TVar -> a -> Bool+occursCheck a t = a `Set.member` ftv t++nextSolvable :: [Constraint] -> (Constraint, [Constraint])+nextSolvable xs = fromJust (find solvable (chooseOne xs))+  where+    chooseOne xs = [(x, ys) | x <- xs, let ys = delete x xs]++    solvable (EqConst{}, _)      = True+    solvable (ExpInstConst{}, _) = True+    solvable (ImpInstConst _t1 ms t2, cs) =+        Set.null ((ftv t2 `Set.difference` ms) `Set.intersection` atv cs)++considering :: [a] -> Solver m a+considering xs = Solver $ LogicT $ \c n -> foldr c n xs++solve :: MonadState InferState m => [Constraint] -> Solver m Subst+solve [] = return emptySubst+solve cs = solve' (nextSolvable cs)+  where+    solve' (EqConst t1 t2, cs) =+      unifies t1 t2 >>- \su1 ->+      solve (apply su1 cs) >>- \su2 ->+          return (su2 `compose` su1)++    solve' (ImpInstConst t1 ms t2, cs) =+      solve (ExpInstConst t1 (generalize ms t2) : cs)++    solve' (ExpInstConst t s, cs) = do+      s' <- lift $ instantiate s+      solve (EqConst t s' : cs)
+ src/Nix/Type/Type.hs view
@@ -0,0 +1,40 @@+module Nix.Type.Type where++import qualified Data.HashMap.Lazy as M+import           Data.Text (Text)+import           Nix.Utils++newtype TVar = TV String+  deriving (Show, Eq, Ord)++data Type+  = TVar TVar                -- type variable+  | TCon String              -- known type+  | TSet Bool (AttrSet Type) -- heterogenous map, bool if variadic+  | TList [Type]             -- heterogenous list+  | TArr Type Type           -- type -> type+  | TMany [Type]             -- variant type+  deriving (Show, Eq, Ord)++data Scheme = Forall [TVar] Type -- forall a b. a -> b+  deriving (Show, Eq, Ord)++-- This models a set that unifies with any other set.+typeSet :: Type+typeSet = TSet True M.empty++typeList :: Type+typeList = TList []++typeFun :: [Type] -> Type+typeFun = foldr1 TArr++typeInt, typeFloat, typeBool, typeString, typePath, typeNull :: Type+typeInt    = TCon "integer"+typeFloat  = TCon "float"+typeBool   = TCon "boolean"+typeString = TCon "string"+typePath   = TCon "path"+typeNull   = TCon "null"++type Name = Text
+ src/Nix/Utils.hs view
@@ -0,0 +1,110 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}++module Nix.Utils (module Nix.Utils, module X) where++import           Control.Arrow ((&&&))+import           Control.Monad+import           Control.Monad.Fix+import qualified Data.Aeson as A+import qualified Data.Aeson.Encoding as A+import           Data.Fix+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.List (sortOn)+import           Data.Monoid (Endo)+import           Data.Text (Text)+import qualified Data.Vector as V+import           Lens.Family2 as X+import           Lens.Family2.Stock (_1, _2)++#if ENABLE_TRACING+import           Debug.Trace as X+#else+import           Prelude as X+trace :: String -> a -> a+trace = const id+traceM :: Monad m => String -> m ()+traceM = const (return ())+#endif++type DList a = Endo [a]++type AttrSet = HashMap Text++-- | An f-algebra defines how to reduced the fixed-point of a functor to a+--   value.+type Alg f a = f a -> a++type AlgM f m a = f a -> m a++-- | An "transform" here is a modification of a catamorphism.+type Transform f a = (Fix f -> a) -> Fix f -> a++(<&>) :: Functor f => f a -> (a -> c) -> f c+(<&>) = flip (<$>)++(??) :: Functor f => f (a -> b) -> a -> f b+fab ?? a = fmap ($ a) fab++loeb :: Functor f => f (f a -> a) -> f a+loeb x = go where go = fmap ($ go) x++loebM :: (MonadFix m, Traversable t) => t (t a -> m a) -> m (t a)+loebM f = mfix $ \a -> mapM ($ a) f++para :: Functor f => (f (Fix f, a) -> a) -> Fix f -> a+para f = f . fmap (id &&& para f) . unFix++paraM :: (Traversable f, Monad m) => (f (Fix f, a) -> m a) -> Fix f -> m a+paraM f = f <=< traverse (\x -> (x,) <$> paraM f x) . unFix++cataP :: Functor f => (Fix f -> f a -> a) -> Fix f -> a+cataP f x = f x . fmap (cataP f) . unFix $ x++cataPM :: (Traversable f, Monad m) => (Fix f -> f a -> m a) -> Fix f -> m a+cataPM f x = f x <=< traverse (cataPM f) . unFix $ x++transport :: Functor g => (forall x. f x -> g x) -> Fix f -> Fix g+transport f (Fix x) = Fix $ fmap (transport f) (f x)++-- | adi is Abstracting Definitional Interpreters:+--+--     https://arxiv.org/abs/1707.04755+--+--   Essentially, it does for evaluation what recursion schemes do for+--   representation: allows threading layers through existing structure, only+--   in this case through behavior.+adi :: Functor f => (f a -> a) -> ((Fix f -> a) -> Fix f -> a) -> Fix f -> a+adi f g = g (f . fmap (adi f g) . unFix)++adiM :: (Traversable t, Monad m)+     => (t a -> m a) -> ((Fix t -> m a) -> Fix t -> m a) -> Fix t -> m a+adiM f g = g ((f <=< traverse (adiM f g)) . unFix)++class Has a b where+    hasLens :: Lens' a b++instance Has a a where+    hasLens f = f++instance Has (a, b) a where+    hasLens = _1++instance Has (a, b) b where+    hasLens = _2++toEncodingSorted :: A.Value -> A.Encoding+toEncodingSorted = \case+    A.Object m ->+        A.pairs . mconcat+                . fmap (\(k, v) -> A.pair k $ toEncodingSorted v)+                . sortOn fst+                $ M.toList m+    A.Array l -> A.list toEncodingSorted $ V.toList l+    v -> A.toEncoding v
+ src/Nix/Value.hs view
@@ -0,0 +1,346 @@+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++{-# OPTIONS_GHC -Wno-missing-signatures #-}+{-# OPTIONS_GHC -Wno-missing-pattern-synonym-signatures #-}++module Nix.Value where++import           Control.Monad+import           Control.Monad.Catch+import           Control.Monad.Trans.Class+import           Control.Monad.Trans.Except+import qualified Data.Aeson as A+import           Data.Align+import           Data.Fix+import           Data.HashMap.Lazy (HashMap)+import qualified Data.HashMap.Lazy as M+import           Data.Hashable+import           Data.Monoid (appEndo)+import           Data.Text (Text)+import           Data.These+import           Data.Typeable (Typeable)+import           GHC.Generics+import           Lens.Family2+import           Lens.Family2.Stock+import           Lens.Family2.TH+import           Nix.Atoms+import           Nix.Expr.Types+import           Nix.Expr.Types.Annotated+import           Nix.Frames+import           Nix.Scope+import           Nix.Thunk+import           Nix.Utils++-- | An 'NValue' is the most reduced form of an 'NExpr' after evaluation is+--   completed. 's' is related to the type of errors that might occur during+--   construction or use of a value.+data NValueF m r+    = NVConstantF NAtom+     -- | A string has a value and a context, which can be used to record what a+     -- string has been build from+    | NVStrF Text (DList Text)+    | NVPathF FilePath+    | NVListF [r]+    | NVSetF (AttrSet r) (AttrSet SourcePos)+    | NVClosureF (Params ()) (m (NValue m) -> m (NValue m))+      -- ^ A function is a closed set of parameters representing the "call+      --   signature", used at application time to check the type of arguments+      --   passed to the function. Since it supports default values which may+      --   depend on other values within the final argument set, this+      --   dependency is represented as a set of pending evaluations. The+      --   arguments are finally normalized into a set which is passed to the+      --   function.+      --+      --   Note that 'm r' is being used here because effectively a function+      --   and its set of default arguments is "never fully evaluated". This+      --   enforces in the type that it must be re-evaluated for each call.+    | NVBuiltinF String (m (NValue m) -> m (NValue m))+      -- ^ A builtin function is itself already in normal form. Also, it may+      --   or may not choose to evaluate its argument in the production of a+      --   result.+    deriving (Generic, Typeable, Functor, Foldable, Traversable)++-- | An 'NValueNF' is a fully evaluated value in normal form. An 'NValue m' is+--   a value in head normal form, where only the "top layer" has been+--   evaluated. An action of type 'm (NValue m)' is a pending evualation that+--   has yet to be performed. An 'NThunk m' is either a pending evaluation, or+--   a value in head normal form. A 'NThunkSet' is a set of mappings from keys+--   to thunks.++type NValueNF m = Fix (NValueF m)      -- normal form+type ValueSet m = AttrSet (NThunk m)++data Provenance m = Provenance+    { _lexicalScope :: Scopes m (NThunk m)+    , _originExpr   :: NExprLocF (Maybe (NValue m))+      -- ^ When calling the function x: x + 2 with argument x = 3, the+      --   'originExpr' for the resulting value will be 3 + 2, while the+      --   'contextExpr' will be @(x: x + 2) 3@, preserving not only the+      --   result of the call, but what was called and with what arguments.+    }++data NThunk m = NThunk+    { _thunkProvenance :: [Provenance m]+    , _baseThunk       :: Thunk m (NValue m)+    }++data NValue m = NValue+    { _valueProvenance :: [Provenance m]+    , _baseValue       :: NValueF m (NThunk m)+    }++addProvenance :: (NValue m -> Provenance m) -> NValue m -> NValue m+addProvenance f l@(NValue p v) = NValue (f l : p) v++pattern NVConstant x <- NValue _ (NVConstantF x)++nvConstant x = NValue [] (NVConstantF x)+nvConstantP p x = NValue [p] (NVConstantF x)++pattern NVStr s d <- NValue _ (NVStrF s d)++nvStr s d = NValue [] (NVStrF s d)+nvStrP p s d = NValue [p] (NVStrF s d)++pattern NVPath x <- NValue _ (NVPathF x)++nvPath x = NValue [] (NVPathF x)+nvPathP p x = NValue [p] (NVPathF x)++pattern NVList l <- NValue _ (NVListF l)++nvList l = NValue [] (NVListF l)+nvListP p l = NValue [p] (NVListF l)++pattern NVSet s x <- NValue _ (NVSetF s x)++nvSet s x = NValue [] (NVSetF s x)+nvSetP p s x = NValue [p] (NVSetF s x)++pattern NVClosure x f <- NValue _ (NVClosureF x f)++nvClosure x f = NValue [] (NVClosureF x f)+nvClosureP p x f = NValue [p] (NVClosureF x f)++pattern NVBuiltin name f <- NValue _ (NVBuiltinF name f)++nvBuiltin name f = NValue [] (NVBuiltinF name f)+nvBuiltinP p name f = NValue [p] (NVBuiltinF name f)++instance Show (NValueF m (Fix (NValueF m))) where+    showsPrec = flip go where+      go (NVConstantF atom)  = showsCon1 "NVConstant" atom+      go (NVStrF txt ctxt)   = showsCon2 "NVStr"      txt (appEndo ctxt [])+      go (NVListF     lst)   = showsCon1 "NVList"     lst+      go (NVSetF attrs _)    = showsCon1 "NVSet"      attrs+      go (NVClosureF p _)    = showsCon1 "NVClosure"  p+      go (NVPathF p)         = showsCon1 "NVPath"     p+      go (NVBuiltinF name _) = showsCon1 "NVBuiltin"  name++      showsCon1 :: Show a => String -> a -> Int -> String -> String+      showsCon1 con a d =+          showParen (d > 10) $ showString (con ++ " ") . showsPrec 11 a++      showsCon2 :: (Show a, Show b)+                => String -> a -> b -> Int -> String -> String+      showsCon2 con a b d =+          showParen (d > 10)+              $ showString (con ++ " ")+              . showsPrec 11 a+              . showString " "+              . showsPrec 11 b++instance Eq (NValue m) where+    NVConstant (NFloat x) == NVConstant (NInt y)   = x == fromInteger y+    NVConstant (NInt x)   == NVConstant (NFloat y) = fromInteger x == y+    NVConstant (NInt x)   == NVConstant (NInt y)   = x == y+    NVConstant (NFloat x) == NVConstant (NFloat y) = x == y+    NVStr x _ == NVStr y _ = x < y+    NVPath x  == NVPath y  = x < y+    _         == _         = False++instance Ord (NValue m) where+    NVConstant (NFloat x) <= NVConstant (NInt y)   = x <= fromInteger y+    NVConstant (NInt x)   <= NVConstant (NFloat y) = fromInteger x <= y+    NVConstant (NInt x)   <= NVConstant (NInt y)   = x <= y+    NVConstant (NFloat x) <= NVConstant (NFloat y) = x <= y+    NVStr x _ <= NVStr y _ = x < y+    NVPath x  <= NVPath y  = x < y+    _         <= _         = False++checkComparable :: (Framed e m, Typeable m) => NValue m -> NValue m -> m ()+checkComparable x y = case (x, y) of+    (NVConstant (NFloat _), NVConstant (NInt _))   -> pure ()+    (NVConstant (NInt _),   NVConstant (NFloat _)) -> pure ()+    (NVConstant (NInt _),   NVConstant (NInt _))   -> pure ()+    (NVConstant (NFloat _), NVConstant (NFloat _)) -> pure ()+    (NVStr _ _, NVStr _ _) -> pure ()+    (NVPath _, NVPath _)   -> pure ()+    _ -> throwError $ Comparison x y++builtin :: Monad m+        => String -> (m (NValue m) -> m (NValue m)) -> m (NValue m)+builtin name f = return $ nvBuiltin name f++builtin2 :: Monad m+         => String -> (m (NValue m) -> m (NValue m) -> m (NValue m))+         -> m (NValue m)+builtin2 name f = builtin name (builtin name . f)++builtin3 :: Monad m+         => String+         -> (m (NValue m) -> m (NValue m) -> m (NValue m) -> m (NValue m))+         -> m (NValue m)+builtin3 name f =+    builtin name $ \a -> builtin name $ \b -> builtin name $ \c -> f a b c++isClosureNF :: Monad m => NValueNF m -> Bool+isClosureNF (Fix NVClosureF {}) = True+isClosureNF _ = False++thunkEq :: MonadThunk (NValue m) (NThunk m) m+        => NThunk m -> NThunk m -> m Bool+thunkEq lt rt = force lt $ \lv -> force rt $ \rv -> valueEq lv rv++-- | Checks whether two containers are equal, using the given item equality+--   predicate. If there are any item slots that don't match between the two+--   containers, the result will be False.+alignEqM+    :: (Align f, Traversable f, Monad m)+    => (a -> b -> m Bool)+    -> f a+    -> f b+    -> m Bool+alignEqM eq fa fb = fmap (either (const False) (const True)) $ runExceptT $ do+    pairs <- forM (Data.Align.align fa fb) $ \case+        These a b -> return (a, b)+        _ -> throwE ()+    forM_ pairs $ \(a, b) -> guard =<< lift (eq a b)++isDerivation :: MonadThunk (NValue m) (NThunk m) m+             => AttrSet (NThunk m) -> m Bool+isDerivation m = case M.lookup "type" m of+    Nothing -> pure False+    Just t -> force t $ valueEq (nvStr "derivation" mempty)++valueEq :: MonadThunk (NValue m) (NThunk m) m+        => NValue m -> NValue m -> m Bool+valueEq l r = case (l, r) of+    (NVConstant lc, NVConstant rc) -> pure $ lc == rc+    (NVStr ls _, NVStr rs _) -> pure $ ls == rs+    (NVStr ls _, NVConstant NNull) -> pure $ ls == ""+    (NVConstant NNull, NVStr rs _) -> pure $ "" == rs+    (NVList ls, NVList rs) -> alignEqM thunkEq ls rs+    (NVSet lm _, NVSet rm _) -> do+        let compareAttrs = alignEqM thunkEq lm rm+        isDerivation lm >>= \case+            True -> isDerivation rm >>= \case+                True | Just lp <- M.lookup "outPath" lm+                     , Just rp <- M.lookup "outPath" rm+                       -> thunkEq lp rp+                _ -> compareAttrs+            _ -> compareAttrs+    (NVPath lp, NVPath rp) -> pure $ lp == rp+    _ -> pure False++data ValueType+    = TInt+    | TFloat+    | TBool+    | TNull+    | TString+    | TList+    | TSet+    | TClosure+    | TPath+    | TBuiltin+    deriving Show++valueType :: NValueF m r -> ValueType+valueType = \case+    NVConstantF a -> case a of+        NInt _    -> TInt+        NFloat _  -> TFloat+        NBool _   -> TBool+        NNull     -> TNull+    NVStrF {}     -> TString+    NVListF {}    -> TList+    NVSetF {}     -> TSet+    NVClosureF {} -> TClosure+    NVPathF {}    -> TPath+    NVBuiltinF {} -> TBuiltin++describeValue :: ValueType -> String+describeValue = \case+    TInt     -> "an integer"+    TFloat   -> "a float"+    TBool    -> "a boolean"+    TNull    -> "a null"+    TString  -> "a string"+    TList    -> "a list"+    TSet     -> "an attr set"+    TClosure -> "a function"+    TPath    -> "a path"+    TBuiltin -> "a builtin function"++instance Show (NValueF m (NThunk m)) where+    show = show . describeValue . valueType++instance Show (NValue m) where+    show (NValue _ v)  = show v++instance Show (NThunk m) where+    show (NThunk _ (Value v)) = show v+    show (NThunk _ _) = "<thunk>"++data ValueFrame m+    = ForcingThunk+    | ConcerningValue (NValue m)+    | Comparison (NValue m) (NValue m)+    | Addition (NValue m) (NValue m)+    | Multiplication (NValue m) (NValue m)+    | Division (NValue m) (NValue m)+    | Coercion ValueType ValueType+    | CoercionToJsonNF (NValueNF m)+    | CoercionFromJson A.Value+    | ExpectationNF ValueType (NValueNF m)+    | Expectation ValueType (NValue m)+    deriving (Show, Typeable)++instance Typeable m => Exception (ValueFrame m)++$(makeTraversals ''NValueF)+$(makeLenses ''Provenance)+$(makeLenses ''NThunk)+$(makeLenses ''NValue)++alterF :: (Eq k, Hashable k, Functor f)+       => (Maybe v -> f (Maybe v)) -> k -> HashMap k v -> f (HashMap k v)+alterF f k m = f (M.lookup k m) <&> \case+    Nothing -> M.delete k m+    Just v  -> M.insert k v m++hashAt :: VarName -> Lens' (AttrSet v) (Maybe v)+hashAt = flip alterF++key :: Applicative f => VarName -> LensLike' f (NValue m) (Maybe (NThunk m))+key k = baseValue._NVSetF._1.hashAt k
+ src/Nix/XML.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE LambdaCase #-}++module Nix.XML where++import           Data.Fix+import qualified Data.HashMap.Lazy as M+import           Data.List+import           Data.Ord+import qualified Data.Text as Text+import           Nix.Atoms+import           Nix.Expr.Types+import           Nix.Value+import           Text.XML.Light++toXML :: Functor m => NValueNF m -> String+toXML = (.) ((++ "\n") .+             ("<?xml version='1.0' encoding='utf-8'?>\n" ++) .+             ppElement .+             (\e -> Element (unqual "expr") [] [Elem e] Nothing))+        $ cata+        $ \case+    NVConstantF a -> case a of+        NInt n   -> mkElem "int" "value" (show n)+        NFloat f -> mkElem "float" "value" (show f)+        NBool b  -> mkElem "bool" "value" (if b then "true" else "false")+        NNull    -> Element (unqual "null") [] [] Nothing++    NVStrF t _ -> mkElem "string" "value" (Text.unpack t)+    NVListF l  -> Element (unqual "list") [] (Elem <$> l) Nothing++    NVSetF s _ -> Element (unqual "attrs") []+        (map (\(k, v) -> Elem (Element (unqual "attr")+                                      [Attr (unqual "name") (Text.unpack k)]+                                      [Elem v] Nothing))+             (sortBy (comparing fst) $ M.toList s)) Nothing++    NVClosureF p _  -> Element (unqual "function") [] (paramsXML p) Nothing+    NVPathF fp -> mkElem "path" "value" fp+    NVBuiltinF name _ -> mkElem "function" "name" name++mkElem :: String -> String -> String -> Element+mkElem n a v = Element (unqual n) [Attr (unqual a) v] [] Nothing++paramsXML :: Params r -> [Content]+paramsXML (Param name) =+    [Elem $ mkElem "varpat" "name" (Text.unpack name)]+paramsXML (ParamSet s b mname) =+    [Elem $ Element (unqual "attrspat") (battr ++ nattr) (paramSetXML s) Nothing]+  where+    battr = [ Attr (unqual "ellipsis") "1" | b ]+    nattr = maybe [] ((:[]) . Attr (unqual "name") . Text.unpack) mname++paramSetXML :: ParamSet r -> [Content]+paramSetXML = map (\(k,_) -> Elem $ mkElem "attr" "name" (Text.unpack k))
tests/EvalTests.hs view
@@ -1,51 +1,291 @@-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-}-module EvalTests (tests) where+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE UndecidableInstances #-} -import Data.Fix+{-# OPTIONS_GHC -Wno-missing-signatures -Wno-orphans #-} -import Test.Tasty-import Test.Tasty.HUnit-import Test.Tasty.TH+module EvalTests (tests, genEvalCompareTests) where -import Nix.Eval-import Nix.Parser-import Nix.Expr+import           Control.Monad (when)+import           Control.Monad.IO.Class+import qualified Data.HashMap.Lazy as M+import           Data.Maybe (isJust)+import           Data.String.Interpolate.IsString+import           Data.Text (Text)+import           Data.Time+import           Nix+import qualified System.Directory as D+import           System.Environment+import           System.FilePath+import           Test.Tasty+import           Test.Tasty.HUnit+import           Test.Tasty.TH+import           TestCommon -import Data.Monoid (Monoid(..))-import Prelude (String)+case_basic_sum =+    constantEqualText "2" "1 + 1" -case_basic_sum :: Assertion-case_basic_sum = constantEqualStr "2" "1 + 1"+case_basic_div =+    constantEqualText "3" "builtins.div 6 2" -case_basic_function :: Assertion-case_basic_function = constantEqualStr "2" "(a: a) 2"+case_basic_function =+    constantEqualText "2" "(a: a) 2" -case_set_attr :: Assertion-case_set_attr = constantEqualStr "2" "{ a = 2; }.a"+case_set_attr =+    constantEqualText "2" "{ a = 2; }.a" -case_function_set_arg :: Assertion-case_function_set_arg = constantEqualStr "2" "({ a }: 2) { a = 1; }"+case_function_set_arg =+    constantEqualText "2" "({ a }: 2) { a = 1; }" -case_function_set_two_arg :: Assertion-case_function_set_two_arg = constantEqualStr "2" "({ a, b ? 3 }: b - a) { a = 1; }"+case_function_set_two_arg =+    constantEqualText "2" "({ a, b ? 3 }: b - a) { a = 1; }" --- case_function_set_two_arg_default_scope :: Assertion--- case_function_set_two_arg_default_scope = constantEqualStr "2" "({ a, b ? a * 3 }: b - a) { a = 1; }"+case_function_set_two_arg_default_scope =+    constantEqualText "2" "({ x ? 1, y ? x * 3 }: y - x) {}" +case_function_default_env =+    constantEqualText "2" "let default = 2; in ({ a ? default }: a) {}"++case_function_definition_uses_environment =+    constantEqualText "3" "let f = (let a=1; in x: x+a); in f 2"++case_function_atpattern =+    -- jww (2018-05-09): This should be constantEqualText+    constantEqualText' "2" "(({a}@attrs:attrs) {a=2;}).a"++case_function_ellipsis =+    -- jww (2018-05-09): This should be constantEqualText+    constantEqualText' "2" "(({a, ...}@attrs:attrs) {a=0; b=2;}).b"++case_function_default_value_not_in_atpattern =+    constantEqualText "false" "({a ? 2}@attrs: attrs ? a) {}"++case_function_arg_shadowing =+    constantEqualText "6" "(y: y: x: x: x + y) 1 2 3 4"++case_function_recursive_args =+    constantEqualText "2" "({ x ? 1, y ? x * 3}: y - x) {}"++case_function_recursive_sets =+    constantEqualText "[ [ 6 4 100 ] 4 ]" [i|+        let x = rec {++          y = 2;+          z = { w = 4; };+          v = rec {+            u = 6;+            t = [ u z.w s ];+          };++        }; s = 100; in [ x.v.t x.z.w ]+    |]++case_nested_with =+    constantEqualText "2" "with { x = 1; }; with { x = 2; }; x"++case_match_failure_null =+    constantEqualText "null" "builtins.match \"ab\" \"abc\""++case_inherit_in_rec_set =+    constantEqualText "1" "let x = 1; in (rec { inherit x; }).x"++case_lang_version =+    constantEqualText "5" "builtins.langVersion"++case_rec_set_attr_path_simpl =+    constantEqualText "123" [i|+      let x = rec {+        foo.number = 123;+        foo.function = y: foo.number;+      }; in x.foo.function 1+    |]++case_inherit_from_set_has_no_scope =+    constantEqualText' "false" [i|+      (builtins.tryEval (+        let x = 1;+            y = { z = 2; };+        in { inherit (y) x; }.x+      )).success+    |]++case_unsafegetattrpos1 =+    constantEqualText "[ 6 21 ]" [i|+      let e = 1;+          f = 1;+          t = {};+          s = {+            inherit t e f;+            a = 1;+            "b" = 2;+            c.d = 3;+          };+          p = builtins.unsafeGetAttrPos "e" s; in+      [ p.line p.column ]+    |]++case_unsafegetattrpos2 =+    constantEqualText "[ 6 21 ]" [i|+      let e = 1;+          f = 1;+          t = {};+          s = {+            inherit t e f;+            a = 1;+            "b" = 2;+            c.d = 3;+          };+          p = builtins.unsafeGetAttrPos "f" s; in+      [ p.line p.column ]+    |]++case_unsafegetattrpos3 =+    constantEqualText "[ 7 13 ]" [i|+      let e = 1;+          f = 1;+          t = {};+          s = {+            inherit t e f;+            a = 1;+            "b" = 2;+            c.d = 3;+          };+          p = builtins.unsafeGetAttrPos "a" s; in+      [ p.line p.column ]+    |]++case_unsafegetattrpos4 =+    constantEqualText "[ 8 13 ]" [i|+      let e = 1;+          f = 1;+          t = {};+          s = {+            inherit t e f;+            a = 1;+            "b" = 2;+            c.d = 3;+          };+          p = builtins.unsafeGetAttrPos "b" s; in+      [ p.line p.column ]+    |]++-- jww (2018-05-09): These two are failing but they shouldn't be++-- case_unsafegetattrpos5 =+--     constantEqualText "[ 7 13 ]" [i|+--       let e = 1;+--           f = 1;+--           t = {};+--           s = {+--             inherit t e f;+--             a = 1;+--             "b" = 2;+--             c.d = 3;+--           };+--           p = builtins.unsafeGetAttrPos "c.d" s; in+--       [ p.line p.column ]+--     |]++-- case_unsafegetattrpos6 =+--     constantEqualText "[ 7 13 ]" [i|+--       let e = 1;+--           f = 1;+--           t = {};+--           s = {+--             inherit t e f;+--             a = 1;+--             "b" = 2;+--             c.d = 3;+--           };+--           p = builtins.unsafeGetAttrPos "d" s; in+--       [ p.line p.column ]+--     |]++case_fixed_points =+    constantEqualText [i|[+  {+    foobar = "foobar";+    foo = "foo";+    bar = "bar";+  }+  {+    foobar = "foo + bar";+    foo = "foo + ";+    bar = "bar";+  }+]|] [i|+    let+      fix = f: let x = f x; in x;+      extends = f: rattrs: self:+        let super = rattrs self; in super // f self super;+      f = self: { foo = "foo";+                  bar = "bar";+                  foobar = self.foo + self.bar; };+      g = self: super: { foo = super.foo + " + "; };+    in [ (fix f) (fix (extends g f)) ]+|]++case_fixed_points_and_fold =+    constantEqualText [i|[ {} {} ]|] [i|+let+  extends = f: rattrs: self:+    let super = rattrs self; in super // f self super;+  flip = f: a: b: f b a;+  toFixFold = builtins.foldl' (flip extends) (self: {}) ([(self: super: {})]);+  toFix = extends (self: super: {}) (self: {});+  fix = f: let x = f x; in x;+in [ (fix toFixFold) (fix toFix) ]+|]++-- jww (2018-05-02): This constantly changes!+-- case_placeholder =+--   constantEqualText+--       "\"/1rz4g4znpzjwh1xymhjpm42vipw92pr73vdgl6xs1hycac8kf2n9\""+--       "builtins.placeholder \"out\""++-----------------------+ tests :: TestTree tests = $testGroupGenerator ------------------------+genEvalCompareTests = do+    files <- filter ((==".nix") . takeExtension) <$> D.listDirectory testDir+    return $ testGroup "Eval comparison tests" $ map mkTestCase files+  where+    testDir = "tests/eval-compare"+    mkTestCase f = testCase f $ assertEvalFileMatchesNix (testDir </> f) -constantEqual :: NExpr -> NExpr -> Assertion+instance (Show r, Show (NValueF m r), Eq r) => Eq (NValueF m r) where+    NVConstantF x == NVConstantF y = x == y+    NVStrF x _ == NVStrF y _ = x == y+    NVListF x == NVListF y = and (zipWith (==) x y)+    NVSetF x _ == NVSetF y _ =+        M.keys x == M.keys y &&+        and (zipWith (==) (M.elems x) (M.elems y))+    x == y = error $ "Need to add comparison for values: "+                 ++ show x ++ " == " ++ show y++constantEqual :: NExprLoc -> NExprLoc -> Assertion constantEqual a b = do-    Fix (NVConstant a') <- evalExpr a (Fix (NVSet mempty))-    Fix (NVConstant b') <- evalExpr b (Fix (NVSet mempty))+    time <- liftIO getCurrentTime+    let opts = defaultOptions time+    -- putStrLn =<< lint (stripAnnotation a)+    a' <- runLazyM opts $ normalForm =<< nixEvalExprLoc Nothing a+    -- putStrLn =<< lint (stripAnnotation b)+    b' <- runLazyM opts $ normalForm =<< nixEvalExprLoc Nothing b     assertEqual "" a' b' -constantEqualStr :: String -> String -> Assertion-constantEqualStr a b =-  let Success a' = parseNixString a-      Success b' = parseNixString b-  in constantEqual a' b'+constantEqualText' :: Text -> Text -> Assertion+constantEqualText' a b = do+  let Success a' = parseNixTextLoc a+      Success b' = parseNixTextLoc b+  constantEqual a' b'++constantEqualText :: Text -> Text -> Assertion+constantEqualText a b = do+  constantEqualText' a b+  mres <- liftIO $ lookupEnv "MATCHING_TESTS"+  when (isJust mres) $+      assertEvalMatchesNix b
tests/Main.hs view
@@ -1,18 +1,104 @@-module Main where+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE OverloadedStrings #-} -import Test.Tasty+module Main where -import qualified ParserTests+import           Control.DeepSeq+import qualified Control.Exception as Exc+import           Control.Monad+import           Control.Monad.IO.Class+import           Data.Fix+import           Data.List (isInfixOf)+import           Data.Maybe (isJust, fromMaybe)+import           Data.String.Interpolate.IsString+import           Data.Text (unpack)+import           Data.Time import qualified EvalTests-import qualified ShorthandTests+import qualified Nix+import           Nix.Exec+import           Nix.Expr.Types+import           Nix.Options+import           Nix.Parser+import           Nix.Value+import qualified NixLanguageTests+import qualified ParserTests import qualified PrettyTests+import qualified PrettyParseTests+import           System.Directory+import           System.Environment+import           System.FilePath.Glob+import           System.Posix.Files+import           System.Process+import           Test.Tasty+import           Test.Tasty.HUnit -import Prelude (IO, ($))+cabalCorrectlyGenerated :: Assertion+cabalCorrectlyGenerated = do+  output <- readCreateProcess (shell "hpack") ""+  when ("modified manually" `isInfixOf` output) $+    errorWithoutStackTrace+      "Edit package.yaml and re-generate hnix.cabal by running \"hpack\"" +ensureLangTestsPresent :: Assertion+ensureLangTestsPresent = do+  exist <- fileExist "data/nix/tests/local.mk"+  unless exist $+    errorWithoutStackTrace $ unlines+      [ "Directory data/nix does not have any files."+      , "Did you forget to run"+          ++ " \"git submodule update --init --recursive\"?" ]++ensureNixpkgsCanParse :: Assertion+ensureNixpkgsCanParse =+  consider "default.nix" (parseNixFile "default.nix") $ \case+    Fix (NAbs (ParamSet params _ _) _) -> do+      let rev    = getString "rev" params+          sha256 = getString "sha256" params+      consider "fetchTarball expression" (pure $ parseNixTextLoc [i|+        builtins.fetchTarball {+          url    = "https://github.com/NixOS/nixpkgs/archive/#{rev}.tar.gz";+          sha256 = "#{sha256}";+        }|]) $ \expr -> do+        NVStr dir _ <- do+            time <- liftIO getCurrentTime+            runLazyM (defaultOptions time) $ Nix.nixEvalExprLoc Nothing expr+        files <- globDir1 (compile "**/*.nix") (unpack dir)+        forM_ files $ \file ->+          -- Parse and deepseq the resulting expression tree, to ensure the+          -- parser is fully executed.+          consider file (parseNixFileLoc file) $ Exc.evaluate . force+    v -> error $ "Unexpected parse from default.nix: " ++ show v+ where+  getExpr   k m = let Just (Just r) = lookup k m in r+  getString k m =+      let Fix (NStr (DoubleQuoted [Plain str])) = getExpr k m in str++  consider path action k = action >>= \case+    Failure err -> errorWithoutStackTrace $+      "Parsing " ++ path ++ " failed: " ++ show err+    Success expr -> k expr+ main :: IO ()-main = defaultMain $ testGroup "hnix"-  [ ParserTests.tests-  , EvalTests.tests-  , ShorthandTests.tests-  , PrettyTests.tests-  ]+main = do+  nixLanguageTests    <- NixLanguageTests.genTests+  evalComparisonTests <- EvalTests.genEvalCompareTests+  nixpkgsTestsEnv     <- lookupEnv "NIXPKGS_TESTS"+  prettyTestsEnv      <- lookupEnv "PRETTY_TESTS"++  pwd <- getCurrentDirectory+  setEnv "NIX_REMOTE" ("local?root=" ++ pwd ++ "/")++  defaultMain $ testGroup "hnix" $+    [ testCase "hnix.cabal correctly generated" cabalCorrectlyGenerated ] +++    [ ParserTests.tests+    , EvalTests.tests+    , PrettyTests.tests ] +++    [ PrettyParseTests.tests (read (fromMaybe "0" prettyTestsEnv)) ] +++    [ evalComparisonTests ] +++    [ testCase "Nix language tests present" ensureLangTestsPresent+    , nixLanguageTests ] +++    [ testCase "Nixpkgs parses without errors" ensureNixpkgsCanParse+      | isJust nixpkgsTestsEnv ]+
+ tests/NixLanguageTests.hs view
@@ -0,0 +1,159 @@+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}++module NixLanguageTests (genTests) where++import           Control.Arrow ((&&&))+import           Control.Exception+import           Control.Monad+import           Control.Monad.IO.Class+import           Control.Monad.ST+import           Data.List (delete, sort)+import           Data.List.Split (splitOn)+import           Data.Map (Map)+import qualified Data.Map as Map+import qualified Data.Text as Text+import qualified Data.Text.IO as Text+import           Data.Time+import           GHC.Exts+import           Nix.Lint+import           Nix.Options+import           Nix.Options.Parser+import           Nix.Parser+import           Nix.Pretty+import           Nix.Utils+import           Nix.XML+import qualified Options.Applicative as Opts+import           System.Environment+import           System.FilePath+import           System.FilePath.Glob (compile, globDir1)+import           Test.Tasty+import           Test.Tasty.HUnit+import           TestCommon++{-+From (git://nix)/tests/lang.sh we see that++    lang/parse-fail-*.nix -> parsing should fail+    lang/parse-okay-*.nix -> parsing should succeed+    lang/eval-fail-*.nix -> eval should fail++    lang/eval-okay-*.{nix,xml} -> eval should succeed,+        xml dump should be the same as the .xml+    lang/eval-okay-*.{nix,exp} -> eval should succeed,+        plain text output should be the same as the .exp+    lang/eval-okay-*.{nix,exp,flags} -> eval should succeed,+        plain text output should be the same as the .exp,+        pass the extra flags to nix-instantiate++    NIX_PATH=lang/dir3:lang/dir4 should be in the environment of all+        eval-okay-*.nix evaluations+    TEST_VAR=foo should be in all the environments # for eval-okay-getenv.nix+-}++groupBy :: Ord k => (v -> k) -> [v] -> Map k [v]+groupBy key = Map.fromListWith (++) . map (key &&& pure)++genTests :: IO TestTree+genTests = do+  testFiles <- sort+        -- jww (2018-05-07): Temporarily disable this test until #128 is fixed.+      . filter ((/= "eval-okay-path") . takeBaseName)+      . filter ((/= ".xml") . takeExtension)+      <$> globDir1 (compile "*-*-*.*") "data/nix/tests/lang"+  let testsByName = groupBy (takeFileName . dropExtensions) testFiles+  let testsByType = groupBy testType (Map.toList testsByName)+  let testGroups  = map mkTestGroup (Map.toList testsByType)+  return $ localOption (mkTimeout 2000000)+         $ testGroup "Nix (upstream) language tests" testGroups+  where+    testType (fullpath, _files) =+        take 2 $ splitOn "-" $ takeFileName fullpath+    mkTestGroup (kind, tests) =+        testGroup (unwords kind) $ map (mkTestCase kind) tests+    mkTestCase kind (basename, files) =+        testCase (takeFileName basename) $ do+            time <- liftIO getCurrentTime+            let opts = defaultOptions time+            case kind of+                ["parse", "okay"] -> assertParse opts $ the files+                ["parse", "fail"] -> assertParseFail opts $ the files+                ["eval", "okay"]  -> assertEval opts files+                ["eval", "fail"]  -> assertEvalFail $ the files+                _ -> error $ "Unexpected: " ++ show kind++assertParse :: Options -> FilePath -> Assertion+assertParse _opts file = parseNixFileLoc file >>= \case+  Success _expr -> return () -- pure $! runST $ void $ lint opts expr+  Failure err  ->+      assertFailure $ "Failed to parse " ++ file ++ ":\n" ++ show err++assertParseFail :: Options -> FilePath -> Assertion+assertParseFail opts file = do+    eres <- parseNixFileLoc file+    catch (case eres of+               Success expr -> do+                   _ <- pure $! runST $ void $ lint opts expr+                   assertFailure $ "Unexpected success parsing `"+                       ++ file ++ ":\nParsed value: " ++ show expr+               Failure _ -> return ()) $ \(_ :: SomeException) ->+        return ()++assertLangOk :: Options -> FilePath -> Assertion+assertLangOk opts file = do+  actual <- printNix <$> hnixEvalFile opts (file ++ ".nix")+  expected <- Text.readFile $ file ++ ".exp"+  assertEqual "" expected $ Text.pack (actual ++ "\n")++assertLangOkXml :: Options -> FilePath -> Assertion+assertLangOkXml opts file = do+  actual <- toXML <$> hnixEvalFile opts (file ++ ".nix")+  expected <- Text.readFile $ file ++ ".exp.xml"+  assertEqual "" expected $ Text.pack actual++assertEval :: Options -> [FilePath] -> Assertion+assertEval _opts files = do+    time <- liftIO getCurrentTime+    let opts = defaultOptions time+    case delete ".nix" $ sort $ map takeExtensions files of+        [] -> () <$ hnixEvalFile opts (name ++ ".nix")+        [".exp"] -> assertLangOk opts name+        [".exp.xml"] -> assertLangOkXml opts name+        [".exp.disabled"] -> return ()+        [".exp-disabled"] -> return ()+        [".exp", ".flags"] -> do+            liftIO $ unsetEnv "NIX_PATH"+            flags <- Text.readFile (name ++ ".flags")+            let flags' | Text.last flags == '\n' = Text.init flags+                       | otherwise = flags+            case Opts.execParserPure Opts.defaultPrefs (nixOptionsInfo time)+                     (fixup (map Text.unpack (Text.splitOn " " flags'))) of+                Opts.Failure err -> errorWithoutStackTrace $+                    "Error parsing flags from " ++ name ++ ".flags: "+                        ++ show err+                Opts.Success opts' ->+                    assertLangOk+                        (opts' { include = include opts' +++                                   [ "nix=../../../../data/nix/corepkgs"+                                   , "lang/dir4"+                                   , "lang/dir5" ] })+                        name+                Opts.CompletionInvoked _ -> error "unused"+        _ -> assertFailure $ "Unknown test type " ++ show files+  where+    name = "data/nix/tests/lang/"+        ++ the (map (takeFileName . dropExtensions) files)++    fixup ("--arg":x:y:rest) = "--arg":(x ++ "=" ++ y):fixup rest+    fixup ("--argstr":x:y:rest) = "--argstr":(x ++ "=" ++ y):fixup rest+    fixup (x:rest) = x:fixup rest+    fixup [] = []++assertEvalFail :: FilePath -> Assertion+assertEvalFail file = catch ?? (\(_ :: SomeException) -> return ()) $ do+  time <- liftIO getCurrentTime+  evalResult <- printNix <$> hnixEvalFile (defaultOptions time) file+  evalResult `seq` assertFailure $+      file ++ " should not evaluate.\nThe evaluation result was `"+           ++ evalResult ++ "`."
tests/ParserTests.hs view
@@ -1,131 +1,133 @@+{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}-module ParserTests (tests) where+{-# LANGUAGE RankNTypes #-} -import Data.Fix-import Data.Text (pack)-import Test.Tasty-import Test.Tasty.HUnit-import Test.Tasty.TH+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+{-# OPTIONS_GHC -Wno-missing-signatures -Wno-orphans #-} -import qualified Data.Map as Map+module ParserTests (tests) where +import Data.Fix+import Data.List.NonEmpty (NonEmpty(..))+import Data.Semigroup+import Data.String.Interpolate.IsString+import Data.Text (Text, unpack, pack) import Nix.Atoms import Nix.Expr import Nix.Parser-import Nix.StringOperations--import Prelude+import Nix.Pretty+import Test.Tasty+import Test.Tasty.HUnit+import Test.Tasty.TH+import Text.PrettyPrint.ANSI.Leijen hiding ((<$>), (<>)) -case_constant_int :: Assertion-case_constant_int = assertParseString "234" $ mkInt 234+case_constant_int = assertParseText "234" $ mkInt 234 -case_constant_bool :: Assertion case_constant_bool = do-  assertParseString "true" $ mkBool True-  assertParseString "false" $ mkBool False+  assertParseText "true" $ mkBool True+  assertParseText "false" $ mkBool False -case_constant_path :: Assertion+case_constant_bool_respects_attributes = do+  assertParseText "true-foo"  $ mkSym "true-foo"+  assertParseText "false-bar" $ mkSym "false-bar"+ case_constant_path = do-  assertParseString "./." $ mkPath False "./."-  assertParseString "./+-_/cdef/09ad+-" $ mkPath False "./+-_/cdef/09ad+-"-  assertParseString "/abc" $ mkPath False "/abc"-  assertParseString "../abc" $ mkPath False "../abc"-  assertParseString "<abc>" $ mkPath True "abc"-  assertParseString "<../cdef>" $ mkPath True "../cdef"-  assertParseString "a//b" $ mkOper2 NUpdate (mkSym "a") (mkSym "b")-  assertParseString "rec+def/cdef" $ mkPath False "rec+def/cdef"-  assertParseString "a/b//c/def//<g> < def/d" $ mkOper2 NLt+  assertParseText "./." $ mkPath False "./."+  assertParseText "./+-_/cdef/09ad+-" $ mkPath False "./+-_/cdef/09ad+-"+  assertParseText "/abc" $ mkPath False "/abc"+  assertParseText "../abc" $ mkPath False "../abc"+  assertParseText "<abc>" $ mkPath True "abc"+  assertParseText "<../cdef>" $ mkPath True "../cdef"+  assertParseText "a//b" $ mkOper2 NUpdate (mkSym "a") (mkSym "b")+  assertParseText "rec+def/cdef" $ mkPath False "rec+def/cdef"+  assertParseText "a/b//c/def//<g> < def/d" $ mkOper2 NLt     (mkOper2 NUpdate (mkPath False "a/b") $ mkOper2 NUpdate       (mkPath False "c/def") (mkPath True "g"))     (mkPath False "def/d")-  assertParseString "a'b/c" $ Fix $ NApp (mkSym "a'b") (mkPath False "/c")+  assertParseText "a'b/c" $ Fix $ NBinary NApp (mkSym "a'b") (mkPath False "/c")+  assertParseText "a/b" $ mkPath False "a/b"+  assertParseText "4/2" $ mkPath False "4/2"   assertParseFail "."   assertParseFail ".."   assertParseFail "/"   assertParseFail "a/"   assertParseFail "a/def/"+  assertParseFail "~"+  assertParseFail "~/"+  assertParseText "~/a" $ mkPath False "~/a"+  assertParseText "~/a/b" $ mkPath False "~/a/b" -case_constant_uri :: Assertion case_constant_uri = do-  assertParseString "a:a" $ mkUri "a:a"-  assertParseString "http://foo.bar" $ mkUri "http://foo.bar"-  assertParseString "a+de+.adA+-:%%%ads%5asdk&/" $ mkUri "a+de+.adA+-:%%%ads%5asdk&/"-  assertParseString "rec+def:c" $ mkUri "rec+def:c"-  assertParseString "f.foo:bar" $ mkUri "f.foo:bar"+  assertParseText "a:a" $ mkStr "a:a"+  assertParseText "http://foo.bar" $ mkStr "http://foo.bar"+  assertParseText "a+de+.adA+-:%%%ads%5asdk&/" $ mkStr "a+de+.adA+-:%%%ads%5asdk&/"+  assertParseText "rec+def:c" $ mkStr "rec+def:c"+  assertParseText "f.foo:bar" $ mkStr "f.foo:bar"   assertParseFail "http://foo${\"bar\"}"   assertParseFail ":bcdef"   assertParseFail "a%20:asda"   assertParseFail ".:adasd"   assertParseFail "+:acdcd" -case_simple_set :: Assertion case_simple_set = do-  assertParseString "{ a = 23; b = 4; }" $ Fix $ NSet-    [ NamedVar (mkSelector "a") $ mkInt 23-    , NamedVar (mkSelector "b") $ mkInt 4+  assertParseText "{ a = 23; b = 4; }" $ Fix $ NSet+    [ NamedVar (mkSelector "a") (mkInt 23) nullPos+    , NamedVar (mkSelector "b") (mkInt 4) nullPos     ]   assertParseFail "{ a = 23 }" -case_set_inherit :: Assertion case_set_inherit = do-  assertParseString "{ e = 3; inherit a b; }" $ Fix $ NSet-    [ NamedVar (mkSelector "e") $ mkInt 3-    , Inherit Nothing $ StaticKey <$> ["a", "b"]+  assertParseText "{ e = 3; inherit a b; }" $ Fix $ NSet+    [ NamedVar (mkSelector "e") (mkInt 3) nullPos+    , Inherit Nothing (StaticKey <$> ["a", "b"]) nullPos     ]-  assertParseString "{ inherit; }" $ Fix $ NSet [ Inherit Nothing [] ]+  assertParseText "{ inherit; }" $ Fix $ NSet [ Inherit Nothing [] nullPos ] -case_set_scoped_inherit :: Assertion-case_set_scoped_inherit = assertParseString "{ inherit (a) b c; e = 4; inherit(a)b c; }" $ Fix $ NSet-  [ Inherit (Just (mkSym "a")) $ StaticKey <$> ["b", "c"]-  , NamedVar (mkSelector "e") $ mkInt 4-  , Inherit (Just (mkSym "a")) $ StaticKey <$> ["b", "c"]+case_set_scoped_inherit = assertParseText "{ inherit (a) b c; e = 4; inherit(a)b c; }" $ Fix $ NSet+  [ Inherit (Just (mkSym "a")) (StaticKey <$> ["b", "c"]) nullPos+  , NamedVar (mkSelector "e") (mkInt 4) nullPos+  , Inherit (Just (mkSym "a")) (StaticKey <$> ["b", "c"]) nullPos   ] -case_set_rec :: Assertion-case_set_rec = assertParseString "rec { a = 3; b = a; }" $ Fix $ NRecSet-  [ NamedVar (mkSelector "a") $ mkInt 3-  , NamedVar (mkSelector "b") $ mkSym "a"+case_set_rec = assertParseText "rec { a = 3; b = a; }" $ Fix $ NRecSet+  [ NamedVar (mkSelector "a") (mkInt 3) nullPos+  , NamedVar (mkSelector "b") (mkSym "a") nullPos   ] -case_set_complex_keynames :: Assertion case_set_complex_keynames = do-  assertParseString "{ \"\" = null; }" $ Fix $ NSet-    [ NamedVar [DynamicKey (Plain "")] mkNull ]-  assertParseString "{ a.b = 3; a.c = 4; }" $ Fix $ NSet-    [ NamedVar [StaticKey "a", StaticKey "b"] $ mkInt 3-    , NamedVar [StaticKey "a", StaticKey "c"] $ mkInt 4+  assertParseText "{ \"\" = null; }" $ Fix $ NSet+    [ NamedVar (DynamicKey (Plain (DoubleQuoted [])) :| []) mkNull nullPos ]+  assertParseText "{ a.b = 3; a.c = 4; }" $ Fix $ NSet+    [ NamedVar (StaticKey "a" :| [StaticKey "b"]) (mkInt 3) nullPos+    , NamedVar (StaticKey "a" :| [StaticKey "c"]) (mkInt 4) nullPos     ]-  assertParseString "{ ${let a = \"b\"; in a} = 4; }" $ Fix $ NSet-    [ NamedVar [DynamicKey (Antiquoted letExpr)] $ mkInt 4 ]-  assertParseString "{ \"a${let a = \"b\"; in a}c\".e = 4; }" $ Fix $ NSet-    [ NamedVar [DynamicKey (Plain str), StaticKey "e"] $ mkInt 4 ]+  assertParseText "{ ${let a = \"b\"; in a} = 4; }" $ Fix $ NSet+    [ NamedVar (DynamicKey (Antiquoted letExpr) :| []) (mkInt 4) nullPos ]+  assertParseText "{ \"a${let a = \"b\"; in a}c\".e = 4; }" $ Fix $ NSet+    [ NamedVar (DynamicKey (Plain str) :| [StaticKey "e"]) (mkInt 4) nullPos ]  where-  letExpr = Fix $ NLet [ NamedVar (mkSelector "a") (mkStr "b") ] (mkSym "a")+  letExpr = Fix $ NLet [NamedVar (mkSelector "a") (mkStr "b") nullPos] (mkSym "a")   str = DoubleQuoted [Plain "a", Antiquoted letExpr, Plain "c"] -case_set_inherit_direct :: Assertion-case_set_inherit_direct = assertParseString "{ inherit ({a = 3;}); }" $ Fix $ NSet-  [ flip Inherit [] $ Just $ Fix $ NSet [NamedVar (mkSelector "a") $ mkInt 3]+case_set_inherit_direct = assertParseText "{ inherit ({a = 3;}); }" $ Fix $ NSet+  [ Inherit (Just $ Fix $ NSet [NamedVar (mkSelector "a") (mkInt 3) nullPos]) [] nullPos   ] -case_inherit_selector :: Assertion case_inherit_selector = do-  assertParseString "{ inherit \"a\"; }" $ Fix $ NSet-    [Inherit Nothing [DynamicKey (Plain "a")]]+  assertParseText "{ inherit \"a\"; }" $ Fix $ NSet+    [Inherit Nothing [DynamicKey (Plain (DoubleQuoted [Plain "a"]))] nullPos]   assertParseFail "{ inherit a.x; }" -case_int_list :: Assertion-case_int_list = assertParseString "[1 2 3]" $ Fix $ NList+case_int_list = assertParseText "[1 2 3]" $ Fix $ NList   [ mkInt i | i <- [1,2,3] ] -case_int_null_list :: Assertion-case_int_null_list = assertParseString "[1 2 3 null 4]" $ Fix (NList (map (Fix . NConstant) [NInt 1, NInt 2, NInt 3, NNull, NInt 4]))+case_int_null_list = assertParseText "[1 2 3 null 4]" $ Fix (NList (map (Fix . NConstant) [NInt 1, NInt 2, NInt 3, NNull, NInt 4])) -case_mixed_list :: Assertion case_mixed_list = do-  assertParseString "[{a = 3;}.a (if true then null else false) null false 4 [] c.d or null]" $ Fix $ NList-    [ Fix (NSelect (Fix (NSet [NamedVar (mkSelector "a") (mkInt 3)])) (mkSelector "a") Nothing)+  assertParseText "[{a = 3;}.a (if true then null else false) null false 4 [] c.d or null]" $ Fix $ NList+    [ Fix (NSelect (Fix (NSet [NamedVar (mkSelector "a") (mkInt 3) nullPos]))+                   (mkSelector "a") Nothing)     , Fix (NIf (mkBool True) mkNull (mkBool False))     , mkNull, mkBool False, mkInt 4, Fix (NList [])     , Fix (NSelect (mkSym "c") (mkSelector "d") (Just mkNull))@@ -135,161 +137,156 @@   assertParseFail "[a : a]"   assertParseFail "[${\"test\")]" -case_simple_lambda :: Assertion-case_simple_lambda = assertParseString "a: a" $ Fix $ NAbs (Param "a") (mkSym "a")+case_simple_lambda = assertParseText "a: a" $ Fix $ NAbs (Param "a") (mkSym "a") -case_lambda_or_uri :: Assertion case_lambda_or_uri = do-  assertParseString "a :b" $ Fix $ NAbs (Param "a") (mkSym "b")-  assertParseString "a c:def" $ Fix $ NApp (mkSym "a") (mkUri "c:def")-  assertParseString "c:def: c" $ Fix $ NApp (mkUri "c:def:") (mkSym "c")-  assertParseString "a:{}" $ Fix $ NAbs (Param "a") $ Fix $ NSet []-  assertParseString "a:[a]" $ Fix $ NAbs (Param "a") $ Fix $ NList [mkSym "a"]+  assertParseText "a :b" $ Fix $ NAbs (Param "a") (mkSym "b")+  assertParseText "a c:def" $ Fix $ NBinary NApp (mkSym "a") (mkStr "c:def")+  assertParseText "c:def: c" $ Fix $ NBinary NApp (mkStr "c:def:") (mkSym "c")+  assertParseText "a:{}" $ Fix $ NAbs (Param "a") $ Fix $ NSet []+  assertParseText "a:[a]" $ Fix $ NAbs (Param "a") $ Fix $ NList [mkSym "a"]   assertParseFail "def:" -case_lambda_pattern :: Assertion case_lambda_pattern = do-  assertParseString "{b, c ? 1}: b" $+  assertParseText "{b, c ? 1}: b" $     Fix $ NAbs (fixed args Nothing) (mkSym "b")-  assertParseString "{ b ? x: x  }: b" $+  assertParseText "{ b ? x: x  }: b" $     Fix $ NAbs (fixed args2 Nothing) (mkSym "b")-  assertParseString "a@{b,c ? 1}: b" $+  assertParseText "a@{b,c ? 1}: b" $     Fix $ NAbs (fixed args (Just "a")) (mkSym "b")-  assertParseString "{b,c?1}@a: c" $+  assertParseText "{b,c?1}@a: c" $     Fix $ NAbs (fixed args (Just "a")) (mkSym "c")-  assertParseString "{b,c?1,...}@a: c" $+  assertParseText "{b,c?1,...}@a: c" $     Fix $ NAbs (variadic vargs (Just "a")) (mkSym "c")-  assertParseString "{...}: 1" $+  assertParseText "{...}: 1" $     Fix $ NAbs (variadic mempty Nothing) (mkInt 1)   assertParseFail "a@b: a"   assertParseFail "{a}@{b}: a"  where-  fixed args mname = ParamSet (FixedParamSet args) mname-  variadic args mname = ParamSet (VariadicParamSet args) mname-  args = Map.fromList [("b", Nothing), ("c", Just $ mkInt 1)]-  vargs = Map.fromList [("b", Nothing), ("c", Just $ mkInt 1)]-  args2 = Map.fromList [("b", Just lam)]+  fixed args = ParamSet args False+  variadic args = ParamSet args True+  args = [("b", Nothing), ("c", Just $ mkInt 1)]+  vargs = [("b", Nothing), ("c", Just $ mkInt 1)]+  args2 = [("b", Just lam)]   lam = Fix $ NAbs (Param "x") (mkSym "x") -case_lambda_app_int :: Assertion-case_lambda_app_int = assertParseString "(a: a) 3" $ Fix (NApp lam int) where+case_lambda_app_int = assertParseText "(a: a) 3" $ Fix (NBinary NApp lam int) where   int = mkInt 3   lam = Fix (NAbs (Param "a") asym)   asym = mkSym "a" -case_simple_let :: Assertion case_simple_let = do-  assertParseString "let a = 4; in a" $ Fix (NLet binds $ mkSym "a")+  assertParseText "let a = 4; in a" $ Fix (NLet binds $ mkSym "a")   assertParseFail "let a = 4 in a"  where-  binds = [NamedVar (mkSelector "a") $ mkInt 4]+  binds = [NamedVar (mkSelector "a") (mkInt 4) nullPos] -case_nested_let :: Assertion+case_let_body = assertParseText "let { body = 1; }" letBody+  where+    letBody = Fix $ NSelect aset (mkSelector "body") Nothing+    aset = Fix $ NRecSet [NamedVar (mkSelector "body") (mkInt 1) nullPos]+ case_nested_let = do-  assertParseString "let a = 4; in let b = 5; in a" $ Fix $ NLet-    [ NamedVar (mkSelector "a") $ mkInt 4 ]-    (Fix $ NLet [NamedVar (mkSelector "b") $ mkInt 5] $ mkSym "a")+  assertParseText "let a = 4; in let b = 5; in a" $ Fix $ NLet+    [NamedVar (mkSelector "a") (mkInt 4) nullPos]+    (Fix $ NLet [NamedVar (mkSelector "b") (mkInt 5) nullPos] $ mkSym "a")   assertParseFail "let a = 4; let b = 3; in b" -case_let_scoped_inherit :: Assertion case_let_scoped_inherit = do-  assertParseString "let a = null; inherit (b) c; in c" $ Fix $ NLet-    [ NamedVar (mkSelector "a") mkNull-    , Inherit (Just $ mkSym "b") [StaticKey "c"] ]+  assertParseText "let a = null; inherit (b) c; in c" $ Fix $ NLet+    [ NamedVar (mkSelector "a") mkNull nullPos+    , Inherit (Just $ mkSym "b") [StaticKey "c"] nullPos ]     (mkSym "c")   assertParseFail "let inherit (b) c in c" -case_if :: Assertion case_if = do-  assertParseString "if true then true else false" $ Fix $ NIf (mkBool True) (mkBool True) (mkBool False)+  assertParseText "if true then true else false" $+      Fix $ NIf (mkBool True) (mkBool True) (mkBool False)   assertParseFail "if true then false"   assertParseFail "else"   assertParseFail "if true then false else"   assertParseFail "if true then false else false else"   assertParseFail "1 + 2 then" -case_identifier_special_chars :: Assertion case_identifier_special_chars = do-  assertParseString "_a" $ mkSym "_a"-  assertParseString "a_b" $ mkSym "a_b"-  assertParseString "a'b" $ mkSym "a'b"-  assertParseString "a''b" $ mkSym "a''b"-  assertParseString "a-b" $ mkSym "a-b"-  assertParseString "a--b" $ mkSym "a--b"-  assertParseString "a12a" $ mkSym "a12a"+  assertParseText "_a" $ mkSym "_a"+  assertParseText "a_b" $ mkSym "a_b"+  assertParseText "a'b" $ mkSym "a'b"+  assertParseText "a''b" $ mkSym "a''b"+  assertParseText "a-b" $ mkSym "a-b"+  assertParseText "a--b" $ mkSym "a--b"+  assertParseText "a12a" $ mkSym "a12a"   assertParseFail ".a"   assertParseFail "'a" -case_identifier_keyword_prefix :: Assertion case_identifier_keyword_prefix = do-  assertParseString "true-name" $ mkSym "true-name"-  assertParseString "trueName" $ mkSym "trueName"-  assertParseString "null-name" $ mkSym "null-name"-  assertParseString "nullName" $ mkSym "nullName"-  assertParseString "[ null-name ]" $ mkList [ mkSym "null-name" ]+  assertParseText "true-name" $ mkSym "true-name"+  assertParseText "trueName" $ mkSym "trueName"+  assertParseText "null-name" $ mkSym "null-name"+  assertParseText "nullName" $ mkSym "nullName"+  assertParseText "[ null-name ]" $ mkList [ mkSym "null-name" ] -makeStringParseTest :: String -> Assertion-makeStringParseTest str = assertParseString ("\"" ++ str ++ "\"") $ mkStr $ pack str+makeTextParseTest str = assertParseText ("\"" <> str <> "\"") $ mkStr str -case_simple_string :: Assertion-case_simple_string = mapM_ makeStringParseTest ["abcdef", "a", "A", "   a a  ", ""]+case_simple_string = mapM_ makeTextParseTest ["abcdef", "a", "A", "   a a  ", ""] -case_string_dollar :: Assertion-case_string_dollar = mapM_ makeStringParseTest ["a$b", "a$$b", "$cdef", "gh$i"]+case_string_dollar = mapM_ makeTextParseTest ["a$b", "a$$b", "$cdef", "gh$i"] -case_string_escape :: Assertion case_string_escape = do-  assertParseString "\"\\$\\n\\t\\r\\\\\"" $ mkStr "$\n\t\r\\"-  assertParseString "\" \\\" \\' \"" $ mkStr " \" ' "+  assertParseText "\"\\$\\n\\t\\r\\\\\"" $ mkStr "$\n\t\r\\"+  assertParseText "\" \\\" \\' \"" $ mkStr " \" ' " -case_string_antiquote :: Assertion case_string_antiquote = do-  assertParseString "\"abc${  if true then \"def\" else \"abc\"  } g\"" $+  assertParseText "\"abc${  if true then \"def\" else \"abc\"  } g\"" $     Fix $ NStr $ DoubleQuoted       [ Plain "abc"       , Antiquoted $ Fix $ NIf (mkBool True) (mkStr "def") (mkStr "abc")       , Plain " g"       ]-  assertParseString "\"\\${a}\"" $ mkStr "${a}"+  assertParseText "\"\\${a}\"" $ mkStr "${a}"   assertParseFail "\"a"   assertParseFail "${true}"   assertParseFail "\"${true\"" -case_select :: Assertion case_select = do-  assertParseString "a .  e .di. f" $ Fix $ NSelect (mkSym "a")-    [ StaticKey "e", StaticKey "di", StaticKey "f" ]+  assertParseText "a .  e .di. f" $ Fix $ NSelect (mkSym "a")+    (StaticKey "e" :| [StaticKey "di", StaticKey "f"])     Nothing-  assertParseString "a.e . d    or null" $ Fix $ NSelect (mkSym "a")-    [ StaticKey "e", StaticKey "d" ]+  assertParseText "a.e . d    or null" $ Fix $ NSelect (mkSym "a")+    (StaticKey "e" :| [StaticKey "d"])     (Just mkNull)-  assertParseString "{}.\"\"or null" $ Fix $ NSelect (Fix (NSet []))-    [ DynamicKey (Plain "") ] (Just mkNull)+  assertParseText "{}.\"\"or null" $ Fix $ NSelect (Fix (NSet []))+    (DynamicKey (Plain (DoubleQuoted [])) :| []) (Just mkNull)+  assertParseText "{ a = [1]; }.a or [2] ++ [3]" $ Fix $ NBinary NConcat+      (Fix (NSelect+                (Fix (NSet [NamedVar (StaticKey "a" :| [])+                                     (Fix (NList [Fix (NConstant (NInt 1))]))+                                     nullPos]))+                (StaticKey "a" :| [])+                (Just (Fix (NList [Fix (NConstant (NInt 2))])))))+      (Fix (NList [Fix (NConstant (NInt 3))])) -case_select_path :: Assertion case_select_path = do-  assertParseString "f ./." $ Fix $ NApp (mkSym "f") (mkPath False "./.")-  assertParseString "f.b ../a" $ Fix $ NApp select (mkPath False "../a")-  assertParseString "{}./def" $ Fix $ NApp (Fix (NSet [])) (mkPath False "./def")-  assertParseString "{}.\"\"./def" $ Fix $ NApp-    (Fix $ NSelect (Fix (NSet [])) [DynamicKey (Plain "")] Nothing)+  assertParseText "f ./." $ Fix $ NBinary NApp (mkSym "f") (mkPath False "./.")+  assertParseText "f.b ../a" $ Fix $ NBinary NApp select (mkPath False "../a")+  assertParseText "{}./def" $ Fix $ NBinary NApp (Fix (NSet [])) (mkPath False "./def")+  assertParseText "{}.\"\"./def" $ Fix $ NBinary NApp+    (Fix $ NSelect (Fix (NSet [])) (DynamicKey (Plain (DoubleQuoted [])) :| []) Nothing)     (mkPath False "./def")  where select = Fix $ NSelect (mkSym "f") (mkSelector "b") Nothing -case_fun_app :: Assertion case_fun_app = do-  assertParseString "f a b" $ Fix $ NApp (Fix $ NApp (mkSym "f") (mkSym "a")) (mkSym "b")-  assertParseString "f a.x or null" $ Fix $ NApp (mkSym "f") $ Fix $+  assertParseText "f a b" $ Fix $ NBinary NApp (Fix $ NBinary NApp (mkSym "f") (mkSym "a")) (mkSym "b")+  assertParseText "f a.x or null" $ Fix $ NBinary NApp (mkSym "f") $ Fix $     NSelect (mkSym "a") (mkSelector "x") (Just mkNull)   assertParseFail "f if true then null else null" -case_indented_string :: Assertion case_indented_string = do-  assertParseString "''a''" $ mkIndentedStr "a"-  assertParseString "''\n  foo\n  bar''" $ mkIndentedStr "foo\nbar"-  assertParseString "''        ''" $ mkIndentedStr ""-  assertParseString "'''''''" $ mkIndentedStr "''"-  assertParseString "''   ${null}\n   a${null}''" $ Fix $ NStr $ Indented+  assertParseText "''a''" $ mkIndentedStr 0 "a"+  assertParseText "''\n  foo\n  bar''" $ mkIndentedStr 2 "foo\nbar"+  assertParseText "''        ''" $ mkIndentedStr 0 ""+  assertParseText "'''''''" $ mkIndentedStr 0 "''"+  assertParseText "''   ${null}\n   a${null}''" $ Fix $ NStr $ Indented 3     [ Antiquoted mkNull     , Plain "\na"     , Antiquoted mkNull@@ -297,58 +294,106 @@   assertParseFail "'''''"   assertParseFail "''   '" -case_indented_string_escape :: Assertion-case_indented_string_escape = assertParseString+case_indented_string_escape = assertParseText   "'' ''\\n ''\\t ''\\\\ ''${ \\ \\n ' ''' ''" $-  mkIndentedStr  "\n \t \\ ${ \\ \\n ' '' "+  mkIndentedStr 1 "\n \t \\ ${ \\ \\n ' '' " -case_operator_fun_app :: Assertion case_operator_fun_app = do-  assertParseString "a ++ b" $ mkOper2 NConcat (mkSym "a") (mkSym "b")-  assertParseString "a ++ f b" $ mkOper2 NConcat (mkSym "a") $ Fix $ NApp+  assertParseText "a ++ b" $ mkOper2 NConcat (mkSym "a") (mkSym "b")+  assertParseText "a ++ f b" $ mkOper2 NConcat (mkSym "a") $ Fix $ NBinary NApp     (mkSym "f") (mkSym "b") -case_operators :: Assertion case_operators = do-  assertParseString "1 + 2 - 3" $ mkOper2 NMinus+  assertParseText "1 + 2 - 3" $ mkOper2 NMinus     (mkOper2 NPlus (mkInt 1) (mkInt 2)) (mkInt 3)   assertParseFail "1 + if true then 1 else 2"-  assertParseString "1 + (if true then 2 else 3)" $ mkOper2 NPlus (mkInt 1) $ Fix $ NIf+  assertParseText "1 + (if true then 2 else 3)" $ mkOper2 NPlus (mkInt 1) $ Fix $ NIf    (mkBool True) (mkInt 2) (mkInt 3)-  assertParseString "{ a = 3; } // rec { b = 4; }" $ mkOper2 NUpdate-    (Fix $ NSet [NamedVar (mkSelector "a") (mkInt 3)])-    (Fix $ NRecSet [NamedVar (mkSelector "b") (mkInt 4)])-  assertParseString "--a" $ mkOper NNeg $ mkOper NNeg $ mkSym "a"-  assertParseString "a - b - c" $ mkOper2 NMinus+  assertParseText "{ a = 3; } // rec { b = 4; }" $ mkOper2 NUpdate+    (Fix $ NSet [NamedVar (mkSelector "a") (mkInt 3) nullPos])+    (Fix $ NRecSet [NamedVar (mkSelector "b") (mkInt 4) nullPos])+  assertParseText "--a" $ mkOper NNeg $ mkOper NNeg $ mkSym "a"+  assertParseText "a - b - c" $ mkOper2 NMinus     (mkOper2 NMinus (mkSym "a") (mkSym "b")) $     mkSym "c"-  assertParseString "foo<bar" $ mkOper2 NLt (mkSym "foo") (mkSym "bar")+  assertParseText "foo<bar" $ mkOper2 NLt (mkSym "foo") (mkSym "bar")   assertParseFail "+ 3"   assertParseFail "foo +" -case_comments :: Assertion case_comments = do   Success expected <- parseNixFile "data/let.nix"   assertParseFile "let-comments-multiline.nix" expected   assertParseFile "let-comments.nix" expected +case_select_or_precedence =+    assertParsePrint [i|let+  matchDef = def:   matcher:+                      v:   let+                             case = builtins.head (builtins.attrNames v);+                           in (matcher.case or def case) (v.case);+in null|] [i|let+  matchDef = def:+    matcher:+      v:+        let+          case = builtins.head (builtins.attrNames v);+        in (matcher.case or def) case (v.case);+in null|]++case_select_or_precedence2 =+    assertParsePrint [i|let+  matchDef = def:   matcher:+                      v:   let+                             case = builtins.head (builtins.attrNames v);+                           in (matcher.case or null.foo) (v.case);+in null|] [i|let+  matchDef = def:+    matcher:+      v:+        let+          case = builtins.head (builtins.attrNames v);+        in (matcher.case or null).foo (v.case);+in null|]+ tests :: TestTree tests = $testGroupGenerator  ---------------------------------------------------------------------------------assertParseString :: String -> NExpr -> Assertion-assertParseString str expected = case parseNixString str of-  Success actual -> assertEqual ("When parsing " ++ str) expected actual-  Failure err    -> assertFailure $ "Unexpected error parsing `" ++ str ++ "':\n" ++ show err +assertParseText :: Text -> NExpr -> Assertion+assertParseText str expected = case parseNixText str of+  Success actual ->+      assertEqual ("When parsing " ++ unpack str)+          (stripPositionInfo expected) (stripPositionInfo actual)+  Failure err    ->+      assertFailure $ "Unexpected error parsing `" ++ unpack str ++ "':\n" ++ show err+ assertParseFile :: FilePath -> NExpr -> Assertion assertParseFile file expected = do   res <- parseNixFile $ "data/" ++ file   case res of-    Success actual -> assertEqual ("Parsing data file " ++ file) expected actual-    Failure err    -> assertFailure $ "Unexpected error parsing data file `" ++ file ++ "':\n" ++ show err+    Success actual -> assertEqual ("Parsing data file " ++ file)+          (stripPositionInfo expected) (stripPositionInfo actual)+    Failure err    ->+        assertFailure $ "Unexpected error parsing data file `"+            ++ file ++ "':\n" ++ show err -assertParseFail :: String -> Assertion-assertParseFail str = case parseNixString str of+assertParseFail :: Text -> Assertion+assertParseFail str = case parseNixText str of   Failure _ -> return ()-  Success r -> assertFailure $ "Unexpected success parsing `" ++ str ++ ":\nParsed value: " ++ show r+  Success r ->+      assertFailure $ "Unexpected success parsing `"+          ++ unpack str ++ ":\nParsed value: " ++ show r++-- assertRoundTrip :: Text -> Assertion+-- assertRoundTrip src = assertParsePrint src src++assertParsePrint :: Text -> Text -> Assertion+assertParsePrint src expect =+  let Success expr = parseNixTextLoc src+      result = displayS+             . renderPretty 0.4 80+             . prettyNix+             . stripAnnotation+             $ expr+  in assertEqual "" expect (pack (result ""))
+ tests/PrettyParseTests.hs view
@@ -0,0 +1,244 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MonoLocalBinds #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE UndecidableInstances #-}++{-# OPTIONS -Wno-orphans#-}++module PrettyParseTests  where++import           Control.Monad+import           Data.Algorithm.Diff+import           Data.Algorithm.DiffOutput+import           Data.Char+import           Data.Fix+import qualified Data.List.NonEmpty as NE+import           Data.Text (Text, pack)+import           Generic.Random+import           Nix.Atoms+import           Nix.Expr+import           Nix.Parser+import           Nix.Pretty+import           Test.QuickCheck.Instances.Semigroup ()+import           Test.QuickCheck.Instances.Text ()+import qualified Test.QuickCheck.Property as P+import           Test.Tasty+import           Test.Tasty.QuickCheck hiding (Success, Failure)+import           Text.Megaparsec (Pos, SourcePos, mkPos)+import           Text.PrettyPrint.ANSI.Leijen ((</>), text)+import qualified Text.PrettyPrint.ANSI.Leijen as P+import qualified Text.Show.Pretty as PS++-- Instead of using the Generic arbitrary instance (which doesn't exist anyway+-- for Text), we use a different generator which just prints sensible looking+-- variable names+custom :: GenList '[Text]+custom = asciiText :@ Nil++asciiString :: Gen String+asciiString = do+  n <- choose (1, 15)+  replicateM n (elements ['a'..'z'])++asciiText :: Gen Text+asciiText = pack <$> asciiString++pcustom :: GenList '[Pos]+pcustom = arbitrary :@ Nil++-- | This generator generates selects one of the constructors uniformly and+--   also decreases the size of the generator by dividing by the branching+--   factor. This ensures sensible termination.+genArb :: (GArbitrary (Options 'Sized '[Text]) a, GUniformWeight a) =>  Gen a+genArb = genericArbitraryWith (setGenerators custom sizedOpts) uniform++-- Might want to replace this instance with a constant value+instance Arbitrary Pos where+  arbitrary = mkPos <$> (getSmall <$> arbitrary `suchThat` (> 0))++instance Arbitrary (f (Fix f)) => Arbitrary (Fix f) where+  arbitrary = genArb++instance Arbitrary f => Arbitrary (NString f) where+  arbitrary = genArb++instance Arbitrary SourcePos where+  arbitrary = genericArbitraryWith (setGenerators pcustom sizedOpts) uniform++instance Arbitrary f => Arbitrary (Binding f) where+  arbitrary = genArb++instance Arbitrary f => Arbitrary (NKeyName f) where+  arbitrary = oneof [ DynamicKey <$> arbitrary+                    , StaticKey <$> asciiText ]++instance Arbitrary f => Arbitrary (Params f) where+  arbitrary =+      oneof [ Param    <$> asciiText+            , ParamSet <$> listOf ((,) <$> asciiText <*> arbitrary) <*> arbitrary+                       <*> oneof [pure Nothing, Just <$> asciiText]+            ]++instance Arbitrary NAtom where+  arbitrary =+      oneof [ NInt   <$> arbitrary `suchThat` (>= 0)+            , NFloat <$> arbitrary `suchThat` (>= 0)+            , NBool  <$> arbitrary+            , pure NNull ]++instance Arbitrary NUnaryOp where+  arbitrary = genArb++instance Arbitrary NBinaryOp where+  arbitrary = genArb++instance (Arbitrary f) => Arbitrary (Antiquoted Text f) where+  arbitrary = genArb++instance (Arbitrary f) => Arbitrary (Antiquoted (NString f) f) where+  arbitrary = genArb++-- This is written by hand so we can use `fairList` rather than the normal+-- list Arbitrary instance which makes the generator terminate. The+-- distribution is not scientifically chosen.+instance Arbitrary f => Arbitrary (NExprF f) where+  arbitrary =+    sized $ \n ->+        if n < 2+          then oneof [genConstant, genStr, genSym, genLiteralPath, genEnvPath ]+          else+            frequency+              [ ( 1, genConstant)+              , ( 1, genSym)+              , ( 4, resize (n `div` 3) genIf)+              , (10, genRecSet )+              , (20, genSet )+              , ( 5, genList )+              , ( 2, genUnary )+              , ( 2, resize (n `div` 3) genBinary )+              , ( 3, resize (n `div` 3) genSelect )+              , (20, resize (n `div` 2) genAbs )+              , ( 2, resize (n `div` 2) genHasAttr )+              , (10, resize (n `div` 2) genLet )+              , (10, resize (n `div` 2) genWith )+              , ( 1, resize (n `div` 2) genAssert)+              ]+   where+    genConstant    = NConstant    <$> arbitrary+    genStr         = NStr         <$> arbitrary+    genSym         = NSym         <$> asciiText+    genList        = NList        <$> fairList arbitrary+    genSet         = NSet         <$> fairList arbitrary+    genRecSet      = NRecSet      <$> fairList arbitrary+    genLiteralPath = NLiteralPath . ("./" ++) <$> asciiString+    genEnvPath     = NEnvPath     <$> asciiString+    genUnary       = NUnary       <$> arbitrary <*> arbitrary+    genBinary      = NBinary      <$> arbitrary <*> arbitrary <*> arbitrary+    genSelect      = NSelect      <$> arbitrary <*> arbitrary <*> arbitrary+    genHasAttr     = NHasAttr     <$> arbitrary <*> arbitrary+    genAbs         = NAbs         <$> arbitrary <*> arbitrary+    genLet         = NLet         <$> fairList arbitrary <*> arbitrary+    genIf          = NIf          <$> arbitrary <*> arbitrary <*> arbitrary+    genWith        = NWith        <$> arbitrary <*> arbitrary+    genAssert      = NAssert      <$> arbitrary <*> arbitrary++-- | Useful when there are recursive positions at each element of the list as+--   it divides the size by the length of the generated list.+fairList :: Gen a -> Gen [a]+fairList g = do+  s <- getSize+  k <- choose (0, s)+  -- Use max here to avoid dividing by zero when there is the empty list+  resize (s `div` max 1 k) $ vectorOf k g++equivUpToNormalization :: NExpr -> NExpr -> Bool+equivUpToNormalization x y = normalize x == normalize y++normalize :: NExpr -> NExpr+normalize = cata $ \case+  NConstant (NInt n)   | n < 0 -> Fix (NUnary NNeg (Fix (NConstant (NInt (negate n)))))+  NConstant (NFloat n) | n < 0 -> Fix (NUnary NNeg (Fix (NConstant (NFloat (negate n)))))++  NSet binds      -> Fix (NSet (map normBinding binds))+  NRecSet binds   -> Fix (NRecSet (map normBinding binds))+  NLet binds r    -> Fix (NLet (map normBinding binds) r)++  NAbs params r   -> Fix (NAbs (normParams params) r)++  r               -> Fix r++ where+  normBinding (NamedVar path r pos) = NamedVar (NE.map normKey path) r pos+  normBinding (Inherit mr names pos) = Inherit mr (map normKey names) pos++  normKey (DynamicKey quoted) = DynamicKey (normAntiquotedString quoted)+  normKey (StaticKey name) = StaticKey name++  normAntiquotedString :: Antiquoted (NString NExpr) NExpr+                       -> Antiquoted (NString NExpr) NExpr+  normAntiquotedString (Plain (DoubleQuoted [EscapedNewline])) =+      EscapedNewline+  normAntiquotedString (Plain (DoubleQuoted strs)) =+      let strs' = map normAntiquotedText strs+      in if strs == strs'+         then Plain (DoubleQuoted strs)+         else normAntiquotedString (Plain (DoubleQuoted strs'))+  normAntiquotedString r = r++  normAntiquotedText :: Antiquoted Text NExpr -> Antiquoted Text NExpr+  normAntiquotedText (Plain "\n")   = EscapedNewline+  normAntiquotedText (Plain "''\n") = EscapedNewline+  normAntiquotedText r = r++  normParams (ParamSet binds var (Just "")) = ParamSet binds var Nothing+  normParams r = r++-- | Test that parse . pretty == id up to attribute position information.+prop_prettyparse :: NExpr -> P.Result+prop_prettyparse p =+  let prog = show (pretty p)+  in case parse (pack prog) of+    Failure s -> P.rejected+        { P.reason = show $+            text "Parse failed:" </> text (show s)+              P.<$> P.indent 2 (pretty p) }+    Success v+        | equivUpToNormalization p v -> P.succeeded+        | otherwise ->+          let pp = normalise prog+              pv = normalise (show (pretty v))+          in (P.liftBool (pp == pv))+            { P.reason = show $+                      text "----------------------------------------"+                P.<$> text "Expr before:" P.<$> P.indent 2 (text (PS.ppShow p))+                P.<$> text "----------------------------------------"+                P.<$> text "Expr after:"  P.<$> P.indent 2 (text (PS.ppShow v))+                P.<$> text "----------------------------------------"+                P.<$> text "Pretty before:" P.<$> P.indent 2 (text prog)+                P.<$> text "----------------------------------------"+                P.<$> text "Pretty after:"  P.<$> P.indent 2 (pretty v)+                P.<$> text "----------------------------------------"+                P.<$> text "Normalised before:" P.<$> P.indent 2 (text pp)+                P.<$> text "----------------------------------------"+                P.<$> text "Normalised after:"  P.<$> P.indent 2 (text pv)+                P.<$> text "========================================"+                P.<$> text "Normalised diff:"+                P.<$> text (ppDiff (diff pp pv))+                P.<$> text "========================================"+            }+  where+    pretty = prettyNix+    parse  = parseNixText++    normalise = unlines . map (reverse . dropWhile isSpace . reverse) . lines++    diff :: String -> String -> [Diff [String]]+    diff s1 s2 = getDiff (map (:[]) (lines s1)) (map (:[]) (lines s2))++tests :: Int -> TestTree+tests n = testProperty "Pretty/Parse Property" $+    withMaxSuccess n prop_prettyparse
tests/PrettyTests.hs view
@@ -11,14 +11,23 @@  case_indented_antiquotation :: Assertion case_indented_antiquotation = do-    assertPretty (mkIndentedStr "echo $foo") "''echo $foo''"-    assertPretty (mkIndentedStr "echo ${foo}") "''echo ''${foo}''"+    assertPretty (mkIndentedStr 0 "echo $foo") "''echo $foo''"+    assertPretty (mkIndentedStr 0 "echo ${foo}") "''echo ''${foo}''"  case_string_antiquotation :: Assertion case_string_antiquotation = do-    -- TODO: plain $ doesn't need to be escaped here either     assertPretty (mkStr "echo $foo") "\"echo \\$foo\""     assertPretty (mkStr "echo ${foo}") "\"echo \\${foo}\""++case_function_params :: Assertion+case_function_params =+    assertPretty (mkFunction (mkParamset [] True) (mkInt 3)) "{ ... }:\n  3"++case_paths :: Assertion+case_paths = do+    assertPretty (mkPath False "~/test.nix") "~/test.nix"+    assertPretty (mkPath False "/test.nix") "/test.nix"+    assertPretty (mkPath False "./test.nix") "./test.nix"  tests :: TestTree tests = $testGroupGenerator
− tests/ShorthandTests.hs
@@ -1,39 +0,0 @@-{-# LANGUAGE TemplateHaskell, OverloadedStrings #-}-module ShorthandTests (tests) where--import Prelude--import Test.Tasty-import Test.Tasty.HUnit-import Test.Tasty.TH--import Control.Monad (forM_)-import Data.Monoid ((<>))-import Data.Fix--import Nix.Expr---case_mkDotsSymbolEscaping :: Assertion-case_mkDotsSymbolEscaping = do-  let check xs errmsg assert =-        forM_ xs $ \x -> assertBool (errmsg <> ": " <> show x) $ assert x-  check plain "not a plain value" $ assertIsSingle-  check nonPlain "not a non-plain value" $ not . assertIsSingle-  where-    plain = [ "abc09", "_A_'-", "AbC" ]-    nonPlain = [ "abc def", "\\", "'abc", "\"", "-foo", "a.b.c" ]-    assertIsSingle = isPlainSingle . getKey . mkDot "dummy"-    getKey (Fix (NSelect _ [key] _)) = key-    getKey _ = error "invalid"-    isPlainSingle (StaticKey _) = True-    isPlainSingle (DynamicKey (Plain (DoubleQuoted [Plain _]))) = False-    isPlainSingle _ = error "invalid"--------------------------------tests :: TestTree-tests = $(testGroupGenerator)--
+ tests/TestCommon.hs view
@@ -0,0 +1,67 @@+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE TypeApplications #-}++module TestCommon where++import Control.Monad.Catch+import Control.Monad.IO.Class+import Data.Text (Text, unpack)+import Data.Time+import Nix+import System.Environment+import System.IO+import System.Posix.Files+import System.Posix.Temp+import System.Process+import Test.Tasty.HUnit++hnixEvalFile :: Options -> FilePath -> IO (NValueNF (Lazy IO))+hnixEvalFile opts file = do+  parseResult <- parseNixFileLoc file+  case parseResult of+    Failure err        ->+        error $ "Parsing failed for file `" ++ file ++ "`.\n" ++ show err+    Success expr -> do+        setEnv "TEST_VAR" "foo"+        runLazyM opts $+            catch (evaluateExpression (Just file) nixEvalExprLoc+                                      normalForm expr) $ \case+                NixException frames ->+                    errorWithoutStackTrace . show+                        =<< renderFrames @(NThunk (Lazy IO)) frames++hnixEvalText :: Options -> Text -> IO (NValueNF (Lazy IO))+hnixEvalText opts src = case parseNixText src of+    Failure err        ->+        error $ "Parsing failed for expressien `"+            ++ unpack src ++ "`.\n" ++ show err+    Success expr ->+        runLazyM opts $ normalForm =<< nixEvalExpr Nothing expr++nixEvalString :: String -> IO String+nixEvalString expr = do+  (fp,h) <- mkstemp "nix-test-eval"+  hPutStr h expr+  hClose h+  res <- nixEvalFile fp+  removeLink fp+  return res++nixEvalFile :: FilePath -> IO String+nixEvalFile fp = readProcess "nix-instantiate" ["--eval", "--strict", fp] ""++assertEvalFileMatchesNix :: FilePath -> Assertion+assertEvalFileMatchesNix fp = do+  time <- liftIO getCurrentTime+  hnixVal <- (++"\n") . printNix <$> hnixEvalFile (defaultOptions time) fp+  nixVal <- nixEvalFile fp+  assertEqual fp nixVal hnixVal++assertEvalMatchesNix :: Text -> Assertion+assertEvalMatchesNix expr = do+  time <- liftIO getCurrentTime+  hnixVal <- (++"\n") . printNix <$> hnixEvalText (defaultOptions time) expr+  nixVal <- nixEvalString expr'+  assertEqual expr' nixVal hnixVal+ where+  expr' = unpack expr