LOADING

加载过慢请开启缓存 浏览器默认开启

Lumorian's Blog

永恒的紫罗兰

风花雪月本闲, 而扰攘者自冗

博客更新日志

2026/2/11

展示最近的 5 次更新, 查看全部更新日志请点击阅读全文

26-4-17

更新了修复 libinput 鼠标点击抖动限制
更新了我的 Arch + Niri 全安裝及配置

26-4-14

新增了修复 libinput 鼠标点击抖动限制

26-4-13

更新了我的 Arch + Niri 全安裝及配置

26-4-02

新增了Daysmatter-终端交互式倒计时工具

26-2-26

更新了我的 Arch + Niri 全安裝及配置, 修复一些错误的命令, 拆分了代码块复制更方便

阅读全文

修复 libinput 鼠标点击抖动限制

2026/4/14

前言/废话

在 GNU/Linux 中, 无论是 wayland 还是 x11, 都会出现快速点击鼠标时 (例如 DBC), 最高只能识别到约 12 CPS, 而实际 CPS 为 20 CPS 的情况

症状

evtest 能检测到所有点击

libinput debug-eventswev 只能检测到部分点击

根源

libinput 1.23+ 版本引入了按键去抖动功能 (button debouncing) 用于防止硬件接触抖动导致的误触, 但这个功能默认会过滤掉间隔小于 25ms 的点击事件, 从而导致 CPS 被限制在 12 左右

虽然可以通过在 ‘/etc/libinput/local-overrides.quirks’ 中配置 ‘ModelDebounceTime=0’ ‘ModuelBouncingKeys=0’, 但几乎不生效

解决方案

直接通过修改 libinput 源码来禁用按键去抖动

安装编译依赖

sudo pacman -S --noconfirm base-devel git meson ninja libevdev mtdev systemd

克隆 libinput 源码

git clone https://gitlab.freedesktop.org/libinput/libinput.git && cd libinput

签出对应版本

git tag -l | grep 1.31.1 && git checkout 1.31.1

修改 src/libinput-plugin-button-debounce.c, 这里先备份

cp src/libinput-plugin-button-debounce.c src/libinput-plugin-button-debounce.c.bak

修改插件初始化函数

sed -i '855,864c\void\nlibinput_debounce_plugin(struct libinput *libinput)\n{\n\t/* Button debounce disabled permanently - no CPS limit! */\n\treturn;\n}' src/libinput-plugin-button-debounce.c

编译

meson setup builddir -Ddocumentation=false -Dtests=false && cd builddir && meson compile

安装

sudo meson install

编译默认安装到 /usr/local/lib, 由于我是 Archlinux, 默认从 /usr/lib/ 加载, 所以我们把安装好的复制过去

备份原库

sudo cp /usr/lib/libinput.so.10.13.0 /usr/lib/libinput.so.10.13.0.backup

复制新库

sudo cp /usr/local/lib/libinput.so.10.13.0 /usr/lib/

执行完上一步后系统应该会直接重新加载不需要手动重启, 现在直接打开浏览器 CPS 测试网站或者在游戏中开启 CPS 显示验证即可

预防措施

防止系统更新覆盖修改好的 libinput, 这边手动将其添加到 pacman 的 IgnorePkg

sudo nano /etc/pacman.conf
IgnorePkg = libinput

参考

阅读全文

Daysmatter-终端交互式倒计时工具

2026/4/2

项目简介

本项目所有代码均为 AI 生成

daysmatter 是一款纯Python编写、基于curses的交互式终端倒计时工具,无需图形界面,即可在终端中优雅管理生日、纪念日、节日等重要日期。
工具自动计算倒计时/已过天数,支持年度重复事件、彩色高亮、可视化进度条、全屏展示模式,完美适配中文宽字符,数据本地存储无联网,轻量开箱即用。

核心特性

  • 交互式终端UI:基于curses实现图形化操作,上下键选择,操作极简
  • 全屏展示模式:支持常驻终端/桌面展示
  • 中文完美适配:自动计算宽字符宽度,无排版错乱
  • 本地安全存储:数据保存在本地JSON文件,无隐私泄露
  • 零第三方依赖:仅使用Python标准库,全平台兼容

界面预览

main
full

环境要求

  • Python 3.6 及以上版本
  • 系统自带 curses 库(Linux/macOS 原生支持)

快速使用

1. 获取代码

wget https://git.lumorian.org/Lumorian/daysmatter/raw/branch/main/daysmatter.py

2. 基础运行

python3 daysmatter.py

3. 全屏展示模式

适合终端常驻、桌面展示:

python3 daysmatter.py -F

快捷键说明

主界面

  • ↑ / ↓:选择事件
  • A:添加新事件
  • E:编辑选中事件
  • D:删除选中事件
  • F:切换到全屏展示模式
  • Q:退出程序

全屏展示模式

  • Q:返回主界面/退出

数据存储

所有事件数据本地存储,无任何网络请求:

  • 存储路径~/.config/daysmatter/events.json

支持平台

  • GNU/Linux(所有发行版)
  • macOS
阅读全文

您听说过 '天才少年' 吗? 这是一种迷惑的幻境

2026/2/21

有这样一种时兴的 “产物” – 天才少年, 再加上各种短视频平台的宣传, 贴上 “百万年薪” 标签. 这种混淆普通人对成功概念的理解的产物变得普遍流行并非偶然. 从这种混淆中得利的大公司推动了这种混淆, 最明了的方式就是完全拒绝这一 “产物”

这一 “产物” 本身具有一种不难察觉的偏见: 它暗示人们应认为低的薪资是可耻、失败的, 只有拥有百万年薪才能让人生过上幸福的生活, 才是成功. 由于这种转变正是那些大公司所求之不得的, 于是这种由 “天才少年” 这一产物所带来的偏见迎合了它们.

根据现在供职于XX市第二中学南校区的李教授的观点, 对 “天才少年” 这一产物的广泛使用变得流行是应当的. 从李教授多次演讲中我们可以提炼出以下论点: (1) 未达到百万年薪或以上的人, 未来的出路只有卖菜、搬砖等粗活累活; (2) 收税人大于纳税人, 纳税人低人一等; (3) 不愿成为 “天才少年” “百万年薪” 就是害怕、懒惰、不上进; (4) 认为想过普通生活是可笑的.

它是一种幻境. 人们之所以会误认为 “天才少年” 是一种合乎逻辑的分类, 原因仅仅在于这一产物的广泛使用对于人们理解何为美好生活时产生了误导.

例如, 您可能会看见这样的宣传: “华为百万年薪招聘天才少年”, “天才少年发明打破国外技术封锁”, 这些宣传不断暗示我们都应如此. 您也会见到这样的论断, “天才少年” 是为鼓励人们仍需努力, 为人们提供榜样向他们看齐. 但事实上只适用那些天生就是天才的人, 普通人听多了只会感到厌烦. 让我们回到小时候, 你的父母是否时常将一种叫 “邻家小孩” 的生物挂在嘴边, 将它与你进行对比, 当时你的内心是如何看待这些 “邻家小孩” 的呢?

不难发现, “天才少年” 与 “邻家小孩” 的本质其实是一致的. 唯一的区别在于 “邻家小孩” 可能是你 “独享” 的, 而 “天才少年” 则是大家 “共有” 的. 当长辈们在晚辈面前讨论 “天才少年”, “邻家小孩” 时, 他们通常想要真正表达的是他们在生活或工作中的不如意无处释放, 只能通过像 “天才少年” 这种能切中他们要害的产物丢向晚辈来为自己带来一丝微不足道的高潮快感和莫名奇妙的自豪感.

阅读全文

hexo-butterfly 实现全局本地音乐播放

2026/2/21

前言/废话

接了个给 hexo-butterfly 增加播放本地音乐的小单, 记录一下实现过程, 网上大多为添加第三方源或只是在单页面添加播放器

开始

  1. hexo 目录下安装 hexo-tag-aplayer
npm install --save hexo-tag-aplayer
  1. 准备本地音乐, 封面, 歌词, 放入 source 路径, 例如
path-to-your-blog/
└─ source/
   └─ music/
      ├─ song1.mp3
      ├─ song2.mp3
      ├─ song3.mp3
   └─ cover/
      ├─ song1.jpg
      ├─ song2.jpg
      ├─ song3.jpg
   └─ lrs/
      ├─ song1.lrs
      ├─ song2.lrs
      ├─ song3.lrs
  1. 添加全局播放器

配置主题的 additional-js.pug 文件 (不选择配置 _config.yml 里的 inject 是因为各种神秘版本神秘兼容已经把我搞晕)

nano themes/butterfly/layout/includes/additional-js.pug

最后一行添加

div(id="global-aplayer")
link(rel="stylesheet", href="https://cdn.bootcdn.net/ajax/libs/aplayer/1.10.1/APlayer.min.css")
script(src="https://cdn.bootcdn.net/ajax/libs/aplayer/1.10.1/APlayer.min.js")
script.
  window.onload = function() {
    if (typeof APlayer !== 'undefined') {
      const ap = new APlayer({ 
        container: document.getElementById('global-aplayer'), 
        fixed: true, 
        autoplay: false, 
        theme: '#F57C00', 
        loop: 'all', 
        volume: 0.7, 
        mutex: true, 
        listFolded: true, 
        listMaxHeight: 300, 
        lrcType: 1,  // 这里填 1 没用的可以试一下填 3
        preload: auto, 
        audio: [
          {
            name: "song1", 
            artist: "artist1", 
            url: "/music/song1.mp3", 
            cover: "/cover/song1.jpg", 
            lrc: "/lrs/song1.lrc"
          }, 
          {
            name: "song2", 
            artist: "artist2", 
            url: "/music/song2.mp3", 
            cover: "/cover/song2.jpg", 
            lrc: "/lrs/song2.lrc"
          }
          {
            name: "song3", 
            artist: "artist3", 
            url: "/music/song3.mp3", 
            cover: "/cover/song3.jpg", 
            lrc: "/lrs/song3.lrc"
          }
        ]
      });
      const apFixed = document.querySelector('.aplayer-fixed');
      if (apFixed) {
        apFixed.style.zIndex = '99999';
        apFixed.style.bottom = '20px';
        apFixed.style.right = '20px';
        apFixed.style.width = '360px';
      }
    }
  };
  1. 清理 inject 配置 (如果你先前参照了其他的一些教程, 则执行这一步)
nano ./_config.yml
# or
nano ./_config_butterfly.yml

找到 inject 部分, 清空先前的配置避免冲突

inject:
  head: 
  bottom: 
  1. 重新启动博客
hexo clean && npm run server

大功告成~~~~

阅读全文

通用餐饮代购协议

2026/2/19

第一版, 2022 年 9 月 16 日
版权所有 © 2022 Peaksol, Lumorian
任何人皆可复制和分发本协议的完整副本, 但不允许修改之.

引言

通用餐饮代购协议是一份适用于餐饮代购环节中代理商为最终消费者提供的服务的协议.
就多数代购行为而言, 最终消费者多对代理商进行利益上的剥削; 相反, 通用餐饮代购协议力图保障代理商与最终消费者的共同利益.
通过使用代理商所提供的餐饮代购服务, 最终消费者接受并同意受到通用餐饮代购协议第一版的约束. 从合同解释的角度来看, 最终消费者获得来自代理商的餐饮代购服务的使用权的对价是接受本协议的条款, 代理商授予最终消费者此权利的对价是可以通过提供其根据本协议提供的服务而获得利益.
以下是对代理商所供服务的使用的条款和条件细则.

条款与条件

0. 定义

a) “本协议” 指通用餐饮代购协议第一版.
b) “食品经营商” 指支持使用电话或短信订购其外卖餐饮的个人或团体.
c) “代理商” 指提供餐饮代购服务的个人.
d) “最终消费者” 指使用代理商所提供的服务的个人.
e) “订单” 指通过代理商在特定食品经验商处订购的单份餐饮. 订单创建者可以是最终消费者或代理商本人.
f) “取件” 过程指订单在从食品经营运输至订单创建者的全过程中, 除食品经营商运输过程以外的所有运输过程.

1. 服务综述

a) 只有最终消费者接受本协议,且代理商同意为最终消费者提供服务,最终消费者才可使用代理商提供的服务。
b) 代理商为最终消费者提供的服务包括本协议第 2 条和第 3 条所述的服务。
c) 最终消费者有权随时停止接受本协议,代理商亦有权随时停止在本协议下提供其服务。但此类停止不影响截至该类停止发生之时仍未结束的服务,除非最终消费者明确表明结束该服务。

2. 订单

a) 最终消费者可免费在代理商处创建订单,订单应指明食品经营商名称,联系方式和预订餐饮。同一服务时段内,最终消费者不得创建多份订单。
b) 同一服务时段内,在代理商将订单提交至食品经营商前,最终消费者有权修改订单内容或取消订单;代理商将订单提交至食品经营商后,最终消费者不得再修改订单内容或取消订单。
c) 代理商仅负责签订单提交至食品经营商,且不承担食品经营商提出的任何费用,包括但不限于餐饮费,运输费。食品经营商对订单提出的任何费用由最终消费者承担。

3. 取件

a) 同一服务时段内,在代理商向某一食品经营商提交指向该食品经营商的所有订单时,若:

  1. 只有 1 份订单指向该食品经营商,且该订单创建者为最终消费者,则最终消费者可选择自行完成该订单的取件过程,或选择使用代理商提供的有偿代取件服务 (如果可用) 以完成该订单的取件过程;
  2. 有多于 1 份订单指向该食品经营商,且该批订单的创建者中不包含代理商,则此类情况下的每位最终消费者可自行完成其订单的取件过程,或相互协商以共同完成其订单的取件过程,或选择使用代理商提供的有偿代取件服务 (如果可用) 以完成其订单的取件过程;
  3. 有多于 1 份订单指向该食品经营商,且该批订单的创建者中包含代理商,则代理商以及此类情况下的每位最终消费者可自行完成订单的取件过程,或相互协商以选定除代理商以外的指定个人或集体以完成其订单的取件过程,或选择使用代理商提供的免费代取件服务 (如果可用) 以完成其订单的取件过程,或选择使用代理商提供的有偿代取件服务 (如果可用) 以完成其订单的取件过程.

b) 代理商对 3a3 情况下的订单提供的免费代取件服务是可用的,如果:

  1. 该批订单中每一份订单的最终消费者都没有出现此情况: 该最终消费者为代理商在食品经营商处的订单进行代取件的次数明显小于代理商为该最终消费者在食品经营商处的订单进行代取件的次数; 且
  2. 同意免费协助代理商对该批订单进行代取件的人数不少于该批订单的总份数除以 5 所得的商在向上取整后减去 1 所得的值。

c) 代理商对 3a2 和 3a3 情况下的订单提供的有偿代取件服务是可用的,如果:

  1. 需求使服务的订单创建者提前与代理商进行协商,并在服务报酬上达成一致意见; 且
  2. 该批订单的总份数不大于 7 份。

d) 订单在代取件过程中出现的损失,须由为订单进行代取件的个人或集体进行承担。订单创建者可与为订单进行代取件的个人或集体就损失赔偿的具体事宜进行协商。

4. 免责声明与责任限制

a) 代理商不对食品经营商嗯餐饮提供任何种类的品质担保。若食品经营商提供的餐饮未达到最终消费者的预期品质,代理商不对此承担任何责任。
b) 代理商不对最终消费者因食用食品经营商的餐饮而遭受的任何直接或间接的伤害和损失承担任何责任,即使代理商受到明示或暗示应对此负责。
条款和条件至此结束

阅读全文

Arch+Niri 下游戏窗口无法正常渲染解决方案

2026/2/18

前言/废话

这天我在我的 Arch 上玩 Galgame 的时候发现游戏能正常启动 (有声音) 但窗口不显示的情况, 简单查询发现是 Niri 对 XWayland 存在兼容性问题, 导致窗口无法正常显示 / 渲染, 下面简单说一下如何修复

安装 gamescope 强制渲染

gamescope 是独立的 Wayland 合成器, 可以绕过 Niri 的 XWayland 兼容性问题

sudo pacman -Syyu
sudo pacman -S gamescope

给游戏启动命令添加启动选项

# 全屏, 自适应分辨率
gamescope -f -- <command>
# 指定分辨率 + 全屏
gamescope -w 1920 -h 1080 -f -- <command>

如果是 Steam 上的 Galgame 的话同样也是给游戏添加启动参数, 将上面的命令 <command> 替换成 %command% 填入即可

阅读全文

tailscale 在 GNU/Linux 中如何收发文件

2026/2/15

前言/废话 (可以不看, 与教学无关)

我第一次在 GNU/Linux 中使用 tailscale 的 taildrop 时发现怎么都找不到发送过来的文件, 一直以为只是藏在了某个隐蔽的路径下, 直到翻看了官方文档才知道原来 GNU/Linux 端不会自动保存, 需要用户手动设置保存路径 (气笑了)

收发文件

收文件

# 把接收文的目录设置为当前目录(. 表示当前)
sudo tailscale file get .

# 或保存到指定的某个目录
sudo tailscale file get ~/Downloads

发文件

tailscale file cp <files> <name-or-ip>:

补充一下 tailscale 的官方文档, 点击这里查看

阅读全文

自编译 chatlog

2026/2/11

环境 Golang,gcc

下载 MinGW-w64, 将压缩包解压, 注意路径不要含有中文或空格, 随后添加到系统环境变量 (重启终端)

#验证
gcc --version

下载 Golang

# 验证
go version

克隆 chatlog 源码 (此为二次开发版)

git clone https://github.com/teest114514/chatlog_alpha

开始编译

cd chatlog_alpha
# 为 Go 配置镜像加速 (临时生效)
$env:GOPROXY = "https://goproxy.cn,direct"
# 验证, 输出 https://goproxy.cn,direct 则说明成功
go env GOPROXY
# 开启 CGO
$env:CGO_ENABLED = 1
if (-not (Test-Path "bin")) { mkdir bin }; go build -o bin/chatlog.exe main.go

注意查看当前支持的微信版本, 截至到本文结束时, wx_key 支持全部 4.x 版本, 最高稳定支持 4.1.5.11 版本. 最新版能用但有点开盲盒的感觉所以个人还是推荐优先使用目前稳定支持的版本

阅读全文

我的 Arch + Niri 全安裝及配置

2025/10/14

ArchLinux 安裝

网络配置

首先检查网络连接状态, 查看网络连接, 如出现 ip 地址则说明连接

ip a

ping 一下网址看是否正常连接

ping baidu.com

连接 wifi

# 进入 wifi 连接模式
iwctl

# 连接你的 wifi, 回车后输入 wifi 密码后再次回车
station wlan0 connect <你的 wifi 名称>

# 退出
exit

同步时间

timedatectl set-ntp true

硬盘分区

列出详细的硬盘信息, 记住你的设备名称, 我这边是 /dev/nvme0n1

lsblk -pf

分区, 上下左右进选择
New -> Partition size: 1g -> Type -> EFI System
New -> Partition size: <你剩下的所有空间> -> Write -> Quite

cfdisk /dev/nvme0n1

再次列出详细的硬盘信息

lsblk -pf
# NAME             FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% # MOUNTPOINTS
# /dev/nvme0n1
# ├─/dev/nvme0n1p1 vfat   FAT32       EFF6-F931                             659.2M    #35% /boot
# └─/dev/nvme0n1p2 btrfs              14ea5817-05e1-4798-bdec-8f98f9cb0a5a  206.4G    #13% /home

格式化启动分区

mkfs.fat -F 32 /dev/nvme0n1p1

格式化 BTRFS 根目录

mkfs.btrfs /dev/nvme0n1p2

创建 BTRFS 分区子卷, 先挂载根分区, 再创建子卷

mount -t btrfs -o compress=zstd /dev/nvme01n1p2 /mnt && \
btrfs subvolume create /mnt/@ && \
btrfs subvolume create /mnt/@home && \
btrfs subvolume create /mnt/@swap

取消挂载

umount /mnt

正式挂载

mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p2 /mnt && \
mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p2 /mnt/home && \
mount --mkdir -t btrfs -o subvol=/@swap,compress=zstd /dev/nvme0n1p2 /mnt/swap && \
mount --mkdir /dev/nvme01np1 /mnt/boot

复查挂载 /mnt /mnt/home /mnt/swap /mnt/boot 存在即可

df -h

更新密钥

pacman -Sy archlinux-keyring

安装系统

pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs

安装必要软件, 若为 AMD 则将 intel-ucode 换为 amd-ucode

pacstrap /mnt networkmanager nano sudo intel-ucode

创建 swap 文件, 这边以 RedHat 官网文档为参考

系统中的 RAM 量 推荐的 swap 空间 如果允许休眠则推荐使用 swap 空间
⩽ 2 GB RAM 量的 2 倍 RAM 量的 3 倍
> 2 GB – 8 GB 与 RAM 量相等 RAM 量的 2 倍
> 8 GB – 64 GB 至少 4 GB RAM 量的 1.5 倍
> 64 GB 至少 4 GB 不推荐休眠

我的电脑内存为 16GB 但这边我不需要休眠所以只设置 8GB

btrfs filesystem mkswapfile --size 8g --uuid clear /mnt/swap/swapfile

启动 swap

swapon /mnt/swap/swapfile

生成 fstab

genfstab -U /mnt > /mnt/etc/fstab

进入系统

arch-chroot /mnt

设置主机名

nano /etc/hostname

设置时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

同步时间

hwclock --systohc

设置本地化

nano /etc/locale.gen
- #en_US.UTF-8 UTF-8
+ en_US.UTF-8 UTF-8
- #zh_CN.UTF-8 UTF-8
+ zh_CN.UTF-8 UTF-8

生成区域设置

locale-gen

编辑配置文件

nano /etc/locale.conf
+ LANG=en_US.UTF-8

设置 root 密码, 密码不会显示

passwd

安装引导程序

pacman -S grub efibootmgr os-prober

安装 grub

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=<你想要的任何名字>

编辑 grub, 若为 AMD 则将 iTCO_WDT 换为 sp5100_tco

nano /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quit"
+ GRUB_CMDLINE_LINUX_DEFAULT="loglevel=5 nowatchdog modprobe.blacklist=iTCO_WDT"
- #GRUB_DISABLE_OS_PROBER=false
+ GRUB_DISABLE_OS_PROBER=false

生成 grub 配置文件

grub-mkconfig -o /boot/grub/grub.cfg

退出 chroot

exit

重启

reboot

先联网

systemctl enable --now NetworkManager

无线网链接

nmcli dev wifi connect <你的 wifi 名称> password <你的 wifi 密码>

ping 一下确认网络已连接

ping baidu.com

Niri 安装和配置

先上成品图

创建新用户

基本安装和配置

创建新用户

sudo useradd -m -G wheel -s /bin/bash 你的用户名

设置密码

sudo passwd 你的用户名

修改 visudo 默认编辑器, 会用 vi/vim 可跳过这一步

sudo nano ~/.bashrc
VISUAL="nano" ; export VISUAL
EDITOR="$VISUAL" ; export EDITOR

配置 sudo 权限

source ~/.bashrc && sudo visudo
- # %wheel ALL=(ALL) ALL
+   %wheel ALL=(ALL) ALL

国内环境优先配置镜像源, 这边推荐 tuna

sudo echo -e "Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist

更新软件包缓存

sudo pacman -Syyu

安装必要的包, 根据自己需求做删减

sudo pacman -S --needed fuzzel mako niri xwayland-satellite base-devel git yazi fastfetch ffmpeg p7zip nano dms-shell noto-fonts-cjk wqy-microhei wqy-zenhei vlc vlc-plugins-all

安装 paru

git clone https://aur.archlinux.org/paru.git && cd paru && makepkg -si

部分耳熟能详的包名不会列在下面了

软件名 简述
fuzzel 应用程序启动器
mako 轻量级通知管理器
niri 平铺式窗口管理器
xwayland-satellite x11 应用的 Wayland 桥接工具
yazi 文件管理
fastfetch 系统信息获取工具
alacritty-graphics 现代终端模拟器
tlp 电源管理工具

先国际惯例 fastfech 一下

                  -`                     lumorian@Lumorian-Dell
                 .o+`                    ----------------------
                `ooo/                    OS: Arch Linux x86_64
               `+oooo:                   Host: G3 3500
              `+oooooo:                  Kernel: Linux 6.12.58-1-lts
              -+oooooo+:                 Uptime: 9 days, 11 hours, 27 mins
            `/:-:++oooo+:                Packages: 912 (pacman), 9 (flatpak)
           `/++++/+++++++:               Shell: bash 5.3.3
          `/++++++++++++++:              Display (AUOED8F): 1920x1080 in 15", 120 Hz [Built-in]
         `/+++ooooooooooooo/`            Terminal: /dev/pts/0
        ./ooosssso++osssssso+`           CPU: Intel(R) Core(TM) i5-10300H (8) @ 4.50 GHz
       .oossssso-````/ossssss+`          GPU 1: NVIDIA GeForce GTX 1650 Mobile / Max-Q [Discrete]
      -osssssso.      :ssssssso.         GPU 2: Intel UHD Graphics @ 1.05 GHz [Integrated]
     :osssssss/        osssso+++.        Memory: 6.02 GiB / 15.42 GiB (39%)
    /ossssssss/        +ssssooo/-        Swap: 0 B / 8.00 GiB (0%)
  `/ossssso+/:-        -:/+osssso+-      Disk (/): 51.18 GiB / 237.47 GiB (22%) - btrfs
 `+sso+:-`                 `.-/+oso:     Local IP (Mihomo): 198.18.0.1/30
`++:.                           `-/+/    Battery (DELL M4GWP06): 100% [AC Connected]
.`                                 `/    Locale: zh_CN.UTF-8

启用 niri 和 mako

systemctl --user add-wants niri.service mako.service

配置 dms

sudo nano ~/.config/niri/config.kdl

在无任何{}内写入

spawn-at-startup "dms" "run"

配置 nano

sudo nano /etc/nanorc
set autoindent
set tabsize 4
set tabstospaces
set linenumbers
set constantshow
set mouse
set softwrap

bind M-L linenumbers main

set titlecolor bold,white
set numbercolor cyan
set keycolor green
set functioncolor yellow
set statuscolor cyan

include "/usr/share/nano/*.nanorc"
include "/usr/share/nano/extra/*.nanorc"

配置 niri

nano ~/.config/niri/config.kdl

最顶部添加, 不要放进任何{}

prefer-no-csd
\\ 圆角配置段
window-rule {
    geometry-corner-radius 12
    clip-to-geometry true
}

安装和配置 alacritty

通过 aur 安装 alacritty-graphics, 不选择 alacritty 是因为 yazi 的预览图片功能在 alacritty 会有问题

paru -S alacritty-graphics
nano ~/.config/niri/config.kdl
window-rule {
  match app-id="Alacritty"
  draw-border-with-background false
  opacity 0.8
}

安装和配置 rime

sudo pacman -S fcitx5 fcitx5-rime

配置主题, 想自己搭配的也可以试试这个网站

paru -S fcitx5-skin-ori-git

默认简体中文 + 半角标点

touch ~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml && nano ~/.local/share/fcitx5/rime/luna_pinyin.custom.yaml
patch:
  switches:
    - name: simplification
      reset: 1
      states: [ 漢字, 汉字 ]
    - name: full_shape
      reset: 0
      states: [ 半角, 全角 ]
  punctuator:
    half_shape:
      "!": "!"
      "\"": "\""
      "#": "#"
      "$": "$"
      "%": "%"
      "&": "&"
      "'": "'"
      "(": "("
      ")": ")"
      "*": "*"
      "+": "+"
      ",": ","
      "-": "-"
      ".": "."
      "/": "/"
      ":": ":"
      ";": ";"
      "<": "<"
      "=": "="
      ">": ">"
      "?": "?"
      "@": "@"
      "[": "["
      "\\": "\\"
      "]": "]"
      "^": "^"
      "_": "_"
      "`": "`"
      "{": "{"
      "|": "|"
      "}": "}"
      "~": "~"
    full_shape:
      "!": "!"
      "\"": """
      "#": "#"
      "$": "$"
      "%": "%"
      "&": "&"
      "'": "'"
      "(": "("
      ")": ")"
      "*": "*"
      "+": "+"
      ",": ","
      "-": "-"
      ".": "。"
      "/": "/"
      ":": ":"
      ";": ";"
      "<": "<"
      "=": "="
      ">": ">"
      "?": "?"
      "@": "@"
      "[": "["
      "\\": "\"
      "]": "]"
      "^": "^"
      "_": "_"
      "`": "`"
      "{": "{"
      "|": "|"
      "}": "}"
      "~": "~"

使配置生效

方法 1: 通过 Fcitx5 界面

  1. 右键点击 Fcitx5 输入法图标
  2. 选择 重新部署Rime重新部署

方法 2:

rime_deployer --build ~/.local/share/fcitx5/rime ~/.local/share/fcitx5/rime/build

安装和配置 flameshot

sudo pacman -S flameshot
nano ~/.config/niri/config.kdl
\\ 设置 flameshot 快捷键 -c 参数是让你截取完后按下 enter 就能直接复制
binds {
  Alt+A { spawn "flameshot" "gui" "-c"; }
}

安装和配置 tlp, 笔记本专用

sudo pacman -S tlp
sudo nano /etc/tlp.d/00-template.conf 
START_CHARGE_THRESH_BAT0="70"
STOP_CHARGE_THRESH_BAT0="80"
\\ 如果你有第二块电池的话
START_CHARGE_THRESH_BAT1="70"
STOP_CHARGE_THRESH_BAT1="80"

安装配置 ly

sudo pacman -S ly
systemctl enable ly@tty2.service && systemctl disable getty@tty2.service

设置主题, 这边推荐我很喜欢的主题, 点击这里下载

sudo nano /etc/ly/config.ini
- animation = none
+ animation = dur_file
- dur_file_path = /etc/ly/example.dur
+ dur_file_path = /path/to/your/durl/file

安装配置 OBS

sudo pacman -S obs-studio

安装音视频固件

sudo pacman -S pavucontrol sof-firmware alsa-ucm-conf alsa-firmware

安装, 启动 Pipewire

sudo pacman -S pipewire wireplumber pipewire-pulse pipewire-alsa pipewire-jack
systemctl --user --now enable pipewire pipewire-pulse wireplumber
sudo nano ~/.config/niri/config.kdl

在无任何{}内写入

spawn-sh-at-startup "dbus-update-activation-enviroment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri & /usr/lib/xdg-desktop-portal-gnome"
阅读全文