XMonad set layout depending on which monitor it's displayed

haskell, xmonad

Solution

I think it should be possible to make a `Layout` wrapper (like `Mirror` or `Choose`) which does what you want. The `runLayout` method of `LayoutClass` receives the `WorkspaceId`, which you can look up in the map from `Screen`s to `Workspace`s.

Problem

Is it possible to somehow make the workspace layout change depending on which physical screen I am displaying it? I want to use reflectHoriz (from XMonad.Layout.PerWorkspace) on layouts on my left monitor so that the master pane is always closest to the center of 2 screens. I tried XMonad.Layout.IndependentScreens but that just creates double monitor dependant workspaces and that's not what I'm aiming at. Ideally, I want the same workspace to have different layout set depending on the monitor on which it is displayed.

Original source