aboutsummaryrefslogtreecommitdiff
path: root/gen_theme.rb
diff options
context:
space:
mode:
authorGeorg Gadinger <nilsding@nilsding.org>2021-04-16 19:38:16 +0200
committerGeorg Gadinger <nilsding@nilsding.org>2021-04-16 19:42:18 +0200
commit3f1b7213af69fa8d8426294de512686d7b8e9c38 (patch)
tree5adfb0d47e8f56959897bc4ac33ba57da26b94b2 /gen_theme.rb
downloadrockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.tar.gz
rockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.tar.bz2
rockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.zip
Initial commit
Diffstat (limited to 'gen_theme.rb')
-rwxr-xr-xgen_theme.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/gen_theme.rb b/gen_theme.rb
new file mode 100755
index 0000000..d7530d3
--- /dev/null
+++ b/gen_theme.rb
@@ -0,0 +1,93 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require 'liquid'
+require 'fileutils'
+
+THEME_NAME = 'iPawbMini'
+# MAIN_MENU_TITLE = 'iPod mini'
+MAIN_MENU_TITLE = 'iPawb mini'
+
+DEST_DIR = File.join(__dir__, 'dist', THEME_NAME)
+
+TEMPLATE_PATH = File.join(__dir__, 'templates')
+BASE_TEMPLATE = 'base.liquid'
+TEMPLATES = {
+ 'fms.liquid' => "wps/#{THEME_NAME}.fms",
+ 'sbs.liquid' => "wps/#{THEME_NAME}.sbs",
+ 'wps.liquid' => "wps/#{THEME_NAME}.wps"
+}.freeze
+
+THEME_CONFIG = {
+ **TEMPLATES.map { |_, path| [path.split('.').last.downcase, "/.rockbox/#{path}"] }.to_h,
+ 'selector type' => 'bar (inverse)',
+ 'filetype colours' => '-',
+ 'font' => '/.rockbox/fonts/10-Espy Sans-Bold.fnt',
+ 'statusbar' => 'off',
+ 'scrollbar' => 'right',
+ 'scrollbar width' => '9',
+ 'battery display' => 'graphic',
+ 'show icons' => 'on',
+ 'ui viewport' => '-'
+}.freeze
+
+def new_liquid(template_path)
+ Liquid::Template.parse(IO.read(File.join(TEMPLATE_PATH, template_path)))
+end
+
+base_vars = {
+ 'theme_name' => THEME_NAME,
+ 'main_menu_title' => MAIN_MENU_TITLE,
+ 'generated_at' => Time.now.to_s
+}.freeze
+
+FileUtils.mkdir_p(DEST_DIR)
+
+puts "===> Generating WPS screens"
+FileUtils.mkdir_p(File.join(DEST_DIR, 'wps'))
+TEMPLATES.each do |src, dst|
+ vars = base_vars.merge('filename' => src)
+ template = new_liquid(src)
+ content = template.render(**vars).strip
+ assigns = template.instance_assigns.transform_values(&:chomp)
+ result = new_liquid(BASE_TEMPLATE).render(
+ 'content' => content,
+ 'filename' => src,
+ **vars,
+ **assigns
+ )
+
+ dest_full = File.join(DEST_DIR, dst)
+ puts "writing #{dest_full} ..."
+ File.open(dest_full, 'w') do |f|
+ f.puts result
+ end
+end
+
+puts "===> Generating theme config"
+FileUtils.mkdir_p(File.join(DEST_DIR, 'themes'))
+File.open(File.join(DEST_DIR, 'themes', "#{THEME_NAME}.cfg"), 'w') do |f|
+ f.puts "# #{THEME_NAME} Rockbox theme"
+ f.puts "# Generated using gen_theme.rb at #{base_vars['generated_at']}"
+ f.puts
+
+ THEME_CONFIG.each do |key, value|
+ f.puts "#{key}: #{value}"
+ end
+end
+
+def copy(kind, pattern, dest_dir)
+ source_files = Dir[*pattern]
+ return if source_files.empty?
+
+ puts "===> Copying #{kind}"
+ FileUtils.mkdir_p(dest_dir)
+ source_files.each do |source_file|
+ dest_file = File.join(dest_dir, File.basename(source_file))
+ puts dest_file
+ FileUtils.cp(source_file, dest_file)
+ end
+end
+
+copy :fonts, File.join(__dir__, 'fonts', '*.fnt'), File.join(DEST_DIR, 'fonts')
+copy :images, File.join(__dir__, 'images', '*.bmp'), File.join(DEST_DIR, 'wps', THEME_NAME)