diff --git a/README.md b/README.md index 34e29e4..3181f35 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,27 @@ After that, you can configure the theme as shown below. In this example it is in - Make sure to replace `[YOUR_RESOLUTION]` with your resolution and `[THEME]` with the theme - Alternatively, use the `-c` option to set a custom resolution +### Fonts: +GRUB themes use the PF2 font format. GRUB rasterizes a TrueType or OpenType +font when `grub-mkfont` creates a PF2 file, so the source font must be converted +for each size used by the theme. The bundled themes use the DejaVu Sans files +from `common/DejaVuSans.ttf`; Unifont is also included for broad Unicode +coverage. + +To regenerate the bundled fonts, run: +```sh +cd common +./makefont.sh +``` + +The script supports both command names used by Linux distributions: +`grub-mkfont` (including NixOS) and `grub2-mkfont` (including Fedora and +openSUSE). To convert another font, pass its path, an output prefix, and +optional sizes: +```sh +./makefont.sh /path/to/MyFont.ttf my-font 16 24 32 +``` + ## Contributing: - If you made changes to icons, or added a new one: - Delete the existing icon, if there is one diff --git a/common/DejaVuSans.ttf b/common/DejaVuSans.ttf new file mode 100644 index 0000000..e5f7eec Binary files /dev/null and b/common/DejaVuSans.ttf differ diff --git a/common/dejavu_sans_12.pf2 b/common/dejavu_sans_12.pf2 new file mode 100644 index 0000000..19e0499 Binary files /dev/null and b/common/dejavu_sans_12.pf2 differ diff --git a/common/dejavu_sans_14.pf2 b/common/dejavu_sans_14.pf2 new file mode 100644 index 0000000..dcc727e Binary files /dev/null and b/common/dejavu_sans_14.pf2 differ diff --git a/common/dejavu_sans_16.pf2 b/common/dejavu_sans_16.pf2 new file mode 100644 index 0000000..37f3ef4 Binary files /dev/null and b/common/dejavu_sans_16.pf2 differ diff --git a/common/dejavu_sans_24.pf2 b/common/dejavu_sans_24.pf2 new file mode 100644 index 0000000..8c3e434 Binary files /dev/null and b/common/dejavu_sans_24.pf2 differ diff --git a/common/dejavu_sans_32.pf2 b/common/dejavu_sans_32.pf2 new file mode 100644 index 0000000..bbbbe28 Binary files /dev/null and b/common/dejavu_sans_32.pf2 differ diff --git a/common/dejavu_sans_48.pf2 b/common/dejavu_sans_48.pf2 new file mode 100644 index 0000000..776c982 Binary files /dev/null and b/common/dejavu_sans_48.pf2 differ diff --git a/common/makefont.sh b/common/makefont.sh index 7c47d01..116ddcd 100755 --- a/common/makefont.sh +++ b/common/makefont.sh @@ -1,5 +1,53 @@ -#! /usr/bin/env bash +#!/usr/bin/env bash -grub2-mkfont -o unifont-16.pf2 -s 16 unifont.otf -grub2-mkfont -o unifont-24.pf2 -s 24 unifont.otf -grub2-mkfont -o unifont-32.pf2 -s 32 unifont.otf +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +readonly SCRIPT_DIR + +if [[ -n "${GRUB_MKFONT:-}" ]]; then + readonly FONT_TOOL="${GRUB_MKFONT}" +elif command -v grub-mkfont >/dev/null 2>&1; then + readonly FONT_TOOL="grub-mkfont" +elif command -v grub2-mkfont >/dev/null 2>&1; then + readonly FONT_TOOL="grub2-mkfont" +else + printf 'error: grub-mkfont or grub2-mkfont is required\n' >&2 + exit 1 +fi + +generate_font() { + local font_file="$1" + local output_prefix="$2" + shift 2 + + for size in "$@"; do + "${FONT_TOOL}" \ + --output "${SCRIPT_DIR}/${output_prefix}-${size}.pf2" \ + --size "${size}" \ + "${font_file}" + done +} + +usage() { + printf 'Usage: %s [FONT_FILE OUTPUT_PREFIX [SIZE ...]]\n' "$(basename "$0")" >&2 + printf 'Without arguments, regenerate the bundled DejaVu Sans and Unifont files.\n' >&2 +} + +if (( $# == 0 )); then + generate_font "${SCRIPT_DIR}/DejaVuSans.ttf" dejavu_sans 12 14 16 24 32 48 + generate_font "${SCRIPT_DIR}/unifont.otf" unifont 16 24 32 +elif (( $# >= 2 )); then + font_file="$1" + output_prefix="$2" + shift 2 + if (( $# == 0 )); then + set -- 16 24 32 + fi + generate_font "${font_file}" "${output_prefix}" "$@" +else + usage + exit 2 +fi diff --git a/config/theme-1080p.txt b/config/theme-1080p.txt index acf2b79..40f8529 100644 --- a/config/theme-1080p.txt +++ b/config/theme-1080p.txt @@ -19,7 +19,7 @@ terminal-border: "0" top = 30% width = 40% height = 40% - item_font = "Unifont Regular 16" + item_font = "DejaVu Sans Regular 16" item_color = "#cccccc" selected_item_color = "#ffffff" icon_width = 32 @@ -48,5 +48,5 @@ terminal-border: "0" id = "__timeout__" text = "Booting in %d seconds" color = "#cccccc" - font = "Unifont Regular 16" + font = "DejaVu Sans Regular 16" } diff --git a/config/theme-2k.txt b/config/theme-2k.txt index 096eb06..1bc0124 100644 --- a/config/theme-2k.txt +++ b/config/theme-2k.txt @@ -19,7 +19,7 @@ terminal-border: "0" top = 30% width = 40% height = 40% - item_font = "Unifont Regular 24" + item_font = "DejaVu Sans Regular 24" item_color = "#cccccc" selected_item_color = "#ffffff" icon_width = 48 @@ -48,5 +48,5 @@ terminal-border: "0" id = "__timeout__" text = "Booting in %d seconds" color = "#cccccc" - font = "Unifont Regular 24" + font = "DejaVu Sans Regular 24" } diff --git a/config/theme-4k.txt b/config/theme-4k.txt index aeb38e0..40a8687 100644 --- a/config/theme-4k.txt +++ b/config/theme-4k.txt @@ -19,7 +19,7 @@ terminal-border: "0" top = 30% width = 40% height = 40% - item_font = "Unifont Regular 32" + item_font = "DejaVu Sans Regular 32" item_color = "#cccccc" selected_item_color = "#ffffff" icon_width = 64 @@ -48,5 +48,5 @@ terminal-border: "0" id = "__timeout__" text = "Booting in %d seconds" color = "#cccccc" - font = "Unifont Regular 32" + font = "DejaVu Sans Regular 32" } diff --git a/config/theme-ultrawide.txt b/config/theme-ultrawide.txt index acf2b79..40f8529 100644 --- a/config/theme-ultrawide.txt +++ b/config/theme-ultrawide.txt @@ -19,7 +19,7 @@ terminal-border: "0" top = 30% width = 40% height = 40% - item_font = "Unifont Regular 16" + item_font = "DejaVu Sans Regular 16" item_color = "#cccccc" selected_item_color = "#ffffff" icon_width = 32 @@ -48,5 +48,5 @@ terminal-border: "0" id = "__timeout__" text = "Booting in %d seconds" color = "#cccccc" - font = "Unifont Regular 16" + font = "DejaVu Sans Regular 16" } diff --git a/config/theme-ultrawide2k.txt b/config/theme-ultrawide2k.txt index 096eb06..1bc0124 100644 --- a/config/theme-ultrawide2k.txt +++ b/config/theme-ultrawide2k.txt @@ -19,7 +19,7 @@ terminal-border: "0" top = 30% width = 40% height = 40% - item_font = "Unifont Regular 24" + item_font = "DejaVu Sans Regular 24" item_color = "#cccccc" selected_item_color = "#ffffff" icon_width = 48 @@ -48,5 +48,5 @@ terminal-border: "0" id = "__timeout__" text = "Booting in %d seconds" color = "#cccccc" - font = "Unifont Regular 24" + font = "DejaVu Sans Regular 24" }