Home Manager 24.11 版本发布说明swayidle 行为变更与 eza 图标选项弃用解析【免费下载链接】home-managerManage a user environment using Nix [maintainerkhaneliman, rycee]项目地址: https://gitcode.com/GitHub_Trending/ho/home-managerHome Manager 的 24.11 版本Release 24.11于 2024 年 11 月进入稳定分支。本篇文章以 rl-2411.md 发布说明为骨架逐条拆解本版本的两项主要变更services.swayidle模块-w参数的默认行为迁移以及programs.eza.icons布尔值写法的弃用并结合仓库源码与测试用例讲解升级时的迁移路径。阅读完成后你可以准确评估自己的home.nix配置是否受这两项变更影响并完成对应的平滑升级。版本概况24.11 稳定分支根据 rl-2411.md 的说明24.11 分支在 2024 年 11 月成为稳定版本。当前仓库的 release.json 显示项目已演进至 26.11 版本线release: 26.11isReleaseBranch为false因此本发布说明记录的是历史版本线中的重要行为变化对从旧版本升级的用户仍有直接的配置迁移价值。本版本的变更集中在两个方面services.swayidle.extraArgs默认值调整原先 swayidle 总是被强制追加-w参数现在该参数改为extraArgs的默认值使其变为可选的。programs.eza.icons布尔值弃用该选项支持true/false布尔写法被标记为弃用未来的替代值分别是auto与null。同时本版本的 State Version 部分明确指出该版本没有引入任何状态版本变更There was no state version change in this release这意味着 24.11 不会因为默认数据格式或文件位置的变化而破坏既有状态数据。变更一swayidle 的-w参数迁移到extraArgs默认值变更内容在 24.11 之前的版本中Home Manager 的 swayidle 服务模块在生成 systemd 用户服务时总是向swayidle命令注入-w标志。-w的含义是让 swayidle 在运行超时命令时等待该命令完成后再继续计时--wait这在锁屏、休眠等场景下对行为有实际影响。24.11 起这个标志被移出硬编码逻辑改为services.swayidle.extraArgs选项的默认值从而允许用户按需移除或替换它。源码实现依据在 swayidle.nix 中可以看到该选项的定义extraArgs mkOption { type with types; listOf str; default [ -w ]; description Extra arguments to pass to swayidle.; };extraArgs的类型是字符串列表默认值为[ -w ]。该参数随后在 systemd 用户服务的ExecStart中被拼接到实际命令行中见 swayidle.nixargs cfg.extraArgs (lib.concatMap mkTimeout cfg.timeouts) (lib.flatten (lib.mapAttrsToList mkEvent nonemptyEvents)); in ${lib.getExe cfg.package} ${lib.escapeShellArgs args};即最终执行的命令结构为swayidle extraArgs timeout 秒数 命令 [resume 命令] ... 事件名 命令 ...其中timeout块由cfg.timeouts展开每个条目可含timeout、command、可选的resumeCommand事件块由cfg.events展开如before-sleep、after-resume、lock、unlock参见 swayidle.nix。受影响场景与迁移方式发布说明明确提示了破坏性风险如果你已经自行设置了services.swayidle.extraArgs且依赖系统自动追加-w升级到 24.11 后配置会失效。原因是一旦你显式赋值extraArgs它就会整体覆盖默认值[ -w ]。正确的迁移做法是把-w显式加入你自己的extraArgs赋值中例如services.swayidle { enable true; extraArgs [ -w ]; # 显式保留原默认行为 timeouts [ { timeout 60; command ${pkgs.swaylock}/bin/swaylock -fF; } { timeout 90; command ${pkgs.systemd}/bin/systemctl suspend; } ]; events { before-sleep ${pkgs.swaylock}/bin/swaylock -fF; }; };如果原先的extraArgs里恰好已经包含-w则无需任何改动如果你希望 swayidle 不等待命令执行完毕也可以借此机会将extraArgs设为[ ]或去掉-w获得更接近原生 swayidle 的行为。此外该模块还顺带提供了一个兼容性迁移模块把旧的services.swayidle.systemdTarget单值自动迁移为新的services.swayidle.systemdTargets列表见 swayidle.nix升级时同样值得留意。测试覆盖仓库在 tests/modules/services/swayidle/ 下维护了两组测试仅 Linux 平台生效见 default.nixbasic-configuration.nix验证新的、按事件名组织events属性集的推荐写法legacy-configuration.nix验证旧的、以列表形式传events的写法仍然可用触发一条弃用警告见 swayidle.nix。社区通知条目记录在 2024-09-20_07-48-08.nix升级后首次home-manager switch时会在 News 中看到与发布说明一致的提示。变更二programs.eza.icons布尔值写法弃用变更内容programs.eza.icons选项原先可以接受布尔值true/false来控制是否在文件名旁显示图标。24.11 起这种布尔写法被标记为弃用未来将移除旧写法programs.eza.icons true;对应的新写法是programs.eza.icons auto;旧写法programs.eza.icons false;对应的新写法是programs.eza.icons null;auto表示仅在终端支持时自动显示图标对应 eza 的--iconsautonull表示不传递任何--icons参数从而完全关闭图标。源码实现依据在 eza.nix 中icons选项的取值集合已经扩展为icons mkOption { type types.enum [ null true false auto always never ]; default null; description Display icons next to file names ({option}--icons argument). Note, the support for Boolean values is deprecated. Setting this option to true corresponds to --iconsauto. ; };即null、true、false、auto、always、never六种取值当前均可通过类型检查但布尔值已被官方标注为 deprecated。对应的实际命令行转换逻辑位于 eza.nixiconsOption let v if lib.isBool cfg.icons then (if cfg.icons then auto else null) else cfg.icons; in lib.optionals (v ! null) [ --icons v ];从源码可见即使你现在仍写布尔值底层也会把true映射为--icons auto、把false映射为不传参——这保证了行为上的平滑过渡但与此同时模块会在求值时发出弃用警告见 eza.nixwarnings lib.optional (lib.isBool cfg.icons) Setting programs.eza.icons to a Boolean is deprecated. Please update your configuration so that programs.eza.icons ${if cfg.icons then auto else null; ;迁移示例升级前programs.eza { enable true; icons true; };升级后24.11 推荐的写法programs.eza { enable true; icons auto; # 或 always / never / null };如果你的目标是彻底关闭图标则使用icons null;这也是选项的默认值。顺带一提该模块同时提供了colorsnull/auto/always/never对应--color与git布尔对应--git等外观与功能选项可以参考 eza.nix 一起调整。extraOptions则用于追加任意其它 eza 命令行参数例如--group-directories-first、--header。测试覆盖eza 目录下提供了针对 bash、zsh、fish、ion、nushell 各 shell 集成以及主题theme.nix的测试测试清单见 default.nix。升级后若发现eza别名或--icons行为异常可对照这些测试确认自己的写法。State Version24.11 无状态版本变更发布说明的 State Version 章节结论明确本版本没有引入任何状态版本变更。在 Home Manager 中home.stateVersion决定哪些“不兼容的默认值变更”生效。该选项的合法取值与版本线一一对应24.11 已列入合法枚举见 version.nix当前仓库中枚举已扩展至 26.11。stateVersion只应在升级时按需推进且推进到更高版本通常需要手工执行数据转换或文件迁移步骤参见该选项的描述 version.nix。因此对于 24.11 而言如果你尚未设置home.stateVersion 24.11;也不会因为缺少状态版本而触发任何默认值变更——本版本没有与状态数据相关的破坏性默认调整。升级检查清单综合以上分析从 24.11 之前的版本升级时建议依次检查swayidle 配置是否设置了services.swayidle.extraArgs若是且依赖-w自动注入请在赋值中显式加入-w依据 rl-2411.md 与 swayidle.nix。swayidle 事件写法events是否还在用旧列表写法新写法是“以事件名为键、命令为值”的属性集旧写法虽兼容但会触发弃用警告依据 swayidle.nix。eza 图标配置programs.eza.icons是否使用了布尔值若是请改为auto原true或null原false以消除弃用警告并为未来版本做准备依据 eza.nix。stateVersion确认home.stateVersion取值在合法枚举内24.11 本身无状态版本变更无需为此做额外迁移依据 rl-2411.md 与 version.nix。完成以上检查并运行home-manager switch后即可平滑进入 24.11 版本线同时保持 swayidle 空闲管理与 eza 文件列表展示的行为与升级前一致。【免费下载链接】home-managerManage a user environment using Nix [maintainerkhaneliman, rycee]项目地址: https://gitcode.com/GitHub_Trending/ho/home-manager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考