From 1f25484605881af1a8e1475565d2ceb20b88ea85 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 23 Nov 2022 00:26:58 -0700 Subject: Change to use minimal imports. This is achieved by using `stack build --ghc-options=-ddump-minimal-imports` and looking for the *.imports files. --- src/Main.hs | 72 ++++++++++++---- src/Rahm/Desktop/Common.hs | 62 ++++++++++---- src/Rahm/Desktop/DMenu.hs | 10 +-- src/Rahm/Desktop/Desktop.hs | 19 ++++- src/Rahm/Desktop/Hash.hs | 6 +- src/Rahm/Desktop/History.hs | 24 +++--- src/Rahm/Desktop/Hooks/WindowChange.hs | 17 +++- src/Rahm/Desktop/Keys/Dsl.hs | 34 +++++++- src/Rahm/Desktop/Keys/Wml.hs | 125 +++++++++++++++++++++++++--- src/Rahm/Desktop/Layout/ConsistentMosaic.hs | 22 ++++- src/Rahm/Desktop/Layout/Draw.hs | 21 ++++- src/Rahm/Desktop/Layout/Flip.hs | 11 ++- src/Rahm/Desktop/Layout/Hole.hs | 9 +- src/Rahm/Desktop/Layout/List.hs | 13 ++- src/Rahm/Desktop/Layout/Pop.hs | 16 +++- src/Rahm/Desktop/Layout/Redescribe.hs | 7 +- src/Rahm/Desktop/Layout/Rotate.hs | 12 ++- src/Rahm/Desktop/Logger.hs | 16 +++- src/Rahm/Desktop/Marking.hs | 65 +++++++++++---- src/Rahm/Desktop/PassMenu.hs | 6 +- src/Rahm/Desktop/PromptConfig.hs | 3 + src/Rahm/Desktop/RebindKeys.hs | 47 +++++++++-- src/Rahm/Desktop/StackSet.hs | 56 ++++++++++++- src/Rahm/Desktop/Submap.hs | 49 +++++++++-- src/Rahm/Desktop/SwapMaster.hs | 19 ++++- src/Rahm/Desktop/Theater.hs | 41 +++++++-- src/Rahm/Desktop/Workspaces.hs | 53 ++++++++++-- src/Rahm/Desktop/XMobarLog.hs | 28 +++++-- 28 files changed, 707 insertions(+), 156 deletions(-) (limited to 'src') diff --git a/src/Main.hs b/src/Main.hs index d591d3a..79e5717 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,25 +1,69 @@ import Control.Monad.Reader -import Control.Monad.Trans.Class -import qualified Data.Map as Map -import Data.Monoid + ( MonadReader (ask), + ReaderT (runReaderT), + ) +import Control.Monad.Trans.Class () +import qualified Data.Map as Map () +import Data.Monoid (Endo (Endo)) import Rahm.Desktop.Common + ( Location (Location), + getCurrentWorkspace, + ) import Rahm.Desktop.DMenu (menuCommandString) -import Rahm.Desktop.History -import Rahm.Desktop.Hooks.WindowChange -import Rahm.Desktop.Keys -import Rahm.Desktop.Layout -import Rahm.Desktop.Logger -import Rahm.Desktop.Marking -import Rahm.Desktop.RebindKeys +import Rahm.Desktop.History (historyHook) +import Rahm.Desktop.Hooks.WindowChange (withLocationChangeHook) +import Rahm.Desktop.Keys (applyKeys) +import Rahm.Desktop.Layout (myLayout) +import Rahm.Desktop.Logger (LogLevel (Debug, Info), logs) +import Rahm.Desktop.Marking (Mark, markAllLocations) +import Rahm.Desktop.RebindKeys (WindowHook, remapHook) import qualified Rahm.Desktop.StackSet as W -import Rahm.Desktop.XMobarLog + ( RationalRect (..), + allWindows, + float, + ) +import Rahm.Desktop.XMobarLog (spawnXMobar, xMobarLogHook) import System.Directory (getHomeDirectory) import System.Environment (setEnv) import System.FilePath (()) -import Text.Printf +import Text.Printf () import XMonad -import qualified XMonad as X -import XMonad.Hooks.DynamicProperty + ( Default (def), + ManageHook, + Query (Query), + X, + XConfig + ( borderWidth, + clickJustFocuses, + focusFollowsMouse, + focusedBorderColor, + handleEventHook, + keys, + layoutHook, + logHook, + manageHook, + modMask, + normalBorderColor, + startupHook, + terminal, + workspaces + ), + appName, + className, + composeAll, + doF, + doFloat, + floatLocation, + liftX, + mod3Mask, + spawn, + title, + withWindowSet, + (-->), + (=?), + ) +import qualified XMonad as X (xmonad) +import XMonad.Hooks.DynamicProperty (dynamicTitle) import XMonad.Hooks.EwmhDesktops (ewmh) import XMonad.Hooks.ManageDocks (docks) import XMonad.Hooks.ManageHelpers (doFullFloat, isFullscreen) 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) -- cgit