XMonad spawn programs on startup in specified workspace

haskell, xmonad

Solution

The common way is to use startupHook which takes `X ()` action and performs it on each startup. E.g.

main = xmonad $ defaultConfig
  { startupHook = do
      spawnOn "workspace1" "program1"
      …
      spawnOn "workspaceN" "programN"
  }

Problem

I am trying to configure my `xmonad.hs` so that when I start my session I start an array of different programs on different workspaces (like Terminal in 1 ; Firefox in 2 ; Pidgin in 3). I already looked into the `XMonad.Actions.SpawnOn`, but as `spawnOn` returns with an `X ()` and not with a common `m ()` I can not use it in `main = do ...`. Is there a function that takes an `X`-monad and returns with `IO ()` or is there another workaround?

Original source