整理 NixOS 配置:面向 i7-12700F + RTX 4060 的模块化桌面配置
从当前 /etc/nixos 拆出 common/plasma/中文/应用/打印模块,新增 NVIDIA 独显支持,并去掉原机硬件 UUID。
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
# nixpkgs 里的 QQ 官方链接已 404,改用 GitHub 镜像
|
||||
qq-fixed = pkgs.qq.overrideAttrs (old: {
|
||||
version = "3.2.28-2026-04-29";
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://github.com/libzonda/Linux-QQ-release/releases/download/3.2.28/QQ_3.2.28_260429_amd64_01.deb";
|
||||
hash = "sha256-aOeddKzcDFpw76jqHYtkELUaIZBoQ3dNOC8y4OOh8Nc=";
|
||||
};
|
||||
});
|
||||
|
||||
# nixpkgs 走 archive.org 易失败,改用腾讯官方 AppImage
|
||||
wechat-fixed = pkgs.callPackage "${pkgs.path}/pkgs/by-name/we/wechat/linux.nix" {
|
||||
pname = "wechat";
|
||||
version = "4.1.1";
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
|
||||
hash = "sha256-RX26ArkbAxzdRBLu4HT7v/udnQax5Q/Bgi00hw4RSZA=";
|
||||
};
|
||||
meta = pkgs.wechat.meta;
|
||||
};
|
||||
|
||||
# 微信/QQ 在 Wayland 下原生 IME 不稳定,强制 X11 + fcitx IM 模块
|
||||
fcitxGtkPath = "${pkgs.fcitx5-gtk}/lib/gtk-3.0";
|
||||
fcitxQt5Path = "${pkgs.libsForQt5.fcitx5-qt}/lib/qt-5.15/plugins";
|
||||
fcitxQt6Path = "${pkgs.kdePackages.fcitx5-qt}/lib/qt-6/plugins";
|
||||
|
||||
wechat-ime = pkgs.writeShellScriptBin "wechat" ''
|
||||
export GTK_IM_MODULE=fcitx
|
||||
export QT_IM_MODULE=fcitx
|
||||
export SDL_IM_MODULE=fcitx
|
||||
export XMODIFIERS=@im=fcitx
|
||||
export QT_QPA_PLATFORM=xcb
|
||||
export GTK_PATH="${fcitxGtkPath}''${GTK_PATH:+:$GTK_PATH}"
|
||||
export QT_PLUGIN_PATH="${fcitxQt5Path}:${fcitxQt6Path}''${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}"
|
||||
exec ${wechat-fixed}/bin/wechat "$@"
|
||||
'';
|
||||
|
||||
qq-ime = pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "qq-ime";
|
||||
version = qq-fixed.version;
|
||||
dontUnpack = true;
|
||||
nativeBuildInputs = [
|
||||
pkgs.makeWrapper
|
||||
pkgs.copyDesktopItems
|
||||
];
|
||||
desktopItems = [
|
||||
(pkgs.makeDesktopItem {
|
||||
name = "qq";
|
||||
desktopName = "QQ";
|
||||
genericName = "QQ";
|
||||
comment = "Tencent QQ";
|
||||
exec = "qq %U";
|
||||
icon = "qq";
|
||||
categories = [
|
||||
"Network"
|
||||
"InstantMessaging"
|
||||
];
|
||||
startupWMClass = "QQ";
|
||||
terminal = false;
|
||||
})
|
||||
];
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share
|
||||
makeWrapper ${qq-fixed}/bin/qq $out/bin/qq \
|
||||
--set GTK_IM_MODULE fcitx \
|
||||
--set QT_IM_MODULE fcitx \
|
||||
--set SDL_IM_MODULE fcitx \
|
||||
--set XMODIFIERS @im=fcitx \
|
||||
--prefix GTK_PATH : ${fcitxGtkPath} \
|
||||
--unset NIXOS_OZONE_WL \
|
||||
--add-flags "--ozone-platform=x11"
|
||||
if [ -d ${qq-fixed}/share/icons ]; then
|
||||
cp -a ${qq-fixed}/share/icons $out/share/
|
||||
fi
|
||||
runHook postInstall
|
||||
'';
|
||||
meta = qq-fixed.meta;
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
wget
|
||||
curl
|
||||
google-chrome
|
||||
|
||||
wechat-ime
|
||||
qq-ime
|
||||
wpsoffice-cn
|
||||
|
||||
git
|
||||
gcc
|
||||
gnumake
|
||||
binutils
|
||||
gdb
|
||||
cmake
|
||||
pkg-config
|
||||
autoconf
|
||||
automake
|
||||
libtool
|
||||
ninja
|
||||
meson
|
||||
clang
|
||||
clang-tools
|
||||
lld
|
||||
lldb
|
||||
ccache
|
||||
bear
|
||||
valgrind
|
||||
cppcheck
|
||||
|
||||
python3
|
||||
python3Packages.pip
|
||||
openssl
|
||||
zlib
|
||||
file
|
||||
unzip
|
||||
zip
|
||||
which
|
||||
tree
|
||||
htop
|
||||
ripgrep
|
||||
fd
|
||||
|
||||
smartmontools
|
||||
lm_sensors
|
||||
pciutils
|
||||
usbutils
|
||||
lshw
|
||||
bluez
|
||||
|
||||
vulkan-tools
|
||||
libva-utils
|
||||
mesa-demos
|
||||
|
||||
ffmpeg
|
||||
jq
|
||||
bat
|
||||
eza
|
||||
fzf
|
||||
btop
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
i18n.inputMethod = {
|
||||
enable = true;
|
||||
type = "fcitx5";
|
||||
fcitx5 = {
|
||||
waylandFrontend = true;
|
||||
addons = with pkgs; [
|
||||
kdePackages.fcitx5-chinese-addons
|
||||
fcitx5-rime
|
||||
fcitx5-table-extra
|
||||
fcitx5-table-other
|
||||
fcitx5-lua
|
||||
fcitx5-pinyin-zhwiki
|
||||
fcitx5-gtk
|
||||
kdePackages.fcitx5-qt
|
||||
kdePackages.fcitx5-configtool
|
||||
fcitx5-material-color
|
||||
fcitx5-nord
|
||||
catppuccin-fcitx5
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
fonts.fontconfig.defaultFonts = {
|
||||
serif = [
|
||||
"Noto Serif CJK SC"
|
||||
"Source Han Serif SC"
|
||||
"Noto Serif"
|
||||
];
|
||||
sansSerif = [
|
||||
"Noto Sans CJK SC"
|
||||
"Source Han Sans SC"
|
||||
"Noto Sans"
|
||||
];
|
||||
monospace = [
|
||||
"Noto Sans Mono CJK SC"
|
||||
"Source Han Mono SC"
|
||||
"Noto Sans Mono"
|
||||
"Hack"
|
||||
];
|
||||
};
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
arphic-uming
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-cjk-serif
|
||||
noto-fonts-color-emoji
|
||||
source-han-sans
|
||||
source-han-serif
|
||||
source-han-mono
|
||||
wqy_zenhei
|
||||
wqy_microhei
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.systemd-boot.configurationLimit = 10;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
time.timeZone = "Asia/Shanghai";
|
||||
|
||||
i18n.defaultLocale = "zh_CN.UTF-8";
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "zh_CN.UTF-8";
|
||||
LC_IDENTIFICATION = "zh_CN.UTF-8";
|
||||
LC_MEASUREMENT = "zh_CN.UTF-8";
|
||||
LC_MONETARY = "zh_CN.UTF-8";
|
||||
LC_NAME = "zh_CN.UTF-8";
|
||||
LC_NUMERIC = "zh_CN.UTF-8";
|
||||
LC_PAPER = "zh_CN.UTF-8";
|
||||
LC_TELEPHONE = "zh_CN.UTF-8";
|
||||
LC_TIME = "zh_CN.UTF-8";
|
||||
};
|
||||
|
||||
# 蓝牙
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.powerOnBoot = true;
|
||||
services.blueman.enable = true;
|
||||
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
users.users.whc = {
|
||||
isNormalUser = true;
|
||||
description = "whc";
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"video"
|
||||
"audio"
|
||||
];
|
||||
};
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
nix.settings = {
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
auto-optimise-store = true;
|
||||
};
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
programs.git.enable = true;
|
||||
|
||||
# Clash Verge Rev
|
||||
programs.clash-verge = {
|
||||
enable = true;
|
||||
package = pkgs.clash-verge-rev;
|
||||
autoStart = true;
|
||||
serviceMode = true;
|
||||
tunMode = true;
|
||||
group = "wheel";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.xserver.enable = true;
|
||||
services.displayManager.sddm.enable = true;
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
|
||||
services.xserver.xkb = {
|
||||
layout = "cn";
|
||||
variant = "";
|
||||
};
|
||||
|
||||
users.users.whc.packages = with pkgs; [
|
||||
kdePackages.kate
|
||||
code-cursor
|
||||
vlc
|
||||
kdePackages.kdenlive
|
||||
gimp
|
||||
kdePackages.kdevelop
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true;
|
||||
};
|
||||
|
||||
# Steam / 游戏需要的 32 位图形库(nvidia.nix 已开 graphics.enable32Bit)
|
||||
hardware.graphics.enable = true;
|
||||
hardware.graphics.enable32Bit = true;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# i7-12700F 无核显,RTX 4060 独显直出
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true;
|
||||
# 桌面机一般关 finegrained;需要休眠再开 powerManagement.enable
|
||||
powerManagement.enable = false;
|
||||
powerManagement.finegrained = false;
|
||||
# Ada (40 系) 推荐开源内核模块;若黑屏可改 open = false
|
||||
open = true;
|
||||
nvidiaSettings = true;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
|
||||
# Wayland + NVIDIA
|
||||
boot.kernelParams = [ "nvidia_drm.fbdev=1" ];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
nvtopPackages.nvidia
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
hp-uld = pkgs.callPackage ../pkgs/hp-uld-driver.nix { };
|
||||
cjkSans = "${pkgs.noto-fonts-cjk-sans}/share/fonts/opentype/noto-cjk/NotoSansCJK-VF.otf.ttc";
|
||||
gsLib = pkgs.runCommand "gs-cjk-lib" { } ''
|
||||
mkdir -p $out
|
||||
cat > $out/cidfmap <<CID
|
||||
% Ghostscript CJK CID map for missing embedded fonts in PDF/PS
|
||||
/Adobe-GB1 << /FileType /TrueType /Path (${cjkSans}) /SubfontID 0 /CSI ([Adobe-GB1] 0) >> ;
|
||||
/Adobe-CNS1 << /FileType /TrueType /Path (${cjkSans}) /SubfontID 1 /CSI ([Adobe-CNS1] 0) >> ;
|
||||
CID
|
||||
'';
|
||||
in
|
||||
{
|
||||
services.printing.enable = true;
|
||||
# HP Laser MFP 13x 需官方 ULD(rastertospl)
|
||||
services.printing.drivers = [ hp-uld ];
|
||||
|
||||
fonts.packages = with pkgs; [ arphic-uming ];
|
||||
|
||||
fonts.fontconfig.localConf = ''
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
|
||||
<fontconfig>
|
||||
<alias binding="same">
|
||||
<family>ARPLUmingCN</family>
|
||||
<prefer>
|
||||
<family>AR PL UMing CN</family>
|
||||
<family>Noto Serif CJK SC</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
<alias binding="same">
|
||||
<family>NotoSansMonoCJKSC</family>
|
||||
<prefer>
|
||||
<family>Noto Sans Mono CJK SC</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
</fontconfig>
|
||||
'';
|
||||
|
||||
systemd.services.cups.serviceConfig.Environment = [
|
||||
"FONTCONFIG_FILE=/etc/fonts/fonts.conf"
|
||||
"FONTCONFIG_PATH=/etc/fonts"
|
||||
"GS_LIB=${gsLib}"
|
||||
];
|
||||
|
||||
services.printing.extraFilesConf = ''
|
||||
SetEnv GS_LIB ${gsLib}
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user