mill-hepek

February 20, 2025 ยท View on GitHub

Maven Central

Mill plugin for writing Scala objects to files.
See also hepek, static content generator that builds upon this plugin.

Installation

Add the following to your build.sc:

import $ivy.`ba.sake::mill-hepek::0.0.2`
import mill._
import mill.scalalib._
import ba.sake.millhepek.MillHepekModule

object site extends MillHepekModule with ScalaModule {
  def scalaVersion = ...
}

Then you can run ./mill site.hepek

Usage

When you run ./mill site.hepek it will:

  1. write all object .. extends Renderable from the files package to site/hepek_output folder
  2. copy all files from src/resources/public to hepek_output folder
  3. write static accessors for src/resources/public files, so you don't have to type them with strings and make silly mistakes

Minimal example:

package files // mandatory !!

import java.nio.file.Paths
import ba.sake.hepek.core.Renderable

object RenderMe extends Renderable {

  // access `src/resources/public` files through autogenerated files.<TAB>
  override def render =
    "Some text" // arbitrary Scala code
  
  override def relPath = 
    Paths.get("renderme.txt")
}

When you run ./mill site.hepek, you'll find the site/hepek_output/renderme.txt file,
with text Some text.


Examples


Fun fact

I think that this is the first project that tried this approach, using first-class Scala objects for this kind of stuff.
Correct me if I'm wrong... ^_^


About the name

A "hepek" in Bosnian language is a jargon for a thing/thingy/stuff...
It is used when we don't know the name of a thing: "Give me that ... hepek".
Also, it is used in the famous show called "Top lista nadrealista" as a name for an advanced device which calms down situations of various kinds.