Today I removed Pygments from my theme and went all Chroma. My theme is a port and the original used the Pygments solarized dark syntax highlighting which is not included in Chroma by default.
Chroma has a built-in tool for converting styles named _tools/style.py to convert the styles. But it does not have any guides and I struggled to make it work. Now that it’s done, I am documenting it in hopes of someone using it later on.
Instructions
These steps are for an Ubuntu 16 machine, but can be adapted for any OS.
- Install Go, configure
GOPATHand the rest. - Install Chroma with
go get github.com/alecthomas/chroma. - Install Python 3.
- Install Pygments for Python 3:
sudo apt-get install python3-pygments. - Install Pystache for Python 3:
sudo apt-get install python3-pystache. - Clone
solarized dark:git clone https://github.com/john2x/solarized-pygment/(no need to install it). - (Optional) Rename the three py files inside
solarized=pygment/pygments_solarizedto more descriptive names. For exampledark.pymight becomesolarized-dark.py. - Open each of them and note the style class name. For example for
dark.pyit’sSolarizedDarkStyle. - Copy the files to the
pygmentsinstallation path. On my machine it was:-
/usr/local/lib/python3.5/dist-packages/Pygments-2.2.0-py3.5.egg/pygments/styles.python -m sitewill give you the list.
-
- Use the
_tools/style.pyto generategofiles from styles:-
python3 style.py [style-name] pygments.styles.[py-file-name].[style-class-name] > style-name.go-
style-nameis a string with new style’s name. E.g.solarized-dark. -
py-file-nameis the name of thepyfile (w/o extension) that was copied to pygments directory. E.g.dark. -
style-class-nameis the name of the python class inside the style. E.g.SolarizedDarkStyle.
-
-
- My command was:
python3 style.py solarized-dark pygments.styles.dark.SolarizedDarkStyle > solarized-dark.go
- Repeat for any other styles.
- Copy the resulting
gofiles to$GOPATH/Go/src/github.com/alecthomas/chroma/styles.- You can open the file to double-check the style name passed to
chroma.MustNewStyle: var SolarizedDark = Register(chroma.MustNewStyle("solarized-dark", chroma.StyleEntries{
- You can open the file to double-check the style name passed to
- Now create the following Go application. Modify the file and style names as needed and run it:
package main import ( "os" "github.com/alecthomas/chroma/formatters/html" "github.com/alecthomas/chroma/styles" ) func main() { f, _ := os.Create("solarized-dark.css") defer f.Close() formatter := html.New(html.WithClasses()) if err := formatter.WriteCSS(f, styles.Get("solarized-dark")); err != nil { panic(err) } } - Add the CSS files to your theme’s CSS.
- Inside your site’s config file:
- Remove
pygmentsUseClassic: This will tell Hugo to use Chroma. -
pygmentsuseclasses = true: Use CSS for highlighting. -
pygmentscodefences = true: This adds code highlight to code fences.
- Remove