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.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.Prompt
import XMonad.Prompt.FuzzyMatch
import XMonad.Prompt.Pass
-import XMonad.Util.Ungrab (unGrab)
--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")
-- 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)
<+> spawnExec "xhost local:root"
<+> spawnExec "setxkbmap -option keypad:pointerkeys"
-- Useful for programs launched by rofi
- <+> spawnExec "systemctl --user import-environment GNUPGHOME PASSWORD_STORE_DIR PATH"
+ <+> spawnExec (unwords [ "systemctl --user import-environment"
+ , "DBUS_SESSION_BUS_ADDRESS"
+ , "GDK_PIXBUF_MODULE_FILE"
+ , "GIO_EXTRA_MODULES"
+ , "GLFW_IM_MODULE"
+ , "GNUPGHOME"
+ , "GTK2_RC_FILES"
+ , "GTK_A11Y"
+ , "GTK_IM_MODULE"
+ , "GTK_PATH"
+ , "LANG"
+ , "LD_LIBRARY_PATH" -- For sane and pipewire
+ , "LIBEXEC_PATH"
+ , "NIX_PROFILES" -- fcitx5 does not work without it…
+ , "PASSWORD_STORE_DIR"
+ , "PATH"
+ , "QTWEBKIT_PLUGIN_PATH"
+ , "QT_IM_MODULE"
+ , "QT_PLUGIN_PATH"
+ , "SPEECHD_CMD"
+ , "SSH_ASKPASS"
+ , "XCURSOR_PATH"
+ , "XMODIFIERS"
+ ])
-- <+> spawnOnce "exec arbtt-capture -r 60"
-- <+> spawnOnce "exec parcellite"
-- <+> spawnOnce "exec xautolock"
, 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