Nixos 下go-fyne和flutter等ui开发环境的配置
nixos下 开发fyne 和 flutter linux 遇到一些小问题,主要是x11的问题。
用iflow+m2 跑了一会 解决方案如下(下文大部分注释是ai写的,注释部分仅供参考)
震楼
sh
[y@thinkbook] ~ fastfetch
▗▄▄▄ ▗▄▄▄▄ ▄▄▄▖ y@thinkbook
▜███▙ ▜███▙ ▟███▛ -----------
▜███▙ ▜███▙▟███▛ OS: NixOS 25.05 (Warbler) x86_64
▜███▙ ▜██████▛ Host: IDEAPAD
▟█████████████████▙ ▜████▛ ▟▙ Kernel: Linux 6.12.61
▟███████████████████▙ ▜███▙ ▟██▙ Uptime: 1 day, 5 hours, 37 mins
▄▄▄▄▖ ▜███▙ ▟███▛ Packages: 2453 (nix-system), 113 (nix-user), 24 (flatpak-user)
▟███▛ ▜██▛ ▟███▛ Shell: fish 4.0.8
▟███▛ ▜▛ ▟███▛ Display (AUOC391): 2880x1800 @ 90 Hz in 14 [Built-in]
▟███████████▛ ▟██████████▙ DE: GNOME 48.2
▜██████████▛ ▟███████████▛ WM: Mutter (Wayland)
▟███▛ ▟▙ ▟███▛ WM Theme: vimix-dark-laptop-beryl
▟███▛ ▟██▙ ▟███▛ Theme: vimix-dark-laptop-beryl [GTK2/3/4]
▟███▛ ▜███▙ ▝▀▀▀▀ Icons: Flat-Remix-Blue-Dark [GTK2/3/4]
▜██▛ ▜███▙ ▜██████████████████▛ Font: Adwaita Sans (11pt) [GTK2/3/4]
▜▛ ▟████▙ ▜████████████████▛ Cursor: Bibata-Modern-Ice (24px)
▟██████▙ ▜███▙ Terminal: .terminator-wra
▟███▛▜███▙ ▜███▙ CPU: AMD Eng Sample: 100-000000534-40_Y (16) @ 4.59 GHz
▟███▛ ▜███▙ ▜███▙ GPU: AMD Radeon 680M [Integrated]
▝▀▀▀ ▀▀▀▀▘ ▀▀▀▘ Memory: 10.98 GiB / 27.10 GiB (41%)
Swap: 3.46 GiB / 31.68 GiB (11%)
Disk (/): 106.81 GiB / 150.00 GiB (71%) - btrfs
Local IP (wlo1): 192.168.1.101/24
Battery (AP16L5J): 100% [AC Connected]
Locale: en_US.UTF-8
#lang-common.nix
nix
# 多种开发语言都需要的开发工具 和 依赖项 以及完整的 c/cpp环境
# 包含 flutter 以及 go-fyne 所需的库和环境变量
{
pkgs,
username,
...
}:
{
home-manager = {
users.${username} = {
home.packages = with pkgs; [
# ===== 通用压缩和打包工具 =====
upx # 多语言通用二进制压缩工具
# ===== C/C++ 基础工具 (来源: c_cpp.nix, flutter.nix, golang-base.nix, rust.nix) =====
gcc # C/C++编译器,多语言通用构建工具
gdb # GNU调试器,多语言通用调试工具
gnumake # GNU Make,构建工具,多语言通用
# ===== 构建系统工具 (来源: flutter.nix, rust.nix, c_cpp.nix) =====
cmake # 跨平台构建系统,C/C++/Rust/其他语言都使用
ninja # 高性能构建工具,多语言通用
# ===== 包配置和系统工具 (通用) =====
pkg-config # 包配置查询工具,多语言通用
perl # 脚本语言,多语言构建依赖
bc # 计算器,多语言构建依赖
lsof # 列出打开文件,系统诊断工具
tree # 目录树显示,通用工具
# ===== 代码质量和通用开发工具 (来源: flutter.nix) =====
gitlint # Git提交信息检查工具
jq # JSON处理工具,通用
ripgrep # 文本搜索工具,通用
# ===== 系统诊断工具 (来源: flutter.nix) =====
pciutils # PCI设备信息查询 (lspci)
usbutils # USB设备信息查询 (lsusb)
file
# ===== 网络和安全工具 (来源: rust.nix) =====
cfssl # CloudFlare的SSL证书工具
# ===== 其他通用工具 =====
#openssl_3 # SSL/TLS工具库,通用
#openssl_3.dev
openssl
openssl.dev
xorg.xinput # X11输入设备配置工具
litmus # Web兼容性测试工具
# ===== X11 和图形依赖 (来源: golang-fyne.nix, flutter.nix, webkit_gtk.nix) =====
# 用于GUI应用开发 (Fyne, Flutter Desktop, WebKit等)
mesa # OpenGL实现
libglvnd.dev # OpenGL vendoring库
xorg.libX11.dev # X11核心库
xorg.libXext.dev # X11扩展库
xorg.libXi.dev # X11输入扩展
xorg.libXrandr.dev # X11 RandR扩展 (显示器配置)
xorg.libXrender.dev # X11渲染扩展
xorg.libXcursor # X11光标主题
xorg.libXcursor.dev # X11光标开发文件
xorg.libXinerama # X11多显示器支持
xorg.libXinerama.dev # X11多显示器开发文件
xorg.libXfixes.dev # X11修复扩展
xorg.libXtst # X11测试扩展
xorg.libXxf86vm # X11 video mode扩展
libdrm # 直接渲染管理器
libxkbcommon # 键盘映射库
wayland # Wayland显示服务器
# ===== GTK3 和图形工具包 (来源: webkit_gtk.nix, flutter.nix) =====
atk # 可访问性工具包
cairo # 2D图形库
libepoxy # OpenGL函数加载器
gdk-pixbuf # 图像加载库
glib # GLib库
glibc # GNU C库
gtk3 # GTK3图形工具包
harfbuzz # 文本整形引擎
pango # 文本布局库
pcre # Perl兼容正则表达式库
];
home.sessionVariables = {
# X11 and graphics dependencies ------- for Fyne and flutter start
PKG_CONFIG_PATH = "${pkgs.libglvnd.dev}/lib/pkgconfig:${pkgs.mesa}/lib/pkgconfig:${pkgs.xorg.libX11.dev}/lib/pkgconfig:${pkgs.xorg.libXrandr.dev}/lib/pkgconfig:${pkgs.xorg.libXrender.dev}/lib/pkgconfig:${pkgs.xorg.libXcursor.dev}/lib/pkgconfig:${pkgs.xorg.libXinerama.dev}/lib/pkgconfig:${pkgs.xorg.libXi.dev}/lib/pkgconfig:${pkgs.xorg.libXext.dev}/lib/pkgconfig:${pkgs.xorg.libXfixes.dev}/lib/pkgconfig:${pkgs.xorg.xorgproto}/lib/pkgconfig";
CGO_CFLAGS = "-I${pkgs.xorg.xorgproto}/include -I${pkgs.xorg.libX11.dev}/include -I${pkgs.xorg.libXrandr.dev}/include -I${pkgs.xorg.libXrender.dev}/include -I${pkgs.xorg.libXcursor.dev}/include -I${pkgs.xorg.libXinerama.dev}/include -I${pkgs.xorg.libXi.dev}/include -I${pkgs.xorg.libXext.dev}/include -I${pkgs.xorg.libXfixes.dev}/include -I${pkgs.libglvnd.dev}/include";
CGO_LDFLAGS = "-L${pkgs.libglvnd.dev}/lib -L${pkgs.xorg.libX11}/lib -L${pkgs.xorg.libXrandr}/lib -L${pkgs.xorg.libXxf86vm}/lib -L${pkgs.xorg.libXi}/lib -L${pkgs.xorg.libXcursor}/lib -L${pkgs.xorg.libXinerama}/lib";
# X11 and graphics dependencies ------- for Fyne and flutter end
};
};
};
}
#golang and fyne
nix
{
pkgs,
username,
...
}:
{
home-manager = {
users.${username} = {
home.packages = with pkgs; [
go
gopls
golangci-lint
fyne # 依赖 lang-common.nix 内的和图形相关的依赖和环境变量
gofumpt
# X11 和图形依赖已移动到 lang-common.nix
];
home.sessionVariables = {
GOPROXY = "https://goproxy.cn,direct";
};
home.sessionPath = [
"/home/y/go/bin"
];
};
};
}
/*
fyne xorg.libXinerama
cd /home/y/myworkspace/os-joyanhui/modules/lang-sdk-lsp/go-fyne-tteesstt && export PKG_CONFIG_PATH="/nix/store/12j7aq1hy5k61dhsr4gyp85agir17zwy-libglvnd-1.7.0-dev/lib/pkgconfig" && export CGO_CFLAGS="-I/nix/store/dfg6nawjdqqrb4cm0lasgzw08wrrkvkq-libX11-1.8.12-dev/include -I/nix/store/w0qf0w82rcrqr4yr94nfs59fizcgdad1-xorgproto-2024.1/include -I/nix/store/w7m0s9s00fz310zcpxa0bzjlp5n41sh4-libXrandr-1.5.4-dev/include -I/nix/store/sl53x6gj351x02sn1j0lpfnplss556nx-libXrender-0.9.12-dev/include -I/nix/store/j1l4szg41hn6pbadg6nfl4z9khscvvfh-libXcursor-1.2.3-dev/include -I/nix/store/zx81x2nvyqpmhm4ffnjcpdzg77fwl8sr-libXinerama-1.1.5-dev/include -I/nix/store/a3f4fw0kckr8ybqraavx92sp8f9fa5f1-libXi-1.8.2-dev/include -I/nix/store/r6pb1wzzhnsabbhbzgyvz4kvl0rglwzw-libXext-1.3.6-dev/include -I/nix/store/1pfkkl0jy70rpcw6i0h1l8c8c3l7r9rk-libXfixes-6.0.1-dev/include -I/nix/store/12j7aq1hy5k61dhsr4gyp85agir17zwy-libglvnd-1.7.0-dev/include" && export CGO_LDFLAGS="-L/nix/store/12j7aq1hy5k61dhsr4gyp85agir17zwy-libglvnd-1.7.0-dev/lib -L/nix/store/ayswhp8g569mhb0gbgxrvqw53hsq59mz-libX11-1.8.12/lib -L/nix/store/gvg4ibdx82jfy1alrh21pki3waxnfd88-libXrandr-1.5.4/lib -L/nix/store/zxjlbsz531dpk5j41w37pqd9ywpwmhl4-libXxf86vm-1.1.6/lib -L/nix/store/phpmbvcjd7sppnbfg07g5v9xyjna9nbi-libXi-1.8.2/lib -L/nix/store/hkn7b9rdqky4m43mhk3pg1ind85yf8fv-libXcursor-1.2.3/lib -L/nix/store/ksm28wdl5q73lrdmlvhvsr297lafcaj5-libXinerama-1.1.5/lib" && go build main.go
*/
#flutter
nix
{
pkgs,
username,
...
}:
{
environment.systemPackages = with pkgs; [
gcc
clang_19 # 这个版本需要和flutter 对应
cmake
];
home-manager = {
users.${username} = {
home.packages = with pkgs; [
#flutter327
flutter332
# unstable.flutter # 3.29.2-sdk-links 2025 04 04
jdk17
android-tools # adb fastboot ...
# gcc, cmake, ninja, gitlint, jq, ripgrep, pciutils, usbutils, atk, cairo, libepoxy, gdk-pixbuf, glib, glibc, gtk3, harfbuzz, pango, pcre, pkg-config, xorg.libX11, xorg.libX11.dev 已移动到 lang-common.nix
# development tools ========
];
home.sessionVariables = {
D_LIBRARY_PATH =
with pkgs;
lib.makeLibraryPath [
atk
cairo
libepoxy
gdk-pixbuf
glib
gtk3
harfbuzz
pango
];
#CHROME_EXECUTABLE = "${pkgs.chromium}/bin/chromium";
# flatpak info org.chromium.Chromium
#CHROME_EXECUTABLE = "/home/${username}/.local/share/flatpak/app/org.chromium.Chromium/current/active/files/bin/chromium";
CHROME_EXECUTABLE = "${pkgs.brave}/bin/brave";
ANDROID_HOME = "/home/${username}/android_flutter/android-sdk";
ANDROID_SDK_ROOT = "/home/${username}/android_flutter/android-sdk";
# MY_ANDROID_STUDIO_DIR = "${pkgs.android-studio}";
MY_ANDROID_STUDIO_DIR = "/home/${username}/.local/share/JetBrains/Toolbox/apps/android-studio";
JAVA_HOME = "${pkgs.jdk17}";
# Fix an issue with Flutter using an older version of aapt2, which does not know
# an used parameter.
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=/home/${username}/android_flutter/android-sdk/build-tools/34.0.0/aapt2";
#GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_SDK_ROOT/build-tools/34.0.0/aapt2";
# 手动执行 flutter config --android-studio-dir $MY_ANDROID_STUDIO_DIR
# flutter doctor --verbose
# echo $ANDROID_HOME && echo $ANDROID_SDK_ROOT
# flutter doctor --android-licenses
# $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list_installed
PUB_HOSTED_URL = "https://pub.flutter-io.cn";
FLUTTER_STORAGE_BASE_URL = "https://storage.flutter-io.cn";
CXX = "${pkgs.clang_19}/bin/clang++";
};
};
};
#programs.adb.enable = true;
}
#附带 rust交叉编译环境
nix
{
pkgs,
username,
...
}:
{
home-manager = {
users.${username} = {
home.packages = with pkgs; [
rustup
rustc
# gcc, cfssl, pkg-config, ninja, upx, cmake, gnumake, perl, bc, lsof, tree 已移动到 lang-common.nix
# ===== 交叉编译工具链 (Rust特有) =====
# aarch64 (ARM64) 交叉编译工具链 - GNU
pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc
pkgs.pkgsCross.aarch64-multiplatform.buildPackages.binutils
# ARM 交叉编译器 (已移除,避免与 gdb 冲突)
# gcc-arm-embedded # ARM Cortex-M/R
# 移除有冲突的包(glibc, musl),只保留编译器和工具
# pkgs.pkgsCross.aarch64-multiplatform.buildPackages.stdenv.cc # 包含 glibc 会冲突
# pkgs.pkgsCross.aarch64-multiplatform.buildPackages.glibc # 会冲突
# pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.stdenv.cc # 包含 musl 会冲突
# pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.musl # 会冲突
pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.gcc
pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.binutils
pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.openssl
# 其他常用交叉编译目标
# pkgs.pkgsCross.armv7l-hf-multiplatform.buildPackages.stdenv.cc # ARMv7
# pkgs.pkgsCross.riscv64.buildPackages.stdenv.cc # RISC-V 64
# pkgs.pkgsCross.mingwW64.buildPackages.stdenv.cc # Windows
];
home.sessionVariables = {
RUSTUP_HOME = "$HOME/.rustup";
CARGO_HOME = "$HOME/.cargo";
RUSTUP_DIST_SERVER = "https://rsproxy.cn";
RUSTUP_UPDATE_ROOT = "https://rsproxy.cn/rustup";
# 注释掉全局 OpenSSL 变量,让 cargo 自动检测不同架构的库
# OPENSSL_DIR = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.openssl_3.dev}";
# OPENSSL_LIB_DIR = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.openssl_3.out}/lib";
# OPENSSL_INCLUDE_DIR = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.openssl_3.dev}/include";
# PKG_CONFIG_PATH = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.openssl_3.dev}/lib/pkgconfig";
# sqlx 用的
# DATABASE_URL = "postgresql://shiyuxin:[email protected]:5432/shiyuxinDB";
# 建议在项目中启用 vendored OpenSSL 来避免交叉编译问题
# 在 Cargo.toml 中添加:
# [dependencies]
# openssl = { version = "3.0", features = ["vendored"] }
# 交叉编译环境变量
# aarch64 交叉编译配置 (GNU libc)
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER = "${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-gcc";
CC_aarch64_unknown_linux_gnu = "${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-gcc";
CXX_aarch64_unknown_linux_gnu = "${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-g++";
AR_aarch64_unknown_linux_gnu = "${pkgs.pkgsCross.aarch64-multiplatform.buildPackages.gcc}/bin/aarch64-unknown-linux-gnu-ar";
# aarch64 musl 交叉编译配置
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.gcc}/bin/aarch64-unknown-linux-musl-gcc";
CC_aarch64_unknown_linux_musl = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.gcc}/bin/aarch64-unknown-linux-musl-gcc";
CXX_aarch64_unknown_linux_musl = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.gcc}/bin/aarch64-unknown-linux-musl-g++";
AR_aarch64_unknown_linux_musl = "${pkgs.pkgsCross.aarch64-multiplatform-musl.buildPackages.gcc}/bin/aarch64-unknown-linux-musl-ar";
# 其他目标平台配置示例(取消注释以启用)
# CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER = "${pkgs.pkgsCross.armv7l-hf-multiplatform.buildPackages.gcc}/bin/arm-unknown-linux-gnueabihf-gcc";
# CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER = "${pkgs.pkgsCross.mingwW64.buildPackages.gcc}/bin/x86_64-w64-mingw32-gcc";
};
};
};
}