Nixos 下go-fyne和flutter等ui开发环境的配置

nixos下 开发fyne 和 flutter linux 遇到一些小问题,主要是x11的问题。

用iflow+m2 跑了一会 解决方案如下(下文大部分注释是ai写的,注释部分仅供参考)

震楼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 多种开发语言都需要的开发工具 和 依赖项 以及完整的 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

{
  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交叉编译环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{
  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";

      };

    };
  };

}
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计