--
-- Miguel's Xmonad Config.
-- Last Update: 2019-05-18
-- Runs on xmonad 0.15
--
import XMonad
import XMonad.Actions.PhysicalScreens
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Actions.SpawnOn
import XMonad.Util.Run
import qualified XMonad.StackSet as W
import XMonad.Util.EZConfig
import XMonad.Hooks.SetWMName
import XMonad.Hooks.ICCCMFocus
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.UrgencyHook as UH
import XMonad.Util.NamedWindows
import XMonad.Util.WorkspaceCompare
import System.IO
import XMonad.Layout.Gaps
import XMonad.Layout.NoBorders
import XMonad.Layout.Accordion
import XMonad.Layout.Circle
import XMonad.Layout.Column
import XMonad.Layout.Grid
import XMonad.Layout.OneBig
import XMonad.Layout.Spiral
import XMonad.Layout.ThreeColumns
import XMonad.Layout.Tabbed
configPath="/home/miguel/git/dotfiles/xmonad"
spawnToWorkspace :: String -> String -> X ()
spawnToWorkspace program workspace = do spawn program
windows $ W.greedyView workspace
spawnOnSingle workspace prog = spawnOn workspace $ "xterm -e " ++ configPath ++ "/single-startup.sh " ++ prog
-- http://pbrisbin.com/posts/using_notify_osd_for_xmonad_notifications/
data LibNotifyUrgencyHook = LibNotifyUrgencyHook deriving (Read, Show)
instance UrgencyHook LibNotifyUrgencyHook where
urgencyHook LibNotifyUrgencyHook w = do
name <- getName w
-- Just idx <- fmap (W.findTag w) $ gets windowset
-- safeSpawn "notify-send" [show name, "workspace " ++ idx]
spawn "xterm"
layout = tiled ||| Mirror tiled ||| noBorders Full ||| Grid ||| ThreeColMid 1 (3/100) (1/2)
where
tiled = Tall nmaster delta ratio
nmaster = 1
ratio = 1/2
delta = 3/100
myWorkspaces =
[
(xK_quoteleft, "~"),
(xK_1, "1"),
(xK_2, "2"),
(xK_3, "3"),
(xK_4, "4"),
(xK_5, "5"),
(xK_6, "6"),
(xK_7, "7"),
(xK_8, "8"),
(xK_9, "9"),
(xK_0, "0"),
(xK_minus, "-"),
(xK_equal, "+"),
(xK_BackSpace, "<")
]
main = do
xmproc <- spawnPipe $ "/usr/bin/xmobar "++configPath++"/xmobarrc"
--xmonad $ withUrgencyHookC LibNotifyUrgencyHook {} urgencyConfig {suppressWhen=UH.Never,remindWhen=UH.Repeatedly 10 5}
xmonad $ withUrgencyHookC BorderUrgencyHook { urgencyBorderColor = "#ff0000" } urgencyConfig {suppressWhen=UH.Never,remindWhen=UH.Dont} -- remind does not work anyway :(
$ docks
$ ewmh defaultConfig {
workspaces = (map snd myWorkspaces)
,borderWidth = 2
,normalBorderColor = "#586e75"
,focusedBorderColor = "#eee8d5"
-- ,focusFollowsMouse = False
,modMask = mod4Mask
,terminal = "xterm" -- -e tmux"
-- if you are using xmonad 0.9, you can avoid web flash videos getting cropped in fullscreen like so:
-- ,manageHook = ( isFullscreen --> doFullFloat ) <+> manageDocks <+> manageHook defaultConfig,
-- no longer needed in 0.10
-- ,manageHook = composeAll [] <+> manageSpawn
,manageHook = composeAll[
className =? "Xmessage" --> doFloat
] <+> manageSpawn <+> manageDocks <+> manageHook def
-- (className=? "qemu-system-i386" -->doShift "2")
-- <+> ( title=?"xterm-float" --> (doRectFloat$W.RationalRect 0 0 0.5 0.5) )
-- <+> manageSpawn <+> manageDocks <+> manageHook defaultConfig
,layoutHook = avoidStruts $ layout
-- ,startupHook = do spawnOnSingle "6" "mutt"
-- spawnOnSingle "6" "mcabber"
-- spawnOnSingle "6" "weechat"
-- spawnOn "6" "liferea"
-- setWMName "LG3D"
,logHook =
takeTopFocus >>( dynamicLogWithPP $ xmobarPP
{
-- ppOrder = reverse,
ppSort = mkWsSort $ getXineramaPhysicalWsCompare horizontalScreenOrderer, --getSortByXineramaPhysicalRule def,
-- ppSort = getSortByXineramaPhysicalRule,
-- ppSort = mkWsSort $ getXineramaPhysicalWsCompare,
-- ppSort = mkWsSort $ getXineramaWsCompare,
ppOutput = hPutStrLn xmproc,
ppTitle = xmobarColor "#859900" "" . shorten 50, --green
ppCurrent = (\x -> ""++x++""), --red
ppVisible = (\x -> ""++x++""), --green
ppHidden = (\x -> ""++x++""), --yellow
ppHiddenNoWindows = (\x -> ""++x++""), --gray
ppVisibleNoWindows = Just (\x-> ""++x++"") --blue
})
} `additionalKeys`
(
[
((mod4Mask, xK_F1), spawn "xterm -e vim ~/.xmonad/xmonad.hs")
,((mod4Mask, xK_b ), sendMessage ToggleStruts)
,((mod4Mask, xK_p ), spawn "dmenu_run -nb '#073642' -nf '#fdf6e3' -sb '#268bd2' -sf '#073642' -fn 'DejaVu Sans-10'")
,((mod4Mask, xK_x ), spawn "slock")
,((mod4Mask, xK_m ), spawn "xterm -e \"fetchmail&&sleep 2\"")
-- ,((mod4Mask, xK_c ), spawn "xterm -e \"echo clipboard&&xclip -o -selection clipboard&&echo&&echo&&echo primary&&xclip -o -selection p&&echo&&echo&&echo [press enter]&&read\"")
-- ,((mod4Mask, xK_s ), spawn "import /tmp/screen.png && feh -. /tmp/screen.png")
-- ,((mod4Mask, xK_l ), sendMessage Expand)
-- , ((mod4Mask, xK_m ), spawn "notify-send \"$( fetchmail )\"")
--,((mod4Mask .|. shiftMask, xK_x ), spawn "ans=$(zenity --list --text 'wanna restart?' --radiolist --column 'Pick' --column 'Opinion' TRUE '' FALSE 'sudo shutdown -r now' FALSE 'sudo shutdown -h now' ); $ans")
-- mods-s screenshot window
-- , ((mod4Mask, xK_s ), spawn "xwd | convert - /tmp/screen.png && gimp /tmp/screen.png")
--
-- mods-s spawn surf wrapper
-- ,((mod4Mask, xK_v ), spawn "bash -l -c \"/home/miguel/opt/vim/bin/gvim -c \\\":cd `echo -e '/home/miguel/_int/dev/FoolOs\n/home/miguel/' | dmenu` \\\" \"")
-- , ((mod4Mask, xK_s ), spawn "surf")
-- mods-f fullscreen screenshot
-- mod-g - go/ jump to window
-- , ((mod4Mask, xK_g ), spawn "wmctrl -a \"$(wmctrl -l | sed s/[^[:blank:]]*..[^[:blank:]]*.[^[:blank:]]*.// | dmenu)\"")
-- , ((mod4Mask, xK_q ), spawn "notify-send \"mod-q disabled\"")
-- , ((mod4Mask .|. shiftMask, xK_space ), spawn "xterm -e /home/miguel/bin/msrv")
-- window list
-- http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Prompt-Window.html
-- , ((mod4Mask .|. shiftMask, xK_g ), gotoMenu)
-- , ((mod4Mask .|. shiftMask, xK_b ), bringMenu)
]
++
[
((m .|. mod4Mask, key), screenWorkspace sc >>= flip whenJust (windows . f)) -- Replace 'mod1Mask' with your mod key of choice.
| (key, sc) <- zip [xK_q,xK_w, xK_e, xK_r] [2,1,0,3] -- change to match your screen order
, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
]
++
[
((mod4Mask, key), (windows $ W.greedyView ws))
| (key,ws) <- myWorkspaces
]
++
[
((mod4Mask .|. shiftMask, key), (windows $ W.shift ws))
| (key,ws) <- myWorkspaces
]
)