{-# LANGUAGE NoImplicitPrelude #-}
module System.Permissions
  ( setScriptPerms
  , osIsWindows
  , setFileExecutable
  ) where

import qualified System.Posix.Files as Posix
import RIO

-- | True if using Windows OS.
osIsWindows :: Bool
osIsWindows :: Bool
osIsWindows = Bool
False

setScriptPerms :: MonadIO m => FilePath -> m ()
setScriptPerms :: FilePath -> m ()
setScriptPerms FilePath
fp = do
    IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> FileMode -> IO ()
Posix.setFileMode FilePath
fp (FileMode -> IO ()) -> FileMode -> IO ()
forall a b. (a -> b) -> a -> b
$
        FileMode
Posix.ownerReadMode FileMode -> FileMode -> FileMode
`Posix.unionFileModes`
        FileMode
Posix.ownerWriteMode FileMode -> FileMode -> FileMode
`Posix.unionFileModes`
        FileMode
Posix.groupReadMode FileMode -> FileMode -> FileMode
`Posix.unionFileModes`
        FileMode
Posix.otherReadMode

setFileExecutable :: MonadIO m => FilePath -> m ()
setFileExecutable :: FilePath -> m ()
setFileExecutable FilePath
fp = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> FileMode -> IO ()
Posix.setFileMode FilePath
fp FileMode
0o755