{"id":22277096,"url":"https://github.com/eli64s/dots","last_synced_at":"2026-04-30T20:32:16.570Z","repository":{"id":150159137,"uuid":"618242438","full_name":"eli64s/dots","owner":"eli64s","description":"🔵 🟢 🟡 🟠 🔴","archived":false,"fork":false,"pushed_at":"2025-08-17T04:03:51.000Z","size":19799,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-17T06:09:09.404Z","etag":null,"topics":["automation","bash","dotfiles","dots","dotstar","oh-my-zsh","ohmyzsh","youtube-downloader","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eli64s.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2023-03-24T03:28:00.000Z","updated_at":"2025-08-17T04:03:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"dd51b721-4063-4d59-9efb-504cec1282ce","html_url":"https://github.com/eli64s/dots","commit_stats":null,"previous_names":["eli64s/pybash","eli64s/pyro-bash","eli64s/shellbox","eli64s/dots"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eli64s/dots","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eli64s%2Fdots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eli64s%2Fdots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eli64s%2Fdots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eli64s%2Fdots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eli64s","download_url":"https://codeload.github.com/eli64s/dots/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eli64s%2Fdots/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32476682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"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":["automation","bash","dotfiles","dots","dotstar","oh-my-zsh","ohmyzsh","youtube-downloader","zsh"],"created_at":"2024-12-03T14:17:14.687Z","updated_at":"2026-04-30T20:32:16.554Z","avatar_url":"https://github.com/eli64s.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"left\"\u003e\u003ca id=\"top\"\u003e\u003c/a\u003e\n\n```console\n██████   ██████  ████████ ███████\n██   ██ ██    ██    ██    ██\n██   ██ ██    ██    ██    ███████\n██   ██ ██    ██    ██         ██\n██████   ██████     ██    ███████\n\n◎ Config files and utility scripts\n```\n\n\u003cimg src=\"https://img.shields.io/badge/Visual%20Studio%20Code-3B84F6.svg?style=%7B0%7D\u0026logo=Visual-Studio-Code\u0026logoColor=white\" alt=\"Visual%20Studio%20Code\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Python-4361EE.svg?style=flat-square\u0026logo=Python\u0026logoColor=white\" alt=\"Python\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Pytest-0A9EDC.svg?style=flat-square\u0026logo=Pytest\u0026logoColor=white\" alt=\"Pytest\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/GNU%20Bash-1AC8A2.svg?style=flat-square\u0026logo=GNU-Bash\u0026logoColor=white\" alt=\"GNU%20Bash\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Ruff-FFD23F.svg?style=flat-square\u0026logo=Ruff\u0026logoColor=black\" alt=\"Ruff\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Git-FF6B35.svg?style=flat-square\u0026logo=Git\u0026logoColor=white\" alt=\"Git\"\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Zsh-FF3366.svg?style=flat-square\u0026logo=Zsh\u0026logoColor=white\" alt=\"Zsh\"\u003e\n\n\u003c/div\u003e\n\n\u003cimg width=\"100%\" height=\"2.5px\" src=\"assets/svg/line.svg\" alt=\"line\"\u003e\n\n## Overview\n\nThis repository contains many common configuration files and development scripts I use daily. With a rich collection of Bash scripts, Python config files, and shell enhancements, this repo helps you:\n- 🚀 Automate repetitive dev tasks\n- 🛠️ Set up and manage environments fast\n- 🎵 Download and convert YouTube playlists\n- 📚 Aggregate docs for LLM workflows\n- 🧹 Clean, lint, and test codebases with a single command\n- ⚡ And much more!\n\n###  Project Structure\n\nThe repository is structured as follows:\n\n```sh\n.\n├── docker\n│   └── build_and_publish.sh\n├── docs\n│   ├── common\n│   │   └── python-project-templates.md\n│   └── quickstart\n│       └── uv.md\n├── git\n│   └── gitignore.txt\n├── just\n│   ├── justfile\n│   └── python-justfile.md\n├── lint\n├── make\n│   ├── Makefile\n│   ├── Makefile.help.table\n│   ├── Makefile.poetry.mk\n│   └── Makefile.uv.mk\n├── python\n│   ├──  noxfile.py\n│   ├── conf\n│   │   ├── pyproject-poetry.toml\n│   │   └── pyproject-uv.toml\n│   ├── lint\n│   ├── tests\n│   │   ├── behave.ini\n│   │   └── pytest.ini\n│   └── type-checker\n│       ├── mypy.ini\n│       └── ty.toml\n├── scripts\n│   ├── builds\n│   │   ├── docker_hub.sh\n│   │   └── pypi.sh\n│   ├── common\n│   │   ├── clean.sh\n│   │   ├── run.sh\n│   │   └── test.sh\n│   ├── converters\n│   │   └── svg_to_png.sh\n│   ├── cookie-cutter\n│   │   └── create_structure.sh\n│   ├── file\n│   │   ├── aggregate_docs.sh\n│   │   ├── chunk_docs.sh\n│   │   └── modify_filenames.sh\n│   ├── generators\n│   │   └── mkdir_from_tree.sh\n│   ├── install\n│   │   ├── local_dependencies_uninstall.sh\n│   │   ├── local_dependencies.sh\n│   │   ├── micromamba.sh\n│   │   ├── migrate_to_uv.sh\n│   │   ├── precommit.sh\n│   │   └── pyflink.sh\n│   └── youtube\n│       ├── download.log\n│       ├── failed_links.txt\n│       ├── README.md\n│       ├── youtube_downloader.sh\n│       └── youtube_links.txt\n├── tmux\n├── vscode\n│   └── settings.json\n└── zsh\n    ├── .zprofile\n    └── .zshrc\n```\n\n---\n\n## Installation\n\nTo get started with the utility scripts, build the project from source:\n\n1. Clone the repository:\n\n    ```sh\n    ❯ git clone https://github.com/eli64s/dots\n    ```\n\n2. Navigate to the project directory:\n\n    ```sh\n    ❯ cd dots\n    ```\n\n## Running Scripts\n\n### 🔻 YouTube Batch Downloader\n\nBatch download YouTube videos from csv file of URLs and convert them to MP3 files.\n\n1. Make the script executable:\n\n    ```sh\n    ❯ chmod +x scripts/youtube/youtube_downloader.sh\n    ```\n\n2. Prepare a file with YouTube links (one URL per line):\n\n    ```sh\n    ❯ printf \"https://youtu.be/dQw4w9WgXcQ\\nhttps://youtu.be/3JZ_D3ELwOQ\" \u003e youtube_links.txt\n    ```\n\n3. Run the batch downloader:\n\n    ```sh\n    ❯ ./scripts/youtube/youtube_downloader.sh youtube_links.txt\n    ```\n\n\u003c!--\n### 🔻 Aggregate Docs\n\nThe [aggregate_docs.sh] script quickly combines all files from a GitHub repo into one file—perfect for preparing context for LLMs or other tools.\n\nFirst, let's view the help message for the script:\n\n```sh\n❯ bash scripts/file/aggregate_docs.sh -h\n\nUsage: scripts/file/aggregate_docs.sh [-r REPO_URL] [-p POSSIBLE_PATHS] [-o OUTPUT_FILE] [-n REPO_NAME] [-s TO_SEARCH]\n  -r REPO_URL       URL of the GitHub repository to clone (required)\n  -p POSSIBLE_PATHS Comma-separated list of possible paths to search for markdown files (required)\n  -o OUTPUT_FILE    Name of the output markdown file (required)\n  -n REPO_NAME      Name of the repository (required)\n  -s TO_SEARCH      Pattern to search for markdown files (e.g., \"*.md\") (required)\n```\n\nTo run the script, provide the following arguments:\n\n```sh\n❯ bash scripts/file/aggregate_docs.sh \\\n    -r https://github.com/pydantic/pydantic \\\n    -n pydantic \\\n    -o pydantic-docs.md \\\n    -p docs \\\n    -s \"*.md\"\n```\n\nAlternatively, make the script executable:\n\n```sh\n❯ chmod +x scripts/file/aggregate_docs.sh\n```\n\nAnd run it directly:\n\n```sh\n❯ ./aggregate_docs.sh \\\n    -r https://github.com/pydantic/pydantic \\\n    -p docs \\\n    -o pydantic-docs.md \\\n    -n pydantic \\\n    -s \"*.md\"\n```\n\n## Advanced Configuration\n\nSay you want to clone this repository and use the `.zshrc` file as your shell configuration, and have quick access to the function under the `bash` directory. We can set this up by creating symlinks from the repository to your home directory.\n\n1. Create symlinks from your repository to your home directory:\n\n```sh\n# Current repository location\n❯ DOTS_DIR=\"/Users/\u003cusername\u003e/GitHub/dots\"\n\n# Create symlinks\n❯ ln -sf \"$DOTS_DIR/zsh/.zshrc\" \"$HOME/.zshrc\"\n❯ ln -sf \"$DOTS_DIR/bash\" \"$HOME/.zsh/functions\"\n```\n\n2. Add the following line to your `.zshrc` file to source the utility scripts:\n\n```zsh\n# -- GitHub/dots Repository Integration ---------------------------------------------\nDOTS_DIR=\"$HOME/Projects/GitHub/dots\"\nDOTS_SCRIPTS=\"$DOTS_DIR/bash\"\n\n# Function to load scripts from directory\nfunction load_scripts() {\n\tlocal dir=\"$1\"\n\tif [ -d \"$dir\" ]; then\n\t\t# Create functions for all scripts instead of aliases\n\t\tfor script in \"$dir\"/*.sh; do\n\t\t\tif [ -f \"$script\" ]; then\n\t\t\t\tlocal func_name=$(basename \"$script\" .sh)\n\t\t\t\teval \"function $func_name() { $script \\\"\\$@\\\" }\"\n\t\t\tfi\n\t\tdone\n\tfi\n}\n\n# Load all script directories from dots/bash\nfor category in $DOTS_SCRIPTS/*; do\n\tif [ -d \"$category\" ]; then\n\t\tload_scripts \"$category\"\n\tfi\ndone\n\n# Add custom functions directory to fpath\nfpath+=(\"$DOTS_DIR/zsh/functions\")\n```\n\n3. Now you can run the scripts directly from your terminal:\n\n```sh\n❯ aggregate_docs -r https://github.com/pydantic/pydantic-ai \\\n\t\t\t-p docs \\\n\t\t\t-o pydantic-ai-docs.md \\\n\t\t\t-n pydantic-ai \\\n\t\t\t-s \"*.md\"\n```\n\nThis setup maintains the repository structure while making all bash scripts accessible as commands in your shell.\n--\u003e\n\n\u003e [!TIP]\n\u003e The [scripts] directory contains a variety of utilities for automating tasks like environment setup, file operations, and codebase management.\n\n\u003cdiv align=\"left\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"assets/svg/button.svg\" width=\"100px\" height=\"100px\" alt=\"return-button\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cimg width=\"100%\" height=\"2.5px\" src=\"assets/svg/line.svg\" alt=\"line\"\u003e\n\n\u003c!-- REFERENCE LINKS --\u003e\n[aggregate_docs.sh]: scripts/file/aggregate_docs.sh\n[scripts]: https://github.com/eli64s/dots/tree/main/scripts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feli64s%2Fdots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feli64s%2Fdots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feli64s%2Fdots/lists"}