add xmonad and get rid of stumpwm

main
hashirama 2024-03-02 15:12:23 -04:00
parent c4ec2bf210
commit 70c1b057ab
No known key found for this signature in database
GPG Key ID: 53E62470A86BC185
12 changed files with 301 additions and 319 deletions

View File

@ -33,14 +33,14 @@ list
"993d200265630e9c408028a022f32f34acacdf29" "993d200265630e9c408028a022f32f34acacdf29"
(openpgp-fingerprint (openpgp-fingerprint
"7EBE A494 60CE 5E2C 0875 7FDB 3B5A A993 E1A2 DFF0")))) "7EBE A494 60CE 5E2C 0875 7FDB 3B5A A993 E1A2 DFF0"))))
(channel ;;(channel
(name 'rrr) ;; (name 'rrr)
(url "https://git.sr.ht/~akagi/rrr") ;; (url "https://git.sr.ht/~akagi/rrr")
(introduction ;; (introduction
(make-channel-introduction ;; (make-channel-introduction
"794d6e5eb362bfcf81ada12b6a49a0cd55c8e031" ;; "794d6e5eb362bfcf81ada12b6a49a0cd55c8e031"
(openpgp-fingerprint ;; (openpgp-fingerprint
"FF72 877C 4F21 FC4D 467D 20C4 DCCB 5255 2098 B6C1")))) ;; "FF72 877C 4F21 FC4D 467D 20C4 DCCB 5255 2098 B6C1"))))
(channel (channel
(name 'rde) (name 'rde)
(url "https://git.sr.ht/~abcdw/rde") (url "https://git.sr.ht/~abcdw/rde")
@ -48,4 +48,27 @@ list
(make-channel-introduction (make-channel-introduction
"257cebd587b66e4d865b3537a9a88cccd7107c95" "257cebd587b66e4d865b3537a9a88cccd7107c95"
(openpgp-fingerprint (openpgp-fingerprint
"2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))) "2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))
(channel
(name 'radix)
(url "https://codeberg.org/anemofilia/radix.git")
(branch "main")
(introduction
(make-channel-introduction
"f9130e11e35d2c147c6764ef85542dc58dc09c4f"
(openpgp-fingerprint
"F164 709E 5FC7 B32B AEC7 9F37 1F2E 76AC E3F5 31C8"))))
(channel
(name 'ajatt)
(url "https://codeberg.org/hashirama/ajatt-tools-guix.git")
(branch "main")
(introduction
(make-channel-introduction
"5f1904f1a514b89b2d614300d8048577aa717617"
(openpgp-fingerprint
"F164 709E 5FC7 B32B AEC7 9F37 1F2E 76AC E3F5 31C8"))))
;;(channel
;; (name 'guix-local)
;; (url "https://codeberg.org/florhizome/guix-local.git")
;; (commit "6b6e50e3f4b7edc52d9116e4ff61ec57cd24a802"))
)

View File

@ -14,6 +14,9 @@
(guix packages) (guix packages)
(gnu packages fcitx5) (gnu packages fcitx5)
(gnu packages gnuzilla) (gnu packages gnuzilla)
(gnu packages haskell)
(gnu packages gcc)
(gnu packages commencement)
(gnu packages freedesktop) (gnu packages freedesktop)
(gnu packages image) (gnu packages image)
(gnu packages image-viewers) (gnu packages image-viewers)
@ -132,6 +135,7 @@
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
xdg-desktop-portal xdg-desktop-portal
tmux tmux
gnupg
sdcv sdcv
alacritty alacritty
;; stumpwm-test ;; stumpwm-test
@ -178,7 +182,16 @@
picom picom
feh feh
xmodmap xmodmap
;; deps for xmonad
xmonad
ghc ;; ridiculous, gcc and ghc are runtime dependencies , yet people didnt put in the package description
gcc
gcc-toolchain
xmessage
ghc-xmonad-contrib
rofi rofi
linux-libre-headers
;;--------
yt-dlp yt-dlp
;; nicotine+ ;; nicotine+
linux-firmware linux-firmware

View File

@ -7,6 +7,7 @@
(use-modules (gnu home) (use-modules (gnu home)
(gnu packages) (gnu packages)
(gnu services) (gnu services)
(gnu packages haskell)
(guix gexp) (guix gexp)
(radix utils) (radix utils)
(gnu home services) (gnu home services)
@ -100,6 +101,7 @@
aria2 aria2
xdg-desktop-portal xdg-desktop-portal
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
gnupg
xprop xprop
;;nicotine+ ;;nicotine+
yt-dlp yt-dlp
@ -138,7 +140,7 @@
feh feh
xmodmap xmodmap
rofi rofi
sbcl sbcl
stumpwm `(,stumpwm "lib") stumpwm `(,stumpwm "lib")
emacs-stumpwm-mode emacs-stumpwm-mode
sbcl-stumpwm-net sbcl-stumpwm-net
@ -150,6 +152,12 @@
sbcl-clx sbcl-clx
sbcl-stumpwm-swm-gaps sbcl-stumpwm-swm-gaps
cmus cmus
;; xmonad
xmonad
ghc
xmobar
ghc-xmonad-contrib
;;-----------------
zstd zstd
;; suckless-dictpopup ;; suckless-dictpopup
scrot scrot
@ -196,8 +204,12 @@
"/home/hashirama/src/guix-config/.bash_profile" "/home/hashirama/src/guix-config/.bash_profile"
"bash_profile"))) "bash_profile")))
(environment-variables (environment-variables
'(("GUILE_LOAD_PATH" '(
. "$HOME/dev/guix_channel/ajatt-tools-guix:$GUILE_LOAD_PATH"))) ("GUILE_LOAD_PATH"
. "$HOME/dev/guix_channel/ajatt-tools-guix:$GUILE_LOAD_PATH")
("XMONAD_CONFIG_DIR"
. "$HOME/.xmonad")
))
)) ))
@ -238,7 +250,7 @@
"audio/ogg" "audio/ogg"
"audio/opus" "audio/opus"
"audio/x-opus+ogg" "audio/x-opus+ogg"
"audio/flac" "audio/flac"
"video/mp4" "video/mp4"
"video/x-matroska" "video/x-matroska"
"video/webm")) "video/webm"))
@ -252,10 +264,10 @@
('emacs.desktop ('emacs.desktop
`("image/vnd.djvu")) `("image/vnd.djvu"))
('foliate.desktop ('foliate.desktop
`("application/epub+zip")) `("application/epub+zip"))
('sioyek.desktop ('sioyek.desktop
`("application/pdf")) `("application/pdf"))
)))) ))))
(simple-service 'font-antialias (simple-service 'font-antialias
home-fontconfig-service-type home-fontconfig-service-type
@ -301,7 +313,7 @@
("SHELL" . "bash") ("SHELL" . "bash")
("TERMINAL" . "kitty") ("TERMINAL" . "kitty")
("VISUAL" . "emacs") ("VISUAL" . "emacs")
("WM" . "stumpwm"))))) ("WM" . "xmonad")))))
) )

View File

@ -1,132 +0,0 @@
;; This "home-environment" file can be passed to 'guix home reconfigure'
;; to reproduce the content of your profile. This is "symbolic": it only
;; specifies package names. To reproduce the exact same profile, you also
;; need to capture the channels being used, as returned by "guix describe".
;; See the "Replicating Guix" section in the manual.
(use-modules (gnu home)
(gnu packages)
(gnu services)
(guix gexp)
(gnu home services shells))
(home-environment
;; Below is the list of packages that will show up in your
;; Home profile, under ~/.guix-home/profile.
(packages (specifications->packages (list "flameshot"
"ncmpcpp"
"font-meslo-lg-dz"
"font-meslo-lg"
"gd-tools"
"emacs-org-roam-ui"
"wmctrl"
"telegram-desktop"
"lf"
"ranger"
"ueberzug++"
"fzf"
"emacs-org-roam"
"libime"
"fcitx5-gtk4"
"fcitx5-qt"
"fcitx5-gtk"
"sselp"
"nano"
"thunar"
"mcomix"
"pinentry"
"goldendict-ng"
"xdg-utils"
"font-google-material-design-icons"
"gst-plugins-good-qt"
"qtmultimedia"
"xpad-module"
"unzip"
"zip"
"emacs-esxml"
"html-xml-utils"
"emacs-rainbow-delimiters"
"aria2"
"xdg-desktop-portal"
"xdg-desktop-portal-gtk"
"xprop"
"nicotine+"
"yt-dlp"
"higan"
"nyxt"
"emacs-nyxt"
"tmux"
"alacritty"
"lm-sensors"
"anki"
"emacs-olivetti"
"foliate"
"emacs-slime"
"python"
"xrdb"
"dbus"
"steam"
"make"
"p7zip"
"cmake"
"element-desktop"
"emacs-dirvish"
"readline"
"curl"
"nix"
"qpdfview"
"xclip"
"font-apple-color-emoji"
"emacs-nerd-icons"
"emacs-telega"
"htop"
"cl-clx"
"neofetch"
"kitty"
"sbcl-stumpwm-ttf-fonts"
"cl-clx-truetype"
"picom"
"feh"
"xmodmap"
"rofi"
"emacs-stumpwm-mode"
"sbcl-stumpwm-net"
"sbcl-stumpwm-cpu"
"sbcl-stumpwm-mem"
"sbcl-stumpwm-disk"
"sbcl-stumpwm-screenshot"
"sbcl-stumpwm-pamixer"
"sbcl-stumpwm-swm-gaps"
"cmus"
"zstd"
"scrot"
"cl-css"
"git"
"gst-plugins-good"
"gst-plugins-bad"
"gstreamer"
"ungoogled-chromium"
"guile"
"icecat"
"pavucontrol-qt"
"mpv"
"emacs")))
;; Below is the list of Home services. To search for available
;; services, run 'guix home search KEYWORD' in a terminal.
(services
(list (service home-bash-service-type
(home-bash-configuration
(aliases '(("analyze_video" . "~/.local/bin/analyze_video.sh")
("ct" . "~/.local/bin/compatibility.sh")
("grep" . "grep --color=auto")
("lf" . "~/.local/bin/lf/lfrun")
("ll" . "ls -l")
("ls" . "ls -p --color=auto")
("revive" . "xmodmap -e '\\''clear mod4'\\'' && xmodmap -e '\\''keycode 133 = F20'\\''")))
(bashrc (list (local-file
"/home/hashirama/src/guix-config/.bashrc"
"bashrc")))
(bash-profile (list (local-file
"/home/hashirama/src/guix-config/.bash_profile"
"bash_profile"))))))))

0
stumpwm/.gitignore vendored
View File

View File

@ -1,171 +0,0 @@
(in-package :stumpwm)
(add-to-load-path "~/.guix-profile/share/common-lisp/sbcl/stumpwm-ttf-fonts/")
(add-to-load-path "~/.guix-profile/share/common-lisp/sbcl/stumpwm-swm-gaps/")
;;(add-to-list )
;;;; gaps
;;(load-module "swm-gaps")
;;
(when *initializing*
(mode-line))
(run-shell-command "xmodmap -e 'clear mod4'" t) ;; clears windowskey/mod4
(run-shell-command "xmodmap -e 'keycode 133 = F20'" t) ;;assigns F20 to keycode 133
(set-prefix-key (kbd "F20")) ;; sets prefix to F20 which was just assigned to windows key
(run-shell-command "exec feh --bg-fill ~/wallpaper.jpg & picom -b")
(run-shell-command "xrandr --output HDMI-A-0 --mode 1366x768")
(defcommand screenshot () ()
(run-shell-command "flameshot gui --path=/mnt/Data/mpv-screenshots/screenshots"))
(define-key *top-map* (kbd "M-i") "screenshot")
(defcommand nyxt () ()
(run-or-raise "nyxt" '(:class "Nyxt")))
(define-key *top-map* (kbd "M-p") "nyxt")
;; in the case i want a new terminal
(define-key *top-map* (kbd "M-l") "exec kitty")
;; for reusing a open terminal
(defcommand terminal () ()
(run-or-raise "kitty" '(:class "kitty")))
(define-key *top-map* (kbd "M-v") "terminal")
(defcommand goldendict () ()
(run-or-raise "goldendict" '(:class "GoldenDict-ng")))
(define-key *top-map* (kbd "M-e") "goldendict")
(define-key *top-map* (kbd "M-d") "exec rofi -show run")
(define-key *root-map* (kbd "R") "restart-hard")
;; Frames
(define-key *root-map* (kbd "x") "hsplit")
(define-key *root-map* (kbd "z") "vsplit")
(define-key *root-map* (kbd "n") "remove-split")
(define-key *root-map* (kbd "Q") "quit")
(define-key *root-map* (kbd "q") "delete")
(define-key *root-map* (kbd "r") "remove")
(define-key *root-map* (kbd "h") "move-focus left")
(define-key *root-map* (kbd "j") "move-focus down")
(define-key *root-map* (kbd "k") "move-focus up")
(define-key *root-map* (kbd "l") "move-focus right")
(define-key *top-map* (kbd "H") "move-window left")
(define-key *top-map* (kbd "J") "move-window down")
(define-key *top-map* (kbd "K") "move-window up")
(define-key *top-map* (kbd "L") "move-window right")
(setf *mouse-focus-policy* :click)
(define-key *top-map* (kbd "M-n") "exec xmodmap -e 'clear mod4' && exec xmodmap -e 'keycode 133 = F20'")
(run-shell-command "xrdb /home/hashirama/.Xresources")
(run-shell-command "export GTK_IM_MODULE=fcitx")
(run-shell-command "export QT_IM_MODULE=fcitx")
(run-shell-command "export export XMODIFIERS=@im=fcitx")
(sleep 2)
(run-shell-command "fcitx5")
(sleep 2)
(run-shell-command "xmodmap -e 'clear mod4'" t) ;; clears windowskey/mod4
(run-shell-command "xmodmap -e 'keycode 133 = F20'" t) ;;assigns F20 to keycode 133
(defun pretty-time ()
"日付を '17:19:51 2014年4月27日、日曜日' の形式で返します。"
(defun stringify-dow (dow)
(nth dow '("月曜日" "火曜日" "水曜日" "木曜日" "金曜日" "土曜日" "日曜日")))
(defun stringify-mon (mon)
(nth (- mon 1) '("1月" "2月" "3月" "4月"
"5月" "6月" "7月" "8月"
"9月" "10月" "11月" "12月")))
(multiple-value-bind (sec min hr date mon yr dow dst-p tz)
(get-decoded-time)
(format NIL "~2,'0d:~2,'0d:~2,'0d ~d年~a時 ~d分、~a秒"
yr (stringify-mon mon)
date (stringify-dow dow)
hr min sec)))
;; ----
(setf *mode-line-timeout* 2)
;;---
(defvar *senju/workspaces*
;; (list "一" "二" "三" "四" "五" "六" "七" "八" "九" "十" "数学" "勉強"))
(list "一" "二" "三" "四" "五" "六" "七" "八" "九" "十" "数学" "勉強"))
(stumpwm:grename (nth 0 *senju/workspaces*))
(dolist (workspace (cdr *senju/workspaces*))
(stumpwm:gnewbg workspace))
(defvar *move-to-keybinds*
(list "!" "@" "#" "$" "%" "^" "&" "*" "(" "[" "]"))
(dotimes (y (length *senju/workspaces*))
(let ((workspace (write-to-string (+ y 1))))
(define-key *root-map* (kbd workspace) (concat "gselect " workspace))
(define-key *root-map* (kbd (nth y *move-to-keybinds*)) (concat "gmove-and-follow " workspace))))
(defun workspace-number-to-character (index)
(elt '("一" "二" "三" "四" "五" "六" "七" "八" "九" "十" "数学" "勉強") index))
;; Modify the modeline format to display group numbers as characters
(defvar *modeline-format*
'(" " (:eval (workspace-number-to-character (current-group))) " " mode-line-misc-info mode-line-client
mode-line-modified mode-line-frame-identification " " mode-line-buffer-identification))
(load-module "ttf-fonts")
(setf xft:*font-dirs* '("~/.local/share/fonts/"))
(xft:cache-fonts)
(set-font (make-instance 'xft:font :family "Iosevka Comfy,Iosevka Comfy SemiLight" :subfamily "SemiLight" :size 10))
(setf *startup-message* "fonts loaded")
(setf *screen-mode-line-format* (list "[^B%n^b] %W^>%d"))
(setf *mode-line-timeout* 2)
(setf *screen-mode-line-format*
(list "[^B%n^b] %W " ; groups/windows
"^>" ; right align
(list '(:eval (concat "| "
" |")))
" ^7* " '(:eval (pretty-time)); date
))
;; gaps
(load-module "swm-gaps")
(setf swm-gaps:*inner-gaps-size* 10
swm-gaps:*outer-gaps-size* 5
swm-gaps:*head-gaps-size* 5)
(when *initializing*
(swm-gaps:toggle-gaps))

Binary file not shown.

Binary file not shown.

BIN
xmonad/xmonad-x86_64-linux Executable file

Binary file not shown.

8
xmonad/xmonad.errors Normal file
View File

@ -0,0 +1,8 @@
$ ghc --make xmonad.hs -dynamic -fPIC -i -ilib -fforce-recomp -main-is main -v0 -outputdir /home/hashirama/.xmonad/build-x86_64-linux -o /home/hashirama/.xmonad/xmonad-x86_64-linux
xmonad.hs:56:1: warning: [-Wtabs]
Tab character found here, and in two further locations.
Please use spaces instead.
|
56 | spawnOnce "xrdb /home/hashirama/.Xresources"
| ^^^^^^^^

115
xmonad/xmonad.hs Normal file
View File

@ -0,0 +1,115 @@
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP
import XMonad.StackSet as W -- float purposes
import XMonad.Actions.MouseResize
import XMonad.Util.EZConfig
import XMonad.Util.Loggers
import XMonad.Util.Ungrab
import XMonad.Layout.Magnifier
import XMonad.Layout.ThreeColumns
import XMonad.Layout.Spacing
import XMonad.Hooks.EwmhDesktops
import XMonad.Util.SpawnOnce (spawnOnce)
-- run or raise
import XMonad.Actions.WindowGo (runOrRaise)
import XMonad.ManageHook (className)
import XMonad.StackSet (RationalRect(..))
--
import XMonad.Layout.Decoration (decoration, DefaultShrinker(..), Theme(..), shrinkText)
import XMonad.Layout.Simplest
import XMonad.Layout.SimplestFloat
import XMonad.Layout.Spacing
main :: IO ()
main = xmonad
. ewmhFullscreen
. ewmh
. withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey
$ myConfig
myConfig = def
{ modMask = mod4Mask -- Rebind Mod to the Super key
, layoutHook = myLayout -- Use custom layouts
, terminal = "alacritty"
, manageHook = myManageHook -- Match on certain windows
, startupHook = do
-- other startup commands
spawnOnce "xrandr --output HDMI-A-0 --mode 1366x768"
spawnOnce "xrdb /home/hashirama/.Xresources"
spawnOnce "feh --bg-fill /home/hashirama/wallpaper.jpg"
spawnOnce "compton -b"
}
`additionalKeysP`
[ ("M-d", spawn "rofi -show run")
, ("M-s", spawn "bash -c dictpopup")
, ("M-C-s", unGrab *> spawn "scrot -s" )
, ("M-e", runOrRaise "goldendict" (className =? "GoldenDict-ng"))
, ("M-p", runOrRaise "nyxt" (className =? "Nyxt"))
, ("M-t", withFocused $ windows . W.sink) -- Toggle float for the focused window
]
myManageHook :: ManageHook
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, isDialog --> doFloat
]
myTheme :: Theme
myTheme = def
{ decoHeight = 20 -- Adjust the height of the title bar as needed
-- Add other theme properties as needed
}
myLayout = mouseResize $ spacingRaw True (Border 10 10 10 10) True (Border 10 10 10 10) True $
Tall 1 (3/100) (1/2) ||| Full
myXmobarPP :: PP
myXmobarPP = def
{ ppSep = magenta ""
, ppTitleSanitize = xmobarStrip
, ppCurrent = wrap " " "" . xmobarBorder "Top" "#8be9fd" 2
, ppHidden = white . wrap " " ""
, ppHiddenNoWindows = lowWhite . wrap " " ""
, ppUrgent = red . wrap (yellow "!") (yellow "!")
, ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
, ppExtras = [logTitles formatFocused formatUnfocused]
}
where
formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
-- | Windows should have *some* title, which should not not exceed a
-- sane length.
ppWindow :: String -> String
ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
blue, lowWhite, magenta, red, white, yellow :: String -> String
magenta = xmobarColor "#ff79c6" ""
blue = xmobarColor "#bd93f9" ""
white = xmobarColor "#f8f8f2" ""
yellow = xmobarColor "#f1fa8c" ""
red = xmobarColor "#ff5555" ""
lowWhite = xmobarColor "#bbbbbb" ""

114
xmonad/xmonad.hs~ Normal file
View File

@ -0,0 +1,114 @@
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP
import XMonad.StackSet as W -- float purposes
import XMonad.Actions.MouseResize
import XMonad.Util.EZConfig
import XMonad.Util.Loggers
import XMonad.Util.Ungrab
import XMonad.Layout.Magnifier
import XMonad.Layout.ThreeColumns
import XMonad.Layout.Spacing
import XMonad.Hooks.EwmhDesktops
import XMonad.Util.SpawnOnce (spawnOnce)
-- run or raise
import XMonad.Actions.WindowGo (runOrRaise)
import XMonad.ManageHook (className)
import XMonad.StackSet (RationalRect(..))
--
import XMonad.Layout.Decoration (decoration, DefaultShrinker(..), Theme(..), shrinkText)
import XMonad.Layout.Simplest
import XMonad.Layout.SimplestFloat
import XMonad.Layout.Spacing
main :: IO ()
main = xmonad
. ewmhFullscreen
. ewmh
. withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey
$ myConfig
myConfig = def
{ modMask = mod4Mask -- Rebind Mod to the Super key
, layoutHook = myLayout -- Use custom layouts
, terminal = "alacritty"
, manageHook = myManageHook -- Match on certain windows
, startupHook = do
-- other startup commands
spawnOnce "xrandr --output HDMI-A-0 --mode 1366x768"
spawnOnce "xrdb /home/hashirama/.Xresources"
spawnOnce "feh --bg-fill /home/hashirama/wallpaper.jpg"
}
`additionalKeysP`
[ ("M-d", spawn "rofi -show run")
, ("M-s", spawn "bash -c dictpopup")
, ("M-C-s", unGrab *> spawn "scrot -s" )
, ("M-e", runOrRaise "goldendict" (className =? "GoldenDict-ng"))
, ("M-p", runOrRaise "nyxt" (className =? "Nyxt"))
, ("M-t", withFocused $ windows . W.sink) -- Toggle float for the focused window
]
myManageHook :: ManageHook
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, isDialog --> doFloat
]
myTheme :: Theme
myTheme = def
{ decoHeight = 20 -- Adjust the height of the title bar as needed
-- Add other theme properties as needed
}
myLayout = mouseResize $ spacingRaw True (Border 10 10 10 10) True (Border 10 10 10 10) True $
Tall 1 (3/100) (1/2) ||| Full
myXmobarPP :: PP
myXmobarPP = def
{ ppSep = magenta ""
, ppTitleSanitize = xmobarStrip
, ppCurrent = wrap " " "" . xmobarBorder "Top" "#8be9fd" 2
, ppHidden = white . wrap " " ""
, ppHiddenNoWindows = lowWhite . wrap " " ""
, ppUrgent = red . wrap (yellow "!") (yellow "!")
, ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
, ppExtras = [logTitles formatFocused formatUnfocused]
}
where
formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
-- | Windows should have *some* title, which should not not exceed a
-- sane length.
ppWindow :: String -> String
ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
blue, lowWhite, magenta, red, white, yellow :: String -> String
magenta = xmobarColor "#ff79c6" ""
blue = xmobarColor "#bd93f9" ""
white = xmobarColor "#f8f8f2" ""
yellow = xmobarColor "#f1fa8c" ""
red = xmobarColor "#ff5555" ""
lowWhite = xmobarColor "#bbbbbb" ""