RSS
Pages: 1 2 3
[>] С днем системного администратора!
pipe.2032
Difrex(mobile)(tavern,23) — All
2018-07-27 12:40:18


Сабж всех причастных. Ну и меня заодно :)

[>] А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — All
2018-08-10 16:59:18


Несколько раз пытался его осилить, но сдавался, когда нужно было настроить фильтры(очень много). А ещё с эксченджем его только через костыли дружить.

Поделитесь историями успеха

[>] Re: А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — Andrew Lobanov
2018-08-10 23:18:57


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

Это не так. Evolution прекрасно получает почту и календарь. И фильтры умеет и мультаккаунты. Справляется с ежедневным потоком сотни писем просто отлично.

AL> История успеха лично у меня закончилась на банальном SMTP/IMAP сравнительно стандартными для линукса средствами.

Этого и я тоже смог добиться. Странно, гнус пилят(или уже не пилят?) хрен знает сколько лет, а до сих пор на nntp завязан.

[>] Re: А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — Andrew Lobanov
2018-08-12 09:55:00


AL> Difrex(mobile)> Этого и я тоже смог добиться. Странно, гнус пилят(или уже не пилят?) хрен знает сколько лет, а до сих пор на nntp завязан.
AL> Ну так это его основная функция, вроде =)
Ага, только nntp уже мертв.

// Sent from my GNU Emacs

[>] Re: А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — Anotheroneuser
2018-08-12 09:56:14


Anotheroneuser> А вот эту хренотень видел?
Anotheroneuser> https://www.emacswiki.org/emacs/mu4e
Хм, выглядит интересно. Спасибо.
Попробую настроить у себя в рабочем Emacs. Потом поделюсь впечатлениями =)

// Sent from my GNU Emacs

[>] Re: А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — Peter
2018-08-12 10:03:15


Peter> Использую gnus на работе. Но у меня очень скромные запросы. Забираю почту fetchmail, отправка msmtp или как то так. Procmail кажется тоже есть в связке. С продуктами мс нет необходимости работать.
Хм, т.е. Gnus у тебя работает с ~/Maildir? А сколько аккаунтов у тебя?
Их можно как-то разделить, чтобы с a@corp.net почта шла через a.smtp.corp.net, а с b@corp.net через b.smtp.corp.net?

// Для exchange, наверное, буду продолжать использовать Evolution. Кстати, есть Excorporate, который умеет синкать календарь Exchange.
// Т.е. `M-x excorporate RET`, затем `M-x calendar RET e`

ЗЫ: Андрей, а можешь переименовать меня в просто Difrex?

// Sent from my GNU Emacs

[>] Re: А кто пользуется Gnus?
pipe.2032
Difrex(mobile)(tavern,23) — Peter
2018-08-12 10:44:17


Peter> Конфигурация на работе, если что -- могу вспомнить и показать.
Давай, буду очень признателен.


// Sent from my GNU Emacs

[>] eshell в качестве шелла
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:39


Я тут подумал: а чей-то я использую в качестве шелла zsh, когда можно юзать емаксовый eshell?

Быстренький гайд.

## Делай раз

Для начала, чтобы темы отображались правильно нужно сгенерировать terminfo. В 26.1 емаксе можно работать с 24-битным терминалом. Напишем файл terminfo-24.src:


# Use colon separators.
xterm-24bit|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,


Генерируем:


tic -x -o ~/.terminfo terminfo-24bit.src


Экспортируем переменную окружения:


export TERM=xterm-24bit


Теперь при запуске GNU Emacs в терминале(`emacs[client] -nw`) вместо покореженных цветов при `TERM=xterm-256color`

будет красиво

Это тема solarized-dark, кстати.

## Делай два

Но запускать Емакс в терминале при наличии иксов несколько странно. По-этому нужно пускать сразу `(eshell)`. В параметрах терминала в качесте комманды прописываем `/bin/sh -c "export TERM=xterm-24bit; emacsclient -nw -c -e \"(eshell 'N)\""` и у нас будет сразу пускаться eshell. Неплохо, не правда ли? :)

Либо можно пойти еще дальше и перебиндить стандартнуй комбинацию клавишь на запуск сразу eshell в графическом Emacs. Так, например, для i3wm: `bindsym $mod+Return exec emacsclient -c -e "(eshell 'N)"`.

Ура!

Ссылка: https://difrex.lessmore.pw/post/eshell/

[>] Про IDEC
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:42


IDEC - это протокол обмена сообщениями совместимый на базовом уровне с ii. Расшифровывается, как ii-like Data Exchange Convention. Главная фишка его - это простота и возможность работать поверх чего угодно, например, ssh. Но практически все реализации сейчас работают поверх http.

Цитата из официальной документации

> Есть несколько серверов (грубо говоря, сайтов), за каждым из которых закреплены свои пользователи (поинты). Поинты пишут сообщения каждый на свой сервер. Через каждые 10-20 минут сервера скачивают друг у друга новые сообщения. В итоге на всю сеть одна общая база данных. Для установления цепочек синхронизации владельцы серверов сначала договариваются.
>
> Всё общение разделено на так называемые эхоконференции или эхи (см. терминология). Эха - это что-то вроде ленты твиттера или темы на форуме. Пользователи могут свободно подписываться на интересные им эхи и писать туда сообщения в пределах одной станции. Держатели серверов синхронизируют между собой (по общему согласию) самые популярные и нужные пользователям эхи, и сообщения оттуда расходятся по всей сети.

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

## Общение

В стандарте предусмотрена очень полезная фича, как /list.txt(это может быть на самом деле файл или путь в строке адреса в браузере). На запрос list.txt сервер возвращает нам список эх(публичных) с описанием и количеством сообщений в них. Так при первом попадании на сервер, клиент сможет сразу знать какие эхи он хочет читать.

Стандарт и все реализации серверов поддерживают создание эхи пользователем. Для этого нужно всего лишь написать в нее. Такая эха не будет отображаться в list.txt и получить из нее сообщения можно, только зная название. Шифрования в стандарте нет, но это и не нужно, ибо приносит только усложнение. Для приватного общения можно использовать скрытую эху и GPG.

Личных сообщений нет, но обсуждение стандарта идет. Можно начать с чтения этого треда.

Каждое сообщение в сети уникально, т.е. ему присвается ID сгенерированный на основе суммы sha256 от контента. Это не спасает от спама, но позволяет избежать коллизий в сети.

## Устройство сети

На протоколе IDEC чаще всего реализуют децентрализованную клиент-сервер сеть. P2P не предусмотрено, но никто не мешает написать свое расширение, которое реализует P2P обмен.

Итак, рассмотрим топологию сети от простого к сложному.

Самая простейшая сеть выглядит так:

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

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

Добавим еще сегмент сети

У нас добавился еще один сегмент сети в котором происходит общение в эхах pipe.2032 и linux.14. Так наш первый сегмент начинает обмениваться сообщениями со вторым. Добавим еще один сегмент.

И еще

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

IDEC позволяет строить любые топологии. Клиент может выступать так же и сервером и забирать сообщения сразу со всех серверов. А простота протокола позволяет писать ботов очень быстро.

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

Ссылка: https://difrex.lessmore.pw/post/pro-idec/

[>] API поиска на dynamic.lessmore.pw
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:46


## Поиск на dynamic.lessmore.pw

Как это ваще устроено??? На самом деле API - это открытый всем Elasticsearch, который предоставляет гору возможностей для поиска за счет движка Lucene. Давайте что-нибудь найдем!

Вот в этом вот комменте я пообещал рассказать как это все сделать. Приступим.

Давайте для начала попробуем поискать этот самый коммент: ii://XWShDDcuR4C8PcrTFdGl. Здесь и далее мы будем использовать только curl.


curl -XPOST -d '{"query": {"query_string" : {"fields" : ["msgid"], "query" :"XWShDDcuR4C8PcrTFdGl"}}}' https://dynamic.lessmore.pw/search


Нам вернется такой вот ответ


{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 8.316952,
"hits": [
{
"_index": "idec_net",
"_type": "post",
"_id": "XWShDDcuR4C8PcrTFdGl",
"_score": 8.316952,
"_source": {
"echo": "idec.talks",
"subg": "Re: Совет нодов",
"to": "Peter",
"author": "Difrex(mobile)",
"message": "\nПостараюсь завтра написать пост с обзором в ii://develop.16. Ну, и ссылку в этот тред скину.",
"date": "1513020107",
"msgid": "XWShDDcuR4C8PcrTFdGl",
"tags": "",
"repto": "h97Frgqdtapl4AI11aUj",
"address": "tavern,23"
}
}
]
}
}


Вот и он!

Нам вернулось одно сообщение, что не удивительно, т.к. ID в сети уникальны, а мы искали именно по нему.

А теперь давайте выведем все последние(5) сообщения(по дате) из эхи idec.talks:


curl -XPOST -d '{"sort": [{"date": {"order": "desc"}}, {"_score": {"order": "desc" }}], "size": 5}' https://dynamic.lessmore.pw/search -H 'Content-type: application/json'
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
...


Смотрите, тут мы отсортировали(на стороне сервера) сообщения по дате в порядке убывания и ограничили лимит в 5 сообщений. Попробуйте перевести это на SQL(`select * from idec.talks order by date desc limit 5`).

А теперь выполним более сложный поиск: мы найдем сообщения по строке! Т.е. выполним полнотекстовый поиск!

Запрос будет выглядеть так:


{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"simple_query_string": {
"query": "обзор"
}
},
"size": 5
}


Отправляем его POST-ом в https://dynamic.lessmore.pw/search.

В ответ нам на это вернется список из 5 сообщений отсортированных по дате, где найдены вхождения слова "обзор". Кстати, верхнее сообщение(b2rhH6sOfzEzgGZzLT51(на данный момент)) из эхи habra.16 и с заголовком "Обзор литературы по языку Python для начинающих".

Вот так вот. Чтобы делать более лучшие вещи читайте документацию(query DSL) по Elasticsearch.

// Да, если вашей эхи нет в индексе, то убедитесь, что она есть в list.txt

Ссылка: https://difrex.lessmore.pw/post/api-poiska-na-dynamic/

[>] Go в GNU Emacs
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:47


На самом деле это выжимка вот этой статьи. Ну, а еще некоторые вещи в ней устарели, по-этому немного обновленная версия.

# tl;dr

Поставим нужные пакеты в Емакс


(use-package exec-path-from-shell)
(use-package rainbow-delimiters)
(use-package go-snippets)
(use-package go-guru)
(use-package go-autocomplete)


Настроим go-mode


(use-package go-mode
;; Godef jump key binding
:bind (("M-." . godef-jump)
("M-*" . pop-tag-mark))
:init
(setenv "GOPATH" (concat (getenv "HOME") "/.local"))
:config
(defun set-exec-path-from-shell-PATH ()
(let ((path-from-shell (replace-regexp-in-string
"[ \t\n]*$"
""
(shell-command-to-string "/bin/bash -c '. ~/.bashrc && echo $PATH'"))))
(setenv "PATH" path-from-shell)
;; (setq eshell-path-env path-from-shell) ; for eshell users
(setq exec-path (split-string path-from-shell path-separator))))

(when window-system (set-exec-path-from-shell-PATH))

(defun my-go-mode-hook ()
"My Golang hook."
(setq gofmt-command "goimports")

;; Call Gofmt before saving
(add-hook 'before-save-hook 'gofmt-before-save)

;; Set compile command
(if (not (string-match "go" compile-command))
(set (make-local-variable 'compile-command)
"go build -v && go test -v && go vet"))

;; Enable rainbow
(rainbow-delimiters-mode-enable)
(auto-complete-for-go)
(yas-initialize))

;; Go autocomplete
(defun auto-complete-for-go ()
"Enable golang autocomple."
(auto-complete-mode 1))

(add-hook 'go-mode-hook 'auto-complete-for-go)
(add-hook 'completion-at-point-functions 'go-complete-at-point)
(add-hook 'go-mode-hook 'my-go-mode-hook)
(add-hook 'go-mode-hook #'rainbow-delimiters-mode))


Тут в :bind можно прописать свои сочетания клавиш.

Да, всегда используйте use-package. Это сэкономит кучу времени в будущем.

Теперь добавим GOPATH в ~/.bashrc


echo 'export GOPATH=${HOME}/.local' >> ~/.bashrc
. ~/.bashrc


Выкачиваем зависимости Go


go get -t -v golang.org/x/tools/cmd/goimports
go get -t -v golang.org/x/tools/cmd/guru
go get -t -v github.com/rogpeppe/godef


Готово. Код конфига доступен по ссылке.

Ссылка: https://difrex.lessmore.pw/post/go-v-emacs/

[>] Отправляем логи в удаленный logstash
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:47


Все привыкли пользоваться связкой ELK. А что делать, если хочется отправить логи в уже существующий ELK с хоста на котором памяти в обрез?

У меня получилось так, что на виртуалке с сайтиком всего 512Мб памяти и логстешь при запуске просто выжирал ее всю и падал. Никакие Xmx Xms не помогали. Самое интересное, что логи-то nginx я заставил писать в JSON, а значит logstash выступает просто проксей до эластика.

Вот так можно заставить писать nginx в JSON. Добавляем это в nginx.conf.


log_format logstash_json '{ "@timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"request": "$request", '
'"request_method": "$request_method", '
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent" }';



А в конфиге сайта


access_log /var/log/nginx/access.log logstash_json;


Собственно пишем конфиг удаленного логстеша:


input {
tcp {
port => 12222
host => "10.8.0.10"
codec => "json"
}
}

output {
elasticsearch {
index => "nginx"
}
}


Теперь делаем скрипт отправки логов:


#!/bin/bash

# /usr/local/bin/logsend.sh

/usr/bin/tail -f /var/log/nginx/access.log | /bin/nc 10.8.0.10 12222


И запиливаем сервис systemd и стартуем его


[Unit]
Description=Send nginx log to remote logstash

[Service]
Type=simple
ExecStart=/usr/local/bin/logsend.sh

[Install]
WantedBy=multi-user.target


systemctl status logsend


● logsend.service - Send nginx log to remote logstash
Loaded: loaded (/etc/systemd/system/logsend.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-09-02 12:05:01 UTC; 1h 33min ago
Main PID: 28559 (logsend.sh)
Tasks: 3
Memory: 484.0K
CPU: 12ms
CGroup: /system.slice/logsend.service
├─28559 /bin/bash /usr/local/bin/logsend.sh
├─28562 /usr/bin/tail -f /var/log/nginx/access.log
└─28563 /bin/nc 10.8.0.10 12222


Использование памяти пол-мегабайта :).

Ссылка: https://difrex.lessmore.pw/post/logs-to-remote-logstash/

[>] Фест Эпоха рыцарства 2017
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:48


Будет много фоток. Пост весит 16Мб.

Под Минском в д. Озерцо проходил фестиваль "Эпоха рыцарства" на котором в первый день я и побывал.

Было солнечно и тепло. В палатках продовались домашняя медовуха и сбитень.

Уже на подходе к самому месту проведения заметили палатки и косплееров на коняшках.

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

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

Вышли сами рыцари с флагами и на конях.

Вот этот с гусем на голове был особо приколен.

Над этим всем летал дрон и снимал видео. Наверное, его где-то можно будет увидеть.

Рыцари скакали на лошадях и перепрыгивали через препятствие. Весело.

Высоко в небе периодически летали дельтопланы с которых тоже фотографировали фестиваль.

В конце турнира по сценарию рыцари поссорились и между ними начался махач.

За этим наблюдали красивые девочки в средневековых костюмах.

Вечером, на разогреве, выступали фолк-музыканты. Первыми вышли Hardwood.

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

Следующими выступали Стары Ольса. Подтянулись мужики в смешных шапках. Наверняка гномы.

Выступление проходило весело.

Барабанщики круты!

После Стары Ольса на сцену вышли Butterfly Temple. Пока они чекались сходил за сцену.

Клевые домики.

Средневековые девченки отошли за сцену покурить и початиться.

Наконец-то Butterfly настроились и зарубили МИТОЛ!

Чувак-ведущий залез на столб и пустился в пляс!

Выступление было драйвовым. Играли Butterfly Temple примерно час. На улице стемнело и температура воздуха опустилась всего до 12 градусов тепла. Комары озверели, в шортах находиться стало не очень круто и мы поехали домой в Минск.

Ссылка: https://difrex.lessmore.pw/post/fest-folk-museum/

[>] Пилим i3wm
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:49


Я тут на ЛОРе недавно постил скриншот и, вроде, людям понравилось. Попробую разобрать тут свой конфиг.

## Софт

Я использую Ubuntu 16.04, так что все действия актуальны для нее.

* i3-gaps

Это форк оригинального i3, где добавляются гапсы(отступы между окнами).

Сборку и установку производим так:


git clone https://github.com/Airblader/i3 -b 4.13
cd i3
dpkg-checkbuilddeps # проверяем какие зависимости нужно установить для сборки пакета, устанавливаем их.
dpkg-buildpackage -uc -us # собираем пакет
sudo dpkg -i ../i3-wm_4.13-1_amd64.deb # устанавливаем


* i3lock

Это блокировщик экрана. Ставим его из репозитория universe.

* compton

Тени, прозрачности и прочая красота. Так же ставим из официальных репозиториев.

* polybar

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

Компиляем


git clone --branch 3.0.5 --recursive https://github.com/jaagr/polybar
mkdir polybar/build
cd polybar/build
cmake ..
make install


* rofi

Лаунчер. Так же ставим из репозиториев.

* feh

На самом деле - это просмотрщик изображений, но еще он позволяет установить обои.

* dunst

Уведомления(libnotify) рабочего стола.

## Конфигурация

Можно приступать к настройке WM.

~/.config/i3/config


# Клавиша super в качестве модификатора
set $mod Mod4
# Шрифты
font pango:hack 12
# Alt в качестве модификатора для управления плавающими окнами
floating_modifier Mod1
# Терминал
bindsym $mod+Return exec i3-sensible-terminal
# Закрытие окна
bindsym $mod+q kill

# Запуск лаунчера
bindsym $mod+d exec rofi -show run


Для настройки цветов лаунчера в ~/.Xresources пишем:


! ------------------------------------------------------------------------------
! ROFI Color theme
! ------------------------------------------------------------------------------
rofi.color-enabled: true
rofi.color-window: #393939, #393939, #268bd2
rofi.color-normal: #393939, #ffffff, #393939, #268bd2, #ffffff
rofi.color-active: #393939, #268bd2, #393939, #268bd2, #205171
rofi.color-urgent: #393939, #f3843d, #393939, #268bd2, #ffc39c


Hint: На сайте rofi можно найти несколько тем.

Локсрин. Я не использую комбинацию $mod+jklh для переключения между окнами, мне хватает стрелочек. Биндим i3lock на $mod+l.


# Lock desktop
bindsym $mod+l exec ~/.config/i3/lock.sh


Скрипт ~/.config/i3/lock.sh:


#!/bin/bash

# Make screenshot
scrot /tmp/screen.png

# Scale image
convert -scale 10% -scale 1000% /tmp/screen.png /tmp/screen1.png

# Clean
rm -f /tmp/screen.png

# Lock screen
i3lock -i /tmp/screen1.png


Выглядит это так:

Идем дальше по конфигу.


# Переключение между окнами:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right


Я пропущу дальше секции про управление окнами, т.к. конфиг практически ничем не отличается от дефолтоного. Удаляем/комментируем секцию с i3bar.

Убираем декорации окон


# New window size
new_window pixel


Мультимедиа кнопки


# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound

# Sreen brightness controls
bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness
bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness


Настройка гапсов


# Эта опция нужна для того, чтобы гапсы отключались, если на эркане всего одно окно.
smart_gaps on

gaps inner 5
gaps outer 2


Автозапуск приложений


# Обои
exec feh --bg-scale /usr/share/backgrounds/gnome/Godafoss_Iceland.jpg &
# Автоблокировка экрана через 2 минуты
exec xautolock -locker ~/.config/i3/lock.sh -time 2 &
# Апллет для управления network-manager
exec nm-applet &
# Композитор
exec compton &
# Conky
exec conky -c /home/d_zheleztsov/.conkyrc &
# Почему-то без такого костыля у меня dunst запускаться не хочет
exec killall dunst && dunst -conf /home/d_zheleztsov/.config/dunst &

# Изменение цветовой температуры в зависимости от времени суток
exec redshift &

# Запускаем приложения на своих рабочих столах
exec --no-startup-id i3-msg 'workspace 1; exec firefox'
exec --no-startup-id i3-msg 'workspace 2; exec gnome-terminal'
exec --no-startup-id i3-msg 'workspace 3; exec emacs25'
exec --no-startup-id i3-msg 'workspace 4; exec pidgin'
exec --no-startup-id i3-msg 'workspace 5; exec evolution'

# Панель
exec ~/.local/bin/polybar main &


По поводу конфигурации панели будет хорошо почитать официальную вики.

## Итоговые конфиги

* i3: ~/.config/i3/config
* polybar: ~/.config/polybar/config
* conky: ~/.conkyrc

## Что получилось

Ссылка: https://difrex.lessmore.pw/post/i3wm-config/

[>] Минск 08.05.2017
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:49


Фотки без обработки, тупо RawTherapee -> export.

## Верхний город

## Центр

## Площадь независимости

Ссылка: https://difrex.lessmore.pw/post/minsk-08-05-17/

[>] Рига
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 07:40:49


Съездили тут на днях погулять в Латвию. Сели в машину и поехали. Границу пересекали в Бемякони, туда(к литовцам) въехали за два часа - нормалек.

Периодически шел дождь, но в целом погода была ничего.

## Рига

От границы до Риги дорога заняла часа 4-5. Старый город порадовал, красив.

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

Помимо Риги заезжали еще в несколько мест.

## Цесис

## Бауска

## Тракай

## Дорога обратно

По дороге обратно дождь чередовался с солнцем и было красиво.

Границу пересекли вечером за 3 часа. В Минск приехали уже в час ночи.

Ссылка: https://difrex.lessmore.pw/post/riga/

[>] Автодополнение для python с LSP в GNU Emacs
difrex.blog
Difrex(mobile)(tavern,23) — All
2018-07-30 15:40:10


The Language Server Protocol (LSP) - это открытый, основанный на JSON-RPC протокол для использования между редакторами исходного кода и серверами, которые предоставляют специфические для языка программирования функции. Цель протокола заключается в том, чтобы обеспечить поддержку автодополнения языка программирования независимо от любого редактора или среды IDE.

LSP дает реально крутые штуки, такие как:

* Показ документации для модуля под курсором

* Автодополнение по точке. На самом деле это `company-lsp`, но про это будет дальше.

* Интеграция с flycheck

И еще кучу всего на самом деле. Все возможные настройки можно будет увидеть по `M-x customize RET lsp RET`.

## Конфигурация

Для начала нужно установить сам language server для python. Для Arch/Manjaro установка будет выглядеть так:


sudo pacman -S python-language-server


С системными зависимостями разобрались. Приступаем к `init.el`. Будем использовать `use-package`, потому что не использовать его - это отстой. Но каждый решает сам.

Включаем `lsp-mode`. Да, для lsp нужно что-то, чем определить корневой каталог для проекта. Я использую везде projectile.


;; LSP settings
(use-package lsp-mode
:ensure t
:config
;; make sure we have lsp-imenu everywhere we have LSP
(require 'lsp-imenu)
(add-hook 'lsp-after-open-hook 'lsp-enable-imenu)
;; get lsp-python-enable defined
;; NB: use either projectile-project-root or ffip-get-project-root-directory
;; or any other function that can be used to find the root directory of a project
(lsp-define-stdio-client lsp-python "python"
#'projectile-project-root
'("pyls"))

;; make sure this is activated when python-mode is activated
;; lsp-python-enable is created by macro above
(add-hook 'python-mode-hook 'lsp-python-enable)

;; lsp extras
(use-package lsp-ui
:ensure t
:config
(setq lsp-ui-sideline-ignore-duplicate t)
(add-hook 'lsp-mode-hook 'lsp-ui-mode))

(use-package company-lsp
:config
(push 'company-lsp company-backends))

;; NB: only required if you prefer flake8 instead of the default
;; send pyls config via lsp-after-initialize-hook -- harmless for
;; other servers due to pyls key, but would prefer only sending this
;; when pyls gets initialised (:initialize function in
;; lsp-define-stdio-client is invoked too early (before server
;; start)) -- cpbotha
(defun lsp-set-cfg ()
(let ((lsp-cfg `(:pyls (:configurationSources ("flake8")))))
;; TODO: check lsp--cur-workspace here to decide per server / project
(lsp--set-configuration lsp-cfg)))
(add-hook 'lsp-after-initialize-hook 'lsp-set-cfg))


flake8, autopep8, fci, anaconda, rainbow-delimiters(я их везде юзаю):


;; Python mode hook
(defun my-python-mode-hook ()
"Define hook."

(use-package flymake-python-pyflakes
:config
(setq flymake-python-pyflakes-executable "flake8")
(setq flymake-python-pyflakes-extra-arguments '("--max-line-length=99"))
(flymake-python-pyflakes-load))

(use-package py-autopep8
:config
(setq py-autopep8-options '("--max-line-length=99"))
(py-autopep8-enable-on-save))

;; Enable rainbow
(use-package rainbow-delimiters)
(rainbow-delimiters-mode-enable)

(use-package highlight-indent-guides)
(use-package company)
(use-package anaconda-mode)
(use-package company-anaconda
:config
(add-to-list 'company-backends '(company-anaconda :with company-capf)))

(use-package flycheck-pyflakes
:config
(setq flychek-flake8-maximum-line-lenght 99))

(setq-default py-shell-name "ipython")
(setq-default py-which-bufname "IPython")
;; Fill column indicator
(use-package fill-column-indicator
:init
:config
(setq-default fill-column 99)
(setq fci-rule-width 1)
(setq fci-rule-color "#696969"))

(fci-mode)

(anaconda-mode +1)
(anaconda-eldoc-mode)
(highlight-symbol-mode +1)
(highlight-indent-guides-mode)
(company-mode))

(use-package python
:mode ("\\.py\\'" . python-mode)
:interpreter ("python" . python-mode)
:init
(add-hook 'python-mode-hook 'my-python-mode-hook))


Все!

Спасибо вот этому чуваку.

Ссылка: https://difrex.lessmore.pw/post/python-lsp/

[>] Re: Fallout
pipe.2032
Difrex(mobile)(tavern,23) — btimofeev
2017-09-30 22:08:03


Плохо, что в стимовской версии поубирали некоторые вещи, типа, убийства детей.

Pages: 1 2 3