diff --git a/xmonad.hs b/xmonad.hs index 9de817540616d325eb57b8f43a7c90a86826a337..0439a21d0331c0dca9a54b2f27b405b55bca3a1a 100644 --- a/xmonad.hs +++ b/xmonad.hs @@ -8,6 +8,8 @@ import System.Exit import System.Posix.Env import Data.Map as M import Data.Char +import Data.List (intercalate) +import Data.List.Split (splitOn) import Data.Maybe import Graphics.X11.ExtraTypes.XF86 @@ -29,14 +31,15 @@ import XMonad.Actions.DynamicWorkspaceGroups import qualified XMonad.Actions.DynamicWorkspaceOrder as DO -- Utils -import XMonad.Util.NamedScratchpad +import XMonad.Util.Scratchpad +import XMonad.Util.SessionStart import XMonad.Util.SpawnOnce import XMonad.Util.Run import XMonad.Util.EZConfig (additionalKeys) import XMonad.Util.NamedWindows import XMonad.Util.Loggers -import XMonad.Util.Scratchpad import XMonad.Util.WorkspaceCompare +import XMonad.Util.ExclusiveScratchpads -- Hooks import XMonad.Hooks.ICCCMFocus @@ -47,6 +50,7 @@ import XMonad.Hooks.UrgencyHook import XMonad.Hooks.SetWMName import XMonad.Hooks.EwmhDesktops (ewmh) import XMonad.Hooks.DebugStack +import XMonad.Hooks.Minimize -- Prompts import XMonad.Prompt @@ -55,6 +59,8 @@ import XMonad.Prompt.Layout import XMonad.Prompt.ConfirmPrompt -- Layouts +import XMonad.Layout.Minimize +import XMonad.Layout.ToggleLayouts import XMonad.Layout.Named import XMonad.Layout.ResizableTile import XMonad.Layout.LayoutModifier @@ -83,9 +89,9 @@ main = do , normalBorderColor = "#002b36" , terminal = myTerm , workspaces = ["#"] - , manageHook = manageHook defaultConfig <+> myManageHook <+> manageDocks <+> namedScratchpadManageHook myScratchPads + , manageHook = manageHook defaultConfig <+> myManageHook <+> manageDocks <+> xScratchpadsManageHook myScratchPads , startupHook = docksStartupHook <+> setWMName "LG3D" <+> myStartupHook - , handleEventHook = docksEventHook + , handleEventHook = docksEventHook <+> minimizeEventHook , layoutHook = myLayoutHook , borderWidth = 1 , logHook = do @@ -102,7 +108,7 @@ main = do , ppHiddenNoWindows = xmobarColor "#707070" "" . (\ x -> x) . (Prelude.map toUpper) , ppUrgent = xmobarColor "white" "#268bd2" . (\ x -> x) . (Prelude.map toUpper) , ppVisibleNoWindows = Just (xmobarColor "#707070" "" . (\ x -> x) . (Prelude.map toUpper)) - , ppOrder = \(ws:layout:title:extra) -> [ws, "(" ++ layout ++ ")"] ++ extra ++ [ " " ++ title ] + , ppOrder = \(ws:layout:title:extra) -> [ws, "(" ++ (replace "minimize " "" layout) ++ ")"] } } `additionalKeys` myAdditionalKeys @@ -111,17 +117,18 @@ main = do ------------------ myStartupHook = do - spawnOnce "/home/kubat/.local/bin/xbanish" - spawn "/home/kubat/.xmonad/init.sh" - spawn "xrdb /home/kubat/.Xresources" - spawnOnce "feh --bg-scale /home/kubat/.xmonad/wallpaper &" - spawn "setxkbmap kubat" - -myLayoutHook = - (onWorkspace "#" (noBorders $ Full)) - ((avoidStruts $ smartBorders $ windowNavigation $ emptyBSP) ||| - (named "Tall" $ avoidStruts $ smartBorders $ windowNavigation $ ResizableTall 1 (3.0 / 100.0) 0.5 []) ||| - (avoidStruts $ noBorders $ Full)) + spawnOnce "/home/kubat/.local/bin/xbanish" + spawn "/home/kubat/.xmonad/init.sh" + spawn "xrdb /home/kubat/.Xresources" + spawnOnce "feh --bg-scale /home/kubat/.xmonad/wallpaper &" + spawn "setxkbmap kubat" + +myLayoutHook = minimize $ boringAuto + ( (onWorkspace "#" (named "Full" $ noBorders $ Full)) + ((named "BSP" $ avoidStruts $ windowNavigation $ emptyBSP) ||| + (named "Tall" $ avoidStruts $ windowNavigation $ ResizableTall 1 (3.0 / 100.0) 0.5 []) ||| + (named "Full" $ avoidStruts $ noBorders $ Full)) + ) myManageHook = do composeAll @@ -133,9 +140,9 @@ myManageHook = do , manageDocks ] -nonNSP = WSIs (return (\ws -> W.tag ws /= "nsp" && isJust (W.stack ws))) -myTerm = "st" -myXPConfig = def { font = "xft:SourceCodePro:size=9" , bgColor = "black" , position = Top } +myTerm = "st" +myXPConfig = def { font = "xft:SourceCodePro:size=9" , bgColor = "black" , position = Top } +replace from to = intercalate to . splitOn from data LibNotifyUrgencyHook = LibNotifyUrgencyHook deriving (Read, Show) instance UrgencyHook LibNotifyUrgencyHook where @@ -144,16 +151,6 @@ instance UrgencyHook LibNotifyUrgencyHook where Just idx <- fmap (W.findTag w) $ gets windowset safeSpawn "notify-send" [show name, "workspace " ++ idx] -data MyPrompt = MyPrompt String -instance XPrompt MyPrompt where - showXPrompt (MyPrompt name) = "Select " ++ name ++ " " - -mySelectDisplay "single" = spawn "/home/kubat/.screenlayout/single.sh" -mySelectDisplay "duplicate" = spawn "/home/kubat/.screenlayout/duplicate.sh" -mySelectDisplay "l1080" = spawn "/home/kubat/.screenlayout/lateral_1080.sh" -mySelectDisplay "l1024" = spawn "/home/kubat/.screenlayout/lateral_1024.sh" -mySelectDisplay "l1280" = spawn "/home/kubat/.screenlayout/lateral_1280.sh" - ------------- -- My keys -- ------------- @@ -195,11 +192,14 @@ myAdditionalKeys = , ((mod4Mask, xK_Print), spawn "scrot $(date +%F-%H:%M:%S).png -e 'mv $f /home/kubat/pictures/screenshot/'") , ((mod4Mask, xK_F2), confirmPrompt myXPConfig "poweroff" $ spawn "systemctl poweroff") , ((mod4Mask, xK_q), confirmPrompt myXPConfig "quit" $ io (exitWith ExitSuccess)) - , ((mod4Mask, xK_F8), mkXPrompt (MyPrompt "display") myXPConfig (mkComplFunFromList' ["single", "duplicate", "l1080", "l1024", "l1280"]) $ mySelectDisplay) , ((mod4Mask .|. shiftMask, xK_c), kill) -- Workspaces - , ((mod4Mask .|. shiftMask, xK_Tab), focusDown) + , ((mod4Mask, xK_j), focusUp) + , ((mod4Mask, xK_k), focusDown) + , ((mod4Mask, xK_m), focusMaster) + , ((mod4Mask, xK_Tab), return ()) + , ((mod4Mask .|. shiftMask, xK_Tab), return ()) , ((mod4Mask .|. controlMask, xK_space), withFocused $ windows . W.sink) , ((mod4Mask, xK_comma), moveTo Prev HiddenWS) @@ -212,19 +212,6 @@ myAdditionalKeys = , ((mod4Mask, xK_exclam), nextScreen) , ((mod4Mask .|. shiftMask, xK_exclam), shiftNextScreen) - -- Layout control - , ((mod4Mask, xK_l), layoutPrompt myXPConfig) - - -- Sublayout - , ((mod4Mask, xK_z), submap . M.fromList $ - [ ((0, xK_Up), sendMessage $ pullGroup U) - , ((0, xK_Down), sendMessage $ pullGroup D) - , ((0, xK_Left), sendMessage $ pullGroup L) - , ((0, xK_Right), sendMessage $ pullGroup R) - , ((0, xK_m), withFocused (sendMessage . MergeAll)) - , ((0, xK_u), withFocused (sendMessage . UnMerge)) - ]) - -- Control for the bsp layout , ((mod4Mask .|. shiftMask, xK_8), do { sendMessage $ ExpandTowards U ; sendMessage (IncMasterN 1) }) , ((mod4Mask .|. shiftMask, xK_6), do { sendMessage $ ExpandTowards R ; sendMessage Expand }) @@ -245,9 +232,8 @@ myAdditionalKeys = , ((mod4Mask, xK_s), sendMessage XMonad.Layout.BinarySpacePartition.Swap) -- Dynamic workspaces and workspace control - , ((mod4Mask, xK_m), selectWorkspace myXPConfig) , ((mod4Mask, xK_w), submap . M.fromList $ - [ ((0, xK_BackSpace), removeEmptyWorkspace) + [ ((0, xK_BackSpace), removeWorkspace) , ((0, xK_n), addWorkspacePrompt myXPConfig) , ((0, xK_r), renameWorkspace myXPConfig) ]) @@ -272,9 +258,10 @@ myAdditionalKeys = , ((mod4Mask, xK_F4), spawn "asus-kbd-backlight up") -- Scratchpads - -- namedScratchpadAction myScratchPads "the_name" , ((mod4Mask, xK_x), submap . M.fromList $ - [ ((0, xK_Return), namedScratchpadAction myScratchPads "terminal") + [ ((0, xK_Return), do { scratchpadAction myScratchPads "terminal" ; sendMessage UpdateBoring }) + , ((0, xK_p), do { scratchpadAction myScratchPads "perso" ; sendMessage UpdateBoring }) + , ((0, xK_x), hideAll myScratchPads) ]) ] @@ -282,14 +269,10 @@ myAdditionalKeys = -- My scratchpads -- -------------------- -myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm - ] - where - spawnTerm = "st -c scratchpad" - findTerm = className =? "scratchpad" - manageTerm = customFloating $ W.RationalRect l t w h - where - h = 0.9 - w = 0.9 - t = 0.95 -h - l = 0.95 -w +myScratchPads = mkXScratchpads [ ("perso", "st -c perso", className =? "perso") + , ("terminal", "st -c terminal", className =? "terminal") + ] $ customFloating $ W.RationalRect l t w h + where h = 0.9 + w = 0.9 + t = 0.95 -h + l = 0.95 -w