#macos #gui-applications #shell-environment #default #aqua #file #launch-agent

app aquaenv

使 shell 环境对 Aqua (macOS GUI) 应用程序可用

3 个版本

0.1.3 2019 年 4 月 17 日
0.1.2 2019 年 4 月 12 日
0.1.1 2019 年 4 月 11 日
0.1.0 2019 年 4 月 11 日

#94 in macOS 和 iOS APIs

MIT/Apache

21KB
361

Aqua Env - 可持续环境

Aquaenv 使得 shell 环境对 Aqua (macOS GUI) 应用程序可用。


Aquaenv 是一个 macOS (仅限) 工具,它使得 shell 环境对 Aqua (macOS GUI) 应用程序可用。它被设计成作为每个用户的持久 LaunchAgent 守护程序运行。环境变量可以被列入白名单(即标记为导出),并且可以监视文件以刷新导出的环境变量(例如,当 shell 配置文件更改时重新导出环境变量)。

Aquaenv 没有用户界面。配置使用标准的 defaults 命令行工具执行。见下文。

内部机制

Aquaenv 启动时,它会调用当前用户的登录 shell(自动检测)以确定要导出的变量,通过配置的白名单过滤变量,并通过 launchctl setenv VARIABLE VALUE 将剩余的变量导出到 launchd,这个过程称为导出 shell 环境变量

作为一个选项,可以监视配置文件,根据配置更改重新导出 shell 环境变量(例如,编辑 shell 的配置文件)。

Aquaenv 的配置文件会自动监视。

安装

需要 Rust

cargo install aquaenv
aquaenv -i
defaults write org.antbear.aquaenv whitelist -array-add \
    MY_IMPORTANT_VAR1 \
    MY_IMPORTANT_VAR2

有关 Nix,请参阅:https://github.com/bwolf/aquaenv.nix

可以通过 aquaenv -iAquaenv 配置为作为 LaunchAgent 自动启动。配置文件将创建在 ~/Library/Preferences/org.antbear.aquaenv.plist,并将指示 launchd 启动代理。

可以通过 aquaenv -u 反转安装(即卸载),该命令将卸载 plist 并将其删除。

日志已启用并输出到文件 ~/Library/Logs/aquaenv.log。日志文件的时戳以协调世界时(UTC)书写。

配置

第一次启动时会创建一个空的默认配置。它不包含白名单环境变量,也不包含要监视的文件。只有 SHELL_PATH 会被导出(shell 的原始 PATH)。

Aquaenv 在域名 org.antbear.aquaenv 中配置。它支持以下配置键

  • whitelist(字符串数组):从 shell 导出的环境变量。
  • watch(字符串数组):监视配置变更的文件。

zsh 的示例配置

defaults write org.antbear.aquaenv whitelist -array \
    XDG_CONFIG_HOME \
    XDG_CACHE_HOME \
    XDG_DATA_HOME \
    CARGO_HOME \
    RUSTUP_HOME

defaults write org.antbear.aquaenv watch -array \
    $HOME/.zshenv \
    $HOME/.zshrc

为了完整性,上述配置通过以下 XML 配置实现,如下通过 plutil 显示

plutil -convert xml1 -o /dev/stdout \
    ~/Library/Preferences/org.antbear.aquaenv.plist

输出:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>watch</key>
	<array>
		<string>/Users/user/.zshenv</string>
		<string>/Users/user/.zshrc</string>
	</array>
	<key>whitelist</key>
	<array>
		<string>XDG_CONFIG_HOME</string>
		<string>XDG_CACHE_HOME</string>
		<string>XDG_DATA_HOME</string>
		<string>CARGO_HOME</string>
		<string>RUSTUP_HOME</string>
	</array>
</dict>
</plist>

限制

Launchd 不支持设置 PATH,因为 launchd 忽略通过 launchctl setenv PATH foo:bar 设置的 PATH。作为附加功能,AquaenvPATH 作为变量 SHELL_PATH 导出,这可以通过自定义配置在如 GNU Emacs 这样的配置应用程序中使用。

许可证

Aquaenv 根据以下许可证之一进行许可

依赖

~4–15MB
~163K SLoC