packages feed

ats-format-0.1.0.0: Setup.hs

import           Control.Lens        ((<&>))
import           Control.Monad       (unless, void)
import           Data.Maybe
import           Distribution.Simple
import           System.Directory    (createDirectoryIfMissing)
import           System.Environment  (lookupEnv)
import           System.Process      (readCreateProcessWithExitCode, shell)

manpage :: IO String
manpage = readFile "man/atsfmt.1"

main :: IO ()
main = setManpath >>
    writeManpages >>
    writeBashCompletions >>
    defaultMain

setManpath :: IO ()
setManpath = do
    home <- lookupEnv "HOME"
    case home of
        Just x -> do
            let bashRc = x ++ "/.bashrc"
            config <- readFile bashRc
            unless (or (["#manpath updated by atsfmt", "#manpath updated by madlang"] <&> (`elem` lines config)))
                (appendFile bashRc "\n#manpath updated by atsfmt\nexport MANPATH=~/.local/share:$MANPATH\n" >>
                 void (readCreateProcessWithExitCode (shell $ "MANPATH=" ++ x ++ "/.local/share mandb") ""))
        Nothing -> pure ()

writeManpages :: IO ()
writeManpages = do
    home <- lookupEnv "HOME"
    case home of
        Just x -> do
            let manPath = x ++ "/.local/share/man/man1"
            createDirectoryIfMissing True manPath
            writeFile (manPath ++ "/atsfmt.1") =<< manpage
        Nothing -> pure ()

writeBashCompletions :: IO ()
writeBashCompletions = do
    home <- lookupEnv "HOME"
    case home of
        Just x -> do
            let bashRc = x ++ "/.bashrc"
            config <- readFile bashRc
            unless ("# Added by atsfmt" `elem` lines config)
                (appendFile bashRc "\n# Added by atsfmt\neval \"$(atsfmt --bash-completion-script atsfmt)\"\n")
        Nothing -> pure ()