# samhuri.net Source code for [samhuri.net](https://samhuri.net), powered by a Ruby static site generator. ## Overview This repository contains the Ruby static-site generator and site content for samhuri.net. If what you want is an artisanal, hand-crafted, static site generator for your personal blog then this might be a decent starting point. If you want a static site generator for other purposes then this has the bones you need to do that too, by ripping out the bundled plugins for posts and projects and writing your own. - Generator core: `lib/pressa/` (entrypoint: `lib/pressa.rb`) - Build tasks and utility workflows: `bake.rb` - Tests: `spec/` - Config: `site.toml` and `projects.toml` - Content: `posts/` and `public/` - Output: `www/` ## Requirements - Ruby (see `.ruby-version`) - Bundler - `rbenv` recommended ## Setup ```bash bin/bootstrap ``` Or manually: ```bash rbenv install -s "$(cat .ruby-version)" bundle install ``` ## Build And Serve ```bash bake debug # build for http://localhost:8000 bake serve # serve www/ locally ``` ## Configuration Site metadata and project data are configured with TOML files at the repository root: - `site.toml`: site identity, default scripts/styles, and a `plugins` list (for example `["posts", "projects"]`), plus `projects_plugin` assets when that plugin is enabled. - `projects.toml`: project listing entries using `[[projects]]`. `Pressa.create_site` loads both files from the provided `source_path` and supports URL overrides for `debug`, `beta`, and `release` builds. ## Customizing for your site If this workflow seems like a good fit, here is the minimum to make it your own: - Update `site.toml` with your site identity (`author`, `email`, `title`, `description`, `url`) and any global `scripts` / `styles`. - Set `plugins` in `site.toml` to explicitly enable features (`"posts"`, `"projects"`). Safe default if omitted is no plugins. - Define your projects in `projects.toml` using `[[projects]]` entries with `name`, `title`, `description`, and `url`. - Configure project-page-only assets in `site.toml` under `[projects_plugin]` (`scripts` and `styles`) when using the `"projects"` plugin. - Add custom plugins by implementing `Pressa::Plugin` in `lib/pressa/` and registering them in `lib/pressa/config/loader.rb`. - Adjust rendering and layout in `lib/pressa/views/` and the static content in `public/` as needed. Other targets: ```bash bake mudge bake beta bake release bake watch target=debug bake clean bake publish_beta bake publish ``` ## Draft Workflow ```bash bake new_draft "Post title" bake drafts bake publish_draft public/drafts/post-title.md ``` Published posts in `posts/YYYY/MM/*.md` require YAML front matter keys: - `Title` - `Author` - `Date` - `Timestamp` ## Tests And Lint ```bash bake test standardrb ``` Or via bake: ```bash bake test bake lint bake lint_fix ``` ## Notes - `bake watch` is Linux-only and requires `inotifywait`. - Deployment uses `rsync` to host `mudge` (configured in `bake.rb`): - production: `/var/www/samhuri.net/public` - beta: `/var/www/beta.samhuri.net/public`