-- |A clipboard management CLI tool built with Polysemy, Servant and GI.Gtk.
module Helic (
  -- $intro
  --
  -- * Effects
  -- ** Agent
  Agent,
  AgentTag,
  Agents,
  -- ** XClipboard
  XClipboard,

  -- * Interpreters
  interpretAgentNet,
  interpretAgentX,
  interpretAgentTmux,
  interpretXClipboardGtk,

  -- * Data
  Event,

  -- * Utilities
  transformXEvents,
  withMainLoop,
  subscribeToClipboard,
  clipboardEvents,
  listenXClipboard,
  Api,
  serve,
  listen,
  yank,

) where

import Helic.Data.Event (Event)
import Helic.Effect.Agent (Agent, AgentTag, Agents)
import Helic.Effect.XClipboard (XClipboard)
import Helic.Interpreter.AgentNet (interpretAgentNet)
import Helic.Interpreter.AgentTmux (interpretAgentTmux)
import Helic.Interpreter.AgentX (interpretAgentX, transformXEvents)
import Helic.Interpreter.XClipboard (
  clipboardEvents,
  interpretXClipboardGtk,
  listenXClipboard,
  subscribeToClipboard,
  withMainLoop,
  )
import Helic.Listen (listen)
import Helic.Net.Api (Api, serve)
import Helic.Yank (yank)

-- $intro
-- /Helic/ is primarily a CLI tool that listens for clipboard events and broadcasts them to other hosts and tmux.
--
-- The program is built with Polysemy, so its effects and interpreters may be useful for other developers.
-- Some utilities for interfacing with GTK are exposed as well.