Run XMonad’s startup hook only on initial startup

startupxmonad

I have the following startupHook in my xmonad.hs

, startupHook = spawn "~/.xmonad/autostart"

I am starting many apps and daemons in this script and it is written to run only once on startup. But this is being run everytime I hit Mod-q, i.e., to reload and test out my changes to xmonad.hs.

I could conditionally run the programs in the autostart script but that turned out to be quite flaky. So, I was wondering if there is a way to xmonad to run this startup hook only on the initial startup and not on reloads.

I tried googling around but came up empty. Is such a thing possible?

Edit: I am running xmonad 0.11 installed from cabal on ubuntu 12.04.

Best Answer

As mentionned in the FAQ, the startupHook is run each time xmonad is restarted with MOD+Q.

Also from a software point of view, it seems important that a restart is not different than a stop followed by a start. Thus there is no way to differentiate a start from a restart from within Xmonad. Hence each time Xmonad is started, it will launch the startupHook

To run programs on startup, they propose to use the usual manner by adding them to .xsession or .Xinitrc.

In your case you can just put

~/.xmonad/autostart

at the end of your .Xinitrc file.

Related Question