Difference between revisions of "Xmonad/Config archive/nomeata’s xmonad.hs"

From HaskellWiki
Jump to: navigation, search
(Deleting page that hasn't been edited for over 10 years)
m (Reverted edits by Tomjaguarpaw (talk) to last revision by Nomeata)
 
Line 1: Line 1:
 +
<haskell>
  
 +
import XMonad
 +
import System.Exit
 +
 +
import Data.Ratio ((%))
 +
 +
import XMonad.Hooks.EventHook
 +
import System.IO
 +
import XMonad.Hooks.ManageDocks
 +
import XMonad.Hooks.EwmhDesktops
 +
import XMonad.Actions.CycleWS
 +
import XMonad.Layout.NoBorders
 +
import XMonad.Layout.ResizableTile
 +
import XMonad.Layout.ToggleLayouts
 +
import XMonad.Layout.IM
 +
import XMonad.Layout.Reflect
 +
import XMonad.Actions.UpdatePointer
 +
-- import XMonad.Layout.ShowWName
 +
-- import XMonad.Actions.FlexibleManipulate hiding (position)
 +
import XMonad.Prompt
 +
import XMonad.Prompt.Shell
 +
 +
 +
import qualified XMonad.StackSet as W
 +
import qualified Data.Map        as M
 +
 +
 +
shellPromptConfig = defaultXPConfig
 +
{ position = Top
 +
-- , showCompletionOnTab = True
 +
}
 +
 +
------------------------------------------------------------------------
 +
-- Key bindings. Add, modify or remove key bindings here.
 +
--
 +
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
 +
 +
    -- launch a terminal
 +
    [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
 +
    , ((modMask              , xK_e),      spawn $ XMonad.terminal conf)
 +
 +
    , ((modMask              , xK_s    ), spawn "sm")
 +
 +
    --, ((modMask              , xK_r    ), spawn "gmrun")
 +
    , ((modMask              , xK_r    ), shellPrompt shellPromptConfig)
 +
 +
    -- close focused window
 +
    , ((modMask .|. shiftMask, xK_c    ), kill)
 +
 +
    -- Rotate through the available layout algorithms
 +
    , ((modMask,              xK_space ), sendMessage NextLayout)
 +
 +
    --  Reset the layouts on the current workspace to default
 +
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
 +
 +
    , ((modMask              , xK_f), sendMessage ToggleLayout)
 +
 +
    -- Resize viewed windows to the correct size
 +
    --, ((modMask .|. shiftMask, xK_n    ), refresh)
 +
 +
    -- Move focus to the next window
 +
    , ((modMask,              xK_Tab  ), windows W.focusDown)
 +
 +
    -- Move focus to the next window
 +
    , ((modMask,              xK_j    ), windows W.focusDown)
 +
 +
    -- Move focus to the previous window
 +
    , ((modMask,              xK_k    ), windows W.focusUp  )
 +
 +
    -- Move focus to the master window
 +
    , ((modMask,              xK_m    ), windows W.focusMaster  )
 +
 +
    -- Swap the focused window and the master window
 +
    , ((modMask,              xK_Return), windows W.swapMaster)
 +
 +
    -- Swap the focused window with the next window
 +
    , ((modMask .|. shiftMask, xK_j    ), windows W.swapDown  )
 +
 +
    -- Swap the focused window with the previous window
 +
    , ((modMask .|. shiftMask, xK_k    ), windows W.swapUp    )
 +
 +
    -- Shrink the master area
 +
    , ((modMask,              xK_h    ), sendMessage Shrink)
 +
 +
    -- Expand the master area
 +
    , ((modMask .|. shiftMask, xK_k    ), sendMessage MirrorExpand)
 +
 +
    -- Shrink the master area
 +
    , ((modMask .|. shiftMask, xK_j    ), sendMessage MirrorShrink)
 +
 +
    -- Expand the master area
 +
    , ((modMask,              xK_l    ), sendMessage Expand)
 +
 +
    -- Push window back into tiling
 +
    , ((modMask .|. shiftMask, xK_t    ), withFocused $ windows . W.sink)
 +
 +
    -- Increment the number of windows in the master area
 +
    , ((modMask              , xK_comma ), sendMessage (IncMasterN 1))
 +
 +
    -- Deincrement the number of windows in the master area
 +
    , ((modMask              , xK_period), sendMessage (IncMasterN (-1)))
 +
 +
    -- toggle the status bar gap
 +
    , ((modMask              , xK_b    ), sendMessage ToggleStruts)
 +
 +
    -- Quit xmonad
 +
    , ((modMask .|. shiftMask, xK_q    ), io (exitWith ExitSuccess))
 +
 +
    -- Restart xmonad
 +
    , ((modMask              , xK_q    ),
 +
          broadcastMessage ReleaseResources >>
 +
  trace "Restarting xmonad" >>
 +
  restart "xmonad" True
 +
  )
 +
    , ((modMask,              xK_Down), moveTo Next HiddenWS)
 +
    , ((modMask,              xK_Up),  moveTo Prev HiddenWS)
 +
    , ((modMask .|. shiftMask, xK_Down), shiftTo Next HiddenWS >> moveTo Next HiddenWS)
 +
    , ((modMask .|. shiftMask, xK_Up),  shiftTo Prev HiddenWS >> moveTo Prev HiddenWS)
 +
    , ((modMask,              xK_w), nextScreen)
 +
    , ((modMask,              xK_d), swapNextScreen)
 +
    , ((modMask .|. shiftMask, xK_d), shiftNextScreen)
 +
    ]
 +
    ++
 +
 +
    --
 +
    -- mod-[1..9], Switch to workspace N
 +
    -- mod-shift-[1..9], Move client to workspace N
 +
    --
 +
    [((m .|. modMask, k), windows $ f i)
 +
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
 +
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
 +
 +
    --
 +
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
 +
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
 +
    --
 +
    --[((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
 +
    --    | (key, sc) <- zip [xK_w, xK_a] [0..]
 +
    --    , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
 +
--
 +
 +
------------------------------------------------------------------------
 +
-- Mouse bindings: default actions bound to mouse events
 +
--
 +
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
 +
 +
    -- mod-button1, Set the window to floating mode and move by dragging
 +
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w ))
 +
    --[ ((modMask, button1), (\w -> focus w >> mouseWindow discrete w ))
 +
 +
    -- mod-button2, Set the window to floating mode and resize by dragging
 +
    , ((modMask, button2), (\w -> focus w >> mouseResizeWindow w))
 +
 +
    -- you may also bind events to the mouse scroll wheel (button4 and button5)
 +
    ]
 +
 +
data EventHookExample = EventHookExample deriving ( Show, Read )
 +
instance EventHook EventHookExample where
 +
      handleEvent _ e = io $ hPutStrLn stderr . show $ e --return ()
 +
 +
--myLayout = {- eventHook EventHookExample $-}  ewmhDesktopsLayout $ avoidStruts $
 +
-- smartBorders $ toggleLayouts Full (tiled ||| Mirror tiled)
 +
myLayout = -- eventHook EventHookExample $
 +
          ewmhDesktopsLayout $
 +
  --smartBorders $
 +
--   showWName $
 +
  avoidStruts $
 +
  toggleLayouts Full $
 +
  reflectHoriz $
 +
  withIM (1%6) (And (ClassName "Pidgin") (Role "buddy_list")) $
 +
  reflectHoriz $
 +
  tiled ||| Mirror tiled
 +
  where
 +
    --tiled  = Tall nmaster delta ratio
 +
    tiled  = ResizableTall 1 (3/100) (1/2) []
 +
 +
myManageHook = composeAll
 +
    [ manageDocks
 +
    , className =? "MPlayer"        --> doFloat
 +
    ]
 +
 +
myLogHook = ewmhDesktopsLogHook
 +
    --updatePointer Nearest
 +
    >> updatePointer (Relative 0.9 0.9)
 +
 +
main = xmonad $ defaultConfig {
 +
      -- simple stuff
 +
        terminal          = "gnome-terminal",
 +
        borderWidth        = 0,
 +
        modMask            = mod4Mask,
 +
workspaces        = ["1","2","3","4","5","6"],
 +
normalBorderColor  = "#dddddd",
 +
focusedBorderColor = "#ff0000",
 +
 +
        keys              = myKeys,
 +
        mouseBindings      = myMouseBindings,
 +
 +
        layoutHook        = myLayout,
 +
        manageHook        = myManageHook,
 +
        logHook            = myLogHook
 +
    }
 +
</haskell>
 +
[[Category:XMonad configuration]]

Latest revision as of 15:19, 6 February 2021

import XMonad
import System.Exit

import Data.Ratio ((%))

import XMonad.Hooks.EventHook
import System.IO
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
import XMonad.Actions.CycleWS
import XMonad.Layout.NoBorders
import XMonad.Layout.ResizableTile
import XMonad.Layout.ToggleLayouts
import XMonad.Layout.IM
import XMonad.Layout.Reflect
import XMonad.Actions.UpdatePointer
-- import XMonad.Layout.ShowWName
-- import XMonad.Actions.FlexibleManipulate hiding (position)
import XMonad.Prompt
import XMonad.Prompt.Shell


import qualified XMonad.StackSet as W
import qualified Data.Map        as M


shellPromptConfig = defaultXPConfig
	{ position = Top
--	, showCompletionOnTab = True
	}

------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- launch a terminal
    [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
    , ((modMask              , xK_e),      spawn $ XMonad.terminal conf)

    , ((modMask              , xK_s     ), spawn "sm")

    --, ((modMask              , xK_r     ), spawn "gmrun")
    , ((modMask              , xK_r     ), shellPrompt shellPromptConfig)

    -- close focused window 
    , ((modMask .|. shiftMask, xK_c     ), kill)

     -- Rotate through the available layout algorithms
    , ((modMask,               xK_space ), sendMessage NextLayout)

    --  Reset the layouts on the current workspace to default
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)

    , ((modMask              , xK_f), sendMessage ToggleLayout)

    -- Resize viewed windows to the correct size
    --, ((modMask .|. shiftMask, xK_n     ), refresh)

    -- Move focus to the next window
    , ((modMask,               xK_Tab   ), windows W.focusDown)

    -- Move focus to the next window
    , ((modMask,               xK_j     ), windows W.focusDown)

    -- Move focus to the previous window
    , ((modMask,               xK_k     ), windows W.focusUp  )

    -- Move focus to the master window
    , ((modMask,               xK_m     ), windows W.focusMaster  )

    -- Swap the focused window and the master window
    , ((modMask,               xK_Return), windows W.swapMaster)

    -- Swap the focused window with the next window
    , ((modMask .|. shiftMask, xK_j     ), windows W.swapDown  )

    -- Swap the focused window with the previous window
    , ((modMask .|. shiftMask, xK_k     ), windows W.swapUp    )

    -- Shrink the master area
    , ((modMask,               xK_h     ), sendMessage Shrink)

    -- Expand the master area
    , ((modMask .|. shiftMask, xK_k     ), sendMessage MirrorExpand)

    -- Shrink the master area
    , ((modMask .|. shiftMask, xK_j     ), sendMessage MirrorShrink)

    -- Expand the master area
    , ((modMask,               xK_l     ), sendMessage Expand)

    -- Push window back into tiling
    , ((modMask .|. shiftMask, xK_t     ), withFocused $ windows . W.sink)

    -- Increment the number of windows in the master area
    , ((modMask              , xK_comma ), sendMessage (IncMasterN 1))

    -- Deincrement the number of windows in the master area
    , ((modMask              , xK_period), sendMessage (IncMasterN (-1)))

    -- toggle the status bar gap
    , ((modMask              , xK_b     ), sendMessage ToggleStruts)

    -- Quit xmonad
    , ((modMask .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))

    -- Restart xmonad
    , ((modMask              , xK_q     ),
          broadcastMessage ReleaseResources >> 
	  trace "Restarting xmonad" >>
	  restart "xmonad" True
	  )
    , ((modMask,               xK_Down), moveTo Next HiddenWS)
    , ((modMask,               xK_Up),   moveTo Prev HiddenWS)
    , ((modMask .|. shiftMask, xK_Down), shiftTo Next HiddenWS >> moveTo Next HiddenWS)
    , ((modMask .|. shiftMask, xK_Up),   shiftTo Prev HiddenWS >> moveTo Prev HiddenWS)
    , ((modMask,               xK_w), nextScreen) 
    , ((modMask,               xK_d), swapNextScreen)
    , ((modMask .|. shiftMask, xK_d), shiftNextScreen)
    ]
    ++

    --
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    --
    [((m .|. modMask, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]

    --
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
    --
    --[((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
    --     | (key, sc) <- zip [xK_w, xK_a] [0..]
    --    , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
--

------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $

    -- mod-button1, Set the window to floating mode and move by dragging
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w ))
    --[ ((modMask, button1), (\w -> focus w >> mouseWindow discrete w ))

    -- mod-button2, Set the window to floating mode and resize by dragging
    , ((modMask, button2), (\w -> focus w >> mouseResizeWindow w))

    -- you may also bind events to the mouse scroll wheel (button4 and button5)
    ]

data EventHookExample = EventHookExample deriving ( Show, Read )
instance EventHook EventHookExample where
       handleEvent _ e = io $ hPutStrLn stderr . show $ e --return ()

--myLayout = {- eventHook EventHookExample $-}  ewmhDesktopsLayout $ avoidStruts $
--		smartBorders $ toggleLayouts Full (tiled ||| Mirror tiled)
myLayout = -- eventHook EventHookExample $
           ewmhDesktopsLayout $ 
	   --smartBorders $
--	   showWName $
	   avoidStruts $
	   toggleLayouts Full $
 	   reflectHoriz $
	   withIM (1%6) (And (ClassName "Pidgin") (Role "buddy_list")) $
 	   reflectHoriz $
	   tiled ||| Mirror tiled
  where
     --tiled   = Tall nmaster delta ratio
     tiled   = ResizableTall 1 (3/100) (1/2) []

myManageHook = composeAll
    [ manageDocks
    , className =? "MPlayer"        --> doFloat
    ]

myLogHook = ewmhDesktopsLogHook
	    --updatePointer Nearest
	    >> updatePointer (Relative 0.9 0.9)

main = xmonad $ defaultConfig {
      -- simple stuff
        terminal           = "gnome-terminal",
        borderWidth        = 0,
        modMask            = mod4Mask,
	workspaces         = ["1","2","3","4","5","6"],
	normalBorderColor  = "#dddddd",
	focusedBorderColor = "#ff0000",

        keys               = myKeys,
        mouseBindings      = myMouseBindings,

        layoutHook         = myLayout,
        manageHook         = myManageHook,
        logHook            = myLogHook
    }