2778151656
And let's turn it on in more applications.
212 lines
8.6 KiB
Org Mode
212 lines
8.6 KiB
Org Mode
#+title: Auxillary and Optional Applications
|
||
#+author: Howard X. Abrams
|
||
#+date: 2021-11-18
|
||
#+tags: emacs
|
||
|
||
A literate programming file for helper apps in Emacs.
|
||
|
||
#+begin_src emacs-lisp :exports none
|
||
;;; ha-aux-apps --- Configuring helper apps in Emacs. -*- lexical-binding: t; -*-
|
||
;;
|
||
;; © 2021-2023 Howard X. Abrams
|
||
;; Licensed under a Creative Commons Attribution 4.0 International License.
|
||
;; See http://creativecommons.org/licenses/by/4.0/
|
||
;;
|
||
;; Author: Howard X. Abrams <http://gitlab.com/howardabrams>
|
||
;; Maintainer: Howard X. Abrams
|
||
;; Created: November 18, 2021
|
||
;;
|
||
;; This file is not part of GNU Emacs.
|
||
;;
|
||
;; *NB:* Do not edit this file. Instead, edit the original literate file at:
|
||
;; ~/other/hamacs/ha-aux-apps.org
|
||
;; And tangle the file to recreate this one.
|
||
;;
|
||
;;; Code:
|
||
#+end_src
|
||
* Introduction
|
||
The following applications are not needed. I alternate between trying to /stay in Emacs/ taking advantage of the consistent interface, and using a stand-alone app on my Workday computer.
|
||
* Federation
|
||
** Mastodon
|
||
Glad to see the 2FA feature is working on the [[https://codeberg.org/martianh/mastodon.el][mastodon.el]] project, and even more glad to see the great birdland diaspora arrive in the land of the toots.
|
||
#+begin_src emacs-lisp
|
||
(use-package mastodon
|
||
:straight (:host codeberg :repo "martianh/mastodon.el")
|
||
:init
|
||
(setq mastodon-instance-url "https://emacs.ch"
|
||
mastodon-active-user "howard"))
|
||
#+end_src
|
||
|
||
I would like a dedicate perspective to Mastodon, and I would like a leader key sequence that /expands/ will all options, once Mastodon is running in its own perspective:
|
||
#+begin_src emacs-lisp
|
||
(use-package mastodon
|
||
:config
|
||
(defun mastodon-perspective ()
|
||
(interactive)
|
||
(let ((already-tooted? (seq-contains-p
|
||
(persp-names) "mastodon" 'equal)))
|
||
(persp-switch "mastodon")
|
||
(unless already-tooted?
|
||
(ha-local-leader :keymaps 'mastodon-mode-map
|
||
;; "," '("thread" . mastodon-tl--thread)
|
||
"t" '("toot" . mastodon-toot)
|
||
"u" '("update" . mastodon-tl--update)
|
||
"f" '("favorite" . mastodon-toot--toggle-favourite)
|
||
"b" '("boost" . mastodon-toot--toggle-boost)
|
||
"r" '("reply" . mastodon-toot--reply)
|
||
"s" '("share" . mastodon-toot--copy-toot-url)
|
||
"y" '("copy text" . mastodon-toot--copy-toot-text)
|
||
"d" '("discover" . mastodon-discover))
|
||
(my-mastodon-start))))
|
||
|
||
(ha-leader
|
||
"a m" '("mastodon" . mastodon-perspective)))
|
||
#+end_src
|
||
|
||
Let’s turn on non-fixed-width fonts to make everything easier to read:
|
||
#+begin_src emacs-lisp
|
||
(use-package mastodon
|
||
:hook (mastodon-mode . variable-pitch-mode))
|
||
#+end_src
|
||
Starting the =mastodon= perspective, I set some initial windows:
|
||
#+begin_src emacs-lisp
|
||
(defun my-mastodon-start ()
|
||
"Configure the window placement for a Mastodon Instance."
|
||
(let ((default-directory (getenv "HOME")))
|
||
(mastodon)
|
||
(switch-to-buffer "*mastodon-home*")
|
||
(split-window-right)
|
||
(mastodon-tl--get-local-timeline)
|
||
(switch-to-buffer "*mastodon-local*")))
|
||
#+end_src
|
||
** Matrix/Element
|
||
Yet another encrypted chat/VoIP client-server, but unlike Signal and Telegram, [[matrix.org][Matrix]] is act ually open source. In other words, a project for nerds. We’ll be using Alphapapa’s latest [[https://github.c om/alphapapa/ement.el][ement]] project.
|
||
#+begin_src emacs-lisp
|
||
(use-package ement
|
||
:straight (:host github :repo "alphapapa/ement.el")
|
||
:config
|
||
(defun ha-ement-connect ()
|
||
(interactive)
|
||
(let* ((auth-results (auth-source-search :host "howardism-matrix"))
|
||
(auth-first (first auth-results))
|
||
(username (plist-get auth-first :user))
|
||
(password (funcall (plist-get auth-first :secret))))
|
||
(ement-connect :user-id username
|
||
:password password
|
||
:uri-prefix "https://howardism.org"))
|
||
|
||
(ha-leader
|
||
"a x S" '("send" . ement-send-direct-message)
|
||
"a x s" '("send" . ement-room-send-message)
|
||
"a x c" '("compose" . ement-room-compose-message)
|
||
"a x r" '("room" . ement-view-room)
|
||
"a x d" '("discover" . mastodon-discover)))
|
||
|
||
(ha-leader
|
||
"a x" '(:ignore t :which-key "matrix")
|
||
"a x x" '("connect" . ha-ement-connect)
|
||
"a x s" '("send" . ement-send-direct-message)))
|
||
#+end_src
|
||
|
||
Perhaps we can make it more attractive:
|
||
#+begin_src emacs-lisp
|
||
(use-package ement
|
||
:hook (ement-room-mode . ha-textual-litagures)
|
||
:init
|
||
(setq ement-save-sessions t
|
||
ement-room-send-message-filter 'ement-room-send-org-filter))
|
||
#+end_src
|
||
* Other
|
||
** Twitter
|
||
The venerable [[https://github.com/hayamiz/twittering-mode/tree/master][twittering-mode]] allows me to follow all the twits.
|
||
#+begin_src emacs-lisp :tangle no
|
||
(use-package twittering-mode
|
||
:init
|
||
(setq twittering-use-master-password t
|
||
epa-pinentry-mode 'loopback)
|
||
:config
|
||
(defalias 'epa--decode-coding-string 'decode-coding-string)
|
||
(ha-leader "a t" '("twitter" . twit)))
|
||
#+end_src
|
||
And we are no longer using this package.
|
||
** Telega
|
||
I'm thinking the [[https://zevlg.github.io/telega.el/][Telega package]] would be better than Bitlbee for Telegram communication.
|
||
#+begin_src emacs-lisp
|
||
(use-package telega
|
||
:commands (telega)
|
||
:config
|
||
(setq telega-user-use-avatars nil
|
||
telega-use-tracking-for nil ; '(any pin unread)
|
||
telega-chat-use-markdown-formatting t
|
||
telega-emoji-use-images t
|
||
; telega-completing-read-function #'ivy-completing-read
|
||
telega-msg-rainbow-title nil)
|
||
|
||
(when (fboundp 'evil-insert-state)
|
||
(add-hook 'telega-chat-mode-hook 'evil-insert-state))
|
||
|
||
(ha-leader "a t" 'telega))
|
||
#+end_src
|
||
For some reason, you need [[https://github.com/Fanael/rainbow-identifiers][rainbow-identifiers]] to work, oh, I guess the docs state this.
|
||
|
||
In the Telega chat’s, let’s turn on non-fixed-width fonts:
|
||
#+begin_src emacs-lisp
|
||
(use-package telega
|
||
:hook (telega-chat-mode . variable-pitch-mode))
|
||
#+end_src
|
||
* RPG DM
|
||
Been working on my [[https://gitlab.com/howardabrams/emacs-rpgdm][RPG DM project]] for getting Emacs helping as a /Dungeon Master's Assistant/. The idea is to be able to roll dice and whatnot. What I find most useful is the [[https://gitlab.com/howardabrams/emacs-rpgdm/-/blob/main/rpgdm-tables.el][random tables]].
|
||
#+begin_src emacs-lisp
|
||
(when (f-directory? "~/other/emacs-rpgdm")
|
||
(use-package rpgdm
|
||
:straight (:local-repo "~/other/emacs-rpgdm")
|
||
:commands (rpgdm-mode rpgdm-tables-load)
|
||
:init (setq rpgdm-base (expand-file-name "~/other/emacs-rpgdm"))
|
||
:config (ha-leader "t D" '("rpg dm" . rpgdm-mode))))
|
||
#+end_src
|
||
|
||
And my [[https://gitlab.com/howardabrams/emacs-ironsworn][new Ironsworn project]] expands on it, giving me both the Oracles and the Moves. With an Org file, I can easily play Solo:
|
||
#+begin_src emacs-lisp
|
||
(when (f-directory? "~/other/emacs-ironsworn")
|
||
(use-package rpgdm-ironsworn
|
||
:after rpgdm
|
||
:straight (:local-repo "~/other/emacs-ironsworn")
|
||
:init
|
||
(setq rpgdm-ironsworn-project (expand-file-name "~/other/emacs-ironsworn")
|
||
;; Ignore org links that call my RPG functions:
|
||
org-link-elisp-skip-confirm-regexp (rx string-start (optional "(") "rpgdm-"
|
||
(or "tables-" "ironsworn-")
|
||
(one-or-more any)))))
|
||
#+end_src
|
||
The project is interesting, and I should record a tutorial how to use it.
|
||
* Playing Music
|
||
Why not? Let’s see if the [[https://github.com/isamert/empv.el][empv]] project is sufficient. First install =mpv=, as in:
|
||
#+begin_src sh
|
||
brew install mpv
|
||
#+end_src
|
||
What else?
|
||
#+begin_src emacs-lisp
|
||
(use-package empv
|
||
:straight (:host github :repo "isamert/empv.el")
|
||
:general (ha-leader
|
||
"a p" '(empv-map :wk "play music")))
|
||
#+end_src
|
||
|
||
* Technical Artifacts :noexport:
|
||
Let's =provide= a name so we can =require= this file:
|
||
|
||
#+begin_src emacs-lisp :exports none
|
||
(provide 'ha-aux-apps)
|
||
;;; ha-aux-apps.el ends here
|
||
#+end_src
|
||
|
||
#+DESCRIPTION: A literate programming file for helper apps in Emacs.
|
||
|
||
#+PROPERTY: header-args:sh :tangle no
|
||
#+PROPERTY: header-args:emacs-lisp :tangle yes
|
||
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
|
||
|
||
#+OPTIONS: num:nil toc:t todo:nil tasks:nil tags:nil date:nil
|
||
#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil
|
||
#+INFOJS_OPT: view:nil toc:t ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
|