{-# OPTIONS_GHC -Wall #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
import Data.Default
+import qualified Data.Char as Char
import Data.List as List
import Data.Ratio
import System.Exit
-import System.IO
import qualified Data.Map as Map
+import Control.Arrow (first)
-- import XMonad.Actions.DwmPromote
-- import XMonad.Actions.Warp
import XMonad.Hooks.UrgencyHook
import XMonad.Layout.Fullscreen
import XMonad.Layout.Grid
-import XMonad.Layout.IndependentScreens
import XMonad.Layout.LayoutCombinators
import XMonad.Layout.Magnifier
import XMonad.Layout.MultiToggle
import XMonad.Layout.Spiral
import XMonad.Layout.Tabbed
import XMonad.Layout.ThreeColumns
-import XMonad.Util.Ungrab (unGrab)
+import XMonad.Prompt
+import XMonad.Prompt.FuzzyMatch
+import XMonad.Prompt.Pass
--import XMonad.Operations (unGrab) -- TODO: needs xmonad 0.18
import XMonad.Util.SpawnOnce
import qualified XMonad.StackSet as W
-- Start a terminal
((modMask, xK_Return), spawnExec $ XMonad.terminal conf)
-- Launch a program
- , ((modMask, xK_Menu), spawnExec "rofi -show run -no-disable-history -run-command \"bash -c 'systemd-run --user --unit=app-org.rofi.\\$(systemd-escape \\\"{cmd}\\\")@\\$RANDOM -p CollectMode=inactive-or-failed {cmd}'\"")
+ , ((modMask, xK_Menu), spawnCommand)
+ , ((modMask, xK_a), spawnCommand)
-- Browse the filesystem
, ((modMask, xK_BackSpace), spawnExec "systemd-run --user --unit=app-org.rofi.caja@$RANDOM -p CollectMode=inactive-or-failed caja")
-- Lock the screen
- , ((0, xK_Pause), unGrab >> spawnExec "loginctl lock-session \"$XDG_SESSION_ID\"")
+ , ((0, xK_Pause), {-unGrab >>-} spawnExec "loginctl lock-session \"$XDG_SESSION_ID\"")
+ , ((modMask, xK_Delete), {-unGrab >>-} spawnExec "loginctl lock-session \"$XDG_SESSION_ID\"")
-- Take a full screenshot
- , ((0, xK_Print), spawn "cd ~/img/cap && scrot --quality 42 '%Y-%m-%d_%H-%M-%S.png' && caja ~/img/cap")
+ , ((0, xK_Print), spawn "mkdir -p ~/Images/screenshots && scrot --quality 42 ~/Images/screenshots/'%Y-%m-%d_%H-%M-%S.png' && caja ~/Images/screenshots")
-- Take a selective screenshot
, ((modMask, xK_Print), spawn "select-screenshot")
-- Restart xmonad
, ((modMask, xK_End), restart "xmonad" True)
+ , ((modMask, xK_p), passPrompt dtXPConfig)
+ , ((modMask .|. controlMask, xK_p), passGeneratePrompt dtXPConfig)
+ , ((modMask .|. controlMask .|. shiftMask, xK_p), passRemovePrompt dtXPConfig)
+
-- Workspace management
-- XF86Back: Switch to previous workspace
, ((0, xK_XF86Backward), prevWS)
, ((modMask, xK_j), prevWS)
+ , ((modMask, xK_Page_Up), prevWS)
-- Switch to next workspace
, ((0, xK_XF86Forward), nextWS)
, ((modMask, xK_l), nextWS)
+ , ((modMask, xK_Page_Down), nextWS)
-- XF86Back: Move the current client to the previous workspace and go there
, ((modMask, xK_XF86Backward), shiftToPrev >> prevWS)
, ((modMask .|. shiftMask, xK_j), shiftToPrev >> prevWS)
, fontName = "Hack 7"
}
+spawnCommand = spawnExec "rofi -show run -no-disable-history -run-command \"bash -c 'systemd-run --user --unit=app-org.rofi.\\$(systemd-escape \\\"{cmd}\\\")@\\$RANDOM -p CollectMode=inactive-or-failed {cmd}'\""
+
barSpawner :: ScreenId -> IO StatusBarConfig
barSpawner 0 = pure $ topXmobar <> traySB
--barSpawner 1 = pure $ xmobar1
spawnExec s = spawn $ List.unwords $ [ "exec" ] <> systemdCat <> [ s ]
systemdCat = [ "systemd-cat" , "--priority=info", "--stderr-priority=warning", "--level-prefix=false" , "--" ]
+
+dtXPConfig :: XPConfig
+dtXPConfig = def
+ { font = "Hack 7"
+ , bgColor = "#282c34"
+ , fgColor = "#bbc2cf"
+ , bgHLight = "#c792ea"
+ , fgHLight = "#000000"
+ , borderColor = "#535974"
+ , promptBorderWidth = 0
+ , promptKeymap = dtXPKeymap
+ , position = Top
+ -- , position = CenteredAt { xpCenterY = 0.3, xpWidth = 0.3 }
+ , height = 23
+ , historySize = 256
+ , historyFilter = id
+ , defaultText = []
+ , autoComplete = Just 100000 -- set Just 100000 for .1 sec
+ , showCompletionOnTab = False
+ -- , searchPredicate = isPrefixOf
+ , searchPredicate = fuzzyMatch
+ , defaultPrompter = id $ List.map Char.toUpper -- change prompt to UPPER
+ -- , defaultPrompter = unwords . map reverse . words -- reverse the prompt
+ -- , defaultPrompter = drop 5 .id (++ "XXXX: ") -- drop first 5 chars of prompt and add XXXX:
+ , alwaysHighlight = True
+ , maxComplRows = Nothing -- set to 'Just 5' for 5 rows
+ }
+
+dtXPKeymap :: Map.Map (KeyMask,KeySym) (XP ())
+dtXPKeymap = Map.fromList $
+ List.map (first $ (,) controlMask) -- control + <key>
+ [ (xK_z, killBefore) -- kill line backwards
+ , (xK_k, killAfter) -- kill line forwards
+ , (xK_a, startOfLine) -- move to the beginning of the line
+ , (xK_e, endOfLine) -- move to the end of the line
+ , (xK_m, deleteString Next) -- delete a character foward
+ , (xK_b, moveCursor Prev) -- move cursor forward
+ , (xK_f, moveCursor Next) -- move cursor backward
+ , (xK_BackSpace, killWord Prev) -- kill the previous word
+ , (xK_y, pasteString) -- paste a string
+ , (xK_g, quit) -- quit out of prompt
+ , (xK_bracketleft, quit)
+ ]
+ ++
+ List.map (first $ (,) altMask) -- meta key + <key>
+ [ (xK_BackSpace, killWord Prev) -- kill the prev word
+ , (xK_f, moveWord Next) -- move a word forward
+ , (xK_b, moveWord Prev) -- move a word backward
+ , (xK_d, killWord Next) -- kill the next word
+ , (xK_n, moveHistory W.focusUp') -- move up thru history
+ , (xK_p, moveHistory W.focusDown') -- move down thru history
+ ]
+ ++
+ List.map (first $ (,) 0) -- <key>
+ [ (xK_Return, setSuccess True >> setDone True)
+ , (xK_KP_Enter, setSuccess True >> setDone True)
+ , (xK_BackSpace, deleteString Prev)
+ , (xK_Delete, deleteString Next)
+ , (xK_Left, moveCursor Prev)
+ , (xK_Right, moveCursor Next)
+ , (xK_Home, startOfLine)
+ , (xK_End, endOfLine)
+ , (xK_Down, moveHistory W.focusUp')
+ , (xK_Up, moveHistory W.focusDown')
+ , (xK_Escape, quit)
+ ]
+
+altMask :: KeyMask
+altMask = mod1Mask