-- spell-checker:words xmonad
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Move brackets to avoid $" #-}
import           XMonad

import           System.Exit
import           XMonad.Util.EZConfig

import           XMonad.Config.Desktop
import           XMonad.Hooks.EwmhDesktops
import           XMonad.Hooks.ManageDocks

import qualified DBus.Client                  as D
import           XMonad.Hooks.DynamicLog
import           XMonadLog

import           Blaze.ByteString.Builder     (toByteString)
import           Data.Containers
import           Data.List                    ((\\))
import qualified Data.Map                     as M
import           Foreign.C
import           Graphics.X11.ExtraTypes      (xF86XK_AudioLowerVolume,
                                               xF86XK_AudioMute,
                                               xF86XK_AudioRaiseVolume,
                                               xF86XK_MonBrightnessDown,
                                               xF86XK_MonBrightnessUp,
                                               xF86XK_Xfer)
import qualified XMonad                       as W
import           XMonad.Hooks.DynamicProperty (dynamicPropertyChange)
import           XMonad.Hooks.ManageHelpers   (doFullFloat, doLower,
                                               doRectFloat, isInProperty)
import           XMonad.Hooks.Place           (fixed, placeHook, underMouse)
import           XMonad.Hooks.UrgencyHook
import           XMonad.Layout                (Tall)
import           XMonad.Layout.Drawer         (propertyToQuery)
import           XMonad.Layout.Gaps
import           XMonad.Layout.Grid
import           XMonad.Layout.MultiToggle    (mkToggle)
import           XMonad.Layout.NoBorders      (Ambiguity (Combine, OnlyScreenFloat),
                                               SetsAmbiguous, With (Union),
                                               hasBorder, hiddens, lessBorders,
                                               smartBorders)
import           XMonad.Layout.ResizableTile  (MirrorResize (MirrorExpand, MirrorShrink),
                                               ResizableTall (ResizableTall))
import           XMonad.Layout.Spacing
import qualified XMonad.StackSet              as W
import           XMonad.StackSet              (allWindows)
import           XMonad.Util.Hacks
import           XMonad.Util.PureX            (curScreen, curScreenId)
import           XMonad.Util.Run              (safeSpawn, safeSpawnProg)

volumeChangeCmd = "${{./vol_change.py}}"

terminal = "/usr/bin/env SHLVL=0 kitty"      -- Kitty, my beloved <3
launcher = "pkill rofi; rofi -show combi"
networkManager = "wpa_cli select_network $(wpa_cli list_networks | tail -n +3 | awk '!seen[$2]++' | rofi -dmenu -window-title 'Select Network' | awk '{print $1;}')"

screenshot = "mkdir -p ~/Screenshots && maim | tee ~/Screenshots/\"$(date --rfc-3339=seconds)\".png | xclip -select clipboard -t image/png"
selectScreenshot = "mkdir -p ~/Screenshots && maim -us | tee ~/Screenshots/\"$(date --rfc-3339=seconds)\".png | xclip -select clipboard -t image/png"

modifierKey = mod4Mask  -- Use Super as our mod key

statusBar = "pkill polybar; polybar main; polybar dp1; polybar dp2; polybar dp3; polybar dp4"
compositor = "pkill picom; picom"
background = "pkill show; show ~/.xmonad/wallpaper.glsl > /dev/null"
colorSelection = "xcolor | xclip -sel clip"
keybindings = "setxkbmap -option caps:none && xmodmap ~/.Xmodmap"

shift = shiftMask

-- spell-checker:words xobsock
xobsock = "$XDG_RUNTIME_DIR/xob.sock"

workspaces = ["7", "5", "3", "1", "9", "0", "2", "4", "6", "8"];

data NonFloats = NonFloats deriving (Read, Show)

instance SetsAmbiguous NonFloats where
    hiddens _ wset _ _ _ = allWindows wset \\ M.keys (W.floating wset)

startupHook = do
  spawn Main.statusBar
  spawn Main.compositor
  spawn background
  spawn keybindings
  windows $ W.view "0"
  spawn "pgrep keepass || run_keepass"
  spawn $ "pkill xob; rm -f " ++ xobsock ++ " && mkfifo " ++ xobsock ++ " && tail -f " ++ xobsock ++ " | xob"

numRowKeys = [xK_bracketleft
            , xK_braceleft
            , xK_braceright
            , xK_parenleft
            , xK_equal
            , xK_asterisk
            , xK_parenright
            , xK_plus
            , xK_bracketright
            , xK_exclam
            ]

main :: IO ()
main = XMonadLog.xmonadLog >>= main'

main' :: D.Client -> IO ()
main' dbus = xmonad
           $ javaHack
           $ ewmh . setEwmhActivateHook doAskUrgent
           $ docks
           $ def
  { modMask = modifierKey  -- Use Super as our mod key
  , borderWidth = 2
  , normalBorderColor = "#61afef"
  , focusedBorderColor = "#61afef"
  , XMonad.terminal = Main.terminal
  , XMonad.workspaces = Main.workspaces
  , XMonad.startupHook = Main.startupHook
  , XMonad.logHook = dynamicLogWithPP (polybarHook dbus)
  , XMonad.layoutHook = lessBorders NonFloats
                      $ (smartSpacing 5

                      $ avoidStruts
                      $ gaps [(U, 5), (D, 5), (L, 5), (R, 5)]
                        $ Grid
                             ||| ResizableTall 1 (3/100) (1/2) []
                             ||| Full
                             ||| Mirror (ResizableTall 1 (3/100) (1/2) []))
                        ||| gaps [(U, 0), (D, 0), (L, 0), (R, 0)] Full
  , XMonad.manageHook = composeAll
                        [ isInProperty "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_DESKTOP"
                          --> hasBorder False <+> doIgnore <+> doLower <+> doLower
                        , checkDock --> doLower <+> doLower
                        , isInProperty "_NET_WM_STATE" "_NET_WM_STATE_MODAL"
                          --> placeHook (underMouse (0.5, 0.5)) <+> doFloat
                        ] <+> manageHook def
  , XMonad.handleEventHook = composeAll
                        [ windowedFullscreenFixEventHook
                        , dynamicPropertyChange "_NET_WM_WINDOW_TYPE"
                          (isInProperty "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_DESKTOP"
                          --> hasBorder False <+> doLower
                          <+> (ask >>= \w -> liftX (modifyWindowSet (W.delete w))
                                          >> mempty)
                          <+> (ask >>= \w -> liftX (withDisplay $ \dpy -> io (moveResizeWindow dpy w 0 0 (fromIntegral $ displayWidth dpy $ defaultScreen dpy) (fromIntegral $ displayHeight dpy $ defaultScreen dpy))) >> mempty))
                        ]
                        <+> handleEventHook def
  } `additionalKeys` (
  [ ((modifierKey, xK_d), spawn launcher)
  , ((modifierKey, xK_n), spawn networkManager)
  , ((modifierKey .|. Main.shift, xK_q), kill)
  , ((modifierKey, xK_o), sendMessage MirrorShrink)
  , ((modifierKey, xK_e), sendMessage MirrorExpand)
  , ((modifierKey, xK_q), spawn "xmonad --restart")
  , ((modifierKey .|. Main.shift, xK_c), io exitSuccess)
  , ((modifierKey .|. Main.shift, xK_s), spawn selectScreenshot)
  , ((modifierKey .|. Main.shift, xK_h), spawn colorSelection)
  , ((0, xK_Print), spawn screenshot)
  , ((modifierKey .|. Main.shift, xK_Return), spawn Main.terminal)
  , ((0, xF86XK_AudioLowerVolume), spawn $ volumeChangeCmd ++ " -d")
  , ((0, xF86XK_AudioRaiseVolume), spawn $ volumeChangeCmd ++ " -u")
  , ((0, xF86XK_AudioMute), spawn $ volumeChangeCmd ++ " -m")
  , ((modifierKey, xF86XK_AudioLowerVolume), spawn $ volumeChangeCmd ++ " -d -i")
  , ((modifierKey, xF86XK_AudioRaiseVolume), spawn $ volumeChangeCmd ++ " -u -i")
  , ((modifierKey, xF86XK_AudioMute), spawn $ volumeChangeCmd ++ " -m -i")
  , ((0, xF86XK_MonBrightnessDown), spawn $ "light -U 6 && light -G | cut -d'.' -f1 > " ++ xobsock)
  , ((0, xF86XK_MonBrightnessUp), spawn $ "light -A 6 && light -G | cut -d'.' -f1 > " ++ xobsock)
  , ((modifierKey, xF86XK_MonBrightnessDown), spawn $ "light -U 3 && light -G | cut -d'.' -f1 > " ++ xobsock)
  , ((modifierKey, xF86XK_MonBrightnessUp), spawn $ "light -A 3 && light -G | cut -d'.' -f1 > " ++ xobsock)
  ] ++ (zip numRowKeys Main.workspaces >>= (\(key, workspace) -> [((modifierKey, key), windows $ W.view workspace)
                                                                , ((modifierKey .|. Main.shift, key), windows $ W.shift workspace)
                                                                ])))
