From 91b8e65a790931cd41c48793e4d2ed1a997b5519 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 19 May 2025 10:20:28 +0800 Subject: [PATCH] =?UTF-8?q?1=20=E5=B0=81=E8=A3=85nix-fhs=E4=BD=BF=E7=94=A8?= =?UTF-8?q?nix-ld=202=20=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90hylrland?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E7=9A=84=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=203=20=E5=90=AF=E7=94=A8flatpak?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/home/hyprland/default.nix | 3 +- modules/nixos/core/default.nix | 4 +- modules/nixos/core/nixfhs.nix | 142 +++++++++++++++++++++++++++ modules/nixos/core/nixld.nix | 129 ------------------------ modules/nixos/core/system.nix | 1 + modules/nixos/gnome.nix | 120 ++++++++++++++++++++-- profiles/apollo/home/ssh/default.nix | 2 +- profiles/apollo/nixos/default.nix | 5 +- profiles/gaea/home/ssh/default.nix | 2 +- profiles/gaea/nixos/default.nix | 1 - profiles/luna/default.nix | 1 - 11 files changed, 265 insertions(+), 145 deletions(-) create mode 100644 modules/nixos/core/nixfhs.nix delete mode 100644 modules/nixos/core/nixld.nix diff --git a/modules/home/hyprland/default.nix b/modules/home/hyprland/default.nix index 1df4c9f..c019edf 100644 --- a/modules/home/hyprland/default.nix +++ b/modules/home/hyprland/default.nix @@ -1,6 +1,5 @@ { config, libs, pkgs, ... }: let - conf = [ "hypr" "waybar" "rofi" "kitty" "mako" "wlogout" ]; confPath = "modules/home/hyprland/conf"; in { @@ -47,7 +46,7 @@ in source = config.home-libs.mkOutOfStoreSymlink "${confPath}/${name}"; }; }) - conf + (builtins.attrNames (builtins.readDir ./conf)) ); } diff --git a/modules/nixos/core/default.nix b/modules/nixos/core/default.nix index d202a49..f58749b 100644 --- a/modules/nixos/core/default.nix +++ b/modules/nixos/core/default.nix @@ -3,7 +3,8 @@ imports = [ ./boot.nix ./system.nix - ./nixld.nix + ./nixfhs.nix + ../user.nix ]; environment = { @@ -15,7 +16,6 @@ programs = { git.enable = true; - dconf.enable = true; }; # Configure firewall diff --git a/modules/nixos/core/nixfhs.nix b/modules/nixos/core/nixfhs.nix new file mode 100644 index 0000000..ebb60fd --- /dev/null +++ b/modules/nixos/core/nixfhs.nix @@ -0,0 +1,142 @@ +{ config, lib, pkgs, ... }: +let + conf = config.services.nix-fhs; + inherit (lib) mkOption mkEnableOption types; +in +{ + options.services.nix-fhs = with lib; { + enable = mkEnableOption "nix-fhs module"; + gui.enable = mkEnableOption "图形/GUI/多媒体/视频相关库"; + + # 在这里定义其他选项 + extraPackages = mkOption { + type = types.listOf types.package; + default = [ ]; + example = [ pkgs.gcc pkgs.gdb ]; + description = "额外的nix-ld库"; + }; + }; + + config = lib.mkIf conf.enable { + # NixOS 系统级配置 + programs.nix-ld = { + enable = true; + + # 这里可以添加其他nix-ld相关的配置 + libraries = with pkgs;[ + bzip2 # 高质量的数据压缩库 + cups # 通用Unix打印系统,提供打印功能 + curlWithGnuTls # 使用GnuTLS的URL传输库,用于网络请求 + dbus # 进程间通信系统,用于应用程序之间的通信 + dbus-glib # D-Bus的GLib绑定 + e2fsprogs # ext2/3/4文件系统工具 + expat # XML解析库 + fontconfig # 字体配置和自定义库 + freetype # 字体渲染引擎 + fribidi # Unicode双向文本算法实现 + fuse # 用户空间文件系统接口 + fuse3 # FUSE的第3版,用户空间文件系统接口 + gmp # GNU多精度算术库 + icu # 国际化组件,提供Unicode和全球化支持 + keyutils.lib # Linux密钥管理工具库 + libcap # POSIX能力库 + libgcrypt # GNU加密库 + libgpg-error # GnuPG错误报告库 + libidn # 国际化域名库 + libpng12 # PNG图像编解码库1.2版本 + libsamplerate # 音频采样率转换库 + libuuid # UUID生成和解析库 + libxcrypt-legacy # 旧版密码哈希库 + libxml2 # XML解析和生成库 + nspr # Netscape可移植运行时 + nss # 网络安全服务 + openssl # 安全套接字层库 + p11-kit # PKCS#11模块加载库 + pixman # 像素操作库 + python3 # Python编程语言解释器 + stdenv.cc.cc # 标准C编译器 + tbb # 英特尔线程构建块库 + udev # 设备管理器 + ] ++ + (lib.optionals conf.gui.enable [ + atk # 辅助技术工具包,提供辅助功能支持 + cairo # 2D图形渲染库,支持多种输出设备 + desktop-file-utils # 用于处理桌面条目文件的工具 + gdk-pixbuf # 图像加载库,GNOME的一部分 + glib # 通用工具库,提供数据结构处理、移植等功能 + gtk2 # 图形用户界面工具包第2版 + gtk3 # 图形用户界面工具包第3版 + harfbuzz # 文本整形引擎 + pango # 文本布局和渲染库 + alsa-lib # 高级Linux声音架构库,提供音频功能 + flac # 无损音频编解码器 + libcanberra # 声音主题规范的实现 + libjack2 # JACK音频连接套件第2版 + libmikmod # 模块音乐库 + libogg # Ogg多媒体容器格式库 + libvorbis # Vorbis音频编解码库 + speex # 语音压缩格式 + freeglut # OpenGL实用工具包,用于创建OpenGL上下文 + glew110 # OpenGL扩展加载库1.10版本 + gst_all_1.gst-plugins-base # GStreamer基础插件集 + gst_all_1.gst-plugins-ugly # GStreamer非自由插件集 + gst_all_1.gstreamer # 多媒体框架 + libGL # OpenGL库 + libGLU # OpenGL实用工具库 + librsvg # SVG渲染库 + libtheora # Theora视频编解码库 + libtiff # TIFF图像编解码库 + libvdpau # 视频解码和呈现API + libvpx # VP8/VP9视频编解码库 + mesa # 开源OpenGL实现 + vulkan-loader # Vulkan图形API加载器 + wayland # 显示服务器协议 + at-spi2-atk # 辅助技术服务提供者接口,连接ATK和AT-SPI + at-spi2-core # 辅助技术服务提供者接口核心组件 + libappindicator-gtk2 # 应用程序指示器库,用于系统托盘图标 + libcaca # 彩色ASCII艺术库 + libclang.lib # Clang编译器库 + libdbusmenu # D-Bus菜单库 + libjpeg # JPEG图像编解码库 + libudev0-shim # 旧版udev库兼容层 + libusb1 # USB设备访问库 + mesa # 开源OpenGL实现 + ]) ++ + (lib.optionals (lib.versionAtLeast config.system.stateVersion "25.05") [ + pkgs.libgbm # 通用缓冲区管理库,25.05之前包含在mesa中 + ]) ++ ( + if config.services.xserver.enable then + [ + xorg.libICE # X11 Inter-Client Exchange库 + xorg.libSM # X11会话管理库 + xorg.libX11 # X11客户端库 + xorg.libXScrnSaver # X11屏幕保护扩展库 + xorg.libXcomposite # X11合成扩展库 + xorg.libXcursor # X11光标管理库 + xorg.libXdamage # X11损坏扩展库 + xorg.libXext # X11通用扩展库 + xorg.libXfixes # X11修复扩展库 + xorg.libXft # X11 FreeType接口库 + xorg.libXi # X11输入扩展库 + xorg.libXinerama # X11多显示器扩展库 + xorg.libXmu # X11杂项实用工具库 + xorg.libXrandr # X11调整大小和旋转扩展库 + xorg.libXrender # X11渲染扩展库 + xorg.libXt # X11工具包内省库 + xorg.libXtst # X11测试扩展库 + xorg.libXxf86vm # X11 XFree86视频模式扩展库 + xorg.libpciaccess # X11 PCI访问库 + xorg.libxcb # X11 C绑定库 + xorg.xcbutil # XCB实用工具库 + xorg.xcbutilimage # XCB图像实用工具库 + xorg.xcbutilkeysyms # XCB键符号实用工具库 + xorg.xcbutilrenderutil # XCB渲染实用工具库 + xorg.xcbutilwm # XCB窗口管理实用工具库 + xorg.xkeyboardconfig # X11键盘配置数据库 + ] + else + [ ] + ) ++ conf.extraPackages; + }; + }; +} diff --git a/modules/nixos/core/nixld.nix b/modules/nixos/core/nixld.nix deleted file mode 100644 index 918fe3f..0000000 --- a/modules/nixos/core/nixld.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - programs = { - # Allow to run prebuild binary app - nix-ld = { - enable = true; - libraries = with pkgs; [ - SDL # 简单直接媒体层,用于图形、音频、输入等的跨平台库 - SDL2 # SDL的第二个主要版本,提供更多功能 - SDL2_image # SDL2的图像加载库,支持多种图像格式 - SDL2_mixer # SDL2的音频混合库,用于播放多种音频格式 - SDL2_ttf # SDL2的TrueType字体渲染库 - SDL_image # SDL1的图像加载库 - SDL_mixer # SDL1的音频混合库 - SDL_ttf # SDL1的TrueType字体渲染库 - alsa-lib # 高级Linux声音架构库,提供音频功能 - at-spi2-atk # 辅助技术服务提供者接口,连接ATK和AT-SPI - at-spi2-core # 辅助技术服务提供者接口核心组件 - atk # 辅助技术工具包,提供辅助功能支持 - bzip2 # 高质量的数据压缩库 - cairo # 2D图形渲染库,支持多种输出设备 - cups # 通用Unix打印系统,提供打印功能 - curlWithGnuTls # 使用GnuTLS的URL传输库,用于网络请求 - dbus # 进程间通信系统,用于应用程序之间的通信 - dbus-glib # D-Bus的GLib绑定 - desktop-file-utils # 用于处理桌面条目文件的工具 - e2fsprogs # ext2/3/4文件系统工具 - expat # XML解析库 - flac # 无损音频编解码器 - fontconfig # 字体配置和自定义库 - freeglut # OpenGL实用工具包,用于创建OpenGL上下文 - freetype # 字体渲染引擎 - fribidi # Unicode双向文本算法实现 - fuse # 用户空间文件系统接口 - fuse3 # FUSE的第3版,用户空间文件系统接口 - gdk-pixbuf # 图像加载库,GNOME的一部分 - glew110 # OpenGL扩展加载库1.10版本 - glib # 通用工具库,提供数据结构处理、移植等功能 - gmp # GNU多精度算术库 - gst_all_1.gst-plugins-base # GStreamer基础插件集 - gst_all_1.gst-plugins-ugly # GStreamer非自由插件集 - gst_all_1.gstreamer # 多媒体框架 - gtk2 # 图形用户界面工具包第2版 - gtk3 # 图形用户界面工具包第2版 - harfbuzz # 文本整形引擎 - icu # 国际化组件,提供Unicode和全球化支持 - keyutils.lib # Linux密钥管理工具库 - libGL # OpenGL库 - libGLU # OpenGL实用工具库 - libappindicator-gtk2 # 应用程序指示器库,用于系统托盘图标 - libcaca # 彩色ASCII艺术库 - libcanberra # 声音主题规范的实现 - libcap # POSIX能力库 - libclang.lib # Clang编译器库 - libdbusmenu # D-Bus菜单库 - libdrm # 直接渲染管理器库 - libgcrypt # GNU加密库 - libgpg-error # GnuPG错误报告库 - libidn # 国际化域名库 - libjack2 # JACK音频连接套件第2版 - libjpeg # JPEG图像编解码库 - libmikmod # 模块音乐库 - libogg # Ogg多媒体容器格式库 - libpng12 # PNG图像编解码库1.2版本 - librsvg # SVG渲染库 - libsamplerate # 音频采样率转换库 - libthai # 泰语支持库 - libtheora # Theora视频编解码库 - libtiff # TIFF图像编解码库 - libudev0-shim # 旧版udev库兼容层 - libusb1 # USB设备访问库 - libuuid # UUID生成和解析库 - libvdpau # 视频解码和呈现API - libvorbis # Vorbis音频编解码库 - libvpx # VP8/VP9视频编解码库 - libxcrypt-legacy # 旧版密码哈希库 - libxkbcommon # 键盘处理库 - libxml2 # XML解析和生成库 - mesa # 开源OpenGL实现 - nspr # Netscape可移植运行时 - nss # 网络安全服务 - openssl # 安全套接字层库 - p11-kit # PKCS#11模块加载库 - pango # 文本布局和渲染库 - pixman # 像素操作库 - python3 # Python编程语言解释器 - speex # 语音压缩格式 - stdenv.cc.cc # 标准C编译器 - tbb # 英特尔线程构建块库 - udev # 设备管理器 - vulkan-loader # Vulkan图形API加载器 - wayland # 显示服务器协议 - # xorg.libICE # X11 Inter-Client Exchange库 - # xorg.libSM # X11会话管理库 - # xorg.libX11 # X11客户端库 - # xorg.libXScrnSaver # X11屏幕保护扩展库 - # xorg.libXcomposite # X11合成扩展库 - # xorg.libXcursor # X11光标管理库 - # xorg.libXdamage # X11损坏扩展库 - # xorg.libXext # X11通用扩展库 - # xorg.libXfixes # X11修复扩展库 - # xorg.libXft # X11 FreeType接口库 - # xorg.libXi # X11输入扩展库 - # xorg.libXinerama # X11多显示器扩展库 - # xorg.libXmu # X11杂项实用工具库 - # xorg.libXrandr # X11调整大小和旋转扩展库 - # xorg.libXrender # X11渲染扩展库 - # xorg.libXt # X11工具包内省库 - # xorg.libXtst # X11测试扩展库 - # xorg.libXxf86vm # X11 XFree86视频模式扩展库 - # xorg.libpciaccess # X11 PCI访问库 - # xorg.libxcb # X11 C绑定库 - # xorg.xcbutil # XCB实用工具库 - # xorg.xcbutilimage # XCB图像实用工具库 - # xorg.xcbutilkeysyms # XCB键符号实用工具库 - # xorg.xcbutilrenderutil # XCB渲染实用工具库 - # xorg.xcbutilwm # XCB窗口管理实用工具库 - # xorg.xkeyboardconfig # X11键盘配置数据库 - xz # LZMA压缩工具 - zlib # 通用数据压缩库 - ] ++ ( - if lib.versionAtLeast config.system.stateVersion "25.05" then - [ pkgs.libgbm ] - else - [ ] - ); - }; - }; -} diff --git a/modules/nixos/core/system.nix b/modules/nixos/core/system.nix index edb751b..9af135c 100644 --- a/modules/nixos/core/system.nix +++ b/modules/nixos/core/system.nix @@ -10,6 +10,7 @@ printing.enable = true; acpid.enable = true; upower.enable = true; + nix-fhs.enable = true; openssh = { enable = true; diff --git a/modules/nixos/gnome.nix b/modules/nixos/gnome.nix index b338391..4279a22 100644 --- a/modules/nixos/gnome.nix +++ b/modules/nixos/gnome.nix @@ -1,5 +1,4 @@ -{ config, pkgs, ... }: -{ +{ config, pkgs, lib, username, ... }: { services.xserver = { enable = true; displayManager.gdm.enable = true; @@ -47,8 +46,117 @@ "GLFW_IM_MODULE" = "ibus"; }; }; + + programs = { + dconf = { + enable = true; + profiles = { + # TODO: Investigate customizing gdm greeter. + user.databases = [{ + settings = with lib.gvariant; { + + "org/gnome/desktop/interface" = { + clock-show-weekday = true; + cursor-size = mkUint32 16; + cursor-theme = "capitaine-cursors"; + enable-hot-corners = false; + icon-theme = "Papirus-Dark"; + locate-pointer = false; + monospace-font-name = "JetBrainsMono Nerd Font Mono 10"; + overlay-scrolling = true; + }; + + "org/gnome/mutter" = { + edge-tiling = true; + attach-modal-dialogs = true; + experimental-features = [ "scale-monitor-framebuffer" ]; + }; + + "org/gnome/shell" = { + last-selected-power-profile = "power-saver"; + }; + + "org/gnome/desktop/session" = { + idle-delay = mkUint32 900; + }; + + "org/gnome/settings-daemon/plugins/power" = { + power-button-action = "interactive"; + sleep-inactive-ac-timeout = mkUint32 7200; + sleep-inactive-ac-type = "nothing"; + }; + + "org/gtk/gtk4/settings/file-chooser" = { + sort-directories-first = true; + # show-hidden = true; + view-type = "list"; + }; + + "org/gnome/desktop/wm/keybindings" = { + minimize = mkEmptyArray type.string; + move-to-workspace-1 = [ "1" ]; + move-to-workspace-2 = [ "2" ]; + move-to-workspace-3 = [ "3" ]; + move-to-workspace-4 = [ "4" ]; + switch-to-workspace-1 = [ "1" ]; + switch-to-workspace-2 = [ "2" ]; + switch-to-workspace-3 = [ "3" ]; + switch-to-workspace-4 = [ "4" ]; + switch-to-workspace-left = [ "h" ]; + switch-to-workspace-right = [ "l" ]; + switch-windows = [ "Tab" ]; + switch-windows-backward = [ "Tab" ]; + switch-applications = [ "Tab" ]; + switch-applications-backward = [ "Tab" ]; + }; + + "org/gnome/shell/keybindings" = { + # Following binds are replaced by the ones above. + switch-to-application-1 = mkEmptyArray type.string; + switch-to-application-2 = mkEmptyArray type.string; + switch-to-application-3 = mkEmptyArray type.string; + switch-to-application-4 = mkEmptyArray type.string; + }; + + "org/gnome/shell" = { + enabled-extensions = [ + "appindicatorsupport@rgcjonas.gmail.com" + "dash-to-dock@micxgx.gmail.com" + "status-icons@gnome-shell-extensions.gcampax.github.com" + "system-monitor@gnome-shell-extensions.gcampax.github.com" + ]; + }; + + "org/gnome/shell/extensions/dash-to-panel" = { + apply-custom-theme = false; + background-opacity = 0.8; + click-action = "previews"; + custom-background-color = false; + custom-theme-shrink = true; + dash-max-icon-size = mkUint32 40; + dock-position = "BOTTOM"; + extend-height = false; + height-fraction = 0.9; + hot-keys = false; + icon-size-fixed = true; + isolate-monitors = true; + max-alpha = 0.8; + multi-monitor = true; + preview-size-scale = 0.0; + running-indicator-style = "DOTS"; + scroll-action = "cycle-windows"; + show-mounts = false; + show-mounts-only-mounted = true; + transparency-mode = "DYNAMIC"; + }; + "org/gnome/shell/extensions/system-monitor" = { + show-download = true; + show-swap = false; + show-upload = false; + }; + }; + }]; + }; + }; + }; } - - - - diff --git a/profiles/apollo/home/ssh/default.nix b/profiles/apollo/home/ssh/default.nix index 72bc605..9a42792 100644 --- a/profiles/apollo/home/ssh/default.nix +++ b/profiles/apollo/home/ssh/default.nix @@ -4,6 +4,6 @@ }; home.file.".ssh/config" = { - source = config.home-libs.mkOutOfStoreSymlink "profiles/apollo/hm/ssh/config"; + source = config.home-libs.mkOutOfStoreSymlink "profiles/apollo/home/ssh/config"; }; } diff --git a/profiles/apollo/nixos/default.nix b/profiles/apollo/nixos/default.nix index 5728950..b4674a1 100644 --- a/profiles/apollo/nixos/default.nix +++ b/profiles/apollo/nixos/default.nix @@ -1,4 +1,4 @@ -{ self, pkgs, username, version, ... }: { +{ self, pkgs, username, version, lib, config, ... }: { imports = [ ./mount.nix ./network.nix @@ -6,7 +6,6 @@ "${self}/modules/nixos/core" "${self}/modules/nixos/fonts" - "${self}/modules/nixos/user.nix" "${self}/modules/nixos/audio.nix" "${self}/modules/nixos/samba.nix" "${self}/modules/nixos/virtualize/appimage.nix" @@ -24,6 +23,8 @@ services = { gnome.gnome-keyring.enable = true; + nix-fhs.gui.enable = true; + flatpak.enable = true; }; security.pam.services.swaylock = { }; diff --git a/profiles/gaea/home/ssh/default.nix b/profiles/gaea/home/ssh/default.nix index 72bc605..4f2e80f 100644 --- a/profiles/gaea/home/ssh/default.nix +++ b/profiles/gaea/home/ssh/default.nix @@ -4,6 +4,6 @@ }; home.file.".ssh/config" = { - source = config.home-libs.mkOutOfStoreSymlink "profiles/apollo/hm/ssh/config"; + source = config.home-libs.mkOutOfStoreSymlink "profiles/gaea/home/ssh/config"; }; } diff --git a/profiles/gaea/nixos/default.nix b/profiles/gaea/nixos/default.nix index 2126707..952b369 100644 --- a/profiles/gaea/nixos/default.nix +++ b/profiles/gaea/nixos/default.nix @@ -6,7 +6,6 @@ "${self}/modules/nixos/core" "${self}/modules/nixos/fonts" - "${self}/modules/nixos/user.nix" "${self}/modules/nixos/audio.nix" "${self}/modules/nixos/nvidia.nix" "${self}/modules/nixos/samba.nix" diff --git a/profiles/luna/default.nix b/profiles/luna/default.nix index a6e86c5..f2b951a 100644 --- a/profiles/luna/default.nix +++ b/profiles/luna/default.nix @@ -22,7 +22,6 @@ let ./hardware-configuration.nix "${self}/modules/nixos/core" - "${self}/modules/nixos/user.nix" "${self}/modules/nixos/sysatomic.nix" home-manager.nixosModules.home-manager