module Rahm.Desktop.DMenu ( menuCommand, menuCommandString, runDMenu, runDMenuPrompt, runDMenuPromptWithMap, ) where import Control.Monad (void) import Data.List (intercalate) import Data.Map (Map) import Text.Printf (printf) import XMonad (X) import XMonad.Util.Dmenu (menuMapArgs) import XMonad.Util.Run (runProcessWithInput, safeSpawn) data Colors = Colors { fg :: String, bg :: String } | DefaultColors menuCommand :: [String] menuCommand = ["rofi", "-monitor", "-4", "-i", "-dmenu", "-sort", "-levenshtein-sort"] menuCommandString :: String menuCommandString = unwords menuCommand runDMenu :: X () runDMenu = void $ safeSpawn "rofi" ["-monitor", "-4", "-display-run", "Execute", "-show", "run"] runDMenuPrompt :: String -> Maybe String -> [String] -> X String runDMenuPrompt prompt color select = let realColor = maybe [] (\c -> ["-sb", c, "-nf", c]) color in runProcessWithInput "/home/rahm/.local/bin/dmenu_debug.sh" ( [ "-p", prompt, "-l", "12", "-dim", "0.4" ] ++ realColor ) (intercalate "\n" select) runDMenuPromptWithMap :: String -> Maybe String -> Map String a -> X (Maybe a) runDMenuPromptWithMap prompt color map = do let realColor = maybe [] ( \c -> ["-theme-str", printf "* {theme-color: %s;}" c] ) color menuMapArgs (head menuCommand) (tail menuCommand ++ ["-p", prompt] ++ realColor) map