diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:47 +0000 |
commit | 36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch) | |
tree | b3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb | |
parent | 4e31070265257dc67d120c27e0f75c2344fdfa9a (diff) | |
parent | abf060725d7614bd3b9f96764262dfbc2f9c2199 (diff) | |
download | nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2 nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip |
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb')
-rw-r--r-- | nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb b/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb new file mode 100644 index 000000000000..9b0f778426ed --- /dev/null +++ b/nixpkgs/pkgs/servers/x11/xquartz/patch_plist.rb @@ -0,0 +1,47 @@ +require 'rexml/document' + +# This script is for setting environment variables in OSX applications. +# +# This script takes two arguments: +# 1) A Nix attrset serialized via `builtins.toXML' +# 2) The path to an OSX app's Info.plist file. + +def main(serialized_attrs, plist_path) + env = attrs_to_hash(serialized_attrs) + doc = REXML::Document.new(File.open(plist_path, &:read)) + topmost_dict = doc.root.elements.detect { |e| e.name == "dict" } + topmost_dict.add_element("key").tap do |key| + key.text = "LSEnvironment" + end + topmost_dict.add_element(env_to_dict(env)) + + formatter = REXML::Formatters::Pretty.new(2) + formatter.compact = true + formatter.write(doc, File.open(plist_path, "w")) +end + +# Convert a `builtins.toXML' serialized attrs to a hash. +# This assumes the values are strings. +def attrs_to_hash(serialized_attrs) + hash = {} + env_vars = REXML::Document.new(serialized_attrs) + env_vars.root.elements[1].elements.each do |attr| + name = attr.attribute("name") + value = attr.elements.first.attribute("value") + hash[name] = value + end + hash +end + +def env_to_dict(env) + dict = REXML::Element.new("dict") + env.each do |k, v| + key = dict.add_element("key") + key.text = k + string = dict.add_element("string") + string.text = v + end + dict +end + +main(ARGV[0], ARGV[1]) |