aboutsummaryrefslogtreecommitdiff
path: root/src/Rahm
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rahm')
-rw-r--r--src/Rahm/Desktop/Common.hs62
-rw-r--r--src/Rahm/Desktop/DMenu.hs10
-rw-r--r--src/Rahm/Desktop/Desktop.hs19
-rw-r--r--src/Rahm/Desktop/Hash.hs6
-rw-r--r--src/Rahm/Desktop/History.hs24
-rw-r--r--src/Rahm/Desktop/Hooks/WindowChange.hs17
-rw-r--r--src/Rahm/Desktop/Keys/Dsl.hs34
-rw-r--r--src/Rahm/Desktop/Keys/Wml.hs125
-rw-r--r--src/Rahm/Desktop/Layout/ConsistentMosaic.hs22
-rw-r--r--src/Rahm/Desktop/Layout/Draw.hs21
-rw-r--r--src/Rahm/Desktop/Layout/Flip.hs11
-rw-r--r--src/Rahm/Desktop/Layout/Hole.hs9
-rw-r--r--src/Rahm/Desktop/Layout/List.hs13
-rw-r--r--src/Rahm/Desktop/Layout/Pop.hs16
-rw-r--r--src/Rahm/Desktop/Layout/Redescribe.hs7
-rw-r--r--src/Rahm/Desktop/Layout/Rotate.hs12
-rw-r--r--src/Rahm/Desktop/Logger.hs16
-rw-r--r--src/Rahm/Desktop/Marking.hs65
-rw-r--r--src/Rahm/Desktop/PassMenu.hs6
-rw-r--r--src/Rahm/Desktop/PromptConfig.hs3
-rw-r--r--src/Rahm/Desktop/RebindKeys.hs47
-rw-r--r--src/Rahm/Desktop/StackSet.hs56
-rw-r--r--src/Rahm/Desktop/Submap.hs49
-rw-r--r--src/Rahm/Desktop/SwapMaster.hs19
-rw-r--r--src/Rahm/Desktop/Theater.hs41
-rw-r--r--src/Rahm/Desktop/Workspaces.hs53
-rw-r--r--src/Rahm/Desktop/XMobarLog.hs28
27 files changed, 649 insertions, 142 deletions
diff --git a/src/Rahm/Desktop/Common.hs b/src/Rahm/Desktop/Common.hs
index e012a8f..d02fb99 100644
--- a/src/Rahm/Desktop/Common.hs
+++ b/src/Rahm/Desktop/Common.hs
@@ -1,24 +1,52 @@
module Rahm.Desktop.Common where
import Control.Monad (forM_, void, when)
-import Control.Monad.Trans.Maybe
-import Data.Char
-import Data.List hiding ((!!))
-import Data.List.Safe ((!!))
-import qualified Data.Map as Map
-import Data.Maybe
-import Data.Ord (comparing)
-import Rahm.Desktop.DMenu
-import Rahm.Desktop.PromptConfig
+import Control.Monad.Trans.Maybe (MaybeT (..))
+import Data.Char (toLower)
+import Data.List (concatMap, head, isInfixOf, map, (++))
+import Data.List.Safe ()
+import qualified Data.Map as Map (fromListWith)
+import Data.Maybe (Maybe (..))
+import Data.Ord ()
+import Rahm.Desktop.DMenu (runDMenuPromptWithMap)
+import Rahm.Desktop.PromptConfig ()
import qualified Rahm.Desktop.StackSet as S
-import Text.Printf
-import XMonad hiding (Screen, workspaces)
-import XMonad.Prompt
-import XMonad.Prompt.Input
-import XMonad.Prompt.Shell
-import XMonad.Util.Run
-import XMonad.Util.XUtils
-import Prelude hiding ((!!))
+ ( Screen (Screen, workspace),
+ StackSet (StackSet, current),
+ Workspace (Workspace, stack, tag),
+ allWindows,
+ focusWindow,
+ greedyView,
+ integrate',
+ peek,
+ shiftWin,
+ workspaces,
+ )
+import Text.Printf (printf)
+import XMonad
+ ( Window,
+ WorkspaceId,
+ X,
+ XConf (config, display),
+ XConfig (focusedBorderColor, normalBorderColor),
+ appName,
+ asks,
+ focus,
+ io,
+ refresh,
+ runQuery,
+ setWindowBorderWidth,
+ setWindowBorderWithFallback,
+ title,
+ windows,
+ withFocused,
+ withWindowSet,
+ )
+import XMonad.Prompt (XPrompt (commandToComplete, showXPrompt))
+import XMonad.Prompt.Input ()
+import XMonad.Prompt.Shell ()
+import XMonad.Util.Run ()
+import XMonad.Util.XUtils (pixelToString, stringToPixel)
-- A location is a workspace and maybe a window with that workspace.
data Location = Location
diff --git a/src/Rahm/Desktop/DMenu.hs b/src/Rahm/Desktop/DMenu.hs
index eeb0d5f..d1b3e59 100644
--- a/src/Rahm/Desktop/DMenu.hs
+++ b/src/Rahm/Desktop/DMenu.hs
@@ -1,13 +1,13 @@
module Rahm.Desktop.DMenu where
-import Control.Monad
+import Control.Monad (void)
import Data.List (intercalate)
import Data.Map (Map)
-import qualified Data.Map as Map
+import qualified Data.Map as Map ()
import Text.Printf (printf)
-import XMonad
-import XMonad.Util.Dmenu
-import XMonad.Util.Run
+import XMonad (X)
+import XMonad.Util.Dmenu (menuMapArgs)
+import XMonad.Util.Run (runProcessWithInput, safeSpawn)
data Colors
= Colors
diff --git a/src/Rahm/Desktop/Desktop.hs b/src/Rahm/Desktop/Desktop.hs
index 5466fd1..04895c7 100644
--- a/src/Rahm/Desktop/Desktop.hs
+++ b/src/Rahm/Desktop/Desktop.hs
@@ -6,14 +6,27 @@ module Rahm.Desktop.Desktop where
-- import XMonad.Operations
import Control.Monad (forM_)
-import Data.Default
+import Data.Default (Default (..))
import Data.Map (Map)
-import qualified Data.Map as Map
+import qualified Data.Map as Map (fromList, insert, lookup)
import Data.Maybe (fromMaybe)
import XMonad (X (..))
import qualified XMonad as X
+ ( ExtensionClass (..),
+ ScreenId,
+ StateExtension (PersistentExtension),
+ WorkspaceId,
+ windows,
+ withWindowSet,
+ )
import qualified XMonad.StackSet as W
-import qualified XMonad.Util.ExtensibleState as XS
+ ( Screen (Screen, screen, workspace),
+ StackSet (StackSet),
+ Workspace (tag),
+ screens,
+ workspaces,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, modify)
newtype Desktop si wi = Desktop (Map si wi)
deriving (Read, Show)
diff --git a/src/Rahm/Desktop/Hash.hs b/src/Rahm/Desktop/Hash.hs
index abce660..ec7a56d 100644
--- a/src/Rahm/Desktop/Hash.hs
+++ b/src/Rahm/Desktop/Hash.hs
@@ -2,9 +2,9 @@
module Rahm.Desktop.Hash where
-import qualified Crypto.Hash.SHA1 as SHA1
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Char8 as BC
+import qualified Crypto.Hash.SHA1 as SHA1 (hash)
+import qualified Data.ByteString as BS (unpack)
+import qualified Data.ByteString.Char8 as BC (pack)
import Numeric (showHex)
quickHash :: String -> String
diff --git a/src/Rahm/Desktop/History.hs b/src/Rahm/Desktop/History.hs
index c5bc72d..07e03e5 100644
--- a/src/Rahm/Desktop/History.hs
+++ b/src/Rahm/Desktop/History.hs
@@ -1,18 +1,22 @@
module Rahm.Desktop.History where
-import Data.Default
+import Data.Default (Default (..))
import Data.Foldable (toList)
-import Data.IntMap (IntMap)
-import qualified Data.IntMap as IntMap
+import Data.IntMap ()
+import qualified Data.IntMap as IntMap ()
import Data.Sequence (Seq (..))
-import qualified Data.Sequence as Seq
-import Rahm.Desktop.Common
-import Rahm.Desktop.Hooks.WindowChange
-import Rahm.Desktop.Logger
-import qualified Rahm.Desktop.StackSet as W
-import Text.Printf
-import XMonad
+import qualified Data.Sequence as Seq (length, (!?))
+import Rahm.Desktop.Common (Location (Location), focusLocation)
+import Rahm.Desktop.Hooks.WindowChange ()
+import Rahm.Desktop.Logger ()
+import qualified Rahm.Desktop.StackSet as W ()
+import Text.Printf (printf)
+import XMonad (ExtensionClass (initialValue), X)
import qualified XMonad.Util.ExtensibleState as XS
+ ( get,
+ modify,
+ put,
+ )
data BoundedSeqZipper a = BoundedSeqZipper Int (Seq a) (Seq a)
deriving (Eq, Show, Ord, Read)
diff --git a/src/Rahm/Desktop/Hooks/WindowChange.hs b/src/Rahm/Desktop/Hooks/WindowChange.hs
index 092fbf4..a7d403e 100644
--- a/src/Rahm/Desktop/Hooks/WindowChange.hs
+++ b/src/Rahm/Desktop/Hooks/WindowChange.hs
@@ -1,11 +1,20 @@
module Rahm.Desktop.Hooks.WindowChange where
-import Control.Monad
-import Data.Default
+import Control.Monad (when)
+import Data.Default (Default (..))
import Rahm.Desktop.Common
-import qualified Rahm.Desktop.StackSet as W
+ ( Location (Location),
+ getCurrentWorkspace,
+ )
+import qualified Rahm.Desktop.StackSet as W (peek)
import XMonad
-import qualified XMonad.Util.ExtensibleState as XS
+ ( ExtensionClass (..),
+ StateExtension (PersistentExtension),
+ X,
+ XConfig (logHook),
+ withWindowSet,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, put)
newtype LastLocation = LastLocation (Maybe Location)
deriving (Read, Show)
diff --git a/src/Rahm/Desktop/Keys/Dsl.hs b/src/Rahm/Desktop/Keys/Dsl.hs
index 03ace1b..7f43f7a 100644
--- a/src/Rahm/Desktop/Keys/Dsl.hs
+++ b/src/Rahm/Desktop/Keys/Dsl.hs
@@ -90,15 +90,41 @@ module Rahm.Desktop.Keys.Dsl
where
import Control.Arrow (first, second)
-import Control.Monad (void)
-import Control.Monad.State (State (..), execState, get, modify')
+import Control.Monad ()
+import Control.Monad.State (State, execState, modify')
import Control.Monad.Writer
+ ( MonadWriter (tell),
+ execWriter,
+ forM_,
+ when,
+ )
import Data.Bits ((.&.))
-import Data.List hiding (group)
+import Data.List (intercalate, sortOn)
import Data.Map (Map)
import qualified Data.Map as Map
-import Text.Printf
+ ( empty,
+ fromList,
+ fromListWith,
+ toList,
+ )
+import Text.Printf (printf)
import XMonad
+ ( Button,
+ ButtonMask,
+ KeyMask,
+ KeySym,
+ MonadState (get),
+ Window,
+ X,
+ XConfig (modMask),
+ controlMask,
+ keysymToString,
+ mod1Mask,
+ mod3Mask,
+ mod4Mask,
+ shiftMask,
+ (.|.),
+ )
data Documented t = Documented String t
diff --git a/src/Rahm/Desktop/Keys/Wml.hs b/src/Rahm/Desktop/Keys/Wml.hs
index 623e59a..07a4ae1 100644
--- a/src/Rahm/Desktop/Keys/Wml.hs
+++ b/src/Rahm/Desktop/Keys/Wml.hs
@@ -14,35 +14,138 @@
-- \%@s // All windows except those on workspace 's'
module Rahm.Desktop.Keys.Wml where
-import Control.Monad (forM_, join, unless, when)
-import Control.Monad.Trans.Class
-import Control.Monad.Trans.Maybe
+import Control.Monad (forM_, join, when)
+import Control.Monad.Trans.Class (MonadTrans (lift))
+import Control.Monad.Trans.Maybe (MaybeT (..), mapMaybeT)
import Control.Monad.Trans.State as S
+ ( StateT (StateT),
+ evalStateT,
+ get,
+ put,
+ )
import Data.Char (isAlpha, isAlphaNum, isDigit, ord)
import Data.List (intercalate, sortOn)
import Data.List.Safe (head, last)
import Data.Map (Map)
import qualified Data.Map as Map
+ ( empty,
+ insert,
+ keys,
+ lookup,
+ member,
+ )
import Data.Maybe (catMaybes, fromMaybe)
import Data.Ord (Down (..))
import Data.Typeable (cast)
import Rahm.Desktop.Common
+ ( Location (..),
+ askWindowId,
+ getCurrentLocation,
+ getCurrentWorkspace,
+ gotoWorkspace,
+ moveLocationToWorkspace,
+ windowsInWorkspace,
+ )
import Rahm.Desktop.History
-import Rahm.Desktop.Keys.Dsl
-import Rahm.Desktop.Logger
+ ( getMostRecentLocationInHistory,
+ lastLocation,
+ nextLocation,
+ pastHistory,
+ )
+import Rahm.Desktop.Keys.Dsl ()
+import Rahm.Desktop.Logger (LogLevel (Info, Trace), logs)
import Rahm.Desktop.Marking
+ ( farLeftWindow,
+ farRightWindow,
+ getAlternateWindows,
+ getAlternateWorkspace,
+ getMarkedLocations,
+ windowLocation,
+ )
import qualified Rahm.Desktop.StackSet as W
-import Rahm.Desktop.Submap
+ ( RationalRect (RationalRect),
+ Screen (workspace),
+ StackSet (current, floating),
+ Workspace (stack, tag),
+ allWindows,
+ findWindow,
+ float,
+ focusWindow,
+ getLocationWorkspace,
+ greedyView,
+ integrate',
+ screens,
+ sink,
+ )
+import Rahm.Desktop.Submap (mapNextStringWithKeysym)
import Rahm.Desktop.Workspaces
+ ( accompaningWorkspace,
+ adjacentWorkspace,
+ adjacentWorkspaceNotVisible,
+ getHorizontallyOrderedScreens,
+ next,
+ prev,
+ workspaceWithWindow,
+ )
import Rahm.Desktop.XMobarLog.PendingBuffer
+ ( addStringToPendingBuffer,
+ setPendingBuffer,
+ )
import System.Exit (ExitCode (..), exitWith)
-import Text.Printf
+import Text.Printf (printf)
import XMonad
-import XMonad.Actions.CopyWindow as CopyWindow
+ ( Default (def),
+ ExtensionClass (..),
+ KeyMask,
+ KeySym,
+ StateExtension (PersistentExtension),
+ Typeable,
+ Window,
+ WorkspaceId,
+ X,
+ io,
+ killWindow,
+ windows,
+ withWindowSet,
+ xK_Escape,
+ xK_Return,
+ )
+import XMonad.Actions.CopyWindow as CopyWindow ()
import XMonad.Prompt.ConfirmPrompt (confirmPrompt)
-import qualified XMonad.Util.ExtensibleState as XS
-import XMonad.Util.Run (safeSpawn)
-import Prelude hiding (head, last)
+import qualified XMonad.Util.ExtensibleState as XS (get, modify)
+import XMonad.Util.Run ()
+import Prelude
+ ( Applicative,
+ Eq ((==)),
+ Foldable (elem, null),
+ Fractional ((/)),
+ Functor (fmap),
+ Maybe (..),
+ Monad (return),
+ MonadFail (fail),
+ Num ((-)),
+ Read,
+ Show (show),
+ String,
+ Traversable (mapM),
+ break,
+ concatMap,
+ filter,
+ flip,
+ id,
+ map,
+ mapM_,
+ not,
+ reverse,
+ snd,
+ tail,
+ ($),
+ (++),
+ (.),
+ (<$>),
+ (=<<),
+ (||),
+ )
type KeyString = [(KeyMask, KeySym, String)]
diff --git a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs
index 0d95c8f..026a7dd 100644
--- a/src/Rahm/Desktop/Layout/ConsistentMosaic.hs
+++ b/src/Rahm/Desktop/Layout/ConsistentMosaic.hs
@@ -4,13 +4,29 @@
-- still work as expected.
module Rahm.Desktop.Layout.ConsistentMosaic where
-import Data.Map (Map)
-import qualified Data.Map as Map
+import Data.Map ()
+import qualified Data.Map as Map (fromList, lookup)
import Data.Maybe (mapMaybe)
-import Rahm.Desktop.Logger
+import Rahm.Desktop.Logger ()
import qualified Rahm.Desktop.StackSet as W
+ ( Screen (..),
+ Stack (..),
+ StackSet (..),
+ Workspace (..),
+ integrate,
+ )
import XMonad
+ ( LayoutClass (description, handleMessage, runLayout),
+ MonadState (..),
+ Window,
+ X,
+ XState (..),
+ )
import XMonad.Layout.MosaicAlt
+ ( HandleWindowAlt,
+ expandWindowAlt,
+ shrinkWindowAlt,
+ )
newtype MosaicWrap l a = MosaicWrap (l a) deriving (Read, Show)
diff --git a/src/Rahm/Desktop/Layout/Draw.hs b/src/Rahm/Desktop/Layout/Draw.hs
index 49921b0..95a34eb 100644
--- a/src/Rahm/Desktop/Layout/Draw.hs
+++ b/src/Rahm/Desktop/Layout/Draw.hs
@@ -6,15 +6,20 @@
module Rahm.Desktop.Layout.Draw (drawLayout) where
import Control.Arrow (second)
-import Control.Concurrent (threadDelay)
-import Control.Exception (handle)
-import Control.Monad
+import Control.Concurrent ()
+import Control.Exception ()
+import Control.Monad (foldM, forM_, unless)
import Control.Monad.Writer (execWriter, tell)
import Data.Foldable (find)
import Data.Maybe (fromMaybe)
import Rahm.Desktop.Hash (quickHash)
import Rahm.Desktop.Layout.Pop (setPop)
import qualified Rahm.Desktop.StackSet as S
+ ( Screen (..),
+ StackSet (..),
+ Workspace (..),
+ differentiate,
+ )
import System.Directory (createDirectoryIfMissing, doesFileExist)
import System.FilePath ((</>))
import Text.Printf (printf)
@@ -28,7 +33,15 @@ import XMonad
X,
)
import qualified XMonad as X
-import XMonad.Layout.MosaicAlt (expandWindowAlt, shrinkWindowAlt)
+ ( Directories' (cfgDir),
+ LayoutClass (description, handleMessage, runLayout),
+ MonadIO (liftIO),
+ XConf (directories),
+ XState (windowset),
+ asks,
+ gets,
+ )
+import XMonad.Layout.MosaicAlt (expandWindowAlt)
import XMonad.Layout.Spacing (Border (..), SpacingModifier (..))
-- Draws and returns an XPM for the current layout.
diff --git a/src/Rahm/Desktop/Layout/Flip.hs b/src/Rahm/Desktop/Layout/Flip.hs
index 5942a4a..8ebe9ac 100644
--- a/src/Rahm/Desktop/Layout/Flip.hs
+++ b/src/Rahm/Desktop/Layout/Flip.hs
@@ -11,10 +11,19 @@ module Rahm.Desktop.Layout.Flip
where
import Control.Arrow (second)
-import Data.Default (Default (..))
+import Data.Default ()
import Data.List (intercalate)
import XMonad
+ ( Default (..),
+ LayoutClass (description),
+ Message,
+ Rectangle (Rectangle),
+ fromMessage,
+ )
import XMonad.Layout.LayoutModifier
+ ( LayoutModifier (modifyDescription, pureMess, pureModifier),
+ ModifiedLayout (..),
+ )
-- A flipped layout is either flipped horizontally or vertically.
data Flip a = Flip
diff --git a/src/Rahm/Desktop/Layout/Hole.hs b/src/Rahm/Desktop/Layout/Hole.hs
index 42bac48..7f19e4c 100644
--- a/src/Rahm/Desktop/Layout/Hole.hs
+++ b/src/Rahm/Desktop/Layout/Hole.hs
@@ -4,9 +4,16 @@
-- Delegates to a lower layout, but leaves a hole where the next window will go.
module Rahm.Desktop.Layout.Hole (hole, toggleHole) where
-import Data.Maybe (mapMaybe)
+import Data.Maybe ()
import qualified Rahm.Desktop.StackSet as W
+ ( Stack (Stack),
+ Workspace (Workspace),
+ )
import XMonad
+ ( LayoutClass (handleMessage, runLayout),
+ Message,
+ fromMessage,
+ )
data Hole (l :: * -> *) (a :: *) = Hole Bool (l a)
diff --git a/src/Rahm/Desktop/Layout/List.hs b/src/Rahm/Desktop/Layout/List.hs
index 787697e..48c2ab5 100644
--- a/src/Rahm/Desktop/Layout/List.hs
+++ b/src/Rahm/Desktop/Layout/List.hs
@@ -28,11 +28,18 @@ import Control.Applicative ((<|>))
import Control.Arrow (second, (>>>))
import Control.Monad.Identity (runIdentity)
import Data.Maybe (fromJust, fromMaybe)
-import Data.Proxy
-import Data.Void
-import GHC.TypeLits
+import Data.Proxy (Proxy (..))
+import Data.Void ()
+import GHC.TypeLits (KnownNat, Nat, natVal, type (+))
import qualified Rahm.Desktop.StackSet as W
+ ( Workspace (Workspace),
+ )
import XMonad
+ ( LayoutClass (description, handleMessage, runLayout),
+ Message,
+ Typeable,
+ fromMessage,
+ )
-- Type-level lists. LNil is the final of the list. LCons contains a layout and a
-- tail.
diff --git a/src/Rahm/Desktop/Layout/Pop.hs b/src/Rahm/Desktop/Layout/Pop.hs
index b518ee8..ee277fb 100644
--- a/src/Rahm/Desktop/Layout/Pop.hs
+++ b/src/Rahm/Desktop/Layout/Pop.hs
@@ -14,11 +14,21 @@ module Rahm.Desktop.Layout.Pop
)
where
-import Data.Default (Default (..))
-import Rahm.Desktop.Layout.ReinterpretMessage
+import Data.Default ()
+import Rahm.Desktop.Layout.ReinterpretMessage ()
import qualified Rahm.Desktop.StackSet as W
+ ( Stack (focus),
+ Workspace (Workspace),
+ )
import XMonad
-import XMonad.Layout.LayoutModifier (LayoutModifier (..), ModifiedLayout (..))
+ ( LayoutClass (handleMessage, runLayout),
+ Message,
+ Rectangle (Rectangle),
+ Resize (Expand, Shrink),
+ SomeMessage (SomeMessage),
+ fromMessage,
+ )
+import XMonad.Layout.LayoutModifier ()
data Poppable (l :: * -> *) (a :: *) = Poppable
{ -- True if the current window is popped out or not.
diff --git a/src/Rahm/Desktop/Layout/Redescribe.hs b/src/Rahm/Desktop/Layout/Redescribe.hs
index f5e51b7..4a1a918 100644
--- a/src/Rahm/Desktop/Layout/Redescribe.hs
+++ b/src/Rahm/Desktop/Layout/Redescribe.hs
@@ -3,9 +3,14 @@
-- to generate the new description.
module Rahm.Desktop.Layout.Redescribe where
-import Data.Typeable (Typeable)
+import Data.Typeable ()
import qualified Rahm.Desktop.StackSet as W
+ ( Workspace (Workspace),
+ )
import XMonad
+ ( LayoutClass (description, handleMessage, runLayout),
+ Typeable,
+ )
-- Type-class to modify the description of a layout.
class Describer m l where
diff --git a/src/Rahm/Desktop/Layout/Rotate.hs b/src/Rahm/Desktop/Layout/Rotate.hs
index e6f9a64..467ed96 100644
--- a/src/Rahm/Desktop/Layout/Rotate.hs
+++ b/src/Rahm/Desktop/Layout/Rotate.hs
@@ -11,9 +11,19 @@ module Rahm.Desktop.Layout.Rotate
where
import Control.Arrow (second)
-import Data.Default (Default (..))
+import Data.Default ()
import XMonad
+ ( Default (..),
+ LayoutClass (description),
+ Message,
+ Rectangle (Rectangle),
+ fromMessage,
+ mirrorRect,
+ )
import XMonad.Layout.LayoutModifier
+ ( LayoutModifier (modifyDescription, pureMess, pureModifier),
+ ModifiedLayout (..),
+ )
-- Just a wrapper over a Bool.
newtype Rotate a = Rotate Bool
diff --git a/src/Rahm/Desktop/Logger.hs b/src/Rahm/Desktop/Logger.hs
index a99214e..89df42e 100644
--- a/src/Rahm/Desktop/Logger.hs
+++ b/src/Rahm/Desktop/Logger.hs
@@ -2,11 +2,19 @@ module Rahm.Desktop.Logger where
import Control.Monad (forM_, join, when)
import Data.Time.LocalTime (getZonedTime)
-import Rahm.Desktop.NoPersist
-import System.IO
-import Text.Printf
+import Rahm.Desktop.NoPersist ()
+import System.IO ()
+import Text.Printf (PrintfArg, PrintfType, printf)
import XMonad
-import qualified XMonad.Util.ExtensibleState as XS
+ ( ExtensionClass (..),
+ StateExtension (PersistentExtension),
+ X,
+ XConf (config),
+ XConfig (logHook),
+ asks,
+ io,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, put)
data LogLevel = Trace | Debug | Info | Warn | Error | Fatal
deriving (Show, Read, Ord, Eq, Enum, Bounded)
diff --git a/src/Rahm/Desktop/Marking.hs b/src/Rahm/Desktop/Marking.hs
index f73193e..84b3990 100644
--- a/src/Rahm/Desktop/Marking.hs
+++ b/src/Rahm/Desktop/Marking.hs
@@ -15,31 +15,62 @@ module Rahm.Desktop.Marking
)
where
-import Control.Exception
-import Control.Monad (when, (<=<))
+import Control.Exception ()
+import Control.Monad ()
import Control.Monad.Trans (lift)
-import Control.Monad.Trans.Maybe
-import Data.Char (isAlpha, isDigit, ord)
-import Data.IORef
-import Data.List (find, sort, sortBy, sortOn)
+import Control.Monad.Trans.Maybe (MaybeT (MaybeT))
+import Data.Char ()
+import Data.IORef ()
+import Data.List (sortOn)
import Data.List.Safe (head)
import Data.Map (Map)
import qualified Data.Map as Map
+ ( empty,
+ insert,
+ insertWith,
+ lookup,
+ )
import Data.Maybe (catMaybes, fromMaybe)
import Data.Ord (Down (..))
-import Data.Sequence (Seq (..))
-import qualified Data.Sequence as Seq
+import Data.Sequence ()
+import qualified Data.Sequence as Seq ()
import Rahm.Desktop.Common
-import Rahm.Desktop.History
-import Rahm.Desktop.Hooks.WindowChange
-import Rahm.Desktop.Logger
-import Rahm.Desktop.StackSet hiding (focus)
-import Rahm.Desktop.Workspaces
-import System.Environment
-import System.FilePath
-import System.IO
+ ( Location (Location),
+ focusLocation,
+ getCurrentWorkspace,
+ )
+import Rahm.Desktop.History ()
+import Rahm.Desktop.Hooks.WindowChange ()
+import Rahm.Desktop.Logger (LogLevel (Debug), logs)
+import Rahm.Desktop.StackSet
+ ( Screen (Screen),
+ Stack (Stack),
+ StackSet (StackSet),
+ Workspace (Workspace),
+ allWindows,
+ findTag,
+ mapWindows,
+ peek,
+ )
+import Rahm.Desktop.Workspaces ()
+import System.Environment ()
+import System.FilePath ()
+import System.IO ()
import XMonad
-import qualified XMonad.Util.ExtensibleState as XS
+ ( ExtensionClass (..),
+ Rectangle (Rectangle),
+ StateExtension (PersistentExtension),
+ Window,
+ WorkspaceId,
+ X,
+ catchX,
+ getGeometry,
+ io,
+ withDisplay,
+ withFocused,
+ withWindowSet,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, modify)
import Prelude hiding (head)
{- Submodule that handles marking windows so they can be jumped back to. -}
diff --git a/src/Rahm/Desktop/PassMenu.hs b/src/Rahm/Desktop/PassMenu.hs
index 86c2e8a..9c346cf 100644
--- a/src/Rahm/Desktop/PassMenu.hs
+++ b/src/Rahm/Desktop/PassMenu.hs
@@ -1,8 +1,8 @@
module Rahm.Desktop.PassMenu where
-import Control.Monad
-import XMonad
-import XMonad.Util.Run
+import Control.Monad ( void )
+import XMonad ( X )
+import XMonad.Util.Run ( safeSpawn )
runPassMenu :: X ()
runPassMenu =
diff --git a/src/Rahm/Desktop/PromptConfig.hs b/src/Rahm/Desktop/PromptConfig.hs
index f53671d..a270644 100644
--- a/src/Rahm/Desktop/PromptConfig.hs
+++ b/src/Rahm/Desktop/PromptConfig.hs
@@ -1,6 +1,9 @@
module Rahm.Desktop.PromptConfig where
import XMonad.Prompt
+ ( XPConfig (bgColor, fgColor, font, height, promptBorderWidth),
+ def,
+ )
xpConfig :: XPConfig
xpConfig =
diff --git a/src/Rahm/Desktop/RebindKeys.hs b/src/Rahm/Desktop/RebindKeys.hs
index aeca574..6e8d212 100644
--- a/src/Rahm/Desktop/RebindKeys.hs
+++ b/src/Rahm/Desktop/RebindKeys.hs
@@ -5,15 +5,52 @@ module Rahm.Desktop.RebindKeys where
import Control.Monad (forM, forM_)
import Control.Monad.Trans.Class (lift)
-import Data.Default (Default, def)
+import Data.Default ()
import Data.Map (Map)
import qualified Data.Map as Map
+ ( delete,
+ findWithDefault,
+ fromListWith,
+ insert,
+ lookup,
+ )
import Data.Monoid (All (..))
-import Rahm.Desktop.Logger
-import Rahm.Desktop.NoPersist
-import Text.Printf
+import Rahm.Desktop.Logger ()
+import Rahm.Desktop.NoPersist (NoPersist (..))
+import Text.Printf ()
import XMonad
-import qualified XMonad.Util.ExtensibleState as XS
+ ( Default (def),
+ Display,
+ Event (KeyEvent, ev_event_type, ev_keycode, ev_state, ev_window),
+ ExtensionClass (initialValue),
+ KeyCode,
+ KeyMask,
+ KeySym,
+ MonadReader (ask),
+ Query (..),
+ Window,
+ X,
+ XConf (XConf, display, theRoot),
+ allocaXEvent,
+ displayKeycodes,
+ extraModifiers,
+ grabKey,
+ grabModeAsync,
+ io,
+ keyPress,
+ keyPressMask,
+ keyRelease,
+ keyReleaseMask,
+ keycodeToKeysym,
+ liftX,
+ noSymbol,
+ none,
+ sendEvent,
+ setEventType,
+ setKeyEvent,
+ (.|.),
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, modify)
type WindowHook = Query ()
diff --git a/src/Rahm/Desktop/StackSet.hs b/src/Rahm/Desktop/StackSet.hs
index 6c425aa..86b8a33 100644
--- a/src/Rahm/Desktop/StackSet.hs
+++ b/src/Rahm/Desktop/StackSet.hs
@@ -17,13 +17,63 @@ module Rahm.Desktop.StackSet
)
where
-import Data.Default
+import Data.Default ()
import Data.List (find)
import Data.List.Safe (head)
import qualified Data.Map as Map
+ ( fromList,
+ keys,
+ lookup,
+ mapKeys,
+ )
import Data.Maybe (catMaybes, fromMaybe, listToMaybe)
-import XMonad.StackSet as W hiding (greedyView, shiftWin)
-import qualified XMonad.StackSet
+import XMonad.StackSet as W
+ ( RationalRect (..),
+ Screen (..),
+ Stack (..),
+ StackSet (..),
+ Workspace (..),
+ abort,
+ allWindows,
+ currentTag,
+ delete,
+ delete',
+ differentiate,
+ ensureTags,
+ filter,
+ findTag,
+ float,
+ focusDown,
+ focusDown',
+ focusMaster,
+ focusUp,
+ focusUp',
+ focusWindow,
+ index,
+ insertUp,
+ integrate,
+ integrate',
+ lookupWorkspace,
+ mapLayout,
+ mapWorkspace,
+ member,
+ modify,
+ modify',
+ new,
+ peek,
+ renameTag,
+ screens,
+ shift,
+ shiftMaster,
+ sink,
+ swapDown,
+ swapMaster,
+ swapUp,
+ tagMember,
+ view,
+ workspaces,
+ )
+import qualified XMonad.StackSet (shiftWin)
import Prelude hiding (head)
data WindowLocation i l a s sd
diff --git a/src/Rahm/Desktop/Submap.hs b/src/Rahm/Desktop/Submap.hs
index ca767e3..203eb20 100644
--- a/src/Rahm/Desktop/Submap.hs
+++ b/src/Rahm/Desktop/Submap.hs
@@ -12,18 +12,49 @@ module Rahm.Desktop.Submap
where
import Control.Concurrent (threadDelay)
-import Control.Monad (void)
+import Control.Monad ()
import Control.Monad.Fix (fix)
-import Control.Monad.Trans
-import Control.Monad.Trans.Maybe
+import Control.Monad.Trans (MonadTrans (lift))
+import Control.Monad.Trans.Maybe (MaybeT (MaybeT))
import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.Time.Clock.POSIX
+import qualified Data.Map as Map (findWithDefault, lookup)
+import Data.Time.Clock.POSIX (getPOSIXTime)
import Data.Word (Word64)
-import Rahm.Desktop.Common
-import Rahm.Desktop.XMobarLog.PendingBuffer
-import Text.Printf (printf)
-import XMonad hiding (keys)
+import Rahm.Desktop.Common (runMaybeT_)
+import Rahm.Desktop.XMobarLog.PendingBuffer ()
+import Text.Printf ()
+import XMonad
+ ( Button,
+ ButtonMask,
+ Display,
+ Event (..),
+ KeyMask,
+ KeySym,
+ MonadReader (ask),
+ Window,
+ X,
+ XConf (..),
+ XEventPtr,
+ allocaXEvent,
+ asKeyEvent,
+ buttonPressMask,
+ checkMaskEvent,
+ currentTime,
+ getEvent,
+ grabKeyboard,
+ grabModeAsync,
+ grabPointer,
+ io,
+ isModifierKey,
+ keyPressMask,
+ keycodeToKeysym,
+ lookupString,
+ maskEvent,
+ pointerMotionMask,
+ ungrabKeyboard,
+ ungrabPointer,
+ (.|.),
+ )
currentTimeMillis :: IO Int
currentTimeMillis = round . (* 1000) <$> getPOSIXTime
diff --git a/src/Rahm/Desktop/SwapMaster.hs b/src/Rahm/Desktop/SwapMaster.hs
index 7a86146..38c2c3c 100644
--- a/src/Rahm/Desktop/SwapMaster.hs
+++ b/src/Rahm/Desktop/SwapMaster.hs
@@ -4,11 +4,22 @@ module Rahm.Desktop.SwapMaster (swapMaster) where
import Control.Monad (void)
import Control.Monad.State (gets)
import Control.Monad.Trans (lift)
-import Control.Monad.Trans.Maybe
-import Data.Maybe (fromMaybe)
+import Control.Monad.Trans.Maybe (MaybeT (..))
+import Data.Maybe ()
import qualified Rahm.Desktop.StackSet as W
-import XMonad (ExtensionClass (..), Window, X (..), windows, windowset)
-import qualified XMonad.Util.ExtensibleState as XS
+ ( focusMaster,
+ masterWindow,
+ peek,
+ swapWindows,
+ )
+import XMonad
+ ( ExtensionClass (..),
+ Window,
+ X (..),
+ windows,
+ windowset,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, put)
newtype LastWindow = LastWindow
{ lastWindow :: Maybe Window
diff --git a/src/Rahm/Desktop/Theater.hs b/src/Rahm/Desktop/Theater.hs
index 7ec1cd4..10d8043 100644
--- a/src/Rahm/Desktop/Theater.hs
+++ b/src/Rahm/Desktop/Theater.hs
@@ -4,19 +4,44 @@ module Rahm.Desktop.Theater where
-- a "theater" and then restore it later. If new windows were added, those new
-- windows are put into the hidden workspace.
-import Control.Monad (forM_)
-import Data.Default
+import Control.Monad ()
+import Data.Default (Default (..))
import Data.List (sortOn, (\\))
import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.Maybe
-import Data.Proxy
-import Data.Typeable
-import Rahm.Desktop.Logger
+import qualified Data.Map as Map (delete, insert, lookup, toList)
+import Data.Maybe (isNothing)
+import Data.Proxy ()
+import Data.Typeable ()
+import Rahm.Desktop.Logger ()
import XMonad (X)
import qualified XMonad as X
+ ( ExtensionClass (..),
+ MonadState (..),
+ ScreenDetail,
+ ScreenId,
+ StateExtension (..),
+ Window,
+ WindowSet,
+ WorkspaceId,
+ XState (windowset),
+ readsLayout,
+ windows,
+ withWindowSet,
+ )
import qualified XMonad.StackSet as W
-import qualified XMonad.Util.ExtensibleState as XS
+ ( Screen (..),
+ StackSet (..),
+ Workspace (..),
+ allWindows,
+ differentiate,
+ filter,
+ integrate',
+ mapLayout,
+ mapWorkspace,
+ tagMember,
+ workspaces,
+ )
+import qualified XMonad.Util.ExtensibleState as XS (get, modify)
type WinSet = W.StackSet X.WorkspaceId String X.Window X.ScreenId X.ScreenDetail
diff --git a/src/Rahm/Desktop/Workspaces.hs b/src/Rahm/Desktop/Workspaces.hs
index 9ddafa5..dc9d317 100644
--- a/src/Rahm/Desktop/Workspaces.hs
+++ b/src/Rahm/Desktop/Workspaces.hs
@@ -1,17 +1,58 @@
-- Common ways to select workspaces
module Rahm.Desktop.Workspaces where
-import Control.Arrow (second, (&&&))
-import Control.Monad.Trans.Maybe
-import Data.Char (isAlphaNum, isUpper, toLower, toUpper)
+import Control.Arrow (Arrow ((&&&)))
+import Control.Monad.Trans.Maybe ()
+import Data.Char (isUpper, toLower, toUpper)
import Data.List (find, sort, sortBy, sortOn)
import Data.List.Safe ((!!))
import Data.Maybe (fromMaybe, mapMaybe)
-import Rahm.Desktop.Common
-import Rahm.Desktop.History
+import Rahm.Desktop.Common (getCurrentWorkspace, gotoWorkspace)
+import Rahm.Desktop.History ()
import qualified Rahm.Desktop.StackSet as W
+ ( Screen (Screen, screenDetail, workspace),
+ StackSet (StackSet, current, visible),
+ Workspace (Workspace, tag),
+ integrate',
+ )
import XMonad
-import Prelude hiding ((!!))
+ ( Rectangle (Rectangle),
+ ScreenDetail (SD),
+ ScreenId,
+ Window,
+ WindowSet,
+ WorkspaceId,
+ X,
+ windows,
+ withWindowSet,
+ )
+import Prelude
+ ( Bool (..),
+ Enum,
+ Eq (..),
+ Foldable (elem),
+ Functor (fmap),
+ Int,
+ Maybe (..),
+ Monad (return),
+ Ord (compare),
+ String,
+ const,
+ filter,
+ flip,
+ fst,
+ head,
+ last,
+ map,
+ maybe,
+ reverse,
+ snd,
+ ($),
+ (++),
+ (.),
+ (<$>),
+ (=<<),
+ )
newtype Selector = Selector (forall a. (a -> Bool) -> [a] -> Maybe a)
diff --git a/src/Rahm/Desktop/XMobarLog.hs b/src/Rahm/Desktop/XMobarLog.hs
index 6f3059c..dbb08db 100644
--- a/src/Rahm/Desktop/XMobarLog.hs
+++ b/src/Rahm/Desktop/XMobarLog.hs
@@ -1,24 +1,34 @@
module Rahm.Desktop.XMobarLog (XMobarLog, spawnXMobar, xMobarLogHook) where
-import Control.Arrow (second)
+import Control.Arrow ()
import Control.Monad (forM_, unless)
import Control.Monad.Writer (execWriter, tell)
import Data.Char (isAsciiLower, isAsciiUpper, isDigit, isSpace)
-import Data.IORef
-import Data.List (sortBy)
-import Data.Maybe (isJust, mapMaybe)
-import Data.Ord (comparing)
+import Data.IORef (newIORef, readIORef, writeIORef)
+import Data.List ()
+import Data.Maybe (isJust)
+import Data.Ord ()
import Rahm.Desktop.Layout.Draw (drawLayout)
import Rahm.Desktop.Logger
+ ( LogLevel (Debug, Error, Fatal, Trace, Warn),
+ getLogLevel,
+ logs,
+ )
import qualified Rahm.Desktop.StackSet as S
+ ( Workspace (tag),
+ peek,
+ )
import Rahm.Desktop.Theater (getTheaters)
-import Rahm.Desktop.Workspaces (WorkspaceState (..), getPopulatedWorkspaces)
+import Rahm.Desktop.Workspaces
+ ( WorkspaceState (..),
+ getPopulatedWorkspaces,
+ )
import Rahm.Desktop.XMobarLog.PendingBuffer (getPendingBuffer)
import System.IO (Handle, hPutStrLn, hSetEncoding, utf8)
-import System.Process
-import Text.Printf
+import System.Process ()
+import Text.Printf (printf)
import XMonad (X)
-import qualified XMonad as X
+import qualified XMonad as X (XState (windowset), gets, io)
import XMonad.Util.NamedWindows (getName)
import XMonad.Util.Run (runProcessWithInput, spawnPipe)