xmonad-config/xmonad.hs

212 lines
8.2 KiB
Haskell
Raw Normal View History

2019-10-27 23:41:53 -04:00
--------------------------------------------------------------------------------
-- | Example.hs
--
-- Example configuration file for xmonad using the latest recommended
-- features (e.g., 'desktopConfig').
module Main (main) where
--------------------------------------------------------------------------------
2020-02-07 22:28:50 -05:00
-- import System.Exit
import System.IO
2019-10-27 23:41:53 -04:00
import XMonad
2020-02-07 22:28:50 -05:00
import XMonad.Actions.CopyWindow
import XMonad.Actions.CycleWS
-- import XMonad.Config.Desktop
-- import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
2020-02-08 16:01:15 -05:00
import XMonad.Hooks.ManageDocks
2020-02-07 22:28:50 -05:00
-- 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
2019-10-27 23:41:53 -04:00
import XMonad.Util.EZConfig
2020-02-07 22:28:50 -05:00
import XMonad.Util.NamedActions
import XMonad.Util.Run
import qualified XMonad.StackSet as W
2019-10-27 23:41:53 -04:00
--------------------------------------------------------------------------------
main = do
-- TODO this is never killed on shutdown
2020-02-08 16:01:15 -05:00
spawn "xmobar"
2020-02-07 22:28:50 -05:00
xmonad
$ ewmh
$ addDescrKeys' ((myModMask, xK_F1), showKeybindings) myKeys
$ def { terminal = myTerm
, modMask = myModMask
2020-02-08 16:01:15 -05:00
, layoutHook = avoidStruts $ layoutHook def
, manageHook = manageDocks <+> manageHook def
, handleEventHook = docksEventHook <+> handleEventHook def
, startupHook = docksStartupHook <+> startupHook def
2020-02-07 22:28:50 -05:00
-- , workspaces = withScreens 2 ["name1", "name2"]
}
2019-10-27 23:41:53 -04:00
-- Start xmonad using the main desktop configuration with a few
-- simple overrides:
2020-02-07 22:28:50 -05:00
-- 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-<Esc>", sendMessage (Toggle "Full"))
-- ]
2019-10-27 23:41:53 -04:00
--------------------------------------------------------------------------------
-- | Customize layouts.
--
-- This layout configuration uses two primary layouts, 'ResizableTall'
-- and 'BinarySpacePartition'. You can also use the 'M-<Esc>' key
-- binding defined above to toggle between the current layout and a
-- full screen layout.
2020-02-07 22:28:50 -05:00
-- myLayouts = toggleLayouts (noBorders Full) others
-- where
-- others = ResizableTall 1 (1.5/100) (3/5) [] ||| emptyBSP
2019-10-27 23:41:53 -04:00
--------------------------------------------------------------------------------
-- | Customize the way 'XMonad.Prompt' looks and behaves. It's a
-- great replacement for dzen.
2020-02-07 22:28:50 -05:00
-- myXPConfig = def
-- { position = Top
-- , alwaysHighlight = True
-- , promptBorderWidth = 0
-- , font = "xft:monospace:size=9"
-- }
2019-10-27 23:41:53 -04:00
--------------------------------------------------------------------------------
-- | Manipulate windows as they are created. The list given to
-- @composeOne@ is processed from top to bottom. The first matching
-- rule wins.
--
-- Use the `xprop' tool to get the info you need for these matches.
-- For className, use the second value that xprop gives you.
2020-02-07 22:28:50 -05:00
-- myManageHook = composeOne
-- [ className =? "Pidgin" -?> doFloat
-- , className =? "XCalc" -?> doFloat
-- , className =? "mpv" -?> doFloat
-- , isDialog -?> doCenterFloat
-- -- Move transient windows to their parent:
-- , transience
-- ]
-- keybindings
myModMask = mod4Mask
_myRofi = "rofi -m -4" -- show rofi always with the focused window
2020-02-07 22:28:50 -05:00
myTerm = "urxvt"
myBrowser = "brave"
myVBox = "VBoxManage startvm win8raw"
myEditor = "emacsclient -c -e \"(select-frame-set-input-focus (selected-frame))\""
myCalc = "urxvt -e R"
myRun = _myRofi ++ " -show run"
myAppRun = _myRofi ++ " -show drun"
myClipboard = _myRofi ++ " -modi \"clipboard:greenclip print\" \
2020-02-07 22:28:50 -05:00
\-show clipboard -run-command '{cmd}' \
\-theme-str '#element.selected.normal \
\{ background-color: #00c44e; }'"
myNetSel = "networkmanager_dmenu -m -4"
myWinSel = _myRofi ++ " -show window"
2020-02-07 22:28:50 -05:00
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-<Return>", addName "swap master" $ windows W.swapMaster)
, ("M-<Space>", addName "next layout" $ sendMessage NextLayout)
, ("M-S-<Space>", 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-<Delete>", addName "lock screen" $ spawn myScreenLock)
] ++
mkNamedSubmap c "Launchers"
[ ("<XF86Search>", 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")
2020-02-07 22:41:35 -05:00
, ("M-M1-,", addName "backlight min" $ spawn "adj_backlight min")
, ("M-M1-.", addName "backlight max" $ spawn "adj_backlight max")
2020-02-08 17:33:26 -05:00
, ("<XF86AudioLowerVolume>", addName "volume down" $ spawn "amixer -q sset Master 2%-")
, ("<XF86AudioRaiseVolume>", addName "volume up" $ spawn "amixer -q sset Master 2%+")
, ("<XF86AudioMute>", addName "volume mute" $ spawn "amixer set Master toggle")
2020-02-08 18:38:33 -05:00
, ("M-<F2>", addName "restart xmonad" $ spawn "killall xmobar; xmonad --restart")
, ("M-S-<F2>", addName "recompile xmonad" $ spawn "killall xmobar; xmonad --recompile && xmonad --restart")
2020-02-07 22:28:50 -05:00
-- , ("M-<Home>", addName "quit xmonad" $
-- confirmPrompt hotPromptTheme "Quit XMonad?" $
-- io (exitWith ExitSuccess))
2019-10-27 23:41:53 -04:00
]