diff --git a/hyfetch/color_util.py b/hyfetch/color_util.py index 9052d0a2..8ad3c14b 100644 --- a/hyfetch/color_util.py +++ b/hyfetch/color_util.py @@ -2,13 +2,9 @@ from __future__ import annotations import colorsys from dataclasses import dataclass, astuple -from typing_extensions import Literal from .constants import GLOBAL_CFG - -AnsiMode = Literal['default', 'ansi', '8bit', 'rgb'] -LightDark = Literal['light', 'dark'] - +from .types import * MINECRAFT_COLORS = ["&0/\033[0;30m", "&1/\033[0;34m", "&2/\033[0;32m", "&3/\033[0;36m", "&4/\033[0;31m", "&5/\033[0;35m", "&6/\033[0;33m", "&7/\033[0;37m", "&8/\033[1;30m", "&9/\033[1;34m", diff --git a/hyfetch/constants.py b/hyfetch/constants.py index 956164b5..5a1448c6 100644 --- a/hyfetch/constants.py +++ b/hyfetch/constants.py @@ -1,10 +1,9 @@ from __future__ import annotations -import os from dataclasses import dataclass from pathlib import Path -from typing_extensions import Literal +from .types import LightDark CONFIG_PATH = Path.home() / '.config/hyfetch.json' VERSION = '1.4.4' @@ -36,10 +35,10 @@ class GlobalConfig: debug: bool is_light: bool - def light_dark(self) -> Literal['light', 'dark']: + def light_dark(self) -> LightDark: return 'light' if self.is_light else 'dark' - def default_lightness(self, term: Literal['light', 'dark'] | None = None) -> float: + def default_lightness(self, term: LightDark | None = None) -> float: if term is None: term = self.light_dark() return 0.65 if term.lower() == 'dark' else 0.4 diff --git a/hyfetch/models.py b/hyfetch/models.py index db9e949a..27760d1f 100644 --- a/hyfetch/models.py +++ b/hyfetch/models.py @@ -2,10 +2,10 @@ from __future__ import annotations from dataclasses import dataclass, field -from .color_util import AnsiMode, LightDark from .constants import CONFIG_PATH from .neofetch_util import ColorAlignment from .serializer import json_stringify, from_dict +from .types import AnsiMode, LightDark, BackendLiteral @dataclass @@ -15,6 +15,7 @@ class Config: light_dark: LightDark = 'dark' lightness: float | None = None color_align: ColorAlignment = field(default_factory=lambda: ColorAlignment('horizontal')) + backend: BackendLiteral = "neofetch" @classmethod def from_dict(cls, d: dict): diff --git a/hyfetch/neofetch_util.py b/hyfetch/neofetch_util.py index 5ba96a3e..38d82fbd 100644 --- a/hyfetch/neofetch_util.py +++ b/hyfetch/neofetch_util.py @@ -1,6 +1,5 @@ from __future__ import annotations -import inspect import os import platform import re @@ -15,12 +14,12 @@ from tempfile import TemporaryDirectory from urllib.request import urlretrieve import pkg_resources -from typing_extensions import Literal from hyfetch.color_util import color from .constants import GLOBAL_CFG, MINGIT_URL from .presets import ColorProfile from .serializer import from_dict +from .types import BackendLiteral, ColorAlignMode RE_NEOFETCH_COLOR = re.compile('\\${c[0-9]}') @@ -76,7 +75,7 @@ def fill_starting(asc: str) -> str: @dataclass class ColorAlignment: - mode: Literal['horizontal', 'vertical', 'custom'] + mode: ColorAlignMode # custom_colors[ascii color index] = unique color index in preset custom_colors: dict[int, int] = () @@ -201,7 +200,7 @@ def check_windows_cmd(): sys.exit(0) -def run_command(args: str, pipe: bool = False) -> str | None: +def run_neofetch_cmd(args: str, pipe: bool = False) -> str | None: """ Run neofetch command """ @@ -237,7 +236,7 @@ def get_distro_ascii(distro: str | None = None) -> str: if distro: cmd += f' --ascii_distro {distro}' - asc = run_command(cmd, True) + asc = run_neofetch_cmd(cmd, True) # Unescape backslashes here because backslashes are escaped in neofetch for printf asc = asc.replace('\\\\', '\\') @@ -246,7 +245,7 @@ def get_distro_ascii(distro: str | None = None) -> str: def get_distro_name(): - return run_command('ascii_distro_name', True) + return run_neofetch_cmd('ascii_distro_name', True) def run_neofetch(preset: ColorProfile, alignment: ColorAlignment): @@ -269,7 +268,7 @@ def run_neofetch(preset: ColorProfile, alignment: ColorAlignment): path.write_text(asc) # Call neofetch with the temp file - run_command(f'--ascii --source {path.absolute()} --ascii-colors') + run_neofetch_cmd(f'--ascii --source {path.absolute()} --ascii-colors') def get_fore_back(distro: str | None = None) -> tuple[int, int] | None: diff --git a/hyfetch/presets.py b/hyfetch/presets.py index d6ec209a..2f08fd6b 100644 --- a/hyfetch/presets.py +++ b/hyfetch/presets.py @@ -2,10 +2,9 @@ from __future__ import annotations from typing import Iterable -from typing_extensions import Literal - -from .color_util import RGB, LightDark +from .color_util import RGB from .constants import GLOBAL_CFG +from .types import LightDark, ColorSpacing def remove_duplicates(seq: Iterable) -> list: @@ -20,7 +19,7 @@ def remove_duplicates(seq: Iterable) -> list: class ColorProfile: raw: list[str] colors: list[RGB] - spacing: Literal['equal', 'weighted'] = 'equal' + spacing: ColorSpacing = 'equal' def __init__(self, colors: list[str] | list[RGB]): if isinstance(colors[0], str): diff --git a/hyfetch/types.py b/hyfetch/types.py new file mode 100644 index 00000000..283bd8fd --- /dev/null +++ b/hyfetch/types.py @@ -0,0 +1,7 @@ +from typing_extensions import Literal + +AnsiMode = Literal['default', 'ansi', '8bit', 'rgb'] +LightDark = Literal['light', 'dark'] +BackendLiteral = Literal["neofetch", "fastfetch"] +ColorAlignMode = Literal['horizontal', 'vertical', 'custom'] +ColorSpacing = Literal['equal', 'weighted']