Alacritty 与 Zellij 集成
介绍
Alacritty 简介
Alacritty 是一款开源、跨平台的终端仿真器,以其高性能、低延迟和可定制性而闻名。它使用 Rust 编程语言编写,并利用 GPU 渲染来实现流畅的滚动和快速的文本渲染。
优点
- 高性能: GPU 渲染引擎使其成为市场上最快的终端仿真器之一,即使在处理大量文本或图形时也能提供流畅的体验。
- 低延迟: 响应延迟极低。
- 跨平台: 可在 Windows、macOS、Linux 和 FreeBSD 上运行。
- 开源: 是开源的,这意味着用户可以自由查看、修改和分发其源代码。
缺点
- 有限的扩展性: 与其他终端仿真器相比,不支持插件或扩展。
- 缺少某些功能: 缺少某些高级功能,例如选项卡、分割窗格。
Zellij 介绍
Zellij 是一款开源、跨平台的终端复用器,它允许用户在单个窗口中管理多个终端会话。它使用 Rust 编程语言编写,并具有现代、可定制的界面。
特点
- 终端复用: 核心功能是终端复用,它允许用户在单个窗口中打开和管理多个终端会话。
- 可定制性: 提供了广泛的配置选项,允许用户根据自己的喜好定制布局、键盘快捷键和配色方案。
- 插件支持: 支持插件,允许用户扩展其功能,例如添加对外部工具或服务的集成。
- 跨平台: 可在 Windows、macOS、Linux 和 FreeBSD 上运行。
- 开源: 是开源的,这意味着用户可以自由查看、修改和分发其源代码。
介绍部分为 Gemini 生成,手动做了部分调整。
内网服务部署有效的 SSL 证书
介绍
如果在内网中运行本地 Web 应用程序,可以使用 IP 地址和端口组合来访问服务,例如 http://192.168.1.32:8096
来访问 Jellyfin。但是如果发生 IP 变更的话,就需要修改 IP 地址,因此可以通过反向代理和本地域名的组合,例如 https://jellyfin.local
或 https://homeassistant.local
来避免 IP 地址变更。这种由于是使用了自己生产的 CA 证书,浏览器会有告警提示。
准备
假定本地运行 Jellyfin 服务器的 HomeLab IP 为 192.168.1.32
,容器名称为 jellyfin,端口为 8096,域名为 jellyfin.example.xyz
域名
自有域名
这里以 Cloudflare
为例
- 在 My Profile/API Tokens 页面生成有
Zone.DNS
权限的 API token - 在 DNS 记录中添加一条 A 记录,名称为
jellyfin
, 内容为192.168.1.32
,代理状态为仅 DNS - reserved IP
没有域名
通过 DuckDNS 注册账号,然后添加域名记录,比如 homelab001
,IP 地址设为 192.168.1.32
,最终的域名为 https://jellyfin.homelab001.duckdns.org
通过 docker 部署 wireguard 及其界面
前言
Wireguard 有两种模式,一直是内核态,一种是用户态。可以通过 modprobe wireguard
检查内核是否支持 Wireguard。如果该命令成功退出并且没有打印错误,则内核模块可用。如果 wireguard 内核模块不可用,可以切换到像 boringtun 这样的用户态实现。
这里以内核态为例。
准备工作
- 安装 Wireguard
1
2
3
4
5
6sudo yum install elrepo-release epel-release -y
sudo yum update -y
sudo yum install kmod-wireguard wireguard-tools -y
sudo yum copr enable jdoss/wireguard
sudo yum update -v
sudo yum install wireguard-dkms -y - 启用 Wireguard 内核模块
1
sudo modprobe wireguard
- 自动加载
iptable_raw
1
2sudo modprobe iptable_raw
sudo echo "iptable_raw" | sudo tee /etc/modules-load.d/iptable_raw.conf
部署私有 chatGPT Telegram 机器人
准备工作
- 注册 chatGPT 账户
- 注册 Telegram Bot,通过 @BotFather 创建,并获取 token
- 获取 Telegram Chat ID, 通过 @userinfobot 查询
- 获取 Access Token
- 准备反代服务,可以选择别人提供的,不是一定要自己部署
运行
克隆 chatgpt-telegram-bot
准备配置文件
local.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"debug": 1,
"bot": {
"token": "telegram bot token",
"groupIds": [],
"userIds": [],
"chatCmd": "/chat"
},
"api": {
"type": "unofficial",
"unofficial": {
"accessToken": "chatGPT access token",
"apiReverseProxyUrl": "https://chat.duti.tech/api/conversation",
"model": ""
}
}
}userIds
为数字,比如114797892
,可指定多个,如果不指定,就所有人都可用,groupIds
同理,建议配置上accessToken
会有过期时间,暂时没特别好的自动更新的办法,主要是有 cloudflare 验证
修改
docker-compose.yml
,并构建镜像1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16version: '3'
services:
chatgpt:
image: chatgpt-telegram-bot
container_name: chatgpt
build: .
restart: unless-stopped
volumes:
- ./local.json:/app/config/local.json
networks:
- nginx-proxy
networks:
nginx-proxy:
external: truedocker-compose build
构建镜像运行
docker-compose up -d
运行查看 log
docker-compose logs -f --tail 100 chatgpt
如无意外的话,应该会输出类似的日志
1
2
3
4
5
6> node --experimental-loader=extensionless dist/index.js
(node:42) ExperimentalWarning: Custom ESM Loaders is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
2/23/2023, 3:06:13 AM 🔮 ChatGPT API has started...
2/23/2023, 3:06:14 AM 🤖 Bot @xxx_bot has started...在 Telegram 中添加刚才创建的机器人,通过
/chat 聊天内容
开始,/help
会显示支持的指令
---EOF---
使用 Antidote 管理 Zsh 配置
之前介绍了使用 antigen 和 sheldon 管理 Zsh 配置,由于 antigen 已经停止维护了,后面就有了 antibody,但是这个也停止维护了,最终就有了继任者 antidote,这几个使用上都大同小异。
安装
1
2
3
4# macOS 使用
brew install antidote
# 其他平台
git clone --depth=1 https://github.com/mattmc3/antidote.git ${ZDOTDIR:-$HOME}/.antidote在
$HOME
目录添加.zsh_plugins.txt
来定义需要使用的插件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# .zsh_plugins.txt
# comments are supported like this
https://github.com/peterhurford/up.zsh
rummik/zsh-tailf
mattmc3/zman
agkozak/zsh-z
# empty lines are skipped
# annotations are also allowed:
romkatv/zsh-bench kind:path
olets/zsh-abbr kind:defer
# frameworks like oh-my-zsh are supported
ohmyzsh/ohmyzsh path:lib
ohmyzsh/ohmyzsh path:plugins/command-not-found
ohmyzsh/ohmyzsh path:plugins/common-aliases
ohmyzsh/ohmyzsh path:plugins/gem
ohmyzsh/ohmyzsh path:plugins/git
ohmyzsh/ohmyzsh path:plugins/npm
ohmyzsh/ohmyzsh path:plugins/tmux
ohmyzsh/ohmyzsh path:plugins/yarn
ohmyzsh/ohmyzsh path:plugins/fzf
# prompts:
# with prompt plugins, remember to add this to your .zshrc:
# `autoload -Uz promptinit && promptinit && prompt pure`
# sindresorhus/pure kind:fpath
# romkatv/powerlevel10k kind:fpath
# popular fish-like plugins
zsh-users/zsh-autosuggestions
zsh-users/zsh-completions path:src kind:fpath
zdharma-continuum/fast-syntax-highlighting kind:defer
# zsh-users/zsh-history-substring-search在
.zshrc
中添加下面的内容,以后修改.zsh_plugin.txt
中的内容后会自动更新1
2
3
4
5
6
7
8
9
10
11
12
13# .zshrc
# Lazy-load antidote and generate the static load file only when needed
zsh_plugins=${ZDOTDIR:-$HOME}/.zsh_plugins
if [[ ! ${zsh_plugins}.zsh -nt ${zsh_plugins}.txt ]]; then
(
source ${ZDOTDIR:-$HOME}/.antidote/antidote.zsh
antidote bundle <${zsh_plugins}.txt >${zsh_plugins}.zsh
)
fi
source ${zsh_plugins}.zsh
# starship
# eval "$(starship init zsh)"
---EOF---
macOS 设置 GPG
安装
gpg
和pinentry
brew install gpg pinentry-mac
修改
gpg-agent
配置echo pinentry-program $(whitch pinentry-mac) >> ~/.gnupg/gpg-agent.conf
通过
gpgconf
检查配置1
2
3
4
5
6
7gpg:OpenPGP:/opt/homebrew/Cellar/gnupg/2.4.0/bin/gpg
gpgsm:S/MIME:/opt/homebrew/Cellar/gnupg/2.4.0/bin/gpgsm
keyboxd:Public Keys:/opt/homebrew/Cellar/gnupg/2.4.0/libexec/keyboxd
gpg-agent:Private Keys:/opt/homebrew/Cellar/gnupg/2.4.0/bin/gpg-agent
scdaemon:Smartcards:/opt/homebrew/Cellar/gnupg/2.4.0/libexec/scdaemon
dirmngr:Network:/opt/homebrew/Cellar/gnupg/2.4.0/bin/dirmngr
pinentry:Passphrase Entry:/opt/homebrew/opt/pinentry/bin/pinentry检查
pinentry-mac
是否能正确弹出密码界面echo GETPIN | pinentry-mac
修改 git 签名配置
1
2
3git config --global user.signingkey F0406D8A
git config --global commit.gpgsign true
git config --global gpg.program $(which gpg)测试签名是否正确
echo "test" | gpg --clearsign
输出结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16gpg: using "F0406D8A525890198021BB243D8D256084332679" as default secret key for signing
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
test
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEE8EBtilJYkBmAIbskPY0lYIQzJnkFAmPsoRUACgkQPY0lYIQz
JnkqTQf8DSIYBfaB6ijhO3U7K4FYvCjeMACV3UbuRJI6WxEyDkn4Iglaw/Y4C/s5
U12ba4PIGLmzqRSkISFbIj+5eKH97CQoB/kVlfQWL+wkYCpTWNAIPEBa7FGU4BYN
9dSW/00XEdrWz9Lvzb0QAP2t9a8DIPIhyDGpQoxfq+0enZuFJKMRtKPzDKkpaylG
MTEYEwV5VnyYNsIu8K37h27oPWKPSadT3SGM+m4vFP68V9Thw0/qZFJS8NW7OW8b
RwB5FVSIsORypAtN0AtzzTd8cxEq6Rf9rPkYgtfeGGrCzZdyfKsPe/AoWEP5/ZuY
FzQGzjxomBPHLDt7k89Aq5mwK2NAKw==
=73Fx
-----END PGP SIGNATURE-----诊断问题
1
2
3
4
5# Kill gpg-agent
killall gpg-agent
# Run gpg-agent in daemon mode
gpg-agent --daemon
---EOF---
Watchtower 通过 telegram 发通知
通过 WATCHTOWER_NOTIFICATION_URL
定义 Telegram 的通知信息,当然了也可以定义其他的通知方式。底层是通过 shoutrrr 实现的,只要 shoutrrr 支持的方式这里都可以用。
1 | version: '3.5' |
- 通过
@BotFather
创建自己的通知机器人,并获取token
- 通过
@RawDataBot
获取 Chat ID
---EOF---