stylix/palette-generator/Stylix/Output.hs

28 lines
690 B
Haskell
Raw Normal View History

module Stylix.Output ( makeOutputTable ) where
import Data.Colour ( RGB(RGB) )
import qualified Data.Vector as V
import Data.Word ( Word8 )
import Text.JSON ( JSObject, toJSObject )
import Text.Printf ( printf )
toHexNum :: Double -> Word8
toHexNum = truncate
{- |
Convert a colour to a hexdecimal string.
>>> toHex (RGB 255 255 255)
"ffffff"
-}
toHex :: RGB -> String
toHex (RGB r g b) = printf "%02x%02x%02x" (toHexNum r) (toHexNum g) (toHexNum b)
-- | Convert a palette to the JSON format expected by Stylix's NixOS modules.
makeOutputTable :: V.Vector RGB -> JSObject String
makeOutputTable
= toJSObject
. V.toList
. V.imap (\i c -> (printf "base%02X" i, c))
. V.map toHex