New xmonad with xmobar. Fresh!
This commit is contained in:
parent
56a18b51bd
commit
8813466f77
3 changed files with 533 additions and 235 deletions
|
@ -15,6 +15,11 @@ module Solarized
|
||||||
, blue
|
, blue
|
||||||
, cyan
|
, cyan
|
||||||
, green
|
, green
|
||||||
|
, background
|
||||||
|
, backgroundhl
|
||||||
|
, foreground
|
||||||
|
, foregroundhl
|
||||||
|
, foregroundll
|
||||||
) where
|
) where
|
||||||
|
|
||||||
base03 = "#002b36"
|
base03 = "#002b36"
|
||||||
|
@ -34,3 +39,8 @@ blue = "#268bd2"
|
||||||
cyan = "#3aa198"
|
cyan = "#3aa198"
|
||||||
green = "#859900"
|
green = "#859900"
|
||||||
|
|
||||||
|
foregroundhl = base1
|
||||||
|
foreground = base0
|
||||||
|
foregroundll = base01
|
||||||
|
backgroundhl = base02
|
||||||
|
background = base03
|
||||||
|
|
37
xmobarrc
Normal file
37
xmobarrc
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
Config {
|
||||||
|
font = "xft:Fira Code:style=Regular:size=9"
|
||||||
|
, template = " %StdinReader%}{%battery% <fc=#2AA198>•</fc> %date% "
|
||||||
|
, commands =
|
||||||
|
[ Run StdinReader
|
||||||
|
, Run Date "%F %a <fc=#2AA198>•</fc> %T" "date" 10
|
||||||
|
, Run Battery [ "--template", "<leftvbar> <left>%<fc=#2AA198>/</fc><timeleft> <fc=#2AA198>• <acstatus> • <watts>W</fc>"
|
||||||
|
, "-L", "25"
|
||||||
|
, "-H", "35"
|
||||||
|
, "-l", "#FF0000"
|
||||||
|
, "-n", "#FFFF00"
|
||||||
|
, "--"
|
||||||
|
, "-O", "ac on"
|
||||||
|
, "-i", "ac idle"
|
||||||
|
, "-o", "ac off"
|
||||||
|
] 50
|
||||||
|
]
|
||||||
|
, bgColor = "#002b36"
|
||||||
|
, fgColor = "#839496"
|
||||||
|
, border = BottomB
|
||||||
|
, borderWidth = 5
|
||||||
|
, borderColor = "#859900"
|
||||||
|
, position = TopSize L 100 29
|
||||||
|
, textOffset = 16
|
||||||
|
, additionalFonts = [ "xft:DejaVu Sans Mono:style=Regular:size=9" ]
|
||||||
|
-- , sepChar
|
||||||
|
-- , alignSep
|
||||||
|
-- , iconOffset
|
||||||
|
-- , allDesktops
|
||||||
|
-- , overrideRedirect
|
||||||
|
-- , pickBroadest
|
||||||
|
-- , hideOnStart
|
||||||
|
-- , lowerOnStart
|
||||||
|
-- , persistent
|
||||||
|
-- , iconRoot
|
||||||
|
-- , alpha
|
||||||
|
}
|
733
xmonad.hs
733
xmonad.hs
|
@ -1,257 +1,508 @@
|
||||||
import Codec.Binary.UTF8.String
|
-- My xmonad configuration, based on the example.hs of the xmonad project
|
||||||
import Graphics.X11.ExtraTypes.XF86
|
-- including best practises.
|
||||||
import LemonBar
|
-- https://github.com/xmonad/xmonad-contrib/blob/master/XMonad/Config/Example.hs
|
||||||
import qualified Solarized as S
|
|
||||||
import qualified Data.Map as M
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
import qualified XMonad.StackSet as W
|
|
||||||
|
module Main (main) where
|
||||||
|
|
||||||
|
import Data.Ratio ((%))
|
||||||
|
import Data.List (sort, isSuffixOf)
|
||||||
|
import Text.EditDistance
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import System.IO
|
|
||||||
import Text.Printf
|
|
||||||
import XMonad
|
import XMonad
|
||||||
import XMonad.Actions.CycleWS
|
import XMonad.Actions.CycleWS
|
||||||
import XMonad.Config.Desktop
|
import XMonad.Config.Desktop
|
||||||
import XMonad.Hooks.DynamicLog
|
import XMonad.Hooks.DynamicLog
|
||||||
import XMonad.Hooks.EwmhDesktops
|
|
||||||
import XMonad.Hooks.ManageDocks
|
|
||||||
import XMonad.Hooks.ManageHelpers
|
import XMonad.Hooks.ManageHelpers
|
||||||
import XMonad.Layout.IndependentScreens
|
import XMonad.Layout.NoBorders (noBorders, smartBorders)
|
||||||
import XMonad.Layout.LayoutCombinators hiding ( (|||) )
|
import XMonad.Layout.ResizableTile (ResizableTall(..))
|
||||||
import XMonad.Layout.Reflect
|
import XMonad.Layout.Spacing
|
||||||
|
import XMonad.Layout.ToggleLayouts (ToggleLayout(..), toggleLayouts)
|
||||||
import XMonad.Prompt
|
import XMonad.Prompt
|
||||||
import XMonad.Prompt.Shell(shellPrompt)
|
import XMonad.Prompt.ConfirmPrompt
|
||||||
import XMonad.Util.Font
|
import XMonad.Prompt.Shell
|
||||||
import XMonad.Util.Loggers
|
import XMonad.Util.EZConfig
|
||||||
-- import XMonad.Util.Run
|
import qualified Solarized as S
|
||||||
|
import qualified XMonad.StackSet as W
|
||||||
|
|
||||||
main = do
|
-- Contructors imports
|
||||||
spawn bar
|
import XMonad.Core (XConfig)
|
||||||
xmonad $ docks $ ewmh desktopConfig
|
import XMonad.Hooks.ManageDocks (AvoidStruts)
|
||||||
{ manageHook = myManageHook <+> manageDocks <+> manageHook defaultConfig
|
import XMonad.Layout.LayoutModifier (ModifiedLayout)
|
||||||
, layoutHook = myLayout
|
|
||||||
, logHook = maLogouk
|
|
||||||
, modMask = mod4Mask -- Rebind to Logo key
|
|
||||||
, workspaces = ["●", "◕", "◑", "◔", "◯", "◐", "◒", "◓", "☦"]
|
|
||||||
, borderWidth = 0
|
|
||||||
, keys = myKeys
|
|
||||||
, terminal = "/run/current-system/sw/bin/kitty"
|
|
||||||
, handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook
|
|
||||||
}
|
|
||||||
|
|
||||||
sym "Tall" = "|"
|
wkspcs :: [String]
|
||||||
sym "Mirror Tall" = "-"
|
-------- ["●", "◕", "◑", "◔", "◯", "◐", "◒", "◓", "☦", "λ"]
|
||||||
sym "Full" = "F"
|
wkspcs = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ"]
|
||||||
sym _ = "◓"
|
|
||||||
|
|
||||||
maLogouk = dynamicLogWithPP $ defaultPP
|
barPP = def
|
||||||
{ ppOutput = printToFile
|
{ ppCurrent = xmobarColor' S.orange
|
||||||
, ppCurrent = LemonBar.color S.orange S.base03 . LemonBar.underline -- . sym
|
, ppVisible = xmobarColor' S.yellow -- other screen
|
||||||
, ppVisible = LemonBar.color S.yellow S.base03 . LemonBar.underline -- . sym
|
, ppHidden = xmobarColor' S.foreground -- other workspaces with windows
|
||||||
, ppHidden = LemonBar.color S.base2 S.base03 . LemonBar.underline -- . sym
|
, ppHiddenNoWindows = xmobarColor' S.foregroundll -- other workspaces
|
||||||
, ppHiddenNoWindows = LemonBar.color S.base01 S.base03 -- . sym
|
|
||||||
, ppLayout = sym
|
|
||||||
, ppTitle = LemonBar.fColor S.violet . shorten 70
|
|
||||||
, ppSep = " "
|
, ppSep = " "
|
||||||
|
, ppLayout = printLayout
|
||||||
|
, ppTitle = printTitle
|
||||||
|
}
|
||||||
|
where xmobarColor' fg = xmobarColor fg S.base03
|
||||||
|
|
||||||
|
printLayout s | "Mirror ResizableTall" `isSuffixOf` s = "[ — ]"
|
||||||
|
printLayout s | "ResizableTall" `isSuffixOf` s = "[ | ]"
|
||||||
|
printLayout "Full" = "[ F ]"
|
||||||
|
printLayout l = "[" ++ l ++ "]"
|
||||||
|
|
||||||
|
printTitle t = let t' = shorten 120 t
|
||||||
|
in xmobarColor' S.foregroundll "« "
|
||||||
|
++ xmobarColor' S.foregroundhl t'
|
||||||
|
++ xmobarColor' S.foregroundll " »"
|
||||||
|
|
||||||
|
bar :: LayoutClass l Window => XConfig l -> IO (XConfig (ModifiedLayout AvoidStruts l))
|
||||||
|
bar conf = statusBar "xmobar /home/eeva/.xmonad/xmobarrc" barPP hideBarsKey conf
|
||||||
|
where hideBarsKey XConfig{modMask = modm} = (modm, xK_b)
|
||||||
|
|
||||||
|
myConfig = desktopConfig
|
||||||
|
{ modMask = mod4Mask -- Use the "Win" key for the mod key
|
||||||
|
, manageHook = myManageHook <+> manageHook desktopConfig
|
||||||
|
, layoutHook = desktopLayoutModifiers $ myLayouts
|
||||||
|
, logHook = dynamicLogString def >>= xmonadPropLog
|
||||||
|
, terminal = "/run/current-system/sw/bin/kitty"
|
||||||
|
, workspaces = wkspcs
|
||||||
|
, normalBorderColor = S.base03
|
||||||
|
, focusedBorderColor = S.violet
|
||||||
|
, borderWidth = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
printToFile :: String -> IO ()
|
`additionalKeysP` -- Add some extra key bindings:
|
||||||
printToFile s = do
|
[ ("M-S-q", confirmPrompt myXPConfig "exit" (io exitSuccess))
|
||||||
h <- openFile "/tmp/monitors/xmonad" WriteMode
|
, ("<XF86MonBrightnessDown>", spawn "/run/current-system/sw/bin/xbacklight -10")
|
||||||
hPutStrLn h $ decodeString s
|
, ("<XF86MonBrightnessUp>", spawn "/run/current-system/sw/bin/xbacklight +10")
|
||||||
-- xxxxxxxxxxxx
|
, ("M-<Delete>", kill)
|
||||||
-- v----------------|
|
, ("M-<Down>", windows W.focusDown)
|
||||||
-- Hacky hack to fix the broken fix of dynamicLogWithPP
|
, ("M-<Esc>", sendMessage (Toggle "Full"))
|
||||||
hClose h
|
, ("M-<Left>", prevWS)
|
||||||
|
, ("M-<Right>", nextWS)
|
||||||
myManageHook = composeAll
|
, ("M-<Tab>", toggleWS)
|
||||||
[ className =? "float" --> doCenterFloat
|
, ("M-<Up>", windows W.focusUp)
|
||||||
, manageDocks ]
|
, ("M-S-<Delete>", spawn "/run/current-system/sw/bin/i3lock-fancy -g -p")
|
||||||
|
, ("M-S-<Left>", shiftToPrev >> prevWS)
|
||||||
------------------------------------------------------------------------
|
, ("M-S-<Right>", shiftToNext >> nextWS)
|
||||||
-- LogHook. Dynamically outputs logs nicely formatted for dzen2
|
, ("M-p", fuzzyPrompt myXPConfig)
|
||||||
--
|
, ("<Tab>-b", sendMessage (Toggle "Full"))
|
||||||
-- myLogHook h = dynamicLogWithPP $ defaultPP {
|
|
||||||
-- ppCurrent = dzenColor "#cb4b16" "#eee8d5",
|
|
||||||
-- ppVisible = dzenColor "#657b83" "#eee8d5",
|
|
||||||
-- ppHiddenNoWindows = dzenColor "#93a1a1" "#eee8d5",
|
|
||||||
-- ppLayout = dzenColor "#6c71c4" "#eee8d5",
|
|
||||||
-- ppTitle = (dzenColor "#cb4b16" "") . (fixedWidth 256),
|
|
||||||
-- ppSep = " ",
|
|
||||||
-- ppWsSep = " ",
|
|
||||||
-- ppOutput = hPutStrLn h
|
|
||||||
-- }
|
|
||||||
-- where
|
|
||||||
-- fixedWidth n l = take (n+5) $ l ++ (cycle ".")
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- StatusBar. Call lemonbar
|
|
||||||
bar = printf
|
|
||||||
"pkill lemonbar; /home/eeva/bin/mkstatus.sh | \
|
|
||||||
\ lemonbar -g 1919x24+0+0 \
|
|
||||||
\ -f '%s' \
|
|
||||||
\ -f '%s' \
|
|
||||||
\ -u %d -B '%s' -F '%s' -U '%s'"
|
|
||||||
--"tewi:style=Regular:antialias=false:autohint=false"
|
|
||||||
"Iosevka:size=10"
|
|
||||||
"DejaVu Sans Mono:size=10"
|
|
||||||
(2 :: Int)
|
|
||||||
S.base03
|
|
||||||
S.base0
|
|
||||||
S.violet
|
|
||||||
|
|
||||||
myLayout = (avoidStruts $ tiled ||| Mirror tiled) ||| Full
|
|
||||||
where
|
|
||||||
tiled = Tall 1 (3/100) (1/2)
|
|
||||||
|
|
||||||
-- Prompt config
|
|
||||||
myXPConfig = defaultXPConfig {
|
|
||||||
position = Top,
|
|
||||||
promptBorderWidth = 5,
|
|
||||||
font = "xft:tewi:style=Regular:antialias=false:autohint=false",
|
|
||||||
height = 24,
|
|
||||||
borderColor = S.base03,
|
|
||||||
bgHLight = S.base02,
|
|
||||||
fgHLight = S.magenta,
|
|
||||||
bgColor = S.base03,
|
|
||||||
fgColor = S.base0,
|
|
||||||
defaultText = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- Key bindings. Add, modify or remove key bindings here.
|
|
||||||
--
|
|
||||||
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
|
|
||||||
[
|
|
||||||
-- launch dmenu
|
|
||||||
--((modm, xK_p), spawn "dmenu_run -b -l 3")
|
|
||||||
-- launch prompt
|
|
||||||
((modm, xK_p), shellPrompt myXPConfig)
|
|
||||||
|
|
||||||
-- close focused window
|
|
||||||
, ((modm, xK_Delete), kill)
|
|
||||||
|
|
||||||
-- Rotate through the available layout algorithms
|
|
||||||
, ((modm, xK_space ), sendMessage NextLayout)
|
|
||||||
--, ((modm .|. shiftMask xK_Tab ), sendMessage PreviousLayout)
|
|
||||||
|
|
||||||
-- Reset the layouts on the current workspace to default
|
|
||||||
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
|
|
||||||
|
|
||||||
-- Resize viewed windows to the correct size
|
|
||||||
, ((modm, xK_n ), refresh)
|
|
||||||
|
|
||||||
-- Move focus to the master window
|
|
||||||
, ((modm, xK_m ), windows W.focusMaster )
|
|
||||||
|
|
||||||
-- Swap the focused window and the master window
|
|
||||||
, ((modm, xK_BackSpace), windows W.swapMaster)
|
|
||||||
|
|
||||||
-- Move focus to the next window
|
|
||||||
, ((modm, xK_j ), windows W.focusDown)
|
|
||||||
, ((modm, xK_Down ), windows W.focusDown)
|
|
||||||
|
|
||||||
-- Move focus to the previous window
|
|
||||||
, ((modm, xK_k ), windows W.focusUp )
|
|
||||||
, ((modm, xK_Up ), windows W.focusUp)
|
|
||||||
|
|
||||||
-- Swap the focused window with the next window
|
|
||||||
, ((modm .|. shiftMask, xK_j ), windows W.swapDown )
|
|
||||||
, ((modm .|. shiftMask, xK_Down ), windows W.swapDown )
|
|
||||||
|
|
||||||
-- Swap the focused window with the previous window
|
|
||||||
, ((modm .|. shiftMask, xK_k ), windows W.swapUp )
|
|
||||||
, ((modm .|. shiftMask, xK_Up ), windows W.swapUp )
|
|
||||||
|
|
||||||
-- Shrink the master area
|
|
||||||
, ((modm, xK_h ), sendMessage Shrink)
|
|
||||||
|
|
||||||
-- Expand the master area
|
|
||||||
, ((modm, xK_l ), sendMessage Expand)
|
|
||||||
|
|
||||||
-- Move to next Workspace
|
|
||||||
, ((modm, xK_Right ), nextWS)
|
|
||||||
|
|
||||||
-- Move to previous Workspace
|
|
||||||
, ((modm, xK_Left ), prevWS)
|
|
||||||
|
|
||||||
-- Move focused window to next Workspace
|
|
||||||
, ((modm .|. shiftMask, xK_Right ), shiftToNext >> nextWS)
|
|
||||||
|
|
||||||
-- Move focused window to previous Workspace
|
|
||||||
, ((modm .|. shiftMask, xK_Left ), shiftToPrev >> prevWS)
|
|
||||||
|
|
||||||
-- Cycle between windows
|
|
||||||
, ((modm , xK_Tab ), toggleWS)
|
|
||||||
|
|
||||||
-- Push window back into tiling
|
|
||||||
, ((modm, xK_t ), withFocused $ windows . W.sink)
|
|
||||||
|
|
||||||
-- Increment the number of windows in the master area
|
|
||||||
, ((modm , xK_comma ), sendMessage (IncMasterN 1))
|
|
||||||
|
|
||||||
-- Deincrement the number of windows in the master area
|
|
||||||
, ((modm , xK_period), sendMessage (IncMasterN (-1)))
|
|
||||||
|
|
||||||
-- close focused window
|
|
||||||
, ((modm .|. shiftMask, xK_c ), kill)
|
|
||||||
|
|
||||||
-- Swap the focused window and the master window
|
|
||||||
, ((modm, xK_Return), windows W.swapMaster)
|
|
||||||
|
|
||||||
-- run my terminal
|
|
||||||
, ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
|
|
||||||
|
|
||||||
-- lock my session
|
|
||||||
--, ((modm .|. shiftMask, xK_Delete), spawn "/usr/bin/sxlock -f \"-*-ubuntu mono-*-r-*-*-*-*-*-*-*-*-*-*\"")
|
|
||||||
, ((modm .|. shiftMask, xK_Delete), spawn "/run/current-system/sw/bin/i3lock-fancy -g -p")
|
|
||||||
|
|
||||||
-- quit xmonad
|
|
||||||
, ((modm .|. shiftMask, xK_q), io (exitWith ExitSuccess))
|
|
||||||
|
|
||||||
-- Raise volume (XF86XK_AudioRaiseVolume)
|
|
||||||
, ((0 , xF86XK_AudioRaiseVolume), spawn "/home/eeva/prefix/bin/volume up")
|
|
||||||
|
|
||||||
-- Lower volume (XF86XK_AudioLowerVolume)
|
|
||||||
, ((0 , xF86XK_AudioLowerVolume), spawn "/home/eeva/prefix/bin/volume down")
|
|
||||||
|
|
||||||
-- Mute volume (xF86XK_AudioMute)
|
|
||||||
, ((0 , xF86XK_AudioMute), spawn "/home/eeva/prefix/bin/volume toggle")
|
|
||||||
|
|
||||||
-- Playlist play (xK_F7)
|
|
||||||
, ((0 , xK_F7), spawn "/usr/bin/notify-send \"Current song\" \"$(mpc -h ~/.config/mpd/mpd.socket | head -n 1)\"")
|
|
||||||
|
|
||||||
-- Playlist play (xK_F8)
|
|
||||||
, ((0 , xK_F8), spawn "/home/eeva/prefix/bin/playlist toggle")
|
|
||||||
|
|
||||||
-- Playlist stop (xK_F9)
|
|
||||||
, ((0 , xK_F9), spawn "/home/eeva/prefix/bin/playlist stop")
|
|
||||||
|
|
||||||
-- Launch App (XF86XK_Launch1)
|
|
||||||
, ((0 , xF86XK_Launch1), spawn "/usr/bin/firefox")
|
|
||||||
|
|
||||||
-- Adjust Brightness up (xF86XK_MonBrightnessUp)
|
|
||||||
, ((0 , xF86XK_MonBrightnessUp), spawn "/run/current-system/sw/bin/xbacklight +10")
|
|
||||||
|
|
||||||
-- Adjust Brightness down (xF86XK_MonBrightnessDown)
|
|
||||||
, ((0 , xF86XK_MonBrightnessDown), spawn "/run/current-system/sw/bin/xbacklight -10")
|
|
||||||
]
|
]
|
||||||
++
|
|
||||||
|
|
||||||
--
|
`additionalKeys`-- Add some more (automatic) key bindings:
|
||||||
-- mod-[1..9], Switch to workspace N
|
[ ((mod4Mask .|. mask, key), windows $ actionWith tag)
|
||||||
--
|
| (tag, key) <- zip wkspcs [ xK_F1 .. ]
|
||||||
-- mod-[1..9], Switch to workspace N
|
, (mask, actionWith) <- zip [ 0, shiftMask ] [ W.view, W.shift ] ]
|
||||||
-- mod-shift-[1..9], Move client to workspace N
|
|
||||||
--
|
|
||||||
[((m .|. modm, k), windows $ f i)
|
|
||||||
| (i, k) <- zip (XMonad.workspaces conf) [xK_F1 .. xK_F9]
|
|
||||||
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
|
|
||||||
++
|
|
||||||
|
|
||||||
--
|
myLayouts = smartBorders $ toggleLayouts (noBorders Full) others
|
||||||
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
|
where
|
||||||
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
|
resizableTall = ResizableTall 1 (2 % 1) (1/2) []
|
||||||
--
|
others = smartSpacingWithEdge 5 $ resizableTall ||| (Mirror resizableTall)
|
||||||
[((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
|
|
||||||
| (key, sc) <- zip [xK_z, xK_e, xK_r] [0..]
|
myXPConfig = def
|
||||||
, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
|
{ position = Top
|
||||||
|
, alwaysHighlight = True
|
||||||
|
, bgColor = S.magenta
|
||||||
|
, bgHLight = S.base0
|
||||||
|
, borderColor = S.magenta
|
||||||
|
, defaultText = ""
|
||||||
|
, fgColor = S.base02
|
||||||
|
, fgHLight = S.base03
|
||||||
|
, font = "xft:Fira Code:style=Regular:size=9"
|
||||||
|
, height = 24
|
||||||
|
, promptBorderWidth = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Use the `xprop' tool to get the info you need for these matches.
|
||||||
|
-- For className, use the second value that xprop gives you.
|
||||||
|
myManageHook = composeOne
|
||||||
|
[ className =? "mpv" -?> doFullFloat <+> (doShift $ last wkspcs)
|
||||||
|
, className =? "Pavucontrol" -?> doShift $ wkspcs !! 7
|
||||||
|
, className =? "qutebrowser" -?> doShift $ wkspcs !! 5
|
||||||
|
, isDialog -?> doCenterFloat
|
||||||
|
|
||||||
|
-- Move transient windows to their parent:
|
||||||
|
, transience
|
||||||
|
]
|
||||||
|
|
||||||
|
-- Finally:
|
||||||
|
main = xmonad =<< bar myConfig
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Slightly taken from
|
||||||
|
-- https://mail.haskell.org/pipermail/xmonad/2010-October/010671.html
|
||||||
|
data FuzzySpawn = FuzzySpawn deriving (Read, Show)
|
||||||
|
instance XPrompt FuzzySpawn where showXPrompt _ = "Run: "
|
||||||
|
fuzzyPrompt config = do
|
||||||
|
cmds <- io getCommands
|
||||||
|
let compl s
|
||||||
|
| null s = []
|
||||||
|
| otherwise = let weight c = levenshteinDistance defaultEditCosts s c
|
||||||
|
in map snd $ take 20 $ sort $ map (\c -> (weight c,c)) cmds
|
||||||
|
mkXPrompt FuzzySpawn config (return . compl) spawn
|
||||||
|
|
||||||
|
--- import qualified Data.Map as Map
|
||||||
|
--- import XMonad
|
||||||
|
--- import XMonad.Util.EZConfig
|
||||||
|
--- import XMonad.Layout.Tabbed
|
||||||
|
--- import XMonad.Hooks.ManageDocks
|
||||||
|
--- import XMonad.Hooks.DynamicLog
|
||||||
|
--- import XMonad.Layout.NoBorders
|
||||||
|
--- import XMonad.Actions.SwapWorkspaces
|
||||||
|
--- import XMonad.Prompt
|
||||||
|
--- import XMonad.Prompt.Shell
|
||||||
|
---
|
||||||
|
--- -- Solarized colours.
|
||||||
|
--- activeBackColor = "#073642"
|
||||||
|
--- --activeForeColor = "#93A1A1" -- base1
|
||||||
|
--- activeForeColor = "#EEE8D5" -- base2
|
||||||
|
--- passiveForeColor = "#2AA198"
|
||||||
|
---
|
||||||
|
--- yoTabbed = tabbed shrinkText $ def
|
||||||
|
--- { fontName = "xft:Hack:size=10"
|
||||||
|
--- , activeBorderColor = activeForeColor
|
||||||
|
--- , activeTextColor = activeForeColor
|
||||||
|
--- , activeColor = activeBackColor
|
||||||
|
--- , inactiveBorderColor = "#555555"
|
||||||
|
--- , inactiveTextColor = "#555555"
|
||||||
|
--- , inactiveColor = "#000000"
|
||||||
|
--- }
|
||||||
|
--- simpleTall = Tall 1 (1/100) (1/2)
|
||||||
|
--- yoLayouts = smartBorders $ (Mirror simpleTall ||| simpleTall ||| yoTabbed)
|
||||||
|
---
|
||||||
|
--- yoPromptXP = def
|
||||||
|
--- { bgColor = activeBackColor
|
||||||
|
--- , borderColor = activeForeColor
|
||||||
|
--- , fgColor = activeForeColor
|
||||||
|
--- , fgHLight = "#073642"
|
||||||
|
--- , bgHLight = "#859900"
|
||||||
|
--- , promptKeymap = emacsLikeXPKeymap
|
||||||
|
--- , font = "xft:Hack:size=12"
|
||||||
|
--- }
|
||||||
|
---
|
||||||
|
--- yoConfig = def
|
||||||
|
--- { terminal = "termite"
|
||||||
|
--- , modMask = mod4Mask
|
||||||
|
--- , focusedBorderColor = activeForeColor
|
||||||
|
--- , layoutHook = yoLayouts
|
||||||
|
--- }
|
||||||
|
--- `additionalKeysP`
|
||||||
|
--- [ ( "M-<Return>", spawn $ "emacs")
|
||||||
|
---
|
||||||
|
--- , ("<XF86AudioMute>", spawn "pamixer -t")
|
||||||
|
--- , ("M-<F5>" , spawn "pamixer -d 1")
|
||||||
|
--- , ("M-<F6>" , spawn "pamixer -i 1")
|
||||||
|
---
|
||||||
|
--- , ("M-<F7>" , spawn "xbacklight -dec 5")
|
||||||
|
--- , ("M-<F8>" , spawn "xbacklight -inc 5")
|
||||||
|
---
|
||||||
|
--- , ("M-<F9>" , spawn "setxkbmap dvorak")
|
||||||
|
--- , ("M-<F10>", spawn "setxkbmap fr" )
|
||||||
|
--- , ("M-<F11>", spawn "setxkbmap ru" )
|
||||||
|
--- , ("M-<F12>", spawn "setxkbmap ro" )
|
||||||
|
---
|
||||||
|
--- , ("M-C-<Right>", swapTo Next)
|
||||||
|
--- , ("M-C-<Left>" , swapTo Prev)
|
||||||
|
---
|
||||||
|
--- , ("M-r", shellPrompt yoPromptXP)
|
||||||
|
--- ]
|
||||||
|
--- `removeKeysP`
|
||||||
|
--- [ "M-q" ]
|
||||||
|
---
|
||||||
|
--- yoXmobarPP = def
|
||||||
|
--- { ppCurrent = xmobarColor' activeForeColor . activePad
|
||||||
|
--- , ppVisible = xmobarColor' activeForeColor -- other screen
|
||||||
|
--- , ppHidden = xmobarColor' passiveForeColor -- other workspaces with windows
|
||||||
|
--- , ppHiddenNoWindows = xmobarColor' activeBackColor -- other workspaces
|
||||||
|
--- , ppSep = " "
|
||||||
|
--- , ppLayout = printLayout
|
||||||
|
--- , ppTitle = printTitle
|
||||||
|
--- }
|
||||||
|
--- where xmobarColor' fg = xmobarColor fg "#000000"
|
||||||
|
---
|
||||||
|
--- printLayout "Tall" = "[|]"
|
||||||
|
--- printLayout "Mirror Tall" = "[—]"
|
||||||
|
--- printLayout "Tabbed Simplest" = "[□]"
|
||||||
|
--- printLayout l = "[" ++ l ++ "]"
|
||||||
|
---
|
||||||
|
--- printTitle t = let t' = shorten 120 t
|
||||||
|
--- in xmobarColor' passiveForeColor "[ "
|
||||||
|
--- ++ xmobarColor' passiveForeColor t'
|
||||||
|
--- ++ xmobarColor' passiveForeColor " ]"
|
||||||
|
---
|
||||||
|
--- activePad s = xmobarColor' bracketColor " >"
|
||||||
|
--- ++ s
|
||||||
|
--- ++ xmobarColor' bracketColor "< "
|
||||||
|
--- bracketColor = "#B58900"
|
||||||
|
---
|
||||||
|
--- xmobarCmd = "xmobar /home/scolobb/.xmonad/xmobarrc"
|
||||||
|
---
|
||||||
|
--- main = do
|
||||||
|
--- spawn "stalonetray --geometry 5x1+1000 --icon-size 20 -bg '#000000'"
|
||||||
|
--- spawn "nm-applet"
|
||||||
|
--- spawn "seafile-applet"
|
||||||
|
--- spawn "syndaemon"
|
||||||
|
--- xmonad =<< statusBar xmobarCmd yoXmobarPP hideBarsKey yoConfig
|
||||||
|
--- where hideBarsKey XConfig{modMask = modm} = (modm, xK_b)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- import Codec.Binary.UTF8.String
|
||||||
|
--- import Graphics.X11.ExtraTypes.XF86
|
||||||
|
--- import LemonBar
|
||||||
|
--- import qualified Solarized as S
|
||||||
|
--- import qualified Data.Map as M
|
||||||
|
--- import qualified XMonad.StackSet as W
|
||||||
|
--- import System.Exit
|
||||||
|
--- import System.IO
|
||||||
|
--- import Text.Printf
|
||||||
|
--- import XMonad
|
||||||
|
--- import XMonad.Actions.CycleWS
|
||||||
|
--- import XMonad.Config.Desktop
|
||||||
|
--- import XMonad.Hooks.DynamicLog
|
||||||
|
--- import XMonad.Hooks.EwmhDesktops
|
||||||
|
--- import XMonad.Hooks.ManageDocks
|
||||||
|
--- import XMonad.Hooks.ManageHelpers
|
||||||
|
--- import XMonad.Layout.IndependentScreens
|
||||||
|
--- import XMonad.Layout.LayoutCombinators hiding ( (|||) )
|
||||||
|
--- import XMonad.Layout.Reflect
|
||||||
|
--- import XMonad.Prompt
|
||||||
|
--- import XMonad.Prompt.Shell(shellPrompt)
|
||||||
|
--- import XMonad.Util.Font
|
||||||
|
--- import XMonad.Util.Loggers
|
||||||
|
--- -- import XMonad.Util.Run
|
||||||
|
---
|
||||||
|
--- main = do
|
||||||
|
--- spawn bar
|
||||||
|
--- xmonad $ docks $ ewmh desktopConfig
|
||||||
|
--- { manageHook = myManageHook <+> manageDocks <+> manageHook defaultConfig
|
||||||
|
--- , layoutHook = myLayout
|
||||||
|
--- , logHook = maLogouk
|
||||||
|
--- , modMask = mod4Mask -- Rebind to Logo key
|
||||||
|
--- , workspaces = ["●", "◕", "◑", "◔", "◯", "◐", "◒", "◓", "☦"]
|
||||||
|
--- , borderWidth = 0
|
||||||
|
--- , keys = myKeys
|
||||||
|
--- , terminal = "/run/current-system/sw/bin/kitty"
|
||||||
|
--- , handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook
|
||||||
|
--- }
|
||||||
|
---
|
||||||
|
--- sym "Tall" = "|"
|
||||||
|
--- sym "Mirror Tall" = "-"
|
||||||
|
--- sym "Full" = "F"
|
||||||
|
--- sym _ = "◓"
|
||||||
|
---
|
||||||
|
--- maLogouk = dynamicLogWithPP $ defaultPP
|
||||||
|
--- { ppOutput = printToFile
|
||||||
|
--- , ppCurrent = LemonBar.color S.orange S.base03 . LemonBar.underline -- . sym
|
||||||
|
--- , ppVisible = LemonBar.color S.yellow S.base03 . LemonBar.underline -- . sym
|
||||||
|
--- , ppHidden = LemonBar.color S.base2 S.base03 . LemonBar.underline -- . sym
|
||||||
|
--- , ppHiddenNoWindows = LemonBar.color S.base01 S.base03 -- . sym
|
||||||
|
--- , ppLayout = sym
|
||||||
|
--- , ppTitle = LemonBar.fColor S.violet . shorten 70
|
||||||
|
--- , ppSep = " "
|
||||||
|
--- }
|
||||||
|
---
|
||||||
|
--- printToFile :: String -> IO ()
|
||||||
|
--- printToFile s = do
|
||||||
|
--- h <- openFile "/tmp/monitors/xmonad" WriteMode
|
||||||
|
--- hPutStrLn h $ decodeString s
|
||||||
|
--- -- xxxxxxxxxxxx
|
||||||
|
--- -- v----------------|
|
||||||
|
--- -- Hacky hack to fix the broken fix of dynamicLogWithPP
|
||||||
|
--- hClose h
|
||||||
|
---
|
||||||
|
--- myManageHook = composeAll
|
||||||
|
--- [ className =? "float" --> doCenterFloat
|
||||||
|
--- , manageDocks ]
|
||||||
|
---
|
||||||
|
--- ------------------------------------------------------------------------
|
||||||
|
--- -- LogHook. Dynamically outputs logs nicely formatted for dzen2
|
||||||
|
--- --
|
||||||
|
--- -- myLogHook h = dynamicLogWithPP $ defaultPP {
|
||||||
|
--- -- ppCurrent = dzenColor "#cb4b16" "#eee8d5",
|
||||||
|
--- -- ppVisible = dzenColor "#657b83" "#eee8d5",
|
||||||
|
--- -- ppHiddenNoWindows = dzenColor "#93a1a1" "#eee8d5",
|
||||||
|
--- -- ppLayout = dzenColor "#6c71c4" "#eee8d5",
|
||||||
|
--- -- ppTitle = (dzenColor "#cb4b16" "") . (fixedWidth 256),
|
||||||
|
--- -- ppSep = " ",
|
||||||
|
--- -- ppWsSep = " ",
|
||||||
|
--- -- ppOutput = hPutStrLn h
|
||||||
|
--- -- }
|
||||||
|
--- -- where
|
||||||
|
--- -- fixedWidth n l = take (n+5) $ l ++ (cycle ".")
|
||||||
|
---
|
||||||
|
---
|
||||||
|
--- ------------------------------------------------------------------------
|
||||||
|
--- -- StatusBar. Call lemonbar
|
||||||
|
--- bar = printf
|
||||||
|
--- "pkill lemonbar; /home/eeva/bin/mkstatus.sh | \
|
||||||
|
--- \ lemonbar -g 1919x24+0+0 \
|
||||||
|
--- \ -f '%s' \
|
||||||
|
--- \ -f '%s' \
|
||||||
|
--- \ -u %d -B '%s' -F '%s' -U '%s'"
|
||||||
|
--- --"tewi:style=Regular:antialias=false:autohint=false"
|
||||||
|
--- "Iosevka:size=10"
|
||||||
|
--- "DejaVu Sans Mono:size=10"
|
||||||
|
--- (2 :: Int)
|
||||||
|
--- S.base03
|
||||||
|
--- S.base0
|
||||||
|
--- S.violet
|
||||||
|
---
|
||||||
|
--- myLayout = (avoidStruts $ tiled ||| Mirror tiled) ||| Full
|
||||||
|
--- where
|
||||||
|
--- tiled = Tall 1 (3/100) (1/2)
|
||||||
|
---
|
||||||
|
--- -- Prompt config
|
||||||
|
--- myXPConfig = defaultXPConfig {
|
||||||
|
--- position = Top,
|
||||||
|
--- promptBorderWidth = 5,
|
||||||
|
--- font = "xft:tewi:style=Regular:antialias=false:autohint=false",
|
||||||
|
--- height = 24,
|
||||||
|
--- borderColor = S.base03,
|
||||||
|
--- bgHLight = S.base02,
|
||||||
|
--- fgHLight = S.magenta,
|
||||||
|
--- bgColor = S.base03,
|
||||||
|
--- fgColor = S.base0,
|
||||||
|
--- defaultText = ""
|
||||||
|
--- }
|
||||||
|
---
|
||||||
|
--- ------------------------------------------------------------------------
|
||||||
|
--- -- Key bindings. Add, modify or remove key bindings here.
|
||||||
|
--- --
|
||||||
|
--- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
|
||||||
|
--- [
|
||||||
|
--- -- launch dmenu
|
||||||
|
--- --((modm, xK_p), spawn "dmenu_run -b -l 3")
|
||||||
|
--- -- launch prompt
|
||||||
|
--- ((modm, xK_p), shellPrompt myXPConfig)
|
||||||
|
---
|
||||||
|
--- -- close focused window
|
||||||
|
--- , ((modm, xK_Delete), kill)
|
||||||
|
---
|
||||||
|
--- -- Rotate through the available layout algorithms
|
||||||
|
--- , ((modm, xK_space ), sendMessage NextLayout)
|
||||||
|
--- --, ((modm .|. shiftMask xK_Tab ), sendMessage PreviousLayout)
|
||||||
|
---
|
||||||
|
--- -- Reset the layouts on the current workspace to default
|
||||||
|
--- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
|
||||||
|
---
|
||||||
|
--- -- Resize viewed windows to the correct size
|
||||||
|
--- , ((modm, xK_n ), refresh)
|
||||||
|
---
|
||||||
|
--- -- Move focus to the master window
|
||||||
|
--- , ((modm, xK_m ), windows W.focusMaster )
|
||||||
|
---
|
||||||
|
--- -- Swap the focused window and the master window
|
||||||
|
--- , ((modm, xK_BackSpace), windows W.swapMaster)
|
||||||
|
---
|
||||||
|
--- -- Move focus to the next window
|
||||||
|
--- , ((modm, xK_j ), windows W.focusDown)
|
||||||
|
--- , ((modm, xK_Down ), windows W.focusDown)
|
||||||
|
---
|
||||||
|
--- -- Move focus to the previous window
|
||||||
|
--- , ((modm, xK_k ), windows W.focusUp )
|
||||||
|
--- , ((modm, xK_Up ), windows W.focusUp)
|
||||||
|
---
|
||||||
|
--- -- Swap the focused window with the next window
|
||||||
|
--- , ((modm .|. shiftMask, xK_j ), windows W.swapDown )
|
||||||
|
--- , ((modm .|. shiftMask, xK_Down ), windows W.swapDown )
|
||||||
|
---
|
||||||
|
--- -- Swap the focused window with the previous window
|
||||||
|
--- , ((modm .|. shiftMask, xK_k ), windows W.swapUp )
|
||||||
|
--- , ((modm .|. shiftMask, xK_Up ), windows W.swapUp )
|
||||||
|
---
|
||||||
|
--- -- Shrink the master area
|
||||||
|
--- , ((modm, xK_h ), sendMessage Shrink)
|
||||||
|
---
|
||||||
|
--- -- Expand the master area
|
||||||
|
--- , ((modm, xK_l ), sendMessage Expand)
|
||||||
|
---
|
||||||
|
--- -- Move to next Workspace
|
||||||
|
--- , ((modm, xK_Right ), nextWS)
|
||||||
|
---
|
||||||
|
--- -- Move to previous Workspace
|
||||||
|
--- , ((modm, xK_Left ), prevWS)
|
||||||
|
---
|
||||||
|
--- -- Move focused window to next Workspace
|
||||||
|
--- , ((modm .|. shiftMask, xK_Right ), shiftToNext >> nextWS)
|
||||||
|
---
|
||||||
|
--- -- Move focused window to previous Workspace
|
||||||
|
--- , ((modm .|. shiftMask, xK_Left ), shiftToPrev >> prevWS)
|
||||||
|
---
|
||||||
|
--- -- Cycle between windows
|
||||||
|
--- , ((modm , xK_Tab ), toggleWS)
|
||||||
|
---
|
||||||
|
--- -- Push window back into tiling
|
||||||
|
--- , ((modm, xK_t ), withFocused $ windows . W.sink)
|
||||||
|
---
|
||||||
|
--- -- Increment the number of windows in the master area
|
||||||
|
--- , ((modm , xK_comma ), sendMessage (IncMasterN 1))
|
||||||
|
---
|
||||||
|
--- -- Deincrement the number of windows in the master area
|
||||||
|
--- , ((modm , xK_period), sendMessage (IncMasterN (-1)))
|
||||||
|
---
|
||||||
|
--- -- close focused window
|
||||||
|
--- , ((modm .|. shiftMask, xK_c ), kill)
|
||||||
|
---
|
||||||
|
--- -- Swap the focused window and the master window
|
||||||
|
--- , ((modm, xK_Return), windows W.swapMaster)
|
||||||
|
---
|
||||||
|
--- -- run my terminal
|
||||||
|
--- , ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
|
||||||
|
---
|
||||||
|
--- -- lock my session
|
||||||
|
--- --, ((modm .|. shiftMask, xK_Delete), spawn "/usr/bin/sxlock -f \"-*-ubuntu mono-*-r-*-*-*-*-*-*-*-*-*-*\"")
|
||||||
|
--- , ((modm .|. shiftMask, xK_Delete), spawn "/run/current-system/sw/bin/i3lock-fancy -g -p")
|
||||||
|
---
|
||||||
|
--- -- quit xmonad
|
||||||
|
--- , ((modm .|. shiftMask, xK_q), io (exitWith ExitSuccess))
|
||||||
|
---
|
||||||
|
--- -- Raise volume (XF86XK_AudioRaiseVolume)
|
||||||
|
--- , ((0 , xF86XK_AudioRaiseVolume), spawn "/home/eeva/prefix/bin/volume up")
|
||||||
|
---
|
||||||
|
--- -- Lower volume (XF86XK_AudioLowerVolume)
|
||||||
|
--- , ((0 , xF86XK_AudioLowerVolume), spawn "/home/eeva/prefix/bin/volume down")
|
||||||
|
---
|
||||||
|
--- -- Mute volume (xF86XK_AudioMute)
|
||||||
|
--- , ((0 , xF86XK_AudioMute), spawn "/home/eeva/prefix/bin/volume toggle")
|
||||||
|
---
|
||||||
|
--- -- Playlist play (xK_F7)
|
||||||
|
--- , ((0 , xK_F7), spawn "/usr/bin/notify-send \"Current song\" \"$(mpc -h ~/.config/mpd/mpd.socket | head -n 1)\"")
|
||||||
|
---
|
||||||
|
--- -- Playlist play (xK_F8)
|
||||||
|
--- , ((0 , xK_F8), spawn "/home/eeva/prefix/bin/playlist toggle")
|
||||||
|
---
|
||||||
|
--- -- Playlist stop (xK_F9)
|
||||||
|
--- , ((0 , xK_F9), spawn "/home/eeva/prefix/bin/playlist stop")
|
||||||
|
---
|
||||||
|
--- -- Launch App (XF86XK_Launch1)
|
||||||
|
--- , ((0 , xF86XK_Launch1), spawn "/usr/bin/firefox")
|
||||||
|
---
|
||||||
|
--- -- Adjust Brightness up (xF86XK_MonBrightnessUp)
|
||||||
|
--- , ((0 , xF86XK_MonBrightnessUp), spawn "/run/current-system/sw/bin/xbacklight +10")
|
||||||
|
---
|
||||||
|
--- -- Adjust Brightness down (xF86XK_MonBrightnessDown)
|
||||||
|
--- , ((0 , xF86XK_MonBrightnessDown), spawn "/run/current-system/sw/bin/xbacklight -10")
|
||||||
|
--- ]
|
||||||
|
--- ++
|
||||||
|
---
|
||||||
|
--- --
|
||||||
|
--- -- mod-[1..9], Switch to workspace N
|
||||||
|
--- --
|
||||||
|
--- -- mod-[1..9], Switch to workspace N
|
||||||
|
--- -- mod-shift-[1..9], Move client to workspace N
|
||||||
|
--- --
|
||||||
|
--- [((m .|. modm, k), windows $ f i)
|
||||||
|
--- | (i, k) <- zip (XMonad.workspaces conf) [xK_F1 .. xK_F9]
|
||||||
|
--- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
|
||||||
|
--- ++
|
||||||
|
---
|
||||||
|
--- --
|
||||||
|
--- -- 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_z, xK_e, xK_r] [0..]
|
||||||
|
--- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
|
||||||
|
|
Loading…
Reference in a new issue