summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-10-30 21:53:33 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2022-10-30 21:53:41 +0100
commit616934c3aad73a2ef8390975151c945577ad49cb (patch)
tree194367fc5b4a667445a1e66c2ccc96bb64479910
parentcomplete fromRight. (diff)
downloadvimwiki-scripts-616934c3aad73a2ef8390975151c945577ad49cb.tar.gz
vimwiki-scripts-616934c3aad73a2ef8390975151c945577ad49cb.tar.xz
Find data files in multiple places.
-rw-r--r--hs/Html.hs37
1 files changed, 33 insertions, 4 deletions
diff --git a/hs/Html.hs b/hs/Html.hs
index 5a3e063..424f688 100644
--- a/hs/Html.hs
+++ b/hs/Html.hs
@@ -17,6 +17,7 @@ import System.FilePath
, dropExtension
, takeBaseName
)
+import Control.Lens (_2)
import Control.Lens.Operators hiding ((<.>))
import Control.Lens.Setter (ASetter)
@@ -36,8 +37,12 @@ import Data.Text.Compat (PandocStr, conv, from)
import Network.URI hiding (query)
-import System.Directory (copyFile, createDirectoryIfMissing)
-import System.Environment.XDG.BaseDir (getUserConfigDir)
+import System.Directory (copyFile, createDirectoryIfMissing, doesFileExist)
+import System.Environment.XDG.BaseDir
+ ( getUserConfigDir
+ , getUserDataDir
+ , getSystemDataDirs
+ )
import Text.Blaze.Html5 (Html, toHtml, (!), textValue, docTypeHtml)
import qualified Text.Blaze.Html5 as H
@@ -267,6 +272,24 @@ stripTrailing c s
| c == last s = init s
| otherwise = s
+
+dup a = (a, a)
+
+filterM :: Monad m => (a -> m Bool) -> [a] -> m [a]
+filterM f = fmap (fmap fst)
+ . fmap (filter snd)
+ . mapM sequence
+ . fmap (_2 %~ f)
+ . fmap dup
+
+copyFromDatadir :: FilePath -> [FilePath] -> FilePath -> IO ()
+copyFromDatadir filename datadirs destination = do
+ let candidates = datadirs <&> (</> filename)
+ existing <- filterM doesFileExist candidates
+ let source = head existing
+ copyFile source destination
+
+
main = do
args <- parseCmdline
@@ -306,8 +329,14 @@ main = do
createDirectoryIfMissing True $ conf ^. data' . outputDir
- copyFile "style.css" $ (conf ^. (data' . outputDir)) <> "/style.css"
- copyFile "script.js" $ (conf ^. (data' . outputDir)) <> "/script.js"
+ userdd <- getUserDataDir "vimwiki"
+ systemdds <- getSystemDataDirs "vimwiki"
+ let dataDirs = [ "."
+ , userdd
+ ] ++ systemdds
+ let od = conf ^. (data' . outputDir)
+ copyFromDatadir "style.css" dataDirs $ od </> "style.css"
+ copyFromDatadir "script.js" dataDirs $ od </> "script.js"
-- What each page links to
-- forwardLinks :: [(FilePath, [String])]