Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
christianlechne
Active Contributor

Introduction


Looking at the hands-on SAP Dev episodes (as of 3rd of January 2020 live stream and recordings are available via YouTube) of dj.adams.sap you will become aware that the terminal is getting quite some attention: how to configure it to fit your needs, what add-ons to install to get work done more efficiently from the command line, what fonts to use and so on. I absolutely agree that the focus on the terminal will continue to rise. So, it makes sense to get some cozy environment there set up for you. However, as far as I have seen most of the tips and tricks focus on MacOS and Linux as this is what is used in the episodes. One might even get the impression that DJ is not the biggest fan of Windows and the options you have there, but maybe I am wrong and one day DJ puts his MacBook aside, switches to a Surface Laptop and enjoys Windows 10 with WSL2 (this would probably be the same day when hell freezes over).

Anyway, I think there are some developers out there who use Windows for their development and they also want to have a cozy terminal environment in Windows 10. The intention of this blog is to give them a solid start to achieve this goal.

Step 1 – Install Windows Terminal


First things first – you need a terminal. Windows itself comes with the command prompt and the PowerShell. But there is a better way to start your journey: The Windows Terminal app. The app is free, and you can install it directly from Windows Store:



It serves as your central entry point embracing all the shells on your system (and on Azure – which is not in scope of this blog). In addition, it contains a very simple way to configure the look and feel of the different shells on your system.

Attention: The Windows Terminal is available as of Windows 10 Version 18362.0. You can check your version by executing the command "winver" on your system that gives you some output like this:



Before we start configuring the Windows Terminal, we will first install the “successor” of PowerShell namely PowerShell Core.

Step 2 – Install PowerShell Core


PowerShell Core is available on GitHub (open source and under MIT license): https://github.com/PowerShell/PowerShell

In the GitHub Readme area, you find the.msi files you need for the installation:



Download the fitting one and install it on your system. The shells available on your system are automatically added to your Windows Terminal app, so no further configuration necessary.

You can start the Windows Terminal app and access PowerShell Core via the selection menu:



Probably you want to rearrange the entries and set PowerShell Core as default. To achieve this, go to the “Settings” entry in the menu which will open the configuration file. It is a simple JSON file:



The JSON file represents your personal configuration that is mixed up with a default configuration. In case you mess something up here, the default configuration will take over, so little chance to corrupt up your terminal.

The sequence of the entries in the configuration file defines the sequence of the entries in the drop-down menu in the Windows Terminal, so arrange it as you like. The default profile is determined via the GUID of the corresponding profile. Enter the one you prefer in the “defaultProfile” attribute. Save the file after you made your changes and you are done. The changes are picked up immediately.

As you can see from the screenshot above, I have activated the Windows Linux Subsystem (WSL) on my machine and installed Ubuntu as Linux. The Terminal also picks up this shell automatically, so you really have one central entry point for all your shells.

Okay, so now we have installed a terminal app as central entry point for your shells, we have installed a future-proof shell aka PowerShell Core and configured the terminal app a bit. What can we do next? What about some custom fonts?

Step 3 – Install Fonts: Cascadia-Code and Delugia Nerd Font


Fonts make a big difference when working with editors and shells, so you should use one that supports you. I use a ligature-friendly font published by Microsoft called Cascadia Code (OpenSource; OFL Licence).

What does “ligature-friendly” mean? Basically, this means that multiple characters are combined into one. The following screenshot shows what this means. On the left-hand side you see a classical text editor with standard non-ligature font. On the right-hand side, you see the same letters magically merged:



As PowerShell Core the font is available on GitHub (https://github.com/microsoft/cascadia-code). To install the font, download the .ttf file form GitHub (https://github.com/microsoft/cascadia-code/releases) and install it via double-click on the downloaded file and press the install button:



You can use the font in your preferred editor, in my case Visual Studio Code. For Visual Studio Code you must make sure that beside selecting the font itself in your settings you also must set the “fontLigatures” attribute to true:



You can now also use the font in Windows Terminal, however if you want to follow along the next step in this blog you must install a patched version of Cascadia Code as there is one short-coming: Cascadia Code does not support “Nerd Fonts” which are special glyphs needed in step 4 of this blog. To overcome this issue you can patch Cascadia Code yourself (see e.g. Patching The New Cascadia Code To Include Powerline Glyphs And Other Nerd Fonts) or you use a patched version provided by the community. I used Delugia Nerd Font that is available at GitHub under https://github.com/adam7/delugia-code/releases.The installation procedure is the same as for Cascadia Code.

Now we are ready to go and can add the font in the Windows Terminal settings in the “fontFace” attribute as shown in the screenshot below for the PowerShell Core:



Remark: this is your environment so if you are not happy with this font, use the one that fits you best, you can easily configure your terminal the way you want it to be.

We now have a nice font in our shell and our editor, let us go one step further and make the shell prompt a bit shinier and more useful.

Step 4 – Install Oh-My-Posh


Currently your shell prompt probably looks something like this:



Wouldn’t it be cool to have a bit more information (like on which git branch you are when this directory contains a .git file) a bit more colors, a failed command indication, so basically something like this:



Then it is time to install Oh-My-Posh in your PowerShellCore. Prerequisite is to have Git for Windows installed. Follow along the installation instructions given in the Oh-My-Posh GitHub repo https://github.com/JanDeDobbeleer/oh-my-posh#installation and you are done. Read the instructions carefully, otherwise you might stumble over a non-existing $PROFILE file – maybe this happened to the writer of this blog.

Remark: As you can see Oh-My-Posh makes use of some special glyphs basically the Nerd Fonts that are currently not supported with Cascadia Code. This is the reason why we used the Delugia Nerd Font. Probably Cascadia Code will be enhanced with this capability as some feature requests are open on that. (see https://github.com/microsoft/cascadia-code/issues?utf8=%E2%9C%93&q=is%3Aissue+Nerd+)

As for the fonts: you can now play around with the theming and the colors as you like. Oh-My-Posh is easy to configure and adapt to your wishes.

Another spice-up action done for your terminal, so what more do we need more? Maybe a package manager for the command line?

Step 5 – Install AppGet as package manager


If you are working with MacOS or Linux a package manager is available out of the box. Unfortunately, this is not the case for Windows, so you must install one. The most prominent one is Chocolatey. You can install it via one line in your PowerShell as described here: https://chocolatey.org/install

I never really got used to it (no idea why), that is why I want to draw your attention to an alternative that I personally like more: AppGet

If you want to give it a try you download and execute the installer and you are done. After that you can install any of the available packages (https://appget.net/packages) via a simple command:
appget install <package_name>

So package manager done, what can we do more to make our CLI life more comfortable? What about a HTTP client?

Step 6 – Install HTTPie


Probably you use Postman as HTTP client to interact with REST APIs. You can also make use of the command line to do that. The most know HTTP client probably is curl, but maybe you also want to look at alternatives. And here comes a quite nice one called HTTPie.



Its installation is straightforward, the only prerequisite is that you have Python installed on your machine (which means executing “appget install python”).

Again, it is a question of your personal preferences which HTTP client you prefer, however I would highly recommend trying out this one.

With that I would say that this is enough as a starter to accommodate your terminal on Windows.
But there is one more thing, maybe you also have WSL up and running and want to have the same features there as you have in the PowerShell Core now.

What about WSL(2) … well we got you covered


If you are using WSL (1 or 2) the corresponding shell is available in your Windows Terminal app after installation of your Linux image and you can configure its appearance (fonts etc.) as we did for PowerShell Core.

If you want to use the powerline-like output in your WSL prompt you can use, well, Powerline ?

You can go for vanilla Powerline that is available in the Debian/Ubuntu repositories. This is really vanilla-style, so you have some configuration work ahead. As I am a lazy bone I went forpowerline-go which gives you a decent pre-configuration. The following steps are necessary for the installation:
sudo apt install golang-go
go get -u github.com/justjanne/powerline-go

The execution of the second command took quite some time in my case, so be patient. After that you must edit your ~/.bashrc:
GOPATH=$HOME/go
function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -error $?)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

The first line is only necessary if you do not yet have a GOPATH defined.

And here we go for the WSL:



Finally, HTTPie is also only one command away:
 sudo apt-get install httpie

That’s it for the WSL shell on your Windows machine, feature pair with PowerShell Core.

Closing Remarks


The terminal is getting more in more in focus also for developers in the “classical” SAP ecosystem. This blog should give you a jump-start in setting up your terminal and shells on Windows which sometimes does not get as much love from my perspective.

There are for sure a lot more things out there, that I did not cover here. In case you have more tools, you think make sense in this area feel free to post them in the comment section of this blog.

References


I had a lot of inspiration (or should I say Copy&Paste templates) for the stuff written down in this blog, so here are my sources:

The basics of customizing your Windows Terminal is summarized in the blog  https://www.howtogeek.com/426346/how-to-customize-the-new-windows-terminal-app/ by Josh Hendrickson. In case you want to have baby Yoda watch your action in the shell this blog:


So may the Terminal be with you!

14 Comments
Labels in this area