Skip to content

Boost Your Productivity with WakaTime: Scripts and Config Examples

Discover effective scripts and configuration examples to elevate your productivity with WakaTime. Learn how to configure ~/.waktime.cfg for optimal tracking settings, create a custom bash script for seamless WakaTime integration, and automate the tracking of your coding activities across various projects and programming languages.


Configure ~/.waktime.cfg

cat << "EOF" ~/.wakatime.cfg
[settings]
debug = false
api_key=
api_url = https://api.wakatime.com/api/v1
hide_file_names = false
hide_project_names = false
hide_branch_names =
hide_project_folder = false
exclude =
    ^COMMIT_EDITMSG$
    ^TAG_EDITMSG$
    ^/var/(?!www/).*
    ^/etc/
include =
    .*
include_only_with_project_file = false
exclude_unknown_project = false
status_bar_enabled = true
status_bar_coding_activity = true
status_bar_hide_categories = false
offline = true
no_ssl_verify = false
ssl_certs_file =
timeout = 30
hostname = elitedesk
log_file =
EOF

Create bash-wakatime.sh

#!/bin/bash

pre_prompt_command() {
	version="1.0.0"
	entity=$(echo $(fc -ln -0) | cut -d ' ' -f1)
	[ -z "$entity" ] && return

	language="Bash"
	project="Terminal"
	category="coding"

	case $entity in
	ncmpcpp)
		project="Music Player Daemon"
		;;
	vim | nano)
		category="coding"
		filename=$(echo $(fc -ln -0) | cut -d ' ' -f2)
		file_extension="${filename##*.}"  
        filename="private.$file_extension" 
		case "$file_extension" in
		"c") language="C" ;;
		"cpp") language="C++" ;;
		"py") language="Python" ;;
		"js") language="JavaScript" ;;
		"html") language="HTML" ;;
		"css") language="CSS" ;;
		"pl") language="Perl" ;;
		"md") language="Markdown" ;;
		"awk") language="Awk" ;;
		"php") language="PHP" ;;
		"conf") language="Config" ;;
		"sh") language="Bash" ;;
		*) language="Bash" ;;
		esac
		;;
	cmus) 
        project="cmus"
        category="coding"
        ;;
	telnet)
		project="Telnet"
		category="coding"
		;;
	weechat)
		project="Weechat"
		category="meeting"
		;;
	ssh)
		project="SSH"
		category="coding"
		;;
	adb)
		project="Android Debug Bridge"
		category="coding"
		;;
	vim)
		project="Terminal"
		category="coding"
		;;
	nano)
		project="Nano"
		category="coding"
		;;
	*)
		$(git rev-parse --is-inside-work-tree 2>/dev/null) && project="$(basename $(git rev-parse --show-toplevel))" || project="Terminal"
		;;
	esac

	(~/.wakatime/wakatime-cli --write \
		--plugin "bash-wakatime/$version" \
		--entity-type app \
		--project "$project" \
		--entity "$entity" \
		--category "$category" \
		--language "$language" \
		--alternate-project "Terminal" \
		--alternate-language "Bash" \
		--alternate-branch "main" \
		--category "Coding" \
		--exclude-unknown-project \
		--hide-project-folder \
		--internal-config ~/.wakatime/wakatime-internal.cfg \
		--config "~/.wakatime.cfg" \
		2>&1 >/dev/null &)

#	(~/.wakatime/wakatime-cli --write \
#		--plugin "bash-wakatime/$version" \
#		--entity-type app \
#		--project "$project" \
#		--entity "$entity" \
#		--category "$category" \
#		--language "$language" \
#		--alternate-project "Terminal" \
#		--alternate-language "Bash" \
#		--alternate-branch "main" \
#		--category "Coding" \
#		--exclude-unknown-project \
#		--hide-project-folder \
#		--exclude-unknown-project \
#		--config "~/.wakapi.cfg" \
#		2>&1 >/dev/null &)
}

PROMPT_COMMAND="pre_prompt_command; $PROMPT_COMMAND"

install-wakatime_default.sh

#!/bin/bash

set -e
set -x

arch="amd64"
if [[ $(uname -m) == "aarch64" ]]; then
  arch="arm64"
fi

extract_to="$HOME/.wakatime"

os="unknown"
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
  os="linux"
elif [[ "$OSTYPE" == "darwin"* ]]; then
  os="darwin"
elif [[ "$OSTYPE" == "cygwin" ]]; then
  os="windows"
elif [[ "$OSTYPE" == "msys" ]]; then
  os="windows"
elif [[ "$OSTYPE" == "win32" ]]; then
  os="windows"
elif [[ "$OSTYPE" == "freebsd"* ]]; then
  os="freebsd"
elif [[ "$OSTYPE" == "openbsd"* ]]; then
  os="openbsd"
elif [[ "$OSTYPE" == "netbsd"* ]]; then
  os="netbsd"
fi

zip_file="$extract_to/wakatime-cli-${os}-${arch}.zip"
symlink="$extract_to/wakatime-cli"
extracted_binary="$extract_to/wakatime-cli-${os}-${arch}"
if [[ "$os" == "windows" ]]; then
  extracted_binary="$extracted_binary.exe"
fi
url="https://github.com/wakatime/wakatime-cli/releases/latest/download/wakatime-cli-${os}-${arch}.zip"

# make dir if not exists
mkdir -p "$extract_to"

cd "$extract_to"

echo "Downloading wakatime-cli to $zip_file ..."
curl -L "$url" -o "$zip_file"

echo "Unzipping zip_file ..."
unzip -q -o "$zip_file" || true

ln -fs "$extracted_binary" "$symlink"
chmod a+x "$extracted_binary"

echo "Installed $symlink"

rm "$zip_file"

echo "Finished installing wakatime-cli."

exit 0