{"id":39461584,"url":"https://github.com/tfpf/dotfiles","last_synced_at":"2026-04-28T15:00:57.523Z","repository":{"id":245449984,"uuid":"818276382","full_name":"tfpf/dotfiles","owner":"tfpf","description":"My programming environment configuration files and some whimsical utilities ","archived":false,"fork":false,"pushed_at":"2026-04-18T20:40:42.000Z","size":375,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-18T22:26:25.736Z","etag":null,"topics":["active-window","bash-prompt","bashrc","desktop-notifier","zsh-prompt","zshrc"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tfpf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-21T13:35:35.000Z","updated_at":"2026-04-18T20:40:46.000Z","dependencies_parsed_at":"2024-07-19T22:26:51.044Z","dependency_job_id":"53ee76ce-8930-4b65-bbcc-c2de64b26a2e","html_url":"https://github.com/tfpf/dotfiles","commit_stats":null,"previous_names":["tfpf/dotfiles"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/tfpf/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tfpf","download_url":"https://codeload.github.com/tfpf/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32385943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T14:34:11.604Z","status":"ssl_error","status_checked_at":"2026-04-28T14:32:37.009Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["active-window","bash-prompt","bashrc","desktop-notifier","zsh-prompt","zshrc"],"created_at":"2026-01-18T04:43:41.421Z","updated_at":"2026-04-28T15:00:57.514Z","avatar_url":"https://github.com/tfpf.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![style](https://github.com/tfpf/dotfiles/actions/workflows/style.yml/badge.svg)](https://github.com/tfpf/dotfiles/actions/workflows/style.yml)\n[![package](https://github.com/tfpf/dotfiles/actions/workflows/package.yml/badge.svg)](https://github.com/tfpf/dotfiles/actions/workflows/package.yml)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/e9d1e78e-c0fd-4d87-93f6-e293ddef31ba\" /\u003e\n\u003c/p\u003e\n\nNo part of the code in this repository has been written by or in consultation with artificial intelligence chatbots.\nAll of it is purely a product of natural intelligence (or stupidity, as the case may be).\n\n---\n\nThese are the configuration files I use on Linux, macOS and Windows to set up a consistent development environment.\nAlso included are some whimsical utilities I developed purely out of spite and found quite useful.\n\n# Custom Prompt\n\n[`custom-prompt`](custom-prompt) contains code to create a prompt for Bash or Zsh with information about the current\nGit repository and the current Python virtual environment, and report the running time of long commands. A session may\ntypically look like this.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/ed6d1455-bf7c-4f74-8cb4-cba68c327b6f\" /\u003e\n\u003c/p\u003e\n\nAll symbols seen in the screenshot above may not be rendered correctly in the table below. If you see vertical hollow\nrectangles (or other substitute characters), you may want to install a patched font from\n[Nerd Fonts](https://www.nerdfonts.com).\n\n|Component                        |Meaning                                                 |\n|---------------------------------|--------------------------------------------------------|\n|` workstation-a39b0e49`         |Host name                                               |\n|` ~/Documents/projects/dotfiles`|Current working directory                               |\n|` main`                         |Git branch currently checked out                        |\n|` 0c5803a2a496 󰓼 v1.8.3`        |Commit currently checked out and associated tag (if any)|\n|` 1`                            |1 file modified                                         |\n|` 1`                            |1 file staged for next commit                           |\n|` 1`                            |1 file not tracked                                      |\n|` +1,−4`                        |Local 1 commit ahead of and 4 commits behind remote     |\n|` dotfiles`                     |Current Python virtual environment                      |\n|`%`                              |Default prompt symbol                                   |\n|`▶%`                             |Prompt symbol in subshell                               |\n\nWhen a long command terminates, the GUI focus state of the terminal is queried using CSI 1004 on Linux and macOS or the\nWindows API on Windows. If the terminal does not have GUI focus, a desktop notification is sent using libnotify on\nLinux or OSC 777 on macOS and Windows.\n\nTo actually get the custom prompt in Bash or Zsh, compile the code to obtain `custom-bash-prompt` and\n`custom-zsh-prompt` (or download them from the [latest release](https://github.com/tfpf/dotfiles/releases/latest)),\ncopy/move them to a directory which is in `PATH`, and use them as done in [`.bash_aliases`](.bash_aliases) or\n[`.zshrc`](.zshrc).\n\n# Diff\n\n[`diff`](diff) contains a script to show the differences between two files or directories. It is intended to be used as\nan external diff tool for Git, and set up as seen in [`.gitconfig`](.gitconfig). As in the case of the custom prompt,\ncopy/move [`diff/diff.py`](diff/diff.py) to a directory which is in `PATH` to enable this use case.\n\n```console\ngit ss 848d7de\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/ceef8123-ffc9-48ae-861a-b8f09d18ced9\" /\u003e\n\u003c/p\u003e\n\nThe diffs it generates have no bells and whistles, but are usually more precise than those generated by Git (and thus\nalso by GitHub). It is also better at detecting renames. Finally, it can also diff two files directly.\n\n```console\ndiff.py .config/wireplumber/*/*\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/f5700b68-ca9c-490c-aaab-73741af14af6\" /\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfpf%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftfpf%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfpf%2Fdotfiles/lists"}