{"id":24418701,"url":"https://github.com/thecodedrift/dotfiles","last_synced_at":"2025-07-13T13:35:38.835Z","repository":{"id":139335619,"uuid":"455380829","full_name":"thecodedrift/dotfiles","owner":"thecodedrift","description":"System Setup Scripts","archived":false,"fork":false,"pushed_at":"2024-12-24T18:40:05.000Z","size":11295,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-07T03:44:55.299Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thecodedrift.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-02-04T00:56:09.000Z","updated_at":"2024-12-24T18:40:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"ddd93317-f55c-4bd5-90ae-500cd5fbce64","html_url":"https://github.com/thecodedrift/dotfiles","commit_stats":null,"previous_names":["thecodedrift/dotfiles"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodedrift%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodedrift%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodedrift%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodedrift%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thecodedrift","download_url":"https://codeload.github.com/thecodedrift/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243410459,"owners_count":20286403,"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":[],"created_at":"2025-01-20T09:11:41.762Z","updated_at":"2025-03-13T13:16:27.639Z","avatar_url":"https://github.com/thecodedrift.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles (custom)\n\n- Uses `zsh` + `oh-my-posh` for the default shell\n- Installs a ton of stuff you always install anyway\n- Adds features for working in WSL/WSL2 under Windows\n- Sets a bunch of normal defaults for today's code workflows where we get nice things like GUIs\n- Based on the battle tested dotfiles scripts of [\"Cowboy\" Ben Alman](https://github.com/cowboy/dotfiles) with a few years of divergent evolution\n  - I just deleted a lot of stuff I didn't need, but the init and source logic is a thing of beauty\n\n# OSX\n\n**BEFORE YOU BEGIN**\n\nInstall XCode https://apps.apple.com/us/app/xcode/id497799835?mt=12\n\nUnfortunately, XCode is required for some older brews and it's only in the mac app store. You could install this with `mas` but older systems can't install `mas` either. So like, one manual step. I'm sorry, future me.\n\n```sh\nbash -c \"$(curl -fsSL https://raw.github.com/jakobo/dotfiles/main/bin/dotfiles)\"\n```\n\n_Tested in OSX 11.7.10_\n\n## Ubuntu / WSL\n\n```sh\nbash -c \"$(wget -qO- https://raw.github.com/jakobo/dotfiles/main/bin/dotfiles)\"\n```\n\nThe Ubuntu setup works in WSL in addition to traditional Ubuntu-land. Either way, you should at least update/upgrade APT with `sudo apt-get -qq update \u0026\u0026 sudo apt-get -qq dist-upgrade` first.\n\n_Tested in Ubuntu 24 LTS via WSL_\n\n# How the \"dotfiles\" command works\n\nWhen [dotfiles][dotfiles] is run for the first time, it does a few things:\n\n1. In Ubuntu, Git is installed if necessary via APT (it's already there in OSX).\n2. This repo is cloned into your user directory, under `~/.dotfiles`.\n3. Files in `/copy` are copied into `~/`. ([read more](#the-copy-step))\n4. Files in `/link` are symlinked into `~/`. ([read more](#the-link-step))\n5. You are prompted to choose scripts in `/init` to be executed. The installer attempts to only select relevant scripts, based on the detected OS and the script filename. Your chosen init scripts are executed (in alphanumeric order, hence the funky names). ([read more](#the-init-step))\n\nOn subsequent runs, step 1 is skipped, step 2 just updates the already-existing repo, and step 5 remembers what you selected the last time. The other steps are the same.\n\n# Tool Install Priority\n\nTools that are installed are either **versioned** and need shimming in order to switch easily, or are **unversioned** and we only install the latest version of a tool.\n\n- **versioned** tools are installed as an `asdf` plugin\n- **unversioned** (and difficult to version) tools are installed as a Homebrew / Linuxbrew\n- **unversioned and OS-specific** tools are installed using the OS's native package manager (`init/20_ubuntu_apt.sh` and `init/31_osx_core_homebrew.sh`)\n\nThere's a preference to avoid language-specific shims such as `rbenv` or `volta`. It's not that these tools are bad, but rather having a single shiming tool reduces cognitive load.\n\n## Other subdirectories\n\n- The `/backups` directory gets created when necessary. Any files in `~/` that would have been overwritten by files in `/copy` or `/link` get backed up there.\n- The `/bin` directory contains executable shell scripts (including the [dotfiles][dotfiles] script) and symlinks to executable shell scripts. This directory is added to the path.\n- The `/caches` directory contains cached files, used by some scripts or functions.\n- The `/config` directory just exists. If a config file doesn't **need** to go in `~/`, reference it from the `/config` directory instead and save some linking headaches.\n- The `/source` directory contains files that are sourced whenever a new shell is opened (in alphanumeric order, hence the funky names).\n- The `/test` directory contains unit tests for especially complicated bash functions.\n- The `/vendor` directory contains third-party libraries.\n\n## The \"copy\" step\n\nAny file or directory in the `/copy` subdirectory will be copied into `~/`. Any file that _needs_ to be modified with personal information (like [copy/.gitconfig](copy/.gitconfig) which contains an email address and private key) should be _copied_ into `~/`. Because the file you'll be editing is no longer in `~/.dotfiles`, it's less likely to be accidentally committed into your public dotfiles repo.\n\n## The \"link\" step\n\nAny file or directory in the `/link` subdirectory gets symlinked into `~/` with `ln -s`. Edit one or the other, and you change the file in both places. Don't link files containing sensitive data, or you might accidentally commit that data! If you're linking a directory that might contain sensitive data (like `~/.ssh`) add the sensitive files to your [.gitignore](.gitignore) file!\n\nThere is a dedicated `.gitignore` for the `.config` directory that ignores almost everything by default, as most tools put their config into `~/.config/\u003capp\u003e/*`.\n\n## The \"init\" step\n\nScripts in the `/init` subdirectory will be executed. A whole bunch of things will be installed, but _only_ if they aren't already.\n\n# Aliases and Functions\n\nTo keep things easy, the `~/.zshrc` file is extremely simple, and should never need to be modified. Instead, add your aliases, functions, settings, etc into one of the files in the `source` subdirectory, or add a new file. They're all automatically sourced when a new shell is opened. Take a look, I have [a lot of aliases and functions](source).\n\n# Scripts\n\nIn addition to the aforementioned [dotfiles][dotfiles] script, there are a few other [bin scripts](bin).\n\n- [dotfiles][dotfiles] - (re)initialize dotfiles. It might ask for your password (for `sudo`).\n- [src](link/.zshrc) - (re)source all files in `/source` directory\n- Look through the [bin](bin) subdirectory for a few more.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodedrift%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthecodedrift%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodedrift%2Fdotfiles/lists"}