import XMonad import XMonad.Actions.SpawnOn import XMonad.Actions.CycleWS import XMonad.Actions.WorkspaceNames import XMonad.Hooks.WorkspaceHistory import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageDocks import XMonad.Hooks.DynamicLog import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP import XMonad.Layout.ThreeColumns import XMonad.Layout.Gaps import XMonad.Layout.Spacing import XMonad.Util.NamedWindows (getName) import XMonad.Util.SpawnOnce import XMonad.Util.EZConfig import qualified XMonad.StackSet as W import Control.Monad (forM_, join) import Data.List (sortBy) import Data.Function (on) my_startup_hook :: X() my_startup_hook = do spawnOnce "source /home/light/.config/xmonad/envs.sh" spawnOnce "xrdb -merge /home/light/.config/xmonad/.Xresources" spawnOnce "feh --bg-fill --randomize ~/wallpapers/" spawnOnce "sudo wpa_supplicant -B -i wlp0s20f3 -c /home/light/.config/wpa_configs/home_wifi" spawnOnce "/home/light/.config/xmonad/toggle_picom.sh" spawnOnce "/home/light/.config/xmonad/toggle_polybar.sh" spawnOnce "setxkbmap -model pc104 -layout us,ir -variant , -option grp:rctrl_rshift_toggle" spawnOnce "mpv --no-video --no-terminal ~/.config/xmonad/welcome.wav" main :: IO () main = xmonad $ ewmh $ xmobarProp $ my_conf my_conf = def { layoutHook = spacingWithEdge 16 $ my_layout , startupHook = my_startup_hook , manageHook = manageDocks <+> manageSpawn <+> manageHook def , logHook = workspaceHistoryHook <+> polybar_hook , focusedBorderColor = "#fe8019" , normalBorderColor = "#928374" , workspaces = ["1\59285", "2\62057", "3\57879", "4\61441", "5\59285", "6\59138"] } `additionalKeysP` [ ("M-", toggleWS) , ("M-k", spawn "kitty") , ("M-`", spawn "rofi -show run -m 2") , ("M-c", spawn "rofi -show calc -modi calc -no-show-match -no-sort") , ("M-s", spawn "flameshot gui") , ("M-w", spawn "feh --bg-fill --randomize ~/pictures/wallpapers/") , ("M-p", spawn "~/.config/xmonad/toggle_picom.sh &> /dev/null &") , ("M-d", spawn "~/.config/xmonad/toggle_polybar.sh &> /dev/null &") , ("M-\\", spawn "rofi -show Search -modes 'Search:/home/light/.config/xmonad/duck_search.sh'") , ("M-|", spawn "killall matching_engine -9 ; killall risk_engine_cpp -9") , ("", spawn "amixer -q -D pulse sset Master toggle") , ("", spawn "amixer -q -D pulse sset Master on ; amixer -q -D pulse sset Master 2%-") , ("", spawn "amixer -q -D pulse sset Master on ; amixer -q -D pulse sset Master 2%+") , ("", spawn "echo 'playlist-next weak' | socat - '/tmp/mpvsocket'") , ("", spawn "echo 'playlist-prev weak' | socat - '/tmp/mpvsocket'") , ("", spawn "echo 'cycle pause' | socat - '/tmp/mpvsocket'") , ("", spawn "lux -a 10%") , ("", spawn "lux -s 10%")] my_layout = tiled ||| Mirror tiled ||| Full ||| threeCol where threeCol = ThreeColMid nmaster delta ratio tiled = Tall nmaster delta ratio nmaster = 1 -- Default number of windows in the master pane ratio = 1/2 -- Default propoetion of screen occupied by master pane delta = 3/100 -- Percent of screen to increment when resizing panes polybar_hook = do winset <- gets windowset title <- maybe (return "") (fmap show . getName) . W.peek $ winset let currWs = W.currentTag winset let wss = map W.tag $ W.workspaces winset io $ appendFile "/tmp/.xmonad-title-log" (title ++ "\n") io $ appendFile "/tmp/.xmonad-workspace-log" ( wsStr currWs wss) where fmt currWs ws | currWs == ws = "%{F#CC241D}" ++ drop 1 ws ++ "\n" | otherwise = "%{F#FBF1C7}" ++ drop 1 ws ++ "\n" wsStr currWs wss = join $ map (fmt currWs) $ sortBy (compare `on` (!! 0)) wss