~~What the Fuck~~ :) WTF terminal dasboard
WTF is a personal information dashboard for your terminal, developed for those who spend most of their day in the command line.
It allows you to monitor systems, services, and important information that you otherwise might keep browser tabs open for, the kinds of things you don’t always need visible, but do check in on every now and then.
Keep an eye on your OpsGenie schedules, Google Calendar, Git and GitHub repositories, and New Relic deployments.
See who’s away in BambooHR, which Jira tickets are assigned to you, and what time it is in Barcelona.
It even has weather. And clocks. And emoji.Quick Start
- Download the stand-alone, compiled binary.
- Unzip the downloaded file.
- From the command line, cd into the newly-created /wtf directory.
- From the command line, run the app: ./wtf
This should launch the app in your terminal using the default simple configuration. See Configuration for more details.Binarieshttps://github.com/wtfutil/wtf/releases
... or install from source:
go get -u github.com/wtfutil/wtf Configuration Files
By default WTF looks in a ~/.config/wtf/ directory for a YAML file called config.yml. If the ~/.config/wtf/ directory doesn’t exist, WTF will create that directory on start-up, and then display instructions for creating a new configuration file.
In other words, WTF expects to have a YAML config file at: ~/.config/wtf/config.yml.
Example Configuration Files
A couple of example config files are provided in the _sample_configs/ directory of the Git repository.
To try out WTF quickly, copy simple_config.yml into ~/.config/wtf/ as config.yml and relaunch WTF. You should see the app launch and display the Security, Clocks and Status widgets onscreen.
Custom Configuration Files
To try out different configurations (or run multiple instances of WTF), you can pass the path to a config file via command line arguments on start-up.
To load a custom configuration file (ie: one that’s not ~/.config/wtf/config.yml), pass in the path to configuration file as a parameter on launch:$> wtf --config=path/to/custom/config.yml
simple_config.yml: https://github.com/wtfutil/wtf/blob/master/_sample_configs/simple_config.ymlConfiguration Attributes
A number of top-level attributes can be set to customize your WTF install. See Attributes for details.Grid Layout
WTF uses the Grid layout system from tview to position widgets onscreen. It’s not immediately obvious how this works, so here’s an explanation:
Think of your terminal screen as a matrix of letter positions, say 100 chrs wide and 58 chrs tall.
Columns breaks up the width of the screen into chunks, each chunk a specified number of characters wide. use[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
Ten columns that are ten characters wide
Rows break up the height of the screen into chunks, each chunk a specified number of characters tall. If we wanted to have five rows:[10, 10, 10, 10, 18]
The co-ordinate system starts at top-left and defines how wide and tall a widget is. If we wanted to put a 2-col, 2-row widget in the bottom of the screen, we’d position it at:
top: 4 // top starts in the 4th row Modules
left: 9 // left starts in the 9th column
height: 2 // span down rows 4 & 5 (18 characters in size, total)
width: 2 // span across cols 9 & 10 (20 characters in size, total)
The heart of WTF is the modules. A module is a discreet unit of functionality that extracts data from some source and packages that data for display.
For example, the New Relic module uses New Relic’s API to retrieve a list of the latest deploys and packages that information as a list for display in the “New Relic” widget.
The Clocks module takes a list of timezones and packages that information as a list of city/time pairs for display in the “Clocks” widget.Attributes
The following top-level attributes are configurable in config.yml. See this example config file for more details.
# How _wide_ the columns are, in terminal characters. In this case we have
# six columns, each of which are 35 characters wide
columns: [35, 35, 35, 35, 35, 35]
# How _high_ the rows are, in terminal lines. In this case we have five rows
# that support ten line of text, one of three lines, and one of four
rows: [10, 10, 10, 10, 10, 3, 4]
openFileUtil: open # the name of the utility to call to open files
refreshInterval: 1 # the app refreshes once per second