[O] Refactor global cfg

This commit is contained in:
Azalea (on HyDEV-Daisy) 2022-06-19 21:22:36 -04:00
parent a1d687d3bd
commit 59f5fd5651
4 changed files with 43 additions and 23 deletions

View file

@ -4,7 +4,7 @@ import colorsys
from typing import NamedTuple from typing import NamedTuple
from typing_extensions import Literal from typing_extensions import Literal
from hyfetch.constants import COLOR_MODE from .constants import GLOBAL_CFG
AnsiMode = Literal['default', 'ansi', '8bit', 'rgb'] AnsiMode = Literal['default', 'ansi', '8bit', 'rgb']
@ -38,7 +38,7 @@ def color(msg: str) -> str:
code = code.replace(',', ' ').replace(';', ' ').replace(' ', ' ') code = code.replace(',', ' ').replace(';', ' ').replace(' ', ' ')
rgb = tuple(int(c) for c in code.split(' ')) rgb = tuple(int(c) for c in code.split(' '))
msg = msg[:i] + RGB(*rgb).to_ansi(mode=COLOR_MODE, foreground=fore) + msg[end + 1:] msg = msg[:i] + RGB(*rgb).to_ansi(foreground=fore) + msg[end + 1:]
return msg return msg
@ -55,7 +55,8 @@ def clear_screen(title: str = ''):
""" """
Clear screen using ANSI escape codes Clear screen using ANSI escape codes
""" """
print('\033[2J\033[H', end='') if not GLOBAL_CFG.debug:
print('\033[2J\033[H', end='')
if title: if title:
print() print()
@ -155,7 +156,9 @@ class RGB(NamedTuple):
""" """
raise NotImplementedError() raise NotImplementedError()
def to_ansi(self, mode: AnsiMode = COLOR_MODE, foreground: bool = True): def to_ansi(self, mode: AnsiMode | None = None, foreground: bool = True):
if not mode:
mode = GLOBAL_CFG.color_mode
if mode == 'rgb': if mode == 'rgb':
return self.to_ansi_rgb(foreground) return self.to_ansi_rgb(foreground)
if mode == '8bit': if mode == '8bit':

View file

@ -1,12 +1,12 @@
from __future__ import annotations
import os import os
from dataclasses import dataclass
from pathlib import Path from pathlib import Path
CONFIG_PATH = Path.home() / '.config/hyfetch.json' CONFIG_PATH = Path.home() / '.config/hyfetch.json'
VERSION = '1.0.7' VERSION = '1.0.7'
# Global color mode default to 8-bit for compatibility
COLOR_MODE = '8bit'
# Obtain terminal size # Obtain terminal size
try: try:
TERM_LEN = os.get_terminal_size().columns TERM_LEN = os.get_terminal_size().columns
@ -28,3 +28,13 @@ _/\_ _/_/\_
| |(_( | |""".strip('\n') | |(_( | |""".strip('\n')
TEST_ASCII_WIDTH = max(len(line) for line in TEST_ASCII.split('\n')) TEST_ASCII_WIDTH = max(len(line) for line in TEST_ASCII.split('\n'))
@dataclass
class GlobalConfig:
# Global color mode default to 8-bit for compatibility
color_mode: str
override_distro: str | None
debug: bool
GLOBAL_CFG = GlobalConfig(color_mode='8bit', override_distro=None, debug=False)

View file

@ -4,15 +4,15 @@ from __future__ import annotations
import argparse import argparse
import json import json
import random import random
import re
from dataclasses import dataclass from dataclasses import dataclass
from itertools import permutations from itertools import permutations
from typing import Iterable from typing import Iterable
from typing_extensions import Literal from typing_extensions import Literal
from . import constants
from .color_util import AnsiMode, printc, color, clear_screen from .color_util import AnsiMode, printc, color, clear_screen
from .constants import CONFIG_PATH, VERSION, TERM_LEN, TEST_ASCII_WIDTH, TEST_ASCII from .constants import CONFIG_PATH, VERSION, TERM_LEN, TEST_ASCII_WIDTH, TEST_ASCII, GLOBAL_CFG
from .neofetch_util import run_neofetch, get_distro_ascii, ColorAlignment, ascii_size from .neofetch_util import run_neofetch, get_distro_ascii, ColorAlignment, ascii_size
from .presets import PRESETS from .presets import PRESETS
from .serializer import json_stringify from .serializer import json_stringify
@ -108,7 +108,7 @@ def create_config() -> Config:
['8bit', 'rgb'], 'rgb') ['8bit', 'rgb'], 'rgb')
# Override global color mode # Override global color mode
constants.COLOR_MODE = color_system GLOBAL_CFG.color_mode = color_system
title += f'\n&e1. Selected color mode: &r{color_system}' title += f'\n&e1. Selected color mode: &r{color_system}'
############################## ##############################
@ -200,19 +200,20 @@ def create_config() -> Config:
['Horizontal'.center(asc_width), *ColorAlignment('horizontal').recolor_ascii(asc, _prs).split('\n')], ['Horizontal'.center(asc_width), *ColorAlignment('horizontal').recolor_ascii(asc, _prs).split('\n')],
['Vertical'.center(asc_width), *ColorAlignment('vertical').recolor_ascii(asc, _prs).split('\n')], ['Vertical'.center(asc_width), *ColorAlignment('vertical').recolor_ascii(asc, _prs).split('\n')],
] ]
ascii_per_row = TERM_LEN // (asc_width + 2)
# Random color schemes # Random color schemes
# ascii_indices = # ascii_indices =
pis = list(range(len(_prs.unique_colors().colors))) pis = list(range(len(_prs.unique_colors().colors)))
while len(pis) < 6: while len(pis) < len(set(re.findall('(?<=\\${c)[0-9](?=})', asc))):
pis += pis pis += pis
perm = list(permutations(pis)) perm = list(permutations(pis))
choices = random.sample(perm, 4) random_count = ascii_per_row - 2
choices = random.sample(perm, random_count)
choices = [{i: n for i, n in enumerate(c)} for c in choices] choices = [{i: n for i, n in enumerate(c)} for c in choices]
asciis += [[f'Random {i}'.center(asc_width), *ColorAlignment('custom', r).recolor_ascii(asc, _prs).split('\n')] asciis += [[f'random{i}'.center(asc_width), *ColorAlignment('custom', r).recolor_ascii(asc, _prs).split('\n')]
for i, r in enumerate(choices)] for i, r in enumerate(choices)]
ascii_per_row = TERM_LEN // (asc_width + 2)
while asciis: while asciis:
current = asciis[:ascii_per_row] current = asciis[:ascii_per_row]
asciis = asciis[ascii_per_row:] asciis = asciis[ascii_per_row:]
@ -223,7 +224,7 @@ def create_config() -> Config:
print('You can type "roll" to randomize again.') print('You can type "roll" to randomize again.')
print() print()
choice = literal_input(f'Your choice?', ['horizontal', 'vertical', 'roll', 'random1', 'random2', 'random3', 'random4'], 'horizontal') choice = literal_input(f'Your choice?', ['horizontal', 'vertical', 'roll'] + [f'random{i}' for i in range(random_count)], 'horizontal')
if choice == 'roll': if choice == 'roll':
continue continue
@ -272,6 +273,14 @@ def run():
print(f'Version is {VERSION}') print(f'Version is {VERSION}')
return return
# Test distro ascii art
if args.test_distro:
print(f'Setting distro to {args.test_distro}')
GLOBAL_CFG.override_distro = args.test_distro
if args.debug:
GLOBAL_CFG.debug = True
# Load config # Load config
config = check_config() config = check_config()
@ -286,7 +295,7 @@ def run():
config.mode = args.mode config.mode = args.mode
# Override global color mode # Override global color mode
constants.COLOR_MODE = config.mode GLOBAL_CFG.color_mode = config.mode
# Get preset # Get preset
preset = PRESETS.get(config.preset) preset = PRESETS.get(config.preset)
@ -299,12 +308,5 @@ def run():
if config.lightness: if config.lightness:
preset = preset.set_light(config.lightness) preset = preset.set_light(config.lightness)
# Test distro ascii art
if args.test_distro:
asc = get_distro_ascii(args.test_distro)
print(asc)
print(ColorAlignment('horizontal').recolor_ascii(asc, preset))
return
# Run # Run
run_neofetch(preset, config.color_align) run_neofetch(preset, config.color_align)

View file

@ -13,6 +13,7 @@ import pkg_resources
from hyfetch.color_util import color from hyfetch.color_util import color
from typing_extensions import Literal from typing_extensions import Literal
from .constants import GLOBAL_CFG
from .presets import ColorProfile from .presets import ColorProfile
@ -108,6 +109,10 @@ def get_distro_ascii(distro: str | None = None) -> str:
:return: Distro ascii :return: Distro ascii
""" """
if not distro and GLOBAL_CFG.override_distro:
distro = GLOBAL_CFG.override_distro
print(distro)
print(GLOBAL_CFG)
cmd = 'print_ascii' cmd = 'print_ascii'
if distro: if distro:
os.environ['CUSTOM_DISTRO'] = distro os.environ['CUSTOM_DISTRO'] = distro