M hurl.cabal => hurl.cabal +6 -14
@@ 73,11 73,6 @@ Flag freedesktop
   Default:     True
   Manual:      True
 
-Flag appstream
-  Description:  Failing to dispatch URIs and MIMEtypes as per `freedesktop`, consults the local AppStream database to suggest apps to install. Only has an effect if the `freedesktop` is also set.
-  Default:      True
-  Manual:       True
-
 Flag rewriters
   Description:  Support regexp-based URI rewriting/blocking plugins
   Default:		True
@@ 89,10 84,10 @@ source-repository head
 
 library
   -- Modules exported by the library.
-  exposed-modules:     Network.URI.Charset, Network.URI.Fetch
+  exposed-modules:     Network.URI.Charset, Network.URI.Fetch, Network.MIME.Info
   
   -- Modules included in this library but not exported.
-  other-modules:       Network.URI.Locale, Network.URI.Messages, Network.URI.Types, Network.MIME.Info
+  other-modules:       Network.URI.Locale, Network.URI.Messages, Network.URI.Types
   
   -- LANGUAGE extensions used by modules in this package.
   -- other-extensions:    
@@ 100,7 95,7 @@ library
   -- Other library packages from which modules are imported.
   build-depends:       base >=4.9 && <5, text >= 1.2 && <1.3,
                        network-uri >=2.6 && <2.7, bytestring >= 0.10 && < 0.11,
-                       async >= 2.1 && < 2.3, filepath, directory,
+                       async >= 2.1 && < 2.3, filepath, directory >= 1.3.2,
                        time >= 1.6
   
   -- Directories containing source files.
@@ 126,13 121,10 @@ library
     build-depends: base64-bytestring >=1.0 && <2.0
   if flag(freedesktop)
     CPP-options:   -DWITH_XDG
-    build-depends: process >= 1.2 && <2.0
+    build-depends: process >= 1.2 && <2.0, xml-conduit >=1.8, zlib >= 0.6 && < 0.7, containers
     other-modules: Network.URI.XDG.Ini, Network.URI.XDG.MimeApps,
-        Network.URI.XDG.DesktopEntry, Network.URI.XDG.MimeInfo, Network.URI.XDG
-  if flag(freedesktop) && flag(appstream)
-    CPP-options:   -DWITH_APPSTREAM
-    build-depends: xml-conduit >=1.8, zlib >= 0.6 && < 0.7, containers
-    other-modules: Network.URI.XDG.AppStream, Network.URI.XDG.AppStreamOutput
+        Network.URI.XDG.DesktopEntry, Network.URI.XDG.MimeInfo, Network.URI.XDG,
+        Network.URI.XDG.AppStream, Network.URI.XDG.AppStreamOutput
   if flag(rewriters)
     CPP-options:   -DWITH_PLUGIN_REWRITES
     build-depends: regex, regex-tdfa >= 1.2 && < 1.4
 
M src/Network/MIME/Info.hs => src/Network/MIME/Info.hs +1 -1
@@ 1,5 1,5 @@
 {-# LANGUAGE CPP #-}
-module Network.MIME.Info(mimeInfo, MIME(..)) where
+module Network.MIME.Info(mimeInfo, MIME, Application(..)) where
 
 #ifdef WITH_XDG
 import Network.URI.XDG.MimeInfo (readMimeInfo)
 
M src/Network/URI/Fetch.hs => src/Network/URI/Fetch.hs +5 -2
@@ 98,7 98,9 @@ data Session = Session {
     -- | How many redirects to follow for Gemini or HTTP(S) requests
     redirectCount :: Int,
     -- | Whether to cache network responses, avoiding sending requests
-    cachingEnabled :: Bool
+    cachingEnabled :: Bool,
+    -- | App-specific config subdirectory to check
+    appName :: String
 }
 
 data LogRecord = LogRecord {
@@ 158,7 160,8 @@ newSession' appname = do
         aboutPages = [],
         requestLog = Nothing,
         redirectCount = 5,
-        cachingEnabled = True
+        cachingEnabled = True,
+        appName = appname
     }
 
 llookup key fallback map = fallback `fromMaybe` listToMaybe [v | (k, v) <- map, k == key]
 
M src/Network/URI/XDG.hs => src/Network/URI/XDG.hs +0 -15
@@ 10,7 10,6 @@ import Network.URI.XDG.MimeApps
 import Data.List (stripPrefix)
 import Data.Maybe (catMaybes)
 
-#if WITH_APPSTREAM
 import qualified Text.XML as XML
 import qualified Data.Map as M
 import Data.Text (Text)
@@ 19,14 18,11 @@ import Network.URI.XDG.AppStream
 import Network.URI.XDG.AppStreamOutput
 import Control.Monad (forM)
 import Network.URI
-#endif
 
 data XDGConfig = XDGConfig {
-#if WITH_APPSTREAM
     components :: M.Map Text Component,
     componentsByMIME :: M.Map Text [Component],
     iconCache :: IconCache,
-#endif
     handlers :: HandlersConfig,
     locales :: [String]
 }
@@ 34,13 30,9 @@ data XDGConfig = XDGConfig {
 loadXDGConfig :: [String] -> IO XDGConfig
 loadXDGConfig locales = do
     handlers <- loadHandlers
-#if WITH_APPSTREAM
     components <- loadDatabase locales
     icons <- scanIconCache
     return $ XDGConfig components (buildMIMEIndex components) icons handlers locales
-#else
-    return $ XDGConfig handlers locales
-#endif
 
 dispatchURIByMIME :: XDGConfig -> URI -> String -> IO Errors
 dispatchURIByMIME config uri mime = do
@@ 50,7 42,6 @@ dispatchURIByMIME config uri mime = do
         Nothing -> reportUnsupported config mime uri
 
 reportUnsupported :: XDGConfig -> String -> URI -> IO Errors
-#if WITH_APPSTREAM
 reportUnsupported XDGConfig { components = comps } "x-scheme-handler/appstream" URI {
         uriAuthority = Just (URIAuth { uriRegName = ident })
     } | Just el <- xmlForID comps $ Txt.pack ident = return $ RawXML $ serializeXML el
@@ 61,12 52,6 @@ reportUnsupported XDGConfig { iconCache = icondirs, componentsByMIME = index } m
         icons' <- testLocalIcons $ icons app
         return $ app {icons = icons'}
     return $ RequiresInstall mime $ outputApps apps'
-#else
-reportUnsupported _ mime _
-    | Just scheme <- "x-scheme-handler/" `stripPrefix` mime =
-        return $ UnsupportedScheme (scheme ++ ":")
-    | otherwise = return $ UnsupportedMIME mime
-#endif
 
 mapFirstM :: [a] -> (a -> IO (Maybe b)) -> IO (Maybe b)
 mapFirstM (x:xs) cb = do