From beff0aa547d777c8eedaaf3671614f6c0b0849b0 Mon Sep 17 00:00:00 2001 From: Theo Haines <91698052+TheoHaines@users.noreply.github.com> Date: Fri, 29 May 2026 23:05:56 +0100 Subject: [PATCH] [+] Add paragender, paraboy, paragirl, paranonbinary, cupio flags (#506) * [+] Add paragender, paraboy, paragirl & paranonbinary flags * [+] Add Cupio flags * [C] Updated para- flags to be more faithful to the original designs using weights * [+] Added alt versions of para- flags as faithful versions don't render well on some distro ascii * [F] Fix color too thin will lead to being hidden --------- Co-authored-by: obsoletedevgit Co-authored-by: Azalea --- crates/hyfetch/src/bin/hyfetch.rs | 10 ++++++++-- hyfetch/data/presets.json | 23 +++++++++++++++++++++++ hyfetch/main.py | 6 +++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/crates/hyfetch/src/bin/hyfetch.rs b/crates/hyfetch/src/bin/hyfetch.rs index a96b3614..e322ae52 100644 --- a/crates/hyfetch/src/bin/hyfetch.rs +++ b/crates/hyfetch/src/bin/hyfetch.rs @@ -531,11 +531,17 @@ fn create_config( // Create flag lines let mut flags = Vec::with_capacity(Preset::COUNT); let spacing = { - let spacing = ::VARIANTS + let max_name_width = ::VARIANTS .iter() .map(|name| name.chars().count()) .max() .expect("preset name iterator should not be empty"); + let max_color_width = ::VARIANTS + .iter() + .map(|preset| preset.color_profile().colors.len()) + .max() + .expect("preset iterator should not be empty"); + let spacing = cmp::max(cmp::max(max_name_width, max_color_width), 20); let spacing: u8 = spacing.try_into().expect("`spacing` should fit in `u8`"); cmp::max(spacing, 20) }; @@ -564,7 +570,7 @@ fn create_config( // Calculate flags per row let (flags_per_row, rows_per_page) = { let (Width(term_w), Height(term_h)) = terminal_size().context("failed to get term size")?; - let flags_per_row = (term_w / (spacing as u16 + 2)).clamp(0, u8::MAX.into()) as u8; + let flags_per_row = (term_w / (spacing as u16 + 2)).clamp(1, u8::MAX.into()) as u8; let rows_per_page = (term_h.saturating_sub(13) / 5).clamp(1, u8::MAX.into()) as u8; (flags_per_row, rows_per_page) }; diff --git a/hyfetch/data/presets.json b/hyfetch/data/presets.json index eb2d429d..a3b0be6c 100644 --- a/hyfetch/data/presets.json +++ b/hyfetch/data/presets.json @@ -227,6 +227,29 @@ "autism":["#C94A49", "#DE7554", "#DBB667", "#6FA35D", "#2E7574", "#232828"], "cenelian":["#FFE7B6", "#93554A", "#52203A", "#7E4A93", "#99AFD6"], "transneutral":["#74DFFF", "#FFFDB3", "#FFFC75", "#FFF200", "#FFFC75", "#FFFDB3", "#FE8CBF"], + "paragender": { + "colors": ["#9C9C9C", "#FFFFFF", "#BDE4D7", "#63BFA1", "#F3EE94", "#63BFA1", "#BDE4D7", "#FFFFFF", "#9C9C9C"], + "weights": [4, 3, 3, 2, 1, 2, 3, 3, 4] + }, + "paraboy": { + "colors": ["#9C9C9C", "#FFFFFF", "#E4CCEC", "#C48CD4", "#0809C3", "#C48CD4", "#E4CCEC", "#FFFFFF", "#9C9C9C"], + "weights": [4, 3, 3, 2, 1, 2, 3, 3, 4] + }, + "paragirl": { + "colors": ["#9D9D9D", "#FFFFFF", "#FCCDBD", "#FC8D5C", "#FC1F4B", "#FC8D5C", "#FCCDBD", "#FFFFFF", "#9D9D9D"], + "weights": [4, 3, 3, 2, 1, 2, 3, 3, 4] + }, + "paranonbinary": { + "colors": ["#9C9C9C", "#FCFCFC", "#FDE8BD", "#FCD25C", "#FB5A24", "#FCD25C", "#FDE8BD", "#FCFCFC", "#9C9C9C"], + "weights": [4, 3, 3, 2, 1, 2, 3, 3, 4] + }, + "paragenderalt":["#9E9E9E", "#FFFFFF", "#68CAB0", "#FFEBAD", "#68CAB0", "#FFFFFF", "#9E9E9E"], + "paraboyalt":["#9E9E9E", "#FFFFFF", "#D190E5", "#4F2ECA", "#D190E5", "#FFFFFF", "#9E9E9E"], + "paragirlalt":["#9E9E9E", "#FFFFFF", "#FFA07F", "#F43C3A", "#FFA07F", "#FFFFFF", "#9E9E9E"], + "paranonbinaryalt":["#C9C9C9", "#F4F4F4", "#FFFCC0", "#FFB4EE", "#C267FF", "#8B4EFF"], + "cupiorose":["#A0A0A0", "#C7BFE8", "#FFFFFF", "#B6C1DC"], + "cupioromantic":["#FCAAA4", "#FDC6C1", "#FFFFFF", "#C9C0E7", "#A1A1A1"], + "cupiosexual":["#A0A0A0", "#C7BFE8", "#FFFFFF", "#FFB3DA"], "beiyang": ["#DF1B12", "#FFC600", "#01639D", "#FFFFFF", "#000000"], "burger": ["#F3A26A", "#498701", "#FD1C13", "#7D3829", "#F3A26A"], diff --git a/hyfetch/main.py b/hyfetch/main.py index 6b956bdd..cff94c10 100755 --- a/hyfetch/main.py +++ b/hyfetch/main.py @@ -128,7 +128,11 @@ def create_config() -> Config: # 3. Choose preset # Create flags = [[lines]] flag_entries = [] - spacing = max(max(len(k) for k in PRESETS.keys()), 20) + spacing = max( + max(len(k) for k in PRESETS.keys()), + max(len(preset.colors) for preset in PRESETS.values()), + 20, + ) for name, preset in PRESETS.items(): flag = preset.color_text(' ' * spacing, foreground=False) flag_entries.append((name, [name.center(spacing), flag, flag, flag], name.lower()))