clean dirty flake
[julm/julm-nix.git] / home-manager / profiles / xmonad / xmonad.hs
index 0e7925d79aed09e455366f04d5a4ecfdd72bdf58..4dc11edc8edeef8a3d517a4656196afb1a7d1c69 100644 (file)
@@ -2,11 +2,12 @@
 {-# 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
@@ -33,7 +34,6 @@ import XMonad.Hooks.StatusBar
 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
@@ -43,7 +43,9 @@ import XMonad.Layout.ResizableTile
 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
@@ -71,15 +73,17 @@ main = xmonad $
       -- 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")
 
@@ -154,13 +158,19 @@ main = xmonad $
       -- 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)
@@ -301,6 +311,8 @@ main = xmonad $
      , 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
@@ -362,3 +374,72 @@ isWindowSpaceVisible = do
 
 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