xmonad: switched to isaacBrown92 as a base
This commit is contained in:
parent
4e8ee48cd2
commit
93031832aa
|
@ -1,149 +1,269 @@
|
||||||
import XMonad
|
import XMonad
|
||||||
import XMonad.Config.Desktop
|
import XMonad.Actions.CopyWindow
|
||||||
import Data.Monoid
|
import XMonad.Actions.DynamicProjects
|
||||||
import Data.Word
|
import XMonad.Actions.Navigation2D
|
||||||
import Graphics.X11.Xlib
|
import XMonad.Actions.SpawnOn
|
||||||
import Graphics.X11.Xlib.Extras
|
|
||||||
import XMonad.Actions.UpdatePointer (updatePointer)
|
|
||||||
import XMonad.Hooks.DynamicLog
|
import XMonad.Hooks.DynamicLog
|
||||||
import XMonad.Hooks.EwmhDesktops
|
import XMonad.Hooks.EwmhDesktops
|
||||||
import XMonad.Hooks.ManageDocks
|
import XMonad.Hooks.StatusBar
|
||||||
import XMonad.Hooks.UrgencyHook
|
import XMonad.Layout.Decoration
|
||||||
import XMonad.Layout.Accordion
|
import XMonad.Layout.Hidden
|
||||||
import XMonad.Layout.Circle
|
import XMonad.Layout.Spacing
|
||||||
import XMonad.Layout.GridVariants
|
|
||||||
import XMonad.Layout.LayoutCombinators hiding ( (|||) )
|
|
||||||
import XMonad.Layout.Spiral
|
|
||||||
import XMonad.Layout.Tabbed
|
|
||||||
import XMonad.Layout.ThreeColumns
|
|
||||||
import XMonad.Prompt
|
import XMonad.Prompt
|
||||||
import XMonad.Prompt.Shell ( shellPrompt )
|
import XMonad.Util.EZConfig
|
||||||
import XMonad.Util.Run(spawnPipe)
|
import XMonad.Util.Loggers
|
||||||
import XMonad.Util.EZConfig(additionalKeys)
|
|
||||||
import XMonad.Util.NamedWindows
|
|
||||||
import XMonad.Util.Run
|
|
||||||
import XMonad.Util.SpawnOnce
|
import XMonad.Util.SpawnOnce
|
||||||
import System.IO
|
|
||||||
|
|
||||||
import qualified XMonad.StackSet as W
|
----------
|
||||||
|
-- Init --
|
||||||
|
----------
|
||||||
|
|
||||||
colourBackground :: String
|
main :: IO ()
|
||||||
colourBackground = "#1c1c1c"
|
main =
|
||||||
|
xmonad
|
||||||
|
-- ewmhFullscreen and ewmh don't commute, they MUST be in this order
|
||||||
|
. dynamicProjects projects
|
||||||
|
. ewmhFullscreen
|
||||||
|
. ewmh
|
||||||
|
. withNavigation2DConfig myNav2DConf
|
||||||
|
. (`additionalKeysP` myKeybinds)
|
||||||
|
. withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey
|
||||||
|
$ myConfig
|
||||||
|
|
||||||
colourForeground :: String
|
myConfig :: XConfig (Choose (ModifiedLayout Spacing Tall) (Choose (Mirror (ModifiedLayout Spacing Tall)) Full))
|
||||||
colourForeground = "#d0d0d0"
|
myConfig =
|
||||||
|
def
|
||||||
|
{ borderWidth = 3,
|
||||||
|
clickJustFocuses = False,
|
||||||
|
focusFollowsMouse = False,
|
||||||
|
focusedBorderColor = myFocusedBorderColor,
|
||||||
|
layoutHook = myLayout,
|
||||||
|
modMask = mod4Mask,
|
||||||
|
startupHook = myStartupHook,
|
||||||
|
normalBorderColor = myNormalBorderColor,
|
||||||
|
workspaces = myWorkspaces
|
||||||
|
}
|
||||||
|
|
||||||
highlightBackground :: String
|
myStartupHook :: X ()
|
||||||
highlightBackground = "#ffaf00"
|
myStartupHook = do
|
||||||
|
spawnOnce "feh --bg-fill ~/.dotfiles/media/backgrounds/forest-1.jpg --bg-fill ~/.dotfiles/media/backgrounds/forest-2.jpg --bg-fill ~/.dotfiles/media/backgrounds/forest-3.jpg"
|
||||||
|
|
||||||
highlightForeground :: String
|
------------
|
||||||
highlightForeground = "#1c1c1c"
|
-- xmobar --
|
||||||
|
------------
|
||||||
|
|
||||||
-- Set xmobar as my task bar.
|
myXmobarPP :: PP
|
||||||
myWsBar :: String
|
myXmobarPP =
|
||||||
myWsBar = "xmobar -v -d $HOME/.xmobarrc"
|
def
|
||||||
|
{ ppCurrent = wrap "" "" . xmobarBorder "Top" blue 2,
|
||||||
|
ppExtras = [logTitles formatFocused formatUnfocused],
|
||||||
|
ppHidden = xmobarBase0 . wrap "[" "]",
|
||||||
|
ppHiddenNoWindows = const "",
|
||||||
|
ppOrder = \[ws, l, _, wins] -> [" " ++ ws, l], -- and wins to [ws, l] to get window names
|
||||||
|
ppSep = xmobarMagenta " • ",
|
||||||
|
ppTitleSanitize = xmobarStrip,
|
||||||
|
ppUrgent = xmobarRed . wrap (xmobarYellow "!") (xmobarYellow "!")
|
||||||
|
}
|
||||||
|
where
|
||||||
|
formatFocused :: String -> String
|
||||||
|
formatFocused = wrap (xmobarBase0 "[") (xmobarBase0 "]") . xmobarBlue . ppWindow
|
||||||
|
|
||||||
myXPConfig = def -- Configure the prompt's appearance
|
formatUnfocused :: String -> String
|
||||||
{ alwaysHighlight = True
|
formatUnfocused = wrap (xmobarBase0 "[") (xmobarBase0 "]") . xmobarBase0 . ppWindow
|
||||||
, bgColor = colourBackground
|
|
||||||
, bgHLight = highlightBackground
|
|
||||||
, fgColor = colourForeground
|
|
||||||
, fgHLight = highlightForeground
|
|
||||||
, font = "xft:Open Sans:size=9"
|
|
||||||
, position = Top
|
|
||||||
, promptBorderWidth = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
backgroundCmd = "feh --bg-scale ~/Documents/Images/Posters/STEVEs.jpeg"
|
ppWindow :: String -> String
|
||||||
compositeMgr = "xcompmgr -f -C -n -D 3"
|
ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
|
||||||
hdmi1Off = "xrandr --output eDP-1 --primary --output HDMI-1 --off"
|
|
||||||
musicCmd = "mpd"
|
xmobarBase0, xmobarBase2, xmobarYellow, xmobarRed, xmobarMagenta, xmobarBlue :: String -> String
|
||||||
nextcloudCmd = "nextcloud"
|
xmobarBase0 = xmobarColor base0 ""
|
||||||
notificationCmd = "lxqt-notificationd"
|
xmobarBase2 = xmobarColor base2 ""
|
||||||
screensaverCmd = "xscreensaver --no-splash"
|
xmobarYellow = xmobarColor yellow ""
|
||||||
screensaverLock = "xscreensaver-command -lock"
|
xmobarRed = xmobarColor red ""
|
||||||
screenshot = "scrot" -- Screenshot the entire screen
|
xmobarMagenta = xmobarColor magenta ""
|
||||||
screenshotWindow = "sleep 0.2; scrot -s" -- Screenshot the selected window
|
xmobarBlue = xmobarColor blue ""
|
||||||
settingsDaemon = "xsettingsd"
|
|
||||||
terminalCmd = "termonad"
|
----------------
|
||||||
trayerCmd = "trayer --edge top --SetPartialStrut false --width 7 --transparent true --alpha 0 --tint 0x1C1C1C --height 20 --monitor primary"
|
-- Workspaces --
|
||||||
|
----------------
|
||||||
|
|
||||||
|
myWorkspaces :: [String]
|
||||||
|
myWorkspaces = [wsGEN, wsCOM, wsINT]
|
||||||
|
|
||||||
|
wsCOM, wsDOT, wsGEN, wsINT, wsLOG, wsMUS, wsREC, wsVID :: String
|
||||||
|
wsCOM = "com"
|
||||||
|
wsDOT = "dot"
|
||||||
|
wsGEN = "gen"
|
||||||
|
wsINT = "int"
|
||||||
|
wsLOG = "log"
|
||||||
|
wsMUS = "mus"
|
||||||
|
wsREC = "rec"
|
||||||
|
wsVID = "vid"
|
||||||
|
|
||||||
|
--------------
|
||||||
|
-- Projects --
|
||||||
|
--------------
|
||||||
|
|
||||||
|
projects :: [Project]
|
||||||
|
projects =
|
||||||
|
[ Project
|
||||||
|
{ projectName = wsCOM,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Just $ do
|
||||||
|
spawnOn wsCOM element
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsDOT,
|
||||||
|
projectDirectory = "~/.dotfiles",
|
||||||
|
projectStartHook = Just $ do spawnOn wsDOT $ editor ++ " ."
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsGEN,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Nothing
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsINT,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Just $ do spawnOn wsINT browser
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsLOG,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Just $ do spawnOn wsLOG logseq
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsMUS,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Just $ do spawnOn wsMUS musicPlayer
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsREC,
|
||||||
|
projectDirectory = "~/Videos/obs-recordings",
|
||||||
|
projectStartHook = Just $ do spawnOn wsREC obs
|
||||||
|
},
|
||||||
|
Project
|
||||||
|
{ projectName = wsVID,
|
||||||
|
projectDirectory = "~/",
|
||||||
|
projectStartHook = Nothing
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
promptTheme :: XPConfig
|
||||||
|
promptTheme =
|
||||||
|
def
|
||||||
|
{ bgColor = base03,
|
||||||
|
bgHLight = base02,
|
||||||
|
fgColor = base0,
|
||||||
|
fgHLight = base1,
|
||||||
|
height = 31,
|
||||||
|
position = Top,
|
||||||
|
promptBorderWidth = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
------------------
|
||||||
|
-- Applications --
|
||||||
|
------------------
|
||||||
|
|
||||||
|
browser, discord, editor, element, incognitoBrowser, launcher, logseq, musicPlayer, obs, screenshot, terminal :: String
|
||||||
|
browser = "brave"
|
||||||
|
discord = "discord"
|
||||||
|
editor = "codium"
|
||||||
|
element = "element-desktop"
|
||||||
|
incognitoBrowser = "brave -incognito"
|
||||||
|
launcher = "rofi -show drun -m DisplayPort-1"
|
||||||
|
logseq = "logseq"
|
||||||
|
musicPlayer = "spotify"
|
||||||
|
obs = "obs"
|
||||||
|
screenshot = "flameshot gui"
|
||||||
|
terminal = "wezterm"
|
||||||
|
|
||||||
|
--------------
|
||||||
|
-- Keybinds --
|
||||||
|
--------------
|
||||||
|
|
||||||
|
myKeybinds :: [(String, X ())]
|
||||||
|
myKeybinds =
|
||||||
|
[ -- Spawn/kill
|
||||||
|
("M-b", spawn browser),
|
||||||
|
("M-i", spawn incognitoBrowser),
|
||||||
|
("M-f", spawn screenshot),
|
||||||
|
("M-<Space>", spawn launcher),
|
||||||
|
("M-<Return>", spawn Main.terminal),
|
||||||
|
("M-<Backspace>", kill1),
|
||||||
|
-- Layout control
|
||||||
|
("M-z", sendMessage Expand),
|
||||||
|
("M-d", sendMessage NextLayout),
|
||||||
|
("M-v", sendMessage Shrink),
|
||||||
|
("M-C-d", setLayout $ Layout (layoutHook myConfig)),
|
||||||
|
("M-C-w", shiftToProjectPrompt promptTheme),
|
||||||
|
("M-w", switchProjectPrompt promptTheme)
|
||||||
|
]
|
||||||
|
-- Navigation
|
||||||
|
++ zipWith (makeKeybindZipper "M-" windowGo) htnsKeys dirs
|
||||||
|
++ zipWith (makeKeybindZipper "M-" windowSwap) gcrlKeys dirs
|
||||||
|
++ zipWith (makeKeybindZipper "M-C-" screenGo) htnsKeys dirs
|
||||||
|
++ zipWith (makeKeybindZipper "M-C-" windowToScreen) gcrlKeys dirs
|
||||||
|
where
|
||||||
|
makeKeybindZipper :: String -> (direction2D -> Bool -> xUnit) -> String -> direction2D -> (String, xUnit)
|
||||||
|
makeKeybindZipper startOfCmd func restOfCmd dir = (startOfCmd ++ restOfCmd, func dir True)
|
||||||
|
|
||||||
|
dirs :: [Direction2D]
|
||||||
|
dirs = [L, D, U, R]
|
||||||
|
|
||||||
|
gcrlKeys :: [String]
|
||||||
|
gcrlKeys = ["g", "c", "r", "l"]
|
||||||
|
|
||||||
|
htnsKeys :: [String]
|
||||||
|
htnsKeys = ["h", "t", "n", "s"]
|
||||||
|
|
||||||
|
------------
|
||||||
|
-- Layout --
|
||||||
|
------------
|
||||||
|
|
||||||
|
myLayout :: Choose (ModifiedLayout Spacing Tall) (Choose (Mirror (ModifiedLayout Spacing Tall)) Full) a
|
||||||
|
myLayout = tiled ||| Mirror tiled ||| Full
|
||||||
|
where
|
||||||
|
tiled = spacingWithEdge 5 $ Tall nmaster delta ratio
|
||||||
|
nmaster = 1
|
||||||
|
ratio = 1 / 2
|
||||||
|
delta = 3 / 100
|
||||||
|
|
||||||
|
----------------
|
||||||
|
-- Navigation --L
|
||||||
|
----------------
|
||||||
|
|
||||||
|
myNav2DConf :: Navigation2DConfig
|
||||||
|
myNav2DConf = def {defaultTiledNavigation = sideNavigation}
|
||||||
|
|
||||||
|
-------------
|
||||||
|
-- Palette --
|
||||||
|
-------------
|
||||||
|
|
||||||
|
-- solarized
|
||||||
|
|
||||||
|
base03, base02, base01, base00, base0, base1, base2, base3, yellow, orange, red, magenta, violet, blue, cyan, green :: String
|
||||||
|
base03 = "#002b36"
|
||||||
|
base02 = "#073642"
|
||||||
|
base01 = "#586e75"
|
||||||
|
base00 = "#657b83"
|
||||||
|
base0 = "#839496"
|
||||||
|
base1 = "#93a1a1"
|
||||||
|
base2 = "#eee8d5"
|
||||||
|
base3 = "#fdf6e3"
|
||||||
|
yellow = "#b58900"
|
||||||
|
orange = "#cb4b16"
|
||||||
|
red = "#dc322f"
|
||||||
|
magenta = "#d33682"
|
||||||
|
violet = "#6c71c4"
|
||||||
|
blue = "#268bd2"
|
||||||
|
cyan = "#2aa198"
|
||||||
|
green = "#859900"
|
||||||
|
|
||||||
|
-- uses of palette
|
||||||
|
|
||||||
|
myNormalBorderColor :: String
|
||||||
|
myNormalBorderColor = base03
|
||||||
|
|
||||||
|
myFocusedBorderColor :: String
|
||||||
|
myFocusedBorderColor = base1
|
||||||
|
|
||||||
main = do
|
|
||||||
-- Make sure that HDMI is turned off by default
|
|
||||||
spawn hdmi1Off -- Turn off HDMI-1 before we set the modes
|
|
||||||
wsbar <- spawnPipe myWsBar
|
|
||||||
xmonad $ ewmh desktopConfig
|
|
||||||
{ focusFollowsMouse = False
|
|
||||||
, terminal = terminalCmd -- Set the default terminal
|
|
||||||
, startupHook = do
|
|
||||||
spawnOnce screensaverCmd -- Launch the screen saver
|
|
||||||
spawnOnce backgroundCmd -- Set the background wallpaper
|
|
||||||
spawnOnce compositeMgr -- Launch the composite manager
|
|
||||||
spawnOnce settingsDaemon -- Launch the settings daemon
|
|
||||||
spawnOnce trayerCmd -- Launch the system tray, configured to work correctly with dual monitors
|
|
||||||
spawnOnce notificationCmd -- Launch the notification service
|
|
||||||
spawnOnce musicCmd -- Launch the music playing daemon
|
|
||||||
spawnOnce nextcloudCmd -- Launch the cloud service
|
|
||||||
, manageHook = manageDocks <+> manageHook desktopConfig
|
|
||||||
, layoutHook = avoidStruts $ layoutHook desktopConfig
|
|
||||||
||| ThreeColMid 1 (3/100) (1/2)
|
|
||||||
||| spiral (6/7)
|
|
||||||
||| Grid (16/10)
|
|
||||||
||| Circle
|
|
||||||
||| simpleTabbed
|
|
||||||
||| Accordion
|
|
||||||
||| SplitGrid T 1 2 (1/3) (16/10) (5/100)
|
|
||||||
-- ||| (ThreeColMid 1 (3/100) (1/3) *//* Full)
|
|
||||||
, handleEventHook = handleEventHook desktopConfig <+> docksEventHook
|
|
||||||
, logHook = dynamicLogWithPP xmobarPP
|
|
||||||
{ ppOutput = hPutStrLn wsbar
|
|
||||||
, ppCurrent = xmobarColor "#ffaf00" "" . wrap "[" "]"
|
|
||||||
, ppVisible = xmobarColor "#5fafd7" "" . wrap "(" ")"
|
|
||||||
, ppLayout = xmobarColor "#5fafd7" ""
|
|
||||||
, ppTitle = xmobarColor "#ffaf00" "" . shorten 50
|
|
||||||
} >> updatePointer (0.25, 0.25) (0.25, 0.25) -- near the top-left
|
|
||||||
, modMask = mod4Mask -- Rebind Mod to the Windows key
|
|
||||||
--, borderWidth = 1
|
|
||||||
} `additionalKeys`
|
|
||||||
-- Use Xmonad's built-in launcher
|
|
||||||
[ ((mod4Mask, xK_p), shellPrompt myXPConfig)
|
|
||||||
-- Lock the screen
|
|
||||||
, ((0, 0x1008ff2d), spawn screensaverLock)
|
|
||||||
-- XF86ScreenSaver
|
|
||||||
, ((mod4Mask .|. controlMask, xK_l), spawn screensaverLock)
|
|
||||||
, ((controlMask, xK_Print), spawn screenshotWindow)
|
|
||||||
, ((0, xK_Print), spawn screenshot)
|
|
||||||
-- Turn on the eDP-1 port and set it as the primary display
|
|
||||||
, ((mod4Mask .|. shiftMask, xK_e), spawn
|
|
||||||
"xrandr --output eDP-1 --primary --auto"
|
|
||||||
)
|
|
||||||
-- Turn off the eDP-1 port
|
|
||||||
, ((mod4Mask .|. controlMask, xK_e), spawn
|
|
||||||
"xrandr --output eDP-1 --off"
|
|
||||||
)
|
|
||||||
-- Turn off the HDMI port
|
|
||||||
, ((mod4Mask .|. controlMask, xK_h), spawn
|
|
||||||
"xrandr --output HDMI-1 --off"
|
|
||||||
)
|
|
||||||
-- Turn on the HDMI-1 port and set it as the secondary display
|
|
||||||
, ((mod4Mask .|. shiftMask, xK_h), spawn
|
|
||||||
"xrandr --newmode 3840x2160 266.75 3840 4056 4456 5072 2160 2163 2168 2192 -hsync +vsync; xrandr --addmode HDMI-1 3840x2160; xrandr --output eDP-1 --off --output HDMI-1 --mode 3840x2160; feh --bg-scale ~/Documents/Images/Posters/STEVEs.jpeg"
|
|
||||||
)
|
|
||||||
, ((0 , 0x1008FF11), spawn "amixer set Master 2%-") -- XF86AudioLowerVolume
|
|
||||||
-- , ((mod4Mask , xK_Down), spawn "amixer set Master 2%-")
|
|
||||||
, ((0 , 0x1008FF12), spawn "amixer set Master toggle") -- XF86AudioMute
|
|
||||||
, ((0 , 0x1008FF13), spawn "amixer set Master 2%+") -- XF86AudioRaiseVolume
|
|
||||||
-- , ((mod4Mask , xK_Up), spawn "amixer set Master 2%+")
|
|
||||||
, ((0 , 0x1008FF14), spawn "mpc toggle") -- Play/pause
|
|
||||||
-- , ((mod4Mask , xK_End), spawn "mpc toggle")
|
|
||||||
, ((mod4Mask .|. controlMask, xK_space), spawn "mpc toggle") -- Play/pause
|
|
||||||
, ((0 , 0x1008FF15), spawn "mpc stop") -- Stop
|
|
||||||
, ((0 , 0x1008FF16), spawn "mpc prev") -- XF86AudioPrevious
|
|
||||||
, ((mod4Mask , xK_Left), spawn "mpc prev") -- prev
|
|
||||||
, ((0 , 0x1008FF17), spawn "mpc next") -- XF86AudioNext
|
|
||||||
, ((mod4Mask , xK_Right), spawn "mpc next") -- Next
|
|
||||||
-- XF86MonBrightnessUp
|
|
||||||
, ((0 , 0x1008ff02), spawn "xbrightness +5000")
|
|
||||||
-- XF86MonBrightnessDown
|
|
||||||
, ((0 , 0x1008ff03), spawn "xbrightness -5000")
|
|
||||||
]
|
|
||||||
|
|
Loading…
Reference in a new issue