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