packages feed

ribosome-host-0.9.9.9: lib/Ribosome/Host/Interpreter/Process/Embed.hs

module Ribosome.Host.Interpreter.Process.Embed where

import Data.Serialize (Serialize)
import Polysemy.Process (Process, ProcessOptions, withProcess_)
import System.Process.Typed (ProcessConfig, proc)

import Ribosome.Host.Data.BootError (BootError (BootError))
import Ribosome.Host.Interpreter.Process.Cereal (interpretProcessCerealNative)

nvimArgs :: [String]
nvimArgs =
  ["--embed", "-n", "-u", "NONE", "-i", "NONE", "--clean", "--headless"]

nvimProc :: ProcessConfig () () ()
nvimProc =
  proc "nvim" nvimArgs

interpretProcessCerealNvimEmbed ::
  Serialize a =>
  Members [Error BootError, Log, Resource, Race, Async, Embed IO] r =>
  Maybe ProcessOptions ->
  Maybe (ProcessConfig () () ()) ->
  InterpreterFor (Process a (Either Text a)) r
interpretProcessCerealNvimEmbed options conf =
  interpretProcessCerealNative (fromMaybe def options) (fromMaybe nvimProc conf) .
  resumeHoistError (BootError . show) .
  withProcess_ @() .
  raiseUnder2