diff --git a/apps/kassandra/backend/src/Backend.hs b/apps/kassandra/backend/src/Backend.hs index 673022ee..eae4ea5e 100644 --- a/apps/kassandra/backend/src/Backend.hs +++ b/apps/kassandra/backend/src/Backend.hs @@ -5,7 +5,7 @@ module Backend ( import Backend.Config (BackendConfig, readConfig, users) import Control.Concurrent.STM.TQueue (TQueue, newTQueueIO, writeTQueue) import Control.Exception (try) -import qualified Data.Aeson as Aeson +import Data.Aeson qualified as Aeson import Data.Map (lookup) import Data.Password.Argon2 import Frontend.Route (BackendRoute (..), FrontendRoute, fullRouteEncoder) diff --git a/apps/kassandra/frontend/src/Frontend.hs b/apps/kassandra/frontend/src/Frontend.hs index 44683a74..14cf3cf2 100644 --- a/apps/kassandra/frontend/src/Frontend.hs +++ b/apps/kassandra/frontend/src/Frontend.hs @@ -14,7 +14,7 @@ import Kassandra.RemoteBackendWidget ( remoteBackendWidget, ) import Kassandra.Types -import qualified Reflex.Dom as D +import Reflex.Dom qualified as D import Relude.Extra.Newtype -- This runs in a monad that can be run on the client or the server. diff --git a/apps/kassandra/frontend/src/Frontend/Route.hs b/apps/kassandra/frontend/src/Frontend/Route.hs index eae3da22..1e8336e2 100644 --- a/apps/kassandra/frontend/src/Frontend/Route.hs +++ b/apps/kassandra/frontend/src/Frontend/Route.hs @@ -9,7 +9,7 @@ import Prelude hiding (id, (.)) import Control.Category -} -import qualified Control.Category +import Control.Category qualified import Data.Text (Text) -- import Data.Functor.Identity diff --git a/apps/kassandra/kassandra/src/Kassandra/AgendaWidget.hs b/apps/kassandra/kassandra/src/Kassandra/AgendaWidget.hs index ab2bddac..b4358e41 100644 --- a/apps/kassandra/kassandra/src/Kassandra/AgendaWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/AgendaWidget.hs @@ -2,8 +2,8 @@ module Kassandra.AgendaWidget (agendaWidget) where -import qualified Data.Sequence as Seq -import qualified Data.Sequence.NonEmpty as NESeq +import Data.Sequence qualified as Seq +import Data.Sequence.NonEmpty qualified as NESeq import Kassandra.BaseWidgets (br, button, icon) import Kassandra.Calendar ( CalendarEvent ( @@ -26,8 +26,8 @@ import Kassandra.ListElementWidget (AdhocContext (..), definitionElementWidget, import Kassandra.ReflexUtil (listWithGaps) import Kassandra.TextEditWidget (createTextWidget) import Kassandra.Types (StandardWidget, Widget, getAppState) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D agendaWidget :: StandardWidget t m r e => m () agendaWidget = do diff --git a/apps/kassandra/kassandra/src/Kassandra/BaseWidgets.hs b/apps/kassandra/kassandra/src/Kassandra/BaseWidgets.hs index b1a65bb2..62c8010b 100644 --- a/apps/kassandra/kassandra/src/Kassandra/BaseWidgets.hs +++ b/apps/kassandra/kassandra/src/Kassandra/BaseWidgets.hs @@ -6,8 +6,8 @@ module Kassandra.BaseWidgets ( ) where import Kassandra.Types (Widget) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D import Relude.Extra.Bifunctor (secondF) br :: D.DomBuilder t m => m () diff --git a/apps/kassandra/kassandra/src/Kassandra/Debug.hs b/apps/kassandra/kassandra/src/Kassandra/Debug.hs index 1f5a7b96..ec096675 100644 --- a/apps/kassandra/kassandra/src/Kassandra/Debug.hs +++ b/apps/kassandra/kassandra/src/Kassandra/Debug.hs @@ -20,7 +20,7 @@ import GHC.Stack ( import Reflex as R import System.IO.Unsafe (unsafePerformIO) -import qualified Debug.Trace as Trace +import Debug.Trace qualified as Trace import Relude.Extra.Bifunctor import Relude.Extra.Enum import Say diff --git a/apps/kassandra/kassandra/src/Kassandra/DragAndDrop.hs b/apps/kassandra/kassandra/src/Kassandra/DragAndDrop.hs index 118c5eac..7f961afc 100644 --- a/apps/kassandra/kassandra/src/Kassandra/DragAndDrop.hs +++ b/apps/kassandra/kassandra/src/Kassandra/DragAndDrop.hs @@ -28,8 +28,8 @@ import Kassandra.Util ( lookupTask, tellSingleton, ) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D tellSelected :: (MonadIO m, WriteApp t m e) => R.Event t (Seq DefinitionElement) -> m () tellSelected = tellSingleton . fmap (_Typed @AppStateChange % _Typed @SelectState #) <=< logRShow Info diff --git a/apps/kassandra/kassandra/src/Kassandra/ListElementWidget.hs b/apps/kassandra/kassandra/src/Kassandra/ListElementWidget.hs index 451ab614..f369d193 100644 --- a/apps/kassandra/kassandra/src/Kassandra/ListElementWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/ListElementWidget.hs @@ -9,9 +9,9 @@ module Kassandra.ListElementWidget ( selectWidget, ) where -import qualified Data.HashMap.Strict as HashMap -import qualified Data.Sequence as Seq -import qualified Data.Set as Set +import Data.HashMap.Strict qualified as HashMap +import Data.Sequence qualified as Seq +import Data.Set qualified as Set import Kassandra.BaseWidgets (br, button, icon) import Kassandra.Calendar (CalendarList, completed) import Kassandra.Config ( @@ -40,8 +40,8 @@ import Kassandra.TaskWidget ( import Kassandra.TextEditWidget (createTextWidget) import Kassandra.Types (AppStateChange, DataChange (SetEventList), StandardWidget, TaskInfos, TaskState, getAppState, getSelectState, getTasks) import Kassandra.Util (tellNewTask, tellSingleton) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D data AdhocContext = NoContext | AgendaEvent Text CalendarList | AgendaList Text (Set Text) diff --git a/apps/kassandra/kassandra/src/Kassandra/ListWidget.hs b/apps/kassandra/kassandra/src/Kassandra/ListWidget.hs index 65853c06..6b02cf51 100644 --- a/apps/kassandra/kassandra/src/Kassandra/ListWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/ListWidget.hs @@ -3,7 +3,7 @@ module Kassandra.ListWidget ( listWidget, ) where -import qualified Data.HashMap.Strict as HashMap +import Data.HashMap.Strict qualified as HashMap import Kassandra.Config (DefinitionElement (TagList)) import Kassandra.ListElementWidget (AdhocContext (NoContext), definitionElementWidget) import Kassandra.Types ( @@ -12,8 +12,8 @@ import Kassandra.Types ( Widget, getTasks, ) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D listsWidget :: (StandardWidget t m r e) => m () listsWidget = do diff --git a/apps/kassandra/kassandra/src/Kassandra/LocalBackend.hs b/apps/kassandra/kassandra/src/Kassandra/LocalBackend.hs index bf9c78a2..df90ff6a 100644 --- a/apps/kassandra/kassandra/src/Kassandra/LocalBackend.hs +++ b/apps/kassandra/kassandra/src/Kassandra/LocalBackend.hs @@ -9,7 +9,7 @@ import Kassandra.Api (SocketMessage, SocketRequest) import Kassandra.Config (UserConfig) import Kassandra.State (ClientSocket) import Kassandra.Types (WidgetIO) -import qualified Reflex as R +import Reflex qualified as R data LocalSocketState = LocalError Text | SettingUp deriving (Show) makePrismLabels ''LocalSocketState diff --git a/apps/kassandra/kassandra/src/Kassandra/LocalBackendWidget.hs b/apps/kassandra/kassandra/src/Kassandra/LocalBackendWidget.hs index d4587c3a..37d40e8e 100644 --- a/apps/kassandra/kassandra/src/Kassandra/LocalBackendWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/LocalBackendWidget.hs @@ -10,7 +10,7 @@ import Kassandra.Config ( import Kassandra.LocalBackend (LocalBackendRequest, localClientSocket) import Kassandra.State (StateProvider, makeStateProvider) import Kassandra.Types (WidgetIO) -import qualified Reflex as R +import Reflex qualified as R localBackendWidget :: WidgetIO t m => diff --git a/apps/kassandra/kassandra/src/Kassandra/MainWidget.hs b/apps/kassandra/kassandra/src/Kassandra/MainWidget.hs index 6a3e3018..f21924f1 100644 --- a/apps/kassandra/kassandra/src/Kassandra/MainWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/MainWidget.hs @@ -4,10 +4,10 @@ module Kassandra.MainWidget ( mainWidget, ) where -import qualified Data.HashMap.Strict as HashMap -import qualified Data.Sequence as Seq -import qualified Data.Sequence.NonEmpty as NESeq -import qualified Data.Set as Set +import Data.HashMap.Strict qualified as HashMap +import Data.Sequence qualified as Seq +import Data.Sequence.NonEmpty qualified as NESeq +import Data.Set qualified as Set import Kassandra.AgendaWidget (agendaWidget) import Kassandra.BaseWidgets (br, button) import Kassandra.Calendar (CalendarEvent) @@ -37,8 +37,8 @@ import Kassandra.Types ( getTime, ) import Kassandra.Util (lookupTasks, stillTodo, tellNewTask) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D mainWidget :: WidgetIO t m => StateProvider t m -> m () mainWidget stateProvider = do diff --git a/apps/kassandra/kassandra/src/Kassandra/ReflexUtil.hs b/apps/kassandra/kassandra/src/Kassandra/ReflexUtil.hs index da99efa7..d72b117e 100644 --- a/apps/kassandra/kassandra/src/Kassandra/ReflexUtil.hs +++ b/apps/kassandra/kassandra/src/Kassandra/ReflexUtil.hs @@ -8,13 +8,13 @@ module Kassandra.ReflexUtil ( keyDynamic, ) where -import qualified Data.Map as Map -import qualified Data.Patch.Map as Patch +import Data.Map qualified as Map +import Data.Patch.Map qualified as Patch -- import qualified Data.Patch.MapWithMove as Patch -import qualified Data.Sequence as Seq -import qualified Reflex as R -import qualified Reflex.Dom as D +import Data.Sequence qualified as Seq +import Reflex qualified as R +import Reflex.Dom qualified as D {- | Renders a list of widgets depending on a Dynamic list of inputs. This will call the widget constructor once per value in the list. diff --git a/apps/kassandra/kassandra/src/Kassandra/RemoteBackendWidget.hs b/apps/kassandra/kassandra/src/Kassandra/RemoteBackendWidget.hs index 4741edf3..d4e30bab 100644 --- a/apps/kassandra/kassandra/src/Kassandra/RemoteBackendWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/RemoteBackendWidget.hs @@ -26,8 +26,8 @@ import Kassandra.State ( ) import Kassandra.Types (WidgetJSM) import Language.Javascript.JSaddle (liftJSM) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D import Relude.Extra.Newtype (un, wrap) import System.Process (readCreateProcess, shell) diff --git a/apps/kassandra/kassandra/src/Kassandra/SelectorWidget.hs b/apps/kassandra/kassandra/src/Kassandra/SelectorWidget.hs index f8decd12..41ee0b9b 100644 --- a/apps/kassandra/kassandra/src/Kassandra/SelectorWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/SelectorWidget.hs @@ -4,8 +4,8 @@ module Kassandra.SelectorWidget ( import Kassandra.Config (NamedBackend (..)) import Kassandra.Types (Widget) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D backendSelector :: Widget t m => NonEmpty (NamedBackend a) -> m (R.Dynamic t (NamedBackend a)) diff --git a/apps/kassandra/kassandra/src/Kassandra/Sorting.hs b/apps/kassandra/kassandra/src/Kassandra/Sorting.hs index c9cbfc2d..e2b7c4b2 100644 --- a/apps/kassandra/kassandra/src/Kassandra/Sorting.hs +++ b/apps/kassandra/kassandra/src/Kassandra/Sorting.hs @@ -5,14 +5,14 @@ module Kassandra.Sorting ( SortMode (SortModePartof, SortModeTag), ) where -import qualified Data.Aeson as Aeson +import Data.Aeson qualified as Aeson import Data.Scientific (toRealFloat) -import qualified Data.Sequence as Seq +import Data.Sequence qualified as Seq import Data.Set (member) import Kassandra.Types (TaskInfos) -import qualified Reflex as R +import Reflex qualified as R import Relude.Extra.Foldable1 (maximum1) -import qualified Taskwarrior.Task as Task +import Taskwarrior.Task qualified as Task data SortMode = SortModePartof UUID | SortModeTag Task.Tag deriving stock (Show, Eq, Ord, Generic) diff --git a/apps/kassandra/kassandra/src/Kassandra/State.hs b/apps/kassandra/kassandra/src/Kassandra/State.hs index 94b2988a..28071215 100644 --- a/apps/kassandra/kassandra/src/Kassandra/State.hs +++ b/apps/kassandra/kassandra/src/Kassandra/State.hs @@ -5,8 +5,8 @@ module Kassandra.State ( DataState (..), ) where -import qualified Data.HashMap.Strict as HashMap -import qualified Data.Sequence as Seq +import Data.HashMap.Strict qualified as HashMap +import Data.Sequence qualified as Seq import Kassandra.Api (SocketMessage (..), SocketRequest (..)) import Kassandra.Calendar import Kassandra.Config (UIConfig) @@ -16,8 +16,8 @@ import Kassandra.Types ( TaskState, WidgetIO, ) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D import Taskwarrior.IO (createTask) getParents :: HashMap UUID Task -> UUID -> Seq UUID diff --git a/apps/kassandra/kassandra/src/Kassandra/TaskWidget.hs b/apps/kassandra/kassandra/src/Kassandra/TaskWidget.hs index e2b28079..53e20d47 100644 --- a/apps/kassandra/kassandra/src/Kassandra/TaskWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/TaskWidget.hs @@ -4,11 +4,11 @@ module Kassandra.TaskWidget ( uuidWidget, ) where -import qualified Data.HashSet as HashSet -import qualified Data.Sequence as Seq -import qualified Data.Sequence.NonEmpty as NESeq -import qualified Data.Set as Set -import qualified Data.Text as Text +import Data.HashSet qualified as HashSet +import Data.Sequence qualified as Seq +import Data.Sequence.NonEmpty qualified as NESeq +import Data.Set qualified as Set +import Data.Text qualified as Text import Kassandra.BaseWidgets ( br, button, @@ -51,10 +51,10 @@ import Kassandra.Types ( getTime, ) import Kassandra.Util (lookupTaskM, lookupTasksDynM, lookupTasksM, stillTodo, tellNewTask, tellTask, tellToggle) -import qualified Reflex as R +import Reflex qualified as R import Reflex.Dom ((=:)) -import qualified Reflex.Dom as D -import qualified Taskwarrior.Status as Status +import Reflex.Dom qualified as D +import Taskwarrior.Status qualified as Status import Taskwarrior.UDA (UDA) type TaskWidget t m r e = (TaskTreeWidget t m r e, HaveTask m r) diff --git a/apps/kassandra/kassandra/src/Kassandra/TextEditWidget.hs b/apps/kassandra/kassandra/src/Kassandra/TextEditWidget.hs index 74d6f557..883ccaa9 100644 --- a/apps/kassandra/kassandra/src/Kassandra/TextEditWidget.hs +++ b/apps/kassandra/kassandra/src/Kassandra/TextEditWidget.hs @@ -11,8 +11,8 @@ import Kassandra.BaseWidgets ( stateWidget, ) import Kassandra.Types (Widget) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D lineWidget :: Widget t m => Text -> m (R.Event t Text) lineWidget text = enterTextWidget text (showText text) diff --git a/apps/kassandra/kassandra/src/Kassandra/TimeWidgets.hs b/apps/kassandra/kassandra/src/Kassandra/TimeWidgets.hs index 6015fdd1..0690f711 100644 --- a/apps/kassandra/kassandra/src/Kassandra/TimeWidgets.hs +++ b/apps/kassandra/kassandra/src/Kassandra/TimeWidgets.hs @@ -13,8 +13,8 @@ import Kassandra.Types ( Widget, getTime, ) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D myFormatTime :: ZonedTime -> Text myFormatTime = toText . formatTime defaultTimeLocale "%Y-%m-%d %H:%M" diff --git a/apps/kassandra/kassandra/src/Kassandra/Types.hs b/apps/kassandra/kassandra/src/Kassandra/Types.hs index f9be8d3e..6f9a0a74 100644 --- a/apps/kassandra/kassandra/src/Kassandra/Types.hs +++ b/apps/kassandra/kassandra/src/Kassandra/Types.hs @@ -27,15 +27,15 @@ module Kassandra.Types ( getExpandedTasks, ) where -import qualified Data.Aeson as Aeson +import Data.Aeson qualified as Aeson import Data.HashSet (member) import Kassandra.Calendar import Kassandra.Config (DefinitionElement, UIConfig) import Language.Javascript.JSaddle (MonadJSM) -import qualified Reflex as R -import qualified Reflex.Dom as D -import qualified Taskwarrior.Status -import qualified Taskwarrior.Task +import Reflex qualified as R +import Reflex.Dom qualified as D +import Taskwarrior.Status qualified +import Taskwarrior.Task qualified import Text.Show type Widget t m = diff --git a/apps/kassandra/kassandra/src/Kassandra/Util.hs b/apps/kassandra/kassandra/src/Kassandra/Util.hs index d71b217d..10ae6d93 100644 --- a/apps/kassandra/kassandra/src/Kassandra/Util.hs +++ b/apps/kassandra/kassandra/src/Kassandra/Util.hs @@ -30,8 +30,8 @@ import Kassandra.Types ( getExpandedTasks, getTasks, ) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D stillTodo :: TaskInfos -> Bool stillTodo = has (#status % #_Pending) diff --git a/apps/kassandra/kassandra/src/Prelude.hs b/apps/kassandra/kassandra/src/Prelude.hs index f2107e73..08680b35 100644 --- a/apps/kassandra/kassandra/src/Prelude.hs +++ b/apps/kassandra/kassandra/src/Prelude.hs @@ -75,7 +75,7 @@ import Data.Aeson ( fromJSON, toJSON, ) -import qualified Data.Aeson as Aeson +import Data.Aeson qualified as Aeson import Data.Generics.Product.Any (HasAny (the)) import Data.Generics.Product.Fields (HasField' (field')) import Data.Generics.Product.Typed (HasType (typed)) diff --git a/apps/kassandra/standalone/src/Kassandra/Backend/Calendar.hs b/apps/kassandra/standalone/src/Kassandra/Backend/Calendar.hs index 2c7b9693..77574e4d 100644 --- a/apps/kassandra/standalone/src/Kassandra/Backend/Calendar.hs +++ b/apps/kassandra/standalone/src/Kassandra/Backend/Calendar.hs @@ -7,13 +7,13 @@ module Kassandra.Backend.Calendar ( saveCache, ) where -import qualified Control.Concurrent.STM as STM -import qualified Data.Aeson as JSON -import qualified Data.ByteString.Lazy as LBS +import Control.Concurrent.STM qualified as STM +import Data.Aeson qualified as JSON +import Data.ByteString.Lazy qualified as LBS import Data.Default (Default (def)) -import qualified Data.Map as Map -import qualified Data.Set as Set -import qualified Data.Text as Text +import Data.Map qualified as Map +import Data.Set qualified as Set +import Data.Text qualified as Text import Data.Time (ZonedTime (ZonedTime), addDays, getCurrentTime, nominalDay, utc) import Data.Time.Zones ( TZ, @@ -22,9 +22,9 @@ import Data.Time.Zones ( localTimeToUTCTZ, timeZoneForUTCTime, ) -import qualified StmContainers.Map as STM +import StmContainers.Map qualified as STM import Streamly (IsStream, SerialT, async, asyncly, maxThreads) -import qualified Streamly.Prelude as S +import Streamly.Prelude qualified as S import System.Directory ( XdgDirectory (XdgCache), createDirectoryIfMissing, @@ -60,7 +60,7 @@ import Text.ICalendar ( import Control.Exception (onException) import Data.Aeson (decodeStrict', encode) -import qualified DeferredFolds.UnfoldlM as UnfoldlM +import DeferredFolds.UnfoldlM qualified as UnfoldlM import Kassandra.Calendar ( CalendarEvent (..), CalendarList (CalendarList), @@ -70,11 +70,11 @@ import Kassandra.Calendar ( zonedDay, ) import Kassandra.Debug (Severity (..), log) -import qualified Streamly.Data.Fold as FL +import Streamly.Data.Fold qualified as FL import Streamly.External.ByteString (fromArray, toArray) -import qualified Streamly.FileSystem.Handle as FS +import Streamly.FileSystem.Handle qualified as FS import Streamly.Internal.Data.Array.Stream.Foreign (splitOn) -import qualified Streamly.Internal.FileSystem.File as FSFile +import Streamly.Internal.FileSystem.File qualified as FSFile import Streamly.Memory.Array as Mem (fromList) dirName :: FilePath diff --git a/apps/kassandra/standalone/src/Kassandra/Config/Dhall.hs b/apps/kassandra/standalone/src/Kassandra/Config/Dhall.hs index 767b89c7..12dd39b9 100644 --- a/apps/kassandra/standalone/src/Kassandra/Config/Dhall.hs +++ b/apps/kassandra/standalone/src/Kassandra/Config/Dhall.hs @@ -8,7 +8,7 @@ import Data.Password.Argon2 ( Argon2, PasswordHash (PasswordHash), ) -import qualified Data.UUID as UUID +import Data.UUID qualified as UUID import Dhall ( Decoder, FromDhall, @@ -20,7 +20,7 @@ import Dhall ( input, toMonadic, ) -import qualified Dhall +import Dhall qualified import Dhall.Core (pretty) import System.Environment () diff --git a/apps/kassandra/standalone/src/Kassandra/Standalone.hs b/apps/kassandra/standalone/src/Kassandra/Standalone.hs index f169fd50..ea54ad7f 100644 --- a/apps/kassandra/standalone/src/Kassandra/Standalone.hs +++ b/apps/kassandra/standalone/src/Kassandra/Standalone.hs @@ -23,8 +23,8 @@ import Kassandra.Standalone.State (localBackendProvider) import Kassandra.State (StateProvider) import Kassandra.Types (WidgetJSM) import Kassandra.Util (defDynDyn) -import qualified Reflex as R -import qualified Reflex.Dom as D +import Reflex qualified as R +import Reflex.Dom qualified as D import Relude.Extra.Newtype (wrap) import Say (say) import System.Exit (ExitCode (ExitFailure)) diff --git a/apps/kassandra/standalone/src/Kassandra/Standalone/State.hs b/apps/kassandra/standalone/src/Kassandra/Standalone/State.hs index 1d020b06..ad26794c 100644 --- a/apps/kassandra/standalone/src/Kassandra/Standalone/State.hs +++ b/apps/kassandra/standalone/src/Kassandra/Standalone/State.hs @@ -7,11 +7,11 @@ module Kassandra.Standalone.State ( import Control.Concurrent.STM (TQueue, readTQueue) import Control.Concurrent.STM.TVar (stateTVar) import Control.Monad.STM (retry) -import qualified Data.Aeson as Aeson -import qualified Data.Map as Map -import qualified Data.Sequence as Seq -import qualified Data.Sequence.NonEmpty as NESeq -import qualified Network.Simple.TCP as Net +import Data.Aeson qualified as Aeson +import Data.Map qualified as Map +import Data.Sequence qualified as Seq +import Data.Sequence.NonEmpty qualified as NESeq +import Network.Simple.TCP qualified as Net import Say (say, sayErr) import Streamly ( SerialT, @@ -21,7 +21,7 @@ import Streamly ( parallely, serial, ) -import qualified Streamly.Prelude as S +import Streamly.Prelude qualified as S import Taskwarrior.IO (getTasks, saveTasks) import Kassandra.Api ( diff --git a/apps/logfeed/Main.hs b/apps/logfeed/Main.hs index 7b396a95..1f4f87a6 100644 --- a/apps/logfeed/Main.hs +++ b/apps/logfeed/Main.hs @@ -9,7 +9,7 @@ module Main where -import qualified Data.List.Extra as L +import Data.List.Extra qualified as L import Data.List.NonEmpty ( groupBy, zip, @@ -19,10 +19,10 @@ import Data.Text ( intercalate, replace, ) -import qualified Data.Text as Text -import qualified Data.Time.Calendar as T -import qualified Data.Time.Clock as T -import qualified Data.Time.Format as T +import Data.Text qualified as Text +import Data.Time.Calendar qualified as T +import Data.Time.Clock qualified as T +import Data.Time.Format qualified as T import Relude hiding ( intercalate, zip, @@ -31,10 +31,10 @@ import System.Environment () import System.FilePattern.Directory (getDirectoryFiles) import Text.Atom.Feed import Text.Atom.Feed.Export (textFeed) -import qualified Text.Megaparsec as MP -import qualified Text.Megaparsec.Char as MP -import qualified Text.Megaparsec.Char as MPC -import qualified Text.Megaparsec.Char.Lexer as MP +import Text.Megaparsec qualified as MP +import Text.Megaparsec.Char qualified as MP +import Text.Megaparsec.Char qualified as MPC +import Text.Megaparsec.Char.Lexer qualified as MP -- TODO: use Text instead of linked lists of chars diff --git a/apps/nixpkgs-bot/TODO.md b/apps/nixpkgs-bot/TODO.md index 297c301f..c67a8f7a 100644 --- a/apps/nixpkgs-bot/TODO.md +++ b/apps/nixpkgs-bot/TODO.md @@ -1,2 +1 @@ - [ ] Choose which branches you care about -- [ ] Accept multiline commands diff --git a/apps/nixpkgs-bot/exe/Main.hs b/apps/nixpkgs-bot/exe/Main.hs index 544e887e..4abd1be2 100644 --- a/apps/nixpkgs-bot/exe/Main.hs +++ b/apps/nixpkgs-bot/exe/Main.hs @@ -2,33 +2,33 @@ module Main (main) where -import qualified Control.Exception as Exception +import Control.Exception qualified as Exception import Control.Monad.Catch (MonadMask) -import qualified Control.Monad.Catch as MonadCatch -import qualified Control.Monad.Except as Except -import qualified Control.Monad.Logger as MonadLogger -import qualified Control.Monad.Trans.Resource as ResourceT +import Control.Monad.Catch qualified as MonadCatch +import Control.Monad.Except qualified as Except +import Control.Monad.Logger qualified as MonadLogger +import Control.Monad.Trans.Resource qualified as ResourceT import Data.GraphQL (get) -import qualified Data.GraphQL as GraphQL -import qualified Data.List.NonEmpty as NonEmpty -import qualified Data.Map.Strict as Map -import qualified Data.Text as Text -import qualified Data.Time as Time +import Data.GraphQL qualified as GraphQL +import Data.List.NonEmpty qualified as NonEmpty +import Data.Map.Strict qualified as Map +import Data.Text qualified as Text +import Data.Time qualified as Time import Data.Yaml (FromJSON) -import qualified Data.Yaml as Yaml +import Data.Yaml qualified as Yaml import Database.Esqueleto.Experimental (notIn, (&&.), (<.), (==.), (^.)) -import qualified Database.Esqueleto.Experimental as SQL -import qualified Database.Persist as Persist -import qualified Database.Persist.Sqlite as Persist.Sqlite -import qualified Database.Persist.TH as Persist -import qualified Network.HTTP.Client as HTTP -import qualified Network.Matrix.Client as Matrix -import qualified NixpkgsBot.GraphQL.API as GraphQL.API +import Database.Esqueleto.Experimental qualified as SQL +import Database.Persist qualified as Persist +import Database.Persist.Sqlite qualified as Persist.Sqlite +import Database.Persist.TH qualified as Persist +import Network.HTTP.Client qualified as HTTP +import Network.Matrix.Client qualified as Matrix +import NixpkgsBot.GraphQL.API qualified as GraphQL.API import Relude hiding (get) -import qualified System.Clock as Clock -import qualified System.Environment as System -import qualified System.Process.Typed as Process -import qualified System.Random as Random +import System.Clock qualified as Clock +import System.Environment qualified as System +import System.Process.Typed qualified as Process +import System.Random qualified as Random data Repo = MkRepo { localPath :: FilePath @@ -517,8 +517,8 @@ getCommands roomId events = do session <- getEnv matrixSession members <- unwrapMatrixError $ Matrix.getRoomMembers session roomId let isQuery = Map.size members <= 2 - forM (toList messages) \(author, message) -> do - let (cmd, args) = second (Text.drop 1) $ Text.breakOn " " $ Text.strip message + join <$> forM (toList messages) \(author, message) -> forM (Text.lines message) \line -> do + let (cmd, args) = second (Text.drop 1) $ Text.breakOn " " $ Text.strip line pure $ MkCommand{command = Text.toLower cmd, args, author, isQuery, roomId} where getCommand Matrix.RoomEvent{Matrix.reSender = Matrix.Author author, Matrix.reContent = Matrix.EventRoomMessage (Matrix.RoomMessageText (Matrix.MessageText{Matrix.mtBody, Matrix.mtType = Matrix.TextType}))} = Just (author, mtBody) @@ -697,7 +697,7 @@ helpMessage = do , m "I will inform you, when one of the pull requests you subscribed to reaches one of these branches: " <> branchList , mempty , m "I have been programmed and am being hosted by " <> mention "@maralorn:maralorn.de" <> m ". Feel free to reach out to him, if you have any problems or suggestions." - , m "My code is written in Haskell, is open source under the AGPL license and can be found at " <> link "https://git.maralorn.de/nixpkgs-bot" "git.maralorn.de/nixpkgs-bot" <> m "." + , m "My code is written in Haskell, is open source under the AGPL license and can be found at " <> link "https://git.maralorn.de/nixos-config/tree/apps/nixpkgs-bot" "git.maralorn.de/nixos-config/tree/apps/nixpkgs-bot" <> m "." ] whenTimeIsUp :: (Environment -> IORef Clock.TimeSpec) -> Int64 -> App () -> App () diff --git a/apps/nixpkgs-bot/nixpkgs-bot.cabal b/apps/nixpkgs-bot/nixpkgs-bot.cabal index 679e1963..5ca30311 100644 --- a/apps/nixpkgs-bot/nixpkgs-bot.cabal +++ b/apps/nixpkgs-bot/nixpkgs-bot.cabal @@ -38,6 +38,7 @@ common common-config TypeApplications TypeFamilies UndecidableInstances + ImportQualifiedPost build-depends: , aeson-schemas diff --git a/apps/wizards-dialog/Main.hs b/apps/wizards-dialog/Main.hs index 853babed..7840e968 100644 --- a/apps/wizards-dialog/Main.hs +++ b/apps/wizards-dialog/Main.hs @@ -8,10 +8,10 @@ import Relude import Witch import Data.Aeson (FromJSON (..), Value (Array, String), withObject) -import qualified Data.Aeson.Key as Key -import qualified Data.Aeson.KeyMap as Aeson -import qualified Data.Foldable as Foldable -import qualified Data.Text as Text +import Data.Aeson.Key qualified as Key +import Data.Aeson.KeyMap qualified as Aeson +import Data.Foldable qualified as Foldable +import Data.Text qualified as Text import Data.Yaml (decodeFileEither) import System.Posix.Daemon (Redirection (DevNull), runDetached) diff --git a/flake.nix b/flake.nix index e3746232..2f43cda0 100644 --- a/flake.nix +++ b/flake.nix @@ -32,13 +32,21 @@ }; pre-commit = { check.enable = true; - settings.hooks = { - hlint.enable = true; - alejandra.enable = true; - nix-linter.enable = false; # Too many false positives for now - statix.enable = true; - fourmolu.enable = true; - shellcheck.enable = true; + settings = { + settings.ormolu.defaultExtensions = [ + "TypeApplications" + "BangPatterns" + "ImportQualifiedPost" + "BlockArguments" + ]; + hooks = { + hlint.enable = true; + alejandra.enable = true; + nix-linter.enable = false; # Too many false positives for now + statix.enable = true; + fourmolu.enable = true; + shellcheck.enable = true; + }; }; }; }; diff --git a/home-manager/roles/status-script.hs b/home-manager/roles/status-script.hs index a1ec9807..c0ee4dff 100644 --- a/home-manager/roles/status-script.hs +++ b/home-manager/roles/status-script.hs @@ -7,14 +7,14 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE NoImplicitPrelude #-} -import qualified Control.Concurrent -import qualified Control.Concurrent as Concurrent -import qualified Control.Concurrent.Async as Async -import qualified Control.Concurrent.STM as STM +import Control.Concurrent qualified +import Control.Concurrent qualified as Concurrent +import Control.Concurrent.Async qualified as Async +import Control.Concurrent.STM qualified as STM import Control.Exception (catch, onException) -import qualified Data.ByteString.Lazy as LBS +import Data.ByteString.Lazy qualified as LBS import Data.String.Interpolate (i) -import qualified Data.Text as Text +import Data.Text qualified as Text import Relude import Say (sayErr) import Shh (ExecReference (Absolute), captureTrim, exe, ignoreFailure, load, (|>)) diff --git a/nixos/roles/laminar/bump-config.hs b/nixos/roles/laminar/bump-config.hs index f481ab68..afbec74e 100644 --- a/nixos/roles/laminar/bump-config.hs +++ b/nixos/roles/laminar/bump-config.hs @@ -1,6 +1,7 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -10,7 +11,7 @@ {-# OPTIONS_GHC -Wall -Werror -Wno-missing-signatures -Wno-type-defaults -Wno-orphans #-} import Data.String.Interpolate -import qualified Data.Text as Text +import Data.Text qualified as Text import Language.Haskell.TH import Language.Haskell.TH.Syntax import Relude diff --git a/overlays/writeHaskellScript.nix b/overlays/writeHaskellScript.nix index 59b2fb8e..efc268e3 100644 --- a/overlays/writeHaskellScript.nix +++ b/overlays/writeHaskellScript.nix @@ -70,6 +70,7 @@ in { {-# LANGUAGE TupleSections #-} {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE BlockArguments #-} + {-# LANGUAGE ImportQualifiedPost #-} import Shh import Relude