templatise-0.1.1.0: lib/initialise/Defaults.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Defaults
( getDefaults,
Defaults (..),
dName,
dHomePage,
)
where
import Data.Maybe (fromJust)
import Data.Text (Text, pack, unpack)
import Data.Time (LocalTime (localDay), getCurrentTime, getCurrentTimeZone, utcToLocalTime)
import Data.Time.Calendar (Year)
import Data.Time.Calendar.OrdinalDate (toOrdinalDate)
import qualified Git (config)
import Network.URI (URI (uriPath), parseURI)
import System.Directory.Extra (getCurrentDirectory)
import System.FilePath (dropExtension, takeBaseName)
data Defaults = Defaults
{ dOrigin :: URI,
dAuthor :: Text,
dMaintainer :: Text,
dPath :: FilePath,
dYear :: Year
}
deriving (Show, Eq)
dName :: Defaults -> Text
dName Defaults {..} = pack . takeBaseName . uriPath $ dOrigin
dHomePage :: Defaults -> URI
dHomePage Defaults {..} =
dOrigin
{ uriPath = dropExtension $ uriPath dOrigin
}
getDefaults :: IO Defaults
getDefaults = do
dOrigin <- fromJust . parseURI . unpack <$> Git.config "remote.origin.url"
dAuthor <- Git.config "user.name"
dMaintainer <- Git.config "user.email"
dPath <- getCurrentDirectory
timezone <- getCurrentTimeZone
(dYear, _day) <- toOrdinalDate . localDay . utcToLocalTime timezone <$> getCurrentTime
pure Defaults {..}