From 21d2fa693e6a98589e8a98e18e8416dce87c2e31 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Sat, 16 May 2020 13:57:54 +0200
Subject: [PATCH] Update scratchpads

---
 xmonad.hs | 101 +++++++++++++++++++++++-------------------------------
 1 file changed, 42 insertions(+), 59 deletions(-)

diff --git a/xmonad.hs b/xmonad.hs
index 9de8175..0439a21 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
-- 
GitLab