diff --git a/general/.xmonad/xmonad.hs b/general/.xmonad/xmonad.hs index 56ca419..e578e8d 100644 --- a/general/.xmonad/xmonad.hs +++ b/general/.xmonad/xmonad.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE LambdaCase #-} -- ░▀█▀░█▄█░█▀█░█▀█░█▀▄░▀█▀░█▀▀ -- ░░█░░█░█░█▀▀░█░█░█▀▄░░█░░▀▀█ @@ -18,7 +19,7 @@ import qualified Data.Map as M import XMonad.Util.Run (spawnPipe, hPutStrLn, runProcessWithInput) import XMonad.Util.NamedScratchpad --- import XMonad.Util.SpawnOnce +import XMonad.Util.SpawnOnce import XMonad.Layout.Spacing import XMonad.Layout.Fullscreen @@ -37,7 +38,7 @@ import Graphics.X11.ExtraTypes.XF86 -- colors type Color = String - + background = "#272822" foreground = "#f8f8f2" red = "#f92672" @@ -47,7 +48,7 @@ blue = "#66d9ef" magenta = "#ae81ff" cyan = "#a1efe4" - + -- ░█▀▀░█▀█░█▀█░█▀▀░▀█▀░█▀▀ -- ░█░░░█░█░█░█░█▀▀░░█░░█░█ -- ░▀▀▀░▀▀▀░▀░▀░▀░░░▀▀▀░▀▀▀ @@ -72,7 +73,7 @@ myModMask :: KeyMask myModMask = mod4Mask myWorkspaces :: [WorkspaceId] -myWorkspaces = ["gen","www","emx","dev","slk","6","7","8","9"] +myWorkspaces = ["gen","www","emx","dev","slk","6","7","8","com"] myNormalBorderColor = "#dddddd" myFocusedBorderColor = "#ff0000" @@ -95,13 +96,13 @@ myScratchpads = [ NS "ncmpcpp" spawnNC findNC layoutNC spawnTM = myTerminal ++ " --class instanceClass,floatingTerminal -e tmux new-session -A -s floating" findTM = className =? "floatingTerminal" layoutTM = customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3) - + spawnSC = "sxiv ~/uni/schedule.png" findSC = className =? "sxiv" spawnH = "echo \"" ++ help ++ "\" | xmessage -file -" findH = className =? "Xmessage" - + -- ░█░█░█▀▀░█░█░█▀▀ -- ░█▀▄░█▀▀░░█░░▀▀█ -- ░▀░▀░▀▀▀░░▀░░▀▀▀ @@ -126,7 +127,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ , ((modm , xK_comma ), sendMessage (IncMasterN 1)) , ((modm , xK_period), sendMessage (IncMasterN (-1))) -- , ((modm , xK_b ), sendMessage ToggleStruts) - , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) + , ((modm .|. shiftMask, xK_q ), io exitSuccess) , ((modm , xK_c ), myRestartHook ) ] @@ -140,7 +141,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 - + [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_u, xK_i] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] @@ -162,7 +163,7 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ , ((modm , xK_p), spawn "mpc toggle") , ((modm , xK_q), namedScratchpadAction myScratchpads "ncmpcpp") , ((modm , xK_minus), namedScratchpadAction myScratchpads "schedule") - , ((modm , xK_F7), spawn "amixer set Master 2%-") + , ((modm , xK_F7), spawn "amixer set Master 2%-") , ((modm , xK_F8), spawn "amixer set Master 2%+") -- , ((modm , xK_c), spawn myTerminal ++ " -e cfile") , ((modm , xK_n), spawn "fcitx-remote -s fcitx-keyboard-no") @@ -178,13 +179,13 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ , ((0, xF86XK_AudioRaiseVolume ), spawn "amixer set Master 2%+") , ((0, xF86XK_AudioLowerVolume ), spawn "amixer set Master 2%-") - , ((0, xF86XK_AudioMute ), spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle") + , ((0, xF86XK_AudioMute ), spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle") - , ((0, xF86XK_AudioPlay ), spawn "mpc toggle") - , ((0, xF86XK_AudioPrev ), spawn "mpc prev") - , ((0, xF86XK_AudioNext ), spawn "mpc next") + , ((0, xF86XK_AudioPlay ), spawn "mpc toggle") + , ((0, xF86XK_AudioPrev ), spawn "mpc prev") + , ((0, xF86XK_AudioNext ), spawn "mpc next") - , ((0, xF86XK_MonBrightnessUp ), spawn "light -A 5") + , ((0, xF86XK_MonBrightnessUp ), spawn "light -A 5") , ((0, xF86XK_MonBrightnessDown ), spawn "light -U 5") , ((modm .|. shiftMask, xK_slash ), namedScratchpadAction myScratchpads "help") @@ -205,18 +206,17 @@ viewDropboxStatus = spawn =<< ((++) "notify-send -t 3000 " . unpack) <$> status ------------------------------------------------------------------------ -- Mouse bindings: default actions bound to mouse events -- -myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ - +myMouseBindings XConfig {XMonad.modMask = modm} = M.fromList -- mod-button1, Set the window to floating mode and move by dragging - [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w - >> windows W.shiftMaster)) + [ ((modm, button1), \w -> focus w >> mouseMoveWindow w + >> windows W.shiftMaster) -- mod-button2, Raise the window to the top of the stack - , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) + , ((modm, button2), \w -> focus w >> windows W.shiftMaster) -- mod-button3, Set the window to floating mode and resize by dragging - , ((modm, button3), (\w -> focus w >> mouseResizeWindow w - >> windows W.shiftMaster)) + , ((modm, button3), \w -> focus w >> mouseResizeWindow w + >> windows W.shiftMaster) -- you may also bind events to the mouse scroll wheel (button4 and button5) ] @@ -227,7 +227,7 @@ myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ -- layout -myLayout = +myLayout = fullscreenFull $ avoidStruts $ smartBorders $ @@ -274,6 +274,7 @@ myManageHook = composeAll , resource =? "kdesktop" --> doIgnore , resource =? "fcitx-config" --> doFloat , className =? "copyq" --> doFloat + , className =? "discord" --> doShift "com" ] <+> namedScratchpadManageHook myScratchpads ------------------------------------------------------------------------ @@ -311,6 +312,14 @@ myLogHook xmproc = dynamicLogWithPP $ xmobarPP , ppSep = " | " , ppUrgent = xmobarColor red "" . wrap "!" "!" , ppExtras = [windowCount] + , ppLayout = + wrap "" "" . + (\case + "Spacing Full" -> "🖵" + "Spacing Tall" -> "🗗" + "Spacing Magnifier Tall" -> "\128269" -- 🔍 + "Spacing Mirror Tall" -> "\129694" -- 🪞 + ) , ppOrder = \(ws:l:t:ex) -> [ws,l] ++ ex ++ [t] } @@ -324,7 +333,7 @@ myLogHook xmproc = dynamicLogWithPP $ xmobarPP myStartupHook :: X () myStartupHook = do spawn "stalonetray &" - -- spawnOnce "$HOME/.xmonad/xinit.sh" + spawnOnce "$HOME/.xmonad/setup-script/xinit.sh" myRestartHook :: X () myRestartHook = do diff --git a/laptop/.config/xmobar/scripts/mpd_status.sh b/laptop/.config/xmobar/scripts/mpd_status.sh new file mode 100755 index 0000000..e1e6daf --- /dev/null +++ b/laptop/.config/xmobar/scripts/mpd_status.sh @@ -0,0 +1,18 @@ +MPD_STATUS=$(mpc 2>/dev/null | sed -n '2{p;q}' | cut -d ' ' -f1) +case "$MPD_STATUS" in + "[playing]") + echo "▶" + # echo "[行]" + exit 0 + ;; + "[paused]") + echo "⏸" + # echo "[止]" + exit 0 + ;; + *) + echo "⏼" + # echo "[無]" + exit 0 + ;; +esac diff --git a/laptop/.config/xmobar/scripts/volume.py b/laptop/.config/xmobar/scripts/volume.py new file mode 100755 index 0000000..df8ba67 --- /dev/null +++ b/laptop/.config/xmobar/scripts/volume.py @@ -0,0 +1,43 @@ +#!/bin/python + +import subprocess + +USE_SYMBOLS = True +VOLUME_COMMAND = 'amixer get Master'.split(' ') +VOLUME_SYMBOLS = { + "0": "𝒫", # "∅" + "10": "−", + "20": "=", + "30": "≡", + "40": "∫", + "50": "∮", + "60": "∬", + "70": "∯", + "80": "∭", + "90": "∰", + "100": "⨌", +} + +def get_volume(): + volumeData = subprocess \ + .check_output(VOLUME_COMMAND) \ + .decode() \ + .split('\n')[5] \ + .strip() \ + .split(' ') + + volume_level = int(volumeData[-2][1:-2]) + + if USE_SYMBOLS: + volume = VOLUME_SYMBOLS[str((volume_level // 10) * 10)] + if volumeData[-1] == '[off]': + volume = 'Ψ' + else: + volume = f'{volume_level}%' + if volumeData[-1] == '[off]': + volume = 'M' + + return volume + +if __name__ == '__main__': + print(get_volume()) diff --git a/laptop/.config/xmobar/scripts/wireless.sh b/laptop/.config/xmobar/scripts/wireless.sh new file mode 100755 index 0000000..10dd738 --- /dev/null +++ b/laptop/.config/xmobar/scripts/wireless.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +NETWORK_CARD=$(ip -br link | grep UP | grep -v lo | head -n 1 | awk '{print $1}') + +iwconfig $NETWORK_CARD 2>&1 | grep -q no\ wireless\ extensions\. && { + echo wired + exit 0 +} + +essid=`iwconfig $NETWORK_CARD | awk -F '"' '/ESSID/ {print $2}'` +stngth=`iwconfig $NETWORK_CARD | awk -F '=' '/Quality/ {print $2}' | cut -d '/' -f 1` +bars=`expr $stngth / 20` + +case $bars in +# 0) bar='[-----]' ;; +# 1) bar='[/----]' ;; +# 2) bar='[//---]' ;; +# 3) bar='[///--]' ;; +# 4) bar='[////-]' ;; +# 5) bar='[/////]' ;; +# *) bar='[--!--]' ;; + 0) bar='[〇]' ;; + 1) bar='[壱]' ;; + 2) bar='[弐]' ;; + 3) bar='[参]' ;; + 4) bar='[肆]' ;; + 5) bar='[伍]' ;; + *) bar='[無]' ;; +esac + +echo "$essid $bar" + +exit 0 diff --git a/laptop/.config/xmobar/xmobarrc b/laptop/.config/xmobar/xmobarrc new file mode 100644 index 0000000..91712d7 --- /dev/null +++ b/laptop/.config/xmobar/xmobarrc @@ -0,0 +1,72 @@ +Config { + font = "xft:Fira Code Retina:pixelsize=15:antialias=true:hinting=true" + , additionalFonts = [ + "xft:Droid Sans Japanese:pixelsize=20:antialias=true:hinting=true", + "xft:Symbola:pixelsize=20", + "xft:Asana Math:pixelsize=20", + "xft:Noto Sans Symbols2", + "xft:FiraCode Nerd Font" + ] + , borderColor = "black" + , border = TopB + , bgColor = "#272822" + , fgColor = "grey" + , alpha = 255 + , position = Static { xpos = 0 , ypos = 0, width = 1920, height = 40 } + , textOffset = -1 + , iconOffset = -1 + , lowerOnStart = True + , pickBroadest = False + , persistent = False + , hideOnStart = False + , iconRoot = "/home/h7x4/.config/xmobar/" + , allDesktops = True + , overrideRedirect = True + , commands = [ + -- Run Weather "ENVA" + -- [ + -- "-t","C", + -- "-L","6", + -- "-H","18", + -- "--normal","green", + -- "--high","red", + -- "--low","lightblue" + -- ] 36000, + + Run Network "wlp59s0" + [ + "-t", "↑", + "-L","0", + "-H","32", + "--normal","green", + "--high","red" + ] 10, + + Run Memory ["-t","%"] 10, + Run Swap ["-t", "%"] 100, + Run Date "%a %_d %b %H:%M" "date" 10, + Run Com "/home/h7x4/.config/xmobar/scripts/mpd_status.sh" [] "mpc" 10, + -- Run Com "/home/h7x4/.config/xmobar/scripts/wireless.sh" [] "wi" 100, + Run Com "/home/h7x4/.config/xmobar/scripts/volume.py" [] "vol" 10, + Run UnsafeStdinReader, + + Run BatteryP ["BAT0"] + [ + "-t", " (%)", + "--Low", "20", + "--High", "50", + "--low", "red", + "--normal", "yellow", + "--high", "green", + "--", + "-O", "🔌", + "-o", "🔋" + ] 50 + + ] + , sepChar = "%" + , alignSep = "}{" -- + , template = " %mpc% %UnsafeStdinReader% }\ + \ %date% \ + \{ 🐏 %memory% | %wlp59s0% | %vol% | %battery% " +}