Posts Tagged ‘bash’
Configuring powerline to show working Git branch
So the documentation for Powerline kind of sucks. I followed this pretty good article on getting started with it. First thing I noticed however is that the if
statement on the article doesn’t work if you don’t have powerline installed (which kind of defeats the purpose of having the if
statement there at all).
# if powerline is installed, then use it command -v powerline-daemon &>/dev/null if [ $? -eq 0 ]; then powerline-daemon -q POWERLINE_BASH_CONTINUATION=1 POWERLINE_BASH_SELECT=1 . /usr/share/powerline/bash/powerline.sh fi
Next up is the configuration. I primarily use my bash prompt as a way to indicate which branch I’m working in within a Git repository. You need to point at the default_leftonly
theme which is pretty easy to find when you web search for it. The issue is everything seems to just point you at the powerline docs, which aren’t the most clear.
First, start by creating a local configuration directory that will override the configuration for powerline for your user.
$ mkdir -p ~/.config/powerline
Then the next thing is to copy over the config.json
from the main powerline configuration directory where you can find the available color schemes and other shell, i3, vim, etc themes.
(Again, the documentation kind of sucks on where the root of these configurations live…)
On my Fedora 22 system they live in /etc/xdg/powerline/
. I then copy the config.json
from that directory to ~/.config/powerline
To get the Git branch stuff going, I modified the configuration file in the following way:
--- /etc/xdg/powerline/config.json 2015-02-18 18:56:51.000000000 -0500 +++ /home/lmadsen/.config/powerline/config.json 2015-09-09 17:11:43.937522571 -0400 @@ -18,7 +18,7 @@ }, "shell": { "colorscheme": "default", - "theme": "default", + "theme": "default_leftonly", "local_themes": { "continuation": "continuation", "select": "select"
To make it active you can run powerline-config --reload
. If you have any errors in your configuration (I actually ran into this when playing with the colorscheme setting and used “solorized” instead of “solarized”), you can check it with powerline-lint
.
Selecting Chef Servers With Environment Variables
Today I got playing around with dynamically selecting different chef servers in preparation for migrating some of our nodes away from our chef-dev server to our chef-live server (which I’m currently in the process of building and populating with data). I had been talking in the #chef IRC channel a few weeks back about making things dynamic, or at least easily switchable, when using multiple chef servers for different groups of servers in an environment.
What I want to do, is be able to set an environment variable at my console in order to switch between chef servers. Previously I had been doing this with different files in my ~/.chef/ directory and changing symlinks between the files. This method works, but is kind of annoying. So with the help of some of the folks in #chef, and with this gist of a sample file that someone is using for their hosted chef environment, I was able to build my own knife.rb and commit it to our chef.git repository.
In our chef.git repository, I created a directory .chef and placed a knife.rb file in it:
$ cd ~/src/chef-repo $ mkdir .chef $ touch .chef/knife.rb
I then filled knife.rb with the following contents:
current_dir = File.dirname(__FILE__) sys_user = ENV["USER"] log_level :info log_location STDOUT node_name sys_user client_key "#{ENV["HOME"]}/.chef/#{ENV["KNIFE_ENV"]}/#{ENV["USER"]}.pem" validation_client_name "chef-validator" validation_key "#{ENV["HOME"]}/.chef/#{ENV["KNIFE_ENV"]}/validator.pem" chef_server_url "http://chef-#{ENV["KNIFE_ENV"]}.shifteight.org:4000" cache_type 'BasicFile' cache_options( :path => "#{ENV['HOME']}/.chef/checksums" ) cookbook_path [ "#{current_dir}/../cookbooks", "#{current_dir}/../site-cookbooks" ]
The main key is the KNIFE_ENV environment variable which I set using: export KNIFE_ENV=dev
or export KNIFE_ENV=live
After setting the environment variable, which server I’m using is selected for me. Additionally, I copied my validation.pem and client.pem files into corresponding directories in my ~/.chef/ directory: $ mkdir ~/.chef/{live,dev}
With all that done, I can now easily switch between our different servers in order to start the migration of our nodes. (I might create another blog post about that in the future if I get a chance.)
“BUT HOW DO I KNOW WHICH ENVIRONMENT I’M WORKING WITH?!?!?!”, you say? Oh fancy this little PS1 and function I added to my ~/.bashrc file:
if [ "$KNIFE_ENV" == "" ]; then export KNIFE_ENV="dev" fi function which_env { if [ "$KNIFE_ENV" == "live" ]; then echo "31" else echo "32" fi } export PS1='[\u@\h \[\033[0;36m\]\W$(__git_ps1 "\[\033[0m\]\[\033[0;33m\](%s) \[\033[0;`which_env`m\]~$KNIFE_ENV~")\[\033[0m\]]\$ '
Is nice 🙂
bash creating files named ‘1’ everywhere!
So I ran into something kind of stupid today 🙂 Adding a little note for anyone who might run into a similar instance.
I have some ssh-add stuff that gets run in my .bashrc file, but when I was outputting it, I was doing:
ssh-add ~/.ssh/some_key > /dev/null 2&>1
Note the 2&>1 at the end. That means to redirect output to a file named 1. You need to flip the &> into >&, so the fixed version looks like:
ssh-add ~/.ssh/some_key > /dev/null 2>&1
.bashrc trick for git repo and branch information
The other day I was talking to my friend Russell Bryant who pointed me to some .bashrc magic that would show me which branch I was currently working with inside a git repo on my system. I found it incredibly handy and have modified the ANSI colour coding slightly.
export PS1='[\u@\h \[33[0;36m\]\W$(__git_ps1 "\[33[0m\]\[33[0;33m\](%s)")\[33[0m\]]\$ '
On Fedora Russell mentioned that you need the bash-completion
installed. We’re unsure if you need anything on other distributions.
Edit: January 6, 2012
As I’m using my laptop today, I modified the .bashrc file on Ubuntu 10.04, and here is the PS1 code I came up with. It’s nearly the same, but I’m using bold today instead of the unbolded colours of lore.
PS1='${debian_chroot:+($debian_chroot)}\[\033[28;01m\]\u@\h\[\033[00m\]:\[\033[1;36m\]\W$(__git_ps1 "\[\033[00m\]\[\033[1;33m\](%s)")\[\033[00m\]\$ '
You must be logged in to post a comment.