The personal information dashboard for your terminal

WTF

All Contributors Travis Status Go Report Card Twitter

WTF (aka 'wtfutil') is the personal information dashboard for your terminal, providing at-a-glance access to your very important but infrequently-needed stats and data.

Used by thousands of developers and tech people around the world, WTF is free and open-source. To support the continued use and development of WTF, please consider sponsoring WTF via GitHub Sponsors.

Are you a contributor or sponsor?

Awesome! See here for how you can change the exit message, the message WTF shows when quitting, to something special just for you.

Installation

Installing via Homebrew

The simplest way from Homebrew:

brew install wtfutil

wtfutil

That version can sometimes lag a bit, as recipe updates take time to get accepted into homebrew-core. If you always want the bleeding edge of releases, you can tap it:

brew tap wtfutil/wtfutil
brew install wtfutil

wtfutil

Installing via MacPorts

You can also install via MacPorts:

sudo port selfupdate
sudo port install wtfutil

wtfutil

Installing a Binary

Download the latest binary from GitHub.

WTF is a stand-alone binary. Once downloaded, copy it to a location you can run executables from (ie: /usr/local/bin/), and set the permissions accordingly:

chmod a+x /usr/local/bin/wtfutil

and you should be good to go.

Installing from Source

If you want to run the build command from within your $GOPATH:

# Set the Go proxy
export GOPROXY="https://proxy.golang.org,direct"

# Disable the Go checksum database
export GOSUMDB=off

# Enable Go modules
export GO111MODULE=on

go get -u github.com/wtfutil/wtf
cd $GOPATH/src/github.com/wtfutil/wtf
make install
make run

If you want to run the build command from a folder that is not in your $GOPATH:

# Set the Go proxy
export GOPROXY="https://proxy.golang.org,direct"

go get -u github.com/wtfutil/wtf
cd $GOPATH/src/github.com/wtfutil/wtf
make install
make run

Installing from Source using Docker

All building is done inside a docker container. You can then copy the binary to your local machine.

curl -o Dockerfile.build https://raw.githubusercontent.com/wtfutil/wtf/master/Dockerfile.build
docker build -f Dockerfile.build -t wtfutil --build-arg=version=master .
docker create --name wtf_build wtfutil
docker cp wtf_build:/usr/local/bin/wtfutil ~/.local/bin
docker rm wtf_build

Note: WTF is only compatible with Go versions 1.16.0 or later (due to the use of Go modules and newer standard library functions). If you would like to use gccgo to compile, you must use gccgo-9 or later which introduces support for Go modules.

Installing via Arch User Repository

Arch Linux users can utilise the wtfutil package to build it from source, or wtfutil-bin to install pre-built binaries.

Running via Docker

You can run wtf inside a docker container:

# download or create the Dockerfile
curl -o Dockerfile https://raw.githubusercontent.com/wtfutil/wtf/master/Dockerfile

# build the docker container
docker build -t wtfutil .

# or for a particular tag or branch
docker build --build-arg=version=v0.25.0 -t wtfutil .

# run the container
docker run -it wtfutil

# run container with a local config file
docker run -it -v path/to/config.yml:/config/config.yml wtfutil --config=/config/config.yml

Communication

Slack

If you’re a member of the Gophers Slack community (https://invite.slack.golangbridge.org) there’s a WTFUtil channel you should join for all your WTF questions, development conversations, etc.

Find #wtfutil on https://gophers.slack.com/ and join us.

Twitter

Also, follow on Twitter for news and latest updates.

Documentation

See https://wtfutil.com for the definitive documentation. Here's some short-cuts:

Modules

Modules are the chunks of functionality that make WTF useful. Modules are added and configured by including their configuration values in your config.yml file. The documentation for each module describes how to configure them.

Some interesting modules you might consider adding to get you started:

Getting Bugs Fixed or Features Added

WTF is open-source software, informally maintained by a small collection of volunteers who come and go at their leisure. There are absolutely no guarantees that, even if an issue is opened for them, bugs will be fixed or features added.

If there is a bug that you really need to have fixed or a feature you really want to have implemented, you can greatly increase your chances of that happening by creating a bounty on BountySource to provide an incentive for someone to tackle it.

Contributing to the Source Code

First, kindly read Talk, then code by Dave Cheney. It's great advice and will often save a lot of time and effort.

Next, kindly read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.

Then create your branch, write your code, submit your PR, and join the rest of the awesome people who've contributed their time and effort towards WTF. Without their contributors, WTF wouldn't be possible.

Don't worry if you've never written Go before, or never contributed to an open source project before, or that your code won't be good enough. For a surprising number of people WTF has been their first Go project, or first open source contribution. If you're here, and you've read this far, you're the right stuff.

Contributing to the Documentation

Documentation now lives in its own repository here: https://github.com/wtfutil/wtfdocs.

Please make all additions and updates to documentation in that repository.

Adding Dependencies

Dependency management in WTF is handled by Go modules. Please check out that page for more details on how Go modules work.

Contributors


Chris Cummer


Anand Sudhir Prayaga


Hossein Mehrabi


FengYa


deltax


Bill Keenan


June S


liyiheng


baustinanki


lucus lee


Mike Lloyd


Sergio Rubio


Farhad Farahi


Lasantha Kularatne


Mark Old


flw


David Barda


Geoff Lee


George Opritescu


Grazfather


Michael Cordell


Patrick José Pereira


sherod taylor


Andrew Scott


Lassi Piironen


BlackWebWolf


andrewzolotukhin


Leon Stigter


Amr Tamimi


Jagdeep Singh


Lineu Felipe


Konstantin


Brendan O'Leary


bertl4398


Ferenc-


Rohan Verma


Tim Fitzgerald


Federico Ruggi


Craig Woodward


ReadmeCritic


Eugene


Kenny Wu


Renán Romero


Bastian Groß


nicholas-eden


Dan Rabinowitz


David Missmann


Mathias Weber


TheRedSpy15


Harald Nordgren


Matei Alexandru Gardus


Sean Smith


Halil Kaskavalci


Johan Denoyer


Jelle Vink


Devin Collins


Danne Stayskal


Max Beizer


E:V:A


Gabriel


Andrew Scibek


FriedCosey


Michele Gerarduzzi


Jack Morris


foorb


Levi Baber


Graham Anderson


Romain Bossart


Kirill Motkov


Brian Choromanski


Sean DuBois


Gary Kim


Dylan


Dmytro Prokhorenkov


Elliot


chenrui


Andrew Suderman


Bob 'Wombat' Hogg


Christopher Hall


Heitor Neiva


Herby Gillot


James Canning


jeffz


Mikkel Jeppesen Juhl


Erik


Nate Yourchuck


Casey Primozic


Alvaro [Andor]


Joel Valentine


Viktor Braun


ChrisDBrown


Narendra L


ibaum


Tim Scheuermann


Indradhanush Gupta


Victor Hugo Avelar Ossorio


Steven Whitehead


Lawrence Craft


Avi Press


Sarah Kraßnigg


Jason Schweier


Massa


Vighnesh SK


Alex Fornuto


stevenwhitehead


Johan Denoyer


Albert Salim


Ricardo N Feliciano


Omer Davutoglu


Hemu


Dan Bent


C123R


Matjaž Depolli


Toon Schoenmakers


TDHTTTT


jottr


Nikolay Mateev


Charlie Wang


liyiheng


Bjoern Weidlich


Scott Hansen


David Bond


Yvonnick Esnault


Vinícius Letério


Adriano


Jon Hadfield


Tejas Shah


Frederik Mogensen


Risto Saarelma


Sam Roberts


gerchardon


Matt


R.I.Pienaar


Frederik Mogensen


aeter


Tim Hwang


Ying Fan Chong


Martin Johns


Jamie Tanna


Todd Trimble


Mitchell Hanberg


Miha Frangež


Sahil Dhiman


Pingzhou | 平舟


Yuval Goldberg


David Bouchare


Fredrik Steen


zye1996


Pierre Gaxatte


Christian Frichot


Lukas Kämmerling

Acknowledgments

The inspiration for WTF came from Monica Dinculescu's tiny-care-terminal.

WTF is built atop tcell and tview, fantastic projects both. WTF is built, packaged, and deployed via GoReleaser.

Owner
WTFUtil
The personal information dashboard for your terminal
WTFUtil
Comments
  • Security: open call for thoughts on securing WTF's config file

    Security: open call for thoughts on securing WTF's config file

    WTF's config.yml file is a plain text file stored in the user's home directory. Given the nature of many of the modules in WTF, that file could hold account information, passwords, URIs, and API keys for the user's critical systems.

    This issue is a place to discuss the security of that file.

    1. Does it need to be secured? Should we just trust the machine instead?
    2. If it should, how so? What's least-friction for the user?
  • Error on Build?

    Error on Build?

    Bug Report

    Summary

    Ran Go Get and ran make and ran into error

    What is the current behaviour?

    When running make, errors out with  ╍╍  g s g s    wtf  make install │ which wtf | xargs rm || true go install -ldflags="-X main.version=v0.0.4_`git rev-parse --abbrev-ref HEAD` -X main.date=2018-06-02T15:28:42+0100" which wtf make: *** [install] Error 1

    Go version is go version go1.10.2 darwin/amd64

  • Windows Support

    Windows Support

    Great project! I'm a Windows guy, so naturally I tried it on Windows in PowerShell. Works for me with go build -v -o wtf.exe or go install -v since I didn't have make installed.

    There are some areas that do need fixing, but I wanted to start a top level issue with some of what I see out of the box with a vanilla config:

    • [] Bad Character Encoding in the box headers.
    • [] Linux-specific tools used.
    • [] Makefile only works on Linux.

    image

    You can see some of the issues in the screenshot. If you can point me to where that code exists, I might be able to help make it work as intended on Windows.

  • Introduce wtf installer

    Introduce wtf installer

    Hey,

    Since #130, I decided to create a quick installer. The installer uses the dialog utils but I will create a option that you don't have to use these. You can try it, working fine on arch, debian and ubuntu. I don't have an option to try it on mac OS but you can do it.

    Quick fix of the Makefile would be to add

    ln -s $GOPATH/bin/wtf /bin/wtf
    

    But the installer is working fine of course.

    Regards,

    deltax

  • Use docker-credential-helper to manage secrets

    Use docker-credential-helper to manage secrets

    Store service credentials securely in the stores supported by docker:

    • https://github.com/docker/docker-credential-helpers#available-programs

    Introduces a top-level config property, "secretStore" and additional command line arguments to manage the stored secrets.

    The value of secretStore is used to find a helper command, docker-credential-<secretStore>.

    The docker project currently provides 4 store helpers:

    • "osxkeychain" (OS X only)
    • "secretservice" (Linux only)
    • "wincred" (Windows only)
    • "pass" (any OS supporting pass, which uses gpg2)

    Docker-for-desktop provides the credential helpers above, as well as docker-credential-desktop.

    Installation instructions for the helpers:

    • https://github.com/docker/docker-credential-helpers#installation

    Users could provide additional helpers, the only requirement is that the helper implements the credential store protocol:

    • https://github.com/docker/docker-credential-helpers#development

    The credential protocol is open, and new credential stores can be implemented by any CLI satisfying the protocol:

    • https://github.com/docker/docker-credential-helpers#development

    The modifications to existing modules is not tested due to lack of API keys, but demonstrates the unobtrusive changes required to use the secret store.


    This is one approach to moving secrets out of config.yml, see https://github.com/wtfutil/wtf/issues/517

    I'm curious to see if this scratches people's itch. The setup is pretty minimal, though the docker credential helpers need to be available, which they might be for any users of docker-for-desktop.

    It uses existing secure storage mechanisms rather than inventing any. The secrets are stored in either the OS keyring, which should be pretty secure, or in https://www.passwordstore.org/ (which should work on any system with gpg2).

    It requires pretty minimal changes to modules to support it (I included a bunch of - untested - module hacks in this PR as examples). Generally, you'd add wtf.secretStore: "" (it has a reasonable store default based on GOOS), and then remove your apiKey, and possibly username and API URL , from the module, and then save them with wtfutil save-secret URL_or_NAME SECRET , and that's it.

    I also considered an approach where api keys and the like have a special string format, like https://www.home-assistant.io/docs/tools/keyring/, and that triggers the store lookup, but it seemed more opaque, and more onerous to the user, as well as not dealing so obviously well with usernames or API endpoints.

    There are some limitations: this is struck to the docker-credential-helper's view of the world, which is that there is a SERVICE (any string, its not forced to be a URL, but it is a unique key), and that maps to a SECRET for one, single, named USER. The user can be defaulted to "default" in modules that don't need or want to store that, and the service can be the module name, so this seems to cover most use-cases reasonably.

    The save-secret interface is a bit WIP ATM. It should really prompt for the secret (secrets should not be put in CLI arguments, they are visible briefly with ps). For the truly energetic, I assume an entire secret manager UI could be implemented (the helpers support listing existing credentials). The sub-command structure is pretty awful, too, for which I blame go-flags, I spent more time struggling with it than writing the actual code.

    I've tested only with enterprise github, its the only one of the modules I have an API key for, so YMMV.

  • Any way to specify `config.yml` other `~/.config/wtf/config.yml` folder?

    Any way to specify `config.yml` other `~/.config/wtf/config.yml` folder?

    How can we help?

    I am trying to add wtf into homebrew-core (PR: https://github.com/Homebrew/homebrew-core/pull/39962), but I constantly run into the permission issue even though I try to specify the config file in this way (ignore the weird path):

    /usr/local/Cellar/wtfutil/0.17.1/bin/wtf --config=/private/tmp/wtfutil-test-20190720-64834-1j01eaq/config.yml
    

    Let me know what is the right way to do the --config=<path> reference.

  • Just got

    Just got "Error: character set not supported"

    I just got "Error: character set not supported",when i'm running wft.exe with default config.yml.

    $ wtf.exe Error: character set not supported

  • Data races popping up and rendering breaks

    Data races popping up and rendering breaks

    What's the problem?

    Been running wtf dash for a few weeks now without issue. Today, after playing around with my config a bit, i noticed the dashboard just stops rendering properly. It will start up and render correctly for a short time ~10-15 seconds but then become gibberish. When I exit out, I see a message like:

    "Found 24 data race(s)"

    The number can vary from run to run, but typically around 20-30.

    How did you expect it to behave?

    Just like it has been. Start the dashboard and the rendering/drawing behaves like normal

    Operating system

    Mac OS

    Terminal program & version

    iterm2

    WTF version

    just pulled master today.

  • go get fails

    go get fails

    go get github.com/senorprogrammer/wtf
    # github.com/senorprogrammer/wtf/gcal
    ../go/src/github.com/senorprogrammer/wtf/gcal/widget.go:235: duration.Round undefined (type time.Duration has no field or method Round)
    

    go version go1.8.3 linux/amd64

  • Keyboard controls no longer work

    Keyboard controls no longer work

    What's broken?

    The latest upgrade to tview v2 seems to have broken keyboard movement within modules. Arrow keys no longer work and the Esc key no longer gives up focus.

  • Does not start - error: infocmp not found

    Does not start - error: infocmp not found

    What's broken?

    Trying to run wtfutil (version 0.20.0) errors out with:

    $ wtfutil
    ERROR exec: "infocmp": executable file not found in $PATH
    

    I am using termite as a terminal, TERM is set to termite.

    OS: NixOS

  • Configurable source title name for FeedReader

    Configurable source title name for FeedReader

    I've recently upgraded and noticed immediately that the FeedReader now also shows the source title. With multiple feeds, this is a nice feature. However, for a single feed, the source title feels redundant.

    Screenshot 2023-01-03 at 2 42 03 AM

    Currently, is there a way to hide the source title?

    What should it do?

    If there is no way to hide the source title, this ticket is a feature request to add a way to hide the source title. Perhaps a simple config hideSourceTitle: bool would do?

    I'm also interested in contributing once the approach is decided.

    Related: https://github.com/wtfutil/wtf/pull/1171

  • Module Dynamic Refresh Interval Control

    Module Dynamic Refresh Interval Control

    What should it do?

    Module control of the widget refresh interval after startup.

    Currently the refresh interval for a widget is set at startup in app/scheduler.go. Modules can set their refresh interval in the config.yml entry for the module but once initialized and set in schedule.go the module can no longer alter the refresh interval.

    This issue came up in a discussion. One use case is a module with multiple modes, one that does not require frequent refresh and another that does require frequent refresh. Switching between these two modes, for example with a key press, it would be desirable to also modify the refresh interval accordingly. In the discussion @senorprogrammer suggested that a module could support:

    • module.PauseRefresh()
    • module.ResumeRefresh()
    • module.GetRefreshInterval()
    • module.SetRefreshInterval(interval)
    • module.RestoreRefreshInterval()

    This feature request issue is requesting support for these module level refresh interval control methods.

  • Add keyboard controls to lunarphase module

    Add keyboard controls to lunarphase module

    This pull request adds keyboard control for the lunarphase module to display the next day/week lunar phase, previous day/week lunar phase, enable/disable widget display, and open a site displaying more info on the currently selected day's lunar phase in a browser.

    Corresponding documentation will be submitted in a pull request to wtfdocs

  • uptimerobot module title not working

    uptimerobot module title not working

    Using Ubuntu 22.04 Jammy and precompiled binary wtf_0.42.0_linux_amd64,

    When setting the title configuration option in the config.yml file, the custom title is not displayed when running the program.

    wtfutil --module=uptimerobot shows that I can use an Optional title string.

  • CI Feature: Implement pull request preview environments

    CI Feature: Implement pull request preview environments

    How can we help?

    I would like to support wtf by implementing Uffizzi preview environments. Disclaimer: I work on Uffizzi.

    Uffizzi is a Open Source full stack previews engine and our platform is available completely free for wtf (and all open source projects). This will provide maintainers with preview environments of every PR in the cloud, which enables faster iterations and reduces time to merge. You can see the open source repos which are currently using Uffizzi over here

    Uffizzi is purpose-built for the task of previewing PRs and it integrates with your workflow to deploy preview environments in the background without any manual steps for maintainers or contributors. We can go ahead and create an Initial PoC for you right away if you think there is value in this proposal.

    • [ ] Initial PoC
Terminal based dashboard.
Terminal based dashboard.

Termdash is a cross-platform customizable terminal based dashboard. The feature set is inspired by the gizak/termui project, which in turn was inspire

Jan 1, 2023
Contextual information about your git projects, right on the command-line
Contextual information about your git projects, right on the command-line

gitty gitty is a smart little CLI helper for git projects, that shows you all the relevant issues, pull requests and changes at a quick glance. It cur

Jan 8, 2023
Command line tool to show the weather information of your city

go-weather when you type weather <city>, it will show you the weather of the city you input. Useful API comes from openweathermap.org. You can registe

Nov 5, 2021
Pi-fetch - get a summary of your pi-hole stats from your terminal

pi-fetch get a summary of your pi-hole stats from your terminal _ ___ _ _ ___|_|___| _|___| |_ ___| |_ | . | |___| _| -_| _

Jan 9, 2022
A personal knowledge management and sharing system for VSCode
A personal knowledge management and sharing system for VSCode

Foam ?? This is an early stage project under rapid development. For updates join the Foam community Discord! ?? Foam is a personal knowledge managemen

Jan 9, 2023
Libraries and CLIs for my personal all-in-one productivity system including components like bookmarks, notes, todos, projects, etc.

bntp.go Libraries and CLIs for my personal all-in-one productivity system including components like bookmarks, notes, todos, projects, etc. Neovim int

Sep 13, 2022
Grit is an experimental personal task manager that represents tasks as nodes of a multitree
Grit is an experimental personal task manager that represents tasks as nodes of a multitree

Grit is an experimental personal task manager that represents tasks as nodes of a multitree, a class of directed acyclic graphs. The structure en

Jan 2, 2023
A personal collection of handy CLI tools

Toolkit A personal collection of handy CLI tools Installation 1.) Download and extract the ZIP package for the the latest release 2.) Copy the appropr

Nov 8, 2021
Creating a simple CLI tool in the Go Programming Language for personal learning and fun

Creating a simple CLI tool in the Go Programming Language for personal learning and fun Open to feedback :) Build docker dev environment docker build

Dec 12, 2021
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Dec 16, 2022
Are you programming and suddenly your stomach is rumbling? No problem, order your Ifood without leaving your favorite text editor ❤️

vim-ifood Você ta programando e de repente bateu aquela fome? Sem problemas, peça seu Ifood sem sair do seu editor de texto favorito ❤️ Are you progra

Jun 2, 2022
A zoom meeting scanner made in go and it will show the meeting information

zoom-scanner A zoom meeting scanner made in go and it will show the meeting information Installation: git clone https://github.com/krishpranav/zoom-sc

Aug 31, 2022
🖼️ A command-line system information tool written in bash 3.2+
🖼️  A command-line system information tool written in bash 3.2+

A command-line system information tool written in bash 3.2+ Neofetch is a command-line system information tool written in bash 3.2+. Neofetch displays

Dec 30, 2022
Gofetch is a pretty command-line "Go and System information" tool written in Go
Gofetch is a pretty command-line

GoFetch Show off your Go information with this cool command-line tool! Report Bug || Request Feature Table of Contents About the Project Built With Ge

Nov 1, 2022
Command line tool for searching Pokémon information
Command line tool for searching Pokémon information

Pokesearch Command line tool for searching Pokemon information. Work in progress To-do Usage details Finish README.md Research release details Command

Jan 27, 2022
Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Jan 12, 2022
gomerge is a tool to quickly bulk merge several pull requests from your terminal.
gomerge is a tool to quickly bulk merge several pull requests from your terminal.

Gomerge is a tool to quickly enable you to bulk merge Github pull requests from your terminal. The intention of this tool is to simplfy, and eventually automate the merging of github pull requests. This tool should be able to run on most systems.

Dec 28, 2022
YouTube client on your terminal

MeowTube YouTube client on your terminal Table of Contents About Getting Started Usage Contributing About MeowTube is a CLI (Command Line Interface) t

Jul 29, 2022
🎄 A Christmas tree right from your terminal!
🎄 A Christmas tree right from your terminal!

ctree ?? A Christmas tree right from your terminal! ?? Demo ⌛ No Refresh Don't want the tree to refresh every 2 seconds? Easy! Just add the --no-refre

Dec 20, 2022