diff options
| -rwxr-xr-x | example/build (renamed from build.bak) | 0 | ||||
| -rw-r--r-- | example/stack.yaml.example (renamed from stack.yaml.example) | 0 | ||||
| -rw-r--r-- | example/xmonad.desktop (renamed from xmonad.desktop) | 0 | ||||
| -rw-r--r-- | example/xmonad.hs.bak | 455 | ||||
| -rwxr-xr-x | xmobar/separator.sh | 3 | ||||
| -rwxr-xr-x | xmobar/trayer-padding-icon.sh | 48 | ||||
| -rwxr-xr-x | xmobar/xmobarrc | 107 | ||||
| -rw-r--r-- | xmobar/xmobarrc.bak | 30 | ||||
| -rw-r--r-- | xmonad.hs | 533 |
9 files changed, 554 insertions, 622 deletions
diff --git a/build.bak b/example/build index 4402d43..4402d43 100755 --- a/build.bak +++ b/example/build diff --git a/stack.yaml.example b/example/stack.yaml.example index 700e82b..700e82b 100644 --- a/stack.yaml.example +++ b/example/stack.yaml.example diff --git a/xmonad.desktop b/example/xmonad.desktop index a39fcbb..a39fcbb 100644 --- a/xmonad.desktop +++ b/example/xmonad.desktop diff --git a/example/xmonad.hs.bak b/example/xmonad.hs.bak new file mode 100644 index 0000000..a906ac6 --- /dev/null +++ b/example/xmonad.hs.bak @@ -0,0 +1,455 @@ +{-# OPTIONS_HADDOCK prune #-} + +---------------------------------------------------------------------- +-- | +-- Description : la-ninpre xmonad config +-- Maintainer : la-ninpre +-- License : ISC +-- Copyright : la-ninpre <aaoth AT aaoth DOT xyz> +-- +-- personal xmonad config. based heavily on distrotube's config. +-- i've added some stuff and toki pona fonts +-- +---------------------------------------------------------------------- + +module Main where + +import System.Directory +import System.IO (hPutStrLn) +import System.Exit (exitSuccess) + +import Data.Char (isSpace, toUpper) +import Data.Maybe (fromJust, isJust) +import Data.Monoid +import Data.Tree +import Data.List +import qualified Data.Map as M + +import XMonad +import qualified XMonad.StackSet as W + +import XMonad.Actions.CopyWindow (kill1) +import XMonad.Actions.CycleWS ( Direction1D(..) + , moveTo + , shiftTo + , WSType(..) + , nextScreen + , prevScreen + ) +import XMonad.Actions.GridSelect +import XMonad.Actions.MouseResize +import XMonad.Actions.Promote +import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown) +import XMonad.Actions.WindowGo (runOrRaise) +import XMonad.Actions.WithAll (sinkAll, killAll) +import qualified XMonad.Actions.Search as S + +import XMonad.Hooks.DynamicLog +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageDocks ( avoidStruts + , docks + , manageDocks + , ToggleStruts(..)) +import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat) +import XMonad.Hooks.ServerMode +import XMonad.Hooks.SetWMName +import XMonad.Hooks.StatusBar.PP (filterOutWsPP) +import XMonad.Hooks.WorkspaceHistory + +import XMonad.Layout.SimplestFloat +import XMonad.Layout.ResizableTile +import XMonad.Layout.Tabbed +import XMonad.Layout.ThreeColumns +import XMonad.Layout.Accordion +import XMonad.Layout.LayoutModifier +import XMonad.Layout.LimitWindows (limitWindows, increaseLimit, decreaseLimit) +import XMonad.Layout.Magnifier +import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??)) +import XMonad.Layout.MultiToggle.Instances (StdTransformers( NBFULL + , MIRROR + , NOBORDERS + )) +import XMonad.Layout.NoBorders +import XMonad.Layout.Renamed +import XMonad.Layout.ShowWName +import XMonad.Layout.Simplest +import XMonad.Layout.Spacing +import XMonad.Layout.SubLayouts +import XMonad.Layout.WindowNavigation +import qualified XMonad.Layout.BoringWindows as BW +import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..)) +import qualified XMonad.Layout.ToggleLayouts as T ( toggleLayouts + , ToggleLayout(Toggle) + ) +import qualified XMonad.Layout.MultiToggle as MT (Toggle(..)) + +import XMonad.Util.Dmenu +import XMonad.Util.Loggers +import XMonad.Util.EZConfig (additionalKeysP) +import XMonad.Util.NamedScratchpad +import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe) +import XMonad.Util.SpawnOnce +import XMonad.Util.WorkspaceCompare + +import LaNinpreConfig + +-- * misc functions +-- +-- | hides workspaces that have no windows +myHiddenNoWindows :: WorkspaceId -> String +myHiddenNoWindows = const "" + +mySuperscript :: Int -> String +mySuperscript n = map ss $ show n + where ss c | c == '0' = '⁰' + | c == '1' = '¹' + | c == '2' = '²' + | c == '3' = '³' + | c == '4' = '⁴' + | c == '5' = '⁵' + | c == '6' = '⁶' + | c == '7' = '⁷' + | c == '8' = '⁸' + | c == '9' = '⁹' + | otherwise = c + + +-- | window count logger +-- +-- gets number of windows on current workspace +myWindowCountLogger :: Logger +myWindowCountLogger = gets $ Just . show . length . W.integrate' . W.stack + . W.workspace . W.current . windowset + +-- * grid select +-- +-- $gridSelect +-- +-- this section provides theming of 'GridSelect' stuff. +-- +-- here, 'GridSelect' is used for following things: +-- +-- * spawning some frequently used programs +-- +-- * moving to desired window +-- +-- * bringing the desired window to the current workspace + +-- | custom colorizer for 'gridselect' +-- +-- essentially, it is just plain theme +myColorizer :: a -> Bool -> X (String, String) +myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def) + else return (col_bg def, col_fg def) + +-- | custom 'GSConfig' +myGridConfig :: GSConfig a +myGridConfig = (buildDefaultGSConfig myColorizer) + { gs_cellheight = 40 + , gs_cellwidth = 200 + , gs_cellpadding = 6 + , gs_originFractX = 0.5 + , gs_originFractY = 0.5 + , gs_bordercolor = col_bg_alt def + , gs_font = head myFonts + } + +-- | spawn selected programs with grid select +-- +-- it is esentially the same as 'spawnSelected' but allows to specify program aliases +mySpawnSelected :: [(String, String)] -> X () +mySpawnSelected lst = gridselect myGridConfig lst >>= flip whenJust spawn + +-- * layouts +-- +-- ** spacing raw helper functions +-- +-- $spacingHelpers +-- +-- these make calls to 'spacingRaw' simpler to write + +-- | for many windows +mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a +mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True + +-- | for fewer than two windows +mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a +mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True + +-- ** actually layouts +-- +-- $layouts +-- +-- currently there are: +-- +-- * tall +-- +-- * floats +-- +-- * threeCol + +tall = renamed [Replace "tall"] + $ smartBorders + $ addTabs shrinkText myTabTheme + $ subLayout [] (smartBorders Simplest ||| Accordion) + $ limitWindows 12 + $ mySpacing 4 + $ ResizableTall 1 (5/100) (1/2) [] + +floats = renamed [Replace "floats"] + $ smartBorders + $ limitWindows 20 + simplestFloat + +threeCol = renamed [Replace "threeCol"] + $ smartBorders + $ addTabs shrinkText myTabTheme + $ subLayout [] (smartBorders Simplest ||| Accordion) + $ limitWindows 7 + $ mySpacing 4 + $ ThreeColMid 1 (3/100) (1/2) + +-- | setting colors for tabs layout and tabs sublayout. +myTabTheme :: Theme +myTabTheme = def { fontName = head myFonts + , activeTextColor = col_fg_alt def + , activeColor = col_bg_alt def + , activeBorderWidth = 0 + , inactiveTextColor = col_fg def + , inactiveColor = col_bg def + , inactiveBorderWidth = 0 + , urgentTextColor = col_bg_alt def + , urgentColor = col_fg_alt def + , urgentBorderWidth = 0 + } + +-- ** layout hook + +-- $layoutHook +-- +-- putting it all together with some stuff +myLayoutHook = avoidStruts + $ mouseResize + $ BW.boringWindows + $ windowNavigation + $ windowArrange + $ T.toggleLayouts floats + $ mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout + where + myDefaultLayout = withBorder myBorderWidth tall + ||| withBorder myBorderWidth threeCol + +-- * show wm name hook + +-- | theme for showWName which prints current workspace +-- when you change workspaces. +myShowWNameTheme :: SWNConfig +myShowWNameTheme = def + { swn_font = myFonts !! 1 + , swn_fade = 0.7 + , swn_bgcolor = col_bg def + , swn_color = col_fg def + } + +-- * workspaces +-- +-- $workspaces +-- +-- here are some helper functions to deal with workspaces. +-- +-- actual workspace list is in "LaNinpreConfig". + +-- | workspace indices to use with hotkeys +myWorkspaceIndices = M.fromList $ zip myWorkspaces [1..] + +-- ** clickable workspace wrapper +-- +-- $clickable +-- +-- normal variant +-- +-- > clickable ws = "<action=xdotool key super+"++show i++">"++ws++"</action>" +-- > where i = fromJust $ M.lookup ws myWorkspaceIndices + +-- | provides option to click workspaces to switch to them. +-- this is handled by @UnsafeStdinReader@ in xmobar config. +clickable ws = "<fn=3><action=xdotool key super+"++show i++">"++ws++"</action></fn>" + where i = fromJust $ M.lookup ws myWorkspaceIndices + +-- * keybindings + +-- | keybindings list +-- +-- there's no way to document it using haddock, i guess... +myKeys :: [(String, X ())] +myKeys = + [ ("M-C-r", spawn "xmonad --recompile") -- Recompiles xmonad + , ("M-S-r", spawn "xmonad --restart") -- Restarts xmonad + , ("M-S-q", io exitSuccess) -- Quits xmonad + + -- Run Prompt + , ("M-p", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu + + -- Useful programs to have a keybinding for launch + , ("M-<Return>", spawn myTerminal) + , ("M-e", spawn myFileMgr) + , ("M-w", spawn myBrowser) + , ("M-i", spawn (myTerminal + ++ " --class alacritty,amfora -e " + ++ myGeminiClient)) + , ("M-S-e", spawn "emacsclient -c") + -- Kill windows + , ("M-S-c", kill1) -- Kill the currently focused client + , ("M-S-a", killAll) -- Kill all windows on current workspace + + -- Workspaces + , ("M-.", nextScreen) -- Switch focus to next monitor + , ("M-,", prevScreen) -- Switch focus to prev monitor + -- Shifts focused window to next ws + , ("M-S-<KP_Add>", shiftTo Next nonNSP >> moveTo Next nonNSP) + -- Shifts focused window to prev ws + , ("M-S-<KP_Subtract>", shiftTo Prev nonNSP >> moveTo Prev nonNSP) + + -- Floating windows + , ("M-f", sendMessage (T.Toggle "floats")) -- Toggles my 'floats' layout + , ("M-t", withFocused $ windows . W.sink) -- Push floating window back to tile + , ("M-S-t", sinkAll) -- Push ALL floating windows to tile + + -- Increase/decrease spacing (gaps) + , ("C-M1-j", decWindowSpacing 4) -- Decrease window spacing + , ("C-M1-k", incWindowSpacing 4) -- Increase window spacing + , ("C-M1-h", decScreenSpacing 4) -- Decrease screen spacing + , ("C-M1-l", incScreenSpacing 4) -- Increase screen spacing + + -- Grid Select (MOD-g followed by a key) + , ("M-g g", mySpawnSelected myAppGrid) -- grid select favorite apps + , ("M-g t", goToSelected myGridConfig) -- goto selected window + , ("M-g b", bringSelected myGridConfig) -- bring selected window + + -- Windows navigation + , ("M-m", windows W.focusMaster) -- Move focus to the master window + , ("M-j", BW.focusDown) -- Move focus to the next window + , ("M1-<Tab>", BW.focusDown) -- legacy keybinding + , ("M-k", BW.focusUp) -- Move focus to the prev window + , ("M-S-m", windows W.swapMaster) -- Swap the focused window and the master window + , ("M-S-j", windows W.swapDown) -- Swap focused window with next window + , ("M-S-k", windows W.swapUp) -- Swap focused window with prev window + , ("M-<Backspace>", promote) -- Moves focused window to master, others maintain order + , ("M-S-<Tab>", rotSlavesDown) -- Rotate all windows except master and keep focus in place + , ("M-C-<Tab>", rotAllDown) -- Rotate all the windows in the current stack + + -- Layouts + , ("M-<Tab>", sendMessage NextLayout) -- Switch to next layout + , ("M-b", sendMessage (MT.Toggle NBFULL)) + , ("M-<Space>", sendMessage (MT.Toggle NBFULL) >> sendMessage ToggleStruts) -- Toggles noborder/full + + -- Increase/decrease windows in the master pane or the stack + , ("M-S-<Up>", sendMessage (IncMasterN 1)) -- Increase # of clients master pane + , ("M-S-<Down>", sendMessage (IncMasterN (-1))) -- Decrease # of clients master pane + , ("M-C-<Up>", increaseLimit) -- Increase # of windows + , ("M-C-<Down>", decreaseLimit) -- Decrease # of windows + + -- Window resizing + , ("M-h", sendMessage Shrink) -- Shrink horiz window width + , ("M-l", sendMessage Expand) -- Expand horiz window width + , ("M-M1-j", sendMessage MirrorShrink) -- Shrink vert window width + , ("M-M1-k", sendMessage MirrorExpand) -- Expand vert window width + + -- Sublayouts + -- This is used to push windows to tabbed sublayouts, or pull them out of it. + , ("M-C-h", sendMessage $ pullGroup L) + , ("M-C-l", sendMessage $ pullGroup R) + , ("M-C-k", sendMessage $ pullGroup U) + , ("M-C-j", sendMessage $ pullGroup D) + , ("M-C-m", withFocused (sendMessage . MergeAll)) + , ("M-C-u", withFocused (sendMessage . UnMerge)) + , ("M-C-/", withFocused (sendMessage . UnMergeAll)) + , ("M-C-<Space>", toSubl NextLayout) + , ("M-C-.", onGroup W.focusUp') -- Switch focus to next tab + , ("M-C-,", onGroup W.focusDown') -- Switch focus to prev tab + + -- Scratchpads + -- Toggle show/hide these programs. They run on a hidden workspace. + -- When you toggle them to show, it brings them to your current workspace. + -- Toggle them to hide and it sends them back to hidden workspace (NSP). + , ("M-s t", namedScratchpadAction myScratchPads "terminal") + , ("M-s m", namedScratchpadAction myScratchPads "mocp") + , ("M-s c", namedScratchpadAction myScratchPads "calculator") + , ("M-s v", namedScratchpadAction myScratchPads "mpvfloat" ) + + -- Set wallpaper with 'feh'. Type 'SUPER+F1' to launch sxiv in the wallpapers directory. + -- Then in sxiv, type 'C-x w' to set the wallpaper that you choose. + , ("M-<F1>", spawn "sxiv -r -q -t -o ~/Pictures/wallpapers/*") + , ("M-<F2>", spawn "/bin/ls ~/Pictures/wallpapers | shuf -n 1 \ + \| xargs xwallpaper --stretch") + + -- pana e nimi sewi + , ("M-<F7>", spawn "nimi_sewi") + + -- Controls for mocp music player (SUPER-u followed by a key) + , ("M-u p", spawn (myMocp ++ " --play")) + , ("M-u l", spawn (myMocp ++ " --next")) + , ("M-u h", spawn (myMocp ++ " --previous")) + , ("M-u <Space>", spawn (myMocp ++ " --toggle-pause")) + + -- screenshots + , ("<Print>", spawn "scrot_cmd -f") + , ("C-<Print>", spawn "scrot_cmd -a") + , ("M1-<Print>", spawn "scrot_cmd -w") + + -- Multimedia Keys + , ("<XF86AudioPlay>", spawn (myMocp ++ " --toggle-pause")) + , ("<XF86AudioPrev>", spawn (myMocp ++ " --previous")) + , ("<XF86AudioNext>", spawn (myMocp ++ " --next")) + , ("<XF86AudioMute>", spawn (myMocp ++ " -v 0")) + , ("<XF86AudioLowerVolume>", spawn (myMocp ++ " -v -5")) + , ("<XF86AudioRaiseVolume>", spawn (myMocp ++ " -v +5")) + , ("<XF86HomePage>", spawn "firefox https://aaoth.xyz") + , ("<XF86Mail>", runOrRaise "thunderbird" (resource =? "thunderbird")) + , ("<XF86Calculator>", namedScratchpadAction myScratchPads "calculator") + , ("<XF86Sleep>", spawn "dm-logout") + ] + -- the following lines are needed for named scratchpads. + where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP")) + nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) + && W.tag ws /= "NSP")) + + +main :: IO () +main = do + xmproc <- spawnPipe "xmobar ~/.config/xmonad/xmobar/xmobarrc" + -- the xmonad, ya know...what the wm is named after! + xmonad $ docks . ewmh $ def + { manageHook = myManageHook <+> manageDocks + --, handleEventHook = docksEventHook + , modMask = myModMask + , terminal = myTerminal + , startupHook = myStartupHook + , layoutHook = showWName' myShowWNameTheme myLayoutHook + , workspaces = myWorkspaces + , borderWidth = myBorderWidth + , normalBorderColor = myNormColor + , focusedBorderColor = myFocusColor + , logHook = dynamicLogWithPP + $ filterOutWsPP ["NSP"] + $ xmobarPP + { ppOutput = hPutStrLn xmproc + , ppCurrent = xmobarColor (col_fg_alt def) "" + . wrap "<fn=3>" "</fn>" -- toki pona + . wrap "[" "]" + -- . wrap " " " " -- normal + , ppVisible = xmobarColor (col_fg_alt def) "" . clickable + , ppHidden = xmobarColor (col_fg def) "" + . wrap "" "'" + . clickable + , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . clickable + --, ppHiddenNoWindows = myHiddenNoWindows + , ppTitle = xmobarColor (col_fg def) "" . shorten 60 + , ppSep = xmobarColor (col_bg_alt def) "" " | " + , ppWsSep = " " + , ppUrgent = xmobarColor (col_fg_alt def) "" . wrap "!" "!" + , ppExtras = [myWindowCountLogger] + , ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t] + } + } `additionalKeysP` myKeys + diff --git a/xmobar/separator.sh b/xmobar/separator.sh deleted file mode 100755 index e305e52..0000000 --- a/xmobar/separator.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -echo "<fc=#66666a>|</fc>" diff --git a/xmobar/trayer-padding-icon.sh b/xmobar/trayer-padding-icon.sh deleted file mode 100755 index efb8ef6..0000000 --- a/xmobar/trayer-padding-icon.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# Copied from https://github.com/jaor/xmobar/issues/239#issuecomment-233206552 -# Detects the width of running trayer-srg window (xprop name 'panel') -# and creates an XPM icon of that width, 1px height, and transparent. -# Outputs an <icon>-tag for use in xmobar to display the generated -# XPM icon. -# -# Run script from xmobar: -# `Run Com "/where/ever/trayer-padding-icon.sh" [] "trayerpad" 10` -# and use `%trayerpad%` in your template. - - -# Function to create a transparent Wx1 px XPM icon -create_xpm_icon () { - timestamp=$(date) - pixels=$(for i in `seq $1`; do echo -n "."; done) - - cat << EOF > "$2" -/* XPM * -static char * trayer_pad_xpm[] = { -/* This XPM icon is used for padding in xmobar to */ -/* leave room for trayer-srg. It is dynamically */ -/* updated by by trayer-padding-icon.sh which is run */ -/* by xmobar. */ -/* Created: ${timestamp} */ -/* <w/cols> <h/rows> <colors> <chars per pixel> */ -"$1 1 1 1", -/* Colors (none: transparent) */ -". c none", -/* Pixels */ -"$pixels" -}; -EOF -} - -# Width of the trayer window -width=$(xprop -name panel | grep 'program specified minimum size' | cut -d ' ' -f 5) - -# Icon file name -iconfile="$HOME/.xmonad/xpm/tmp/trayer-padding-${width}px.xpm" - -# If the desired icon does not exist create it -if [ ! -f $iconfile ]; then - create_xpm_icon $width $iconfile -fi - -# Output the icon tag for xmobar -echo "<icon=${iconfile}/>" diff --git a/xmobar/xmobarrc b/xmobar/xmobarrc deleted file mode 100755 index 6770406..0000000 --- a/xmobar/xmobarrc +++ /dev/null @@ -1,107 +0,0 @@ --- https://projects.haskell.org/xmobar/ --- uses font awesome --- vim:se syntax=haskell: - -Config { font = "xft:Lato:weight=bold:pixelsize=12:antialias=true:hinting=true" - , additionalFonts = [ "xft:Font Awesome 5 Free Solid:pixelsize=12" - , "xft:Font Awesome 5 Brands:pixelsize=14" - -- sitelen pona pona by jackhumbert - --, "xft:sitelen\-pona:pixelsize=20:antialias=true:hinting=true" - -- linja pona - , "xft:linja pona:pixelsize=22:antialias=true:hinting=true" - ] - , bgColor = "#111111" - , fgColor = "#ccbbcc" - , position = TopSize C 100 24 - , lowerOnStart = True - , hideOnStart = False - , persistent = True - , iconRoot = ".config/xmonad/xpm/" - , commands = [ Run UnsafeStdinReader - , Run Com "uname" ["-r"] "" 0 - , Run Uptime - ["-t" - -- normie - --, "<fc=#7f9848><fn=1>\xf017</fn> uptime: <days>d</fc>" - -- sitelen pona pona by jackhumbert - --, "<fc=#7f9848><fn=3>\xee6b\xee64\xee3d</fn><days></fc>" - -- linja pona - , "<fn=3>\xe66b\xe664\xe63d</fn><days>" - -- tenpo suno nanpa - ] 60 - , Run Cpu - ["-t" - -- normie - --, "<fc=#c74444><fn=1>\xf108</fn>cpu: <total>%</fc>" - -- sitelen pona pona by jackhumbert - --, "<fc=#c74444><fn=3>\xee24\xee4d\xee0e\xee3d</fn>: <total>%</fc>" - -- linja pona - , "<fn=3>\xe624\xe730\xe60e\xe63d</fn>: <total>%" - -- lawa pi ilo sona - , "-H", "50", "--high", "red" - ] 20 - , Run Memory - ["-t" - -- normie - --, "<fc=#d7a06d><fn=1>\xf538</fn> ram: <used>M (<usedratio>%)</fc>" - -- sitelen pona pona by jackhumbert - --, "<fc=#d7a06d><fn=3>\xee53\xee49</fn>: <used>M (<usedratio>%)</fc>" - -- linja pona - , "<fn=3>\xe653\xf174</fn>: <used>M (<usedratio>%)" - -- poki pali - ] 20 - , Run DiskU - [("/home" - -- normie - --, "<fc=#4e96d5><fn=1>\xf0a0</fn> hdd: <free> free</fc>") - -- sitelen pona pona by jackhumbert - --, "<fc=#4e96d5><fn=3>\xee53\xee08</fn>: <free></fc>") - -- linja pona - , "<fn=3>\xe653\xf109</fn>: <free>") - -- poki awen - ] [] 60 - , Run Kbd - -- normie - --[ ("us", "<fc=#55b795><fn=1>\xf11c</fn> EN</fc>") - --, ("ru", "<fc=#55b795><fn=1>\xf11c</fn> RU</fc>") - --] - -- sitelen pona pona by jackhumbert - --[ ("us", "<fc=#55b795><fn=3>\xee6c\xee4d\xee0e\xee60 inli</fn></fc>") - --, ("ru", "<fc=#55b795><fn=3>\xee6c\xee4d\xee0e\xee60 losi</fn></fc>") - --] - -- toki pi ilo sitelen - -- linja pona - [ ("us", "<fn=3>\xe66c\xe730\xe619\xe660 [INLI]</fn>") - , ("ru", "<fn=3>\xe66c\xe730\xe619\xe660 [LOSI]</fn>") - ] - -- toki pi ilo sitelen - , Run Date - -- normie - --"<fc=#ceced2><fn=1>\xf017</fn> %d %b %Y %R</fc>" - -- sitelen pona pona by jackhumbert - --"<fc=#ceced2><fn=3>\xee6b</fn> %d-%m-%Y %R</fc>" - -- linja pona - "<fn=3>\xe66b</fn> %d-%m-%Y %R" - -- tenpo - "date" 50 - , Run Network "wg0" - ["-t" - -- normie - --, "<fc=#ceced2><fn=1>\xf6d5</fn></fc>" - -- sitelen pona pona by jackhumbert - --, "<fc=#ceced2><fn=3>\xee01</fn></fc>" - -- linja pona - , "<fn=3>\xe601</fn>" - -- akesi - ] 20 - , Run Com ".config/xmonad/xmobar/trayer-padding-icon.sh" - ["panel"] "trayerpad" 10 - , Run Com ".config/xmonad/xmobar/separator.sh" [] "s" 0 - ] - , sepChar = "%" - , alignSep = "}{" - -- ... }{ <fc=#ceced2><fn=2></fn> ... -- normie - -- ... }{ <fc=#ceced2><fn=3> linu</fn> ... -- sitelen pona pona by jackhumbert - -- ... }{ <fc=#ceced2><fn=3> [_L_IN_U]</fn> ... -- linja pona - , template = " <action=`dm-logout`><icon=la_ninpre.xpm/></action> %s% %UnsafeStdinReader% }{ <fn=3> [LINU]</fn> <action=`alacritty --class Alacritty,splash --hold -e neofetch`>%uname%</action> %s% %uptime% %s% <action=`alacritty -e htop`>%cpu%</action> %s% <action=`alacritty -e htop`>%memory%</action> %s% <action=`alacritty --class Alacritty,splash --hold -e df -h / /timeshift /home`>%disku%</action> %s% %kbd% %s% <action=`alacritty -e calcurse`>%date%</action> %s% %wg0% %trayerpad%" -} diff --git a/xmobar/xmobarrc.bak b/xmobar/xmobarrc.bak deleted file mode 100644 index 79daa12..0000000 --- a/xmobar/xmobarrc.bak +++ /dev/null @@ -1,30 +0,0 @@ -Config { font = "xft:Jet Brains Mono:pixelsize=12:antialias=true;hinting=true" - , additionalFonts = [] - , bgColor = "#2e3440" - , fgColor = "#d8dee9" - , position = Top - , lowerOnStart = True - , hideOnStart = False - , allDesktops = True - , persistent = True - , iconRoot = "/home/aaoth/.xmonad/xpm/" -- default: "." - , commands = [ - -- Time and date - Run Date "%b %d %Y %H:%M" "date" 50 - -- Network up and down - , Run Network "eno1" ["-t", "<rx>kb <tx>kb"] 20 - , Run Network "wg0" ["-t", "<rx>kb <tx>kb"] 20 - -- Cpu usage in percent - , Run Cpu ["-t", "<total>%","-H","50","--high","red"] 20 - -- Ram used number and percent - , Run Memory ["-t", "<used>M (<usedratio>%)"] 20 - -- Disk space free - , Run DiskU [("/", "<free> free")] [] 60 - -- Runs a standard shell command 'uname -r' to get kernel version - , Run Com "uname" ["-r"] "" 3600 - ] - , sepChar = "%" - , alignSep = "}{" - , template = "<icon=haskell_20.xpm/>}{%uname% <fc=#666666>|</fc> <icon=cpu_20.xpm/> %cpu% <fc=#666666>|</fc> <icon=memory-icon_20.xpm/> %memory% <fc=#666666>|</fc> <icon=harddisk-icon_20.xpm/> %disku% <fc=#666666>|</fc> %eno1% wg: %wg0% <fc=#666666>|</fc> %date% " - } - @@ -1,455 +1,120 @@ -{-# OPTIONS_HADDOCK prune #-} - ----------------------------------------------------------------------- --- | --- Description : la-ninpre xmonad config --- Maintainer : la-ninpre --- License : ISC --- Copyright : la-ninpre <aaoth AT aaoth DOT xyz> --- --- personal xmonad config. based heavily on distrotube's config. --- i've added some stuff and toki pona fonts --- ----------------------------------------------------------------------- - -module Main where - -import System.Directory -import System.IO (hPutStrLn) -import System.Exit (exitSuccess) - -import Data.Char (isSpace, toUpper) -import Data.Maybe (fromJust, isJust) -import Data.Monoid -import Data.Tree -import Data.List import qualified Data.Map as M +import System.Exit import XMonad import qualified XMonad.StackSet as W -import XMonad.Actions.CopyWindow (kill1) -import XMonad.Actions.CycleWS ( Direction1D(..) - , moveTo - , shiftTo - , WSType(..) - , nextScreen - , prevScreen - ) import XMonad.Actions.GridSelect -import XMonad.Actions.MouseResize -import XMonad.Actions.Promote -import XMonad.Actions.RotSlaves (rotSlavesDown, rotAllDown) -import XMonad.Actions.WindowGo (runOrRaise) -import XMonad.Actions.WithAll (sinkAll, killAll) -import qualified XMonad.Actions.Search as S +import XMonad.Actions.WithAll -import XMonad.Hooks.DynamicLog +import XMonad.Hooks.DynamicLog import XMonad.Hooks.EwmhDesktops -import XMonad.Hooks.ManageDocks ( avoidStruts - , docks - , manageDocks - , ToggleStruts(..)) -import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat) -import XMonad.Hooks.ServerMode -import XMonad.Hooks.SetWMName -import XMonad.Hooks.StatusBar.PP (filterOutWsPP) -import XMonad.Hooks.WorkspaceHistory +import XMonad.Hooks.StatusBar +import XMonad.Hooks.StatusBar.PP + +import XMonad.Util.ClickableWorkspaces +import XMonad.Util.EZConfig +import XMonad.Util.NamedScratchpad -import XMonad.Layout.SimplestFloat -import XMonad.Layout.ResizableTile -import XMonad.Layout.Tabbed -import XMonad.Layout.ThreeColumns -import XMonad.Layout.Accordion -import XMonad.Layout.LayoutModifier -import XMonad.Layout.LimitWindows (limitWindows, increaseLimit, decreaseLimit) -import XMonad.Layout.Magnifier -import XMonad.Layout.MultiToggle (mkToggle, single, EOT(EOT), (??)) -import XMonad.Layout.MultiToggle.Instances (StdTransformers( NBFULL - , MIRROR - , NOBORDERS - )) -import XMonad.Layout.NoBorders import XMonad.Layout.Renamed -import XMonad.Layout.ShowWName -import XMonad.Layout.Simplest import XMonad.Layout.Spacing -import XMonad.Layout.SubLayouts -import XMonad.Layout.WindowNavigation -import qualified XMonad.Layout.BoringWindows as BW -import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..)) -import qualified XMonad.Layout.ToggleLayouts as T ( toggleLayouts - , ToggleLayout(Toggle) - ) -import qualified XMonad.Layout.MultiToggle as MT (Toggle(..)) - -import XMonad.Util.Dmenu -import XMonad.Util.Loggers -import XMonad.Util.EZConfig (additionalKeysP) -import XMonad.Util.NamedScratchpad -import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe) -import XMonad.Util.SpawnOnce -import XMonad.Util.WorkspaceCompare +import XMonad.Layout.ThreeColumns import LaNinpreConfig --- * misc functions --- --- | hides workspaces that have no windows -myHiddenNoWindows :: WorkspaceId -> String -myHiddenNoWindows = const "" - -mySuperscript :: Int -> String -mySuperscript n = map ss $ show n - where ss c | c == '0' = '⁰' - | c == '1' = '¹' - | c == '2' = '²' - | c == '3' = '³' - | c == '4' = '⁴' - | c == '5' = '⁵' - | c == '6' = '⁶' - | c == '7' = '⁷' - | c == '8' = '⁸' - | c == '9' = '⁹' - | otherwise = c - - --- | window count logger --- --- gets number of windows on current workspace -myWindowCountLogger :: Logger -myWindowCountLogger = gets $ Just . show . length . W.integrate' . W.stack - . W.workspace . W.current . windowset - --- * grid select --- --- $gridSelect --- --- this section provides theming of 'GridSelect' stuff. --- --- here, 'GridSelect' is used for following things: --- --- * spawning some frequently used programs --- --- * moving to desired window --- --- * bringing the desired window to the current workspace +myKeys :: [(String, X ())] +myKeys = [ ("M-<Return>", spawn myTerminal) + , ("M-w", spawn myBrowser) + , ("M-p", spawn "dmenu_run") + , ("<Print>", spawn "scrot_cmd -f") + , ("C-<Print>", spawn "scrot_cmd -a") + , ("M1-<Print>", spawn "scrot_cmd -w") + + , ("M-s t", namedScratchpadAction myScratchPads "terminal") + , ("M-s c", namedScratchpadAction myScratchPads "calculator") + , ("M-s m", namedScratchpadAction myScratchPads "mocp") + , ("M-s v", namedScratchpadAction myScratchPads "mpvfloat") + + , ("M-g t", goToSelected myGsConfig) + , ("M-g b", bringSelected myGsConfig) + , ("M-g g", mySpawnSelected myGsConfig myAppGrid) + + , ("M-S-c", kill) + , ("M-<Space>", sendMessage NextLayout) + , ("M-h", sendMessage Shrink) + , ("M-l", sendMessage Expand) + , ("M-j", windows W.focusDown) + , ("M-k", windows W.focusUp) + , ("M-S-j", windows W.swapDown) + , ("M-S-k", windows W.swapUp) + , ("M-m", windows W.focusMaster) + , ("M-S-m", windows W.swapMaster) + , ("M-t", withFocused $ windows . W.sink) + , ("M-S-t", sinkAll) + , ("M-<Tab>", toggleWindowSpacingEnabled >> toggleScreenSpacingEnabled) + + , ("M-S-q", io (exitWith ExitSuccess)) + , ("M-S-r", spawn "xmonad --recompile && xmonad --restart") + ] + ++ + [("M-" ++ m ++ show k, windows $ f i) + | (i, k) <- zip (myWorkspaces) [1..9] + , (f, m) <- [(W.greedyView, ""), (W.shift, "S-")] + ] --- | custom colorizer for 'gridselect' --- --- essentially, it is just plain theme myColorizer :: a -> Bool -> X (String, String) myColorizer _ active = if active then return (col_bg_alt def, col_fg_alt def) else return (col_bg def, col_fg def) --- | custom 'GSConfig' -myGridConfig :: GSConfig a -myGridConfig = (buildDefaultGSConfig myColorizer) - { gs_cellheight = 40 - , gs_cellwidth = 200 - , gs_cellpadding = 6 - , gs_originFractX = 0.5 - , gs_originFractY = 0.5 - , gs_bordercolor = col_bg_alt def - , gs_font = head myFonts - } - --- | spawn selected programs with grid select --- --- it is esentially the same as 'spawnSelected' but allows to specify program aliases -mySpawnSelected :: [(String, String)] -> X () -mySpawnSelected lst = gridselect myGridConfig lst >>= flip whenJust spawn - --- * layouts --- --- ** spacing raw helper functions --- --- $spacingHelpers --- --- these make calls to 'spacingRaw' simpler to write - --- | for many windows -mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a -mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True - --- | for fewer than two windows -mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a -mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True - --- ** actually layouts --- --- $layouts --- --- currently there are: --- --- * tall --- --- * floats --- --- * threeCol - -tall = renamed [Replace "tall"] - $ smartBorders - $ addTabs shrinkText myTabTheme - $ subLayout [] (smartBorders Simplest ||| Accordion) - $ limitWindows 12 - $ mySpacing 4 - $ ResizableTall 1 (5/100) (1/2) [] - -floats = renamed [Replace "floats"] - $ smartBorders - $ limitWindows 20 - simplestFloat - -threeCol = renamed [Replace "threeCol"] - $ smartBorders - $ addTabs shrinkText myTabTheme - $ subLayout [] (smartBorders Simplest ||| Accordion) - $ limitWindows 7 - $ mySpacing 4 - $ ThreeColMid 1 (3/100) (1/2) - --- | setting colors for tabs layout and tabs sublayout. -myTabTheme :: Theme -myTabTheme = def { fontName = head myFonts - , activeTextColor = col_fg_alt def - , activeColor = col_bg_alt def - , activeBorderWidth = 0 - , inactiveTextColor = col_fg def - , inactiveColor = col_bg def - , inactiveBorderWidth = 0 - , urgentTextColor = col_bg_alt def - , urgentColor = col_fg_alt def - , urgentBorderWidth = 0 - } - --- ** layout hook - --- $layoutHook --- --- putting it all together with some stuff -myLayoutHook = avoidStruts - $ mouseResize - $ BW.boringWindows - $ windowNavigation - $ windowArrange - $ T.toggleLayouts floats - $ mkToggle (NBFULL ?? NOBORDERS ?? EOT) myDefaultLayout - where - myDefaultLayout = withBorder myBorderWidth tall - ||| withBorder myBorderWidth threeCol - --- * show wm name hook - --- | theme for showWName which prints current workspace --- when you change workspaces. -myShowWNameTheme :: SWNConfig -myShowWNameTheme = def - { swn_font = myFonts !! 1 - , swn_fade = 0.7 - , swn_bgcolor = col_bg def - , swn_color = col_fg def - } - --- * workspaces --- --- $workspaces --- --- here are some helper functions to deal with workspaces. --- --- actual workspace list is in "LaNinpreConfig". - --- | workspace indices to use with hotkeys -myWorkspaceIndices = M.fromList $ zip myWorkspaces [1..] - --- ** clickable workspace wrapper --- --- $clickable --- --- normal variant --- --- > clickable ws = "<action=xdotool key super+"++show i++">"++ws++"</action>" --- > where i = fromJust $ M.lookup ws myWorkspaceIndices - --- | provides option to click workspaces to switch to them. --- this is handled by @UnsafeStdinReader@ in xmobar config. -clickable ws = "<fn=3><action=xdotool key super+"++show i++">"++ws++"</action></fn>" - where i = fromJust $ M.lookup ws myWorkspaceIndices - --- * keybindings - --- | keybindings list --- --- there's no way to document it using haddock, i guess... -myKeys :: [(String, X ())] -myKeys = - [ ("M-C-r", spawn "xmonad --recompile") -- Recompiles xmonad - , ("M-S-r", spawn "xmonad --restart") -- Restarts xmonad - , ("M-S-q", io exitSuccess) -- Quits xmonad - - -- Run Prompt - , ("M-p", spawn "dmenu_run -i -p \"Run: \"") -- Dmenu - - -- Useful programs to have a keybinding for launch - , ("M-<Return>", spawn myTerminal) - , ("M-e", spawn myFileMgr) - , ("M-w", spawn myBrowser) - , ("M-i", spawn (myTerminal - ++ " --class alacritty,amfora -e " - ++ myGeminiClient)) - , ("M-S-e", spawn "emacsclient -c") - -- Kill windows - , ("M-S-c", kill1) -- Kill the currently focused client - , ("M-S-a", killAll) -- Kill all windows on current workspace - - -- Workspaces - , ("M-.", nextScreen) -- Switch focus to next monitor - , ("M-,", prevScreen) -- Switch focus to prev monitor - -- Shifts focused window to next ws - , ("M-S-<KP_Add>", shiftTo Next nonNSP >> moveTo Next nonNSP) - -- Shifts focused window to prev ws - , ("M-S-<KP_Subtract>", shiftTo Prev nonNSP >> moveTo Prev nonNSP) - - -- Floating windows - , ("M-f", sendMessage (T.Toggle "floats")) -- Toggles my 'floats' layout - , ("M-t", withFocused $ windows . W.sink) -- Push floating window back to tile - , ("M-S-t", sinkAll) -- Push ALL floating windows to tile - - -- Increase/decrease spacing (gaps) - , ("C-M1-j", decWindowSpacing 4) -- Decrease window spacing - , ("C-M1-k", incWindowSpacing 4) -- Increase window spacing - , ("C-M1-h", decScreenSpacing 4) -- Decrease screen spacing - , ("C-M1-l", incScreenSpacing 4) -- Increase screen spacing - - -- Grid Select (MOD-g followed by a key) - , ("M-g g", mySpawnSelected myAppGrid) -- grid select favorite apps - , ("M-g t", goToSelected myGridConfig) -- goto selected window - , ("M-g b", bringSelected myGridConfig) -- bring selected window - - -- Windows navigation - , ("M-m", windows W.focusMaster) -- Move focus to the master window - , ("M-j", BW.focusDown) -- Move focus to the next window - , ("M1-<Tab>", BW.focusDown) -- legacy keybinding - , ("M-k", BW.focusUp) -- Move focus to the prev window - , ("M-S-m", windows W.swapMaster) -- Swap the focused window and the master window - , ("M-S-j", windows W.swapDown) -- Swap focused window with next window - , ("M-S-k", windows W.swapUp) -- Swap focused window with prev window - , ("M-<Backspace>", promote) -- Moves focused window to master, others maintain order - , ("M-S-<Tab>", rotSlavesDown) -- Rotate all windows except master and keep focus in place - , ("M-C-<Tab>", rotAllDown) -- Rotate all the windows in the current stack - - -- Layouts - , ("M-<Tab>", sendMessage NextLayout) -- Switch to next layout - , ("M-b", sendMessage (MT.Toggle NBFULL)) - , ("M-<Space>", sendMessage (MT.Toggle NBFULL) >> sendMessage ToggleStruts) -- Toggles noborder/full - - -- Increase/decrease windows in the master pane or the stack - , ("M-S-<Up>", sendMessage (IncMasterN 1)) -- Increase # of clients master pane - , ("M-S-<Down>", sendMessage (IncMasterN (-1))) -- Decrease # of clients master pane - , ("M-C-<Up>", increaseLimit) -- Increase # of windows - , ("M-C-<Down>", decreaseLimit) -- Decrease # of windows - - -- Window resizing - , ("M-h", sendMessage Shrink) -- Shrink horiz window width - , ("M-l", sendMessage Expand) -- Expand horiz window width - , ("M-M1-j", sendMessage MirrorShrink) -- Shrink vert window width - , ("M-M1-k", sendMessage MirrorExpand) -- Expand vert window width - - -- Sublayouts - -- This is used to push windows to tabbed sublayouts, or pull them out of it. - , ("M-C-h", sendMessage $ pullGroup L) - , ("M-C-l", sendMessage $ pullGroup R) - , ("M-C-k", sendMessage $ pullGroup U) - , ("M-C-j", sendMessage $ pullGroup D) - , ("M-C-m", withFocused (sendMessage . MergeAll)) - , ("M-C-u", withFocused (sendMessage . UnMerge)) - , ("M-C-/", withFocused (sendMessage . UnMergeAll)) - , ("M-C-<Space>", toSubl NextLayout) - , ("M-C-.", onGroup W.focusUp') -- Switch focus to next tab - , ("M-C-,", onGroup W.focusDown') -- Switch focus to prev tab - - -- Scratchpads - -- Toggle show/hide these programs. They run on a hidden workspace. - -- When you toggle them to show, it brings them to your current workspace. - -- Toggle them to hide and it sends them back to hidden workspace (NSP). - , ("M-s t", namedScratchpadAction myScratchPads "terminal") - , ("M-s m", namedScratchpadAction myScratchPads "mocp") - , ("M-s c", namedScratchpadAction myScratchPads "calculator") - , ("M-s v", namedScratchpadAction myScratchPads "mpvfloat" ) - - -- Set wallpaper with 'feh'. Type 'SUPER+F1' to launch sxiv in the wallpapers directory. - -- Then in sxiv, type 'C-x w' to set the wallpaper that you choose. - , ("M-<F1>", spawn "sxiv -r -q -t -o ~/Pictures/wallpapers/*") - , ("M-<F2>", spawn "/bin/ls ~/Pictures/wallpapers | shuf -n 1 \ - \| xargs xwallpaper --stretch") - - -- pana e nimi sewi - , ("M-<F7>", spawn "nimi_sewi") - - -- Controls for mocp music player (SUPER-u followed by a key) - , ("M-u p", spawn (myMocp ++ " --play")) - , ("M-u l", spawn (myMocp ++ " --next")) - , ("M-u h", spawn (myMocp ++ " --previous")) - , ("M-u <Space>", spawn (myMocp ++ " --toggle-pause")) - - -- screenshots - , ("<Print>", spawn "scrot_cmd -f") - , ("C-<Print>", spawn "scrot_cmd -a") - , ("M1-<Print>", spawn "scrot_cmd -w") - - -- Multimedia Keys - , ("<XF86AudioPlay>", spawn (myMocp ++ " --toggle-pause")) - , ("<XF86AudioPrev>", spawn (myMocp ++ " --previous")) - , ("<XF86AudioNext>", spawn (myMocp ++ " --next")) - , ("<XF86AudioMute>", spawn (myMocp ++ " -v 0")) - , ("<XF86AudioLowerVolume>", spawn (myMocp ++ " -v -5")) - , ("<XF86AudioRaiseVolume>", spawn (myMocp ++ " -v +5")) - , ("<XF86HomePage>", spawn "firefox https://aaoth.xyz") - , ("<XF86Mail>", runOrRaise "thunderbird" (resource =? "thunderbird")) - , ("<XF86Calculator>", namedScratchpadAction myScratchPads "calculator") - , ("<XF86Sleep>", spawn "dm-logout") - ] - -- the following lines are needed for named scratchpads. - where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP")) - nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) - && W.tag ws /= "NSP")) - +myGsConfig :: GSConfig a +myGsConfig = (buildDefaultGSConfig myColorizer) + { gs_font = head myFonts + , gs_bordercolor = col_bg_alt def + } + +mySpawnSelected :: GSConfig String -> [(String, String)] -> X () +mySpawnSelected conf lst = gridselect conf lst >>= flip whenJust spawn + +myXmobarPP :: PP +myXmobarPP = def + { ppSep = xmobarColor (col_bg_alt def) "" " | " + , ppCurrent = xmobarColor (col_fg_alt def) "" . sitelen + , ppHidden = xmobarColor (col_fg def) "" . sitelen + , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . sitelen + } where + sitelen = xmobarFont 3 + +mySB :: StatusBarConfig +mySB = statusBarProp "xmobar" + $ clickablePP $ filterOutWsPP [scratchpadWorkspaceTag] myXmobarPP + +myLayout = tiled ||| threeCol ||| full + where + tiled = renamed [Replace "lawa"] + $ spacingWithEdge space $ Tall nmaster delta ratio + threeCol = renamed [Replace "supa"] + $ spacingWithEdge space $ ThreeColMid nmaster delta ratio + full = renamed [Replace "suli"] $ Full + nmaster = 1 + ratio = 1/2 + delta = 3/100 + space = 4 + +myConfig = def + { terminal = myTerminal + , modMask = myModMask + , layoutHook = myLayout + , manageHook = myManageHook <+> namedScratchpadManageHook myScratchPads + , workspaces = myWorkspaces + , borderWidth = myBorderWidth + , keys = const M.empty -- discard default keybindings + , normalBorderColor = col_bg def + , focusedBorderColor = col_bg_alt def + } `additionalKeysP` myKeys main :: IO () -main = do - xmproc <- spawnPipe "xmobar ~/.config/xmonad/xmobar/xmobarrc" - -- the xmonad, ya know...what the wm is named after! - xmonad $ docks . ewmh $ def - { manageHook = myManageHook <+> manageDocks - --, handleEventHook = docksEventHook - , modMask = myModMask - , terminal = myTerminal - , startupHook = myStartupHook - , layoutHook = showWName' myShowWNameTheme myLayoutHook - , workspaces = myWorkspaces - , borderWidth = myBorderWidth - , normalBorderColor = myNormColor - , focusedBorderColor = myFocusColor - , logHook = dynamicLogWithPP - $ filterOutWsPP ["NSP"] - $ xmobarPP - { ppOutput = hPutStrLn xmproc - , ppCurrent = xmobarColor (col_fg_alt def) "" - . wrap "<fn=3>" "</fn>" -- toki pona - . wrap "[" "]" - -- . wrap " " " " -- normal - , ppVisible = xmobarColor (col_fg_alt def) "" . clickable - , ppHidden = xmobarColor (col_fg def) "" - . wrap "" "'" - . clickable - , ppHiddenNoWindows = xmobarColor (col_bg_alt def) "" . clickable - --, ppHiddenNoWindows = myHiddenNoWindows - , ppTitle = xmobarColor (col_fg def) "" . shorten 60 - , ppSep = xmobarColor (col_bg_alt def) "" " | " - , ppWsSep = " " - , ppUrgent = xmobarColor (col_fg_alt def) "" . wrap "!" "!" - , ppExtras = [myWindowCountLogger] - , ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t] - } - } `additionalKeysP` myKeys - +main = xmonad + . ewmhFullscreen + . ewmh + . withEasySB mySB defToggleStrutsKey + $ myConfig |
