Introduction
基于home-manager的用户级配置管理, ansible 管理系统包和github应用. 开发环境使用mise进行管理, 本仓库不涉及开发环境的管理.
使用指南
前置条件:
NOTE:
home-manager通过nix flakes方式管理用户级配置.ansible管理系统包和github应用- 其它商业或特殊软件使用手动安装Manual Install.
1. 关闭SELINUX
永久关闭 - 需重启
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
临时关闭 - 无需重启, 但重后会失效
sudo setenforce 0
2. 安装nix
- Install Nix
- 添加channel,
nix-channel --add https://nixos.org/channels/nixos-unstable nixpkgs - 更新channel,
nix-channel --update - 添加相关help文档,
nix-env -i nix.
3. 安装home-manager
Install home-manager via nix flakes
home manager 切换
# username: thinkgos, system: ubuntu25_10
home-manager switch --flake .#thinkgo-laptop
# username: cors, system: ubuntu25_10
home-manager switch --flake .#cors-ubuntu25_10
# username: thinkgos, system: ubuntu25_10
home-manager switch --flake .#thinkgo-ubuntu25_10
# username: thinkgo, system: fedora-43
home-manager switch --flake .#thinkgo-fedora43
4. 设置默认shell为zsh
# 设置默认shell为zsh
sudo chsh -s ~/.nix-profile/bin/zsh $USER
5. 安装软件
ansible playbook 标签:
system: 安装系统包github: 安装github应用
ansible-playbook site.yml -u <username> --tags system,github -K
系统
扩大 swap
# 查看当前swap配置
swapon --show
# 关闭swap
sudo swapoff /swap.img # 这里的路径 swapon --show 的结果修改
# 删除旧的swap文件
sudo rm /swap.img
# 快速预留32G
sudo fallocate -l 32G /swap.img
# 只有root用户可读写
sudo chmod 600 /swap.img
# 格式化为swap格式
sudo mkswap /swap.img
# 启用swap
sudo swapon /swap.img
# 挂久化配置
# vim /etc/fstab
Manual Install
由于一些软件是商业软件或特殊限制, 需要从手动或从系统中安装.
chrome浏览器virtualbox虚拟机wireshark网络分析工具vnc-viewerVNC客户端gnome-browser-connectorGNOME浏览器连接器vscodevscode代码编辑器claude-codecode agent
按键绑定
标记:
- 无: ❌
- 禁用: 🚫
- 未配置: ◻️
- 已配置: ✅
NOTE: 由于GNOME不是平铺, 某些按键绑定不能完全一致.
系统
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 打开快速设置菜单 | Super + S | 🚫 | ✅ | ❌ | ❌ |
| 关机 | 🚫 | ◻️ | ◻️ | ||
| 还原键盘快捷键 | Super + Esc | ◻️ | ◻️ | ||
| 聚焦到活动通知 | Super + N | ◻️ | ◻️ | ||
| 锁定屏幕 | Super + L | Super + L | ✅ | Super + L | ✅ |
| 显示概览 | 🚫 (Super) | Super(系统级)Super + A | ✅ | Super + A | ✅ (hyprshell) |
| 显示全部应用 | Super + A | 🚫 | ✅ | ❌ | ❌ |
| 显示通知列表 | Super + V | 🚫 | ✅ | ❌ | ❌ |
| 显示运行命令提示符 | Alt + F2 | ◻️ | ◻️ | ||
| 重启 | 🚫 | Super + Alt + M | ✅ | Super + Alt + M | ✅ |
| 注销/退出桌面 | Ctrl + Alt + Delete | Ctrl + Alt + Delete | ✅ | Ctrl + Alt + Delete | ✅ |
声音和媒体
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 播放(或播放/暂停) | 🚫 | ◻️ | ◻️ | ||
| 减小音量 | 🚫 | ◻️ | ◻️ | ||
| 麦克风静音/取消静音 | 🚫 | ◻️ | ◻️ | ||
| 启动媒体播放器 | 🚫 | ◻️ | ◻️ | ||
| 上一曲目 | 🚫 | ◻️ | ◻️ | ||
| 弹出 | 🚫 | ◻️ | ◻️ | ||
| 停止播放 | 🚫 | ◻️ | ◻️ | ||
| 下一曲目 | 🚫 | ◻️ | ◻️ | ||
| 音量静音/取消静音 | 🚫 | ◻️ | ◻️ | ||
| 暂停播放 | 🚫 | ◻️ | ◻️ | ||
| 增大音量 | 🚫 | ◻️ | ◻️ |
截图
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 对窗口进行截图 | Alt + PrtSc | Alt + PrtSc | ✅ | Alt + Print | ✅ |
| 交互式截图 | PrtSc | PrtSc | ✅ | Print | ✅ |
| 交互式录屏 | Alt + Shift + Tab | ◻️ | ◻️ | ||
| 截图 | Shift + PrtSc | Shift + PrtSc | ✅ | Shift + Print | ✅ |
| 交互式截图+标注 | ❌ | Super + PrtSc | ✅ | Super + Print | ✅ |
打字
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 切换至上一个输入源 | Super + Shift + 空格 | ◻️ | ◻️ | ||
| 切换至下一个输入源 | Super + 空格 | ◻️ | ◻️ |
启动器
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 启动帮助浏览器 | Super + F1 | ◻️ | ◻️ | ||
| 启动计算器 | 🚫 | Super + C | ✅ | Super + C | ✅ |
| 启动网页浏览器 | 🚫 | Super + B | ✅ | Super + B | ✅ |
| 启动邮件客户端 | 🚫 | ◻️ | ◻️ | ||
| 设置 | 🚫 | ◻️ | ◻️ | ||
| 搜索 | 🚫 | ◻️ | ◻️ | ||
| 主目录(启动文件管理器) | 🚫 | Super + E | ✅ | Super + E | ✅ |
| 启动终端 | ❌ | Super + T | ✅ | Super + T | ✅ |
| 启动应用启动器 | ❌ | Super + slash | ✅ | Super + slash | ✅ |
| 启动提取颜色 | ❌ | ◻️ | Super + Alt + C | ✅ |
工作区和窗口
导航
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 将窗口上移一个显示器 | Super + Shift + Up | ❌ | ✅ | ◻️ | |
| 将窗口下移一个显示器 | Super + Shift + Down | ❌ | ✅ | ◻️ | |
| 将窗口左移一个显示器 | Super + Shift + Left | ❌ | ✅ | ◻️ | |
| 将窗口右移一个显示器 | Super + Shift + Right | ❌ | ✅ | ◻️ | |
| 将窗口移至工作区1 | Super + Shift + Home | Super + Shift + 1Super + Shift + Home | ✅ | Super + Shift + 1Super + Shift + Home | ✅ |
| 将窗口移至工作区2 | 🚫 | Super + Shift + 2 | ✅ | Super + Shift + 2 | ✅ |
| 将窗口移至工作区3 | 🚫 | Super + Shift + 3 | ✅ | Super + Shift + 3 | ✅ |
| 将窗口移至工作区4 | 🚫 | Super + Shift + 4 | ✅ | Super + Shift + 4 | ✅ |
| 将窗口移至工作区5 | ❌ | ❌ | ❌ | Super + Shift + 5 | ✅ |
| 将窗口移至工作区6 | ❌ | ❌ | ❌ | Super + Shift + 6 | ✅ |
| 将窗口移至工作区7 | ❌ | ❌ | ❌ | Super + Shift + 7 | ✅ |
| 将窗口移至工作区8 | ❌ | ❌ | ❌ | Super + Shift + 8 | ✅ |
| 将窗口移至工作区9 | ❌ | ❌ | ❌ | Super + Shift + 9 | ✅ |
| 将窗口移至最后一个工作区 | Super + Shift + End | Super + Shift + End | ✅ | Super + Shift + End | ✅ |
| 将窗口左移一个工作区 | Super + Shift + PgUp | Super + Shift + Prior | ✅ | Super + Shift + Prior | ✅ |
| 将窗口右移一个工作区 | Super + Shift + PgDown | Super + Shift + Next | ✅ | Super + Shift + Next | ✅ |
| 切换窗口 | 🚫 | Super + Tab | ✅ | Super + Tab | ✅ |
| 切换到工作区1 | Super + Home | Super + 1Super + Home | ✅ | Super + 1Super + Home | ✅ |
| 切换到工作区2 | 🚫 | Super + 2 | ✅ | Super + 2 | ✅ |
| 切换到工作区3 | 🚫 | Super + 3 | ✅ | Super + 3 | ✅ |
| 切换到工作区4 | 🚫 | Super + 4 | ✅ | Super + 4 | ✅ |
| 切换到工作区5 | ❌ | ❌ | ❌ | Super + 5 | ✅ |
| 切换到工作区6 | ❌ | ❌ | ❌ | Super + 6 | ✅ |
| 切换到工作区7 | ❌ | ❌ | ❌ | Super + 7 | ✅ |
| 切换到工作区8 | ❌ | ❌ | ❌ | Super + 8 | ✅ |
| 切换到工作区9 | ❌ | ❌ | ❌ | Super + 9 | ✅ |
| 切换到最后一个工作区 | Super + End | Super + End | ✅ | Super + End | ✅ |
| 切换到左侧工作区 | Super + PgUp | Super + Prior | ✅ | Super + Prior | ✅ |
| 切换到右侧工作区 | Super + PgDown | Super + Next | ✅ | Super + Next | ✅ |
| 切换系统控制 | Ctrl + Alt + Tab | ◻️ | ◻️ | ||
| 切换应用程序 | Super + Tab | Alt + Tab | ✅ | Alt + Tab | ✅ (hyprshell) |
| 隐藏所有窗口 | 🚫 | ◻️ | ◻️ | ||
| 在应用程序窗口间直接移动集点 | Alt + F6 | ◻️ | ◻️ | ||
| 在应用程序的窗口之间切换窗口 | Super + ` | ◻️ | ◻️ | ||
| 直接切换窗口 | Alt + Esc | ◻️ | ◻️ | ||
| 直接切换系统控制 | Ctrl + Alt + Esc | ◻️ | ◻️ |
窗口
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 垂直最大化窗口 | 🚫 | ◻️ | ◻️ | ||
| 分屏到右侧 | Super + Right | 🚫 | ✅(tilingshell覆盖) | ❌ | ◻️ |
| 分屏到左侧 | Super + Left | 🚫 | ✅(tilingshell覆盖) | ❌ | ◻️ |
| 改变窗口大小 | Alt + F8 | ◻️ | ◻️ | ||
| 关闭窗口 | Alt + F4 | Super + Q | ✅ | Super + Q | ✅ |
| 恢复窗口 | Super + Down | ◻️ | ◻️ | ||
| 激活窗口菜单 | Alt + 空格 | ◻️ | ◻️ | ||
| 将窗口降低到其它窗口之下 | 🚫 | ◻️ | ◻️ | ||
| 将窗口提升到其它窗口之上 | 🚫 | ◻️ | ◻️ | ||
| 切换全屏模式 | 🚫 | Super + F | ✅ | Super + F | ✅ |
| 切换最大化状态 | Alt + F10 | Super + M | ✅ | Super + M | ✅ |
| 如果窗口被其他窗口遮盖,则提升它,否则降低它 | 🚫 | ◻️ | ◻️ | ||
| 水平最大化窗口 | 🚫 | ◻️ | ◻️ | ||
| 移动窗口 | Alt + F7 | ◻️ | ◻️ | ||
| 隐藏窗口 | Super + H | ◻️ | ◻️ | ||
| 在位于所有或仅一个工作区的窗口间切换 | 🚫 | ◻️ | |||
| 最大化窗口 | Super + Up | ❌ | ✅(tilingshell覆盖) | ❌ | ✅ |
| 取消最大化窗口 | ❌ | ❌ | ✅(tilingshell覆盖) | ❌ | ✅ |
| 切换浮动窗口 | ❌ | ❌ | ❌ | Super + V | ✅ |
| 移动聚焦到左边 | ❌ | Super + Left | ✅(tilingshell) | Super + Left | ✅ |
| 移动聚焦到右边 | ❌ | Super + Right | ✅(tilingshell) | Super + Right | ✅ |
| 移动聚焦到上边 | ❌ | Super + Up | ✅(tilingshell) | Super + Up | ✅ |
| 移动聚焦到下边 | ❌ | Super + Down | ✅(tilingshell) | Super + Down | ✅ |
| 移动活跃窗口到左边 | ❌ | Super + Shift + Left | ✅(tilingshell) | Super + Shift + Left | ✅ |
| 移动活跃窗口到右边 | ❌ | Super + Shift + Right | ✅(tilingshell) | Super + Shift + Right | ✅ |
| 移动活跃窗口到上边 | ❌ | Super + Shift + Up | ✅(tilingshell) | Super + Shift + Up | ✅ |
| 移动活跃窗口到下边 | ❌ | Super + Shift + Down | ✅(tilingshell) | Super + Shift + Down | ✅ |
| 拖拽窗口 | ❌ | Super + mouse:272(鼠标左键) | ✅ | Super + mouse:272(鼠标左键) | ✅ |
| 缩放窗口 | ❌ | ◻️ | Super + mouse:273(鼠标右键) | ✅ |
布局
| 功能 | Gnome | Gnome(调整) | Status | Hyprland | Status |
|---|---|---|---|---|---|
| 切换到上一个窗口 | ❌ | Super + bracketleft | ✅ | Super + bracketleft | ✅ |
| 切换到下一个窗口 | ❌ | Super + bracketright | ✅ | Super + bracketright | ✅ |
Issue
1. 桌面端启动器找不到相关程序
XDG_DATA_DIRS 没有Nix对应路径
systemctl --user show-environment | grep XDG_DATA_DIRS
home-manager添加以下配置暂时解决
xdg.enable = true;
targets.genericLinux = {
enable = true;
gpu.enable = true;
};
2. 桌面端启动器只有一部份显示
在1解决后, 仍有部份不显示, 主要是找不到二进制程序, 原因是PATH没有包含Nix对应路径.
systemctl --user show-environment | grep PATH
3. 禁用用户级IBus
systemctl --user mask org.freedesktop.IBus.session.GNOME.service
4. code出现sandbox权限问题
放开AppArmor权限
echo "kernel.apparmor_restrict_unprivileged_userns=0" | sudo tee /etc/sysctl.d/60-apparmor-namespace.conf
5. 用户目录名称改成英文
LANG=C xdg-user-dirs-gtk-update
6. 远程桌面在无显示器时无法使用
gsettings set org.gnome.desktop.remote-desktop.rdp screen-share-mode 'extend'
NOTE: 远程桌面在无显示器时无法使用, 需要在图形界面先进行登陆.(核心原因, 缺少图形会话)
Hyprland
1. 安装sddm启动hyprland出现白色面板
主要是sddm是有引入kde相关的依赖, 如xdg-desktop-portal-kde, xwaylandvideobridge.
# 查看系统级的自动启动项
ls /etc/xdg/autostart | grep videobridge
# 查看用户级的自动启动项
ls ~/.config/autostart | grep videobridge
# 查看是否作为 systemd 用户服务运行
systemctl --user list-unit-files | grep videobridge
# 完全清除 kde和xwaylandvideobridge
sudo apt purge xdg-desktop-portal-kde xwaylandvideobridge
hyprlock锁屏后无法登陆
权限和共享库问题, Hyprlock 没有权限通过 PAM 验证你的密码.
see issues 7027
# 找不到pam的相关库, 软链接过去
sudo ln -s /usr/lib/x86_64-linux-gnu/security /usr/lib/security
# 配置hyprlock的pam配置.
sudo bash -c 'cat > /etc/pam.d/hyprlock << EOF
#%PAM-1.0
auth required pam_unix.so
@include common-account
@include common-session
EOF'
home-manager 配置:
programs.hyprlock = {
enable = true;
package = pkgs.hyprlock.overrideAttrs (oldAttrs: {
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ pkgs.patchelf ];
postFixup = ''
file="$out/bin/hyprlock"
patchelf --replace-needed libpam.so.0 /usr/lib/x86_64-linux-gnu/libpam.so.0 "$file"
patchelf --add-needed /usr/lib/x86_64-linux-gnu/libaudit.so.1 "$file"
patchelf --add-needed /usr/lib/x86_64-linux-gnu/libcap-ng.so.0 "$file"
patchelf --add-needed /usr/lib/x86_64-linux-gnu/libcrypt.so.1 "$file"
patchelf --add-needed /usr/lib/x86_64-linux-gnu/libpam_misc.so.0 "$file"
patchelf --add-needed /usr/lib/x86_64-linux-gnu/libcap.so.2 "$file"
'';
});
# ...你的配置
};
问题排查:
# 查看日志
sudo tail -f /var/log/auth.log
# 锁屏会话
loginctl lock-session
# 解锁会话
pkill -USR1 hyprlock