Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions archinstall/lib/installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1990,12 +1990,10 @@ def chown(self, owner: str, path: str, options: list[str] | None = None) -> bool
def set_vconsole(self, locale_config: LocaleConfiguration) -> None:
# use the already set kb layout
kb_vconsole: str = locale_config.kb_layout
# this is the default used in ISO other option for hdpi screens TER16x32
# can be checked using
# zgrep "CONFIG_FONT" /proc/config.gz
# https://wiki.archlinux.org/title/Linux_console#Fonts
font_vconsole = locale_config.console_font

font_vconsole = 'default8x16'
if font_vconsole.startswith('ter-'):
self.pacman.strap(['terminus-font'])

# Ensure /etc exists
vconsole_dir: Path = self.target / 'etc'
Expand Down
31 changes: 30 additions & 1 deletion archinstall/lib/locale/locale_menu.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import override

from archinstall.lib.locale.utils import list_keyboard_languages, list_locales, set_kb_layout
from archinstall.lib.locale.utils import list_console_fonts, list_keyboard_languages, list_locales, set_kb_layout
from archinstall.lib.menu.abstract_menu import AbstractSubMenu
from archinstall.lib.menu.helpers import Selection
from archinstall.lib.models.locale import LocaleConfiguration
Expand Down Expand Up @@ -47,6 +47,13 @@ def _define_menu_options(self) -> list[MenuItem]:
preview_action=lambda item: item.get_value(),
key='sys_enc',
),
MenuItem(
text=tr('Console font'),
action=select_console_font,
value=self._locale_conf.console_font,
preview_action=lambda item: item.get_value(),
key='console_font',
),
]

@override
Expand Down Expand Up @@ -140,3 +147,25 @@ async def select_kb_layout(preset: str | None = None) -> str | None:
return preset
case _:
raise ValueError('Unhandled return type')


async def select_console_font(preset: str | None = None) -> str | None:
fonts = list_console_fonts()

items = [MenuItem(f, value=f) for f in fonts]
group = MenuItemGroup(items, sort_items=False)
group.set_focus_by_value(preset)

result = await Selection[str](
header=tr('Console font'),
group=group,
enable_filter=True,
).show()

match result.type_:
case ResultType.Selection:
return result.get_value()
case ResultType.Skip:
return preset
case _:
raise ValueError('Unhandled return type')
13 changes: 13 additions & 0 deletions archinstall/lib/locale/utils.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import os

from archinstall.lib.command import SysCommand
from archinstall.lib.exceptions import ServiceException, SysCallError
from archinstall.lib.output import error
Expand Down Expand Up @@ -26,6 +28,17 @@ def list_locales() -> list[str]:
return locales


def list_console_fonts() -> list[str]:
fonts: set[str] = set()

for entry in os.listdir('/usr/share/kbd/consolefonts'):
if entry.endswith('.gz'):
name = entry.removesuffix('.gz').removesuffix('.psfu').removesuffix('.psf').removesuffix('.cp').removesuffix('.fnt')
fonts.add(name)

return sorted(fonts)


def list_x11_keyboard_languages() -> list[str]:
return (
SysCommand(
Expand Down
11 changes: 10 additions & 1 deletion archinstall/lib/models/locale.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ class LocaleConfiguration:
kb_layout: str
sys_lang: str
sys_enc: str
# this is the default used in ISO other option for hdpi screens TER16x32
# can be checked using
# zgrep "CONFIG_FONT" /proc/config.gz
# https://wiki.archlinux.org/title/Linux_console#Font
console_font: str = 'default8x16'

@classmethod
def default(cls) -> Self:
Expand All @@ -23,12 +28,14 @@ def json(self) -> dict[str, str]:
'kb_layout': self.kb_layout,
'sys_lang': self.sys_lang,
'sys_enc': self.sys_enc,
'console_font': self.console_font,
}

def preview(self) -> str:
output = '{}: {}\n'.format(tr('Keyboard layout'), self.kb_layout)
output += '{}: {}\n'.format(tr('Locale language'), self.sys_lang)
output += '{}: {}'.format(tr('Locale encoding'), self.sys_enc)
output += '{}: {}\n'.format(tr('Locale encoding'), self.sys_enc)
output += '{}: {}'.format(tr('Console font'), self.console_font)
return output

def _load_config(self, args: dict[str, str]) -> None:
Expand All @@ -38,6 +45,8 @@ def _load_config(self, args: dict[str, str]) -> None:
self.sys_enc = args['sys_enc']
if 'kb_layout' in args:
self.kb_layout = args['kb_layout']
if 'console_font' in args:
self.console_font = args['console_font']

@classmethod
def parse_arg(cls, args: dict[str, Any]) -> Self:
Expand Down
3 changes: 3 additions & 0 deletions archinstall/locales/base.pot
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,9 @@ msgstr ""
msgid "Locale encoding"
msgstr ""

msgid "Console font"
msgstr ""

msgid "Drive(s)"
msgstr ""

Expand Down
3 changes: 3 additions & 0 deletions archinstall/locales/uk/LC_MESSAGES/base.po
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,9 @@ msgstr "Мова локалізації"
msgid "Locale encoding"
msgstr "Кодування локалізації"

msgid "Console font"
msgstr "Шрифт консолі"

msgid "Drive(s)"
msgstr "Диск(и)"

Expand Down