diff --git a/README.md b/README.md new file mode 100644 index 0000000..3abd20c --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Ещё один генератор строки состояния для i3bar + +## Зачем? Их же навалом, разных! + +Просто потому что могу :) + +На самом деле, мне понадобился генератор с некоторыми специфическими функциями. И мне было проще сгенерировать свой скрипт, согласно i3bar JSON [ipc protocol][1]. + +## Что же такого он умеет? + +Несколько очень простых вещей - просто посмотри в конфиг :) + +* Показывать текущий LA +* Показывать сжатую статистику по памяти +* Часики (с возможностью навесить исполнение любой программы по правому или левому щелчку мыши) +* Состояние заряда батарейки для ноутбука +* Температуру процессора (одно ядро, указывается файл-источник сведений) +* Состояние клавиши CapsLock +* Состояние одного интерфейса VPN (+ tcp health check, т.к. ovpn, например, умеет "залипать") +* Уровень звука согласно pulse audio для default sink (придумывать "крутилочку" для звука я не стал, ибо там не всё так просто и "в процессе" fun скорее всего пропадёт.). Предполагается, что звук правляется через что-то ещё, например, через какой-нибудь pasystray, например. +* Состояние (up|down) любого набора существующих сетевых интерфейсов. Но каждый надо описать. IP не показываются, т.к. это сжирает место на панели, а его не так-то и много. +* "Кнопки" для запуска произвольных приложений. Собственно, ради этого всё и затевалось :) +* "Трекать" запуск приложенй "с кнопки" и подсвечивать соответствующую "кнопку". Работает через ивенты от самого i3: на появление и на исчезновения окна с рядом свойств. +* Cron! Как ни забавно это звучит, но, да. И нужен он для показывания desktop notifications, ибо системный cron не прокидывает в environment переменную с текущим dbus session. Но в этот крон можно пихнуть что угодно. + +## Как это заставить работать + +Скрипт на perl-е, и чтобы заставить его работать нужен, собственно, сам perl, [cpanm][2], [carton][3], [cpm][4] или что-то ещё для управления перловыми модулями, а также крайне желательно наличие в системе библиотеки [lib::local][5]. + +При запуске необходимо убедиться, что переменная [PERL5LIB][6] установлена корректно. + +И не забыть в конфиге прописать что-то вменяемое. Кстати, конфиг ищется в каталогах + +* ~/.config/i3/i3status-anyevent.json +* ~/.config/i3/config.json +* ~/.i3/i3status-anyevent.json +* ~/.i3/config.json + +[1]: https://i3wm.org/docs/i3bar-protocol.html +[2]: https://metacpan.org/pod/App::cpanminus +[3]: https://metacpan.org/pod/Carton +[4]: https://metacpan.org/pod/distribution/App-cpm/script/cpm +[5]: https://metacpan.org/pod/local::lib +[6]: https://perlmaven.com/how-to-change-inc-to-find-perl-modules-in-non-standard-locations \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..b4ef420 --- /dev/null +++ b/TODO @@ -0,0 +1,11 @@ +Что желательно сделать ещё. + +* При рестарте i3wm (рестарте скрипта), восстанавливать список запущенных окон. + +* Добавить в battery plugin отслеживание уровня заряда. Раскрашивать вывод. + Опционально звать suspend2disk, при очень низком заряде + +* Добавить "крутилку" в плагин, отображающий громкость :) + +* Применить Use English и использовать человекочитаемые имена встроенных + переменных. diff --git a/i3status-anyevent b/i3status-anyevent index 02e4104..4a78601 100644 --- a/i3status-anyevent +++ b/i3status-anyevent @@ -1,9 +1,5 @@ #!/usr/bin/perl -# TODO: on i3wm reload (i3status restart), restore active windows status -# TODO: make battery plugin take into account charge level, add ability to call suspend2disk on critical charge level -# TODO: More complex PA-plugin with volume adjustment of default sink - # we need to disable hash shuffling in order to make as less prints to stdout as possible BEGIN { unless (defined $ENV{PERL_PERTURB_KEYS}) {