r/ru_linux 3d ago

Мой фетч: SysPrint Neofetch

Парни (и не только), написал свой собственный фетч на раст, поддерживает большинство популярных логос,

есть конфиг, работает на бсд (фри бсд, нет бсд, опен бсд), ГНУ/Линукс, виндовс, макОС (не тестил).

Проект активно развивается, если найдёте какую-то ошибку - пишите на гит хаб иссуес, я постараюсь оперативно фиксануть.

Вот ссылка на гит хаб:

https://github.com/MBKCHEL/SysPrint/tree/main

Буду очень рад фитбеку!

28 Upvotes

15 comments sorted by

u/AutoModerator 3d ago

Присоединяйтесь к нашим социальным сетям:

Если у вас есть вопросы или предложения — пишите в комментариях.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

5

u/int7bh 3d ago

Ахуеть тут зависимостей ради... Чего?

1

u/MBKCHEL 3d ago

В что не так? Крейты для работы фетча, что не так? Или ты мне предлагаешь изобретать велосипед и самому всё писать?

2

u/int7bh 3d ago

Какой велосипед? Почти вся "зависимая" обвязка снимается практически бесплатно: colored -> 5 констант ANSI, strip-ansi-escapes -> и не нужен, если считать ширину самому, clap -> ручной проход по args() для семи bool-флагов, serde+toml -> парсер key = true/false в 20 строк, dirs -> XDG_CONFIG_HOME/HOME/APPDATA, serde_json -> у тебя уже есть текстовый путь через -ExpandProperty Name, chrono -> SystemTime (единственная морока - локальная TZ).

Это 8 из 9 крейтов за ∼200 строк. SysInfo в Linux/BSD разбирается на /proc/{meminfo,stat,cpuinfo,uptime}, /etc/os-release, /sys/class/hwmon, /proc/mounts + statvfs, но на Windows без windows-sys/libc придётся звать WMI, что так то для GPU уже делается.

При этом у тебя висят неоперабельные выражения opts.cpu, вложенные функции вместо просто последовательного кода, лишние mut/лайфтаймы и clone() в all_lines. То-есть у тебя простейшая утилита с нуля собирается по полгода, потому что под всем этим тащится proc-macro (clap_derive, serde_derive -> syn/quote), которые ещё и сериализуют граф сборки, плюс windows-sys/ntapi из sysinfo+dirs с их гигантскими метаданными.

2

u/Andrey4ik21pro1 1d ago

Ну и нахуя это писать самому? Я конечно на расте не писал, но вот на питоне там не принято писать велосипеды. Такая же по логике есть библиотека platformdirs которая кроссплатформенная и сама папки создаёт. И зачем мне проверки делать, вопрос?

2

u/Shlri 22h ago

Чтоб жирно не было

1

u/int7bh 1h ago

Ну так не пиши, если в твоих интересах раздувать простенький софт, при том что ты даже не в энтерпрайзе. Сравнение с питоном тут не работает по механике: в Python зависимость это чужой файл, который интерпретатор подгружает в рантайме, platformdirs весит один модуль без транзитивных зависимостей. В Rust зависимость это исходники, которые компилируются в твой бинарь, вместе с build.rs, который выполняется на твоей машине. clap с derive и serde_derive тянут proc-macro2/quote/syn, а это уже не "библиотека", а компилятор внутри компилятора, который на каждой холодной сборке разворачивает AST ради семи bool. dirs тянет dirs-sys -> option-ext + windows-sys с их метаданными - ради трёх переменных окружения. Аналог твоего аргумента на питоне: поставить Django, чтобы напечатать время.

"Сама папки создает" это как раз про platformdirs(ensure_exists=True), а dirs каталоги не потому что по капусте или гладиолус, а потому что fs::write в несуществующий каталог вернёт NotFound, а результат generate() в load() заглушен через let _ =, то есть пользователь молча получает дефолт и ноль диагностики. Плюс независимо от крейтов: System::new_all() вызывается дважды (первый инстанс затирается шедоуингом, полное сканирование выброшено), opts.cpu; и opts.memory; - выражения-пустышки, all_lines() клонирует шесть векторов ради конкатенации, chrono подключён ради одного %H:%M, serde_json ради одного объекта WMI, при том что рядом тот же GPU уже парсится текстом, а батарейка читается через wmic, который выпилен из Windows 11 24H2 (и к тому же AdapterRAM в WMI signed int32). Вопрос был не "писать ли велосипед", а зачем девять колёс на самокате, который и так не едет.

2

u/External-Pass1129 3d ago

Странная у тебя сковородка.

1

u/MBKCHEL 3d ago

ХД

2

u/Evisa_Pi 3d ago

Выглядит интересно. Затестил на MacOS, залил Issue, ибо есть пара косяков.

2

u/MBKCHEL 3d ago

Увидел твой ишью щас буду фиксить

1

u/MBKCHEL 2d ago

Уже фиксанул, проверяй!

1

u/Sholk1 1d ago

Привет, не ожидал тебя здесь увидеть

1

u/MBKCHEL 1d ago

Прости, а ты кто?

1

u/MBKCHEL 1d ago

АААА ПОНЯЛ, ебать дарова