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 有这么几个参数:
owneris a string corresponding to the GitHub user or organization that controls thisrepocorresponds to the name of the software repository.revcorresponds to the Git commit hash or tag (e.gv1.0) that will be downloaded from Git.sha256corresponds 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