LINUX.ORG.RU

Сообщения saahriktu

 

Тем временем начата разработка Neomacs

 , ,

Cобственно, сабж: https://github.com/eval-exec/neomacs .

NEO Emacs (в разработке): Emacs с поддержкой GPU, написанный на Rust с современным движком отображения. Цель — современный дизайн и многопоточный Elisp, 10-кратная производительность, конкурентная сборка мусора без пауз и 100% совместимость с Emacs.

«Я создал Neomacs, потому что люблю Emacs, уважаю его и хочу превратить легендарный Emacs в совершенный современный мощный инструмент». — Eval Exec

Emacs, переписанный на Rust, теперь использует графический процессор и исправляет то, чего не смогли сделать 40 лет C. Создан для 100% совместимости с уже имеющейся у вас экосистемой Emacs — вашей конфигурацией, вашими пакетами, вашей мышечной памятью.

Фичи:

  • Текст, изображения и эффекты рендерятся через wgpu (Vulkan/Metal/DX12/GL); ~4000 строк на Rust вместо ~50 000 строк xdisp.c;
  • Мультимедиа в буферах — встроенное 4K-видео (GStreamer + VA-API на Linux), GPU-декодирование изображений, браузер WPE WebKit, GPU-терминал;
  • Анимации повсюду — 8 режимов курсора, 21 эффект прокрутки, 10 переходов буферов с частотой обновления экрана, всё настраивается из Elisp;
  • Хакабельность ниже уровня Lisp — весь фронтенд открыт для Elisp: от эффектов рендеринга до GPU-шейдеров (WGSL) — «хакай пиксели, а не только текст»;
  • Совместимость как контракт — ваш init.el, пакеты и мышечная память; каждая переписанная подсистема сверяется с GNU Emacs как тест-оракулом (включая Doom Emacs);
  • Чистое Rust-ядро — без C: evaluator Elisp, байткод-VM, GC, portable dump и внутренности редактора — безопасный современный Rust.
  • GUI или терминал — один бинарник рендерит на GPU или в TTY (neomacs -nw);
  • Headless-демон — Lisp продолжает работать, именованные локальные клиенты для вычислений или TTY-редактирования;
  • В планах — истинно многопоточный Elisp и конкурентный GC без пауз;
saahriktu
()

Обновил на днях прошивку материнской платы ASRock X870 Pro RS (AM5) при помощи своей самой первой флэшки

 , , ,

Собственно, сабж. Это к вопросу о долговечности флэшек.

Эта самая первая флэшка (Kingston DataTraveler 2.0, 512 Мб; USB 2.0) у меня появилась примерно 20 лет назад.

saahriktu
()

Соавтор X.Org XCB высоко оценивает архитектуру протокола Wayland

 , ,

Собственно, сабж: https://www.phoronix.com/news/Jamey-Sharp-Praises-Wayland .

Джейми Шарп, разработчик программного обеспечения с открытым исходным кодом, давний участник проекта X.Org и соавтор библиотеки XCB (X C Binding — привязка протокола X к языку C), столкнулся с необходимостью написать клиент для Wayland и в итоге высоко оценил его архитектуру.
...
Шарп написал в Мастодоне:
«Несколько лет назад я написал xcb.freedesktop.org для клиентов X Window System, а вчера я написал свой первый клиент Wayland. Боже мой, я вижу влияние каждого урока, который дизайнеры Wayland извлекли из X и, если уж на то пошло, из XCB. Честно говоря, я очень впечатлен дизайном протокола Wayland!

На днях я видел, как кто-то жаловался на то, сколько кода нужно написать, чтобы открыть окно в клиенте Wayland. Я думаю, что важно понимать, что этот протокол создан для того, чтобы сделать сложные вещи возможными, а не для того, чтобы простые вещи были легкими; если вы хотите делать простые вещи, используйте такой набор инструментов, как Gtk, Qt или SDL. Так что моя программа может показаться большим количеством кода из-за того, что она делает: она просто открывает окно, периодически мигает между белым и черным и измеряет некоторую статистику времени, и для этого я написал более 300 строк на Rust. (Я решил не использовать помощники крейта wayland-client для связывания глобальных переменных, поэтому это могло быть короче, но я хотел посмотреть, каково это — работать с необработанным протоколом.) Но я знаю по опыту, что если вы исключите какой-либо из шагов, которые мне нужно было сделать, вы лишитесь возможности обрабатывать более сложные сценарии.

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

saahriktu
()

Разрабатываемое ядро Linux 7.4 теперь умеет работать с NVMe носителями без задействования RAM

 , , ,

Собственно, сабж: https://www.phoronix.com/news/DMA-BUF-IO-uring-Linux-7.4 .

Сегодня в рамках продолжающегося окна слияния для ядра Linux 7.4 был добавлен инфраструктурный код, обеспечивающий поддержку DMA-BUF в механизме ввода-вывода ядра с использованием замечательного фреймворка IO_uring.
...
Павел Бегунков, руководивший процессом внесения правок на протяжении одиннадцати этапов их рассмотрения, пояснил суть новой функциональности: «Это опциональная возможность для файлов, для использования которой необходимо реализовать новую файловую операцию. В данной серии патчей поддерживаются только блочные устройства NVMe. Пользовательский API построен на базе механизма «зарегистрированных буферов» (registered buffers) в `io_uring`: объект `dmabuf` регистрируется особым образом, после чего его можно использовать так же, как и любой другой «зарегистрированный буфер», посредством запросов `IORING_OP_READ_FIXED` или `IORING_OP_WRITE_FIXED`. Буфер создается через новую файловую операцию, а полученное отображение (map) передается через стек ввода-вывода с помощью нового типа итератора. Также предусмотрена дополнительная инфраструктура, обеспечивающая связность компонентов, подсчет запросов, управление жизненным циклом и механизм аннулирования (инвалидации) данных».

Теперь можно, например, поместить модель ИИ сразу в GPU, не тратя ресурсы на помещение её в RAM и последующее копирование её оттуда в GPU.

saahriktu
()

Кому нужна относительно свежая статья про работу с KOI8-R в Python'е?

 , ,

Собственно, статье нет ещё и года: https://ssojet.com/dev-guides/koi8-r-in-python .

saahriktu
()

Положено начало написанию программ из состава systemd на Rust'е

 , , ,

Собственно, сабж: https://www.phoronix.com/news/systemd-Merges-Rust-Programs .

На сегодняшний день в Git-репозитории systemd появилась возможность писать программы для systemd на языке Rust — в качестве альтернативы языку C.

Основные компоненты systemd (например, библиотека systemd) пока не поддерживают код на Rust, однако для отдельных программ и вспомогательных компонентов systemd такая поддержка уже реализована. При этом используется Rust без системы сборки Cargo. Для внедрения Rust в ядро ​​systemd необходимо сначала устранить ряд препятствий, связанных с самим языком.

Поддержка языка Rust в systemd началась с создания нового компонента — systemd-keyring-setup, написанного на этом языке. Утилита systemd-keyring-setup предназначена для настройки связок ключей (keyrings) и добавления сертификатов X.509 в связки ключей ядра, используемые подсистемами dm-verity, fs-verity и BPF, в процессе загрузки системы.

Код systemd-keyring-setup пока не включен в основную кодовую базу, но ожидается, что это произойдет в ближайшее время, поскольку инфраструктура для поддержки Rust уже внедрена. Изначально весь этот функционал был частью одного крупного коммита, который впоследствии разделили на отдельные части: внедрение поддержки Rust, создание компонента systemd-keyring-setup и другие подготовительные работы.

saahriktu
()

С днём китайского программиста!

 , ,

use chrono::{Datelike, Local};

fn main() {
    let now = Local::now();
    let x = now.month() * 100 + now.day();
    if x == 1024 {
        println!("С днём китайского программиста!");
    }
}
$ ./target/release/chinaprgdaychk
С днём китайского программиста!

С праздником!

saahriktu
()

AMD работает над драйвером оверклокинга процессоров Ryzen для Linux

 , , ,

Собственно, сабж: https://www.phoronix.com/news/AMD-AOD-Overclocking-Linux .

Компания AMD недавно опубликовала патчи для ядра Linux, добавляющие поддержку AOD — драйвера для разгона процессоров Ryzen. Энтузиасты Linux давно ожидали появления официального драйвера для разгона процессоров AMD Ryzen, аналогичного программе Ryzen Master для Windows, — и теперь он наконец-то появится, по крайней мере в виде драйвера ядра.

saahriktu
()

Про разницу между олдскульщиком и технореакционером

 , ,

Сабжевая разница многим, по ходу, ни разу не очевидна. Поэтому её можно развернуть подробнее.

А ключевая разница - в реакциях на новые технологии.

И тот и другой весьма хорошо относятся к старым технологиям, и применяют их везде, где сочтут это уместным.

Однако, олдскульщик может спокойно переплетать старое и новое: редактировать юнит systemd из старого доброго vim'а, писать на Rust'е из ed'а (по настроению), фильтровать вывод «niri msg ...» awk'ом,... и т.д.

Технореакционер так ни разу не может просто потому, что всё новое считает деградацией линуксов, для спасения которых, по его мнению, нужно вернуть всё как было до появления systemd. Это принципиальная позиция. В то время как «олдскул», скорее, про навыки.

Олдскульщик может 10 лет сидеть в ядерной консоли с sysvinit'ом и KOI8-R, а потом, когда у него заведётся дистрибутив с systemd, UTF-8, Niri (Wayland), pipewire, Rust'ом,... и т.д. - остаться там, если для него всё работает так, как его устраивает. При этом, его никто не заставляет забывать C/C++, bash, Perl, vim, awk, lftp,... и многое другое.

Технореакционер такие прыжки считает принципиально недопустимыми и достойными дизлайков, т.к., по его мнению, делать надо только так, как завещали деды.

В общем, это принципиально разные подходы. Олдскульщик при всём уважении к старым технологиям может признавать победу новых технологий, т.к. прогресс никто не отменял.

Технореакционер же живёт в прежнем мире и любое упоминание новых технологий считает просто хайпом.

saahriktu
()

А ты уже перешёл на Яндекс Браузер, $USER?

 , ,

Долгое время я юзал браузер Brave. И браузер этот, действительно, неплохой.

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

зафиксирован подозрительный траффик из вашей сети

и

слишком много попыток

.

Да, именно так современные сайты могут реагировать на попытки браузера Brave заметать следы. Причём, такое его поведение в нём отключить невозможно. Он такой by design.

Поэтому, для юзеров Brave есть только один вариант чтобы отписаться от всего, что должны видеть только боты, - сменить браузер.

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

Заодно бонусом идут дополнительные фичи: интеграция с ИИ, отсутствие необходимости устанавливать расширение «Blank New Tab»,... и т.д.

Кстати, я когда ещё год назад устанавливал Hyprland отмечал, что из коробки Яндекс Браузер работает лучше чем Chromium и Brave: Chromium'у не нравилась моя видеокарта, а Brave требовал наличие сервиса кошелька. А Яндекс Браузер в этих условиях просто запускался и работал. И не просто в иксах, а в Wayland'е!

В общем, браузер весьма торт.

ЗЫ. К Яндексу я отношусь весьма хорошо. В т.ч. я обладатель таких подписок как

  • Яндекс 360
  • Яндекс Плюс
  • Алиса Плюс

Таким образом, Яндекс Браузер весьма органично вписался как в экосистему Яндекса и интернеты вообще, так и в Niri.

saahriktu
()

Niri + DankMaterialShell 1.5.3 (Saahriktu Edition)

 , ,

Вот уже треть месяца я пользуюсь собственной версией DankMaterialShell 1.5.3. Сейчас я расскажу что это такое и как у меня работает.

( читать дальше... )

saahriktu
()

Программы на Rust, которые стоит попробовать. Часть №0.

 , ,

  • jless

    jless - это TUI просмотрщик JSON файлов.

  • eza

    eza - это мощный заменитель ls + tree с подсветкой и текстовыми значками (для которых нужен Nerd Font).

  • yazi

    yazi - это мощный TUI файловый менеджер с предпросмотром картинок, видео и PDF файлов. Текстовые форматы в области предпросмотра отображаются текстом. Всё это позволяет быстрее ориентироваться где что.

  • elio

    elio - это альтернатива yazi.

  • fish 4

    fish 4 - это мощная альтернатива bash с быстрыми автодополнениями и встроенной командой math, которая мощнее bc.

  • Wezterm

    Wezterm - это гибкий и мощный эмулятор терминала с конфигом на Lua, который перезагружается динамически после правок. При этом он также поддерживает полноценную графику наравне с kitty (не исключительно через sixel).

  • Niri

    Niri - это мощный и активно развивающийся скролл-тайлинговый Wayland-композитор. Рабочие столы расположены вертикально, при этом на любых рабочих столах при необходимости можно делать прокручивающуюся (горизонтально) ленту из окон.

  • ripgrep

    ripgrep - это мощная альтернатива grep'а заточенная на поиск в директориях, которая по дефолту учитывает правила gitignore, пропускает скрытые файлы и директории, а также пропускает бинарные файлы (это отключается через опции).

  • bat

    bat - это мощная альтернатива less с подсветкой исходников и номерами строк (также отключается через опции).

  • bottom

    bottom (команда - «btm») - это мощный TUI системный монитор.

  • difftastic

    difftastic - это мощная альтернатива diff для оценки изменений.

  • git-delta

    git-delta - это мощная альтернатива diff, которая через настройки git'а встраивается в его работу.

  • bookokrat

    bookokrat - это просмотрщик PDF и EPUB для эмуляторов терминала, которые полноценно поддерживают графику (как kitty и Wezterm). Да, он рендерит прямо в эмуляторе терминала не только текст, но и картинки.

Enjoy!

Перемещено hobbit из desktop

saahriktu
()

Ты за Нокталию или за DankMaterialShell, $USER?

 , , ,

Здравствуйте, любители холиваров типа KDE vs GNOME! Теперь они вышли на новый уровень!

На том же reddit'е сегодня разгораются холивары на тему Noctalia vs DankMaterialShell.

Обе оболочки предлагают примерно одно и то же - обои, панель с виджетами, меню настроек, лаунчер,... и т.д. - но с разными подходами.

Noctalia - 100% независимый инструмент. В любой момент можно удалить и система останется такой же, какой и была до установки.

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

Что касается интеграции с Niri, то Noctalia изначально заточена на неё, а DankMaterialShell - частично (часть функционала может быть недоступна). Но при этом юзеры отмечают, что разработчики DankMaterialShell присутствуют в чате разработчиков Niri и оперативно реагируют на замечания.

Вот такие пироги.

saahriktu
()

Состоялся релиз дистрибутива Neko-Void 20260921

 , ,

Собственно, сабж. По этой причине он даже попал в список релизов distrowatch'а, хотя лично я знал о нём и до этого.

Дистрибутив основан на Void. Особенность дистрибутива в том, что у него уже есть куча сборок с разными вариантами рабочих столов: JWM, KDE Plasma, labwc, LXQt, MATE, Niri, XFCE.

Т.е. это самый простой способ поставить себе Void с тем же Niri. Что может быть полезно тем, кто ещё незнаком с дистрибутивом.

Инсталлятор дистрибутива называется Kasha.

Скачать можно отсюда: https://sourceforge.net/projects/neko-void/files/isos/ .

saahriktu
()

Чиним отображение погоды в Noctalia Shell 4.7.7

 , ,

Здравствуйте, уважаемые нокталийцы и нирийцы! Сейчас мы будем патчить Noctalia Shell 4.7.7. Если у вас другая версия Noctalia Shell, то всё равно можете посмотреть - возможно, патч применим и к ней.

Итак, недавно я заметил, что в Noctalia Shell 4.7.7 у меня заклинило погодный значок: и днём и ночью отображался значок «weather-moon-stars», который выглядит как «полумесяц и звёзды». В итоге я взял и пропатчил Noctalia Shell.

И вот он, этот патч:

--- LocationService.qml	2026-05-19 01:39:27.000000000 +0300
+++ /etc/xdg/quickshell/noctalia-shell/Services/Location/LocationService.qml	2026-09-25 21:58:05.423670345 +0300
@@ -325,8 +325,22 @@
   }
 
   // --------------------------------
+
+  function isDaytime() {
+    var w = data.weather;
+    if (!w)
+      return true;
+    if (w.current && w.current.is_day !== undefined)
+      return w.current.is_day === 1;
+    if (w.current_weather && w.current_weather.is_day !== undefined)
+      return w.current_weather.is_day === 1;
+    return true;
+  }
+
+  // --------------------------------
+
   function weatherSymbolFromCode(code) {
-    var isDay = data.weather ? data.weather.current_weather.is_day : true;
+    var isDay = isDaytime();
     if (code === 0)
       return isDay ? "weather-sun" : "weather-moon";
     if (code === 1 || code === 2)
@@ -352,7 +366,7 @@
 
   // --------------------------------
   function taliaWeatherImageFromCode(code) {
-    var isDay = data.weather ? data.weather.current_weather.is_day : true;
+    var isDay = isDaytime();
     if (code >= 40 && code <= 49)
       return Quickshell.shellDir + "/Assets/Talia/TaliaDazed.png";
     if (code >= 95 && code <= 99)
Вот такая вот простая и удобная для красноглазиков среда эта Noctalia Shell.

saahriktu
()

Вышла Pictura Noctis 1.0.0

 , , , ,

Группа Open Source

Pictura Noctis — программа для установки случайной картинки в качестве обоев рабочего стола из указанной директории в Noctalia Shell из командной строки, написана на Rust.

( читать дальше... )

>>> Git-репозиторий (sourcecraft.dev)

saahriktu
()

Прощай, helix!

 ,

Эта заметка является в т.ч. ответом тем, кто решил, что я решил «всё переписать на Rust»™ . Не всё.

Да, мне нравятся Rust и софт на Rust, но я - линуксоид старой школы и вполне приветствую программы на других языках.

И если я юзаю jless, eza, yazi, fish 4, Wezterm, Niri, ripgrep, bat, bottom, difftastic, git-delta, bookokrat, elio,... и т.д., то лишь потому, что они мне удобны. И helix'а теперь больше нет в этом списке потому, что Neovim мне в итоге удобнее, пусть он и не на Rust. В общем, в итоге я опять вернулся на Neovim.

Почему? Потому, что vim я знаю уже лет 20. И Neovim во многом его повторяет. helix, если кто не в курсе, предлагает схожее управление, но вывернутое наизнанку.

Например, если в vim/Neovim для удаления строки надо нажать 'dd', то в helix надо нажать 'xd'. Почему? 'x' выделяет строку. В helix сначала надо выделить удаляемое, а потом нажать 'd'. Если же надо удалить, например, 5 строк, то надо нажать '5x', а когда выделятся 5 строк нажать 'd'.

Можно, конечно, переучиваться, но зачем если в Neovim и так уже удобно?

Заодно включил себе обратно primary буфер. Ибо я и юзаю Wayland и Rust не из-за идеологий, а для удобства, а с возможностью копипастить мышью на практике реально удобнее.

Плюс, я включил себе и Нокталию Шелл, которая тоже добавляет удобства.

ЗЫ. Бонус: https://idealists.su/media/e43039feaeb4a393e732b9538a7596836f856a3fc9d9fe548c... .

saahriktu
()

Rust в наших сердцах!

 ,

Rust и Linux -
Идеальный тандем.
Свобода и мощь.

( читать дальше... )

saahriktu
()

С Днём программиста! (2026 год)

 , ,

$ cat src/main.rs
use time::OffsetDateTime;
use time::UtcOffset;

fn main() {
    let local_offset = UtcOffset::current_local_offset().unwrap_or(UtcOffset::UTC);
    let now = OffsetDateTime::now_utc().to_offset(local_offset);
    let yday = now.ordinal();

    println!("Текущий день года: {}", yday);
}
$ cat Cargo.toml
[package]
name = "daynumber2"
version = "0.1.0"
edition = "2024"

[dependencies]
time = { version = "0.3.55", features = ["std", "local-offset"] }
$ cargo build --release
   Compiling libc v0.2.189
   Compiling deranged v0.5.8
   Compiling powerfmt v0.2.0
   Compiling num_threads v0.1.7
   Compiling num-conv v0.2.2
   Compiling time-core v0.1.9
   Compiling time v0.3.55
   Compiling daynumber2 v0.1.0 (/mnt/mpt1/new2026/sorghum/_9462625/rustttrl/0000/daynumber2)
    Finished `release` profile [optimized] target(s) in 1.08s
$ ./target/release/daynumber2
Текущий день года: 256
$

С праздником!

saahriktu
()

Выключаем копипаст средней кнопкой мыши в красноглазом Niri (и используем её для других задач)

 , , ,

Здравствуйте, красноглазые нирийцы, который вздрагивают при одном упоминании Нокталии! Сегодня мы с вами будем перепиливать поведение мыши. Долой наследие иксов!

Итак, сначала идём и вписываем в ~/.config/niri/config.kdl

clipboard {
    disable-primary
}
Этого уже достаточно для отключения копипастинга мышью в Brave, telegram-desktop,... и т.д.

Для GTK можно добавить команду

dconf write /org/gnome/desktop/interface/gtk-enable-primary-paste false

Теперь добираемся до эмулятора терминала. Поскольку я перешёл на Wezterm (написан на нашем любимом Rust'е), то опишу для него. В ~/.config/wezterm/wezterm.lua надо добавить

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = act.Nop,
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.OpenLinkAtMouseCursor,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}

Однако, это просто отключение. Но у нас освобождается целая кнопка! И её теперь можно использовать в разных сценариях. Например, для того же Wezterm'а можно прописать

config.mouse_bindings = {
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'NONE',
    action = wezterm.action.SendString 'elio\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'CTRL',
    action = wezterm.action.SendString 'eza --tree ./',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'ALT',
    action = wezterm.action.SendString 'btm\r',
  },
  {
    event = { Down = { streak = 1, button = 'Middle' } },
    mods = 'SHIFT',
    action = wezterm.action.SendString 'fd -t f . | fzf --preview "bat --style=numbers --color=always {}" | xargs hx',
  },
  {
    event = { Up = { streak = 1, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 2, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
  {
    event = { Up = { streak = 3, button = "Left" } },
    mods = "NONE",
    action = wezterm.action.Nop,
  },
}
Что это даёт в этом конкретном примере?

  • При нажатии средней кнопки мыши запустится файловый менеджер elio (написан на нашем любимом Rust'е (Niri тоже на Rust'е)).
  • При нажатии Ctrl+средняя кнопка мыши в командную строку вставится шаблон 'eza --tree ./' для запуска продвинутой альтернативы ls+tree с подсветкой и значками (написана на нашем любимом Rust'е).
  • При нажатии Alt+средняя кнопка мыши запустится системный монитор bottom (написан на нашем любимом Rust'е).
  • При нажатии Shift+средняя кнопка мыши в командную строку вставится шаблон 'fd -t f . | fzf --preview «bat --style=numbers --color=always {}» | xargs hx' для поиска и открытия файлов в текстовом редакторе helix (написан на нашем любимом Rust'е). Вместо find и less здесь используются fd и bat соответственно (написаны на нашем любимом Rust'е).

Enjoy!

saahriktu
()