feat(users/Profpatsch): add my xmonad config
Change-Id: I41d7c3029990f5f1ae56a767331781b38e69997c Reviewed-on: https://cl.tvl.fyi/c/depot/+/9077 Autosubmit: Profpatsch <mail@profpatsch.de> Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
8fb4c949dc
commit
081f6beb8d
6 changed files with 221 additions and 0 deletions
127
users/Profpatsch/my-xmonad/Xmonad.hs
Normal file
127
users/Profpatsch/my-xmonad/Xmonad.hs
Normal file
|
@ -0,0 +1,127 @@
|
|||
module Main where
|
||||
|
||||
import Data.Function ((&))
|
||||
import XMonad
|
||||
import XMonad qualified as Xmonad
|
||||
import XMonad.Hooks.EwmhDesktops (ewmh)
|
||||
import XMonad.Layout.Decoration
|
||||
import XMonad.Layout.MultiToggle
|
||||
import XMonad.Layout.MultiToggle.Instances (StdTransformers (..))
|
||||
import XMonad.Layout.Tabbed (TabbedDecoration)
|
||||
import XMonad.Layout.Tabbed qualified as Tabbed
|
||||
import XMonad.StackSet qualified as StackSet
|
||||
import XMonad.Util.Cursor (setDefaultCursor)
|
||||
import XMonad.Util.EZConfig (additionalKeys, additionalKeysP, removeKeysP)
|
||||
|
||||
data Mode = Normal | Presentation
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let config = ewmh myConfig
|
||||
dirs <- Xmonad.getDirectories
|
||||
Xmonad.launch config dirs
|
||||
|
||||
myConfig ::
|
||||
XConfig
|
||||
( MultiToggle
|
||||
( HCons
|
||||
StdTransformers
|
||||
XMonad.Layout.MultiToggle.EOT
|
||||
)
|
||||
( ModifiedLayout
|
||||
( Decoration
|
||||
TabbedDecoration
|
||||
DefaultShrinker
|
||||
)
|
||||
Tall
|
||||
)
|
||||
)
|
||||
myConfig =
|
||||
conf
|
||||
{ modMask = modKey,
|
||||
terminal = term Normal,
|
||||
focusedBorderColor = "#859900",
|
||||
layoutHook = layout,
|
||||
startupHook = setDefaultCursor xC_heart,
|
||||
workspaces = workspaceNames
|
||||
}
|
||||
`additionalKeysP` ( [
|
||||
-- fullscreen
|
||||
("M-e", sendMessage $ Toggle NBFULL),
|
||||
-- i3-like keybindings, because I’m spoiled
|
||||
("M-S-x", kill),
|
||||
-- exchange M-Ret and M-S-Ret
|
||||
("M-<Return>", spawn $ term Normal),
|
||||
("C-M-<Return>", spawn $ term Presentation),
|
||||
("M-S-<Return>", windows StackSet.swapMaster)
|
||||
-- open simple exec dmenu
|
||||
]
|
||||
++
|
||||
-- something something workspaces
|
||||
[ (otherModMasks ++ "M-" ++ [key], action tag)
|
||||
| (tag, key) <- zip workspaceNames "123456789",
|
||||
(otherModMasks, action) <-
|
||||
[ ("", windows . StackSet.greedyView),
|
||||
("S-", windows . StackSet.shift)
|
||||
]
|
||||
]
|
||||
++
|
||||
-- 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-v", focusToScreen 0),
|
||||
-- , ("M-l", focusToScreen 1)
|
||||
("M-c", focusToScreen 2),
|
||||
("M-S-v", windowToScreen 0),
|
||||
("M-S-l", windowToScreen 1),
|
||||
("M-S-c", windowToScreen 2)
|
||||
]
|
||||
-- ((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
|
||||
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
|
||||
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
|
||||
)
|
||||
`additionalKeys`
|
||||
-- arrow keys should move as well (hjkl blindness)
|
||||
[ ((modKey, xK_Up), windows StackSet.focusUp),
|
||||
((modKey, xK_Down), windows StackSet.focusDown)
|
||||
]
|
||||
`removeKeysP` [
|
||||
-- previous kill command
|
||||
"M-S-c",
|
||||
-- It is way to easy to kill everything by default
|
||||
"M-S-q",
|
||||
-- no idea, I want to use it for Mozc
|
||||
"M-n"
|
||||
]
|
||||
where
|
||||
conf = def
|
||||
workspaceNames = conf & workspaces
|
||||
modKey = mod4Mask
|
||||
-- TODO: meh
|
||||
term :: Mode -> String
|
||||
-- TODO: get terminal-emulator from the system config (currently alacritty)
|
||||
term Normal = "terminal-emulator"
|
||||
term Presentation = "notify-send TODO: currently not terminal presentation mode implemented" -- "terminal- -u ~/.config/lilyterm/pres.conf"
|
||||
toScreen with _number = screenWorkspace 0 >>= \ws -> whenJust ws (windows . with)
|
||||
focusToScreen = toScreen StackSet.view
|
||||
windowToScreen = toScreen StackSet.shift
|
||||
|
||||
-- copied from Xmonad.Config
|
||||
layout ::
|
||||
MultiToggle
|
||||
(HCons StdTransformers EOT)
|
||||
(ModifiedLayout (Decoration TabbedDecoration DefaultShrinker) Tall)
|
||||
Window
|
||||
layout =
|
||||
tiled
|
||||
& Tabbed.addTabsBottom Tabbed.shrinkText def
|
||||
& toggleFullscreen
|
||||
where
|
||||
-- default tiling algorithm partitions the screen into two panes
|
||||
tiled = Tall nmaster delta ratio
|
||||
-- The default number of windows in the master pane
|
||||
nmaster = 1
|
||||
-- Default proportion of screen occupied by master pane
|
||||
ratio = 1 / 2
|
||||
-- Percent of screen to increment by when resizing panes
|
||||
delta = 3 / 100
|
||||
toggleFullscreen = mkToggle1 NBFULL
|
Loading…
Add table
Add a link
Reference in a new issue