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% "
+}