{"id":31074109,"url":"https://github.com/0-mostafa-rezaee-0/dotfiles","last_synced_at":"2026-04-07T22:31:35.200Z","repository":{"id":313382838,"uuid":"1051199077","full_name":"0-mostafa-rezaee-0/dotfiles","owner":"0-mostafa-rezaee-0","description":"Complete dotfiles tutorial for beginners. Step-by-step guide with automated installation script, detailed explanations, and a troubleshooting section. Start version controlling your dev environment today!","archived":false,"fork":false,"pushed_at":"2025-09-05T20:38:35.000Z","size":3732,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-16T02:22:05.902Z","etag":null,"topics":["automation","bash","beginner-friendly","configuration","development-environment","dotfiles","git","tutorial","vim","zsh"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/mostafa-rezaee/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0-mostafa-rezaee-0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-09-05T15:41:41.000Z","updated_at":"2025-09-05T20:38:39.000Z","dependencies_parsed_at":"2025-09-05T18:48:55.305Z","dependency_job_id":null,"html_url":"https://github.com/0-mostafa-rezaee-0/dotfiles","commit_stats":null,"previous_names":["0-mostafa-rezaee-0/dotfiles"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/0-mostafa-rezaee-0/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0-mostafa-rezaee-0%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0-mostafa-rezaee-0%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0-mostafa-rezaee-0%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0-mostafa-rezaee-0%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0-mostafa-rezaee-0","download_url":"https://codeload.github.com/0-mostafa-rezaee-0/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0-mostafa-rezaee-0%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31532195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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","beginner-friendly","configuration","development-environment","dotfiles","git","tutorial","vim","zsh"],"created_at":"2025-09-16T02:02:44.165Z","updated_at":"2026-04-07T22:31:35.183Z","avatar_url":"https://github.com/0-mostafa-rezaee-0.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 🧰 How to Use This Template\n\nClick the green **\"Use this template\"** button at the top of the page, then choose **\"Create a new repository\"**.\nThis will create your own copy of this project, which you can modify freely — no need to fork!\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"images/banner.png\" alt=\"banner\" width=\"50%\"\u003e\n\u003c/div\u003e\n\n---\n\n\u003ch1 align=\"center\"\u003eDotfiles: A Complete Beginner's Guide\u003c/h1\u003e\n\nA beginner-friendly dotfiles management system that automates development environment setup across multiple machines. Features one-command installation with automatic backups, modular organization, and comprehensive documentation for developers of all skill levels.\n\n---\n***Table of Contents***\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#1-about-this-repository\"\u003e\u003ci\u003e\u003cb\u003e1. About This Repository\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#11-who-is-this-tutorial-for\"\u003e1.1. Who Is This Tutorial For?\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#12-what-will-you-learn\"\u003e1.2. What Will You Learn?\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#13-prerequisites\"\u003e1.3. Prerequisites\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#14-project-structure\"\u003e1.4. Project Structure\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#2-what-are-dotfiles\"\u003e\u003ci\u003e\u003cb\u003e2. What are dotfiles?\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#3-why-use-dotfiles\"\u003e\u003ci\u003e\u003cb\u003e3. Why Use Dotfiles?\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#4-whats-inside-this-repository\"\u003e\u003ci\u003e\u003cb\u003e4. What's Inside This Repository\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#41-project-structure-overview\"\u003e4.1. Project Structure Overview\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#42-complete-directory-structure\"\u003e4.2. Complete Directory Structure\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#43-detailed-directory-breakdown\"\u003e4.3. Detailed Directory Breakdown\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#44-configuration-file-purposes\"\u003e4.4. Configuration File Purposes\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#45-file-organization-principles\"\u003e4.5. File Organization Principles\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#46-adding-new-configuration-files\"\u003e4.6. Adding New Configuration Files\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#5-quick-start-for-beginners\"\u003e\u003ci\u003e\u003cb\u003e5. Quick Start (For Beginners)\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#51-step-1-clone-the-repository\"\u003e5.1. Step 1: Clone the Repository\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#52-step-2-run-the-installation-script\"\u003e5.2. Step 2: Run the Installation Script\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#6-what-happens-during-installation\"\u003e\u003ci\u003e\u003cb\u003e6. What Happens During Installation?\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#61-example-installation-output\"\u003e6.1. Example Installation Output:\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#7-understanding-the-components\"\u003e\u003ci\u003e\u003cb\u003e7. Understanding the Components\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#71-shell-configuration-shell\"\u003e7.1. Shell Configuration (`shell/`)\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#72-git-configuration-git\"\u003e7.2. Git Configuration (`git/`)\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#73-vim-configuration-vim\"\u003e7.3. Vim Configuration (`vim/`)\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#74-miscellaneous-misc\"\u003e7.4. Miscellaneous (`misc/`)\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#8-customizing-your-dotfiles\"\u003e\u003ci\u003e\u003cb\u003e8. Customizing Your Dotfiles\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#81-adding-a-new-configuration-file\"\u003e8.1. Adding a New Configuration File\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#82-modifying-existing-configurations\"\u003e8.2. Modifying Existing Configurations\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#9-troubleshooting\"\u003e\u003ci\u003e\u003cb\u003e9. Troubleshooting\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#91-permission-denied-error\"\u003e9.1. \"Permission Denied\" Error\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#92-command-not-found-after-installation\"\u003e9.2. \"Command Not Found\" After Installation\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#93-want-to-restore-original-files\"\u003e9.3. Want to Restore Original Files?\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#94-remove-all-dotfiles-links\"\u003e9.4. Remove All Dotfiles Links\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ca href=\"#10-learning-more\"\u003e\u003ci\u003e\u003cb\u003e10. Learning More\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\u003c/summary\u003e\n  \u003cdiv\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#101-understanding-symbolic-links\"\u003e10.1. Understanding Symbolic Links\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#102-version-control-your-changes\"\u003e10.2. Version Control Your Changes\u003c/a\u003e\u003cbr\u003e\n    \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#103-sharing-your-dotfiles\"\u003e10.3. Sharing Your Dotfiles\u003c/a\u003e\u003cbr\u003e\n  \u003c/div\u003e\n\u003c/details\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#11-next-steps\"\u003e\u003ci\u003e\u003cb\u003e11. Next Steps\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#12-contributing\"\u003e\u003ci\u003e\u003cb\u003e12. Contributing\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#13-contact-information\"\u003e\u003ci\u003e\u003cb\u003e13. Contact Information\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#14-license\"\u003e\u003ci\u003e\u003cb\u003e14. License\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n\u003cdiv\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"#15-acknowledgments\"\u003e\u003ci\u003e\u003cb\u003e15. Acknowledgments\u003c/b\u003e\u003c/i\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u0026nbsp;\n\n---\n\n# 1. About This Repository\n\nThis repository provides a comprehensive, beginner-friendly dotfiles management system designed to help developers quickly set up and maintain a consistent development environment across multiple machines. The project aims to solve the common problem of losing custom configurations when switching computers or reinstalling operating systems.\n\n## 1.1. Who Is This Tutorial For?\n\nThis tutorial is designed for developers at various skill levels, with content structured to accommodate different experience levels and learning goals.\n\n**Students and New Developers**\n\n- Computer science students learning about development environment management\n- Bootcamp graduates transitioning to professional development workflows\n- Self-taught programmers looking to improve their development setup\n- Anyone new to the concept of dotfiles and configuration management\n\n**Working Professionals**\n\n- Developers who work on multiple machines and need consistent setups\n- Team leads who want to standardize development environments across their team\n- Freelancers who frequently switch between client projects and machines\n- DevOps engineers looking to streamline developer onboarding processes\n\n**Experienced Developers**\n\n- Developers familiar with dotfiles who want a well-organized, educational reference\n- System administrators who need to understand modern dotfile management practices\n- Open-source contributors who want to improve their development workflow documentation\n\n## 1.2. What Will You Learn?\n\nBy following this tutorial, you will gain comprehensive knowledge and practical skills in development environment management:\n\n**Understanding Dotfiles**\n\n- What dotfiles are and why they're essential for developers\n- The role of hidden files in Unix-like systems\n- How configuration files control tool behavior\n- The relationship between dotfiles and development productivity\n\n**Symbolic Links and File System Management**\n\n- How symbolic links work and their advantages over regular files\n- File system concepts relevant to dotfile management\n- Understanding the difference between hard links and symbolic links\n- Best practices for organizing configuration files\n\n**Automation and Scripting**\n\n- Creating robust installation scripts with error handling\n- Implementing backup strategies that prevent data loss\n- Writing cross-platform compatible shell scripts\n- Understanding script execution permissions and security\n\n**Shell Configuration Mastery**\n\n- Customizing bash and zsh for maximum productivity\n- Creating useful aliases and functions for common tasks\n- Managing environment variables and PATH settings\n- Understanding shell startup sequences and configuration loading\n\n**Tool-Specific Configuration**\n\n- Git configuration: aliases, user settings, and global preferences\n- Vim/Neovim customization: key mappings, plugins, and themes\n- Terminal and readline configuration for improved editing\n- Cross-tool integration and workflow optimization\n\n## 1.3. Prerequisites\n\nThe prerequisites vary significantly based on your current experience level:\n\n**For users familiar with dotfiles and shell scripting:**\n\n- Jump directly to customization and start modifying configurations in the respective directories\n- Focus on the installation script to understand the backup and linking mechanisms\n- Extend the system by adding your own configurations and modifying the installation process\n\n**For users experienced with shell but new to dotfiles:**\n\n- Start with the \"What are dotfiles?\" section to understand the fundamental concepts and benefits\n- Review the installation process focusing on understanding symbolic links and backup strategies\n- Explore existing configurations to understand their purpose\n- Reference the troubleshooting section for common issues and solutions\n\n**For complete beginners:**\n\n- Begin with basic concepts by reading through sections 1-3 to understand what dotfiles are and why they're useful\n- Follow the Quick Start guide using the step-by-step installation process exactly as written\n- Learn incrementally by starting with basic configurations and gradually adding complexity\n- Use the troubleshooting section to reference common issues as they arise\n- Practice with safe modifications by beginning with simple aliases before making complex changes\n\n## 1.4. Project Structure\n\n```\nFolder PATH listing\n+---backups                    \u003c-- Automatic backups of your original files\n│       +---20250905_113445   \u003c-- Timestamped backup directory\n│\n+---git                        \u003c-- Git configuration (aliases, settings)\n│\n+---images                     \u003c-- Contains project images and assets\n│       banner.png             \u003c-- Project banner image\n│       banner.png…            \u003c-- Windows zone identifier file\n│\n+---misc                       \u003c-- Miscellaneous tool configurations\n│\n+---shell                      \u003c-- Shell configurations (bash, zsh)\n│\n+---vim                        \u003c-- Vim editor configuration\n│\n        install.sh             \u003c-- Automated installation script\n        README.md              \u003c-- Project documentation\n```\n\n# 2. What are dotfiles?\n\nDotfiles are hidden configuration files (they start with a dot `.`) that customize your development environment. Think of them as your personal settings for tools like your shell, text editor, and version control system.\n\n# 3. Why Use Dotfiles?\n\nAs a developer, you probably work on multiple machines or reinstall your system occasionally. Without dotfiles, you'd have to manually recreate all your customizations every time. Dotfiles solve this by:\n\n- **Consistency**: Same environment across all your machines\n- **Speed**: One command to set up your entire development environment\n- **Learning**: Track and version control your configuration changes\n- **Backup**: Never lose your carefully crafted settings again\n\n# 4. What's Inside This Repository\n\n## 4.1. Project Structure Overview\n\nThis repository is organized into logical directories, each containing specific types of configuration files. The modular structure makes it easy to understand, customize, and maintain your dotfiles.\n\n## 4.2. Complete Directory Structure\n\n```\nFolder PATH listing\n+---backups                    \u003c-- Automatic backups of your original files\n│       +---20250905_113445   \u003c-- Timestamped backup directory\n│\n+---git                        \u003c-- Git configuration (aliases, settings)\n│\n+---images                     \u003c-- Contains project images and assets\n│       banner.png             \u003c-- Project banner image\n│       banner.png…            \u003c-- Windows zone identifier file\n│\n+---misc                       \u003c-- Miscellaneous tool configurations\n│\n+---shell                      \u003c-- Shell configurations (bash, zsh)\n│\n+---vim                        \u003c-- Vim editor configuration\n│\n        install.sh             \u003c-- Automated installation script\n        README.md              \u003c-- Project documentation\n```\n\n## 4.3. Detailed Directory Breakdown\n\n### 4.3.1. Root Directory\n\n```\nFolder PATH listing\n        install.sh             \u003c-- Automated installation script\n        README.md              \u003c-- Project documentation\n```\n\n**Purpose**: Contains the main installation script and project documentation.\n\n**Key Files**:\n\n- `install.sh`: The automated installation script that handles backup creation, symbolic link creation, and error handling\n- `README.md`: Comprehensive documentation explaining the project, installation process, and customization options\n\n### 4.3.2. Backups Directory\n\n```\nFolder PATH listing\n+---20250905_113445           \u003c-- Timestamped backup directory\n│\n```\n\n**Purpose**: Stores automatic backups of your original configuration files before installation.\n\n**Key Features**:\n\n- Timestamped directories (format: YYYYMMDD_HHMMSS)\n- Preserves your original configurations safely\n- Allows easy restoration if needed\n- Created automatically during installation\n\n### 4.3.3. Git Directory\n\n```\nFolder PATH listing\n        (empty - ready for git config files)\n```\n\n**Purpose**: Contains Git configuration files for version control customization.\n\n**Intended Files**:\n\n- `.gitconfig`: Global Git settings, user information, aliases, and preferences\n- `.gitignore_global`: Global ignore patterns for all Git repositories\n- `.gitattributes`: Global Git attributes for consistent line endings and file handling\n\n### 4.3.4. Images Directory\n\n```\nFolder PATH listing\n        banner.png             \u003c-- Project banner image\n│       banner.png…            \u003c-- Windows zone identifier file\n```\n\n**Purpose**: Contains project assets and documentation images.\n\n**Files**:\n\n- `banner.png`: Project banner image used in documentation\n- `banner.png…`: Windows zone identifier file (system-generated)\n\n### 4.3.5. Misc Directory\n\n```\nFolder PATH listing\n        (empty - ready for miscellaneous config files)\n```\n\n**Purpose**: Contains miscellaneous tool configurations that don't fit into other categories.\n\n**Intended Files**:\n\n- `.inputrc`: Readline configuration for command-line editing\n- `.tmux.conf`: Terminal multiplexer configuration\n- `.ssh/config`: SSH client configuration\n- `.curlrc`: cURL configuration\n- `.wgetrc`: Wget configuration\n\n### 4.3.6. Shell Directory\n\n```\nFolder PATH listing\n        (empty - ready for shell config files)\n```\n\n**Purpose**: Contains shell-specific configuration files for command-line customization.\n\n**Intended Files**:\n\n- `.bashrc`: Bash shell configuration (aliases, functions, environment variables)\n- `.zshrc`: Zsh shell configuration (if using zsh)\n- `.profile`: Login shell configuration (runs when you log in)\n- `.bash_logout`: Commands to run when you log out\n- `.bash_aliases`: Separate file for shell aliases\n- `.bash_functions`: Separate file for shell functions\n\n### 4.3.7. Vim Directory\n\n```\nFolder PATH listing\n        (empty - ready for vim config files)\n```\n\n**Purpose**: Contains Vim/Neovim editor configuration files.\n\n**Intended Files**:\n\n- `.vimrc`: Main Vim configuration file\n- `.viminfo`: Vim's command and search history\n- `.vim/`: Directory for Vim plugins and additional configuration\n- `init.vim`: Neovim configuration file (alternative to .vimrc)\n\n## 4.4. Configuration File Purposes\n\n| Directory          | Purpose                         | Key Configuration Files               | What They Control                                                             |\n| ------------------ | ------------------------------- | ------------------------------------- | ----------------------------------------------------------------------------- |\n| **shell/**   | Shell behavior and productivity | `.bashrc`, `.zshrc`, `.profile` | Command aliases, environment variables, shell functions, prompt customization |\n| **git/**     | Version control workflow        | `.gitconfig`, `.gitignore_global` | User settings, aliases, merge tools, global ignore patterns                   |\n| **vim/**     | Text editor customization       | `.vimrc`, `.viminfo`              | Key mappings, plugins, syntax highlighting, editor behavior                   |\n| **misc/**    | Other development tools         | `.inputrc`, `.tmux.conf`          | Command-line editing, terminal multiplexing, SSH settings                     |\n| **backups/** | Safety and recovery             | Timestamped directories               | Original file preservation, easy restoration                                  |\n\n## 4.5. File Organization Principles\n\n**Modular Design**: Each directory contains related configuration files, making it easy to understand and maintain.\n\n**Symbolic Linking**: The installation script creates symbolic links from your home directory to files in this repository, allowing you to edit configurations in one place.\n\n**Version Control**: All configuration files are tracked in Git, allowing you to version control your development environment.\n\n**Safe Installation**: Automatic backups ensure your original configurations are never lost during installation.\n\n**Cross-Platform**: The structure works consistently across Linux, macOS, and Windows (WSL).\n\n## 4.6. Adding New Configuration Files\n\nWhen adding new configuration files to this repository:\n\n1. **Choose the appropriate directory** based on the tool or purpose\n2. **Follow naming conventions** (use dot prefix for hidden files)\n3. **Update the installation script** to include the new file\n4. **Test the installation** to ensure the new file is properly linked\n5. **Document the purpose** of the new configuration in this README\n\n**Example**: To add a new shell alias file:\n\n```bash\n# Create the file in the shell directory\ntouch ~/.dotfiles/shell/.bash_aliases\n\n# Add content to the file\necho \"alias ll='ls -la'\" \u003e\u003e ~/.dotfiles/shell/.bash_aliases\n\n# Update install.sh to include the new file\n# Add: link_file \"$DOTFILES_DIR/shell/.bash_aliases\" \"$HOME/.bash_aliases\"\n```\n\n# 5. Quick Start (For Beginners)\n\n## 5.1. Step 1: Clone the Repository\n\n```bash\n# Navigate to your home directory\ncd ~\n\n# Clone this repository (replace with your actual repository URL)\ngit clone https://github.com/yourusername/dotfiles.git ~/.dotfiles\n```\n\n## 5.2. Step 2: Run the Installation Script\n\n```bash\n# Navigate to the dotfiles directory\ncd ~/.dotfiles\n\n# Make the script executable\nchmod +x install.sh\n\n# Run the installation\n./install.sh\n```\n\n**That's it!** Your dotfiles are now installed.\n\n# 6. What Happens During Installation?\n\nThe installation script does several important things:\n\n1. **Creates a backup**: Your original configuration files are safely backed up with a timestamp\n2. **Creates symbolic links**: Links your home directory files to the dotfiles in this repository\n3. **Preserves existing links**: Won't overwrite if already properly linked\n4. **Provides feedback**: Shows you exactly what's happening with colored output\n\n## 6.1. Example Installation Output:\n\n```\nStarting dotfiles installation...\nBackup directory: /home/username/dotfiles/backups/20240115_143022\n\nSetting up shell files...\nLinking /home/username/dotfiles/shell/.bashrc to /home/username/.bashrc\nLinking /home/username/dotfiles/shell/.zshrc to /home/username/.zshrc\n\nSetting up git files...\nLinking /home/username/dotfiles/git/.gitconfig to /home/username/.gitconfig\n\nInstallation complete!\nBackup of your original dotfiles can be found in /home/username/dotfiles/backups/20240115_143022\n```\n\n# 7. Understanding the Components\n\n## 7.1. Shell Configuration (`shell/`)\n\nYour shell is the command-line interface you use. These files customize how it behaves:\n\n- **`.bashrc`**: Bash shell configuration (aliases, functions, environment variables)\n- **`.zshrc`**: Zsh shell configuration (if you use zsh instead of bash)\n- **`.profile`**: Login shell configuration (runs when you log in)\n- **`.bash_logout`**: Commands to run when you log out\n\n## 7.2. Git Configuration (`git/`)\n\nGit is version control software. These files customize how Git behaves:\n\n- **`.gitconfig`**: Git settings, aliases, and user information\n- **`.gitignore_global`**: Files to ignore globally across all Git repositories\n\n## 7.3. Vim Configuration (`vim/`)\n\nVim is a powerful text editor. These files customize its behavior:\n\n- **`.vimrc`**: Vim settings, key mappings, and plugin configurations\n- **`.viminfo`**: Vim's command and search history\n\n## 7.4. Miscellaneous (`misc/`)\n\nOther useful configurations:\n\n- **`.inputrc`**: Readline settings (affects command-line editing in many programs)\n\n# 8. Customizing Your Dotfiles\n\n## 8.1. Adding a New Configuration File\n\n1. **Create the file** in the appropriate directory:\n\n   ```bash\n   # For example, to add a new shell alias\n   echo \"alias ll='ls -la'\" \u003e\u003e ~/.dotfiles/shell/.bashrc\n   ```\n2. **Update the installation script** to include your new file:\n\n   ```bash\n   # Add this line to install.sh in the appropriate section\n   link_file \"$DOTFILES_DIR/shell/.your_new_file\" \"$HOME/.your_new_file\"\n   ```\n3. **Re-run the installation**:\n\n   ```bash\n   ./install.sh\n   ```\n\n## 8.2. Modifying Existing Configurations\n\nSimply edit the files in the dotfiles directory:\n\n```bash\n# Edit your bash configuration\nnano ~/.dotfiles/shell/.bashrc\n\n# Edit your git configuration\nnano ~/.dotfiles/git/.gitconfig\n```\n\nChanges take effect immediately for most configurations!\n\n# 9. Troubleshooting\n\n## 9.1. \"Permission Denied\" Error\n\n```bash\n# Make the script executable\nchmod +x install.sh\n```\n\n## 9.2. \"Command Not Found\" After Installation\n\n```bash\n# Restart your shell or source your configuration\nsource ~/.bashrc\n# or\nexec bash\n```\n\n## 9.3. Want to Restore Original Files?\n\n```bash\n# Find your backup directory\nls ~/.dotfiles/backups/\n\n# Copy files back from backup (example)\ncp ~/.dotfiles/backups/20240115_143022/.bashrc ~/.bashrc\n```\n\n## 9.4. Remove All Dotfiles Links\n\n```bash\n# This will remove all symbolic links created by the installation\nfind ~ -maxdepth 1 -type l -exec rm {} \\;\n```\n\n# 10. Learning More\n\n## 10.1. Understanding Symbolic Links\n\nThe installation script creates symbolic links (symlinks). Think of them as shortcuts:\n\n- Your actual configuration files live in `~/.dotfiles/`\n- Your home directory has \"shortcuts\" pointing to these files\n- When you edit `~/.bashrc`, you're actually editing `~/.dotfiles/shell/.bashrc`\n\n## 10.2. Version Control Your Changes\n\n```bash\n# After making changes, commit them\ncd ~/.dotfiles\ngit add .\ngit commit -m \"Add new alias for project navigation\"\ngit push origin main\n```\n\n## 10.3. Sharing Your Dotfiles\n\nYour dotfiles are now in a Git repository! You can:\n\n- Share them with teammates\n- Access them from any machine\n- Track changes over time\n- Collaborate on improvements\n\n# 11. Next Steps\n\n1. **Explore the configurations**: Look at the files in each directory to understand what they do\n2. **Customize to your needs**: Add your own aliases, settings, and preferences\n3. **Learn the tools**: Understanding bash, git, and vim will make you more productive\n4. **Share and collaborate**: Consider contributing to open-source dotfiles projects\n\n# 12. Contributing\n\nFound a bug or want to improve something? Great! We welcome contributions from developers of all skill levels.\n\n## Quick Start for Contributors\n\n1. **Fork this repository** by clicking the \"Fork\" button\n2. **Clone your fork** and create a new branch for your changes\n3. **Make your changes** and test them thoroughly\n4. **Submit a pull request** using our template\n\n## Getting Help\n\n- **Bug reports**: Use our [bug report template](.github/ISSUE_TEMPLATE/bug_report.md)\n- **Feature requests**: Use our [feature request template](.github/ISSUE_TEMPLATE/feature_request.md)\n- **Contributing guidelines**: See our [CONTRIBUTING.md](.github/CONTRIBUTING.md) for detailed information\n- **Pull requests**: Use our [PR template](.github/pull_request_template.md)\n\n## Types of Contributions We Welcome\n\n- **Configuration improvements**: Better aliases, functions, or settings\n- **Documentation**: Better explanations, examples, or troubleshooting guides\n- **Installation script**: Error handling, cross-platform support, or new features\n- **Bug fixes**: Solutions for installation or configuration issues\n\nFor detailed information about contributing, please read our [Contributing Guidelines](.github/CONTRIBUTING.md).\n\n# 13. Contact Information\n\nFor questions not addressed in the resources above, please connect with [Mostafa Rezaee](https://www.linkedin.com/in/mostafa-rezaee/) on LinkedIn for personalized assistance.\n\n# 14. License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n# 15. Acknowledgments\n\nInspired by the amazing dotfiles community and various repositories that helped shape this setup.\n\n---\n\n**Happy coding!** Remember: the best dotfiles are the ones that work for you. Don't be afraid to experiment and customize!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0-mostafa-rezaee-0%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0-mostafa-rezaee-0%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0-mostafa-rezaee-0%2Fdotfiles/lists"}