git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: accept path to nixpkgs repository on the command line
99eae7bPeter Simons
src/Distribution/Nixpkgs/PackageMap.hs+5−5
@@ -12,9 +12,9 @@ import System.Process
12type Attribute = String
12type Attribute = String
13type Path = [Attribute]
13type Path = [Attribute]
14
14
15−readNixpkgAttributeSet :: IO (Set Attribute)
15+readNixpkgAttributeSet :: FilePath -> IO (Set Attribute)
16−readNixpkgAttributeSet = do
16+readNixpkgAttributeSet nixpkgs = do
17− buf <- readProcess "nix-env" ["-qaP", "--json", "-f<nixpkgs>"] ""
17+ buf <- readProcess "nix-env" ["-qaP", "--json", "-f"++nixpkgs] ""
18 let pkgmap :: Either String (Map Attribute JSON.Object)
18 let pkgmap :: Either String (Map Attribute JSON.Object)
19 pkgmap = JSON.eitherDecodeStrict (UTF8.toRep (UTF8.fromString buf))
19 pkgmap = JSON.eitherDecodeStrict (UTF8.toRep (UTF8.fromString buf))
20 either fail (return . Map.keysSet) pkgmap
20 either fail (return . Map.keysSet) pkgmap
@@ -34,5 +34,5 @@ attributeSet2PackageMap pkgset = foldr (uncurry insertAttribute) Map.empty pkgli
34 insertAttribute :: Attribute -> Path -> PackageMap -> PackageMap
34 insertAttribute :: Attribute -> Path -> PackageMap -> PackageMap
35 insertAttribute attr = Map.insertWith Set.union attr . Set.singleton
35 insertAttribute attr = Map.insertWith Set.union attr . Set.singleton
36
36
37−readNixpkgPackageMap :: IO PackageMap
37+readNixpkgPackageMap :: FilePath -> IO PackageMap
38−readNixpkgPackageMap = fmap attributeSet2PackageMap readNixpkgAttributeSet
38+readNixpkgPackageMap nixpkgs = fmap attributeSet2PackageMap (readNixpkgAttributeSet nixpkgs)
src/hackage2nix.hs+4−2
@@ -83,12 +83,14 @@ data Configuration = Configuration
83
83
84data Options = Options
84data Options = Options
85 { hackageRepository :: FilePath
85 { hackageRepository :: FilePath
86+ , nixpkgsRepository :: FilePath
86 }
87 }
87 deriving (Show)
88 deriving (Show)
88
89
89options :: Parser Options
90options :: Parser Options
90options = Options
91options = Options
91− <$> (strOption $ long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefault)
92+ <$> (strOption $ long "hackage" <> help "path to Hackage git repository" <> value "hackage" <> showDefault <> metavar "PATH")
93+ <*> (strOption $ long "nixpkgs" <> help "path to Nixpkgs repository" <> value "<nixpkgs>" <> showDefault <> metavar "PATH")
92
94
93pinfo :: ParserInfo Options
95pinfo :: ParserInfo Options
94pinfo = info
96pinfo = info
@@ -105,7 +107,7 @@ main = do
105 Options {..} <- execParser pinfo
107 Options {..} <- execParser pinfo
106
108
107 hackage <- readHackage hackageRepository
109 hackage <- readHackage hackageRepository
108− nixpkgs <- readNixpkgPackageMap
110+ nixpkgs <- readNixpkgPackageMap nixpkgsRepository
109 let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
111 let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
110 . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
112 . Map.delete "som" -- TODO: https://github.com/NixOS/cabal2nix/issues/164
111 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163
113 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163