anderstornvig / config-files
- Source
- Commits
- Network (0)
- Issues (0)
- Downloads (0)
- Wiki (1)
- Graphs
-
Tree:
c478113
config-files / .xmonad / xmonad.hs
| 40bedfc6 » | Anders Tornvig | 2009-04-04 | 1 | {- xmonad.hs | |
| 2 | - Author: Øyvind 'Mr.Elendig' Heggstad <mrelendig AT har-ikkje DOT net> | ||||
| 3 | - Modified by: Anders Tornvig <anderstornvig AT gmail DOT com> | ||||
| 4 | - Version: 0.0.9 | ||||
| 5 | -} | ||||
| 6 | |||||
| 7 | ------------------------------------------------------------------------------- | ||||
| 8 | -- Imports -- | ||||
| 9 | -- stuff | ||||
| 10 | import XMonad | ||||
| 11 | import qualified XMonad.StackSet as W | ||||
| 12 | import qualified Data.Map as M | ||||
| 13 | import System.Exit | ||||
| 14 | import Graphics.X11.Xlib | ||||
| 15 | import IO (Handle, hPutStrLn) | ||||
| 16 | |||||
| 17 | -- utils | ||||
| 18 | import XMonad.Util.Run (spawnPipe, safeSpawn) | ||||
| 19 | import XMonad.Util.NamedWindows (getName) | ||||
| 20 | |||||
| 21 | -- hooks | ||||
| 22 | import XMonad.Hooks.ManageDocks | ||||
| 23 | import XMonad.Hooks.DynamicLog | ||||
| 24 | |||||
| 25 | -- layouts | ||||
| 26 | import XMonad.Layout.NoBorders | ||||
| 27 | import XMonad.Layout.ResizableTile | ||||
| 28 | import XMonad.Layout.Spiral | ||||
| 29 | |||||
| 30 | -- prompt | ||||
| 31 | import XMonad.Prompt | ||||
| 32 | import XMonad.Prompt.RunOrRaise | ||||
| 33 | import XMonad.Prompt.Shell | ||||
| 34 | import XMonad.Prompt.Ssh | ||||
| 35 | import XMonad.Prompt.Workspace | ||||
| 36 | |||||
| 37 | -- float actions | ||||
| 38 | import XMonad.Actions.FloatKeys | ||||
| 39 | |||||
| 40 | -- notifications | ||||
| 41 | import XMonad.Hooks.UrgencyHook | ||||
| 42 | |||||
| 43 | |||||
| 44 | ------------------------------------------------------------------------------- | ||||
| 45 | -- Main -- | ||||
| 46 | main = do | ||||
| 47 | h <- spawnPipe "xmobar" | ||||
| 48 | xmonad $ withUrgencyHook LibNotifyUrgencyHook defaultConfig | ||||
| 49 | { workspaces = workspaces' | ||||
| 50 | , modMask = modMask' | ||||
| 51 | , borderWidth = borderWidth' | ||||
| 52 | , normalBorderColor = normalBorderColor' | ||||
| 53 | , focusedBorderColor = focusedBorderColor' | ||||
| 54 | , terminal = terminal' | ||||
| 55 | , keys = keys' | ||||
| 56 | , logHook = logHook' h | ||||
| 57 | , layoutHook = layoutHook' | ||||
| 58 | , manageHook = manageHook' | ||||
| 59 | } | ||||
| 60 | |||||
| 61 | ------------------------------------------------------------------------------- | ||||
| 62 | -- Hooks -- | ||||
| 63 | manageHook' :: ManageHook | ||||
| 64 | manageHook' = (doF W.swapDown) <+> manageHook defaultConfig <+> manageDocks | ||||
| 65 | |||||
| 66 | logHook' :: Handle -> X () | ||||
| 67 | logHook' h = dynamicLogWithPP $ customPP { ppOutput = hPutStrLn h } | ||||
| 68 | |||||
| 69 | layoutHook' = customLayout | ||||
| 70 | |||||
| 71 | |||||
| 72 | data LibNotifyUrgencyHook = LibNotifyUrgencyHook deriving (Read, Show) | ||||
| 73 | |||||
| 74 | instance UrgencyHook LibNotifyUrgencyHook where | ||||
| 75 | urgencyHook LibNotifyUrgencyHook w = do | ||||
| 76 | name <- getName w | ||||
| 77 | ws <- gets windowset | ||||
| 78 | whenJust (W.findTag w ws) (flash name) | ||||
| 79 | where flash name index = safeSpawn "notify-send" (show name ++ " requests your attention on workspace " ++ index) | ||||
| 80 | |||||
| 81 | |||||
| 82 | ------------------------------------------------------------------------------- | ||||
| 83 | -- Looks -- | ||||
| 84 | -- bar | ||||
| 85 | customPP :: PP | ||||
| 86 | customPP = defaultPP { ppCurrent = xmobarColor "#AFAF87" "" . wrap "<" ">" | ||||
| 87 | , ppTitle = shorten 80 | ||||
| 88 | , ppSep = "<fc=#AFAF87> | </fc>" | ||||
| 89 | , ppHiddenNoWindows = xmobarColor "#AFAF87" "" | ||||
| 90 | , ppUrgent = xmobarColor "#FFFFAF" "" . wrap "[" "]" | ||||
| 91 | } | ||||
| 92 | |||||
| 93 | -- borders | ||||
| 94 | borderWidth' :: Dimension | ||||
| 95 | borderWidth' = 1 | ||||
| 96 | |||||
| 97 | normalBorderColor', focusedBorderColor' :: String | ||||
| 98 | normalBorderColor' = "#333333" | ||||
| 99 | focusedBorderColor' = "#AFAF87" | ||||
| 100 | |||||
| 101 | -- workspaces | ||||
| 102 | workspaces' :: [WorkspaceId] | ||||
| 103 | workspaces' = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] | ||||
| 104 | |||||
| 105 | -- layouts | ||||
| 106 | customLayout = avoidStruts $ smartBorders tiled ||| smartBorders (Mirror tiled) ||| noBorders Full ||| spiral (6/7) | ||||
| 107 | where | ||||
| 108 | tiled = ResizableTall 1 (2/100) (1/2) [] | ||||
| 109 | |||||
| 110 | ------------------------------------------------------------------------------- | ||||
| 111 | -- Terminal -- | ||||
| 112 | terminal' :: String | ||||
| 113 | terminal' = "urxvt" | ||||
| 114 | |||||
| 115 | ------------------------------------------------------------------------------- | ||||
| 116 | -- Keys/Button bindings -- | ||||
| 117 | -- modmask | ||||
| 118 | modMask' :: KeyMask | ||||
| 119 | modMask' = mod4Mask | ||||
| 120 | |||||
| 121 | |||||
| 122 | -- The prompt config | ||||
| 123 | myXPConfig :: XPConfig | ||||
| 124 | myXPConfig = defaultXPConfig | ||||
| 125 | { position = Bottom | ||||
| 126 | , promptBorderWidth = 0 | ||||
| 127 | , font = "-*-terminus-*-*-*-*-10-*-*-*-*-*-*" | ||||
| 128 | , height = 14 | ||||
| 129 | , bgColor = "#2A2733" | ||||
| 130 | , fgColor = "#AA9DCF" | ||||
| 131 | , bgHLight = "#6B6382" | ||||
| 132 | , fgHLight = "#4A4459" | ||||
| 133 | } | ||||
| 134 | |||||
| 135 | |||||
| 136 | -- keys | ||||
| 137 | keys' :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ()) | ||||
| 138 | keys' conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ | ||||
| 139 | -- launching and killing programs | ||||
| 140 | [ ((modMask, xK_Return), spawn $ XMonad.terminal conf) | ||||
| 141 | , ((modMask, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"") | ||||
| 142 | -- , ((modMask .|. shiftMask, xK_p ), spawn "gmrun") | ||||
| 143 | , ((modMask .|. shiftMask, xK_c ), kill) | ||||
| 144 | , ((modMask .|. shiftMask, xK_m ), spawn "claws-mail") | ||||
| 145 | |||||
| 146 | -- layouts | ||||
| 147 | , ((modMask, xK_space ), sendMessage NextLayout) | ||||
| 148 | , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) | ||||
| 149 | , ((modMask, xK_b ), sendMessage ToggleStruts) | ||||
| 150 | |||||
| 151 | -- floating layer stuff | ||||
| 152 | , ((modMask, xK_t ), withFocused $ windows . W.sink) | ||||
| 153 | |||||
| 154 | -- refresh | ||||
| 155 | , ((modMask, xK_n ), refresh) | ||||
| 156 | |||||
| 157 | -- focus | ||||
| 158 | , ((modMask, xK_Tab ), windows W.focusDown) | ||||
| 159 | , ((modMask, xK_j ), windows W.focusDown) | ||||
| 160 | , ((modMask, xK_k ), windows W.focusUp) | ||||
| 161 | , ((modMask, xK_m ), windows W.focusMaster) | ||||
| 162 | |||||
| 163 | -- swapping | ||||
| 164 | , ((modMask .|. shiftMask, xK_Return), windows W.swapMaster) | ||||
| 165 | , ((modMask .|. shiftMask, xK_j ), windows W.swapDown ) | ||||
| 166 | , ((modMask .|. shiftMask, xK_k ), windows W.swapUp ) | ||||
| 167 | |||||
| 168 | -- increase or decrease number of windows in the master area | ||||
| 169 | , ((modMask , xK_comma ), sendMessage (IncMasterN 1)) | ||||
| 170 | , ((modMask , xK_period), sendMessage (IncMasterN (-1))) | ||||
| 171 | |||||
| 172 | -- resizing | ||||
| 173 | , ((modMask, xK_h ), sendMessage Shrink) | ||||
| 174 | , ((modMask, xK_l ), sendMessage Expand) | ||||
| 175 | , ((modMask .|. shiftMask, xK_h ), sendMessage MirrorShrink) | ||||
| 176 | , ((modMask .|. shiftMask, xK_l ), sendMessage MirrorExpand) | ||||
| 177 | |||||
| 178 | -- mpd controls | ||||
| 179 | , ((modMask .|. controlMask, xK_h ), spawn "mpc prev") | ||||
| 180 | , ((modMask .|. controlMask, xK_t ), spawn "mpc pause") | ||||
| 181 | , ((modMask .|. controlMask, xK_n ), spawn "mpc play") | ||||
| 182 | , ((modMask .|. controlMask, xK_s ), spawn "mpc next") | ||||
| 183 | , ((modMask .|. controlMask, xK_g ), spawn "mpc seek -2%") | ||||
| 184 | , ((modMask .|. controlMask, xK_c ), spawn "mpc volume -4") | ||||
| 185 | , ((modMask .|. controlMask, xK_r ), spawn "mpc volume +4") | ||||
| 186 | , ((modMask .|. controlMask, xK_l ), spawn "mpc seek +2%") | ||||
| 187 | |||||
| c4781135 » | anderstornvig | 2009-05-15 | 188 | -- Alsa keyboard control | |
| 189 | -- XF86AudioMute | ||||
| 190 | , ((0 , 0x1008ff12), spawn "amixer -q set PCM toggle") | ||||
| 191 | -- XF86AudioLowerVolume | ||||
| 192 | , ((0 , 0x1008ff11), spawn "amixer -q set PCM 2- unmute") | ||||
| 193 | -- XF86AudioRaiseVolume | ||||
| 194 | , ((0 , 0x1008ff13), spawn "amixer -q set PCM 2+ unmute") | ||||
| 195 | |||||
| 40bedfc6 » | Anders Tornvig | 2009-04-04 | 196 | -- quit, or restart | |
| 197 | , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) | ||||
| 198 | , ((modMask , xK_q ), restart "xmonad" True) | ||||
| 199 | |||||
| 200 | -- Prompts | ||||
| 201 | , ((modMask, xK_g ), runOrRaisePrompt myXPConfig) | ||||
| 202 | |||||
| 203 | |||||
| 204 | -- float | ||||
| 205 | , ((modMask, xK_Left), withFocused (keysMoveWindow (-20,0))) -- move float left | ||||
| 206 | , ((modMask, xK_Right), withFocused (keysMoveWindow (20,0))) -- move float right | ||||
| 207 | , ((modMask, xK_Up), withFocused (keysMoveWindow (0,-20))) -- move float up | ||||
| 208 | , ((modMask, xK_Down), withFocused (keysMoveWindow (0,20))) -- move float down | ||||
| 209 | |||||
| 210 | , ((modMask .|. shiftMask, xK_Left), withFocused (keysResizeWindow (-20,0) (0,0))) --shrink float at right | ||||
| 211 | , ((modMask .|. shiftMask, xK_Right), withFocused (keysResizeWindow (20,0) (0,0))) --expand float at right | ||||
| 212 | , ((modMask .|. shiftMask, xK_Down), withFocused (keysResizeWindow (0,20) (0,0))) --expand float at bottom | ||||
| 213 | , ((modMask .|. shiftMask, xK_Up), withFocused (keysResizeWindow (0,-20) (0,0))) --shrink float at bottom | ||||
| 214 | |||||
| 215 | , ((modMask .|. controlMask, xK_Left), withFocused (keysResizeWindow (20,0) (1,0))) --expand float at left | ||||
| 216 | , ((modMask .|. controlMask, xK_Right), withFocused (keysResizeWindow (-20,0) (1,0))) --shrink float at left | ||||
| 217 | , ((modMask .|. controlMask, xK_Up), withFocused (keysResizeWindow (0,20) (0,1))) --expand float at top | ||||
| 218 | , ((modMask .|. controlMask, xK_Down), withFocused (keysResizeWindow (0,-20) (0,1))) --shrink float at top | ||||
| 219 | |||||
| 220 | |||||
| 221 | ] | ||||
| 222 | ++ | ||||
| 223 | -- Propmpts here | ||||
| 224 | --[ --(modMask, runOrRaisePrompt myXPConfig) | ||||
| 225 | {-, ("M-p M-p", runOrRaisePrompt myXPConfig) | ||||
| 226 | , ("M-p t", prompt ("urxvt -e") myXPConfig) | ||||
| 227 | , ("M-p M-t", prompt ("urxvt -e") myXPConfig) | ||||
| 228 | , ("M-p s", sshPrompt myXPConfig) | ||||
| 229 | , ("M-p M-s", sshPrompt myXPConfig) | ||||
| 230 | , ("M-p w", workspacePrompt myXPConfig (windows . W.view)) | ||||
| 231 | , ("M-p S-w", workspacePrompt myXPConfig (windows . W.shift)) | ||||
| 232 | , ("M-p M-w", workspacePrompt myXPConfig (windows . W.view)) | ||||
| 233 | , ("M-p M-S-w", workspacePrompt myXPConfig (windows . W.shift))-} | ||||
| 234 | --] | ||||
| 235 | |||||
| 236 | -- mod-[1..9] %! Switch to workspace N | ||||
| 237 | -- mod-shift-[1..9] %! Move client to workspace N | ||||
| 238 | [((m .|. modMask, k), windows $ f i) | ||||
| 239 | | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] | ||||
| 240 | , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] | ||||
| 241 | |||||
| 242 | ------------------------------------------------------------------------------- | ||||
