telega 是一个 emacs 上的 Telegram 客户端,在 nixos 中,telega 包过于老旧,在 unstable 中已经无了,下面尝试使用传统方法安装 telega。
下载源代码
cd ~/.emacs.d/site-lisp
git clone git@github.com:zevlg/telega.el.git
参考文档进行配置
一个例子是(我以前抄的),注意改对 load-path:
(use-package telega
:load-path "~/.emacs.d/site-lisp/telega.el"
:commands (telega)
:init (setq telega-proxies
'((:server "localhost"
:port "1089"
:enable t
:type (:@type "proxyTypeSocks5")))
telega-chat-show-avatars nil)
(setq telega-chat-fill-column 65)
(setq telega-emoji-use-images t)
;;(setq telega-server-libs-prefix "/nix/store/8n54mnnizmzvi7b3bhv31fc3hr0fcl9i-tdlib-1.7.0/lib")
:config
(set-fontset-font t 'unicode (font-spec :family "Symbola") nil 'prepend)
(with-eval-after-load 'company (add-hook 'telega-chat-mode-hook (lambda ()
(make-local-variable 'company-backends)
(dolist (it '(telega-company-botcmd telega-company-emoji))
(push it company-backends)))))
(with-eval-after-load 'all-the-icons (add-to-list 'all-the-icons-mode-icon-alist '(telega-root-mode all-the-icons-fileicon "telegram"
:heigt 1.0
:v-adjust -0.2
:face all-the-icons-yellow))
(add-to-list 'all-the-icons-mode-icon-alist '(telega-chat-mode all-the-icons-fileicon "telegram"
:heigt 1.0
:v-adjust -0.2
:face all-the-icons-blue)))
(telega-notifications-mode t)
(telega-mode-line-mode 1)
(add-hook 'telega-chat-mode-hook
(lambda ()
(toggle-truncate-lines +1)
(display-line-numbers-mode -1)))
(add-hook 'telega-root-mode-hook
(lambda ()
(toggle-truncate-lines +1)
(display-line-numbers-mode -1)
(toggle-truncate-lines -1)))
(define-key telega-msg-button-map "k" nil))
理论上安装 tdlib 后,M-x
telega 就能编译 telega-server 并运行。在 nixos 需要手动编译。
手动编译 telega-server
nix-shell -p cmake gperf pkg-config tdlib
cd ~/.emacs.d/site-lisp/telega.el
make
cd server
make install
注意 make install 会放进 $(HOME)/.telega 中
解决版本不一致问题
重新 M-x
telega,提示 tdlib 需要 ≥= 1.7.7, 而 nixpkgs 中的版本是 1.7.0
有两种方法,降级 telega 或者 升级 tdlib。
telega 使用 git 管理,降级很容易,git log 找到对应版本的 commit log,之后 git checkout。但缺点很明显,新功能和bug修复没了,而且可能和服务器交互出问题。
最好还是升级一下 tdlib, 我去翻了翻 nixpkgs 中的构建脚本(pkgs/development/libraries/tdlib/default.nix),它是使用 fetchFromGitHub 构建的。
查看文档 fetchFromGitHub
有这么几个参数:
owner
is a string corresponding to the GitHub user or organization that controls thisrepo
corresponds to the name of the software repository.rev
corresponds to the Git commit hash or tag (e.gv1.0
) that will be downloaded from Git.sha256
corresponds to the hash of the extracted directory.
需要修改的是 rev 和 sha256。
rev: tdlib 的 tag 更新太慢,改用 commit 的 hash,在 github 点进一个 commit 的记录里就能找到它的 hash
sha 的计算,参考:https://github.com/NixOS/nix/issues/1880
nix-prefetch-url --unpack https://github.com/tdlib/td/archive/a68d8e77efb03896f3a04316c47136b0bab7df.tar.gz
在 nixpkgs 目录下执行:
nix-build -A tdlib
同目录的 result 保存构建结果。
如果需要安装可以执行
nix-env -f . -iA tdlib
测试成功可以向 nixpkgs 提 pr