xmonad.hs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import XMonad
  2. import XMonad.Config.Desktop
  3. import XMonad.Hooks.DynamicLog
  4. import XMonad.Hooks.ManageDocks
  5. import XMonad.Util.Run(spawnPipe, hPutStrLn, runProcessWithInput)
  6. import XMonad.Util.EZConfig(additionalKeys)
  7. -- For shutdown commands and keys
  8. import Data.Map(fromList)
  9. import XMonad.Prompt
  10. import XMonad.Prompt.XMonad
  11. import System.Exit(ExitCode(ExitSuccess), exitWith)
  12. -- Brightness and audio keys
  13. import Graphics.X11.ExtraTypes.XF86
  14. main = do
  15. xmproc <- spawnPipe "xmobar"
  16. xmonad $ docks defaultConfig
  17. { manageHook = manageDocks <+> manageHook defaultConfig
  18. , layoutHook = avoidStruts $ layoutHook defaultConfig
  19. , logHook = dynamicLogWithPP xmobarPP
  20. { ppOutput = hPutStrLn xmproc
  21. , ppTitle = xmobarColor "green" "" . shorten 50
  22. }
  23. , startupHook = startup
  24. , terminal = "gnome-terminal"
  25. , modMask = mod4Mask
  26. } `additionalKeys`
  27. [
  28. -- scrot
  29. ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
  30. , ((0, xK_Print), spawn "scrot")
  31. -- rofi
  32. , ((mod4Mask, xK_p ), spawn "rofi -show run")
  33. -- shutdown
  34. , ((mod4Mask .|. shiftMask, xK_q),
  35. xmonadPrompt defaultXPConfig
  36. { promptKeymap = fromList
  37. [ ((0, xK_r), do
  38. spawn "emacsclient -e '(kill emacs)'"
  39. spawn "systemctl reboot")
  40. , ((0 , xK_s), do
  41. spawn "emacsclient -e '(kill emacs)'"
  42. spawn "sudo poweroff")
  43. , ((0, xK_e), do
  44. spawn "emacsclient -e '(kill emacs)'"
  45. io $ exitWith ExitSuccess)
  46. , ((0, xK_l), do
  47. spawn "xscreensaver-command -lock"
  48. quit)
  49. , ((0, xK_z), do
  50. spawn "xscreensaver-command -lock"
  51. spawn "systemctl suspend"
  52. quit)
  53. , ((0, xK_Escape), quit)
  54. ]
  55. , defaultText = "(r) Reboot, (s) Shutdown, (e) Exit, (l) Lock, (z) Sleep"
  56. })
  57. -- pulseaudio
  58. , ((0, xF86XK_AudioRaiseVolume),
  59. spawn "pactl set-sink-volume alsa_output.pci-0000_00_1f.3.analog-stereo +5%")
  60. , ((0, xF86XK_AudioLowerVolume),
  61. spawn "pactl set-sink-volume alsa_output.pci-0000_00_1f.3.analog-stereo -XF86AudioMute exec --no-startup-id pactl set-sink-mute alsa_output.pci-0000_00_1f.3.analog-stereo toggle5%")
  62. , ((0, xF86XK_AudioMute),
  63. spawn "pactl set-sink-mute alsa_output.pci-0000_00_1f.3.analog-stereo toggle")
  64. -- brightness
  65. , ((0, xF86XK_MonBrightnessUp),
  66. let
  67. returnValM = fmap init $ runProcessWithInput "xbacklight" [] ""
  68. in do
  69. currentBrightness <- returnValM
  70. if (read currentBrightness :: Double) == 0 then
  71. spawn "xbacklight -set 2"
  72. else
  73. spawn "xbacklight -inc 5")
  74. , ((0, xF86XK_MonBrightnessDown), spawn "xbacklight -dec 5")
  75. -- Another option for brightness configuration: never let it reach 0.
  76. {-|
  77. let
  78. returnValM = fmap init $ runProcessWithInput "xbacklight" [] ""
  79. in do
  80. currentBrightness <- returnValM
  81. if (read currentBrightness :: Double) - 5 >= 0 then
  82. spawn "xbacklight -dec 5"
  83. else return ())
  84. -}
  85. ]
  86. startup :: X ()
  87. startup = do
  88. spawn "feh --bg-scale ~/Owncloud/Backgrounds/Xmbindings.png"
  89. spawn "owncloud"
  90. spawn "trayer --transparent true --alpha 0 --tint 0x00000000 --SetDockType true --expand true --edge top --align right --width 15 --height 18"
  91. spawn "xfce4-clipman"
  92. spawn "xbacklight -set 12"