slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash. bash.. bash. cli.. bash. cli. DIY или Сделай сам.. bash. cli. DIY или Сделай сам. fastfetch.. bash. cli. DIY или Сделай сам. fastfetch. linux.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch. Блог компании RUVDS.com.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch. Блог компании RUVDS.com. Настройка Linux.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch. Блог компании RUVDS.com. Настройка Linux. овер-инжиниринг.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch. Блог компании RUVDS.com. Настройка Linux. овер-инжиниринг. скриптинг.. bash. cli. DIY или Сделай сам. fastfetch. linux. Open source. ricing. ruvds_статьи. slowfetch. Блог компании RUVDS.com. Настройка Linux. овер-инжиниринг. скриптинг. терминал.
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 1

В мире Linux существует негласное соревнование: чей neofetch (земля ему пухом) или fastfetch запустится быстрее и покажет заветное лого дистрибутива. Разработчики бьются за миллисекунды, оптимизируют конфиги, переписывают всё на C… Я же решил построить своего рода Машину Голдберга.

Мой путь — это путь slowfetch. Я взял инструмент, который гордится своей скоростью (0.013с), и «оптимизировал» его до 0.77с. Зачем? Чтобы превратить терминал в панель управления космическим кораблём (или алтарь, об этом позже).

Это история о том, как простое желание «пофлексить» конфигом превратилось в полгода разработки на Bash и создание собственного инсталлера.

С чего всё началось: Чужой код и красивые шрифты

В декабре 2023 года я увлёкся рисингом (ricing — визуальная настройка Unix-подобных систем). Случайно наткнулся на репозиторий prasanthrangan/hyprdots и увидел там конфиг для fastfetch.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 2

В нём было то, чего мне не хватало: Nerd Fonts (красивые эмодзи), аккуратные рамочки и… кастомный OS Age (время жизни системы).

Вот тот самый кусок JSON, с которого всё началось:

{  "type": "command",  "key": "  󱦟 OS Age ",  "keyColor": "red",  "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
}
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 3

Этот «однострочник» внутри JSON открыл мне глаза: Fastfetch умеет выполнять команды оболочки и выводить их результат как модуль.

С этой мыслью я и шагнул в пропасть на больше чем полгода.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 4

Глава 1. Эпоха однострочников и страдания ИИ

Тут я столкнулся с главной проблемой архитектуры «всё в одной строке»: Ад экранирования. Чтобы запихнуть сложный пайплайн с awk, grep и кавычками в одну строчку JSON-значения, нужно экранировать кавычки. А если внутри есть ещё вложенные кавычки — экранировать экранирование.

В тот момент я совершил классическую ошибку новичка (или «джуна с молотком»): я не знал, что Fastfetch умеет запускать внешние скрипты, и не знал про существование инструментов вроде jq для автоматического форматирования. Я просто пошёл напролом.

Error: failed to parse JSON config file '/home/jorj/.config/fastfetch/config.jsonc' at (19, 7): unexpected character, expected ',' or '}'

Писать руками строку вида \"text\": \"$(awk '{print \"$2\"}')\" — это прямой путь в психушку. Поэтому я делегировал эту механическую работу нейросетям. Я скармливал им рабочую Bash-команду и просил: «Преврати это в валидную строку для JSON с экранированием». ИИ галлюцинировал, забывал запятые, но это всё равно было быстрее, чем считать обратные слэши вручную, хоть и нормальное решение было прямо под носом.

Глава 2. Вывод информации о железе

Когда стандартные модули закончились, я решил выводить ту информацию, которую обычно смотрят в специализированном софте.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 5

1. ОЗУ: Честная частота

Стандартный вывод памяти скучен. Я хотел знать всё: тип, частоту, реальную скорость. Перепробовав кучу утилит, остановился на inxi -m. Он лаконичен и не требует sudo.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 6

Но тут всплыл «нюанс». Если у вас планка на 3600 МГц, но XMP не включен (или ограничен чипсетом), inxi выдаёт:
speed: 3600 MT/s actual: 3200 MT/s

А если всё совпадает, то просто:
speed: 3200 MT/s

Парсер ломался на машинах друзей. Пришлось писать логику на awk, которая ищет ключевые слова actual, сравнивает числа и формирует красивую строку вида: DDR4 2x8GiB 3.20 GHz.

Визуализация

Визуализация

Итоговый вывод:
Specs : DDR4 8x4 GiB 3.60 GHz

2. Мышь: Кто ты, «USB DEVICE»?

Казалось бы, cat /proc/bus/input/devices — и готово. Но нет. Китайские мышки и даже брендовые девайсы часто представляются там как непонятные USB DEVICE или Mouse.

Пришлось усложнять. Скрипт теперь:

  1. Опрашивает udevadm на наличие устройств класса «mouse».

  2. Отсекает тачпады, графические планшеты и виртуальные устройства.

  3. Вытаскивает Vendor ID и Product ID.

  4. Скармливает их lsusb, чтобы получить настоящее коммерческое название устройства.

  5. Если lsusb молчит — назад на имя из драйвера.

Визуализация

Визуализация

Итоговый вывод:
Mouse : A4Tech

3. Диски: Мини-GParted в терминале

Я хотел видеть всё: вендора (похвастаться NVMe Samsung Evo), тип (NVMe/SSD/HDD), файловую систему и заполненность.
Сначала я использовал smartctl. Он крайне информативен, но требует sudo.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 9

Внезапно я узнал, что inxi умеет показывать вендора диска без рут-прав. В связке с lsblk получился супер-конвейер, который определяет практически любой тип устройств и рисует красивые проценты занятого места.

Визуализация

Визуализация

Итоговый вывод:

Disk : Crucial CT480BX500SSD1 (SSD)            - 390.08 GiB / 447.13 GiB (88%) - fuseblk
Disk : Seagate ST2000DM008-2FR102 (HDD)        - 1.63 TiB / 1.82 TiB (90%) - btrfs
Disk : Samsung Flash Drive (USB)               - 68.37 GiB / 119.51 GiB (58%) - exfat
Disk : Samsung MZVLB1T0HBLR-00000 (NVMe)       - 862.27 GiB / 953.87 GiB (97%) - ext4
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 11

4. VRAM и GPU

С Nvidia всё просто: nvidia-smi — стандарт де-факто.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 12

С AMD (у моего друга на ноутбуке встройка + дискретка) пришлось гуглить. Нормального аналога nvidia-smi «из коробки» нет, пришлось парсить файлы в /sys/class/drm/, искать там вендора 0x1002 (AMD) и читать сырые байты памяти.

Итоговый вывод:
VRAM : 3.8 GiB / 16.0 GiB (24%)

5. Ориентация мониторов

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 13

Зачем? Потому что могу и хочу отобразить, ведь глазом заметить Display: 1080x1920 и не понять «прикола» проще, чем прочесть Display 1 - Horizontal и понять. У меня два монитора: один горизонтальный, второй вертикальный.
Скрипт проверяет, что у вас:

  • Wayland (wlr-randr или JSON выхлоп от него).

  • Gnome (~/.config/monitors.xml).

  • X11 (xrandr).

И пишет:

Display 0 - horizontal
Display 1 - vertical
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 14

Абсолютно бесполезно, сложновато в парсинге, но круто (надеюсь).

Итоговый вывод:

Ori : Display 0 - horizontal
Ori : Display 1 - vertical
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 15

Глава 3. Софт, Сеть и Святость

Браузер

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 16

Переменная $BROWSER часто врёт или указывает на xdg-open. Я же хотел знать, что запущено прямо сейчас. Скрипт смотрит список процессов и сверяет их со своим словарём: firefox, chrome, brave, zen… Если находит совпадение — выводит красивое имя с иконкой.

Итоговый вывод:
Browser : Firefox

Скорость сети

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 17

Speedtest-cli в РФ уже не работает, да и ждать 5–10 секунд ради фетча — перебор как для меня, так и для fastfetch который часто убивал столь долгий процесс.

Решение: curl скачивает небольшой файл с быстрого CDN (CloudeFlare) и замеряет скорость. Это не точный тест канала, но хоть что-то и не хардкод.

Итоговый вывод:
D Speed : ~50 Mbit/s

Святость

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 18

Раз уж я использую Arch, нужно соответствовать местной культуре. Я сделал модуль-мутатор, который меняет название дистрибутива на Святое:

  • Arch -> Archangel.

  • Debian -> Deusbian.

  • Fedora -> Fideora.

  • Gentoo -> Genesis.

Плюс модуль «Blessed by the Divine» с иконками свечей. В сочетании с обоями в стиле готического собора выглядит эпично, хоть и возводит до уровня абсурда поклонение Арчу или любому другому дистрибутиву.

Итоговый вывод:

        ✞✞✞Archangel✞✞✞         
    🕯 Blessed by the Divine 🕯
slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 19

Глава 4. Геометрия Текста и Визуальная Архитектура

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 20

Самое сложное в этом конфиге — не код, а композиция. Я не хотел просто список параметров, я хотел структуру. Если присмотреться, весь вывод подчиняется строгой геометрической логике, которая удерживает внимание.

1. Эффект «Клина» (Системный блок)

В первом блоке длина названий параметров специально подобрана так, чтобы нарастать сверху вниз:

  • WM

  • Edit

  • Fonts

  • Terminal

Это создаёт визуальную диагональ, устремлённую вниз-вправо. Практически везде использованы такие клины по 2-3+ модуля.

2. Принцип «Колонны» (Блок железа)

Второй блок выстроен симметрично, как архитектурная колонна:

  • Капитель (Верх): Короткие, резкие аббревиатуры (CPU, GPU).

  • Ствол (Центр): Самая массивная часть — список дисков. Ключ Disk повторяется много раз, создавая вертикальную ось, а справа идёт плотный массив данных. Это визуальный центр тяжести всего фетча.

  • База (Низ): Блок снова сужается и выравнивается. Периферия и время аптайма (Mouse, Board, OS Age) имеют примерно одинаковую длину ключей, формируя устойчивый фундамент.

Если убрать из этой конструкции «мостик» в виде Memory, структура рассыпется. Память служит плавным переходом от процессора к дискам.

3. Динамический «Якорь» (Медиа модуль)

В самом низу находится плеер. Проблема статичных рамок в том, что название песни всегда разное. Если рамка будет фиксированной — будет огромная линия символов и маленькая закрывающая рамка.

Я написал скрипт media_underline, который считает длину строки (Исполнитель + Трек) и рисует нижнюю границу рамки ровно такой длины, какая нужна. Но с условием min_len — рамка не может быть короче определённого значения, чтобы визуально совпадать с шириной верхних блоков. Это сохраняет общую коробочную или же мешочную структуру фетча.

Почему больше ничего нет?

Я упёрся в физический предел. На 1080p мониторе с читаемым шрифтом вертикальное место закончилось. Добавление любого нового модуля сломает эту визуальную иерархию, а также это нельзя сохранить одним скрином и поделиться, так что большую часть остального времени я потратил на допиливание уже имеющихся модулей, в логике и эстетике.

Глава 5. Прозрение и Launcher

Где-то на середине пути, когда JSON-файл распух до невменяемых размеров, я узнал то, что повергло меня в ужас…:
В поле "text" можно просто написать путь до файла: "$HOME/.config/fastfetch/scripts/my_script.sh". :((((((((

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 21

Это был момент, который перевернул игру. Я выкинул однострочники, разбил проект на аккуратную структуру раздельных Bash скриптов и наконец появился нормальный, читаемый Bash без крашей от любого чиха.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 22

Но проект разросся. Появились зависимости: jq, curl, xmlstarlet, inxi, chafa (для вывода обложек альбомов в терминал в виде ASCII/Sixel графики). Просто скопировать конфиг другу уже не получалось.

Так родился Launcher.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 23

Это CLI-утилита, которая:

  1. Проверяет зависимости.

  2. Бэкапит старый конфиг.

  3. Позволяет через меню включать/выключать модули, двигать их вверх-вниз (прямо как в конструкторе).

  4. Настраивать модули (например, выбрать валютную пару для курсов или источник новостей).

Глава 6. За кулисами: R&D-отдел из одного ИИ

После рассказа о лаунчере и всех этих модулях у читателя может возникнуть закономерный вопрос: откуда у одного человека столько знаний о wlr-randr, inxi и внутренностях udev? Ответ прост: изначально — почти никаких. На протяжении большей части этого пути моим R&D-отделом, а зачастую и источником разочарований, были нейросети.

Пример: Сага о дисках

Моя первая версия модуля для дисков использовала smartctl. Это не было простой задачей: мы с нейросетью часами переизобретали inxi. Я заставлял её составлять словари (зачастую неполные) для преобразования технических моделей (вроде WDC WD5000...) в понятные бренды (Western Digital) и выравнивать отступы, чтобы колонка с объёмом диска стояла идеально ровно.

Это работало, но код был чудовищным. И только когда я, спустя дни мучений, наткнулся на правильные флаги inxi и скомбинировал их с lsblk, я понял, что потратил массу времени на создание того, что уже существует. Но этот опыт был необходим, чтобы понять, как должно быть.

Это не «быстрый путь»

На своём опыте могу сказать: использование ИИ — это не всегда однозначно способ ускорить разработку, особенно, если ваша цель — качественный и продуманный продукт. В моём случае это оказался путь огромного упорства, оправданность которого до сих пор под вопросом, ведь проект занял несоразмерно много времени. Впрочем, его мне не занимать, в чём вы могли убедиться по моим прошлым статьям:

Проект потребовал десятки часов отладки и готовности переписывать всё с нуля. Путь от первых проблемных однострочников до сложной системы скриптов, а затем и до полного рефакторинга ради создания инсталлера был очень долгим.

Итог: slowfetch

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 24

Стандартный fastfetch на моём железе: 0.013s.
Мой конфиг: ~0.460s с выключением интернет модулей.

Я замедлил вывод информации в 30 раз. Но теперь, открывая терминал, я вижу не просто фэтч, а визуальный маркер «я самый крутой на районе»: что играет в плеере, курс доллара, состояние дисков, реальную частоту памяти и свежие заголовки новостей с OpenNet.

Стоило ли оно того? Для продуктивности — нет. Для души — однозначно да.

slowfetch: Замедляем fastfetch ради эстетики. История одного овер-инжиниринга на Bash - 25

Репозиторий проекта: GitHub Link

P.S. Если вы тоже хотите превратить свой терминал в новогоднюю ёлку, не забудьте поставить Nerd Fonts.

© 2026 ООО «МТ ФИНАНС»

Автор: Realife

Источник

Rambler's Top100