module KeyBindings ( KeyBindings.modify ) where import Data.List (sort, isSuffixOf) import Graphics.X11.Types import System.Exit import Text.EditDistance import XMonad import XMonad.Actions.CycleWS import XMonad.Core import XMonad.Layout.ToggleLayouts import XMonad.Operations import XMonad.Prompt import XMonad.Prompt.ConfirmPrompt import XMonad.Prompt.Shell import XMonad.Util.EZConfig import qualified Solarized as S import qualified XMonad.StackSet as W modify :: XConfig l -> XConfig l modify conf = conf { modMask = mod4Mask -- Use the "Win" key for the mod key } `additionalKeysP` -- Add some extra key bindings: [ ("M-S-q", confirmPrompt promptConfig "exit" (io exitSuccess)) , ("-b", sendMessage (Toggle "Full")) , ("", spawn "/run/current-system/sw/bin/xbacklight -10") , ("", spawn "/run/current-system/sw/bin/xbacklight +10") , ("M-", kill) , ("M-", windows W.focusDown) , ("M-", sendMessage (Toggle "Full")) , ("M-$", sendMessage (Toggle "Full")) , ("M-", prevWS) , ("M-e", nextScreen) , ("M-", nextWS) , ("M-", toggleWS) , ("M-", windows W.focusUp) , ("M-S-", spawn "/run/current-system/sw/bin/i3lock-fancy -g -p") , ("M-S-", shiftToPrev >> prevWS) , ("M-S-", shiftToNext >> nextWS) , ("M-S-p", shellPrompt promptConfig) , ("M-S-s", spawn "sleep 0.2 ; /run/current-system/sw/bin/scrot -s /tmp/screenSel.png") , ("M-p", fuzzyPrompt promptConfig) , ("M-s", spawn "/run/current-system/sw/bin/scrot /tmp/screen.png") ] `additionalKeys`-- Add some more (automatic) key bindings: [ ((mod4Mask .|. mask, key), windows $ actionWith tag) | (tag, key) <- zip (workspaces conf) [ xK_F1 .. ] , (mask, actionWith) <- zip [ 0, shiftMask ] [ W.view, W.shift ] ] promptConfig = def { position = Top , alwaysHighlight = True , bgColor = S.magenta , bgHLight = S.base0 , borderColor = S.magenta , defaultText = "" , fgColor = S.base02 , fgHLight = S.base03 , font = "xft:Iosevka Term:style=Regular:size=8" , height = 24 , promptBorderWidth = 5 } -- Slightly taken from -- https://mail.haskell.org/pipermail/xmonad/2010-October/010671.html data FuzzySpawn = FuzzySpawn deriving (Read, Show) instance XPrompt FuzzySpawn where showXPrompt _ = "RunC: " fuzzyPrompt config = do cmds <- io getCommands let compl s | null s = [] | otherwise = let weight c = levenshteinDistance defaultEditCosts s c in map snd $ take 20 $ sort $ map (\c -> (weight c,c)) cmds mkXPrompt FuzzySpawn config (return . compl) spawn