Skip to content

A base16 and base24 builder written in Rust, focused on convenience for template maintainers.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE-2.0
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

tinted-theming/tinted-builder-rust

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date
Oct 1, 2024
May 15, 2024
Dec 19, 2024
Dec 8, 2024
May 15, 2024
Dec 19, 2024
May 15, 2024
Dec 8, 2024
May 15, 2024
Jun 23, 2024
Mar 29, 2024
Mar 29, 2024
Oct 6, 2024
Jun 22, 2024
Oct 2, 2024
Mar 27, 2024
Mar 29, 2024
Sep 7, 2024
May 16, 2024

Repository files navigation

tinted-builder-rust

Matrix Chat Crates.io Tests

A builder for base16 and base24 templates using the 0.11.1 builder specification.

This repo contains a command-line tool, tinted-builder-rust, to build base16 and base24 templates. It is also contains a library crate, tinted-builder, which you can use to directly build templates within your own Rust application.

Table of Contents

CLI

Installation

Cargo

cargo install tinted-builder-rust

Homebrew

brew tap tinted-theming/tinted
brew install tinted-builder-rust

Binaries

Download the relevant binary from the repository releases page.

Basic Usage

tinted-builder-rust sync # To sync with latest schemes
tinted-builder-rust build path/to/base16-template

Commands

The following is a table of the available subcommands for the CLI tool (tinted-builder-rust), including the descriptions and any notable arguments.

Subcommand Description Arguments Example Usage Flags
sync Installs and or updates latest schemes. - tinted-builder-rust sync --quiet (silence stderr and stdout)
build Builds the themes of a template. template_path: Path to template directory. tinted-builder-rust build ./path/to/base16-template --quiet (silence stderr and stdout), --sync (equivalent of running tinted-builder-rust sync before tinted-builder-rust build)

Flags

Flag/Option Description Applicable Subcommands Default Value Example Usage
--schemes-dir -s Path to a custom local schemes directory to use when building. Only necessary if the latest schemes repository is not desired. build tinted-builder-rust build . --schemes-dir=/path/to/schemes/dir
--data-dir -d Specifies a custom path for the data directory. All Linux: $XDG_DATA_HOME/tinted-theming/tinted-builder-rust or ~/.local/share. MacOS: ~/Library/Application\ Support/tinted-theming/tinted-builder-rust tinted-builder-rust sync --data-dir /path/to/custom/data-dir
--help -h Displays help information for the subcommand. All - tinted-builder-rust --help, tinted-builder-rust build --help, etc
--version -V Shows the version of tinted-builder-rust. All - tinted-builder-rust --version

Builder specification

tinted-builder-rust implements the 0.11.1 builder specification. This specification details the scheme yaml format or schema as well as the variables the builder should provide when rendering template mustache file. Have a look at the builder specification document for more details.

Library

This library exposes a Scheme and Template struct which you can use to generate your own themes using base16 and base24 templates and 0.11.1 compliant base16 and base24 scheme files.

Internally tinted-builder-rust uses ribboncurls to render the templates.

Library installation

cargo add tinted-builder-rust

Library Usage

use tinted_builder_rust::{Scheme, Template};
use std::fs::read_to_string;

let template_str = read_to_string("path/to/template.mustache").unwrap();
let scheme_str = read_to_string("path/to/scheme.yml").unwrap();
let scheme = Scheme::Base16(serde_yaml::from_str(&scheme_str).unwrap());
let template = Template::new(template_str, scheme);

template
    .render()
    .unwrap();

The Scheme struct is as follows:

use std::collections::HashMap;
use tinted_builder::{SchemeSystem, SchemeVariant};

pub struct Scheme {
    pub system: SchemeSystem,
    pub name: String,
    pub slug: String,
    pub author: String,
    pub description: Option<String>,
    pub variant: SchemeVariant,
    pub palette: HashMap<String, Color>,
}

pub struct Color {
    pub hex: (String, String, String),
    pub rgb: (u8, u8, u8),
    pub dec: (f32, f32, f32),
}

Template::new The Template struct simply sets the content provided to it via Template::new.

template.render_to_file(&scheme) takes the scheme and generates the variables defined in the 0.11.1 builder specification.

Contributing

Contributions are welcome! Have a look at CONTRIBUTING.md for more information.

License

Ribboncurls is dual-licensed under the [Apache 2.0] and [MIT] licenses. For more information about the licenses of the projects used by Ribboncurls, have a look at LICENSES-THIRD-PARTY.md.