Skip to content

Instantly share code, notes, and snippets.

@11111000000
11111000000 / package-upgrade-async.el
Created September 22, 2025 15:14
Асинхронное обновление всех пакетов Emacs
(defun pro/package-upgrade-async (&optional _prefix)
"Обновить все пакеты в полностью отдельном Emacs-процессе (-Q --batch).
Лог в буфере *Package Upgrade Log*. Без вопросов (y/n), только прогресс и ошибки.
Лог выводится поточно (line-buffered) при помощи stdbuf, при его отсутствии — через PTY.
Дополнительно: устойчивость к ошибкам refresh, GC-тюнинг, тайминг выполнения, код выхода."
(interactive "P")
(let* ((buf (get-buffer-create "*Package Upgrade Log*"))
(start-time (float-time))
;; На случай, если текущий Emacs запущен через emacsclient — выбираем «настоящий» emacs.
(emacs (or (and (not (string-match-p "emacsclient\\'" invocation-name))
@11111000000
11111000000 / NixOS-vs-MacOS.org
Created September 14, 2025 14:48
Почему NixOS проще чем MacOS/Debian/Archlinux...

Почему NixOS проще чем MacOS/Debian/Archlinux…

Ты ставишь цель: “хочу, чтобы на моём ноуте/сервере были Docker, Nginx, PostgreSQL, открыты нужные порты, создан пользователь с ключом, и всё это работало одинаково каждый раз”. В Debian/Arch/macOS ты делаешь это руками: ставишь пакеты, правишь конфиги, включаешь сервисы, добавляешь себя в группы, настраиваешь файрвол. Через месяц забываешь, что именно делал, и на новой машине всё повторяется с нуля.

В NixOS ты один раз описываешь желаемое состояние в файле. Потом выполняешь один rebuild. Всё. Система сама приводит себя к этому состоянию: установит пакеты, включит сервисы, создаст пользователя, откроет порты, разложит конфиги — без твоих ручных команд. Если что-то пошло не так — откат за один шаг.

  • Почему так проще
  • Декларативность: один файл — один источник правды о системе.
  • Воспроизводимость: пиннинг каналов через flakes, одинаковые версии везде.
  • Атомарные обновления и откаты: генерации системы переключаются без “полупочинки”.
@11111000000
11111000000 / emacs-for-windows.org
Last active September 14, 2025 12:51
Как сделать удобно в Emacs пользователю Винды
  • Включите CUA и привычное выделение: они дадут Ctrl+C/X/V, Shift+стрелки, замену выделенного при печати, правый клик — меню.
  • Добавьте небольшой глобальный minor-mode, который привяжет “виндовые” сочетания: Ctrl+Z, Ctrl+Shift+Z, Ctrl+S, Ctrl+Shift+S, Ctrl+O, Ctrl+Tab, Ctrl+F4, Alt+F4, Ctrl+колёсико масштаб и т.д.
  • Потенциально спорные переназначения (например, Ctrl+S на “Сохранить”, а не “Поиск”) можно включить опционально.
  • Быстрый старт
;; 1) Базовая “Windows”-поведенка
(cua-mode 1)                        ;; Ctrl+C/X/V, прямоугольники и т.п.
@11111000000
11111000000 / async-emacs-lisp.org
Last active October 4, 2025 07:26
Памятка по асинхронности в Emacs Lisp

Асинхронность в Emacs Lisp на практике: от модели к надёжным паттернам

Модель исполнения: почему в Emacs асинхронность выглядит так, а не иначе

В основе Emacs — однопоточная модель исполнения с «глобальной блокировкой» интерпретатора Lisp. Это означает, что обычный Lisp‑код выполняется последовательно и не прерывается конкурентной работой другого Lisp‑кода. Асинхронные события (вывод процессов, сетевые данные, таймеры) обрабатываются в «точках ожидания»: когда Emacs ждёт ввода, перерисовки, данных от процессов, или когда вы явно вызываете функции ожидания.

Такой дизайн приносит важные свойства. Он упрощает мышление: команда выполняется «атомарно», пользователь видит консистентное состояние буферов/окон, отладка предсказуемее. Он защищает редакторские структуры от гонок и убирает необходимость всюду ставить блокировки. Цена — отсутствие ускорения CPU‑задач «потоками Emacs Lisp» и необходимость явно уступать управление, чтобы асинхронные события исполнялись вовремя. Реальный параллелизм достигается че

@11111000000
11111000000 / machine.js
Last active November 6, 2019 14:30
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@11111000000
11111000000 / machine.js
Last active October 28, 2019 19:23
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@11111000000
11111000000 / machine.js
Last active October 15, 2019 10:57
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
@11111000000
11111000000 / nix-proced-readable-mode.el
Last active April 14, 2019 22:26
Make proced filenames more readable in NixOS and GuixSD
;;; nix-proced-readable-mode.el --- Make proced filenames more readable in NixOS and GuixSD
;; © 2019-∞ Peter 11111000000 <[email protected]>
;; Autor: Peter 11111000000 <[email protected]>
;; Maintainer: Peter 11111000000 <[email protected]>
;; URL: https://gist.github.com/11111000000/e20247bafb425a58bd9d9198a16d56d0
;; Keywords: guix nix proced
;; Package-Version: 0.1
;; Version: 0.1
@11111000000
11111000000 / ant-lion-index.jsx
Created January 27, 2018 10:38
"Муравьиный лев" - модуль и идея, как заменить тяжёлую библиотеку компонентов Antd на проекте.
/**
* Муравьиный лев (antd-killer)
*/
import * as Layout from 'modules/layout';
import * as Menu from 'modules/menus';
export { Button } from 'modules/buttons'
@11111000000
11111000000 / .neutrinorc.js
Created January 27, 2018 10:30
Моя настройка Neutrino
module.exports = {
use: [
'neutrino-middleware-env',
'neutrino-preset-web',
'neutrino-preset-react',
'neutrino-preset-visualizer',
'neutrino-middleware-hot',
['neutrino-middleware-postcss', {
plugins: [
require('postcss-partial-import')(),