diff --git a/xmonad.hs b/xmonad.hs index bb9abef..0f33857 100644 --- a/xmonad.hs +++ b/xmonad.hs @@ -6,38 +6,56 @@ module Main (main) where -------------------------------------------------------------------------------- -import System.Exit +-- import System.Exit +import System.IO import XMonad -import XMonad.Config.Desktop -import XMonad.Hooks.DynamicLog -import XMonad.Hooks.ManageHelpers -import XMonad.Layout.BinarySpacePartition (emptyBSP) -import XMonad.Layout.NoBorders (noBorders) -import XMonad.Layout.ResizableTile (ResizableTall(..)) -import XMonad.Layout.ToggleLayouts (ToggleLayout(..), toggleLayouts) -import XMonad.Prompt -import XMonad.Prompt.ConfirmPrompt -import XMonad.Prompt.Shell +import XMonad.Actions.CopyWindow +import XMonad.Actions.CycleWS +-- import XMonad.Config.Desktop +-- import XMonad.Hooks.DynamicLog +import XMonad.Hooks.EwmhDesktops +-- import XMonad.Layout.IndependentScreens +-- import XMonad.Hooks.ManageHelpers +-- import XMonad.Layout.BinarySpacePartition (emptyBSP) +-- import XMonad.Layout.NoBorders (noBorders) +-- import XMonad.Layout.ResizableTile (ResizableTall(..)) +-- import XMonad.Layout.ToggleLayouts (ToggleLayout(..), toggleLayouts) +-- import XMonad.Prompt +-- import XMonad.Prompt.ConfirmPrompt +-- import XMonad.Prompt.Shell import XMonad.Util.EZConfig +import XMonad.Util.NamedActions +import XMonad.Util.Run + +import qualified XMonad.StackSet as W -------------------------------------------------------------------------------- main = do - spawn "xmobar" -- Start a task bar such as xmobar. + -- spawn "xmobar" -- Start a task bar such as xmobar. + + xmonad + $ ewmh + $ addDescrKeys' ((myModMask, xK_F1), showKeybindings) myKeys + $ def { terminal = myTerm + , modMask = myModMask + -- , workspaces = withScreens 2 ["name1", "name2"] + -- , layoutHook = myLayoutHook + } -- Start xmonad using the main desktop configuration with a few -- simple overrides: - xmonad $ desktopConfig - { modMask = mod4Mask -- Use the "Win" key for the mod key - , manageHook = myManageHook <+> manageHook desktopConfig - , layoutHook = desktopLayoutModifiers $ myLayouts - , logHook = dynamicLogString def >>= xmonadPropLog - } + -- xmonad $ desktopConfig + -- { modMask = mod4Mask -- Use the "Win" key for the mod key + -- , manageHook = myManageHook <+> manageHook desktopConfig + -- , layoutHook = desktopLayoutModifiers $ myLayouts + -- , logHook = dynamicLogString def >>= xmonadPropLog + -- } - `additionalKeysP` -- Add some extra key bindings: - [ ("M-S-q", confirmPrompt myXPConfig "exit" (io exitSuccess)) - , ("M-p", shellPrompt myXPConfig) - , ("M-", sendMessage (Toggle "Full")) - ] + -- `additionalKeysP` -- Add some extra key bindings: + -- [ ("M-S-q", confirmPrompt myXPConfig "exit" (io exitSuccess)) + -- , ("M-p", shellPrompt myXPConfig) + -- , ("M-", sendMessage (Toggle "Full")) + -- ] -------------------------------------------------------------------------------- -- | Customize layouts. @@ -46,19 +64,19 @@ main = do -- and 'BinarySpacePartition'. You can also use the 'M-' key -- binding defined above to toggle between the current layout and a -- full screen layout. -myLayouts = toggleLayouts (noBorders Full) others - where - others = ResizableTall 1 (1.5/100) (3/5) [] ||| emptyBSP +-- myLayouts = toggleLayouts (noBorders Full) others +-- where +-- others = ResizableTall 1 (1.5/100) (3/5) [] ||| emptyBSP -------------------------------------------------------------------------------- -- | Customize the way 'XMonad.Prompt' looks and behaves. It's a -- great replacement for dzen. -myXPConfig = def - { position = Top - , alwaysHighlight = True - , promptBorderWidth = 0 - , font = "xft:monospace:size=9" - } +-- myXPConfig = def +-- { position = Top +-- , alwaysHighlight = True +-- , promptBorderWidth = 0 +-- , font = "xft:monospace:size=9" +-- } -------------------------------------------------------------------------------- -- | Manipulate windows as they are created. The list given to @@ -67,12 +85,116 @@ myXPConfig = def -- -- Use the `xprop' tool to get the info you need for these matches. -- For className, use the second value that xprop gives you. -myManageHook = composeOne - [ className =? "Pidgin" -?> doFloat - , className =? "XCalc" -?> doFloat - , className =? "mpv" -?> doFloat - , isDialog -?> doCenterFloat +-- myManageHook = composeOne +-- [ className =? "Pidgin" -?> doFloat +-- , className =? "XCalc" -?> doFloat +-- , className =? "mpv" -?> doFloat +-- , isDialog -?> doCenterFloat - -- Move transient windows to their parent: - , transience +-- -- Move transient windows to their parent: +-- , transience +-- ] + + +-- keybindings +myModMask = mod4Mask + +myTerm = "urxvt" +myBrowser = "brave" +myVBox = "VBoxManage startvm win8raw" +myEditor = "emacsclient -c -e \"(select-frame-set-input-focus (selected-frame))\"" +myCalc = "urxvt -e R" +myRun = "rofi -show run" +myAppRun = "rofi -show drun" +myClipboard = "rofi -modi \"clipboard:greenclip print\" \ + \-show clipboard -run-command '{cmd}' \ + \-theme-str '#element.selected.normal \ + \{ background-color: #00c44e; }'" +myNetSel = "networkmanager_dmenu" +myWinSel = "rofi -show window" +myScreenCap = "screencap -s" --external script +myWindowCap = "screencap -w" --external script +myScreenLock = "screenlock" --external script + +showKeybindings :: [((KeyMask, KeySym), NamedAction)] -> NamedAction +showKeybindings x = addName "Show Keybindings" $ io $ do + h <- spawnPipe "zenity --text-info --font=DejaVu Sans" + hPutStr h (unlines $ showKm x) + hClose h + return () + +mkNamedSubmap c sectionName bindings = + (subtitle sectionName:) $ mkNamedKeymap c bindings + +myKeys c = + mkNamedSubmap c "Window Focus" + [ ("M-j", addName "focus down" $ windows W.focusDown) + , ("M-k", addName "focus up" $ windows W.focusUp) + , ("M-m", addName "focus master" $ windows W.focusMaster) + ] ++ + + mkNamedSubmap c "Window Layouts" + [ ("M-S-j", addName "swap down" $ windows W.swapDown) + , ("M-S-k", addName "swap up" $ windows W.swapUp) + , ("M-", addName "swap master" $ windows W.swapMaster) + , ("M-", addName "next layout" $ sendMessage NextLayout) + , ("M-S-", addName "reset layout" $ setLayout $ XMonad.layoutHook c) + , ("M-t", addName "sink tiling" $ withFocused $ windows . W.sink) + ] ++ + + mkNamedSubmap c "Window Sizing" + [ ("M--", addName "shrink" $ sendMessage Shrink) + , ("M-=", addName "expand" $ sendMessage Expand) + ] ++ + + -- mkNamedSubmap c "Master Windows" + -- [ ("M-=", addName "add master window" $ sendMessage (IncMasterN 1)) + -- , ("M--", addName "remove master window" $ sendMessage (IncMasterN (-1))) + -- ] ++ + + mkNamedSubmap c "Workspaces" + [ (mods ++ show i, addName (msg ++ " " ++ show i) $ windows $ f w) + | (w, i) <- zip (XMonad.workspaces c) [1..] :: [(String, Int)] + , (mods, msg, f) <- + [ ("M-", "switch to workspace", W.view) + , ("M-S-", "move client to workspace", W.shift)] + ] ++ + + mkNamedSubmap c "Screens" + [ ("M-l", addName "move up screen" nextScreen) + , ("M-h", addName "move down screen" prevScreen) + , ("M-C-l", addName "move client up screen" $ shiftNextScreen >> nextScreen) + , ("M-C-h", addName "move client down screen" $ shiftPrevScreen >> prevScreen) + , ("M-S-l", addName "shift up screen" $ swapNextScreen >> nextScreen) + , ("M-S-h", addName "shift down screen" $ swapPrevScreen >> prevScreen) + ] ++ + + mkNamedSubmap c "Actions" + [ ("M-q", addName "close window" kill1) + , ("M-r", addName "run program" $ spawn myRun) + , ("M-C-s", addName "capture screen" $ spawn myScreenCap) + , ("M-C-S-s", addName "capture focused window" $ spawn myWindowCap) + , ("M-", addName "lock screen" $ spawn myScreenLock) + ] ++ + + mkNamedSubmap c "Launchers" + [ ("", addName "select/launch app" $ spawn myAppRun ) + , ("M-g", addName "launch clipboard manager" $ spawn myClipboard ) + , ("M-a", addName "launch network selector" $ spawn myNetSel ) + , ("M-w", addName "launch window selector" $ spawn myWinSel ) + , ("M-C-e", addName "run editor" $ spawn myEditor) + , ("M-C-w", addName "run browser" $ spawn myBrowser) + , ("M-C-t", addName "run terminal" $ spawn myTerm) + , ("M-C-q", addName "run calc" $ spawn myCalc) + , ("M-C-v", addName "run windows VM" $ spawn myVBox) + ] ++ + + mkNamedSubmap c "System" + [ ("M-.", addName "backlight up" $ spawn "adj_backlight up") + , ("M-,", addName "backlight down" $ spawn "adj_backlight down") + , ("M-", addName "restart xmonad" $ spawn "xmonad --restart") + , ("M-S-", addName "recompile xmonad" $ spawn "xmonad --recompile && xmonad --restart") + -- , ("M-", addName "quit xmonad" $ + -- confirmPrompt hotPromptTheme "Quit XMonad?" $ + -- io (exitWith ExitSuccess)) ]