diff options
Diffstat (limited to 'XMonad')
-rw-r--r-- | XMonad/xmonad.hs | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/XMonad/xmonad.hs b/XMonad/xmonad.hs new file mode 100644 index 00000000..6f5f149d --- /dev/null +++ b/XMonad/xmonad.hs @@ -0,0 +1,222 @@ +import XMonad +import qualified XMonad.StackSet as W +-- import XMonad hiding ((|||)) + +-- actions +import XMonad.Actions.CycleWS (moveTo, shiftTo, WSType(..), nextScreen, prevScreen) +import XMonad.Actions.CopyWindow +import XMonad.Actions.CycleWS +import XMonad.Actions.GridSelect +import XMonad.Actions.SwapWorkspaces +import XMonad.Actions.WindowBringer +import XMonad.Actions.MouseResize + +-- layouts modifiers +import XMonad.Layout.Spacing +import XMonad.Layout.LayoutModifier +import XMonad.Layout.WindowNavigation as WN + +-- Layouts +import XMonad.Layout.AvoidFloats +import XMonad.Layout.BinarySpacePartition as BSP +import XMonad.Layout.CenteredMaster +import XMonad.Layout.Grid +import XMonad.Layout.ThreeColumns +import XMonad.Layout.TwoPane +import XMonad.Layout.Spiral +import XMonad.Layout.ResizableTile +import XMonad.Layout.Tabbed + +-- hooks +import XMonad.Hooks.SetWMName +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.DynamicLog +-- import XMonad.Hooks.FadeInactive + +-- utilities +import XMonad.Util.SpawnOnce +import XMonad.Util.EZConfig (additionalKeys) +import XMonad.Util.Cursor +import XMonad.Util.Paste +import XMonad.Util.Run + +myStartupHook :: X () +myStartupHook = do + spawnOnce "nitrogen --restore &" + spawnOnce "picom &" + spawnOnce "deadd-notification-center &" + -- spawnOnce "firefox &" + spawnOnce "sxhkd &" + spawnOnce "betterlockscreen -l -t 'Welcome, Vidhu Kant!'" + setWMName "AnimeTits&ThighsWM" + setDefaultCursor xC_left_ptr + + + + + +-- defaults + +-- myFont :: String +-- myFont = "Roboto" + +myModMask :: KeyMask +myModMask = mod4Mask + +myTerminal :: String +myTerminal = "st" + +myDmenu :: String +myDmenu = "run_dmenu" + +myBrowser :: String +myBrowser = "firefox" + +-- myEditor :: String +-- myEditor = "vim" + +windowCount :: X (Maybe String) +windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset + + +-- wm variables + +nBorder = "#1E1F29" -- "#3804f4" -- "#bf00ff" +fBorder = "#FB027F" + +myBorderWidth = 2 + +sGap = 3 -- screen gap +wGap = 1 -- window gap + +myExtraWorkspaces = [(xK_0, " 十 ")] -- ,(xK_minus, "tmp"),(xK_equal, "swap")] +myWorkspaces = [" 一 "," 二 "," 三 "," 四 "," 五 "," 六 "," 七 "," 八 ", " 九 "] ++ (map snd myExtraWorkspaces) + + +-- keybindings +myKeys = [ + ((mod4Mask, xK_Return), spawn (myTerminal ++ " -e fish")) + , ((mod1Mask, xK_p), spawn "/home/zt/.config/scripts/run_dmenu") + , ((mod1Mask, xK_w), kill1) + , ((mod1Mask .|. shiftMask, xK_k), kill1) + , ((mod1Mask, xK_o), withFocused $ windows . W.sink) -- unfloat windows + + -- view prev/next workspaces + , ((mod1Mask, xK_h), prevWS) + , ((mod1Mask, xK_l), nextWS) + + -- move to prev/next workspaces + , ((mod1Mask .|. shiftMask, xK_h), shiftToPrev >> prevWS) + , ((mod1Mask .|. shiftMask, xK_l), shiftToNext >> nextWS) + + -- modify gaps on runtime + , ((mod1Mask, xK_equal), incWindowSpacing 1) + , ((mod1Mask, xK_minus), decWindowSpacing 1) + , ((mod1Mask .|. shiftMask, xK_equal), incScreenSpacing 1) + , ((mod1Mask .|. shiftMask, xK_minus), decScreenSpacing 1) + + , ((mod4Mask .|. shiftMask, xK_Return), windows W.swapMaster) -- Swap the focused window and the master window + + -- these keybindings are for WindowNavigation + -- and they conflict with BSP layout + + -- directional navigation of windows + , ((mod4Mask, xK_l), sendMessage $ Go R) + , ((mod4Mask, xK_h), sendMessage $ Go L) + , ((mod4Mask, xK_k), sendMessage $ Go U) + , ((mod4Mask, xK_j), sendMessage $ Go D) + + -- swap windows + , ((mod4Mask .|. shiftMask, xK_l), sendMessage $ WN.Swap R) + , ((mod4Mask .|. shiftMask, xK_h), sendMessage $ WN.Swap L) + , ((mod4Mask .|. shiftMask, xK_k), sendMessage $ WN.Swap U) + , ((mod4Mask .|. shiftMask, xK_j), sendMessage $ WN.Swap D) + + -- cycle through windows + , ((mod1Mask, xK_j), windows W.focusDown) + , ((mod1Mask, xK_k), windows W.focusUp) + + -- grid select + , ((mod1Mask, xK_n), goToSelected defaultGSConfig) + + -- windowbringer + , ((mod1Mask, xK_b), bringMenu) + , ((mod1Mask, xK_g), gotoMenu) + + -- paste x selection + , ((0, xK_Insert), pasteSelection) + + -- toggle bars + , ((mod1Mask, xK_backslash), sendMessage ToggleStruts) -- toggle both bars + , ((mod1Mask, xK_bracketleft), sendMessage $ ToggleStrut D) -- toggle bottom bar + , ((mod1Mask, xK_bracketright), sendMessage $ ToggleStrut U) -- toggle top bar + + -- BSP layout keybindings + -- resize + , ((mod4Mask .|. mod1Mask, xK_l ), sendMessage $ ExpandTowards R) + , ((mod4Mask .|. mod1Mask, xK_h ), sendMessage $ ExpandTowards L) + , ((mod4Mask .|. mod1Mask, xK_j ), sendMessage $ ExpandTowards D) + , ((mod4Mask .|. mod1Mask, xK_k ), sendMessage $ ExpandTowards U) + , ((mod4Mask .|. mod1Mask .|. shiftMask , xK_l ), sendMessage $ ShrinkFrom R) + , ((mod4Mask .|. mod1Mask .|. shiftMask , xK_h ), sendMessage $ ShrinkFrom L) + , ((mod4Mask .|. mod1Mask .|. shiftMask , xK_j ), sendMessage $ ShrinkFrom D) + , ((mod4Mask .|. mod1Mask .|. shiftMask , xK_k ), sendMessage $ ShrinkFrom U) + -- other + , ((mod1Mask, xK_r ), sendMessage Rotate) + , ((mod1Mask, xK_s ), sendMessage BSP.Swap) +-- , ((mod4Mask .|. shiftMask .|. controlMask , xK_j ), sendMessage $ SplitShift Prev) +-- , ((mod4Mask .|. shiftMask .|. controlMask , xK_k ), sendMessage $ SplitShift Next) + + + + ] ++ [ -- for extra workspace(s) + ((myModMask, key), (windows $ W.greedyView ws)) + | (key,ws) <- myExtraWorkspaces + ] ++ [ -- also for extra workspaces + ((myModMask .|. shiftMask, key), (windows $ W.shift ws)) + | (key,ws) <- myExtraWorkspaces + ] ++ [ -- to swap workspaces + ((mod4Mask .|. controlMask, k), windows $ swapWithCurrent i) + | (i, k) <- zip myWorkspaces [xK_1 ..] + ] + + +-- layouts +myGap = spacingRaw False (Border sGap sGap sGap sGap) True (Border wGap wGap wGap wGap) True + +myLayouts = avoidStruts $ mouseResize $ windowNavigation $ myGap $ emptyBSP ||| ThreeColMid 1 (3/100) (1/2) ||| Grid ||| TwoPane (3/100) (1/2) ||| ThreeCol 1 (3/100) (1/2) ||| ThreeCol 2 (3/100) (1/2) ||| topRightMaster emptyBSP + +myLayoutHook = myLayouts + + +myLemonbarPP = def {ppCurrent = wrap "%{F#6c71c4}%{B#d33682}%{F-}" "%{F#d33682}%{B-}%{F-}" + , ppWsSep = " " + , ppHidden = wrap "%{B#268bd2}" "%{B-}" + , ppHiddenNoWindows = wrap "%{F#02fc45}" " %{F-}" + , ppTitle = wrap "%{B#6c71c4}%{F#f0f0f0} " " %{B-}" . shorten 90 + , ppUrgent = wrap "%{B#9cfc02} " " %{B-}%{F-}" + , ppLayout = wrap "%{r}%{B#99B1D5}%{F#232627} " " %{B-} " + , ppSep = " " + , ppExtras = [windowCount] + , ppOrder = \(ws:l:t:ex) -> [ws]++[t]++[l]++["%{B#50FA7B}%{F#232627} WIN: "]++ex++[" %{B-}%{F-} "] + } + +main = do + bar <- spawnPipe "lemonbar -g 1366x21 -b -B '#171520' -p -F '#ffffff' -f 'Source Han Sans JP:size=10' -o -3 -f 'RobotoMono Nerd Font:style=Regular:size=15' -f -n 'mainbar' -o 0" + xmonad $ docks def + { + terminal = myTerminal, + focusFollowsMouse = True, + borderWidth = myBorderWidth, + modMask = myModMask, + workspaces = myWorkspaces, + normalBorderColor = nBorder, + focusedBorderColor = fBorder, + -- mouseBindings = myMouseBindings, + layoutHook = myLayoutHook, + -- manageHook = myManageHook, + -- handleEventHook = myEventHook, + logHook = dynamicLogWithPP myLemonbarPP { ppOutput = \x -> hPutStrLn bar x }, + startupHook = myStartupHook +} `additionalKeys` myKeys + |