summaryrefslogtreecommitdiff
path: root/desktop/.xmonad/xmonad.hs
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/.xmonad/xmonad.hs')
-rw-r--r--desktop/.xmonad/xmonad.hs167
1 files changed, 167 insertions, 0 deletions
diff --git a/desktop/.xmonad/xmonad.hs b/desktop/.xmonad/xmonad.hs
new file mode 100644
index 0000000..b8989c8
--- /dev/null
+++ b/desktop/.xmonad/xmonad.hs
@@ -0,0 +1,167 @@
+import System.Posix.Unistd (nodeName, getSystemID)
+import System.Posix.Env (setEnv)
+import XMonad
+import XMonad.Actions.CycleWS
+import XMonad.Config.Kde
+import XMonad.Config.Desktop
+import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.InsertPosition
+import XMonad.Util.Run (spawnPipe)
+import XMonad.Layout
+import XMonad.Layout.OnHost
+import XMonad.Layout.NoBorders
+import XMonad.Layout.LayoutScreens
+import XMonad.Layout.TwoPane
+import System.IO
+import qualified XMonad.StackSet as W
+import qualified Data.Map as M
+import System.Exit
+import XMonad.Hooks.EwmhDesktops
+import Control.Applicative ((<$>), pure)
+import XMonad.Hooks.SetWMName
+import XMonad.Hooks.ManageHelpers
+import Data.List.Split
+import Control.Monad
+
+main = do
+ host <- (head . splitOn "." . nodeName) <$> getSystemID
+ setEnv "HOST" host True
+ -- config <- xmobar (myConfig host)
+ let config = myConfig host
+ xmonad config
+
+layoutScreensHost = "unused" -- orange
+
+myConfig host =
+ (docks . ewmh) $ kdeConfig
+ { layoutHook = smartBorders $ myLayout
+ , keys = myKeys
+ , modMask = mod4Mask
+ , terminal = "urxvt"
+ , borderWidth = 2
+ , focusedBorderColor = "#ff0000"
+ , normalBorderColor = "#777778"
+ , workspaces = pure <$> "\"<>PYFAOEUI"
+ , manageHook = manageHook kdeConfig <+> insertPosition Below Newer <+> (isDialog --> doF W.shiftMaster <+> doF W.swapDown)
+ }
+ where myLayout = onHost layoutScreensHost (verticalTiled ||| horizontalTiled ||| Full) $
+ layoutHook desktopConfig
+ verticalTiled = Mirror (Tall 1 (5/100) (2/3))
+ horizontalTiled = Tall 0 (5/100) (2/3)
+
+muteCommand = "pactl set-sink-mute @DEFAULT_SINK@ toggle"
+increaseVolumeCommand = "sh -c \"pactl set-sink-mute 0 false ; pactl set-sink-volume @DEFAULT_SINK@ +5%\""
+decreaseVolumeCommand = "sh -c \"pactl set-sink-mute 0 false ; pactl set-sink-volume @DEFAULT_SINK@ -5%\""
+
+myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
+
+ -- launch a terminal
+ [ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
+
+ -- launch dmenu
+ , ((modm, xK_d ), spawn "dmenu_run")
+
+ -- close focused window
+ , ((modm .|. shiftMask, xK_c ), kill)
+
+ -- Rotate through the available layout algorithms
+ , ((modm, xK_space ), sendMessage NextLayout)
+
+ -- 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 next window
+ -- , ((modm, xK_Tab ), windows W.focusDown)
+
+ -- Move focus to the next window
+ , ((modm, xK_j ), windows W.focusDown)
+
+ -- Move focus to the previous window
+ , ((modm, xK_k ), windows W.focusUp )
+
+ -- Move focus to the master window
+ , ((modm, xK_m ), windows W.focusMaster )
+
+ -- Swap the focused window and the master window
+ , ((modm, xK_Return), windows W.swapMaster)
+
+ -- Swap the focused window with the next window
+ , ((modm .|. shiftMask, xK_j ), windows W.swapDown )
+
+ -- Swap the focused window with the previous window
+ , ((modm .|. shiftMask, xK_k ), windows W.swapUp )
+
+ -- Shrink the master area
+ , ((modm, xK_h ), sendMessage Shrink)
+
+ -- Expand the master area
+ , ((modm, xK_l ), sendMessage Expand)
+
+ -- Push window back into tiling
+ , ((modm, xK_t ), withFocused $ windows . W.sink)
+
+ -- Next monitor
+ , ((modm , xK_Tab ), nextScreen)
+ , ((modm .|. shiftMask, xK_Tab ), swapNextScreen)
+
+ -- Increment the number of windows in the master area
+ -- , ((modm , xK_comma ), sendMessage (IncMasterN 1))
+ , ((modm , xK_semicolon ), sendMessage (IncMasterN 1))
+ , ((modm , xK_q ), sendMessage (IncMasterN (-1)))
+
+ , ((modm , xK_w ), spawn muteCommand)
+ , ((modm , xK_v ), spawn decreaseVolumeCommand)
+ , ((modm , xK_z ), spawn increaseVolumeCommand)
+
+ , ((modm , xK_s ), (layoutScreens 2 (TwoPane 0.5 0.5)))
+ , ((modm .|. shiftMask, xK_s ), rescreen)
+
+ -- This is redundant because it's added by the statusBar function.
+ , ((modm , xK_b ), sendMessage ToggleStruts)
+
+ -- Quit xmonad
+ -- , ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
+
+ -- Restart xmonad
+ -- , ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
+
+ -- Lock screen
+ , ((modm .|. shiftMask, xK_z), spawn "mate-screensaver-command --lock")
+ ]
+ ++
+
+ --
+ -- 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_1 .. xK_9]
+ -- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
+ -- ++
+
+ [((m .|. modm, k), windows $ f i)
+ | (i, k) <- zip (XMonad.workspaces conf) [
+ xK_apostrophe
+ , xK_comma
+ , xK_period
+ , xK_p
+ , xK_y
+ , xK_f
+ , xK_a
+ , xK_o
+ , xK_e
+ , xK_u
+ , xK_i]
+ , (f, m) <- [(W.view, 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_semicolon, xK_q, xK_r] [0..]
+ -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]