powerline-inject

A powerline segment to show an ENV list with extra knobs


Keywords
powerline, powerline_inject
License
Apache-2.0
Install
pip install powerline-inject==0.1.6

Documentation

powerline-inject

pypi Supported Python Versions License

powerline-inject is a Powerline status segment addon for showing ENV with extra knobs.

This can be natively done with powerline.segments.common.env.environment if knobs aren't needed:

{
	"segments":
	{
		"left":
		[
			{ "function":
				"powerline.segments.common.env.environment",
				"name": "aws",
				"priority": 20,
				"before": "⩜ ",
				"args": {
					"variable": "SOME_ENV"
				}
			}
		]
	}
}

Couple knobs featured that powerline-inject has are:

  1. The ability to toggle on or off the powerline-inject segment using an environment variable which can easily be mapped to a function in your ~/.bash_profile.
  2. The ability to show only a symbol when the variables holds value. (SECRET KEYS, TOKENS, etc.)
  3. Multiple different highlighter profiles for your ENV lists.

The screenshot below demonstrates this functionality:

screenshot

Installation

  1. Add the Python package. powerline-inject is available on pypi so you can install it with pip:
pip install --user powerline-inject
  1. Create a user configuration directory.

Once powerline-inject has been installed, we'll need to add it to our powerline shell's theme and colorscheme.

Alter your powerline user config:

If you don't already have a ~/.config/powerline/ folder, create it. Next we'll be copying some of the default powerline configs into this location. Find where powerline is installed by using pip show powerline-status | grep 'Location', then navigate to the config_files/ folder there. We'll be copying config.json, themes/shell/default.json, and colorschemes/shell/default.json to our ~/.config/powerline/ folder, adding the necessary folders to match that original file structure (i.e. adding the themes/ and colorschemes/ folders, etc.

  1. Add powerline-inject to your user config.

Within our user config, we'll need to add the powerline-inject segment to our shell by adding the following lines to our ~/.config/powerline/themes/shell/default.json:

    {
	    "function": "powerline_inject.context",
	    "priority": 30,
	    "args": {
			"show_env": true,
			"env_list": ["AWS_PROFILE", "TOKEN_X"]
		}
    }

Next we'll add the highlighting colors we'll use to our ~/.config/powerline/colorschemes/shell/default.json:

    {
	    "name": "Default",
	    "groups": {
			"powerline_inject": { "fg": "white", "bg": "red", "attrs": [] },
			"powerline_inject_bold": { "fg": "white", "bg": "brightred", "attrs": [] },
	    }
    }
  1. You will need to reload powerline with powerline-daemon --replace to load the new settings. That's it!

  2. (Optional) By default powerline-inject will render the environment variable if RENDER_POWERLINE_INJECTS is either set to YES or is not set at all. Rather than setting this variable manually, you can create a simple powerline-inject-toggle function by placing the following in your ~/.bash_profile:

        function powerline-injects-toggle() {
            if [[ $RENDER_POWERLINE_INJECTS = "NO" ]]; then
                export RENDER_POWERLINE_INJECTS="YES"
            else
                export RENDER_POWERLINE_INJECTS="NO"
            fi
        }

Confidential ENV use

You may find you want to know when you have SECRETS loaded into your ENVIRONMENT. This will show only a symbol ⩜ when the SECRET_TOKEN or AWS_PROFILE is loaded.

	{
		"function": "powerline_inject.context",
		"priority": 30,
		"args": {
			"show_env": false,
			"env_list": ["SECRET_TOKEN", "AWS_PROFILE"],
			"before": "⩜ "
		}
	},

You can further add a second call to powerline_inject.context with a different before symbol and/or env_highlighter in args like the powerline_inject_bold defined above.

	{
		"function": "powerline_inject.context",
		"priority": 30,
		"name": "second_injection",
		"args": {
			"show_env": false,
			"env_list": ["SECRET_TOKEN", "AWS_PROFILE"],
			"env_highlighter": "powerline_inject_bold"
		}
	},

Used with PROMPT_COMMAND for ENV refresh

You may want to use this with a PROMPT COMMAND that updates the ENVs being checked everytime. As an example aws-test-authentication sets AWS_EPOCH and AWS_PROFILE.

Put this in your ~/.bash_profile

export PROMPT_COMMAND="eval \$(aws-test-authentication); $PROMPT_COMMAND"

You're all set up! Happy coding!

License

Licensed under the Apache License 2.0.
Original fork is at https://github.com/zcmarine/powerkube.