diff options
Diffstat (limited to 'XMonad')
-rwxr-xr-x | XMonad/baraction | 63 | ||||
-rw-r--r-- | XMonad/xmonad.hs | 241 |
2 files changed, 304 insertions, 0 deletions
diff --git a/XMonad/baraction b/XMonad/baraction new file mode 100755 index 00000000..9e39c9b5 --- /dev/null +++ b/XMonad/baraction @@ -0,0 +1,63 @@ +#!/bin/zsh + +COLOR1="#0d0c13" +COLOR2="#70638F" + +A0="%{B"$COLOR1"}%{F"$COLOR2"}%{B"$COLOR2"}%{F"$COLOR1"}" +A1="%{B"$COLOR2"}%{F"$COLOR1"}%{B"$COLOR1"}%{F"$COLOR2"}" +A2="%{B"$COLOR1"}%{F"$COLOR2"}%{B"$COLOR2"}%{F"$COLOR1"}" + +clock() { + datetime=$(date +"%d %b(%A) %H:%M") + echo $datetime +} + +cpu_load() { + read cpu a b c previdle rest < /proc/stat + prevtotal=$((a+b+c+previdle)) + sleep 0.5 + read cpu a b c idle rest < /proc/stat + total=$((a+b+c+idle)) + cpu=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) )) + echo -e "CPU: $cpu%" +} + +cpu_temp() { + CEL=$'\xc2\xb0C' + temp=$( cat /sys/devices/virtual/thermal/thermal_zone0/temp ) + temp=`expr $temp / 1000` + echo "TEMP: " $temp$CEL +} + +root_usage() { + root=$(df -h / | awk 'NR==2 {print $4 "/" $2}') + echo "ROOT: "$root +} + +home_usage() { + home=$(df -h /home | awk 'NR==2 {print $4 "/" $2}') + echo "HOME: "$home +} + +mem_usage() { + mem=$(free -m | grep Mem: | awk '{print$3 / $2 * 100}') + printf "MEM: %.0f %%" $mem +} + +volume() { + vol=$(pamixer --get-mute) + if [ $vol = "true" ] + then + echo "%{B#F15BB5}%{F#232627} ミュート" + fi +} + +weather() { + echo "script broken" + # echo $(</tmp/weather_stat) +} + +while :; do + echo "%{r}"$A0$A1$(weather)$A2$(cpu_temp)$A1$(cpu_load)$A2$(mem_usage)$A1$(root_usage)$A2$(home_usage)$A1$(volume)$A2$(clock)$A1 + sleep 3 +done diff --git a/XMonad/xmonad.hs b/XMonad/xmonad.hs new file mode 100644 index 00000000..e08d987c --- /dev/null +++ b/XMonad/xmonad.hs @@ -0,0 +1,241 @@ +import XMonad +import qualified XMonad.StackSet as W +import XMonad.ManageHook + +-- 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 +import XMonad.Util.NamedScratchpad + +myStartupHook :: X () +myStartupHook = do + spawnOnce "/home/zt/.xmonad/baraction | lemonbar -g 1366x20+0+0 -B '#171520' -p -F '#ffffff' -f 'Source Han Sans JP:size=10' -o -3 -f 'RobotoMono Nerd Font:style=Regular:size=15' -f -n 'sysinfo-bar' -o 0" +-- spawnOnce "/home/zt/.config/scripts/weather" + spawnOnce "nitrogen --restore" + spawnOnce "picom" + spawnOnce "deadd-notification-center" + spawnOnce "firefox" + spawnOnce "weather" +-- spawnOnce "sleep 3; trayer --align center --edge top --width 20 --height 21 --expand true --distance 90 --distancefrom right --tint 0x171520 --transparent true --alpha 0 --iconspacing 8" + setWMName "Oppai" + setDefaultCursor xC_left_ptr + + +windowCount :: X (Maybe String) +windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset + + +-- defaults +myModMask :: KeyMask +myModMask = mod4Mask + +myTerminal :: String +myTerminal = "st" + +myLauncher :: String +myLauncher = "run_dmenu" + +myBrowser :: String +myBrowser = "firefox" + +myEditor :: String +myEditor = "nvim" + +-- wm variables + +nBorder = "#000000" -- "#3804f4" -- "#bf00ff" +fBorder = "#6e02fc" + +myBorderWidth = 1 + +sGap = 0 -- screen gap +wGap = 1 -- window gap + +myExtraWorkspaces = [(xK_0, " 十 ")] -- , (xK_comma, " 十一 "), (xK_period, " 十二 "), (xK_slash, " 十三 ")] +myWorkspaces = [" 一 "," 二 "," 三 "," 四 "," 五 "," 六 "," 七 "," 八 ", " 九 "] ++ (map snd myExtraWorkspaces) + + + +-- scratchpad config +myScratchpads = [ +-- NS "Vysor" "Vysor.AppImage" (title =? "Vysor") defaultFloating + NS "Phone" "scrcpy" (title =? "Motorola One Power") defaultFloating, + NS "T1" "st -t 'T1'" (title =? "T1") defaultFloating, + NS "T2" "st -t 'T2'" (title =? "T2") defaultFloating, + NS "Nitrogen" "nitrogen" (title =? "Nitrogen") defaultFloating + ] where role = stringProperty "WM_WINDOW_ROLE" + + +-- keybindings +myKeys = [ + ((mod4Mask, xK_Return), spawn (myTerminal)) + , ((mod4Mask, 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 + + -- scratchpad keybindings + , ((mod4Mask, xK_p), namedScratchpadAction myScratchpads "Phone") + , ((mod4Mask, xK_o), namedScratchpadAction myScratchpads "T1") + , ((mod4Mask, xK_i), namedScratchpadAction myScratchpads "T2") + , ((mod4Mask, xK_w), namedScratchpadAction myScratchpads "Nitrogen") + + -- 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 + , ((mod4Mask, xK_equal), incWindowSpacing 1) + , ((mod4Mask, xK_minus), decWindowSpacing 1) + , ((mod4Mask .|. shiftMask, xK_equal), incScreenSpacing 1) + , ((mod4Mask .|. shiftMask, xK_minus), decScreenSpacing 1) + + -- Swap the focused window and the master window + , ((mod1Mask .|. shiftMask, xK_Return), windows W.swapMaster) + + -- 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 + , ((mod4Mask, xK_n), goToSelected defaultGSConfig) + + -- windowbringer + , ((mod4Mask, xK_b), bringMenu) + , ((mod4Mask, xK_g), gotoMenu) + + -- paste x selection + , ((mod1Mask, xK_v), pasteSelection) + + -- toggle bars + , ((mod4Mask, xK_backslash), sendMessage ToggleStruts) -- toggle both bars + , ((mod4Mask, xK_bracketleft), sendMessage $ ToggleStrut D) -- toggle bottom bar + , ((mod4Mask, 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 + , ((mod4Mask, xK_r ), sendMessage Rotate) + , ((mod4Mask, 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 + ((mod1Mask .|. shiftMask, k), windows $ swapWithCurrent i) + | (i, k) <- zip myWorkspaces [xK_1 ..] + ] -- ++ [ +-- ((m .|. myModMask, k), windows $ f i) +-- | (i, k) <- zip (myWorkspaces x) [xK_1 ..] +-- , (f, m) <- [(copy, shiftMask .|. controlMask)] +-- ] + + + +-- 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) + +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 75 + , 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 + notXMobar <- spawnPipe "lemonbar -b -g 1366x21+0+0 -B '#171520' -F '#ffffff' -f 'Source Han Sans JP:size=10' -o -3 -f 'RobotoMono Nerd Font:style=Regular:size=15' -f -n 'notXMobar' -o 0" + xmonad $ docks def + { + terminal = myTerminal, + focusFollowsMouse = True, + borderWidth = myBorderWidth, + modMask = myModMask, + workspaces = myWorkspaces, + normalBorderColor = nBorder, + focusedBorderColor = fBorder, + -- mouseBindings = myMouseBindings, + layoutHook = myLayoutHook, + manageHook = namedScratchpadManageHook myScratchpads, + -- handleEventHook = myEventHook, + logHook = dynamicLogWithPP myLemonbarPP { ppOutput = \x -> hPutStrLn notXMobar x}, + startupHook = myStartupHook +} `additionalKeys` myKeys + |