mill-hepek
February 20, 2025 ยท View on GitHub
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:
- write all
object .. extends Renderablefrom thefilespackage tosite/hepek_outputfolder - copy all files from
src/resources/publictohepek_outputfolder - write static accessors for
src/resources/publicfiles, 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.