about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rwxr-xr-xbuild2
-rwxr-xr-xscripts/mpc-play-pause.sh4
-rwxr-xr-xscripts/nsp-console.sh2
-rwxr-xr-xscripts/screenlock.sh2
-rwxr-xr-xscripts/toggle-compton.sh6
-rwxr-xr-xscripts/toggle-redshift.sh6
-rwxr-xr-xscripts/toggle-touchpad.sh2
-rwxr-xr-xscripts/toggle-trackpoint.sh2
-rwxr-xr-xscripts/xmobar/fcitx.sh19
-rwxr-xr-xscripts/xshot-select-upload.sh2
-rwxr-xr-xscripts/xshot-select.sh2
-rwxr-xr-xscripts/xshot-upload.sh2
-rwxr-xr-xscripts/xshot.sh2
-rw-r--r--src/Main.hs4
-rw-r--r--src/XMonad/Actions/FloatSnapSpaced.hs2
-rw-r--r--src/XMonad/Actions/PerConditionKeys.hs4
-rw-r--r--src/XMonad/Custom/Bindings.hs71
-rw-r--r--src/XMonad/Custom/Event.hs4
-rw-r--r--src/XMonad/Custom/Layout.hs4
-rw-r--r--src/XMonad/Custom/Log.hs7
-rw-r--r--src/XMonad/Custom/Manage.hs4
-rw-r--r--src/XMonad/Custom/Misc.hs6
-rw-r--r--src/XMonad/Custom/Navigation.hs4
-rw-r--r--src/XMonad/Custom/Projects.hs4
-rw-r--r--src/XMonad/Custom/Prompt.hs12
-rw-r--r--src/XMonad/Custom/Scratchpads.hs4
-rw-r--r--src/XMonad/Custom/Startup.hs4
-rw-r--r--src/XMonad/Custom/Theme.hs4
-rw-r--r--src/XMonad/Custom/Workspaces.hs4
-rwxr-xr-xtest/test-xephyr.sh111
-rwxr-xr-xtest/xmonad-ng-xephyr.sh102
m---------vendor/xmobar0
m---------vendor/xmonad0
m---------vendor/xmonad-contrib0
-rw-r--r--xmobarrc/bot.hs2
-rw-r--r--xmobarrc/top.hs2
-rw-r--r--xmonad-ng.cabal9
38 files changed, 220 insertions, 202 deletions
diff --git a/.gitignore b/.gitignore
index 30d2479..2df3963 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 *.o
 .cabal-sandbox/
 .ghc.*
+.hdevtools.*
 .stack-work/
 cabal.project.*
 cabal.sandbox.config
diff --git a/build b/build
index 9b1019a..6764e6a 100755
--- a/build
+++ b/build
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 SRC_DIR="$HOME/.xmonad"
 EXE_NAME="xmonad-ng"
diff --git a/scripts/mpc-play-pause.sh b/scripts/mpc-play-pause.sh
index 3fb4f3b..887ba5b 100755
--- a/scripts/mpc-play-pause.sh
+++ b/scripts/mpc-play-pause.sh
@@ -1,6 +1,6 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
-if mpc | grep -q "playing"
+if mpc | grep -q '\[playing\]'
 then
     mpc --no-status pause
 else
diff --git a/scripts/nsp-console.sh b/scripts/nsp-console.sh
index 5d19f46..8923ea2 100755
--- a/scripts/nsp-console.sh
+++ b/scripts/nsp-console.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 if tmux list-sessions | grep -q "scratchpad"
 then
diff --git a/scripts/screenlock.sh b/scripts/screenlock.sh
index 28dbe0c..fda4556 100755
--- a/scripts/screenlock.sh
+++ b/scripts/screenlock.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 i3lock \
     --no-unlock-indicator \
diff --git a/scripts/toggle-compton.sh b/scripts/toggle-compton.sh
index 91ebc4d..ee3c880 100755
--- a/scripts/toggle-compton.sh
+++ b/scripts/toggle-compton.sh
@@ -1,8 +1,8 @@
 #!/usr/bin/env bash
 
-if [[ $(pgrep 'compton') ]]
+if ! pgrep compton
 then
-    pkill "compton"
-else
     compton -b --config "${XDG_CONFIG_HOME}/compton.conf"
+else
+    pkill compton
 fi
diff --git a/scripts/toggle-redshift.sh b/scripts/toggle-redshift.sh
index 8ba6b60..4dbcc38 100755
--- a/scripts/toggle-redshift.sh
+++ b/scripts/toggle-redshift.sh
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 
-if [[ $(pgrep 'redshift') ]]
+if ! pgrep redshift
 then
-    pkill "redshift"
-else
     redshift -c "${XDG_CONFIG_HOME}/redshift.conf" &
     disown redshift
+else
+    pkill redshift
 fi
diff --git a/scripts/toggle-touchpad.sh b/scripts/toggle-touchpad.sh
index 5a30528..7a82391 100755
--- a/scripts/toggle-touchpad.sh
+++ b/scripts/toggle-touchpad.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 ID=$(xinput list | grep -Eo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}')
 STATE=$(xinput list-props "$ID" | awk '/Device Enabled/ {print $4}')
diff --git a/scripts/toggle-trackpoint.sh b/scripts/toggle-trackpoint.sh
index b0b3501..2d54670 100755
--- a/scripts/toggle-trackpoint.sh
+++ b/scripts/toggle-trackpoint.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 ID=$(xinput list | grep -Eo 'TrackPoint\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}')
 STATE=$(xinput list-props "$ID" | awk '/Device Enabled/ {print $4}')
diff --git a/scripts/xmobar/fcitx.sh b/scripts/xmobar/fcitx.sh
index ddf1826..5538f50 100755
--- a/scripts/xmobar/fcitx.sh
+++ b/scripts/xmobar/fcitx.sh
@@ -1,16 +1,15 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
-status="$(fcitx-remote)"
-set out
+STATUS="$(fcitx-remote)"
 
-if   [[ "$status" = 0 ]]
+if   [ "$STATUS" = 0 ]
 then
-    out="Off"
-elif [[ "$status" = 1 ]]
+    OUT="Off"
+elif [ "$STATUS" = 1 ]
 then
-    out="Disabled"
-else 
-    out="Enabled"
+    OUT="Disabled"
+else
+    OUT="Enabled"
 fi
 
-echo -e "$out"
+echo "$OUT"
diff --git a/scripts/xshot-select-upload.sh b/scripts/xshot-select-upload.sh
index e846800..777eb87 100755
--- a/scripts/xshot-select-upload.sh
+++ b/scripts/xshot-select-upload.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 PIC="${HOME}/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
diff --git a/scripts/xshot-select.sh b/scripts/xshot-select.sh
index 53ad782..fc714c8 100755
--- a/scripts/xshot-select.sh
+++ b/scripts/xshot-select.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 PIC="${HOME}/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
diff --git a/scripts/xshot-upload.sh b/scripts/xshot-upload.sh
index 91c23f4..0dcd1ec 100755
--- a/scripts/xshot-upload.sh
+++ b/scripts/xshot-upload.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 PIC="${HOME}/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
diff --git a/scripts/xshot.sh b/scripts/xshot.sh
index d7984e3..0fbe40e 100755
--- a/scripts/xshot.sh
+++ b/scripts/xshot.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/sh
 
 PIC="${HOME}/pictures/screenshots/$(date +%Y-%m-%d_%H-%M-%S).png"
 
diff --git a/src/Main.hs b/src/Main.hs
index 91a3e9f..716e0a1 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Main
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Actions/FloatSnapSpaced.hs b/src/XMonad/Actions/FloatSnapSpaced.hs
index a579376..fb836e1 100644
--- a/src/XMonad/Actions/FloatSnapSpaced.hs
+++ b/src/XMonad/Actions/FloatSnapSpaced.hs
@@ -4,7 +4,7 @@
 -- Copyright   :  (c) 2009 Anders Engstrom <ankaan@gmail.com>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Actions/PerConditionKeys.hs b/src/XMonad/Actions/PerConditionKeys.hs
index a5a9e04..188fe96 100644
--- a/src/XMonad/Actions/PerConditionKeys.hs
+++ b/src/XMonad/Actions/PerConditionKeys.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Actions.PerConditionKeys
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Bindings.hs b/src/XMonad/Custom/Bindings.hs
index cbe5056..ab653dd 100644
--- a/src/XMonad/Custom/Bindings.hs
+++ b/src/XMonad/Custom/Bindings.hs
@@ -3,10 +3,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Bindings
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
@@ -68,7 +68,7 @@ arrowKeys     = [ "<D>" , "<U>" , "<L>" , "<R>" ]
 directionKeys = [  "j"  ,  "k"  ,  "h"  ,  "l"  ]
 wsKeys        = map show [1..9 :: Int]
 
-zipKeys  :: [a] -> [[a]] -> [t1] -> (t1 -> b) ->             [([a], b)]
+zipKeys  :: [a] -> [[a]] -> [t1] -> (t1       -> b) ->       [([a], b)]
 zipKeys  m ks as f   = zipWith (\k d -> (m ++ k, f d))   ks as
 zipKeys' :: [a] -> [[a]] -> [t1] -> (t1 -> t2 -> b) -> t2 -> [([a], b)]
 zipKeys' m ks as f b = zipWith (\k d -> (m ++ k, f d b)) ks as
@@ -76,7 +76,6 @@ zipKeys' m ks as f b = zipWith (\k d -> (m ++ k, f d b)) ks as
 tryMessageR_ :: (Message a, Message b) => a -> b -> X ()
 tryMessageR_ x y = sequence_ [tryMessageWithNoRefreshToCurrent x y, refresh]
 
-
 toggleCopyToAll :: X ()
 toggleCopyToAll = wsContainingCopies >>= \case [] -> windows copyToAll
                                                _  -> killAllOtherCopies
@@ -95,29 +94,30 @@ toggleFloat w = windows (\s -> if M.member w (S.floating s)
 
 withUpdatePointer :: [(String, X ())] -> [(String, X ())]
 withUpdatePointer = map addAction
-  where
-    addAction :: (String, X ()) -> (String, X ())
-    addAction (key, action) = (key, action >> updatePointer (0.98, 0.01) (0, 0))
+    where
+        addAction :: (String, X ()) -> (String, X ())
+        addAction (key, action) = (key, action >> updatePointer (0.98, 0.01) (0, 0))
 
 keys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
 keys c = mkKeymap c (rawKeys c)
 
 rawKeys :: XConfig Layout -> [(String, X ())]
-rawKeys c = withUpdatePointer $ concatMap ($ c) keymaps where
-    keymaps = [ keysBase
-              , keysSystem
-              , keysMedia
-              , keysWorkspaces
-              , keysSpawnables
-              , keysWindows
-              , keysLayout
-              , keysResize
-              ]
+rawKeys c = withUpdatePointer $ concatMap ($ c) keymaps
+    where
+        keymaps = [ keysBase
+                  , keysSystem
+                  , keysMedia
+                  , keysWorkspaces
+                  , keysSpawnables
+                  , keysWindows
+                  , keysLayout
+                  , keysResize
+                  ]
 
 keysBase :: XConfig Layout -> [(String, X ())]
 keysBase _ =
     [ ("M-S-q" , confirmPrompt hotPromptTheme "Quit XMonad?" $ io exitSuccess)
-    , ("M-q"   , spawn "xmonad --restart")
+    , ("M-q"   , spawn "xmonad --restart") -- TODO Replace with interal calls
     , ("M-C-q" , spawn "xmonad --recompile && xmonad --restart")
     , ("M-x"   , shellPrompt promptTheme)
     , ("M-w"   , windowPrompt promptTheme Goto  allWindows)
@@ -126,24 +126,25 @@ keysBase _ =
 
 keysSystem :: XConfig Layout -> [(String, X ())]
 keysSystem _ =
-    [ ("M-C-g"             , return ())
+    [ ("M-C-g"             , return ()) -- TODO Replace scripts with internal functions
     , ("<XF86ScreenSaver>" , spawn "~/.xmonad/scripts/screenlock.sh")
     , ("M-<Print>"         , spawn "~/.xmonad/scripts/xshot-upload.sh")
     , ("M-S-<Print>"       , spawn "~/.xmonad/scripts/xshot-select-upload.sh")
     , ("M-<Insert>"        , spawn "~/.xmonad/scripts/xcast.sh --webm")
     , ("M-S-<Insert>"      , spawn "~/.xmonad/scripts/xcast.sh --gif")
-    , ("M-C-<Insert>"      , spawn "pkill ffmpeg")
+    , ("M-C-<Insert>"      , spawn "pkill ffmpeg") -- FIXME Possible undefined behaviour
     , ("M-C-c"             , spawn "~/.xmonad/scripts/toggle-compton.sh")
     , ("M-C-r"             , spawn "~/.xmonad/scripts/toggle-redshift.sh")
     , ("M-C-p"             , spawn "~/.xmonad/scripts/toggle-touchpad.sh")
     , ("M-C-t"             , spawn "~/.xmonad/scripts/toggle-trackpoint.sh")
     ]
 
-keysMedia :: XConfig Layout -> [(String, X ())]
+keysMedia :: XConfig Layout -> [(String, X ())] -- TODO Make audio keys compatible with ALSA/PA at the same time
 keysMedia _ =
-    [ ("<XF86AudioMute>"        , spawn "amixer set Master toggle")
-    , ("<XF86AudioLowerVolume>" , spawn "amixer set Master 5-")
-    , ("<XF86AudioRaiseVolume>" , spawn "amixer set Master 5+")
+    [ ("<XF86AudioMicMute>"     , spawn "pactl set-source-mute 1 toggle") -- TODO Add indicator
+    , ("<XF86AudioMute>"        , spawn "pactl set-sink-mute 0 toggle")
+    , ("<XF86AudioLowerVolume>" , spawn "pactl set-sink-mute 0 false && pactl set-sink-volume 0 -10%")
+    , ("<XF86AudioRaiseVolume>" , spawn "pactl set-sink-mute 0 false && pactl set-sink-volume 0 +10%")
     , ("<XF86AudioPlay>"        , spawn "~/.xmonad/scripts/mpc-play-pause.sh")
     , ("<XF86AudioStop>"        , spawn "mpc --no-status stop")
     , ("<XF86AudioPrev>"        , spawn "mpc --no-status prev")
@@ -177,14 +178,14 @@ keysWindows :: XConfig Layout -> [(String, X())]
 keysWindows _ =
     [ ("M-d"   , kill)
     , ("M-S-d" , confirmPrompt hotPromptTheme "Kill all" killAll)
-    , ("M-C-d" , toggleCopyToAll)
-    , ("M-a"   , withFocused hideWindow) -- FIXME This is so broken
-    , ("M-S-a" , popOldestHiddenWindow)
+    , ("M-a"   , toggleCopyToAll)
+    , ("M-e"   , withFocused hideWindow) -- FIXME This is so broken
+    , ("M-S-e" , popOldestHiddenWindow)
     , ("M-p"   , promote)
-    , ("M-s"   , withFocused $ sendMessage . MergeAll)
-    , ("M-S-s" , withFocused $ sendMessage . UnMerge)
+    , ("M-g"   , withFocused $ sendMessage . MergeAll)
+    , ("M-S-g" , withFocused $ sendMessage . UnMerge)
     , ("M-u"   , focusUrgent)
-    , ("M-e"   , windows S.focusMaster)
+    , ("M-s"   , windows S.focusMaster)
     , ("M-'"   , bindOn LD [ ("Tabs" , windows S.focusDown)
                            , (""     , onGroup S.focusDown')
                            ])
@@ -206,8 +207,8 @@ keysLayout c =
     [ ("M-<Tab>"   , sendMessage NextLayout)
     , ("M-C-<Tab>" , toSubl NextLayout)
     , ("M-S-<Tab>" , setLayout $ XMonad.layoutHook c)
-    , ("M-y"       , withFocused toggleFloat)
-    , ("M-S-y"     , sinkAll)
+    , ("M-o"       , withFocused toggleFloat)
+    , ("M-S-o"     , sinkAll)
     , ("M-S-,"     , sendMessage $ IncMasterN (-1))
     , ("M-S-."     , sendMessage $ IncMasterN 1)
     , ("M-r"       , tryMessageR_ Rotate (Toggle REFLECTX))
@@ -215,7 +216,7 @@ keysLayout c =
     , ("M-f"       , sequence_ [ withFocused $ windows . S.sink
                                , sendMessage $ Toggle NBFULL
                                ])
-    , ("M-S-g"     , sendMessage $ Toggle GAPS) -- FIXME Breaks merged tabbed layout
+    , ("M-C-g"     , sendMessage $ Toggle GAPS) -- FIXME Breaks merged tabbed layout
     ]
 
 keysResize :: XConfig Layout -> [(String, X())]
@@ -235,13 +236,13 @@ mouseBindings XConfig {} = M.fromList
     [ ((modMask, button1), \w -> focus w
                                  >> F.mouseWindow F.position w
                                  >> ifClick (snapSpacedMagicMove gapFull
-                                             (Just 50) (Just 50) w)
+                                                (Just 50) (Just 50) w)
                                  >> windows S.shiftMaster
       )
     , ((modMask, button3), \w -> focus w
                                  >> F.mouseWindow F.linear w
                                  >> ifClick (snapMagicResize [L, R, U, D]
-                                             (Just 50) (Just 50) w)
+                                                (Just 50) (Just 50) w)
                                  >> windows S.shiftMaster
       )
     ]
diff --git a/src/XMonad/Custom/Event.hs b/src/XMonad/Custom/Event.hs
index c89714c..fa82bdf 100644
--- a/src/XMonad/Custom/Event.hs
+++ b/src/XMonad/Custom/Event.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Event
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Layout.hs b/src/XMonad/Custom/Layout.hs
index 652aed8..5da2cf6 100644
--- a/src/XMonad/Custom/Layout.hs
+++ b/src/XMonad/Custom/Layout.hs
@@ -6,10 +6,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Layout
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Log.hs b/src/XMonad/Custom/Log.hs
index dfa60c1..ed4edc4 100644
--- a/src/XMonad/Custom/Log.hs
+++ b/src/XMonad/Custom/Log.hs
@@ -3,16 +3,13 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Log
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi <azahi@teknik.io>
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
--- Provides configuration for logging to be used
--- with various status display applications
---
 -----------------------------------------------------------------------------
 
 module XMonad.Custom.Log
diff --git a/src/XMonad/Custom/Manage.hs b/src/XMonad/Custom/Manage.hs
index e737108..bbae103 100644
--- a/src/XMonad/Custom/Manage.hs
+++ b/src/XMonad/Custom/Manage.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Manage
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi <azahi@teknik.io>
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Misc.hs b/src/XMonad/Custom/Misc.hs
index 5d22063..d4b162e 100644
--- a/src/XMonad/Custom/Misc.hs
+++ b/src/XMonad/Custom/Misc.hs
@@ -3,10 +3,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Misc
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
@@ -29,7 +29,7 @@ data Applications = Applications
 applications :: Applications
 applications = Applications
     { browser = "qutebrowser"
-    , mixer   = "alsamixer"
+    , mixer   = "pulsemixer"
     , notify  = "notify-send"
     , player  = "ncmpcpp"
     , term    = "urxvtc"
diff --git a/src/XMonad/Custom/Navigation.hs b/src/XMonad/Custom/Navigation.hs
index a1239d6..4057e8b 100644
--- a/src/XMonad/Custom/Navigation.hs
+++ b/src/XMonad/Custom/Navigation.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Navigation
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Projects.hs b/src/XMonad/Custom/Projects.hs
index d45d1c5..5382cb2 100644
--- a/src/XMonad/Custom/Projects.hs
+++ b/src/XMonad/Custom/Projects.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Projects
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Prompt.hs b/src/XMonad/Custom/Prompt.hs
index 15aab2c..9e046c6 100644
--- a/src/XMonad/Custom/Prompt.hs
+++ b/src/XMonad/Custom/Prompt.hs
@@ -1,3 +1,15 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  XMonad.Custom.Prompt
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
+-- License     :  BSD3-style (see LICENSE)
+--
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
+-- Stability   :  unstable
+-- Portability :  unportable
+--
+-----------------------------------------------------------------------------
+
 module XMonad.Custom.Prompt
     ( listCompFunc
     , aListCompFunc
diff --git a/src/XMonad/Custom/Scratchpads.hs b/src/XMonad/Custom/Scratchpads.hs
index 9424f7b..4ccce47 100644
--- a/src/XMonad/Custom/Scratchpads.hs
+++ b/src/XMonad/Custom/Scratchpads.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Scratchpads
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Startup.hs b/src/XMonad/Custom/Startup.hs
index 6050dff..eef4c4c 100644
--- a/src/XMonad/Custom/Startup.hs
+++ b/src/XMonad/Custom/Startup.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Startup
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Theme.hs b/src/XMonad/Custom/Theme.hs
index 2860b91..3855fd9 100644
--- a/src/XMonad/Custom/Theme.hs
+++ b/src/XMonad/Custom/Theme.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Theme
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/src/XMonad/Custom/Workspaces.hs b/src/XMonad/Custom/Workspaces.hs
index 555bf20..5832c6e 100644
--- a/src/XMonad/Custom/Workspaces.hs
+++ b/src/XMonad/Custom/Workspaces.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  XMonad.Custom.Workspaces
--- Copyright   :  (c) azahi 2018
+-- Copyright   :  (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
 -- License     :  BSD3-style (see LICENSE)
 --
--- Maintainer  :  azahi@teknik.io
+-- Maintainer  :  Azat Bahawi <azahi@teknik.io>
 -- Stability   :  unstable
 -- Portability :  unportable
 --
diff --git a/test/test-xephyr.sh b/test/test-xephyr.sh
new file mode 100755
index 0000000..e28928a
--- /dev/null
+++ b/test/test-xephyr.sh
@@ -0,0 +1,111 @@
+#!/bin/sh -eu
+
+usage () {
+    cat << EOF
+Usage: test-xephyr.sh [options]
+
+    -d NxN  Set the screen size to NxN
+    -h      This message
+    -n NUM  Set the internal DISPLAY to NUM
+    -s NUM  Set the number of screens to NUM
+EOF
+}
+
+ARCH=$(uname -m)
+OS=$(uname -s | tr '[:upper:]' '[:lower:]')
+SCREENS=1
+SCREEN_SIZE="800x600"
+DISPLAY_NUMBER=9
+
+while getopts "d:hs:n:" OPT
+do
+    case "${OPT}" in
+        d)
+            SCREEN_SIZE=$OPTARG
+        ;;
+
+        h)
+            usage && exit
+        ;;
+
+        n)
+            DISPLAY_NUMBER=$OPTARG
+        ;;
+
+        s)
+            SCREENS=$OPTARG
+        ;;
+
+        *)
+            usage && exit 1
+        ;;
+    esac
+done
+
+shift $((OPTIND-1))
+
+if [ ! "$(command -v Xephyr)" ]
+then
+    echo "test-xephyr.sh: Xephyr executable is missing in PATH"
+    exit 1
+fi
+
+if [ -d .stack-work ]
+then
+    echo "test-xephyt.sh: Stack build detected"
+    BIN_PATH=$(stack path --dist-dir)/build/xmonad-ng
+elif [ -d dist ]; then
+    echo "test-xephyr.sh: Cabal build detected"
+    BIN_PATH=$(find dist/ -type f -executable -name xmonad-ng -printf '%h')
+else
+    echo "test-xephyr.sh: You need to build xmonad-ng first, see README for instructions"
+    exit 1
+fi
+
+RAW_BIN="$BIN_PATH/xmonad-ng"
+ARCH_BIN="$BIN_PATH/xmonad-ng-$ARCH-$OS"
+
+cp -p "$RAW_BIN" "$ARCH_BIN"
+
+XMONAD_CONFIG_DIR="$(pwd)/state/config"
+XMONAD_CACHE_DIR="$(pwd)/state/cache"
+XMONAD_DATA_DIR="$(pwd)/state/data"
+export XMONAD_CONFIG_DIR XMONAD_CACHE_DIR XMONAD_DATA_DIR
+
+mkdir -p "$XMONAD_CONFIG_DIR" "$XMONAD_CACHE_DIR" "$XMONAD_DATA_DIR"
+echo "test-xephyr.sh: State files will be stored in $(pwd)/state"
+
+SCREEN_COUNTER=0
+SCREEN_OPTS=""
+X_OFFSET_CURRENT="0"
+X_OFFSET_ADD=$(echo "$SCREEN_SIZE" | cut -dx -f1)
+
+while expr "$SCREEN_COUNTER" "<" "$SCREENS"
+do
+    SCREEN_OPTS="$SCREEN_OPTS -origin ${X_OFFSET_CURRENT},0 -screen ${SCREEN_SIZE}+${X_OFFSET_CURRENT}"
+    SCREEN_COUNTER=$(("$SCREEN_COUNTER" + 1))
+    X_OFFSET_CURRENT=$(("$X_OFFSET_CURRENT" + "$X_OFFSET_ADD"))
+done
+
+(
+    echo "test-xephyr.sh: Launching Xephyr process"
+    # shellcheck disable=SC2086
+    Xephyr $SCREEN_OPTS \
+        +extension RANDR \
+        +xinerama \
+        -ac \
+        -br \
+        -reset \
+        -softCursor \
+        -terminate \
+        -verbosity 10 \
+        ":$DISPLAY_NUMBER" &
+
+    export DISPLAY=":$DISPLAY_NUMBER"
+    echo "test-xephyr.sh: Waiting for windwos to appear..." && sleep 3
+
+    xterm -hold xrandr &
+    xterm &
+
+    $ARCH_BIN
+)
diff --git a/test/xmonad-ng-xephyr.sh b/test/xmonad-ng-xephyr.sh
deleted file mode 100755
index 37e0bab..0000000
--- a/test/xmonad-ng-xephyr.sh
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/bin/sh -eu
-
-usage () {
-    cat << EOF
-Usage: xmonad-ng-xephyr.sh [options]
-
-  -d NxN  Set the screen size to NxN
-  -h      This message
-  -n NUM  Set the internal DISPLAY to NUM
-  -s NUM  Set the number of screens to NUM
-EOF
-}
-
-ARCH=$(uname -m)
-OS=$(uname -s | tr '[:upper:]' '[:lower:]')
-SCREENS=1
-SCREEN_SIZE="800x600"
-DISPLAY_NUMBER=5
-
-while getopts "d:hs:n:" o
-do
-    case "${o}" in
-        d)
-            SCREEN_SIZE=$OPTARG
-        ;;
-
-        h) usage
-            exit
-        ;;
-
-        n)
-            DISPLAY_NUMBER=$OPTARG
-        ;;
-
-        s)
-            SCREENS=$OPTARG
-        ;;
-
-        *)
-            echo
-            usage
-            exit 1
-        ;;
-    esac
-done
-
-shift $((OPTIND-1))
-
-################################################################################
-if [ -d .stack-work ]; then
-  echo "stack build detected"
-  options=""
-  [ "${NIX_PATH:-NO}" = "NO" ] || options="--nix"
-  BIN_PATH=$(stack path $options --dist-dir)/build/xmonad-ng
-elif [ -d dist ]; then
-  echo "cabal build detected"
-  BIN_PATH=$(find dist/ -type f -executable -name xmonad-ng -printf '%h')
-else
-  echo "you need to build xmonad-ng first, see README for instructions"
-  exit 1
-fi
-
-RAW_BIN=$BIN_PATH/xmonad-ng
-ARCH_BIN=$BIN_PATH/xmonad-ng-$ARCH-$OS
-
-################################################################################
-cp -p "$RAW_BIN" "$ARCH_BIN"
-
-################################################################################
-XMONAD_CONFIG_DIR=$(pwd)/state/config
-XMONAD_CACHE_DIR=$(pwd)/state/cache
-XMONAD_DATA_DIR=$(pwd)/state/data
-export XMONAD_CONFIG_DIR XMONAD_CACHE_DIR XMONAD_DATA_DIR
-
-mkdir -p "$XMONAD_CONFIG_DIR" "$XMONAD_CACHE_DIR" "$XMONAD_DATA_DIR"
-echo "xmonad will store state files in $(pwd)/state"
-
-################################################################################
-SCREEN_COUNTER=0
-SCREEN_OPTS=""
-X_OFFSET_CURRENT="0"
-X_OFFSET_ADD=$(echo "$SCREEN_SIZE" | cut -dx -f1)
-
-while expr "$SCREEN_COUNTER" "<" "$SCREENS"; do
-  SCREEN_OPTS="$SCREEN_OPTS -origin ${X_OFFSET_CURRENT},0 -screen ${SCREEN_SIZE}+${X_OFFSET_CURRENT}"
-  SCREEN_COUNTER=$(("$SCREEN_COUNTER" + 1))
-  X_OFFSET_CURRENT=$(("$X_OFFSET_CURRENT" + "$X_OFFSET_ADD"))
-done
-
-(
-  # shellcheck disable=SC2086
-  Xephyr $SCREEN_OPTS +xinerama +extension RANDR \
-         -ac -br -reset -terminate -verbosity 10 \
-         -softCursor ":$DISPLAY_NUMBER" &
-
-  export DISPLAY=":$DISPLAY_NUMBER"
-  echo "Waiting for windows to appear..." && sleep 2
-
-  xterm -hold xrandr &
-  xterm &
-  $ARCH_BIN
-)
diff --git a/vendor/xmobar b/vendor/xmobar
-Subproject c54113906bf455c9c34e9cc5d80cf33dc9a6123
+Subproject 3105055dd2ff93b46e7e38a4bb697b284be338f
diff --git a/vendor/xmonad b/vendor/xmonad
-Subproject bb13853929f8f6fc59b526bcc10631e1bac309a
+Subproject d6f88918de019ba8d976c2b562ebcf5748e67d4
diff --git a/vendor/xmonad-contrib b/vendor/xmonad-contrib
-Subproject dd89eae446a0901d5913276a0de59a6f8e3736d
+Subproject 728f9bc270f6087f1ca64839911c5b0e0a1da00
diff --git a/xmobarrc/bot.hs b/xmobarrc/bot.hs
index 0f92dce..da5ec39 100644
--- a/xmobarrc/bot.hs
+++ b/xmobarrc/bot.hs
@@ -62,4 +62,4 @@ Config { font = "xft:tewi:style=Regular:pixelsize=11,Biwidth:pixelsize=12"
                     \ "
        }
 
--- vim:filetype=haskell:expandtab:tabstop=4:shiftwidth=4
+-- vim:filetype=haskell
diff --git a/xmobarrc/top.hs b/xmobarrc/top.hs
index 83fa5d2..94b40bd 100644
--- a/xmobarrc/top.hs
+++ b/xmobarrc/top.hs
@@ -38,4 +38,4 @@ Config { font = "xft:tewi:style=Regular:pixelsize=11,Biwidth:pixelsize=12"
                     \ "
        }
 
--- vim:filetype=haskell:expandtab:tabstop=4:shiftwidth=4
+-- vim: filetype=haskell
diff --git a/xmonad-ng.cabal b/xmonad-ng.cabal
index 3c011ee..cb104c6 100644
--- a/xmonad-ng.cabal
+++ b/xmonad-ng.cabal
@@ -1,13 +1,12 @@
 name:          xmonad-ng
-version:       0.15.3
+version:       0.15.4
 synopsis:      XMonad configuration
 description:   XMonad configuration hacked together using stolen code and bad Haskell
-               knowledge
 license:       BSD3
 license-file:  LICENSE
-copyright:     Copyright (c) 2018 azahi
-author:        azahi@teknik.io
-maintainer:    azahi@teknik.io
+copyright:     Copyright (c) 2018-2019 Azat Bahawi <azahi@teknik.io>
+author:        Azat Bahawi <azahi@teknik.io>
+maintainer:    Azat Bahawi <azahi@teknik.io>
 stability:     experimental
 category:      System
 homepage:      https://git.systemd.club/xmonad-config

Consider giving Nix/NixOS a try! <3