Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact 9b81b4a856b07d3a405a5fdd9a49fb13aba9ae2f0b690d2b7a9417e85217abf0:


;; 公开反代和平台异常的统一错误页面。
(defmodule lamina_error_pages
  (export all))

(defun internal (message)
  (page 500 "Something went wrong" message))

(defun server-error (_req)
  (internal "服务器内部错误,请稍后重试。"))

(defun service-unavailable (message)
  (page 503 "Repository is starting" message))

(defun bad-gateway (message)
  (page 502 "Repository unavailable" message))

(defun page (status title message)
  (let* ((site (case (catch (lamina_site_mgr:all))
                 (value (if (is_map value) value #M(site_name "lamina")))
                 (_ #M(site_name "lamina"))))
         (site-name (maps:get 'site_name site "lamina"))
         (tagline (maps:get 'site_tagline site "Small teams. Open source. Built on Fossil."))
         (body
          (lists:flatten
           (list
            (lamina_ui:public-head (lists:flatten (list title " · " site-name)))
            (lamina_ui:public-nav site-name)
            (lamina_ui:public-tagline tagline)
            "<main><p class=\"lede\">" (integer_to_list status) "</p><h1>"
            (lamina_ui:escape title) "</h1><p class=\"lede\">"
            (lamina_ui:escape message) "</p><p><a href=\"/\">Return to "
            (lamina_ui:escape site-name) "</a></p></main>"
            (lamina_ui:public-footer site)
            "</div></body></html>"))))
    `#(status ,status #M(#"content-type" #"text/html; charset=utf-8")
             ,(list_to_binary body))))

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.