{"id":16954300,"url":"https://github.com/lavoiesl/dotfiles-builder","last_synced_at":"2025-04-11T21:51:49.285Z","repository":{"id":2982820,"uuid":"3998737","full_name":"lavoiesl/dotfiles-builder","owner":"lavoiesl","description":"Compile several dotfiles using configurations and doing some tests only once.","archived":false,"fork":false,"pushed_at":"2025-03-24T13:36:13.000Z","size":151,"stargazers_count":16,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T21:51:47.125Z","etag":null,"topics":["bashrc","dotfiles","dotfiles-builder","shell","tmux-conf","zsh","zshrc"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lavoiesl.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}},"created_at":"2012-04-11T21:52:55.000Z","updated_at":"2025-04-09T10:09:19.000Z","dependencies_parsed_at":"2025-02-20T03:43:56.890Z","dependency_job_id":null,"html_url":"https://github.com/lavoiesl/dotfiles-builder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lavoiesl%2Fdotfiles-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lavoiesl%2Fdotfiles-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lavoiesl%2Fdotfiles-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lavoiesl%2Fdotfiles-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lavoiesl","download_url":"https://codeload.github.com/lavoiesl/dotfiles-builder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248487733,"owners_count":21112188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bashrc","dotfiles","dotfiles-builder","shell","tmux-conf","zsh","zshrc"],"created_at":"2024-10-13T22:09:22.383Z","updated_at":"2025-04-11T21:51:49.254Z","avatar_url":"https://github.com/lavoiesl.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles Builder\n\nCompiles `.zshrc` and `.bashrc` using configurations and doing some tests only once.\n\nFor example:\n\n  * Concatenate some paths in $PATH only if directory exists and is not already in $PATH\n  * Add aliases using easy file structure with auto-escaping\n  * Determine best locale based on available locales\n  * Determine best $EDITOR/$VISUAL\n  * etc.\n\nThe goal is to optimize files like `.bashrc` and `.gitconfig` to only include what works for this specific computer.\n\nExpensive checks can be done like looping through a lot of choices or even doing a `locate my-program`\nbecause the `.bashrc` is compiled once, not everytime you start a new shell.\n\nWill auto-detect the presence of many tools and configure accordingly:\n\n  * bash\n  * boot2docker\n  * docker\n  * git\n    * diff-so-fancy\n    * diffmerge\n    * Kaleidoscope\n  * homebrew\n  * mysql\n  * npm\n  * php\n  * rvm\n  * screen\n  * tmux\n    * battery-status\n    * temperature\n  * vagrant\n  * zsh\n    * oh-my-zsh\n\n## Usage\n\n```bash\n./install.sh # installs it in your home\n./install.sh /tmp/whatever # installs it in another folder\n```\n\nSee [examples/](examples/) for a list of generated files.\n\nIf you modify your installation or your settings, re-run the build script.\n\n## Configuration\n\nA folder will be created in `$DOTFILES_INSTALL_PATH/.dotfiles-config`\n\n### Variables\n\n`~/.dotfiles-config/vars` override calculated variables\n\n  * Filename must be the variable’s name\n  * Content must be the variable’s value\n  * Custom variables also supported\n\n### SSH\n\n  Parsed from `$HOME`.\n\n## Documentation\n\nFunctions in [lib.sh](lib.sh) are always available.\n\n### [`.bashrc` / `.zshrc`](rc)\n\nAll the main scripts are here, for zsh and bash, it will also include the file in the appropriate folder\n\n  * Each script must output its part.\n  * A comment will be added before each part saying which script it is from.\n  * Files are sorted as if they were all in the same directory.\n\n### [`aliases`](aliases)\n\n  * Each script must output the value of the alias.\n  * Each script must be named as the name of the alias and end with `.sh`.\n\n### [`paths`](paths)\n\n  * Each script must output the value of the path.\n  * Each outputted path will be tested for existence, no need to do it.\n  * Files with the highest number will be prepended last so it will have the highest precedence.\n  * The current `$PATH` will be appended (but will be removed if not existent).\n  * Duplicates will be removed.\n  * You can add custom generators in `$DOTFILES_INSTALL_PATH/.dotfiles-config/paths`.\n\n### [`variables`](variables)\n\n  * Generates a `export VAR=\"value\"` for each variable.\n  * Each script must output the value of the variable.\n  * Files in `variables` must be named as the name of the variable and end with `.sh`.\n  * Folders in `variables` must be named as the name of the variable and end with `.d`. For folders, the first script to output something will be kept.\n\n### [`configure`](configure)\n\n  * Scripts that are ran when using `./configure.sh`\n  * Will create configuration files in `$DOTFILES_INSTALL_PATH/.dotfiles-config`.\n\n### [`dotfiles`](dotfiles)\n\n  * Each file will be copied to the destination.\n  * Folders must have a `_generate.sh`, it will the executed and its output will be used to generate a file named like the folder.\n\n\n#### [`.gitconfig`](dotfiles/.gitconfig.dist)\n\n  * Creates a `~/.gitconfig.dist`, which gets included from `~/.gitconfig`.\n  * Contains many [aliases](dotfiles/.gitconfig.dist/alias) and auto-detected features.\n\n## Todo\n\n  * Add config files\n    * Editor preferences\n    * Name, email, etc.\n    * $PS1\n    * Multiplexer\n  * Remove dependency to `ruby` for `realpath`\n  * Investigate more common practices for dotfiles\n    * Investigate https://github.com/mathiasbynens/dotfiles\n  * Add documentation for configuration options\n\n## Author\nSébastien Lavoie (github@lavoie.sl)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flavoiesl%2Fdotfiles-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flavoiesl%2Fdotfiles-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flavoiesl%2Fdotfiles-builder/lists"}