Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

由于一些软件是商业软件或特殊限制, 需要从手动或从系统中安装.

按键绑定

标记:

  • 无: ❌
  • 禁用: 🚫
  • 未配置: ◻️
  • 已配置: ✅

NOTE: 由于GNOME不是平铺, 某些按键绑定不能完全一致.

系统

功能GnomeGnome(调整)StatusHyprlandStatus
打开快速设置菜单Super + S🚫
关机🚫◻️◻️
还原键盘快捷键Super + Esc◻️◻️
聚焦到活动通知Super + N◻️◻️
锁定屏幕Super + LSuper + LSuper + L
显示概览🚫 (Super)Super(系统级)
Super + A
Super + A✅ (hyprshell)
显示全部应用Super + A🚫
显示通知列表Super + V🚫
显示运行命令提示符Alt + F2◻️◻️
重启🚫Super + Alt + MSuper + Alt + M
注销/退出桌面Ctrl + Alt + DeleteCtrl + Alt + DeleteCtrl + Alt + Delete

声音和媒体

功能GnomeGnome(调整)StatusHyprlandStatus
播放(或播放/暂停)🚫◻️◻️
减小音量🚫◻️◻️
麦克风静音/取消静音🚫◻️◻️
启动媒体播放器🚫◻️◻️
上一曲目🚫◻️◻️
弹出🚫◻️◻️
停止播放🚫◻️◻️
下一曲目🚫◻️◻️
音量静音/取消静音🚫◻️◻️
暂停播放🚫◻️◻️
增大音量🚫◻️◻️

截图

功能GnomeGnome(调整)StatusHyprlandStatus
对窗口进行截图Alt + PrtScAlt + PrtScAlt + Print
交互式截图PrtScPrtScPrint
交互式录屏Alt + Shift + Tab◻️◻️
截图Shift + PrtScShift + PrtScShift + Print
交互式截图+标注Super + PrtScSuper + Print

打字

功能GnomeGnome(调整)StatusHyprlandStatus
切换至上一个输入源Super + Shift + 空格◻️◻️
切换至下一个输入源Super + 空格◻️◻️

启动器

功能GnomeGnome(调整)StatusHyprlandStatus
启动帮助浏览器Super + F1◻️◻️
启动计算器🚫Super + CSuper + C
启动网页浏览器🚫Super + BSuper + B
启动邮件客户端🚫◻️◻️
设置🚫◻️◻️
搜索🚫◻️◻️
主目录(启动文件管理器)🚫Super + ESuper + E
启动终端Super + TSuper + T
启动应用启动器Super + slashSuper + slash
启动提取颜色◻️Super + Alt + C

工作区和窗口

导航

功能GnomeGnome(调整)StatusHyprlandStatus
将窗口上移一个显示器Super + Shift + Up◻️
将窗口下移一个显示器Super + Shift + Down◻️
将窗口左移一个显示器Super + Shift + Left◻️
将窗口右移一个显示器Super + Shift + Right◻️
将窗口移至工作区1Super + Shift + HomeSuper + Shift + 1
Super + Shift + Home
Super + Shift + 1
Super + Shift + Home
将窗口移至工作区2🚫Super + Shift + 2Super + Shift + 2
将窗口移至工作区3🚫Super + Shift + 3Super + Shift + 3
将窗口移至工作区4🚫Super + Shift + 4Super + Shift + 4
将窗口移至工作区5Super + Shift + 5
将窗口移至工作区6Super + Shift + 6
将窗口移至工作区7Super + Shift + 7
将窗口移至工作区8Super + Shift + 8
将窗口移至工作区9Super + Shift + 9
将窗口移至最后一个工作区Super + Shift + EndSuper + Shift + EndSuper + Shift + End
将窗口左移一个工作区Super + Shift + PgUpSuper + Shift + PriorSuper + Shift + Prior
将窗口右移一个工作区Super + Shift + PgDownSuper + Shift + NextSuper + Shift + Next
切换窗口🚫Super + TabSuper + Tab
切换到工作区1Super + HomeSuper + 1
Super + Home
Super + 1
Super + Home
切换到工作区2🚫Super + 2Super + 2
切换到工作区3🚫Super + 3Super + 3
切换到工作区4🚫Super + 4Super + 4
切换到工作区5Super + 5
切换到工作区6Super + 6
切换到工作区7Super + 7
切换到工作区8Super + 8
切换到工作区9Super + 9
切换到最后一个工作区Super + EndSuper + EndSuper + End
切换到左侧工作区Super + PgUpSuper + PriorSuper + Prior
切换到右侧工作区Super + PgDownSuper + NextSuper + Next
切换系统控制Ctrl + Alt + Tab◻️◻️
切换应用程序Super + TabAlt + TabAlt + Tab✅ (hyprshell)
隐藏所有窗口🚫◻️◻️
在应用程序窗口间直接移动集点Alt + F6◻️◻️
在应用程序的窗口之间切换窗口Super + `◻️◻️
直接切换窗口Alt + Esc◻️◻️
直接切换系统控制Ctrl + Alt + Esc◻️◻️

窗口

功能GnomeGnome(调整)StatusHyprlandStatus
垂直最大化窗口🚫◻️◻️
分屏到右侧Super + Right🚫✅(tilingshell覆盖)◻️
分屏到左侧Super + Left🚫✅(tilingshell覆盖)◻️
改变窗口大小Alt + F8◻️◻️
关闭窗口Alt + F4Super + QSuper + Q
恢复窗口Super + Down◻️◻️
激活窗口菜单Alt + 空格◻️◻️
将窗口降低到其它窗口之下🚫◻️◻️
将窗口提升到其它窗口之上🚫◻️◻️
切换全屏模式🚫Super + FSuper + F
切换最大化状态Alt + F10Super + MSuper + 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(鼠标右键)

布局

功能GnomeGnome(调整)StatusHyprlandStatus
切换到上一个窗口Super + bracketleftSuper + bracketleft
切换到下一个窗口Super + bracketrightSuper + 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

终端

按键绑定