From 30e27deb8177e8eac0410bcfa1c1df3d476e3498 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 12:37:04 -0700 Subject: [PATCH 01/43] nixoslogo: bump minimum python version to 3.11 --- .../python-packages/nixoslogo/poetry.lock | 20 ++----------------- .../python-packages/nixoslogo/pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/poetry.lock b/package-sets/python-packages/nixoslogo/poetry.lock index 8354307..8af6816 100644 --- a/package-sets/python-packages/nixoslogo/poetry.lock +++ b/package-sets/python-packages/nixoslogo/poetry.lock @@ -12,9 +12,6 @@ files = [ {file = "coloraide-6.1.tar.gz", hash = "sha256:cfd0c7c4801a4e070ed1106365ad72b5db207a0d7ab15b1936265def1918350d"}, ] -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.11\""} - [[package]] name = "jsonpickle" version = "4.1.1" @@ -205,20 +202,7 @@ files = [ [package.extras] dev = ["isort", "mypy", "pytest"] -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - [metadata] lock-version = "2.1" -python-versions = ">=3.9" -content-hash = "fc193b110f7e602b7eb744e6ef70b665cadb5d3f5995099ca956ea9d85876675" +python-versions = ">=3.11" +content-hash = "037f3927469b35b609cb381684e8d4bcb62c6ccd3c0769afc013155676f1574a" diff --git a/package-sets/python-packages/nixoslogo/pyproject.toml b/package-sets/python-packages/nixoslogo/pyproject.toml index d3765a7..7387f1e 100644 --- a/package-sets/python-packages/nixoslogo/pyproject.toml +++ b/package-sets/python-packages/nixoslogo/pyproject.toml @@ -6,7 +6,7 @@ authors = [ {name = "Daniel Baker",email = "daniel.n.baker@gmail.com"} ] readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.11" dependencies = [ "svg-py (>=1.6.0,<2.0.0)", "coloraide (>=6.1,<7.0)", From 9fa5f94171c60233b47e61f8554c1c930b7b4be8 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 12:37:24 -0700 Subject: [PATCH 02/43] devShells.nixos-logo-dev: add types-lxml to fix linting warnings --- dev-shells/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-shells/default.nix b/dev-shells/default.nix index c779895..4fbc22a 100644 --- a/dev-shells/default.nix +++ b/dev-shells/default.nix @@ -36,6 +36,7 @@ mapAttrs (system: pkgs: { (python3.withPackages (ps: [ ps.nixoslogo-editable ps.fontforge + ps.types-lxml ])) ]; From 6e0fccd1b3ecc963d6df45cc353ccd243c522a70 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 13:40:43 -0700 Subject: [PATCH 03/43] nixoslogo: fix linting errors in core.py --- .../nixoslogo/nixoslogo/core.py | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/core.py b/package-sets/python-packages/nixoslogo/nixoslogo/core.py index 67ff415..ab7c3a3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/core.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/core.py @@ -4,6 +4,7 @@ from enum import Enum, auto from functools import partial from pathlib import Path +from typing import NotRequired, TypedDict, cast import svg import tomllib @@ -12,20 +13,29 @@ from nixoslogo.colors import Color from nixoslogo.layout import Canvas +# === Types === + + +class PaletteColor(TypedDict): + name: str + value: list[float] + tints: NotRequired[dict[str, list[float]]] + + # === Functions === -def get_path_from_envvar(envvar) -> Path: +def get_path_from_envvar(envvar: str) -> Path: path = os.getenv(envvar) if not path: raise EnvironmentError( f"{envvar} is not set. " - "Please provide a font path explicitly or set the environment variable." + + "Please provide a font path explicitly or set the environment variable." ) return Path(path) -def get_color_by_name(palette, name): +def get_color_by_name(palette: list[PaletteColor], name: str) -> PaletteColor: return list(filter(lambda color: color["name"] == name, palette))[0] @@ -87,12 +97,22 @@ def get_color_by_name(palette, name): with open(get_nixos_color_palette_file(), "rb") as f: NIXOS_COLOR_PALETTE = tomllib.load(f) -PALETTE_DEFAULT_COLORS = NIXOS_COLOR_PALETTE["logos"]["default"] -PALETTE_RAINBOW_COLORS = NIXOS_COLOR_PALETTE["logos"]["rainbow"] -PALETTE_TRANS_COLORS = NIXOS_COLOR_PALETTE["logos"]["trans"] -PALETTE_PRIMARY_COLORS = NIXOS_COLOR_PALETTE["palette"]["primary"] -PALETTE_SECONDARY_COLORS = NIXOS_COLOR_PALETTE["palette"]["secondary"] -PALETTE_ACCENT_COLORS = NIXOS_COLOR_PALETTE["palette"]["accent"] +PALETTE_DEFAULT_COLORS = cast( + list[PaletteColor], NIXOS_COLOR_PALETTE["logos"]["default"] +) +PALETTE_RAINBOW_COLORS = cast( + list[PaletteColor], NIXOS_COLOR_PALETTE["logos"]["rainbow"] +) +PALETTE_TRANS_COLORS = cast(list[PaletteColor], NIXOS_COLOR_PALETTE["logos"]["trans"]) +PALETTE_PRIMARY_COLORS = cast( + list[PaletteColor], NIXOS_COLOR_PALETTE["palette"]["primary"] +) +PALETTE_SECONDARY_COLORS = cast( + list[PaletteColor], NIXOS_COLOR_PALETTE["palette"]["secondary"] +) +PALETTE_ACCENT_COLORS = cast( + list[PaletteColor], NIXOS_COLOR_PALETTE["palette"]["accent"] +) NIXOS_DARK_BLUE = Color( "oklch", @@ -166,10 +186,10 @@ def __init__( self, canvas: Canvas | None = None, background_color: str | None = None, - **kwargs, + **kwargs: object, ): self.canvas = canvas - self.background_color = background_color + self.background_color: str | None = background_color self._init_canvas() @property @@ -224,7 +244,7 @@ def make_svg(self): elements=self.make_svg_background() + self.make_svg_elements(), ) - def write_svg(self, filename=None): + def write_svg(self, filename: str | None = None): if filename is None: filename = self.make_filename() filename = filename.replace("/", "_") From 615ba24b9fae834c2ac977cce9dbec38a07a7ddc Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 13:43:41 -0700 Subject: [PATCH 04/43] nixoslogo: fix make_filename typing treewide --- .../nixoslogo/nixoslogo/annotations.py | 2 +- .../nixoslogo/artifacts/clearspace.py | 2 +- .../nixoslogo/nixoslogo/artifacts/misuse.py | 10 ++++----- .../nixoslogo/nixoslogo/core.py | 2 +- .../nixoslogo/nixoslogo/dimensioned.py | 22 +++++++++---------- .../nixoslogo/nixoslogo/logo.py | 2 +- .../nixoslogo/nixoslogo/logomark.py | 4 ++-- .../nixoslogo/nixoslogo/logotype.py | 4 ++-- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 6052b44..ff3b271 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -97,7 +97,7 @@ def _get_clearspace(self): def make_svg_elements(self): return tuple(elem.make_svg_element() for elem in self.glyphs) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ self.characters.lower(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index 281933c..308a49c 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -37,7 +37,7 @@ def elements_bounding_box(self) -> tuple[float, float, float, float]: def _get_clearspace(self) -> float: return self.recommended._get_clearspace() - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index f370328..4abd720 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -23,7 +23,7 @@ def __init__( **kwargs, ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -64,7 +64,7 @@ def __init__( **kwargs, ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -96,7 +96,7 @@ def __init__( **kwargs, ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -137,7 +137,7 @@ def __init__( **kwargs, ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -167,7 +167,7 @@ def __init__( **kwargs, ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/core.py b/package-sets/python-packages/nixoslogo/nixoslogo/core.py index ab7c3a3..e8e1f57 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/core.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/core.py @@ -203,7 +203,7 @@ def _get_clearspace(self) -> float: ... def make_svg_elements(self): ... @abstractmethod - def make_filename(self, extras: tuple[str]) -> str: ... + def make_filename(self, extras: tuple[str, ...] = ()) -> str: ... def _init_canvas(self): if self.canvas is None: diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 60aaf0b..ad1cb8a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -100,7 +100,7 @@ def make_lambda_polygons(self): ), ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", @@ -195,7 +195,7 @@ def make_svg_elements(self): + self.make_lambda_linear_dimensions() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -241,7 +241,7 @@ def make_svg_elements(self) -> svg.SVG: + self.make_lambda_angular_dimensions() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -351,7 +351,7 @@ def make_svg_elements(self) -> svg.SVG: + self.make_named_lambda_vertices() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -443,7 +443,7 @@ def make_svg_elements(self) -> svg.SVG: + self.make_parametric_annotations() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -555,7 +555,7 @@ def make_svg_elements(self): + self.make_flake_linear_dimensions() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", @@ -642,7 +642,7 @@ def make_svg_elements(self): + self.make_dimensioned_gradient_lines() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", @@ -694,7 +694,7 @@ def make_gradient_annotations(self): def make_svg_elements(self): return super().make_svg_elements() + self.make_gradient_annotations() - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -712,7 +712,7 @@ def make_svg_elements(self): + super().make_svg_elements() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ super().make_filename(), @@ -813,7 +813,7 @@ def make_svg_elements(self): + super().make_svg_elements() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", @@ -880,7 +880,7 @@ def make_svg_elements(self): + super().make_svg_elements() ) - def make_filename(self, extras: tuple[str] = ()) -> str: + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 79e47e4..ca022de 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -144,7 +144,7 @@ def make_svg_elements(self): ), ) - def make_filename(self, colors="default", extras: tuple[str] = ()): + def make_filename(self, colors="default", extras: tuple[str, ...] = ()): return "-".join( [ self.logotype_characters.lower(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 3a8d89d..32f69c0 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -149,7 +149,7 @@ def make_named_lambda_points( ) return {name: point for name, point in zip(names, points)} - def make_filename(self, colors="default", extras: tuple[str] = ()): + def make_filename(self, colors="default", extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -340,7 +340,7 @@ def make_clean_flake_polygons_gradient(self): ) ) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index cf5c39f..1f3c478 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -263,7 +263,7 @@ def make_svg_element(self): def make_svg_elements(self): return (self.make_svg_element(),) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ "nixos", @@ -352,7 +352,7 @@ def elements_bounding_box(self): def make_svg_elements(self): return tuple(elem.make_svg_element() for elem in self.glyphs) - def make_filename(self, extras: tuple[str] = ()): + def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ self.characters.lower(), From a3871347847cddcf2ca777c450a0e79626333fdb Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 13:55:51 -0700 Subject: [PATCH 05/43] nixoslogo: fix and rename _init_canvas to _make canvas Rework so we don't need the conditional guard which allows type inference to work. --- .../nixoslogo/nixoslogo/artifacts/misuse.py | 31 +++++++------ .../nixoslogo/nixoslogo/core.py | 34 +++++++------- .../nixoslogo/nixoslogo/dimensioned.py | 45 +++++++++---------- 3 files changed, 52 insertions(+), 58 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index 4abd720..217a048 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -107,22 +107,21 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) - def _init_canvas(self): - if self.canvas is None: - min_x, min_y, max_x, max_y = self.elements_bounding_box - clear_space = self._get_clearspace() - - min_x += clear_space - min_y -= clear_space - max_x -= clear_space - max_y += clear_space - - self.canvas = Canvas( - min_x=min_x, - min_y=min_y, - width=max_x - min_x, - height=max_y - min_y, - ) + def _make_canvas(self) -> Canvas: + min_x, min_y, max_x, max_y = self.elements_bounding_box + clear_space = self._get_clearspace() + + min_x += clear_space + min_y -= clear_space + max_x -= clear_space + max_y += clear_space + + return Canvas( + min_x=min_x, + min_y=min_y, + width=max_x - min_x, + height=max_y - min_y, + ) class LogoScale(NixosLogo): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/core.py b/package-sets/python-packages/nixoslogo/nixoslogo/core.py index e8e1f57..c6d101a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/core.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/core.py @@ -188,9 +188,8 @@ def __init__( background_color: str | None = None, **kwargs: object, ): - self.canvas = canvas self.background_color: str | None = background_color - self._init_canvas() + self.canvas: Canvas = canvas if canvas is not None else self._make_canvas() @property @abstractmethod @@ -205,22 +204,21 @@ def make_svg_elements(self): ... @abstractmethod def make_filename(self, extras: tuple[str, ...] = ()) -> str: ... - def _init_canvas(self): - if self.canvas is None: - min_x, min_y, max_x, max_y = self.elements_bounding_box - clear_space = self._get_clearspace() - - min_x -= clear_space - min_y -= clear_space - max_x += clear_space - max_y += clear_space - - self.canvas = Canvas( - min_x=min_x, - min_y=min_y, - width=max_x - min_x, - height=max_y - min_y, - ) + def _make_canvas(self) -> Canvas: + min_x, min_y, max_x, max_y = self.elements_bounding_box + clear_space = self._get_clearspace() + + min_x -= clear_space + min_y -= clear_space + max_x += clear_space + max_y += clear_space + + return Canvas( + min_x=min_x, + min_y=min_y, + width=max_x - min_x, + height=max_y - min_y, + ) @property def canvas_bounding_box(self): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index ad1cb8a..d04a5c3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -23,14 +23,13 @@ def __init__( self.annotations = annotations self.clear_space = clear_space - def _init_canvas(self): - if self.canvas is None: - self.canvas = Canvas( - min_x=-2 * self.radius, - min_y=-2 * self.radius, - width=4 * self.radius, - height=4 * self.radius, - ) + def _make_canvas(self) -> Canvas: + return Canvas( + min_x=-2 * self.radius, + min_y=-2 * self.radius, + width=4 * self.radius, + height=4 * self.radius, + ) def make_diagonal_line(self, radius: Number) -> list[Number]: hexagon_points = self.make_hexagon_points(radius) @@ -463,14 +462,13 @@ def __init__( super().__init__(**kwargs) self.annotations = annotations - def _init_canvas(self): - if self.canvas is None: - self.canvas = Canvas( - min_x=-4 * self.ilambda.radius, - min_y=-4 * self.ilambda.radius, - width=8 * self.ilambda.radius, - height=8 * self.ilambda.radius, - ) + def _make_canvas(self) -> Canvas: + return Canvas( + min_x=-4 * self.ilambda.radius, + min_y=-4 * self.ilambda.radius, + width=8 * self.ilambda.radius, + height=8 * self.ilambda.radius, + ) def make_flake_construction_lines(self): return ( @@ -576,14 +574,13 @@ def __init__( super().__init__(**kwargs) self.annotations = annotations - def _init_canvas(self): - if self.canvas is None: - self.canvas = Canvas( - min_x=-2 * self.ilambda.radius, - min_y=-2 * self.ilambda.radius, - width=4 * self.ilambda.radius, - height=4 * self.ilambda.radius, - ) + def _make_canvas(self) -> Canvas: + return Canvas( + min_x=-2 * self.ilambda.radius, + min_y=-2 * self.ilambda.radius, + width=4 * self.ilambda.radius, + height=4 * self.ilambda.radius, + ) def make_dimensioned_gradient_lines(self): gradient_end_points = self.make_gradient_end_points() From bdaa077eab561b269877be013611055c91ff5294 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 13:59:21 -0700 Subject: [PATCH 06/43] nixoslogo: fix canvas parameters type hints in layout.py --- .../python-packages/nixoslogo/nixoslogo/layout.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/layout.py b/package-sets/python-packages/nixoslogo/nixoslogo/layout.py index baa7fe5..b00c1be 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/layout.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/layout.py @@ -5,10 +5,10 @@ @dataclass(kw_only=True) class Canvas: - min_x: int - min_y: int - width: int - height: int + min_x: float + min_y: float + width: float + height: float @property def max_y(self): From 198d4261a18bcb1df4512ed3a7eccf7e6ca70f69 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 17:28:00 -0700 Subject: [PATCH 07/43] nixoslogo: return a flat list of elements from make_svg_elements The abstract make_svg_elements had no return annotation and inferred None, so make_svg could not concatenate it with make_svg_background. Implementations returned tuples nested up to three deep. Three in dimensioned.py were annotated svg.SVG but returned concatenated tuples. Add flatten_svg_elements and a recursive SvgElements alias to core. The abstract and all nineteen implementations now return list[svg.Element]. svg-py declares elements as list[Element] | None. Passing tuples was an error at fifteen elements= call sites; twelve are fixed here. In dimensioned.py the concatenation operands become helper arguments. The + operator would raise TypeError once super().make_svg_elements() returned a list and the other operand was a tuple. svg-py joins nested sequences with a space. Flattening drops that whitespace from 72 of the 96 artifacts. Element ancestor paths are unchanged and compare-artifacts reports all 96 unchanged. Update the affected outputHash values. Assisted-by: Claude Code (Claude Opus 5) --- .../nixoslogo/nixoslogo/annotations.py | 5 +- .../nixoslogo/artifacts/clearspace.py | 6 +- .../nixoslogo/nixoslogo/artifacts/misuse.py | 10 +- .../nixoslogo/nixoslogo/core.py | 26 +++- .../nixoslogo/nixoslogo/dimensioned.py | 139 +++++++++--------- .../nixoslogo/nixoslogo/logo.py | 5 +- .../nixoslogo/nixoslogo/logomark.py | 11 +- .../nixoslogo/nixoslogo/logotype.py | 9 +- .../nixos-logo-clearspace/package.nix | 2 +- .../nixos-logomark-clearspace/package.nix | 2 +- .../nixos-logotype-clearspace/package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../nixos-logo-dimensioned/package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../nixos-logotype-dimensioned/package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../package.nix | 2 +- .../misuse/nixos-logo-misuse-crop/package.nix | 2 +- .../nixos-logo-misuse-lambdaprime/package.nix | 2 +- .../nixos-logo-misuse-scale/package.nix | 2 +- .../nixos-logomark-misuse-mirror/package.nix | 2 +- .../nixos-logomark-misuse-rotate/package.nix | 2 +- 80 files changed, 189 insertions(+), 166 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index ff3b271..9b77559 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -10,6 +10,7 @@ CHARACTER_GLYPHNAME_MAP, DEFAULT_JURA_TRANSFORMS, BaseRenderable, + flatten_svg_elements, get_nixos_annotation_font_file, ) from nixoslogo.geometry import Point @@ -94,8 +95,8 @@ def _scale_glyphs(self): def _get_clearspace(self): return 0 - def make_svg_elements(self): - return tuple(elem.make_svg_element() for elem in self.glyphs) + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements(*(elem.make_svg_element() for elem in self.glyphs)) def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index 308a49c..77b02d4 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -3,7 +3,7 @@ import svg from nixoslogo.annotations import Annotations -from nixoslogo.core import BaseRenderable, ClearSpace +from nixoslogo.core import BaseRenderable, ClearSpace, flatten_svg_elements from nixoslogo.logging_config import setup_logging from nixoslogo.logo import Lambda, NixosLogo from nixoslogo.logomark import Logomark @@ -47,8 +47,8 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: + list(extras) ) - def make_svg_elements(self): - return ( + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( self.make_greyscale_def(), self.make_grid_lines(), self.make_clearspace_lines(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index 217a048..7a7c8b9 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -2,7 +2,7 @@ import svg -from nixoslogo.core import ClearSpace, LogotypeStyle +from nixoslogo.core import ClearSpace, LogotypeStyle, flatten_svg_elements from nixoslogo.layout import Canvas from nixoslogo.logging_config import setup_logging from nixoslogo.logo import NixosLogo @@ -43,8 +43,8 @@ def elements_bounding_box(self) -> tuple[float, float, float, float]: self.circumradius, ) - def make_svg_elements(self): - return ( + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( svg.G( transform=[svg.Rotate(30)], elements=super().make_svg_elements(), @@ -75,8 +75,8 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) - def make_svg_elements(self): - return ( + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( svg.G( transform=[svg.Scale(-1, 1)], elements=super().make_svg_elements(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/core.py b/package-sets/python-packages/nixoslogo/nixoslogo/core.py index c6d101a..5b21476 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/core.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/core.py @@ -1,10 +1,11 @@ import os import string from abc import ABC, abstractmethod +from collections.abc import Sequence from enum import Enum, auto from functools import partial from pathlib import Path -from typing import NotRequired, TypedDict, cast +from typing import NotRequired, TypeAlias, TypedDict, cast import svg import tomllib @@ -22,9 +23,22 @@ class PaletteColor(TypedDict): tints: NotRequired[dict[str, list[float]]] +SvgElements: TypeAlias = "svg.Element | Sequence[SvgElements]" + + # === Functions === +def flatten_svg_elements(*elements: SvgElements) -> list[svg.Element]: + flat: list[svg.Element] = [] + for element in elements: + if isinstance(element, Sequence): + flat.extend(flatten_svg_elements(*element)) + else: + flat.append(element) + return flat + + def get_path_from_envvar(envvar: str) -> Path: path = os.getenv(envvar) if not path: @@ -199,7 +213,7 @@ def elements_bounding_box(self) -> tuple[float, float, float, float]: ... def _get_clearspace(self) -> float: ... @abstractmethod - def make_svg_elements(self): ... + def make_svg_elements(self) -> list[svg.Element]: ... @abstractmethod def make_filename(self, extras: tuple[str, ...] = ()) -> str: ... @@ -229,11 +243,13 @@ def canvas_bounding_box(self): self.canvas.min_y + self.canvas.height, ) - def make_svg_background(self): + def make_svg_background(self) -> list[svg.Element]: return ( - () + [] if self.background_color is None - else self.canvas.make_svg_background(fill=self.background_color) + else flatten_svg_elements( + self.canvas.make_svg_background(fill=self.background_color) + ) ) def make_svg(self): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index d04a5c3..bf56f01 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -4,7 +4,7 @@ from svg._types import Number from nixoslogo.annotations import Annotations -from nixoslogo.core import ClearSpace +from nixoslogo.core import ClearSpace, flatten_svg_elements from nixoslogo.geometry import Point, Points from nixoslogo.layout import Canvas from nixoslogo.logo import NixosLogo @@ -183,15 +183,15 @@ def make_lambda_linear_dimensions(self): for index, opts in enumerate(options) ) - def make_svg_elements(self): - return ( - self.canvas.make_axis_lines() - + self.annotations.dimension_lines.make_dimension_arrow_defs() - + self.make_lambda_construction_lines() - + self.make_lambda_main_diagonal() - + self.make_lambda_off_diagonal() - + self.make_lambda_polygons() - + self.make_lambda_linear_dimensions() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.canvas.make_axis_lines(), + self.annotations.dimension_lines.make_dimension_arrow_defs(), + self.make_lambda_construction_lines(), + self.make_lambda_main_diagonal(), + self.make_lambda_off_diagonal(), + self.make_lambda_polygons(), + self.make_lambda_linear_dimensions(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -231,13 +231,13 @@ def make_lambda_angular_dimensions(self): for index, opts in enumerate(options) ) - def make_svg_elements(self) -> svg.SVG: - return ( - self.canvas.make_axis_lines() - + self.annotations.dimension_lines.make_dimension_arrow_defs() - + self.make_lambda_construction_lines() - + self.make_lambda_polygons() - + self.make_lambda_angular_dimensions() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.canvas.make_axis_lines(), + self.annotations.dimension_lines.make_dimension_arrow_defs(), + self.make_lambda_construction_lines(), + self.make_lambda_polygons(), + self.make_lambda_angular_dimensions(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -339,15 +339,15 @@ def make_named_lambda_vertices(self): for point, annotation, translation in named_annotations.values() ) - def make_svg_elements(self) -> svg.SVG: - return ( - self.canvas.make_axis_lines() - + self.make_lambda_construction_lines() - + self.make_lambda_main_diagonal() - + self.make_lambda_off_diagonal() - + self.make_lambda_polygons() - + self.make_dotted_lambda_vertices() - + self.make_named_lambda_vertices() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.canvas.make_axis_lines(), + self.make_lambda_construction_lines(), + self.make_lambda_main_diagonal(), + self.make_lambda_off_diagonal(), + self.make_lambda_polygons(), + self.make_dotted_lambda_vertices(), + self.make_named_lambda_vertices(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -431,15 +431,15 @@ def make_parametric_annotations(self): return radius + thickness + gap - def make_svg_elements(self) -> svg.SVG: - return ( - self.canvas.make_axis_lines() - + self.annotations.dimension_lines.make_dimension_arrow_defs() - + self.make_lambda_construction_lines() - + self.make_lambda_main_diagonal() - + self.make_lambda_off_diagonal() - + self.make_lambda_polygons() - + self.make_parametric_annotations() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.canvas.make_axis_lines(), + self.annotations.dimension_lines.make_dimension_arrow_defs(), + self.make_lambda_construction_lines(), + self.make_lambda_main_diagonal(), + self.make_lambda_off_diagonal(), + self.make_lambda_polygons(), + self.make_parametric_annotations(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -543,14 +543,14 @@ def make_flake_polygons_for_dimensions(self): for lambda_points in flake_points ) - def make_svg_elements(self): - return ( - self.make_flake_polygons_for_dimensions() - + self.canvas.make_axis_lines() - + self.annotations.dimension_lines.make_dimension_arrow_defs() - + self.ilambda.make_lambda_construction_lines() - + self.make_flake_construction_lines() - + self.make_flake_linear_dimensions() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.make_flake_polygons_for_dimensions(), + self.canvas.make_axis_lines(), + self.annotations.dimension_lines.make_dimension_arrow_defs(), + self.ilambda.make_lambda_construction_lines(), + self.make_flake_construction_lines(), + self.make_flake_linear_dimensions(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -630,13 +630,13 @@ def make_dimensioned_gradient_lines(self): ] ) - def make_svg_elements(self): - return ( - self.canvas.make_axis_lines() - + self.annotations.dimension_lines.make_dimension_arrow_defs() - + self.ilambda.make_lambda_construction_lines() - + self.ilambda.make_lambda_polygons() - + self.make_dimensioned_gradient_lines() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.canvas.make_axis_lines(), + self.annotations.dimension_lines.make_dimension_arrow_defs(), + self.ilambda.make_lambda_construction_lines(), + self.ilambda.make_lambda_polygons(), + self.make_dimensioned_gradient_lines(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -688,8 +688,11 @@ def make_gradient_annotations(self): ), ) - def make_svg_elements(self): - return super().make_svg_elements() + self.make_gradient_annotations() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + super().make_svg_elements(), + self.make_gradient_annotations(), + ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( @@ -702,11 +705,11 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: class DimensionedLogomarkGradientBackground(DimensionedLogomarkGradient): - def make_svg_elements(self): - return ( - self.make_flake_gradients_defs() - + self.canvas.make_svg_background(fill=f"url(#{self.css_color_names[0]})") - + super().make_svg_elements() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.make_flake_gradients_defs(), + self.canvas.make_svg_background(fill=f"url(#{self.css_color_names[0]})"), + super().make_svg_elements(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -802,12 +805,12 @@ def dimension_spacings(self): for (point1, point2), offset, side in zip(points, offsets, sides) ) - def make_svg_elements(self): - return ( - self.svg_bounding_box() - + self.dimension_cap_height() - + self.dimension_spacings() - + super().make_svg_elements() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.svg_bounding_box(), + self.dimension_cap_height(), + self.dimension_spacings(), + super().make_svg_elements(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: @@ -870,11 +873,11 @@ def dimension_bearing(self): ), ) - def make_svg_elements(self): - return ( - self.dimension_cap_height() - + self.dimension_bearing() - + super().make_svg_elements() + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( + self.dimension_cap_height(), + self.dimension_bearing(), + super().make_svg_elements(), ) def make_filename(self, extras: tuple[str, ...] = ()) -> str: diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index ca022de..78eef76 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -11,6 +11,7 @@ LogoLayout, LogomarkColors, LogotypeStyle, + flatten_svg_elements, ) from nixoslogo.logomark import Lambda, Logomark from nixoslogo.logotype import ( @@ -135,8 +136,8 @@ def _get_clearspace(self): case _: raise Exception(f"Unknown ClearSpace: {self.clear_space}") - def make_svg_elements(self): - return ( + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( self.logomark.make_svg_elements(), svg.G( transform=[self.logotype_transform], diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 32f69c0..7f56741 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -11,6 +11,7 @@ ClearSpace, ColorStyle, LogomarkColors, + flatten_svg_elements, ) from nixoslogo.geometry import Point, Points, Vector, cosd, sind @@ -61,8 +62,8 @@ def _get_clearspace(self): case _: raise Exception(f"Unknown ClearSpace: {self.clear_space}") - def make_svg_elements(self): - return ( + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements( svg.Polygon( points=self.make_lambda_points().to_list(), fill=self.color, @@ -233,12 +234,12 @@ def _make_css_color_names(self): case _: raise Exception(f"Unknown ColorStyle: {self.color_style}") - def make_svg_elements(self): + def make_svg_elements(self) -> list[svg.Element]: match self.color_style: case ColorStyle.FLAT: - return self.make_clean_flake_polygons_flat() + return flatten_svg_elements(self.make_clean_flake_polygons_flat()) case ColorStyle.GRADIENT: - return ( + return flatten_svg_elements( self.make_flake_gradients_defs(), self.make_clean_flake_polygons_gradient(), ) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 1f3c478..8b1d8c7 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -17,6 +17,7 @@ BaseRenderable, ClearSpace, LogotypeStyle, + flatten_svg_elements, get_nixos_logotype_font_file, ) from nixoslogo.logging_config import setup_logging @@ -260,8 +261,8 @@ def make_svg_element(self): case _: raise Exception("Unknown LogotypeStyle") - def make_svg_elements(self): - return (self.make_svg_element(),) + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements(self.make_svg_element()) def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( @@ -349,8 +350,8 @@ def elements_bounding_box(self): with_lead_spacing = (characters_box[0] - self.spacings[0],) + characters_box[1:] return with_lead_spacing - def make_svg_elements(self): - return tuple(elem.make_svg_element() for elem in self.glyphs) + def make_svg_elements(self) -> list[svg.Element]: + return flatten_svg_elements(*(elem.make_svg_element() for elem in self.glyphs)) def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( diff --git a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logo-clearspace/package.nix b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logo-clearspace/package.nix index e38c82a..57e8056 100644 --- a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logo-clearspace/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logo-clearspace/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-clearspace"; - outputHash = "sha256-2KzUQsyjcwfAH2fqUQrSZmJBSO0sMzC32lvptFSyVOw="; + outputHash = "sha256-+qZUvXFz27NfDS8CuwK9axmVLbvp/C3hRkPXjSHw3GA="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logomark-clearspace/package.nix b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logomark-clearspace/package.nix index a5ee886..0daec6c 100644 --- a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logomark-clearspace/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logomark-clearspace/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-clearspace"; - outputHash = "sha256-f2LSFFGeJlkrhFHNN/2drhQr7mzlQ9VMBaXPk89P3p8="; + outputHash = "sha256-E4LIpv5fNcSQfD4GXoy3xfaUAm126kM0yV3XxqZM/O4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logotype-clearspace/package.nix b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logotype-clearspace/package.nix index 1b20823..6d3e6e5 100644 --- a/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logotype-clearspace/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/clearspace/nixos-logotype-clearspace/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-clearspace"; - outputHash = "sha256-MKaFYf9/lxTWTdr2OfOMZU4CqtbAE/KmozY20xfPeXo="; + outputHash = "sha256-ieU5UYFA7q5DbgPuQ4dB/uIXxRRu1tGakbmmxJTC0/Y="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-angular/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-angular/package.nix index 8985da0..2d2f899 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-angular/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-angular/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-lambda-dimensioned-angular"; - outputHash = "sha256-bKwUdEq0RDft5O8hEJTznPPppIK7xwUhx4FWCe8aXvg="; + outputHash = "sha256-0AM2MucU7L3zfx9bpvdB7xF+pjf3zgmcXxq306sgSHs="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-annotated-parameters/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-annotated-parameters/package.nix index 24df387..2451661 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-annotated-parameters/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-annotated-parameters/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-lambda-dimensioned-annotated-parameters"; - outputHash = "sha256-l+FhSHMKZIOwe1xw0gccMBJ5SQD3VT10zgSRssZZ40k="; + outputHash = "sha256-fCmGIbHvDOf1ib6+TTgimbho4M42JbnRLwgM7CC4Its="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-linear/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-linear/package.nix index e371290..c03fee8 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-linear/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-lambda-dimensioned-linear/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-lambda-dimensioned-linear"; - outputHash = "sha256-l+0RJGciZ77vdJXipJwuKmwpbdzCBe2WEZvnXiZYya0="; + outputHash = "sha256-3vayqRaTFO5HBvI4JZTqbI7x3aum45uytCFvX0kkUj8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logo-dimensioned/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logo-dimensioned/package.nix index 1c6afb6..6b668e1 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logo-dimensioned/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logo-dimensioned/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-dimensioned"; - outputHash = "sha256-XG26AAadjET63TIhdlGEjinntkpMOTcjbd1lxzF42No="; + outputHash = "sha256-0x2b3JebiKHSXjsH+bGSMCxge0I6e0lrzwOsSVLtcQQ="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-gradient-annotated/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-gradient-annotated/package.nix index 054edcd..e43632c 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-gradient-annotated/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-gradient-annotated/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-dimensioned-gradient-annotated"; - outputHash = "sha256-8xIAlGOhmbf1h8CMKWUELnSDbhJ3rCTJW0kd9cjmLqU="; + outputHash = "sha256-yFupUdgrzCt9KXxVgczKETRnuxl5WT0YQRrKY2gVHVU="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-linear/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-linear/package.nix index 5f21e5a..03a82b0 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-linear/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logomark-dimensioned-linear/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-dimensioned-linear"; - outputHash = "sha256-bYyyE4c7UX2yQtbu1PBSfvPSo9CGMXMSgvCrbIVhAn0="; + outputHash = "sha256-UUPDC28b71PoXXmNpBVwDzP76Qna8DZoXoHFcm0zAV4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/package.nix b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/package.nix index 6224fde..1703f49 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-dimensioned"; - outputHash = "sha256-Ksqgr1MkWceOLZJZbB3guhAetv37N91wtb1agTQ6S5I="; + outputHash = "sha256-VUt20f8DNOTEBNWJy7GuRPLWvWBVWHgdK8zVDIrucS0="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-horizontal-none/package.nix index 8c445b8..dfee969 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-horizontal-none"; - outputHash = "sha256-zsuhKB9Yd9NcWqDy3GvSonWYDe36hi/55h7T3dzkM/4="; + outputHash = "sha256-0HJUlWpIHWu4ohaOTRU2TXHLh1R5ytVqIAe/Ih93Dko="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-vertical-none/package.nix index 81956c8..1ef12cf 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-black-flat-black-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-vertical-none"; - outputHash = "sha256-EHQ0Q86uNMoCgexIlvZh+CoV2sFmH8CgK9atWhPGl04="; + outputHash = "sha256-TF6XUSLsiw+D+6Ke8NBV1tEJHezW/8KdV4j2Y/rtICM="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-horizontal-none/package.nix index ede57d7..a249f20 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-horizontal-none"; - outputHash = "sha256-oCaJTDZMqOjvf2nWXktbJaiXDD4r9y9f8ggjI4cflpA="; + outputHash = "sha256-FlekeTiWZQ7WaJm4iajeZU+e74KP139wJo9zArmbbYA="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-vertical-none/package.nix index 691e135..26bb844 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-black-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-vertical-none"; - outputHash = "sha256-t9fzJYP+s22ayKPXb3tuu6g9CD4kVQ9cP5bFRs9Ofb4="; + outputHash = "sha256-f8R8LOpUuU6MvOboi0TFMlv6gfoM6B+XDbMjIheUU/E="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-horizontal-none/package.nix index da0e53a..eb2f7b6 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-horizontal-none"; - outputHash = "sha256-I26B04Szu8MUUnPMBTarrkiJEmwYUndTPt5BFAUW0hY="; + outputHash = "sha256-6B6LHrXlwPjojDpiubYdupyNPZu2YY6h8pXVoLF4bUE="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-vertical-none/package.nix index a040d74..df31594 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-default-gradient-white-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-vertical-none"; - outputHash = "sha256-3ce8HDQnJ/F89FX4slESS/X1wKgHpiwT5qLiOXgUb0s="; + outputHash = "sha256-UA7dZf4wroZKC1PLldRlb+r/itsznB5lmyqTRUHUt6Y="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-horizontal-none/package.nix index f87c8e5..01aba82 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-horizontal-none"; - outputHash = "sha256-OV2xzy2aMHDI/eRN7sOIwhrn979d8JUdKH1yf9lSffI="; + outputHash = "sha256-vZIGT0uLE1Q8WLEJKl4UEmjCyshKJYjYDKJzHbORtjc="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-vertical-none/package.nix index 9653268..ce418ce 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-black-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-vertical-none"; - outputHash = "sha256-9YM2iuOa7FNjGgGUu/att9SjcDjr2NYA/vhuOmc8JyU="; + outputHash = "sha256-i9Thq9SrLtIV6EeM4jMvDhtabCDPnh2R6rk0hXtj37s="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-horizontal-none/package.nix index 0a6de35..3e5473c 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-horizontal-none"; - outputHash = "sha256-9yVrwfBzTGJIH/ZI79qgD4sn4MMn7+6tYZQag0u8LU4="; + outputHash = "sha256-0A1XviV/RE4hB1vJV8wZYolth4Fmk8gEmImUTCjHfQo="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-vertical-none/package.nix index 9c9d741..e253b14 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-rainbow-gradient-white-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-vertical-none"; - outputHash = "sha256-F79fcooHCl28QTY0JPgU/CxKjOZpsaTukAN4O67zJRY="; + outputHash = "sha256-ui6OVDd4YYYQn3FgS99K0jrmvGnYtfXpVDPG+5RwkMs="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-horizontal-none/package.nix index f087387..fe4562c 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-horizontal-none"; - outputHash = "sha256-cKUxz93fQ/UXYZLzTIw2XDkFmemihoPBRZqcv350gWk="; + outputHash = "sha256-UpaYO7YEBst+XOD6ILJQ9g518cLlzb8rYEYMeiHfDG4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-vertical-none/package.nix index 08b4d69..c2943ab 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-trans-gradient-white-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-vertical-none"; - outputHash = "sha256-i0sqj250GXONVe4N7+AlolAhzoNlGFisfbau3nWoj8w="; + outputHash = "sha256-eiWqko1Uw3D8b0xXU6ZXyHpOCmhrXjLnxX1GSPrDoi8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-horizontal-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-horizontal-none/package.nix index b1eaaa8..6696b6a 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-horizontal-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-horizontal-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-horizontal-none"; - outputHash = "sha256-fa3Ktu+9PWQl1E0pXrF/xI7n5i1KLHpJ8vzdLKVe51E="; + outputHash = "sha256-GR9xH1RtNFdBfj64/Dvnr7ov/hIQ1CsLtbG7bd+5kq0="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-vertical-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-vertical-none/package.nix index e7814f7..89fa501 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-vertical-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logo-white-flat-white-regular-vertical-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-vertical-none"; - outputHash = "sha256-w/uQnD8nJOfO9oFqN9W26xYJ8cBj0dfnUtGjNQPMRnA="; + outputHash = "sha256-yegl3sTj8VA1X0Q9V/aRqll5bvnyQyzWT/O1E6k2bWg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-default-gradient-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-default-gradient-none/package.nix index 14b601e..fcc6afc 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-default-gradient-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-default-gradient-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-default-gradient-none"; - outputHash = "sha256-NMUPemzi4Wt9HYff0hu3BJKRcRk7WkIeLdcymgLYvag="; + outputHash = "sha256-OI1mzdM3rLjQ8vdDOV+X2t0FUEhniavgxAI9NfV7Z5E="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-rainbow-gradient-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-rainbow-gradient-none/package.nix index 4245e3a..c6c8e9e 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-rainbow-gradient-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-rainbow-gradient-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-rainbow-gradient-none"; - outputHash = "sha256-BB3U9Q7rAf3DjtyLoQRLG2SCRPe3R1UwgrydA8rg32o="; + outputHash = "sha256-yAX7kid1Q9lhIBNpadT9gCAoGNdoBZhwigI6eiSYr30="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-trans-gradient-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-trans-gradient-none/package.nix index f67655d..3a5a9c9 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-trans-gradient-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logomark-trans-gradient-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-trans-gradient-none"; - outputHash = "sha256-x3dA6rPK2dnR9dZMLlIkDFChETGKv3rsfKl/gCZzDA4="; + outputHash = "sha256-C/0GpduB2OOh1qTOnqxEU710LY97JkZGh9rVQFrUOsk="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-black-coloredx-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-black-coloredx-none/package.nix index 4194c65..fa8b253 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-black-coloredx-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-black-coloredx-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-black-coloredx-none"; - outputHash = "sha256-m+8mWslVWnknaGVA2xrCxqIjIw8lyjU/nke9q6Bflyo="; + outputHash = "sha256-Y0eNuZGi3RTVxc4lXDOY2EM7FgNTrc7pCbnCI42mDgg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-white-coloredx-none/package.nix b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-white-coloredx-none/package.nix index 02099de..0ae1449 100644 --- a/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-white-coloredx-none/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/internal/nixos-logotype-white-coloredx-none/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-white-coloredx-none"; - outputHash = "sha256-2o9I5xBKUMXPsw7Yi7ZuGGfMGPbQghpYXqB5yc3XNn4="; + outputHash = "sha256-Jh91mbRaMMWlqgcY5mk8RkR6NSNbHTUcAyeIUBSwpS8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-minimal/package.nix index 9669d58..f6e6eb3 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-horizontal-minimal"; - outputHash = "sha256-URR6uEodYh7fmClN5QQBR16kKu+uPzaeOBJny09jb1c="; + outputHash = "sha256-EGTUr2slTrT87MlAcS8ygwInjdwaVCu/hb+1Ci2Uvpg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-recommended/package.nix index 1b44d11..8017e95 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-horizontal-recommended"; - outputHash = "sha256-XVTihRfleyhD6HAHrLzo8ckZ9O8vkoFzoWRUUxkE2vo="; + outputHash = "sha256-Pfx7WRL/cpxrqmsTw2v0+ys/UnXUW6Bl1ZXatw6riD4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-minimal/package.nix index 258c9c3..fa2a122 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-vertical-minimal"; - outputHash = "sha256-ehDKqLNh/Oijv5fmMTuM0CEBRmM+tvxGTypl/p1Nouc="; + outputHash = "sha256-owixjFkiodAP9vmwj0J1kxQzG0jC5nbhFVIeTRqm78w="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-recommended/package.nix index 5243df6..db34963 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-black-flat-black-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-black-flat-black-regular-vertical-recommended"; - outputHash = "sha256-Wmcf448a6xenN/VquQ7qmRZPWeSgPLxD4JIJdcqfWIo="; + outputHash = "sha256-wIienVz5/nGOB2TuR+sdAQpGY+6T8tqZALLyeXj6u9M="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-minimal/package.nix index 9174a1f..0877c3c 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-horizontal-minimal"; - outputHash = "sha256-eUq4k6c2Jlbu5e6BjlW1EiJrik18741cKN34diWiVss="; + outputHash = "sha256-cLN5e3t9Fx2vhQpCN/7PCXYQUR0+rZnnOAbsV8oLJok="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-recommended/package.nix index 689b6f8..f734f12 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-horizontal-recommended"; - outputHash = "sha256-a42b5ZaPkfH2Fvs3NU6w/I2uyf4+/A/e6bi54rovJrw="; + outputHash = "sha256-sfhdmTKZsmdsNA8IjB0IIvkRAl4vUOJruIJgp4Oy1LE="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-minimal/package.nix index 7562d54..fc978d6 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-vertical-minimal"; - outputHash = "sha256-L+mKuWhiYnf2tT5eNvfNDFbIUTYRiW1NdzKegruaeHU="; + outputHash = "sha256-ZlxdM/RAVuLnpIJa82Jq+mJsEcfzmuYU1+xL421hqqs="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-recommended/package.nix index 6d49d06..248d3ea 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-black-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-black-regular-vertical-recommended"; - outputHash = "sha256-FcatCth8jbeSGkA/nRETP1D9xG0GMcImUZ7xulOKrko="; + outputHash = "sha256-h05HVfK4SG7RbSlHFHxW2kzeLXQv2JwTqw+IvftkGxI="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-minimal/package.nix index 9e8533e..570a382 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-horizontal-minimal"; - outputHash = "sha256-6PurCgMalta1GK0W23e5c024IzU3LUAsbLV9tgbpQZk="; + outputHash = "sha256-4emi0mG3yjGnj12HUdhnLxQIxriwZw+jfVgiubA7y4g="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-recommended/package.nix index 6bf7111..7472e24 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-horizontal-recommended"; - outputHash = "sha256-EbLod3EzJuaoo9Wm8gUeAwONw7S7/bViZmrf5BCa/sw="; + outputHash = "sha256-lm/GycahntOTHiSBga53iM9S2U2iqmFqyCw2XfwB+4g="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-minimal/package.nix index 1485819..880acd6 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-vertical-minimal"; - outputHash = "sha256-Y1WBBUHa8Axr095VEUQH3wluIz3DQZhF4lrx69MbIQo="; + outputHash = "sha256-3Jewqq8ptxTn8o2bu8wbssPznFXWrqbXcNySwzB0/nQ="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-recommended/package.nix index 70a11ba..90a2716 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-default-gradient-white-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-default-gradient-white-regular-vertical-recommended"; - outputHash = "sha256-tPaDMIOIaiIxXXdecV+uiw/3UtpyZnhJ//jCAQjN2Ng="; + outputHash = "sha256-EwCfj1T6nzxJ9PAO+/PLFnSuhYVJKpn6qmUfAM1AdTg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-minimal/package.nix index 8c9c9d0..b43a647 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-horizontal-minimal"; - outputHash = "sha256-AHiNNSsdgv2nMY7XHcCXS+UzukpdCO1DTKZihNk4KSw="; + outputHash = "sha256-8dJ6RDHL6GnAMRLbLhfsHkp1ZVs5LxK/DI0sIDhp7F0="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-recommended/package.nix index 3642a3f..b01718d 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-horizontal-recommended"; - outputHash = "sha256-DzVMBMCouIf/jr5t9C/hMw1A82sfYZEJ87A22r0pxiE="; + outputHash = "sha256-SgL8wSrC3NZSIVD18WcRoH9HWnSsSn01WyCD321Zz98="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-minimal/package.nix index 9fc694f..45b47ac 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-vertical-minimal"; - outputHash = "sha256-/UAY+Rz7n+bXePAcuXSCnm16yIzABZya6Cnxr4sk4/4="; + outputHash = "sha256-u46lI+MplV21QJzkpAxt8zze7rMmOAjlaaJyQAwv0j4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-recommended/package.nix index 2abdb75..926736e 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-black-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-black-regular-vertical-recommended"; - outputHash = "sha256-dweJ50oE0ZnGSglzcgTxLDhCRuvwyLJEZ+0xFnoqi4E="; + outputHash = "sha256-lwbP9UGj55fc6gJPcxmpHqc2DA6IPJAgUXTPrIwciDg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-minimal/package.nix index d021158..b00ad63 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-horizontal-minimal"; - outputHash = "sha256-bEWBRJ/wHyl7vBXx9gBNCxX67QxaIhkpCkUPh0ocK4o="; + outputHash = "sha256-xyLgDMZfL+RILlxWuShckR80z8z7YFcU7BQLab+2tm4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-recommended/package.nix index 7ab473c..27141a3 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-horizontal-recommended"; - outputHash = "sha256-7irDWUpApJ8Ia+r0s3ELswRPWUk7KWhMYKbD//YkD3I="; + outputHash = "sha256-2suQ/KjvQH6DLbVHPGTPmE1DwU4swzNtHaRA5hySCMU="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-minimal/package.nix index 9ef5520..039cd6a 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-vertical-minimal"; - outputHash = "sha256-TCyIVCmLCe4PVoOpB6D4BMqOmO+qs7AVpiWI8Iw5t2g="; + outputHash = "sha256-xWupEO0fwyTrhLYjtqMZDq9cirfUotYed8exRL/9WdQ="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-recommended/package.nix index aa97434..79be9f1 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-rainbow-gradient-white-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-rainbow-gradient-white-regular-vertical-recommended"; - outputHash = "sha256-r4pymoCIkaAFrhj2EOIsWpMOE5ZQLFLRTCef7rHqGcg="; + outputHash = "sha256-wc3T0ZbXXPTXgZUk+2AeqHhXxTNyi5tRPuiemtisic4="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-minimal/package.nix index db7fc58..64ecc4a 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-horizontal-minimal"; - outputHash = "sha256-W4JJ2Cwioz7hc6mAQUMGuodAcjw6Xbf6y7u0CvR1IDg="; + outputHash = "sha256-UK4XdSNLALa0YVanHFI/vU9efObRv7y6ZQbLNChC3TA="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-recommended/package.nix index e91e372..fa17d72 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-horizontal-recommended"; - outputHash = "sha256-EmJLrzTjeKN/ydSn/ue76eewYqJn564rhvQ/nfzyOhs="; + outputHash = "sha256-nN8BNBdZ5Nfv3RL+lBn6hjD0i6QmGzK5DnnTcTRQYQg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-minimal/package.nix index 1d25470..c599b04 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-vertical-minimal"; - outputHash = "sha256-0JY3h764F34kcStKEhMiGpAYkK4RJN+8+18/tw2Z8LA="; + outputHash = "sha256-o8mgRUggwLyqs3QjeQnu0YU0S3eLOmgz/iY6Q6HR170="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-recommended/package.nix index 819d026..d2f69d4 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-trans-gradient-white-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-trans-gradient-white-regular-vertical-recommended"; - outputHash = "sha256-owbjMRYoSL/gLCgQe3afYl0OH97gR/8V3v78vYgr4JE="; + outputHash = "sha256-wziN3VSA/F69jCNOsHnxvDhrD3Kw5ReI7mmAxpa3ZVs="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-minimal/package.nix index 97ebfe7..b1b73fb 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-horizontal-minimal"; - outputHash = "sha256-xqfUqsQH4P/B6D6Qb1SZj/WwaQ2/zft4cDdBE/V/Ng8="; + outputHash = "sha256-i7nbJrHZ/Zj1KKhbVA5ian5ufuVbPkSUs1NF5gCSrec="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-recommended/package.nix index 8ae56e4..31f1e48 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-horizontal-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-horizontal-recommended"; - outputHash = "sha256-hoLie+tFprsAkcZBewVgM2W/07KwHBzvdljda9vBaGA="; + outputHash = "sha256-hnDGr4yj1D9GJWzNDS8diT1h9HXDwE0q1irfvdOl/MM="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-minimal/package.nix index 138b8c2..6fe77fb 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-vertical-minimal"; - outputHash = "sha256-+4ARIr6yXTf3zphjS2VDk11sEaK1HyLXeZM+IJq/Sb8="; + outputHash = "sha256-rUcxYjV1dTVIOxnw0ht9qPmSRF5st/rRfgxW34ZAel8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-recommended/package.nix index 3430e56..7e2865b 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logo-white-flat-white-regular-vertical-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-white-flat-white-regular-vertical-recommended"; - outputHash = "sha256-RvVRYENA5sSFMIOOOADBeGMF2Zf/eOpgq4fD4xJw1uI="; + outputHash = "sha256-kwt0jnFzEJ5E9sHadqR2IMbcbDCZFyyoaQ90vUWgifI="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-minimal/package.nix index cf89e9e..bab7124 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-default-gradient-minimal"; - outputHash = "sha256-Sm3X9mK7208H2FHr82tm16SqikeMArwwo3wtnofjxgg="; + outputHash = "sha256-aj9ll6mX8Z1mcsiZaCRvXH0NSLowwbFdiDrBKs5HYVg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-recommended/package.nix index 352e8f0..5d3dcff 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-default-gradient-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-default-gradient-recommended"; - outputHash = "sha256-34sw86tPXubcfL+MBGzmsX6PEaG0F9r1n3Rn0WHnxZQ="; + outputHash = "sha256-Ub0nK7dFDX+hkxDqeQuKUgUbv6WuPXVkqw/fqFDbRA0="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-minimal/package.nix index dcf8454..e2c754b 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-rainbow-gradient-minimal"; - outputHash = "sha256-e1jpbIvt+2rNN9UGJfUbndefhczRq1to1a6GHvW9FuQ="; + outputHash = "sha256-qPyw0HG3PoSc2uZnzIe0pRpjib+yVOes5f+Xcf0PDo8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-recommended/package.nix index 8b26253..58851f6 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-rainbow-gradient-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-rainbow-gradient-recommended"; - outputHash = "sha256-uHM7vMhfL+oNiSWxx3nwMQvf6qgmxbaxmoHN0JXbDzM="; + outputHash = "sha256-0aQJWf0mFl5tCFpLLk96F9ftK090BAqCZ8cAtY5GAzM="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-minimal/package.nix index 93e776a..157100a 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-trans-gradient-minimal"; - outputHash = "sha256-lcCQ+v4NVnQzQbGSLRj9a91kKEpYvEZIhvLnYxPX40k="; + outputHash = "sha256-WQLWIez9d9sLZP0pjeCOCIm2Ukw1TI5Wy2dFzS0bv1c="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-recommended/package.nix index 0b8bc72..2cb1a6e 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logomark-trans-gradient-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-trans-gradient-recommended"; - outputHash = "sha256-luMbAS8Qr2y/FkKdckvFlT1pIsi97AmKglw++lEz6JE="; + outputHash = "sha256-GsL1OLCiF0snv+bVd+V/XKcQcQRXt0k3ctmj16v+IlM="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-minimal/package.nix index 9e05246..a748051 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-black-coloredx-minimal"; - outputHash = "sha256-fQB6znbnGQO3voD3xpMhRDYSqokfYuGQpB5tIOsHUP4="; + outputHash = "sha256-WOonXazEHq+DznXS8h0Lgir/Lgw+4EWlhUcEdVFQ01g="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-recommended/package.nix index 58a4ef5..b72c57a 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-black-coloredx-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-black-coloredx-recommended"; - outputHash = "sha256-zVzTwZIM768QQ2h0LNY3uh1ZiXgpvo7Zh3x2t2oqkQg="; + outputHash = "sha256-iXV/inspGubcotuh6/OBy0oN58tSQtyw7AmepcEgdYA="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-minimal/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-minimal/package.nix index c36c391..777b3c6 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-minimal/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-minimal/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-white-coloredx-minimal"; - outputHash = "sha256-te7GGSq5chZdlo7pXwXsePwzWa60XwVcdOaAVRoEX8I="; + outputHash = "sha256-aXpB00Pb3zdWRk1s4iqVzyJOQk7k6wU4AwSRn8O7uJQ="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-recommended/package.nix b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-recommended/package.nix index af610b6..08545ab 100644 --- a/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-recommended/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/media-kit/nixos-logotype-white-coloredx-recommended/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logotype-white-coloredx-recommended"; - outputHash = "sha256-YMNBRms8M3bmLkzEsqU5MbhNjqH55zXTjssVbDl5910="; + outputHash = "sha256-pyx0s/qumxLKyr+2MDBb/HwwM5fIRPk+NZfOEbPZUXo="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-crop/package.nix b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-crop/package.nix index 006d558..524e665 100644 --- a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-crop/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-crop/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-misuse-crop"; - outputHash = "sha256-cQLXt06V6c3kW0WfijsyfO6GnTw/Rchhr+AW5PMhWuQ="; + outputHash = "sha256-K0Q6CcGLOjWAsUznnbmJSQH7KZx4Upg4szOClXQaPZI="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-lambdaprime/package.nix b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-lambdaprime/package.nix index 360b2b2..4fdfe0e 100644 --- a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-lambdaprime/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-lambdaprime/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-misuse-lambdaprime"; - outputHash = "sha256-9amChIiqfTaoHbAbcBTs7cIY7YUJoUojAM8sBZEisz0="; + outputHash = "sha256-CcWYBFQMLgWyn10ofSkHUXXgvjJVVQN2EnOwPeZd1jg="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-scale/package.nix b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-scale/package.nix index ea8eb47..ebe6af2 100644 --- a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-scale/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logo-misuse-scale/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logo-misuse-scale"; - outputHash = "sha256-RfKqEqtFJDk13V69EL+7mRcWbF35oHfbLQWDtjrQPEM="; + outputHash = "sha256-TMU8auc7SIHCVK7uYy5FPDevmHW5uzKKr0HowiSJpo8="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-mirror/package.nix b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-mirror/package.nix index cc447c0..f9c65b8 100644 --- a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-mirror/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-mirror/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-misuse-mirror"; - outputHash = "sha256-cLQP54BfpoQsjGGtFgFPbMVz8o1KsQMj3yFjzpNCzxg="; + outputHash = "sha256-rbWeatDp5BBU8wSacdH9EwTtZaWthJ5x1Ro0TxQYVjc="; script = ./script.py; } diff --git a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-rotate/package.nix b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-rotate/package.nix index 7e9ec60..5f67955 100644 --- a/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-rotate/package.nix +++ b/package-sets/top-level/nixos-branding/artifacts/misuse/nixos-logomark-misuse-rotate/package.nix @@ -1,6 +1,6 @@ { artifact-builder }: artifact-builder { name = "nixos-logomark-misuse-rotate"; - outputHash = "sha256-GvolEpXZkQjX9X48hisQINzvrcDGROHN1Lyg5eGqYck="; + outputHash = "sha256-hzV4Z1wMxORICPspM/EEgM4IJphbJkMgKAxo/yFAl2I="; script = ./script.py; } From 10dd8810523e0a23662010e75d60fcd6b2d07991 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 17:32:00 -0700 Subject: [PATCH 08/43] nixoslogo: add py.typed marker The package ships inline annotations but no PEP 561 marker, so type checkers treated its own modules as untyped libraries. Clears 37 reportMissingTypeStubs warnings. --- package-sets/python-packages/nixoslogo/nixoslogo/py.typed | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 package-sets/python-packages/nixoslogo/nixoslogo/py.typed diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/py.typed b/package-sets/python-packages/nixoslogo/nixoslogo/py.typed new file mode 100644 index 0000000..e69de29 From 2084f7f03881dce44e7d95fea8ea676dc049bcca Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 17:34:45 -0700 Subject: [PATCH 09/43] nixoslogo: import Lambda from its defining module in clearspace Lambda is defined in nixoslogo.logomark. clearspace.py imported it from nixoslogo.logo, which only imports it for its own use. The py.typed marker makes type checkers enforce export discipline, so this was reported as a private import. --- .../nixoslogo/nixoslogo/artifacts/clearspace.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index 77b02d4..6bd18b3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -5,8 +5,8 @@ from nixoslogo.annotations import Annotations from nixoslogo.core import BaseRenderable, ClearSpace, flatten_svg_elements from nixoslogo.logging_config import setup_logging -from nixoslogo.logo import Lambda, NixosLogo -from nixoslogo.logomark import Logomark +from nixoslogo.logo import NixosLogo +from nixoslogo.logomark import Lambda, Logomark from nixoslogo.logotype import Glyph, Logotype logger = logging.getLogger(__name__) From 144d0ccd7fa7a885d228c9ed74115222d5336947 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 17:40:30 -0700 Subject: [PATCH 10/43] nixoslogo: require a DimensionedLambda in the dimensioned logomarks --- .../python-packages/nixoslogo/nixoslogo/dimensioned.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index bf56f01..95351d0 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -454,12 +454,15 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: class DimensionedLogomark(Logomark): + ilambda: DimensionedLambda + def __init__( self, annotations: Annotations, + ilambda: DimensionedLambda, **kwargs, ): - super().__init__(**kwargs) + super().__init__(ilambda=ilambda, **kwargs) self.annotations = annotations def _make_canvas(self) -> Canvas: @@ -566,12 +569,15 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: class DimensionedLogomarkGradient(Logomark): + ilambda: DimensionedLambda + def __init__( self, annotations: Annotations, + ilambda: DimensionedLambda, **kwargs, ): - super().__init__(**kwargs) + super().__init__(ilambda=ilambda, **kwargs) self.annotations = annotations def _make_canvas(self) -> Canvas: From c5e96d9e0d90da62989824fac12f0c9aac9664c8 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 17:42:38 -0700 Subject: [PATCH 11/43] nixoslogo: annotate LogoClearspace.logo as a class logo is instantiated as self.logo(clear_space=...) and every caller passes a class, not an instance. --- .../python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index 6bd18b3..7774218 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -15,7 +15,7 @@ class LogoClearspace(BaseRenderable): def __init__( self, - logo: BaseRenderable, + logo: type[BaseRenderable], logo_name: str, space_object: BaseRenderable, annotations: Annotations, From b598ecb039564f6e73684f06dd8245c92a4ba05a Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 18:07:48 -0700 Subject: [PATCH 12/43] nixoslogo: fix logomark colors typing tuple[Color] is a one-element tuple. LogomarkColors members hold one, two, three and six colors, so the parameter annotation was wrong for most of them. Widen to tuple[Color, ...] in Logomark and NixosLogo. --- .../python-packages/nixoslogo/nixoslogo/logo.py | 2 +- .../python-packages/nixoslogo/nixoslogo/logomark.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 78eef76..7909391 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -28,7 +28,7 @@ def __init__( lambda_gap: float = 1 / 32, loader: FontLoader | None = None, logo_layout: LogoLayout = LogoLayout.HORIZONTAL, - logomark_colors: LogomarkColors | tuple[Color] = LogomarkColors.DEFAULT, + logomark_colors: LogomarkColors | tuple[Color, ...] = LogomarkColors.DEFAULT, logomark_color_style: ColorStyle = ColorStyle.GRADIENT, logotype_cap_height: float | None = None, logotype_color: str = "black", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 7f56741..21a909d 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -170,12 +170,16 @@ def __init__( ilambda: Lambda = Lambda(), color_style: ColorStyle = ColorStyle.GRADIENT, clear_space: ClearSpace = ClearSpace.RECOMMENDED, - colors: LogomarkColors | tuple[Color] = LogomarkColors.DEFAULT, + colors: LogomarkColors | tuple[Color, ...] = LogomarkColors.DEFAULT, **kwargs, ): self.ilambda = ilambda - self.colors_name = getattr(colors, "name", "custom") - self.colors_value = getattr(colors, "value", colors) + self.colors_name = ( + colors.name if isinstance(colors, LogomarkColors) else "custom" + ) + self.colors_value: tuple[Color, ...] = ( + colors.value if isinstance(colors, LogomarkColors) else colors + ) self.color_style = color_style self.clear_space = clear_space From 2e80738388b3f6582e328a17f0ee13b08e2c468c Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 18:18:11 -0700 Subject: [PATCH 13/43] nixoslogo: make FontLoader cap height and loader non-optional --- .../nixoslogo/nixoslogo/logotype.py | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 8b1d8c7..1a19ee3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -26,6 +26,9 @@ class FontLoader: + capHeight: int + scale: float + def __init__( self, get_font_file: Callable[[], Path] = get_nixos_logotype_font_file, @@ -36,11 +39,11 @@ def __init__( ): self.get_font_file = get_font_file self.transforms_map = transforms_map - self.capHeight = capHeight self.scale_glyph = scale_glyph self.offset_glyph = offset_glyph self._open_font_file() + self.capHeight, self.scale = self._ref_size(capHeight) self._setup_glyphs() def _open_font_file(self): @@ -60,27 +63,25 @@ def _open_font_file(self): atexit.register(self._cleanup_once) def _setup_glyphs(self): - self._set_ref_size() - for character, transforms in self.transforms_map.items(): if self.scale_glyph: self._scale_glyph(character, transforms) if self.offset_glyph: self._offset_glyph(character, transforms) - def _set_ref_size(self): + def _ref_size(self, capHeight: int | None) -> tuple[int, float]: """ Conditionally update the font size. The glyphs can be scaled by updating the `em` attribute. `capHeight` goes to zero because we are flipping glyphs so that is stored off for later use. """ - if self.capHeight is None: - self.scale = 1 - self.capHeight = int(self.font.capHeight) - else: - self.scale = self.capHeight / self.font.capHeight - self.font.em = round(self.font.em * self.scale) + if capHeight is None: + return int(self.font.capHeight), 1 + + scale = capHeight / self.font.capHeight + self.font.em = round(self.font.em * scale) + return capHeight, scale def _scale_glyph(self, character, transforms): """Scale a glyph; primarily used for vertically flipping.""" @@ -147,22 +148,17 @@ def __init__( **kwargs, ): self.character = character - self.loader = loader + self.loader: FontLoader = loader if loader is not None else FontLoader() self.color = color self.style = style self.clear_space = clear_space - self._init_loader() self.font = self.loader.font self.glyph = self.font[self.character] self.layer = self.glyph.foreground.dup() super().__init__(**kwargs) - def _init_loader(self): - if self.loader is None: - self.loader = FontLoader() - def get_path(self, layer): path = [] for contour in layer: @@ -289,15 +285,13 @@ def __init__( clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): - self.loader = loader self.characters = characters - self.loader = loader + self.loader: FontLoader = loader if loader is not None else FontLoader() self.color = color self.style = style self.spacings = spacings self.clear_space = clear_space - self._init_loader() self._load_glyphs() self.cap_height = self.glyphs[0].loader.capHeight self.scale = self.glyphs[0].loader.scale @@ -305,10 +299,6 @@ def __init__( super().__init__(**kwargs) - def _init_loader(self): - if self.loader is None: - self.loader = FontLoader() - def _load_glyphs(self): self.glyphs = tuple( Glyph( From 78ac46e1441890f05adf3fead616d787e11704d4 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 18:57:27 -0700 Subject: [PATCH 14/43] nixoslogo: assign the logo's optional arguments once NixosLogo stored logotype_cap_height, loader and logotype_transform as optional attributes and filled them in from _init_cap_height, _init_logotype and _init_layout, so every later use was an optional access. Replace the mutating hooks with _default_cap_height and _default_transform and assign each attribute once. LogoScale overrides _default_cap_height instead of _init_cap_height. --- .../nixoslogo/nixoslogo/artifacts/misuse.py | 5 +- .../nixoslogo/nixoslogo/logo.py | 58 ++++++++++--------- .../nixoslogo/nixoslogo/logotype.py | 6 +- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index 7a7c8b9..1bb0382 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -147,9 +147,8 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) - def _init_cap_height(self): - if self.logotype_cap_height is None: - self.logotype_cap_height = self.lambda_radius + def _default_cap_height(self) -> float: + return self.lambda_radius class LogoColorsWithLambdaPrime(NixosLogo): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 7909391..b060120 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -42,22 +42,32 @@ def __init__( self.lambda_radius = lambda_radius self.lambda_thickness = lambda_thickness self.lambda_gap = lambda_gap - self.loader = loader self.logo_layout = logo_layout self.logomark_colors = logomark_colors self.logomark_color_style = logomark_color_style - self.logotype_cap_height = logotype_cap_height self.logotype_color = logotype_color self.logotype_style = logotype_style self.logotype_spacings = logotype_spacings self.logotype_characters = logotype_characters - self.logotype_transform = logotype_transform self.clear_space = clear_space self._init_snowflake() - self._init_cap_height() + self.logotype_cap_height: float = ( + logotype_cap_height + if logotype_cap_height is not None + else self._default_cap_height() + ) + self.loader: FontLoader = ( + loader + if loader is not None + else FontLoader(capHeight=self.logotype_cap_height) + ) self._init_logotype() - self._init_layout() + self.logotype_transform: svg.Translate = ( + logotype_transform + if logotype_transform is not None + else self._default_transform() + ) super().__init__(**kwargs) @@ -74,15 +84,10 @@ def _init_snowflake(self): clear_space=self.clear_space, ) - def _init_cap_height(self): - if self.logotype_cap_height is None: - self.logotype_cap_height = ( - self.lambda_radius * (1 + self.lambda_thickness * 2) * math.sqrt(3) - ) + def _default_cap_height(self) -> float: + return self.lambda_radius * (1 + self.lambda_thickness * 2) * math.sqrt(3) def _init_logotype(self): - if self.loader is None: - self.loader = FontLoader(capHeight=self.logotype_cap_height) self.logotype = Logotype( characters=self.logotype_characters, loader=self.loader, @@ -91,21 +96,20 @@ def _init_logotype(self): spacings=self.logotype_spacings, ) - def _init_layout(self): - if self.logotype_transform is None: - match self.logo_layout: - case LogoLayout.HORIZONTAL: - self.logotype_transform = svg.Translate( - self.logomark.circumradius, - self.logotype_cap_height / 2, - ) - case LogoLayout.VERTICAL: - self.logotype_transform = svg.Translate( - -self.logotype.elements_width / 2, - self.logomark.inradius + self.logotype_cap_height * 1.25, - ) - case _: - raise Exception(f"Unknown LogoLayout: {self.logo_layout}") + def _default_transform(self) -> svg.Translate: + match self.logo_layout: + case LogoLayout.HORIZONTAL: + return svg.Translate( + self.logomark.circumradius, + self.logotype_cap_height / 2, + ) + case LogoLayout.VERTICAL: + return svg.Translate( + -self.logotype.elements_width / 2, + self.logomark.inradius + self.logotype_cap_height * 1.25, + ) + case _: + raise Exception(f"Unknown LogoLayout: {self.logo_layout}") @property def elements_bounding_box(self): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 1a19ee3..19cdc12 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -26,14 +26,14 @@ class FontLoader: - capHeight: int + capHeight: float scale: float def __init__( self, get_font_file: Callable[[], Path] = get_nixos_logotype_font_file, transforms_map: dict[str, Any] = DEFAULT_ROUTE159_TRANSFORMS, - capHeight: int | None = None, + capHeight: float | None = None, scale_glyph: bool = True, offset_glyph: bool = True, ): @@ -69,7 +69,7 @@ def _setup_glyphs(self): if self.offset_glyph: self._offset_glyph(character, transforms) - def _ref_size(self, capHeight: int | None) -> tuple[int, float]: + def _ref_size(self, capHeight: float | None) -> tuple[float, float]: """ Conditionally update the font size. From 017665be901638aa706d3a833361e1522a1208ce Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:10:33 -0700 Subject: [PATCH 15/43] nixoslogo: accept a float dimension reference reference is a Fraction denominator when fractional is true and a plain divisor otherwise, so it was unannotated and inferred as int from its default while five call sites passed a float cap height. --- .../nixoslogo/nixoslogo/annotations.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 9b77559..1ff785b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -146,7 +146,7 @@ def make_dimension_line( flip=False, side="left", offset=1, - reference=1, + reference: float = 1, text=None, text_offset=False, fractional=True, @@ -173,7 +173,9 @@ def make_dimension_line( else: if text is None: if fractional: - text = fractions.Fraction(round(measured_line.length()), reference) + text = fractions.Fraction( + round(measured_line.length()), round(reference) + ) else: text = round(measured_line.length() / reference, precision) @@ -267,7 +269,7 @@ def make_dimension_line_outer( flip=False, side="left", offset=1, - reference=1, + reference: float = 1, text=None, text_offset=False, fractional=True, @@ -298,7 +300,9 @@ def make_dimension_line_outer( else: if text is None: if fractional: - text = fractions.Fraction(round(measured_line.length()), reference) + text = fractions.Fraction( + round(measured_line.length()), round(reference) + ) else: text = round(measured_line.length() / reference, precision) From 630a6f1dd6563cc7942c89318d3b2e64479b8b2c Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:17:57 -0700 Subject: [PATCH 16/43] nixoslogo: fix geometry return types and drop Number annotations Point, Points, Vector and Matrix are never subclassed, but twelve methods were annotated -> Self while returning the concrete class. Point.__sub__ returns a Vector for a Point and a Point for a Vector, so it needs overloads; distance has always relied on that and was reported as calling length on a Point. Vector.__matmul__ and Matrix.__matmul__ return a list, _modulus_squared returns a float, and transpose built a Matrix of tuples rather than Vectors. svg._types.Number is Decimal | float | int and describes svg attribute values, not arithmetic operands: Decimal * float is a TypeError. Use float for the thirteen annotations that take part in arithmetic. make_diagonal_line returns Points, not list[Number], and the dimension offset is a float because dimension_spacings divides by a length. Assisted-by: Claude Code (Claude Opus 5) --- .../nixoslogo/nixoslogo/annotations.py | 4 +- .../nixoslogo/nixoslogo/dimensioned.py | 3 +- .../nixoslogo/nixoslogo/geometry.py | 50 ++++++++++--------- .../nixoslogo/nixoslogo/logomark.py | 15 +++--- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 1ff785b..a6fecfe 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -145,7 +145,7 @@ def make_dimension_line( point2, flip=False, side="left", - offset=1, + offset: float = 1, reference: float = 1, text=None, text_offset=False, @@ -268,7 +268,7 @@ def make_dimension_line_outer( point2, flip=False, side="left", - offset=1, + offset: float = 1, reference: float = 1, text=None, text_offset=False, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 95351d0..853384b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -1,7 +1,6 @@ import math import svg -from svg._types import Number from nixoslogo.annotations import Annotations from nixoslogo.core import ClearSpace, flatten_svg_elements @@ -31,7 +30,7 @@ def _make_canvas(self) -> Canvas: height=4 * self.radius, ) - def make_diagonal_line(self, radius: Number) -> list[Number]: + def make_diagonal_line(self, radius: float) -> Points: hexagon_points = self.make_hexagon_points(radius) return Points([hexagon_points[1], hexagon_points[4]]) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 2436aba..59e54c4 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -1,8 +1,6 @@ import math from collections.abc import Sequence -from typing import Self - -from svg._types import Number +from typing import overload def cosd(angle) -> float: @@ -33,7 +31,7 @@ def __repr__(self): def __neg__(self): return Point(tuple(-elem for elem in self)) - def __add__(self, other: Self | "Vector") -> Self: + def __add__(self, other: "Point | Vector") -> "Point": if isinstance(other, Point): return Point((self.x + other.x, self.y + other.y)) elif isinstance(other, Vector): @@ -41,7 +39,13 @@ def __add__(self, other: Self | "Vector") -> Self: else: raise Exception(f"Not sure how to add {type(other)} to Point.") - def __sub__(self, other: Self | "Vector") -> Self: + @overload + def __sub__(self, other: "Point") -> "Vector": ... + + @overload + def __sub__(self, other: "Vector") -> "Point": ... + + def __sub__(self, other: "Point | Vector") -> "Point | Vector": if isinstance(other, Point): return Vector((self.x - other.x, self.y - other.y)) elif isinstance(other, Vector): @@ -49,7 +53,7 @@ def __sub__(self, other: Self | "Vector") -> Self: else: raise Exception(f"Not sure how to add {type(other)} to Point.") - def __truediv__(self, other: Number) -> Self: + def __truediv__(self, other: float) -> "Point": return Point(tuple(elem / other for elem in self)) @property @@ -62,10 +66,10 @@ def y(self): """The y property.""" return self.value[1] - def distance(self, other: Self) -> float: + def distance(self, other: "Point") -> float: return (self - other).length() - def normal(self, reference: Self): + def normal(self, reference: "Point") -> "Vector": normal = Vector( ( +(self.y - reference.y), @@ -74,7 +78,7 @@ def normal(self, reference: Self): ) return normal.normalize() - def rotate(self, angle: Number): + def rotate(self, angle: float) -> "Point": rotation_matrix = Matrix( ( Vector( @@ -130,46 +134,46 @@ def __repr__(self): def __str__(self): return f"{self.value}" - def __add__(self, other: Self) -> Self: + def __add__(self, other: "Vector") -> "Vector": return Vector(tuple(s + o for s, o in zip(self, other))) def __neg__(self): return Vector(tuple(-elem for elem in self)) - def __sub__(self, other: Self) -> Self: + def __sub__(self, other: "Vector") -> "Vector": return self + (-other) - def __mul__(self, other: Self) -> Self: + def __mul__(self, other: "Vector") -> "Vector": return Vector(tuple(s * o for s, o in zip(self, other))) - def __rmul__(self, other: Number) -> Self: + def __rmul__(self, other: float) -> "Vector": return Vector(tuple(other * elem for elem in self)) - def __matmul__(self, other: Self | Point) -> Self: + def __matmul__(self, other: "Point | Vector") -> list[float]: if isinstance(other, Point | Vector): return [s * o for s, o in zip(self, other)] else: raise Exception(f"Not sure how to add {type(other)} to Point.") - def __truediv__(self, other: Number) -> Self: + def __truediv__(self, other: float) -> "Vector": return Vector(tuple(elem / other for elem in self)) - def _modulus_squared(self) -> Number: + def _modulus_squared(self) -> float: return self.dot(self) def length(self) -> float: return math.sqrt(self._modulus_squared()) - def dot(self, other: Self) -> float: + def dot(self, other: "Vector") -> float: return sum((self * other)) - def normalize(self) -> Self: + def normalize(self) -> "Vector": return self / self.length() - def normal(self) -> Self: + def normal(self) -> "Vector": return Vector((self[1], -self[0])).normalize() - def angle_from(self, other: Self) -> float: + def angle_from(self, other: "Vector") -> float: return math.acos(self.dot(other) / (self.length() * other.length())) def to_point(self) -> Point: @@ -190,10 +194,10 @@ def __len__(self): def __str__(self): return "(" + ",\n ".join(str(elem) for elem in self.value) + ")" - def transpose(self) -> Self: - return Matrix(tuple(zip(*self))) + def transpose(self) -> "Matrix": + return Matrix(tuple(Vector(row) for row in zip(*self))) - def __matmul__(self, other: Point | Vector) -> Self: + def __matmul__(self, other: Point | Vector) -> list[float]: if isinstance(other, Point | Vector): return [sum(row @ other) for row in self] else: diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 21a909d..133e889 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -3,7 +3,6 @@ import math import svg -from svg._types import Number from nixoslogo.colors import Color from nixoslogo.core import ( @@ -70,7 +69,7 @@ def make_svg_elements(self) -> list[svg.Element]: ), ) - def make_hexagon_points(self, radius: Number) -> Points: + def make_hexagon_points(self, radius: float) -> Points: angles = [math.radians(angle) for angle in range(0, 360, 60)] return Points( [ @@ -86,9 +85,9 @@ def make_hexagon_points(self, radius: Number) -> Points: def make_lambda_points( self, - radius: Number | None = None, - thickness: Number | None = None, - gap: Number | None = None, + radius: float | None = None, + thickness: float | None = None, + gap: float | None = None, ) -> Points: radius = radius if radius is not None else self.radius thickness = thickness if thickness is not None else self.thickness @@ -123,9 +122,9 @@ def make_lambda_points( def make_named_lambda_points( self, - radius: Number | None = None, - thickness: Number | None = None, - gap: Number | None = None, + radius: float | None = None, + thickness: float | None = None, + gap: float | None = None, ) -> dict[str, Point]: radius = radius if radius is not None else self.radius thickness = thickness if thickness is not None else self.thickness From fba1a110970d62ced68eb91519df3556b6f2685e Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:22:19 -0700 Subject: [PATCH 17/43] nixoslogo: give the geometry sequences their element types Point, Points, Vector and Matrix subclassed a bare Sequence, so everything read out of them was Unknown. --- .../nixoslogo/nixoslogo/geometry.py | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 59e54c4..0627031 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -11,12 +11,18 @@ def sind(angle) -> float: return math.sin(math.radians(angle)) -class Point(Sequence): +class Point(Sequence[float]): def __init__(self, value): self.value = value super().__init__() - def __getitem__(self, index): + @overload + def __getitem__(self, index: int) -> float: ... + + @overload + def __getitem__(self, index: slice) -> Sequence[float]: ... + + def __getitem__(self, index: int | slice) -> "float | Sequence[float]": return self.value[index] def __len__(self): @@ -95,12 +101,18 @@ def to_vector(self) -> "Vector": return Vector(self.value) -class Points(Sequence): +class Points(Sequence[Point]): def __init__(self, value: list[Point]): self.value = value super().__init__() - def __getitem__(self, index): + @overload + def __getitem__(self, index: int) -> Point: ... + + @overload + def __getitem__(self, index: slice) -> Sequence[Point]: ... + + def __getitem__(self, index: int | slice) -> "Point | Sequence[Point]": return self.value[index] def __len__(self): @@ -117,12 +129,18 @@ def to_list(self): return [elem for point in nested for elem in point] -class Vector(Sequence): +class Vector(Sequence[float]): def __init__(self, value): self.value = value super().__init__() - def __getitem__(self, index): + @overload + def __getitem__(self, index: int) -> float: ... + + @overload + def __getitem__(self, index: slice) -> Sequence[float]: ... + + def __getitem__(self, index: int | slice) -> "float | Sequence[float]": return self.value[index] def __len__(self): @@ -180,12 +198,18 @@ def to_point(self) -> Point: return Point(self.value) -class Matrix(Sequence): +class Matrix(Sequence[Vector]): def __init__(self, value: Sequence[Vector]): self.value = value super().__init__() - def __getitem__(self, index): + @overload + def __getitem__(self, index: int) -> Vector: ... + + @overload + def __getitem__(self, index: slice) -> Sequence[Vector]: ... + + def __getitem__(self, index: int | slice) -> "Vector | Sequence[Vector]": return self.value[index] def __len__(self): From e6b52730d092815c9c7bf7f23fbde0cc8c35673d Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:30:02 -0700 Subject: [PATCH 18/43] nixoslogo: type stroke_dasharray as the list svg expects SVG's stroke-dasharray is a list of dash lengths; a bare number is shorthand. LineGroup declared it int, so every svg element built from an annotation config was an argument type error. --- .../nixoslogo/nixoslogo/annotations.py | 27 ++++++++++--------- .../nixoslogo/nixoslogo/dimensioned.py | 4 +-- .../nixos-logotype-dimensioned/script.py | 2 +- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index a6fecfe..ef5aaf3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -5,6 +5,7 @@ from pathlib import Path import svg +from svg._types import Number from nixoslogo.core import ( CHARACTER_GLYPHNAME_MAP, @@ -114,7 +115,7 @@ class LineGroup: name: str stroke: str stroke_width: int - stroke_dasharray: int + stroke_dasharray: list[Number] fill: str = "transparent" @@ -532,25 +533,25 @@ def small(cls) -> "Annotations": "name": "object", "stroke": "green", "stroke_width": 4, - "stroke_dasharray": 4, + "stroke_dasharray": [4], }, construction_lines_config={ "name": "construction", "stroke": "blue", "stroke_width": 2, - "stroke_dasharray": 4, + "stroke_dasharray": [4], }, dimension_lines_config={ "name": "dimension", "stroke": "red", "stroke_width": 1, - "stroke_dasharray": 4, + "stroke_dasharray": [4], }, font_config={ "scale": None, "cap_height": 24, "color": "black", - "stroke_dasharray": 4, + "stroke_dasharray": [4], }, ) @@ -561,25 +562,25 @@ def medium(cls) -> "Annotations": "name": "object", "stroke": "green", "stroke_width": 8, - "stroke_dasharray": 8, + "stroke_dasharray": [8], }, construction_lines_config={ "name": "construction", "stroke": "blue", "stroke_width": 4, - "stroke_dasharray": 8, + "stroke_dasharray": [8], }, dimension_lines_config={ "name": "dimension", "stroke": "red", "stroke_width": 2, - "stroke_dasharray": 8, + "stroke_dasharray": [8], }, font_config={ "scale": None, "cap_height": 48, "color": "black", - "stroke_dasharray": 8, + "stroke_dasharray": [8], }, ) @@ -590,25 +591,25 @@ def large(cls) -> "Annotations": "name": "object", "stroke": "green", "stroke_width": 16, - "stroke_dasharray": 16, + "stroke_dasharray": [16], }, construction_lines_config={ "name": "construction", "stroke": "blue", "stroke_width": 8, - "stroke_dasharray": 16, + "stroke_dasharray": [16], }, dimension_lines_config={ "name": "dimension", "stroke": "red", "stroke_width": 4, - "stroke_dasharray": 16, + "stroke_dasharray": [16], }, font_config={ "scale": None, "cap_height": 96, "color": "black", - "stroke_dasharray": 16, + "stroke_dasharray": [16], }, ) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 853384b..4915e95 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -88,7 +88,7 @@ def make_lambda_polygons(self): stroke=self.annotations.object_lines.stroke, stroke_width=self.annotations.object_lines.stroke_width, fill=self.annotations.object_lines.fill, - stroke_dasharray=4, + stroke_dasharray=[4], ), svg.Polygon( points=lambda_points_gap.to_list(), @@ -902,7 +902,7 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: annotations = Annotations.small() annotations.construction_lines.stroke = "black" - annotations.construction_lines.stroke_dasharray = 16 + annotations.construction_lines.stroke_dasharray = [16] loader = FontLoader(capHeight=512) diff --git a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/script.py b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/script.py index 3f070c8..2abb33e 100644 --- a/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/script.py +++ b/package-sets/top-level/nixos-branding/artifacts/dimensioned/nixos-logotype-dimensioned/script.py @@ -6,7 +6,7 @@ # TODO @djacu see if this can be better annotations = Annotations.small() annotations.construction_lines.stroke = "black" -annotations.construction_lines.stroke_dasharray = 16 +annotations.construction_lines.stroke_dasharray = [16] loader = FontLoader(capHeight=512) From d3de8326d78109a57ab632957d670553f23e6448 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:33:19 -0700 Subject: [PATCH 19/43] nixoslogo: drop the unused colors parameter from make_filename --- package-sets/python-packages/nixoslogo/nixoslogo/logo.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/logomark.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index b060120..3d33c1d 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -149,7 +149,7 @@ def make_svg_elements(self) -> list[svg.Element]: ), ) - def make_filename(self, colors="default", extras: tuple[str, ...] = ()): + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ self.logotype_characters.lower(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 133e889..5d0e1be 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -149,7 +149,7 @@ def make_named_lambda_points( ) return {name: point for name, point in zip(names, points)} - def make_filename(self, colors="default", extras: tuple[str, ...] = ()): + def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ "nixos", From 435be7cbe1dbf96971e72786b1c0a7af9a9659af Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:35:53 -0700 Subject: [PATCH 20/43] nixoslogo: return a bounding box tuple from NixosLogo --- package-sets/python-packages/nixoslogo/nixoslogo/logo.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 3d33c1d..c2118f8 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -112,7 +112,7 @@ def _default_transform(self) -> svg.Translate: raise Exception(f"Unknown LogoLayout: {self.logo_layout}") @property - def elements_bounding_box(self): + def elements_bounding_box(self) -> tuple[float, float, float, float]: logomark_box = self.logomark.elements_bounding_box logotype_box = self.logotype.elements_bounding_box logotype_box_translated = ( @@ -121,13 +121,14 @@ def elements_bounding_box(self): logotype_box[2] + self.logotype_transform.x, logotype_box[3] + self.logotype_transform.y, ) - return [ + min_x, min_y, max_x, max_y = ( predicate(elem) for predicate, elem in zip( (min, min, max, max), list(zip(*(logomark_box, logotype_box_translated))), ) - ] + ) + return (min_x, min_y, max_x, max_y) def _get_clearspace(self): match self.clear_space: From 1a7556f0f6e60408cdf8e5cedff4efa06b9a2468 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:38:50 -0700 Subject: [PATCH 21/43] nixoslogo: describe the annotation config dicts --- .../nixoslogo/nixoslogo/annotations.py | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index ef5aaf3..8f54cb8 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -3,6 +3,7 @@ from collections.abc import Callable from dataclasses import dataclass from pathlib import Path +from typing import NotRequired, TypedDict import svg from svg._types import Number @@ -110,6 +111,21 @@ def make_filename(self, extras: tuple[str, ...] = ()): ) +class LineConfig(TypedDict): + name: str + stroke: str + stroke_width: int + stroke_dasharray: list[Number] + fill: NotRequired[str] + + +class FontConfig(TypedDict): + scale: float | None + cap_height: float + color: str + stroke_dasharray: list[Number] + + @dataclass class LineGroup: name: str @@ -133,7 +149,7 @@ class DimensionLines(LineGroup): def __init__( self, font_loader: FontLoader, - font_config: dict, + font_config: FontConfig, **kwargs, ): super().__init__(**kwargs) @@ -498,12 +514,12 @@ def make_dimension_arrow_defs(self): class Annotations: def __init__( self, - object_lines_config: dict, - construction_lines_config: dict, - dimension_lines_config: dict, - font_config: dict, + object_lines_config: LineConfig, + construction_lines_config: LineConfig, + dimension_lines_config: LineConfig, + font_config: FontConfig, get_font_file: Callable[[], Path] = get_nixos_annotation_font_file, - transforms_map: dict = DEFAULT_JURA_TRANSFORMS, + transforms_map: dict[str, dict[str, int]] = DEFAULT_JURA_TRANSFORMS, ): self.font_loader = FontLoader( get_font_file=get_font_file, From 70b835445acc9777f46bcb21b8c01c55eb14af74 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:44:13 -0700 Subject: [PATCH 22/43] nixoslogo: narrow the glyph scale guards --- .../nixoslogo/nixoslogo/annotations.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 8f54cb8..b5b43a3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -80,19 +80,20 @@ def _set_spacings(self): x_offset += glyph.glyph.width def _scale_glyphs(self): - if self.scale is None and self.cap_height is None: - return - if self.scale is not None and self.cap_height is not None: raise ValueError("Only one of scale or cap_height can be set.") if self.cap_height is not None: - self.scale = self.original_cap_height / self.cap_height + scale = self.original_cap_height / self.cap_height + elif self.scale is not None: + scale = self.scale + self.cap_height = self.original_cap_height / scale else: - self.cap_height = self.original_cap_height / self.scale + return + self.scale = scale for glyph in self.glyphs: - glyph.layer.transform((1 / self.scale, 0, 0, 1 / self.scale, 0, 0)) + glyph.layer.transform((1 / scale, 0, 0, 1 / scale, 0, 0)) def _get_clearspace(self): return 0 From 42e91fe493df57f610396dbf186bf2131f71c12c Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:48:55 -0700 Subject: [PATCH 23/43] nixoslogo: type the dimension line options --- .../nixoslogo/nixoslogo/dimensioned.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 4915e95..ab1172d 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -1,4 +1,5 @@ import math +from typing import TypedDict import svg @@ -11,6 +12,12 @@ from nixoslogo.logotype import Logotype +class DimensionLineOptions(TypedDict): + side: str + flip: bool + offset: float + + class DimensionedLambda(Lambda): def __init__( self, @@ -154,7 +161,7 @@ def make_lambda_linear_dimensions(self): ) # fmt: off - options = [ + options: list[DimensionLineOptions] = [ {"side": "right", "flip": True, "offset": 1 / 4}, {"side": "right", "flip": True, "offset": 15 / 32}, {"side": "left", "flip": True, "offset": 1 / 4}, @@ -331,8 +338,8 @@ def make_named_lambda_vertices(self): svg.G( transform=[ svg.Translate(point.x, point.y), - ] - + translation(annotation), + *translation(annotation), + ], elements=annotation.make_svg_elements(), ) for point, annotation, translation in named_annotations.values() From de01ab6eed55ce0c2ffbaa7417b063a759587b46 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:51:24 -0700 Subject: [PATCH 24/43] nixoslogo: pass lists where svg expects lists in clearspace --- .../nixoslogo/nixoslogo/artifacts/clearspace.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index 7774218..cd92dfc 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -59,17 +59,17 @@ def make_svg_elements(self) -> list[svg.Element]: def make_greyscale_def(self): return ( svg.Defs( - elements=( + elements=[ svg.Filter( id="greyscale-50", - elements=( + elements=[ svg.FeColorMatrix( type="matrix", values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0", ), - ), + ], ), - ), + ], ), ) @@ -192,25 +192,25 @@ def make_clearspace_lines(self): stroke_dasharray=self.annotations.construction_lines.stroke_dasharray, ), svg.G( - transform=( + transform=[ svg.Translate( self.recommended.canvas.min_x + recommended_annotation.elements_height * 0.5, self.recommended.canvas.min_y + recommended_annotation.elements_height * 1.5, ), - ), + ], elements=recommended_annotation.make_svg_elements(), ), svg.G( - transform=( + transform=[ svg.Translate( self.minimal.canvas.min_x + minimal_annotation.elements_height * 0.5, self.minimal.canvas.min_y + minimal_annotation.elements_height * 1.5, ), - ), + ], elements=minimal_annotation.make_svg_elements(), ), ) From cdba9debd772ecca20eb6f9e8f17a070f439eb5d Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:54:03 -0700 Subject: [PATCH 25/43] nixoslogo: use svg Length for the gradient stop offsets --- .../python-packages/nixoslogo/nixoslogo/logomark.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 5d0e1be..716bff3 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -3,6 +3,7 @@ import math import svg +from svg._types import Length from nixoslogo.colors import Color from nixoslogo.core import ( @@ -305,15 +306,15 @@ def make_flake_gradients_defs(self): **gradient_end_points, elements=[ svg.Stop( - offset=f"{self._gradient_stop_offsets[0]}%", + offset=Length(self._gradient_stop_offsets[0], "%"), stop_color=color_dark, ), svg.Stop( - offset=f"{self._gradient_stop_offsets[1]}%", + offset=Length(self._gradient_stop_offsets[1], "%"), stop_color=color_midpoint, ), svg.Stop( - offset=f"{self._gradient_stop_offsets[2]}%", + offset=Length(self._gradient_stop_offsets[2], "%"), stop_color=color_original, ), ], From e571b37764e02a5c51da3172df5e5b6c55400403 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 19:59:41 -0700 Subject: [PATCH 26/43] nixoslogo: fix the last of the type errors jsonpickle.encode is unannotated upstream and infers str | None; cast it like the other untyped boundaries. tuple[int] is a one-element tuple, so both spacings annotations rejected their own five-element defaults. Glyph declared character as str | None, but character=None raises TypeError from the font lookup and no caller passes it. Removing the option also fixes the filename join. _map_characters needed its own annotation so dict.get would not widen the result back to str | None. Assisted-by: Claude Code (Claude Opus 5) --- .../python-packages/nixoslogo/nixoslogo/annotations.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/helpers.py | 5 +++-- package-sets/python-packages/nixoslogo/nixoslogo/logo.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/logotype.py | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index b5b43a3..c735b44 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -44,7 +44,7 @@ def __init__( super().__init__(**kwargs) - def _map_characters(self, character): + def _map_characters(self, character: str) -> str: return CHARACTER_GLYPHNAME_MAP.get(character, character) def _load_glyphs(self): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py index 59b8a0d..9ec494b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py @@ -1,11 +1,12 @@ import hashlib import math +from typing import cast import jsonpickle -def stable_hash(thing): - dump = jsonpickle.encode(thing) +def stable_hash(thing: object) -> str: + dump = cast(str, jsonpickle.encode(thing)) return hashlib.md5(dump.encode("utf-8")).digest().hex() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index c2118f8..895dc5a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -33,7 +33,7 @@ def __init__( logotype_cap_height: float | None = None, logotype_color: str = "black", logotype_style: LogotypeStyle = LogotypeStyle.REGULAR, - logotype_spacings: tuple[int] = DEFAULT_LOGOTYPE_SPACINGS_WITH_BEARING, + logotype_spacings: tuple[int, ...] = DEFAULT_LOGOTYPE_SPACINGS_WITH_BEARING, logotype_characters: str = "NixOS", logotype_transform: svg.Translate | None = None, clear_space: ClearSpace = ClearSpace.RECOMMENDED, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 19cdc12..6d50722 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -140,7 +140,7 @@ def __del__(self): class Glyph(BaseRenderable): def __init__( self, - character: str | None, + character: str, loader: FontLoader | None = None, color: str = "black", style: LogotypeStyle = LogotypeStyle.REGULAR, @@ -281,7 +281,7 @@ def __init__( loader: FontLoader | None = None, color: str = "black", style: LogotypeStyle = LogotypeStyle.REGULAR, - spacings: tuple[int] = DEFAULT_LOGOTYPE_SPACINGS, + spacings: tuple[int, ...] = DEFAULT_LOGOTYPE_SPACINGS, clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): From 63ab326577788e15f66ce44fa7aca31e815a47af Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 20:13:06 -0700 Subject: [PATCH 27/43] nixoslogo: annotate the dimension drawing parameters --- .../nixoslogo/nixoslogo/annotations.py | 66 ++++++++++--------- .../nixoslogo/nixoslogo/dimensioned.py | 10 ++- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index c735b44..8f83c7a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -159,16 +159,16 @@ def __init__( def make_dimension_line( self, - point1, - point2, - flip=False, - side="left", + point1: Point, + point2: Point, + flip: bool = False, + side: str = "left", offset: float = 1, reference: float = 1, - text=None, - text_offset=False, - fractional=True, - precision=3, + text: str | None = None, + text_offset: bool = False, + fractional: bool = True, + precision: int = 3, ): if flip: point1, point2 = point2, point1 @@ -191,14 +191,16 @@ def make_dimension_line( else: if text is None: if fractional: - text = fractions.Fraction( + label = fractions.Fraction( round(measured_line.length()), round(reference) ) else: - text = round(measured_line.length() / reference, precision) + label = round(measured_line.length() / reference, precision) + else: + label = text text_annotation = TextAnnotations( - characters=str(text), + characters=str(label), loader=self.font_loader, **self.font_config, ) @@ -282,16 +284,16 @@ def make_dimension_line( def make_dimension_line_outer( self, - point1, - point2, - flip=False, - side="left", + point1: Point, + point2: Point, + flip: bool = False, + side: str = "left", offset: float = 1, reference: float = 1, - text=None, - text_offset=False, - fractional=True, - precision=3, + text: str | None = None, + text_offset: bool = False, + fractional: bool = True, + precision: int = 3, ): if flip: point1, point2 = point2, point1 @@ -318,14 +320,16 @@ def make_dimension_line_outer( else: if text is None: if fractional: - text = fractions.Fraction( + label = fractions.Fraction( round(measured_line.length()), round(reference) ) else: - text = round(measured_line.length() / reference, precision) + label = round(measured_line.length() / reference, precision) + else: + label = text text_annotation = TextAnnotations( - characters=str(text), + characters=str(label), loader=self.font_loader, **self.font_config, ) @@ -409,14 +413,14 @@ def make_dimension_line_outer( def make_dimension_angle( self, - point1, - point2, - reference, - flip, - large, - side, - ratio, - text=None, + point1: Point, + point2: Point, + reference: Point, + flip: bool, + large: bool, + side: str, + ratio: float, + text: str | None = None, ): if flip: point1, point2 = point2, point1 @@ -536,7 +540,7 @@ def __init__( font_config=self.font_config, ) - def make_annotation(self, text): + def make_annotation(self, text: str) -> TextAnnotations: return TextAnnotations( characters=str(text), loader=self.font_loader, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index ab1172d..66a8c67 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -18,6 +18,14 @@ class DimensionLineOptions(TypedDict): offset: float +class DimensionAngleOptions(TypedDict): + flip: bool + large: bool + side: str + ratio: float + text: str + + class DimensionedLambda(Lambda): def __init__( self, @@ -214,7 +222,7 @@ class DimensionedLambdaAngular(DimensionedLambda): def make_lambda_angular_dimensions(self): lambda_points_no_gap = self.make_lambda_points() # fmt: off - options = [ + options: list[DimensionAngleOptions] = [ {"flip": True, "large": False, "side": "right", "ratio": 1 / 2, "text": "A"}, {"flip": True, "large": False, "side": "left", "ratio": 1 / 2, "text": "A"}, {"flip": True, "large": False, "side": "left", "ratio": 3 / 8, "text": "B"}, From 32e8d39b9ccc9193f56a46fe9cc0672b86956299 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 20:20:38 -0700 Subject: [PATCH 28/43] nixoslogo: treewide fix of a bunch of unannotated parameters --- .../nixoslogo/nixoslogo/artifacts/clearspace.py | 12 +++++++----- .../python-packages/nixoslogo/nixoslogo/colors.py | 2 +- .../nixoslogo/nixoslogo/geometry.py | 15 +++++++++------ .../nixoslogo/nixoslogo/helpers.py | 4 +++- .../python-packages/nixoslogo/nixoslogo/layout.py | 2 +- .../nixoslogo/nixoslogo/logging_config.py | 2 +- .../nixoslogo/nixoslogo/logomark.py | 10 +++++++++- .../nixoslogo/nixoslogo/logotype.py | 4 ++-- 8 files changed, 33 insertions(+), 18 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index cd92dfc..c3773ac 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -74,15 +74,15 @@ def make_greyscale_def(self): ) def make_space_object_elements(self): - transforms = [ - ( + transforms: list[list[svg.Transform]] = [ + [ svg.Rotate(90 * index), svg.Translate( -self.space_object.elements_x_min, -self.space_object.elements_y_max, ), - translation, - ) + *translation, + ] for index, translation in enumerate( ( ( @@ -120,7 +120,9 @@ def make_space_object_elements(self): for transform in transforms ) - def make_space_object_element(self, space, transform=None): + def make_space_object_element( + self, space: BaseRenderable, transform: list[svg.Transform] | None = None + ): return svg.G( elements=(space.make_svg_elements()), filter="url(#greyscale-50)", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py index 57e54fd..e29a238 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py @@ -9,7 +9,7 @@ class Color(ColorBase): GRADIENT_LIGHTNESS_DELTA = -0.04 GRADIENT_CHROMA_DELTA = -0.01 - def darken(self, scale) -> Self: + def darken(self, scale: float) -> Self: """Clones and darkens the color. Only used for Lch-like colorspaces.""" return ( self.clone() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 0627031..b0a25bc 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -2,17 +2,19 @@ from collections.abc import Sequence from typing import overload +from svg._types import Number -def cosd(angle) -> float: + +def cosd(angle: float) -> float: return math.cos(math.radians(angle)) -def sind(angle) -> float: +def sind(angle: float) -> float: return math.sin(math.radians(angle)) class Point(Sequence[float]): - def __init__(self, value): + def __init__(self, value: Sequence[float]): self.value = value super().__init__() @@ -124,13 +126,14 @@ def __repr__(self): def __str__(self): return "[" + ", ".join(str(elem) for elem in self.value) + "]" - def to_list(self): + def to_list(self) -> list[Number]: nested = [(elem.x, elem.y) for elem in self] - return [elem for point in nested for elem in point] + flat: list[Number] = [elem for point in nested for elem in point] + return flat class Vector(Sequence[float]): - def __init__(self, value): + def __init__(self, value: Sequence[float]): self.value = value super().__init__() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py index 9ec494b..104480f 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py @@ -4,13 +4,15 @@ import jsonpickle +from nixoslogo.geometry import Point + def stable_hash(thing: object) -> str: dump = cast(str, jsonpickle.encode(thing)) return hashlib.md5(dump.encode("utf-8")).digest().hex() -def arc_sagitta(point1, point2, radius, large, sweep): +def arc_sagitta(point1: Point, point2: Point, radius: float, large: bool, sweep: bool): chord_midpoint = ((point1 + point2) / 2).to_vector() chord = point2 - point1 unit_chord = chord.normalize() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/layout.py b/package-sets/python-packages/nixoslogo/nixoslogo/layout.py index b00c1be..f63c69a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/layout.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/layout.py @@ -30,7 +30,7 @@ def make_view_box(self): height=self.height, ) - def make_svg_background(self, fill="#8888ee"): + def make_svg_background(self, fill: str = "#8888ee"): return ( svg.Rect( x=self.min_x, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logging_config.py b/package-sets/python-packages/nixoslogo/nixoslogo/logging_config.py index 721158e..4986581 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logging_config.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logging_config.py @@ -1,7 +1,7 @@ import logging -def setup_logging(level=logging.INFO): +def setup_logging(level: int = logging.INFO): logging.basicConfig( level=level, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 716bff3..7aa0ca6 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -4,6 +4,7 @@ import svg from svg._types import Length +from typing import TypedDict from nixoslogo.colors import Color from nixoslogo.core import ( @@ -16,6 +17,13 @@ from nixoslogo.geometry import Point, Points, Vector, cosd, sind +class GradientEndPoints(TypedDict): + x1: float + y1: float + x2: float + y2: float + + class Lambda(BaseRenderable): def __init__( self, @@ -278,7 +286,7 @@ def make_clean_flake_polygons_flat(self): ) ) - def make_gradient_end_points(self): + def make_gradient_end_points(self) -> GradientEndPoints: lambda_points_no_gap = self.ilambda.make_named_lambda_points(gap=0) stop_point = lambda_points_no_gap[ "joint_crotch" diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 6d50722..2b7b024 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -83,7 +83,7 @@ def _ref_size(self, capHeight: float | None) -> tuple[float, float]: self.font.em = round(self.font.em * scale) return capHeight, scale - def _scale_glyph(self, character, transforms): + def _scale_glyph(self, character: str, transforms: dict[str, int]): """Scale a glyph; primarily used for vertically flipping.""" self.font[character].transform( ( @@ -96,7 +96,7 @@ def _scale_glyph(self, character, transforms): ) ) - def _offset_glyph(self, character, transforms): + def _offset_glyph(self, character: str, transforms: dict[str, int]): """Offset a glyph; primarily used to remove the left side bearing.""" self.font[character].transform( ( From 4a203ee4f2a140b1a8fd4ee52fc59324e4fb8fa1 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 20:31:36 -0700 Subject: [PATCH 29/43] nixoslogo: annotate the darken lambda --- .../nixoslogo/nixoslogo/colors.py | 23 +++++++------------ .../nixoslogo/nixoslogo/dimensioned.py | 5 ++-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py index e29a238..3c136fe 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py @@ -11,22 +11,15 @@ class Color(ColorBase): def darken(self, scale: float) -> Self: """Clones and darkens the color. Only used for Lch-like colorspaces.""" + + def darker_lightness(lightness: float) -> float: + return max(0, lightness + scale * self.GRADIENT_LIGHTNESS_DELTA) + + def darker_chroma(chroma: float) -> float: + return max(0, chroma + scale * self.GRADIENT_CHROMA_DELTA) + return ( - self.clone() - .set( - "lightness", - lambda lightness: max( - 0, - lightness + scale * self.GRADIENT_LIGHTNESS_DELTA, - ), - ) - .set( - "chroma", - lambda chroma: max( - 0, - chroma + scale * self.GRADIENT_CHROMA_DELTA, - ), - ) + self.clone().set("lightness", darker_lightness).set("chroma", darker_chroma) ) def gradient_color_name(self) -> str: diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 66a8c67..e0ea30a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -1,9 +1,10 @@ import math +from collections.abc import Callable from typing import TypedDict import svg -from nixoslogo.annotations import Annotations +from nixoslogo.annotations import Annotations, TextAnnotations from nixoslogo.core import ClearSpace, flatten_svg_elements from nixoslogo.geometry import Point, Points from nixoslogo.layout import Canvas @@ -278,7 +279,7 @@ def make_dotted_lambda_vertices(self): def make_named_lambda_vertices(self): named_points = self.make_named_lambda_points() - translations = [ + translations: list[Callable[[TextAnnotations], list[svg.Transform]]] = [ lambda elem: [ svg.Translate( -elem.elements_width - elem.elements_height / 2, From b252cfbb9d6f08b6bbfa2599b9406f62ec9af156 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 20:37:06 -0700 Subject: [PATCH 30/43] nixoslogo: treewide more type annotation fixes --- .../nixoslogo/nixoslogo/annotations.py | 16 +++++----- .../nixoslogo/artifacts/clearspace.py | 8 ++--- .../nixoslogo/nixoslogo/artifacts/misuse.py | 10 +++---- .../nixoslogo/nixoslogo/dimensioned.py | 12 ++++---- .../nixoslogo/nixoslogo/geometry.py | 8 ++--- .../nixoslogo/nixoslogo/logo.py | 22 +++++++------- .../nixoslogo/nixoslogo/logomark.py | 14 ++++----- .../nixoslogo/nixoslogo/logotype.py | 29 +++++++++---------- 8 files changed, 59 insertions(+), 60 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 8f83c7a..9b7e90e 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -30,11 +30,11 @@ def __init__( cap_height: float | None = None, **kwargs, ): - self.characters = characters - self.loader = loader - self.color = color - self.scale = scale - self.cap_height = cap_height + self.characters: str = characters + self.loader: FontLoader = loader + self.color: str = color + self.scale: float | None = scale + self.cap_height: float | None = cap_height self._load_glyphs() self.original_cap_height = self.loader.capHeight @@ -154,8 +154,8 @@ def __init__( **kwargs, ): super().__init__(**kwargs) - self.font_loader = font_loader - self.font_config = font_config + self.font_loader: FontLoader = font_loader + self.font_config: FontConfig = font_config def make_dimension_line( self, @@ -531,7 +531,7 @@ def __init__( transforms_map=transforms_map, offset_glyph=False, ) - self.font_config = font_config + self.font_config: FontConfig = font_config self.object_lines = ObjectLines(**object_lines_config) self.construction_lines = ConstructionLines(**construction_lines_config) self.dimension_lines = DimensionLines( diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index c3773ac..b9e2802 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -21,10 +21,10 @@ def __init__( annotations: Annotations, **kwargs, ): - self.logo = logo - self.logo_name = logo_name - self.space_object = space_object - self.annotations = annotations + self.logo: type[BaseRenderable] = logo + self.logo_name: str = logo_name + self.space_object: BaseRenderable = space_object + self.annotations: Annotations = annotations self.recommended = self.logo(clear_space=ClearSpace.RECOMMENDED) self.minimal = self.logo(clear_space=ClearSpace.MINIMAL) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index 1bb0382..639a163 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -17,7 +17,7 @@ def __init__( clear_space: ClearSpace = ClearSpace.MINIMAL, **kwargs, ): - self.clear_space = clear_space + self.clear_space: ClearSpace = clear_space super().__init__( clear_space=clear_space, **kwargs, @@ -58,7 +58,7 @@ def __init__( clear_space: ClearSpace = ClearSpace.MINIMAL, **kwargs, ): - self.clear_space = clear_space + self.clear_space: ClearSpace = clear_space super().__init__( clear_space=clear_space, **kwargs, @@ -90,7 +90,7 @@ def __init__( clear_space: ClearSpace = ClearSpace.MINIMAL, **kwargs, ): - self.clear_space = clear_space + self.clear_space: ClearSpace = clear_space super().__init__( clear_space=clear_space, **kwargs, @@ -130,7 +130,7 @@ def __init__( clear_space: ClearSpace = ClearSpace.MINIMAL, **kwargs, ): - self.clear_space = clear_space + self.clear_space: ClearSpace = clear_space super().__init__( clear_space=clear_space, **kwargs, @@ -158,7 +158,7 @@ def __init__( logotype_style: LogotypeStyle = LogotypeStyle.LAMBDAPRIME, **kwargs, ): - self.clear_space = clear_space + self.clear_space: ClearSpace = clear_space super().__init__( clear_space=clear_space, logotype_style=logotype_style, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index e0ea30a..16b129b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -35,8 +35,8 @@ def __init__( **kwargs, ): super().__init__(**kwargs) - self.annotations = annotations - self.clear_space = clear_space + self.annotations: Annotations = annotations + self.clear_space: ClearSpace = clear_space def _make_canvas(self) -> Canvas: return Canvas( @@ -478,7 +478,7 @@ def __init__( **kwargs, ): super().__init__(ilambda=ilambda, **kwargs) - self.annotations = annotations + self.annotations: Annotations = annotations def _make_canvas(self) -> Canvas: return Canvas( @@ -593,7 +593,7 @@ def __init__( **kwargs, ): super().__init__(ilambda=ilambda, **kwargs) - self.annotations = annotations + self.annotations: Annotations = annotations def _make_canvas(self) -> Canvas: return Canvas( @@ -750,7 +750,7 @@ def __init__( **kwargs, ): super().__init__(**kwargs) - self.annotations = annotations + self.annotations: Annotations = annotations def svg_bounding_box(self): bbox = self.elements_bounding_box @@ -852,7 +852,7 @@ def __init__( **kwargs, ): super().__init__(**kwargs) - self.annotations = annotations + self.annotations: Annotations = annotations def dimension_cap_height(self): return ( diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index b0a25bc..18273da 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -15,7 +15,7 @@ def sind(angle: float) -> float: class Point(Sequence[float]): def __init__(self, value: Sequence[float]): - self.value = value + self.value: Sequence[float] = value super().__init__() @overload @@ -105,7 +105,7 @@ def to_vector(self) -> "Vector": class Points(Sequence[Point]): def __init__(self, value: list[Point]): - self.value = value + self.value: list[Point] = value super().__init__() @overload @@ -134,7 +134,7 @@ def to_list(self) -> list[Number]: class Vector(Sequence[float]): def __init__(self, value: Sequence[float]): - self.value = value + self.value: Sequence[float] = value super().__init__() @overload @@ -203,7 +203,7 @@ def to_point(self) -> Point: class Matrix(Sequence[Vector]): def __init__(self, value: Sequence[Vector]): - self.value = value + self.value: Sequence[Vector] = value super().__init__() @overload diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 895dc5a..06d98e4 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -39,17 +39,17 @@ def __init__( clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): - self.lambda_radius = lambda_radius - self.lambda_thickness = lambda_thickness - self.lambda_gap = lambda_gap - self.logo_layout = logo_layout - self.logomark_colors = logomark_colors - self.logomark_color_style = logomark_color_style - self.logotype_color = logotype_color - self.logotype_style = logotype_style - self.logotype_spacings = logotype_spacings - self.logotype_characters = logotype_characters - self.clear_space = clear_space + self.lambda_radius: int = lambda_radius + self.lambda_thickness: float = lambda_thickness + self.lambda_gap: float = lambda_gap + self.logo_layout: LogoLayout = logo_layout + self.logomark_colors: LogomarkColors | tuple[Color, ...] = logomark_colors + self.logomark_color_style: ColorStyle = logomark_color_style + self.logotype_color: str = logotype_color + self.logotype_style: LogotypeStyle = logotype_style + self.logotype_spacings: tuple[int, ...] = logotype_spacings + self.logotype_characters: str = logotype_characters + self.clear_space: ClearSpace = clear_space self._init_snowflake() self.logotype_cap_height: float = ( diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 7aa0ca6..b41dd08 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -34,11 +34,11 @@ def __init__( clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): - self.radius = radius - self.thickness = thickness - self.gap = gap - self.color = color - self.clear_space = clear_space + self.radius: int = radius + self.thickness: float = thickness + self.gap: float = gap + self.color: str = color + self.clear_space: ClearSpace = clear_space super().__init__(**kwargs) @property @@ -188,8 +188,8 @@ def __init__( self.colors_value: tuple[Color, ...] = ( colors.value if isinstance(colors, LogomarkColors) else colors ) - self.color_style = color_style - self.clear_space = clear_space + self.color_style: ColorStyle = color_style + self.clear_space: ClearSpace = clear_space self._make_css_color_names() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 2b7b024..3859a51 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -4,7 +4,6 @@ import tempfile from collections.abc import Callable from pathlib import Path -from typing import Any import fontforge import svg @@ -32,15 +31,15 @@ class FontLoader: def __init__( self, get_font_file: Callable[[], Path] = get_nixos_logotype_font_file, - transforms_map: dict[str, Any] = DEFAULT_ROUTE159_TRANSFORMS, + transforms_map: dict[str, dict[str, int]] = DEFAULT_ROUTE159_TRANSFORMS, capHeight: float | None = None, scale_glyph: bool = True, offset_glyph: bool = True, ): - self.get_font_file = get_font_file - self.transforms_map = transforms_map - self.scale_glyph = scale_glyph - self.offset_glyph = offset_glyph + self.get_font_file: Callable[[], Path] = get_font_file + self.transforms_map: dict[str, dict[str, int]] = transforms_map + self.scale_glyph: bool = scale_glyph + self.offset_glyph: bool = offset_glyph self._open_font_file() self.capHeight, self.scale = self._ref_size(capHeight) @@ -147,11 +146,11 @@ def __init__( clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): - self.character = character + self.character: str = character self.loader: FontLoader = loader if loader is not None else FontLoader() - self.color = color - self.style = style - self.clear_space = clear_space + self.color: str = color + self.style: LogotypeStyle = style + self.clear_space: ClearSpace = clear_space self.font = self.loader.font self.glyph = self.font[self.character] @@ -285,12 +284,12 @@ def __init__( clear_space: ClearSpace = ClearSpace.RECOMMENDED, **kwargs, ): - self.characters = characters + self.characters: str = characters self.loader: FontLoader = loader if loader is not None else FontLoader() - self.color = color - self.style = style - self.spacings = spacings - self.clear_space = clear_space + self.color: str = color + self.style: LogotypeStyle = style + self.spacings: tuple[int, ...] = spacings + self.clear_space: ClearSpace = clear_space self._load_glyphs() self.cap_height = self.glyphs[0].loader.capHeight From fe019a615c754dfadeb484d3bd96bb9db37a28ea Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 21:23:51 -0700 Subject: [PATCH 31/43] nixoslogo: declare the types of computed attributes --- .../nixoslogo/nixoslogo/annotations.py | 16 +++++++++------- .../nixoslogo/nixoslogo/artifacts/clearspace.py | 4 ++-- .../nixoslogo/nixoslogo/colors.py | 6 +++--- .../python-packages/nixoslogo/nixoslogo/logo.py | 6 +++--- .../nixoslogo/nixoslogo/logomark.py | 14 ++++++-------- .../nixoslogo/nixoslogo/logotype.py | 12 ++++++------ 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 9b7e90e..e06b9c6 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -37,8 +37,8 @@ def __init__( self.cap_height: float | None = cap_height self._load_glyphs() - self.original_cap_height = self.loader.capHeight - self.original_scale = self.loader.scale + self.original_cap_height: float = self.loader.capHeight + self.original_scale: float = self.loader.scale self._set_spacings() self._scale_glyphs() @@ -48,7 +48,7 @@ def _map_characters(self, character: str) -> str: return CHARACTER_GLYPHNAME_MAP.get(character, character) def _load_glyphs(self): - self.glyphs = tuple( + self.glyphs: tuple[Glyph, ...] = tuple( Glyph( loader=self.loader, character=self._map_characters(character), @@ -526,15 +526,17 @@ def __init__( get_font_file: Callable[[], Path] = get_nixos_annotation_font_file, transforms_map: dict[str, dict[str, int]] = DEFAULT_JURA_TRANSFORMS, ): - self.font_loader = FontLoader( + self.font_loader: FontLoader = FontLoader( get_font_file=get_font_file, transforms_map=transforms_map, offset_glyph=False, ) self.font_config: FontConfig = font_config - self.object_lines = ObjectLines(**object_lines_config) - self.construction_lines = ConstructionLines(**construction_lines_config) - self.dimension_lines = DimensionLines( + self.object_lines: ObjectLines = ObjectLines(**object_lines_config) + self.construction_lines: ConstructionLines = ConstructionLines( + **construction_lines_config + ) + self.dimension_lines: DimensionLines = DimensionLines( **dimension_lines_config, font_loader=self.font_loader, font_config=self.font_config, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index b9e2802..ee5fb9d 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -26,8 +26,8 @@ def __init__( self.space_object: BaseRenderable = space_object self.annotations: Annotations = annotations - self.recommended = self.logo(clear_space=ClearSpace.RECOMMENDED) - self.minimal = self.logo(clear_space=ClearSpace.MINIMAL) + self.recommended: BaseRenderable = self.logo(clear_space=ClearSpace.RECOMMENDED) + self.minimal: BaseRenderable = self.logo(clear_space=ClearSpace.MINIMAL) super().__init__(**kwargs) @property diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py index 3c136fe..3b0ee6e 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/colors.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/colors.py @@ -1,4 +1,4 @@ -from typing import Self +from typing import ClassVar, Self from coloraide import Color as ColorBase @@ -6,8 +6,8 @@ class Color(ColorBase): - GRADIENT_LIGHTNESS_DELTA = -0.04 - GRADIENT_CHROMA_DELTA = -0.01 + GRADIENT_LIGHTNESS_DELTA: ClassVar[float] = -0.04 + GRADIENT_CHROMA_DELTA: ClassVar[float] = -0.01 def darken(self, scale: float) -> Self: """Clones and darkens the color. Only used for Lch-like colorspaces.""" diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 06d98e4..14c4741 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -72,12 +72,12 @@ def __init__( super().__init__(**kwargs) def _init_snowflake(self): - self.ilambda = Lambda( + self.ilambda: Lambda = Lambda( radius=self.lambda_radius, thickness=self.lambda_thickness, gap=self.lambda_gap, ) - self.logomark = Logomark( + self.logomark: Logomark = Logomark( ilambda=self.ilambda, colors=self.logomark_colors, color_style=self.logomark_color_style, @@ -88,7 +88,7 @@ def _default_cap_height(self) -> float: return self.lambda_radius * (1 + self.lambda_thickness * 2) * math.sqrt(3) def _init_logotype(self): - self.logotype = Logotype( + self.logotype: Logotype = Logotype( characters=self.logotype_characters, loader=self.loader, color=self.logotype_color, diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index b41dd08..c6d76e9 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -182,7 +182,7 @@ def __init__( **kwargs, ): self.ilambda = ilambda - self.colors_name = ( + self.colors_name: str = ( colors.name if isinstance(colors, LogomarkColors) else "custom" ) self.colors_value: tuple[Color, ...] = ( @@ -191,9 +191,9 @@ def __init__( self.color_style: ColorStyle = color_style self.clear_space: ClearSpace = clear_space - self._make_css_color_names() + self.css_color_names: tuple[str, ...] = self._make_css_color_names() - self._gradient_stop_offsets = [0, 25, 100] + self._gradient_stop_offsets: list[int] = [0, 25, 100] super().__init__(**kwargs) @@ -232,17 +232,15 @@ def _get_clearspace(self): case _: raise Exception(f"Unknown ClearSpace: {self.clear_space}") - def _make_css_color_names(self): + def _make_css_color_names(self) -> tuple[str, ...]: match self.color_style: case ColorStyle.FLAT: - self.css_color_names = tuple( + return tuple( color.convert("srgb").to_string(hex=True) for color in self.colors_value ) case ColorStyle.GRADIENT: - self.css_color_names = tuple( - color.gradient_color_name() for color in self.colors_value - ) + return tuple(color.gradient_color_name() for color in self.colors_value) case _: raise Exception(f"Unknown ColorStyle: {self.color_style}") diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 3859a51..358796b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -48,15 +48,15 @@ def __init__( def _open_font_file(self): source_path = self.get_font_file() logger.debug(f"Original font file: {source_path}") - self._tempdir = Path(tempfile.mkdtemp(prefix="fontforge_")) + self._tempdir: Path = Path(tempfile.mkdtemp(prefix="fontforge_")) logger.debug(f"Temporary directory created: {self._tempdir}") - self._font_path = self._tempdir / source_path.name + self._font_path: Path = self._tempdir / source_path.name shutil.copy2(source_path, self._font_path) logger.debug(f"Font file copied: {self._font_path}") self.font = fontforge.open(str(self._font_path)) logger.debug(f"Font file loaded: {self._font_path}") - self._cleaned_up = False + self._cleaned_up: bool = False # Register the cleanup function to be called when the Python process exits atexit.register(self._cleanup_once) @@ -292,14 +292,14 @@ def __init__( self.clear_space: ClearSpace = clear_space self._load_glyphs() - self.cap_height = self.glyphs[0].loader.capHeight - self.scale = self.glyphs[0].loader.scale + self.cap_height: float = self.glyphs[0].loader.capHeight + self.scale: float = self.glyphs[0].loader.scale self._set_spacings() super().__init__(**kwargs) def _load_glyphs(self): - self.glyphs = tuple( + self.glyphs: tuple[Glyph, ...] = tuple( Glyph( loader=self.loader, character=character, From 8745bb856b2f64975d6cce81f3f433d04b52fae4 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 21:42:04 -0700 Subject: [PATCH 32/43] nixoslogo: mark the overriding methods --- .../nixoslogo/nixoslogo/annotations.py | 6 ++++- .../nixoslogo/artifacts/clearspace.py | 5 ++++ .../nixoslogo/nixoslogo/artifacts/misuse.py | 11 ++++++++ .../nixoslogo/nixoslogo/dimensioned.py | 26 ++++++++++++++++++- .../nixoslogo/nixoslogo/geometry.py | 17 +++++++++++- .../nixoslogo/nixoslogo/logo.py | 5 ++++ .../nixoslogo/nixoslogo/logomark.py | 10 ++++++- .../nixoslogo/nixoslogo/logotype.py | 9 +++++++ .../python-packages/nixoslogo/poetry.lock | 4 +-- .../python-packages/nixoslogo/pyproject.toml | 2 +- 10 files changed, 88 insertions(+), 7 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index e06b9c6..3927c69 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -3,7 +3,7 @@ from collections.abc import Callable from dataclasses import dataclass from pathlib import Path -from typing import NotRequired, TypedDict +from typing import NotRequired, TypedDict, override import svg from svg._types import Number @@ -58,6 +58,7 @@ def _load_glyphs(self): ) @property + @override def elements_bounding_box(self): characters_box = tuple( f(elem) @@ -95,12 +96,15 @@ def _scale_glyphs(self): for glyph in self.glyphs: glyph.layer.transform((1 / scale, 0, 0, 1 / scale, 0, 0)) + @override def _get_clearspace(self): return 0 + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements(*(elem.make_svg_element() for elem in self.glyphs)) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index ee5fb9d..ca31aeb 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -1,3 +1,4 @@ +from typing import override import logging import svg @@ -31,12 +32,15 @@ def __init__( super().__init__(**kwargs) @property + @override def elements_bounding_box(self) -> tuple[float, float, float, float]: return self.recommended.elements_bounding_box + @override def _get_clearspace(self) -> float: return self.recommended._get_clearspace() + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -47,6 +51,7 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: + list(extras) ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.make_greyscale_def(), diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index 639a163..bc9271a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -1,3 +1,4 @@ +from typing import override import logging import svg @@ -23,6 +24,7 @@ def __init__( **kwargs, ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ @@ -35,6 +37,7 @@ def make_filename(self, extras: tuple[str, ...] = ()): ) @property + @override def elements_bounding_box(self) -> tuple[float, float, float, float]: return ( -self.inradius, @@ -43,6 +46,7 @@ def elements_bounding_box(self) -> tuple[float, float, float, float]: self.circumradius, ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( svg.G( @@ -64,6 +68,7 @@ def __init__( **kwargs, ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ @@ -75,6 +80,7 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( svg.G( @@ -96,6 +102,7 @@ def __init__( **kwargs, ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ @@ -107,6 +114,7 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) + @override def _make_canvas(self) -> Canvas: min_x, min_y, max_x, max_y = self.elements_bounding_box clear_space = self._get_clearspace() @@ -136,6 +144,7 @@ def __init__( **kwargs, ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ @@ -147,6 +156,7 @@ def make_filename(self, extras: tuple[str, ...] = ()): + list(extras) ) + @override def _default_cap_height(self) -> float: return self.lambda_radius @@ -165,6 +175,7 @@ def __init__( **kwargs, ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 16b129b..8a0a74b 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -1,6 +1,6 @@ import math from collections.abc import Callable -from typing import TypedDict +from typing import TypedDict, override import svg @@ -38,6 +38,7 @@ def __init__( self.annotations: Annotations = annotations self.clear_space: ClearSpace = clear_space + @override def _make_canvas(self) -> Canvas: return Canvas( min_x=-2 * self.radius, @@ -114,6 +115,7 @@ def make_lambda_polygons(self): ), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -198,6 +200,7 @@ def make_lambda_linear_dimensions(self): for index, opts in enumerate(options) ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.canvas.make_axis_lines(), @@ -209,6 +212,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_lambda_linear_dimensions(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -246,6 +250,7 @@ def make_lambda_angular_dimensions(self): for index, opts in enumerate(options) ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.canvas.make_axis_lines(), @@ -255,6 +260,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_lambda_angular_dimensions(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -354,6 +360,7 @@ def make_named_lambda_vertices(self): for point, annotation, translation in named_annotations.values() ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.canvas.make_axis_lines(), @@ -365,6 +372,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_named_lambda_vertices(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -446,6 +454,7 @@ def make_parametric_annotations(self): return radius + thickness + gap + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.canvas.make_axis_lines(), @@ -457,6 +466,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_parametric_annotations(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -480,6 +490,7 @@ def __init__( super().__init__(ilambda=ilambda, **kwargs) self.annotations: Annotations = annotations + @override def _make_canvas(self) -> Canvas: return Canvas( min_x=-4 * self.ilambda.radius, @@ -561,6 +572,7 @@ def make_flake_polygons_for_dimensions(self): for lambda_points in flake_points ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.make_flake_polygons_for_dimensions(), @@ -571,6 +583,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_flake_linear_dimensions(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -595,6 +608,7 @@ def __init__( super().__init__(ilambda=ilambda, **kwargs) self.annotations: Annotations = annotations + @override def _make_canvas(self) -> Canvas: return Canvas( min_x=-2 * self.ilambda.radius, @@ -651,6 +665,7 @@ def make_dimensioned_gradient_lines(self): ] ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.canvas.make_axis_lines(), @@ -660,6 +675,7 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_dimensioned_gradient_lines(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -709,12 +725,14 @@ def make_gradient_annotations(self): ), ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( super().make_svg_elements(), self.make_gradient_annotations(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -726,6 +744,7 @@ def make_filename(self, extras: tuple[str, ...] = ()) -> str: class DimensionedLogomarkGradientBackground(DimensionedLogomarkGradient): + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.make_flake_gradients_defs(), @@ -733,6 +752,7 @@ def make_svg_elements(self) -> list[svg.Element]: super().make_svg_elements(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -826,6 +846,7 @@ def dimension_spacings(self): for (point1, point2), offset, side in zip(points, offsets, sides) ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.svg_bounding_box(), @@ -834,6 +855,7 @@ def make_svg_elements(self) -> list[svg.Element]: super().make_svg_elements(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -894,6 +916,7 @@ def dimension_bearing(self): ), ) + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.dimension_cap_height(), @@ -901,6 +924,7 @@ def make_svg_elements(self) -> list[svg.Element]: super().make_svg_elements(), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 18273da..f03d209 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -1,6 +1,6 @@ import math from collections.abc import Sequence -from typing import overload +from typing import overload, override from svg._types import Number @@ -24,15 +24,19 @@ def __getitem__(self, index: int) -> float: ... @overload def __getitem__(self, index: slice) -> Sequence[float]: ... + @override def __getitem__(self, index: int | slice) -> "float | Sequence[float]": return self.value[index] + @override def __len__(self): return len(self.value) + @override def __str__(self): return f"{self.x, self.y}" + @override def __repr__(self): return f"Point{self.value}" @@ -114,15 +118,19 @@ def __getitem__(self, index: int) -> Point: ... @overload def __getitem__(self, index: slice) -> Sequence[Point]: ... + @override def __getitem__(self, index: int | slice) -> "Point | Sequence[Point]": return self.value[index] + @override def __len__(self): return len(self.value) + @override def __repr__(self): return f"Points{self.value}" + @override def __str__(self): return "[" + ", ".join(str(elem) for elem in self.value) + "]" @@ -143,15 +151,19 @@ def __getitem__(self, index: int) -> float: ... @overload def __getitem__(self, index: slice) -> Sequence[float]: ... + @override def __getitem__(self, index: int | slice) -> "float | Sequence[float]": return self.value[index] + @override def __len__(self): return len(self.value) + @override def __repr__(self): return f"Vector{self.value}" + @override def __str__(self): return f"{self.value}" @@ -212,12 +224,15 @@ def __getitem__(self, index: int) -> Vector: ... @overload def __getitem__(self, index: slice) -> Sequence[Vector]: ... + @override def __getitem__(self, index: int | slice) -> "Vector | Sequence[Vector]": return self.value[index] + @override def __len__(self): return len(self.value) * len(self.value[0]) + @override def __str__(self): return "(" + ",\n ".join(str(elem) for elem in self.value) + ")" diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 14c4741..741cc89 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -1,3 +1,4 @@ +from typing import override import math import svg @@ -112,6 +113,7 @@ def _default_transform(self) -> svg.Translate: raise Exception(f"Unknown LogoLayout: {self.logo_layout}") @property + @override def elements_bounding_box(self) -> tuple[float, float, float, float]: logomark_box = self.logomark.elements_bounding_box logotype_box = self.logotype.elements_bounding_box @@ -130,6 +132,7 @@ def elements_bounding_box(self) -> tuple[float, float, float, float]: ) return (min_x, min_y, max_x, max_y) + @override def _get_clearspace(self): match self.clear_space: case ClearSpace.NONE: @@ -141,6 +144,7 @@ def _get_clearspace(self): case _: raise Exception(f"Unknown ClearSpace: {self.clear_space}") + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( self.logomark.make_svg_elements(), @@ -150,6 +154,7 @@ def make_svg_elements(self) -> list[svg.Element]: ), ) + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index c6d76e9..0876d0e 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -4,7 +4,7 @@ import svg from svg._types import Length -from typing import TypedDict +from typing import TypedDict, override from nixoslogo.colors import Color from nixoslogo.core import ( @@ -42,6 +42,7 @@ def __init__( super().__init__(**kwargs) @property + @override def elements_bounding_box(self): double_up = [ ( @@ -59,6 +60,7 @@ def elements_bounding_box(self): ) ) + @override def _get_clearspace(self): match self.clear_space: case ClearSpace.NONE: @@ -70,6 +72,7 @@ def _get_clearspace(self): case _: raise Exception(f"Unknown ClearSpace: {self.clear_space}") + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements( svg.Polygon( @@ -158,6 +161,7 @@ def make_named_lambda_points( ) return {name: point for name, point in zip(names, points)} + @override def make_filename(self, extras: tuple[str, ...] = ()) -> str: return "-".join( [ @@ -198,6 +202,7 @@ def __init__( super().__init__(**kwargs) @property + @override def elements_bounding_box(self): return ( -self.circumradius, @@ -221,6 +226,7 @@ def snowflake_lambda_ratio(self): """The ratio between the snowflake and lambda radius.""" return self.circumradius / self.ilambda.radius + @override def _get_clearspace(self): match self.clear_space: case ClearSpace.NONE: @@ -244,6 +250,7 @@ def _make_css_color_names(self) -> tuple[str, ...]: case _: raise Exception(f"Unknown ColorStyle: {self.color_style}") + @override def make_svg_elements(self) -> list[svg.Element]: match self.color_style: case ColorStyle.FLAT: @@ -351,6 +358,7 @@ def make_clean_flake_polygons_gradient(self): ) ) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 358796b..26cd2e1 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -1,3 +1,4 @@ +from typing import override import atexit import logging import shutil @@ -213,9 +214,11 @@ def get_path(self, layer): return path @property + @override def elements_bounding_box(self): return self.layer.boundingBox() + @override def _get_clearspace(self): match self.clear_space: case ClearSpace.NONE: @@ -256,9 +259,11 @@ def make_svg_element(self): case _: raise Exception("Unknown LogotypeStyle") + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements(self.make_svg_element()) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ @@ -316,6 +321,7 @@ def _set_spacings(self): character.layer.transform((1, 0, 0, 1, x_offset, 0)) x_offset += character.elements_width + @override def _get_clearspace(self): match self.clear_space: case ClearSpace.NONE: @@ -328,6 +334,7 @@ def _get_clearspace(self): raise Exception("Unknown ClearSpace") @property + @override def elements_bounding_box(self): characters_box = tuple( f(elem) @@ -339,9 +346,11 @@ def elements_bounding_box(self): with_lead_spacing = (characters_box[0] - self.spacings[0],) + characters_box[1:] return with_lead_spacing + @override def make_svg_elements(self) -> list[svg.Element]: return flatten_svg_elements(*(elem.make_svg_element() for elem in self.glyphs)) + @override def make_filename(self, extras: tuple[str, ...] = ()): return "-".join( [ diff --git a/package-sets/python-packages/nixoslogo/poetry.lock b/package-sets/python-packages/nixoslogo/poetry.lock index 8af6816..0d3cfa9 100644 --- a/package-sets/python-packages/nixoslogo/poetry.lock +++ b/package-sets/python-packages/nixoslogo/poetry.lock @@ -204,5 +204,5 @@ dev = ["isort", "mypy", "pytest"] [metadata] lock-version = "2.1" -python-versions = ">=3.11" -content-hash = "037f3927469b35b609cb381684e8d4bcb62c6ccd3c0769afc013155676f1574a" +python-versions = ">=3.12" +content-hash = "78043a0b8e093c703246fe998d22fb7fa3974c82cafa985ca51bd0af4fbcb0e8" diff --git a/package-sets/python-packages/nixoslogo/pyproject.toml b/package-sets/python-packages/nixoslogo/pyproject.toml index 7387f1e..c49fd5f 100644 --- a/package-sets/python-packages/nixoslogo/pyproject.toml +++ b/package-sets/python-packages/nixoslogo/pyproject.toml @@ -6,7 +6,7 @@ authors = [ {name = "Daniel Baker",email = "daniel.n.baker@gmail.com"} ] readme = "README.md" -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "svg-py (>=1.6.0,<2.0.0)", "coloraide (>=6.1,<7.0)", From 889a19b94fa29a38de48acb26d1d14964055113f Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 21:45:56 -0700 Subject: [PATCH 33/43] nixoslogo: sort the typing imports --- .../python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py | 2 +- .../python-packages/nixoslogo/nixoslogo/artifacts/misuse.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/logo.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/logomark.py | 2 +- package-sets/python-packages/nixoslogo/nixoslogo/logotype.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py index ca31aeb..ef11561 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/clearspace.py @@ -1,5 +1,5 @@ -from typing import override import logging +from typing import override import svg diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py index bc9271a..bd609a2 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/artifacts/misuse.py @@ -1,5 +1,5 @@ -from typing import override import logging +from typing import override import svg diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index 741cc89..a9b0549 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -1,5 +1,5 @@ -from typing import override import math +from typing import override import svg diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 0876d0e..6968fc8 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -1,10 +1,10 @@ import fractions import itertools import math +from typing import TypedDict, override import svg from svg._types import Length -from typing import TypedDict, override from nixoslogo.colors import Color from nixoslogo.core import ( diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 26cd2e1..08ad942 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -1,10 +1,10 @@ -from typing import override import atexit import logging import shutil import tempfile from collections.abc import Callable from pathlib import Path +from typing import override import fontforge import svg From 2ae4d2556a741d488a67d811ad5ba38a06a18b84 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:07:58 -0700 Subject: [PATCH 34/43] nixoslogo: drop the unreachable enum match guards --- package-sets/python-packages/nixoslogo/nixoslogo/logo.py | 4 ---- .../python-packages/nixoslogo/nixoslogo/logomark.py | 8 -------- .../python-packages/nixoslogo/nixoslogo/logotype.py | 6 ------ 3 files changed, 18 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index a9b0549..f9bcc7e 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -109,8 +109,6 @@ def _default_transform(self) -> svg.Translate: -self.logotype.elements_width / 2, self.logomark.inradius + self.logotype_cap_height * 1.25, ) - case _: - raise Exception(f"Unknown LogoLayout: {self.logo_layout}") @property @override @@ -141,8 +139,6 @@ def _get_clearspace(self): return self.logomark.elements_height / 2 case ClearSpace.RECOMMENDED: return self.logomark.elements_height - case _: - raise Exception(f"Unknown ClearSpace: {self.clear_space}") @override def make_svg_elements(self) -> list[svg.Element]: diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 6968fc8..0e6664f 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -69,8 +69,6 @@ def _get_clearspace(self): return self.elements_y_max / 2 case ClearSpace.RECOMMENDED: return self.elements_y_max - case _: - raise Exception(f"Unknown ClearSpace: {self.clear_space}") @override def make_svg_elements(self) -> list[svg.Element]: @@ -235,8 +233,6 @@ def _get_clearspace(self): return self.elements_y_max / 2 case ClearSpace.RECOMMENDED: return self.elements_y_max - case _: - raise Exception(f"Unknown ClearSpace: {self.clear_space}") def _make_css_color_names(self) -> tuple[str, ...]: match self.color_style: @@ -247,8 +243,6 @@ def _make_css_color_names(self) -> tuple[str, ...]: ) case ColorStyle.GRADIENT: return tuple(color.gradient_color_name() for color in self.colors_value) - case _: - raise Exception(f"Unknown ColorStyle: {self.color_style}") @override def make_svg_elements(self) -> list[svg.Element]: @@ -260,8 +254,6 @@ def make_svg_elements(self) -> list[svg.Element]: self.make_flake_gradients_defs(), self.make_clean_flake_polygons_gradient(), ) - case _: - raise Exception(f"Unknown ColorStyle: {self.color_style}") def make_flake_points(self): lambda_points_gap = self.ilambda.make_lambda_points() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 08ad942..a297305 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -227,8 +227,6 @@ def _get_clearspace(self): return self.loader.capHeight / 2 case ClearSpace.RECOMMENDED: return self.loader.capHeight - case _: - raise Exception("Unknown ClearSpace") def make_svg_element(self): match self.style: @@ -256,8 +254,6 @@ def make_svg_element(self): d=self.get_path(self.layer), fill=self.color, ) - case _: - raise Exception("Unknown LogotypeStyle") @override def make_svg_elements(self) -> list[svg.Element]: @@ -330,8 +326,6 @@ def _get_clearspace(self): return self.cap_height / 2 case ClearSpace.RECOMMENDED: return self.cap_height - case _: - raise Exception("Unknown ClearSpace") @property @override From ee03e5b30d953ab9585a43fd9bacb6f39d254597 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:11:52 -0700 Subject: [PATCH 35/43] nixoslogo: ruff fixes --- .../python-packages/nixoslogo/nixoslogo/core.py | 16 ++++------------ .../nixoslogo/nixoslogo/geometry.py | 2 +- .../nixoslogo/nixoslogo/helpers.py | 2 +- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/core.py b/package-sets/python-packages/nixoslogo/nixoslogo/core.py index 5b21476..b34cc21 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/core.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/core.py @@ -42,7 +42,7 @@ def flatten_svg_elements(*elements: SvgElements) -> list[svg.Element]: def get_path_from_envvar(envvar: str) -> Path: path = os.getenv(envvar) if not path: - raise EnvironmentError( + raise OSError( f"{envvar} is not set. " + "Please provide a font path explicitly or set the environment variable." ) @@ -50,7 +50,7 @@ def get_path_from_envvar(envvar: str) -> Path: def get_color_by_name(palette: list[PaletteColor], name: str) -> PaletteColor: - return list(filter(lambda color: color["name"] == name, palette))[0] + return next(color for color in palette if color["name"] == name) get_nixos_logotype_font_file = partial( @@ -137,17 +137,9 @@ def get_color_by_name(palette: list[PaletteColor], name: str) -> PaletteColor: get_color_by_name(PALETTE_DEFAULT_COLORS, "NixOS Light Blue")["value"], ) RAINBOW_COLORS = tuple( - map( - lambda color: Color("oklch", color["value"]), - PALETTE_RAINBOW_COLORS, - ) -) -TRANS_COLORS = tuple( - map( - lambda color: Color("oklch", color["value"]), - PALETTE_TRANS_COLORS, - ) + Color("oklch", color["value"]) for color in PALETTE_RAINBOW_COLORS ) +TRANS_COLORS = tuple(Color("oklch", color["value"]) for color in PALETTE_TRANS_COLORS) NIXOS_BLACK = Color( "oklch", diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index f03d209..305ac95 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -198,7 +198,7 @@ def length(self) -> float: return math.sqrt(self._modulus_squared()) def dot(self, other: "Vector") -> float: - return sum((self * other)) + return sum(self * other) def normalize(self) -> "Vector": return self / self.length() diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py index 104480f..7905e0f 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/helpers.py @@ -9,7 +9,7 @@ def stable_hash(thing: object) -> str: dump = cast(str, jsonpickle.encode(thing)) - return hashlib.md5(dump.encode("utf-8")).digest().hex() + return hashlib.md5(dump.encode("utf-8")).hexdigest() def arc_sagitta(point1: Point, point2: Point, radius: float, large: bool, sweep: bool): From f8127496391ec5efed32089c24a7e9753a22b834 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:15:49 -0700 Subject: [PATCH 36/43] nixoslogo: return NotImplemented for unsupported operands --- .../nixoslogo/nixoslogo/geometry.py | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 305ac95..08bf1f0 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -46,10 +46,9 @@ def __neg__(self): def __add__(self, other: "Point | Vector") -> "Point": if isinstance(other, Point): return Point((self.x + other.x, self.y + other.y)) - elif isinstance(other, Vector): + if isinstance(other, Vector): return Point((self.x + other[0], self.y + other[1])) - else: - raise Exception(f"Not sure how to add {type(other)} to Point.") + return NotImplemented @overload def __sub__(self, other: "Point") -> "Vector": ... @@ -60,10 +59,9 @@ def __sub__(self, other: "Vector") -> "Point": ... def __sub__(self, other: "Point | Vector") -> "Point | Vector": if isinstance(other, Point): return Vector((self.x - other.x, self.y - other.y)) - elif isinstance(other, Vector): + if isinstance(other, Vector): return Point((self.x - other[0], self.y - other[1])) - else: - raise Exception(f"Not sure how to add {type(other)} to Point.") + return NotImplemented def __truediv__(self, other: float) -> "Point": return Point(tuple(elem / other for elem in self)) @@ -183,10 +181,9 @@ def __rmul__(self, other: float) -> "Vector": return Vector(tuple(other * elem for elem in self)) def __matmul__(self, other: "Point | Vector") -> list[float]: - if isinstance(other, Point | Vector): - return [s * o for s, o in zip(self, other)] - else: - raise Exception(f"Not sure how to add {type(other)} to Point.") + if not isinstance(other, Point | Vector): + return NotImplemented + return [s * o for s, o in zip(self, other)] def __truediv__(self, other: float) -> "Vector": return Vector(tuple(elem / other for elem in self)) @@ -240,9 +237,6 @@ def transpose(self) -> "Matrix": return Matrix(tuple(Vector(row) for row in zip(*self))) def __matmul__(self, other: Point | Vector) -> list[float]: - if isinstance(other, Point | Vector): - return [sum(row @ other) for row in self] - else: - raise Exception( - f"Not sure how to matrix multiply {type(self)} and {type(other)}." - ) + if not isinstance(other, Point | Vector): + return NotImplemented + return [sum(row @ other) for row in self] From a52039a69b58620aff0eba61c7af017efc7877ba Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:24:53 -0700 Subject: [PATCH 37/43] nixoslogo: improve logotype error handling --- .../python-packages/nixoslogo/nixoslogo/logotype.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index a297305..40efa97 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -123,13 +123,13 @@ def _cleanup_once(self): # Close the font file if it's open self.font.close() logger.debug(f"Font file closed: {self._font_path}") - except Exception as e: + except RuntimeError as e: logger.error(f"Error closing font file: {self._font_path}, {e}") # Remove the temporary directory and its contents try: - shutil.rmtree(self._tempdir, ignore_errors=True) + shutil.rmtree(self._tempdir) logger.debug(f"Temporary directory removed: {self._tempdir}") - except Exception as e: + except OSError as e: logger.error(f"Error removing temporary directory: {self._tempdir}, {e}") def __del__(self): From 5e4a56ef56ce798724d954ca26410f9556f9ef95 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:34:04 -0700 Subject: [PATCH 38/43] nixoslogo: overload the geometry operators --- .../nixoslogo/nixoslogo/geometry.py | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py index 08bf1f0..aa12d56 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/geometry.py @@ -43,7 +43,13 @@ def __repr__(self): def __neg__(self): return Point(tuple(-elem for elem in self)) - def __add__(self, other: "Point | Vector") -> "Point": + @overload + def __add__(self, other: "Point") -> "Point": ... + + @overload + def __add__(self, other: "Vector") -> "Point": ... + + def __add__(self, other: object) -> "Point": if isinstance(other, Point): return Point((self.x + other.x, self.y + other.y)) if isinstance(other, Vector): @@ -56,7 +62,7 @@ def __sub__(self, other: "Point") -> "Vector": ... @overload def __sub__(self, other: "Vector") -> "Point": ... - def __sub__(self, other: "Point | Vector") -> "Point | Vector": + def __sub__(self, other: object) -> "Point | Vector": if isinstance(other, Point): return Vector((self.x - other.x, self.y - other.y)) if isinstance(other, Vector): @@ -180,7 +186,13 @@ def __mul__(self, other: "Vector") -> "Vector": def __rmul__(self, other: float) -> "Vector": return Vector(tuple(other * elem for elem in self)) - def __matmul__(self, other: "Point | Vector") -> list[float]: + @overload + def __matmul__(self, other: "Point") -> list[float]: ... + + @overload + def __matmul__(self, other: "Vector") -> list[float]: ... + + def __matmul__(self, other: object) -> list[float]: if not isinstance(other, Point | Vector): return NotImplemented return [s * o for s, o in zip(self, other)] @@ -236,7 +248,13 @@ def __str__(self): def transpose(self) -> "Matrix": return Matrix(tuple(Vector(row) for row in zip(*self))) - def __matmul__(self, other: Point | Vector) -> list[float]: + @overload + def __matmul__(self, other: Point) -> list[float]: ... + + @overload + def __matmul__(self, other: Vector) -> list[float]: ... + + def __matmul__(self, other: object) -> list[float]: if not isinstance(other, Point | Vector): return NotImplemented return [sum(row @ other) for row in self] From 36e7d82cdf854a4be570d64d13e3ac82883f1877 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:47:21 -0700 Subject: [PATCH 39/43] nixoslogo: remove dead parameter, `side` --- .../nixoslogo/nixoslogo/annotations.py | 1 - .../nixoslogo/nixoslogo/dimensioned.py | 19 +++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py index 3927c69..751c35a 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/annotations.py @@ -422,7 +422,6 @@ def make_dimension_angle( reference: Point, flip: bool, large: bool, - side: str, ratio: float, text: str | None = None, ): diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py index 8a0a74b..24bd088 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/dimensioned.py @@ -22,7 +22,6 @@ class DimensionLineOptions(TypedDict): class DimensionAngleOptions(TypedDict): flip: bool large: bool - side: str ratio: float text: str @@ -228,15 +227,15 @@ def make_lambda_angular_dimensions(self): lambda_points_no_gap = self.make_lambda_points() # fmt: off options: list[DimensionAngleOptions] = [ - {"flip": True, "large": False, "side": "right", "ratio": 1 / 2, "text": "A"}, - {"flip": True, "large": False, "side": "left", "ratio": 1 / 2, "text": "A"}, - {"flip": True, "large": False, "side": "left", "ratio": 3 / 8, "text": "B"}, - {"flip": False, "large": False, "side": "right", "ratio": 1 / 2, "text": "A"}, - {"flip": True, "large": False, "side": "left", "ratio": 1 / 2, "text": "B"}, - {"flip": True, "large": False, "side": "left", "ratio": 1 / 2, "text": "B"}, - {"flip": True, "large": False, "side": "left", "ratio": 1 / 2, "text": "B"}, - {"flip": False, "large": False, "side": "left", "ratio": 1 / 2, "text": "B"}, - {"flip": True, "large": False, "side": "left", "ratio": 3 / 8, "text": "B"}, + {"flip": True, "large": False, "ratio": 1 / 2, "text": "A"}, + {"flip": True, "large": False, "ratio": 1 / 2, "text": "A"}, + {"flip": True, "large": False, "ratio": 3 / 8, "text": "B"}, + {"flip": False, "large": False, "ratio": 1 / 2, "text": "A"}, + {"flip": True, "large": False, "ratio": 1 / 2, "text": "B"}, + {"flip": True, "large": False, "ratio": 1 / 2, "text": "B"}, + {"flip": True, "large": False, "ratio": 1 / 2, "text": "B"}, + {"flip": False, "large": False, "ratio": 1 / 2, "text": "B"}, + {"flip": True, "large": False, "ratio": 3 / 8, "text": "B"}, ] # fmt: on From 7faf2ba3caec8ae737ea3041e3ac00e8153806e2 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:49:48 -0700 Subject: [PATCH 40/43] nixoslogo: add list annotation in logomark for linear_gradient --- package-sets/python-packages/nixoslogo/nixoslogo/logomark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py index 0e6664f..f180eda 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logomark.py @@ -298,7 +298,7 @@ def make_gradient_end_points(self) -> GradientEndPoints: def make_flake_gradients_defs(self): gradient_end_points = self.make_gradient_end_points() - linear_gradients = [] + linear_gradients: list[svg.Element] = [] for color, color_name in zip(self.colors_value, self.css_color_names): color_original = color.convert("srgb").to_string(hex=True) color_midpoint = color.darken(1).convert("srgb").to_string(hex=True) From 95b66dce17e09708b6814dcff3c66327ae029ccc Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:50:48 -0700 Subject: [PATCH 41/43] nixoslogo: remove transforms from _offset_glyph as it was not used --- package-sets/python-packages/nixoslogo/nixoslogo/logotype.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 40efa97..8d06cc6 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -67,7 +67,7 @@ def _setup_glyphs(self): if self.scale_glyph: self._scale_glyph(character, transforms) if self.offset_glyph: - self._offset_glyph(character, transforms) + self._offset_glyph(character) def _ref_size(self, capHeight: float | None) -> tuple[float, float]: """ @@ -96,7 +96,7 @@ def _scale_glyph(self, character: str, transforms: dict[str, int]): ) ) - def _offset_glyph(self, character: str, transforms: dict[str, int]): + def _offset_glyph(self, character: str): """Offset a glyph; primarily used to remove the left side bearing.""" self.font[character].transform( ( From 5a602198c7d1ffa4902c0f709fc2e25e8872bf1a Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:51:25 -0700 Subject: [PATCH 42/43] nixoslogo: copy2 returns an unused value --- package-sets/python-packages/nixoslogo/nixoslogo/logotype.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 8d06cc6..6222675 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -52,7 +52,7 @@ def _open_font_file(self): self._tempdir: Path = Path(tempfile.mkdtemp(prefix="fontforge_")) logger.debug(f"Temporary directory created: {self._tempdir}") self._font_path: Path = self._tempdir / source_path.name - shutil.copy2(source_path, self._font_path) + _ = shutil.copy2(source_path, self._font_path) logger.debug(f"Font file copied: {self._font_path}") self.font = fontforge.open(str(self._font_path)) @@ -60,7 +60,7 @@ def _open_font_file(self): self._cleaned_up: bool = False # Register the cleanup function to be called when the Python process exits - atexit.register(self._cleanup_once) + _ = atexit.register(self._cleanup_once) def _setup_glyphs(self): for character, transforms in self.transforms_map.items(): From c7bde6967c54f9887205367b88c354c4d94f0e39 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Sat, 10 Oct 2026 22:55:01 -0700 Subject: [PATCH 43/43] nixoslogo: annotate[C the glyph bounding box and read translate offsets as floats --- .../python-packages/nixoslogo/nixoslogo/logo.py | 10 ++++++---- .../python-packages/nixoslogo/nixoslogo/logotype.py | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py index f9bcc7e..5fcd8ff 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logo.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logo.py @@ -115,11 +115,13 @@ def _default_transform(self) -> svg.Translate: def elements_bounding_box(self) -> tuple[float, float, float, float]: logomark_box = self.logomark.elements_bounding_box logotype_box = self.logotype.elements_bounding_box + offset_x = float(self.logotype_transform.x) + offset_y = float(self.logotype_transform.y or 0) logotype_box_translated = ( - logotype_box[0] + self.logotype_transform.x, - logotype_box[1] + self.logotype_transform.y, - logotype_box[2] + self.logotype_transform.x, - logotype_box[3] + self.logotype_transform.y, + logotype_box[0] + offset_x, + logotype_box[1] + offset_y, + logotype_box[2] + offset_x, + logotype_box[3] + offset_y, ) min_x, min_y, max_x, max_y = ( predicate(elem) diff --git a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py index 6222675..e97e408 100644 --- a/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py +++ b/package-sets/python-packages/nixoslogo/nixoslogo/logotype.py @@ -4,7 +4,7 @@ import tempfile from collections.abc import Callable from pathlib import Path -from typing import override +from typing import cast, override import fontforge import svg @@ -215,8 +215,8 @@ def get_path(self, layer): @property @override - def elements_bounding_box(self): - return self.layer.boundingBox() + def elements_bounding_box(self) -> tuple[float, float, float, float]: + return cast("tuple[float, float, float, float]", self.layer.boundingBox()) @override def _get_clearspace(self): @@ -329,7 +329,7 @@ def _get_clearspace(self): @property @override - def elements_bounding_box(self): + def elements_bounding_box(self) -> tuple[float, float, float, float]: characters_box = tuple( f(elem) for f, elem in zip(