@@ -15,6 +15,7 @@ module Obelisk.Command.Project
1515 , toImplDir
1616 , toObeliskDir
1717 , withProjectRoot
18+ , bashEscape
1819 ) where
1920
2021import Control.Concurrent.MVar (MVar, newMVar, withMVarMasked)
@@ -23,6 +24,7 @@ import Control.Monad
2324import Control.Monad.IO.Class (liftIO)
2425import Control.Monad.State
2526import qualified Data.Aeson as Json
27+import qualified Data.ByteString.UTF8 as BSU
2628import Data.Bits
2729import qualified Data.ByteString.Lazy as BSL
2830import Data.Default (def)
@@ -30,7 +32,7 @@ import Data.Function ((&), on)
3032import Data.Map (Map)
3133import Data.Text (Text)
3234import qualified Data.Text as T
33−import Data.Text.Encoding (decodeUtf8)
35+import Data.Text.Encoding (decodeUtf8, encodeUtf8)
3436import Data.Traversable (for)
3537import System.Directory
3638import System.Environment (lookupEnv)
@@ -39,6 +41,7 @@ import System.IO.Temp
3941import System.IO.Unsafe (unsafePerformIO)
4042import System.Posix (FileStatus, FileMode, CMode (..), UserID, deviceID, fileID, fileMode, fileOwner, getFileStatus, getRealUserID)
4143import System.Posix.Files
44+import Text.ShellEscape (bash, bytes)
4245
4346import GitHub.Data.GitData (Branch)
4447import GitHub.Data.Name (Name)
@@ -278,12 +281,15 @@ nixShellRunConfig root isPure command = do
278281 pure $ def
279282 & nixShellConfig_pure .~ isPure
280283 & nixShellConfig_common . nixCmdConfig_target .~ (def & target_path .~ Nothing)
281− & nixShellConfig_run .~ (command <&> \c -> mconcat
282− [ "export NIX_PATH=nixpkgs=", T.unpack nixpkgsPath, "; "
283− , maybe "" (\v -> "export NIX_REMOTE=" <> v <> "; ") nixRemote
284− , c
284+ & nixShellConfig_run .~ (command <&> \cs -> unwords $ concat
285+ [ ["export", BSU.toString . bytes . bash $ "NIX_PATH=nixpkgs=" <> encodeUtf8 nixpkgsPath, ";"]
286+ , maybe [] (\v -> ["export", BSU.toString . bytes . bash $ "NIX_REMOTE=" <> encodeUtf8 (T.pack v), ";"]) nixRemote
287+ , [cs]
285288 ])
286289
290+bashEscape :: String -> String
291+bashEscape = BSU.toString . bytes . bash . BSU.fromString
292+
287293nixShellRunProc :: NixShellConfig -> ProcessSpec
288294nixShellRunProc cfg = setDelegateCtlc True $ proc "nix-shell" $ runNixShellConfig cfg
289295