{"id":18712757,"url":"https://github.com/apexskier/dotfiles","last_synced_at":"2025-04-12T11:54:16.534Z","repository":{"id":45389053,"uuid":"249007141","full_name":"apexskier/dotfiles","owner":"apexskier","description":"apexskier's computer configuration","archived":false,"fork":false,"pushed_at":"2024-05-02T21:15:23.000Z","size":2439,"stargazers_count":15,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-26T06:41:44.287Z","etag":null,"topics":["bash","configuration","defaults","docker-image","dotfiles","git","macos","macos-configuration","vim"],"latest_commit_sha":null,"homepage":"","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/apexskier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2020-03-21T15:42:58.000Z","updated_at":"2024-05-02T21:15:26.000Z","dependencies_parsed_at":"2024-05-02T21:25:04.156Z","dependency_job_id":"7653949d-cecf-4bdc-8efa-d44e14406b21","html_url":"https://github.com/apexskier/dotfiles","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/apexskier%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apexskier%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apexskier%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apexskier%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apexskier","download_url":"https://codeload.github.com/apexskier/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248565052,"owners_count":21125415,"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":["bash","configuration","defaults","docker-image","dotfiles","git","macos","macos-configuration","vim"],"created_at":"2024-11-07T12:43:40.340Z","updated_at":"2025-04-12T11:54:16.511Z","avatar_url":"https://github.com/apexskier.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cameron Little's dotfiles\n\nThis was original forked from [@holman's dotfiles](https://github.com/holman/dotfiles),\nbut due to some limitations of forked repositories on GitHub I've unforked.\n\nI'm using a variation of his system to organize and propagate my configurations\nacross machines. The actual contents were inspired from a multitude of sources\nwhich I've tried to attribute inline.\n\n## Setup\n\nRun this:\n\n```sh\ngit clone https://github.com/apexskier/dotfiles.git ~/.dotfiles\ncd ~/.dotfiles\n./script/bootstrap\n```\n\nThis will symlink the appropriate files in `.dotfiles` to your home directory\nand configure your machine, which may require your input. Everything is\nconfigured and tweaked within that `~/.dotfiles` folder.\n\nIt adds a `dotfiles` command to your `PATH` to manage your dotfiles.\n\nRun `dotfiles` periodically to keep everything up to date.\n\nRun `dotfiles --install` to run system-level installers for various tools. This\nwill take a while, so it's not automatic.\n\nRun `dotfiles --edit` to open your dotfiles for editing.\n\n## What's inside\n\nA lot of stuff. Seriously, a lot of stuff. Check them out in the file browser\nabove and see what components may mesh up with you.\n[Fork it](https://github.com/apexskier/dotfiles/fork), remove what you don't\nuse, and build on what you do use.\n\nEverything's built around topic areas. If you're adding a new area to your\nforked dotfiles — say, \"SNOBOL\" — you can simply add a `snobol` directory and\nput files in there.\n\nThere's a few special files and file types in the hierarchy.\n\n- **bin/**: Anything in `bin/` will get added to your `$PATH` and be made\n  available everywhere.\n- **\\*.symlink**: Any file ending in `*.symlink` gets symlinked into your\n  `$HOME`. This keeps these versioned in your dotfiles while letting them be\n  autoloaded by various programs from your home directory. These are symlinked\n  when you run `script/bootstrap`.\n- **\\*.bash**: Files ending in `*.bash` gets sourced into bash (I use bash 5).\n  This lets you split up your bash configuration into more logical, topic based\n  chunks.\n- **appsupport**: This is a map of files that should be linked to macOS's\n  application support directory. This is useful for programs like VSCode that\n  use this config location.\n  \n## macOS configuration\n\nI've got most of my must-have applications auto-installed through homebrew and\nhave some utilities to automatically update the config. See\n[`./homebrew`](./homebrew).\n\nI also have a system for automatically syncing macOS system and application\nconfiguration. See [`./macos/defaults`](./macos/defaults/README.md).\n\n## Bash prompt\n\nMy bash prompt attempts to balance between minimalism, information, and aesthetics.\n\nThe prompt adapts to the context of the current environment and directory. Along with the standard user, hostname, and directory information the prompt also indicates:\n\n* connected over ssh\n* git branch\n* go version\n* in docker container\n* kubernetes context\n* nodejs version\n* readonly cwd\n* root user\n\nI use some concurrency to improve the speed of collecting this information.\n\nThe prompt is prefixed with the ❯ character, which I feel makes it less likely that a copy/paste will lead to running something unexpectedly.\n\nThe informational and input parts of the prompt are split between two lines. This makes the current command and command history easier to read and copy, since commands are less likely to wrap.\n\n```\nusername@hostname:/current/working/directory (extra) (information)\n❯ \n```\n\nI make heavy use of readline's [`.inputrc`](./bash/inputrc.symlink) to make it easier to edit and rerun commands.\n\nFailed commands will show their exit code, translated into a more human readable form.\n\n## Docker image\n\nA github action maintains a\n[docker image](https://github.com/apexskier/dotfiles/packages/158802) I use to\n[quickly debug docker and kubernetes with a familiar shell and debugging tools](https://camlittle.com/posts/2021-06-24-docker-toolbox/).\n\nOn `dotfiles --install`, it's tagged locally as `toolbox` and can be started with\n`docker run --rm -it toolbox`.\n\nTo run in a docker network named `my_network`:\n\n```sh\ndocker run --rm -it --network=my_network toolbox\n```\n\nTo try it somewhere else, run\n\n```sh\ndocker run --rm -it ghcr.io/apexskier/dotfiles/toolbox:latest\n```\n\nIt's also [available in docker hub as `apexskier/toolbox`](https://hub.docker.com/r/apexskier/toolbox).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapexskier%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapexskier%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapexskier%2Fdotfiles/lists"}