Skip to content

Expand the JSON strings stored in the Morpheusly UI config file

[Home | GitLab]

Overview

This is a small, simple tool that makes it a bit easier to compare and generally examine the shared_settings.json file stored by the Morpheusly UI.

Install into a virtual environment

uv venv /path/to/venv
(set -e; . /path/to/venv/bin/activate; uv pip install /path/to/mrph-expand-config-source)

Or using the traditional Python venv and pip tools:

python3 -m venv --upgrade-deps /path/to/venv
/path/to/venv/bin/python3 -m pip install /path/to/mrph-expand-config-source

Examples

Expand the fields, then use jq to grab the node ID:

mrph-expand-config -q expand ~/.local/share/morpheuslyapp/shared_preferences.json \
    | jq '."flutter.command-node-config".settings.node_id'

Using the -s (--sort-keys) option to make it possible to use diff, compare two files using the <(command) shell syntax:

diff -u \
    <(mrph-expand-config expand -s ~/.local/share/morpheuslyapp/0-shared_preferences-after-recreate.json) \
    <(mrph-expand-config expand -s ~/.local/share/morpheuslyapp/shared_preferences.json)

Using a single dash (-) as the input filename, read a piped JSON object from the process's standard input stream and obtain the API session cookie:

cookie="$(docker exec -- docker_server_1 \
    cat /home/morpheusly/.local/share/com.morpheusly.morpheuslyapp/shared_preferences.json \
    | mrph-expand-config expand - \
    | jq -r '."flutter.command-node-config".cookie')"

Do the same, but use the jq subcommand of mrph-expand-config, passing the expression using the --expr / -e option and additional arguments using the --arg / -a option:

cookie="$(docker exec -- docker_server_1 \
    cat /home/morpheusly/.local/share/com.morpheusly.morpheuslyapp/shared_preferences.json \
    | mrph-expand-config jq -a -r -e '."flutter.command-node-config".cookie' -)"

If more than one argument needs to be passed to jq, the --args option may be used; it accepts a single argument that will be split into words according to the POSIX shell splitting rules:

mrph-expand-config jq --args '--arg cookie "this is a cookie"' -e '... $cookie ...'

The --in-place option of the jq subcommand will cause mrph-expand-config to read the configuration settings, expand them, pass them through the specified jq transformation, then collapse the JSON output and write it back to the same configuration file it was read from:

mrph-expand-config \
    jq \
    --in-place \
    --args '--arg server proxy.example.com' \
    -e '."flutter.command-node-config".settings.proxyserver_hostname = $server'

Contact

The mrph-expand-config library was written by Peter Pentchev. It is developed in a GitLab repository. This documentation is hosted at Ringlet with a copy at [ReadTheDocs][readthedocs].