{"id":15770517,"url":"https://github.com/benelan/dotfiles","last_synced_at":"2025-04-14T16:24:44.492Z","repository":{"id":63706866,"uuid":"326759040","full_name":"benelan/dotfiles","owner":"benelan","description":"\"Decorate your home. It gives the illusion that your life is more interesting than it really is.\"     —  Charles M. Schulz","archived":false,"fork":false,"pushed_at":"2025-04-09T01:55:07.000Z","size":4261,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-11T02:32:54.632Z","etag":null,"topics":["bash","config","dotfiles","dunst","git","i3wm","linux","mpv","mutt","neovim","rofi","swaywm","taskwarrior","tmux","ubuntu","vifm","vim","w3m","waybar","wezterm"],"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/benelan.png","metadata":{"files":{"readme":".github/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":"2021-01-04T17:30:45.000Z","updated_at":"2025-04-09T01:55:11.000Z","dependencies_parsed_at":"2024-01-04T05:24:06.280Z","dependency_job_id":"d7ee3717-00a5-4d6d-b893-c59f926fbca0","html_url":"https://github.com/benelan/dotfiles","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benelan%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benelan%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benelan%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benelan%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benelan","download_url":"https://codeload.github.com/benelan/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248915123,"owners_count":21182568,"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","config","dotfiles","dunst","git","i3wm","linux","mpv","mutt","neovim","rofi","swaywm","taskwarrior","tmux","ubuntu","vifm","vim","w3m","waybar","wezterm"],"created_at":"2024-10-04T14:42:31.350Z","updated_at":"2025-04-14T16:24:44.478Z","avatar_url":"https://github.com/benelan.png","language":"Shell","readme":"# dotfiles\n\nThis is my personal setup, **I strongly discourage using the initialization script unless you're me**. I recommend\nlooking through the files and picking bits and pieces that fit your workflows.\n\n## Setup\n\nMake sure `git` and `curl` are installed before running the dotfiles initialization script. For example, in Ubuntu:\n\n```sh\nsudo apt install -y git curl\n```\n\nThen run the dotfiles script, which installs everything into your `$HOME` directory:\n\n```sh\ncurl -sSL benelan.dev/s/dotfiles | sh\n```\n\nIf the link above dies, use the [`dot`](../.dotfiles/bin/dot) script's `init` subcommand instead:\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/benelan/dotfiles/master/.dotfiles/bin/dot | bash -s init\n```\n\nThe scripts do the same thing, but the first link is easier for me to remember and type.\n\nThe script will backup any conflicting files to `~/.dotfiles-backup`. It will set up the dotfiles as a bare git repo,\nwhich makes syncing changes easy. You can also create separate branches for different machines. Read this\n[Atlassian tutorial] for more info. A common alternative is managing dotfiles with symlinks (e.g., [GNU stow]), but in\nmy experience that can get messy.\n\n## `dot` command\n\nThe `dot` script has the following custom subcommands:\n\n- `init`: Initialize the dotfiles bare repo, as mentioned [above](#setup).\n\n- `clone`: Clone a repo to the `$LIB` directory (see [`exports.sh`](../.dotfiles/shell/exports.sh)) instead of `$PWD`.\n\n- `deps`: Install various dependencies, including development tools, GUI apps, shell scripts, fonts, themes, and more.\n  See `dot deps -h` for usage info.\n\n- `edit`: Open nvim/vim with environment variables set so git plugins work with the bare dotfiles repo.\n\nAll other subcommands and their arguments are passed to `git` with environment variables set to ensure `dot` always\nruns on the bare repo. A typical workflow for adding a new config file to the repo is:\n\n```sh\ndot add .config/xyz/config.yml\ndot commit -m \"chore(xyz): add config\"\ndot push\n```\n\nTechnically, the whole home directory is under version control. However, [`.gitignore`](../.gitignore) blacklists\neverything, and then whitelists specific directories and files. This adds an extra level of security and prevents most\nfiles from being untracked. The remaining untracked files are hidden from `dot status`, so you need to `dot add` new\nfiles/directories before they show up.\n\nGit's bash completion and the git aliases defined at the bottom of [`~/.config/git/config`](../.config/git/config) will\nalso work for `dot`.\n\n## Operating systems\n\n### Linux\n\nMy setup was primarily created for Ubuntu/Debian and their derivatives. However, I try to separate the Ubuntu-only code\nand make sure executables exist before using them. The main issue you'll face with other linux distros is missing\ndependencies, which I install with `dot deps -U` on Ubuntu. See the [apt dependency lists], although names may vary\ndepending on your distro's package manager.\n\n### macOS\n\nMac users should [switch to the GNU version] of command line utilities. I strongly suggest switching even if you don't\ncopy anything from this repo, because it will align your local development environment with production. Linux uses the\nGNU version of utils, and most servers, containers, and continuous integration runners use Linux.\n\n### Windows\n\nIt's safe to assume nothing in this repo will work on Windows. However, I occasionally need Windows for my job and can\nconfirm this setup works in [WSL running Ubuntu].\n\n## Configuration\n\nPut machine-specific stuff in `~/.profile.local` and/or `~/.bashrc.local`, both of which get sourced (if they exist) by\ntheir respective files.\n\nThe following environment variables are flags that accept a value of `1` or `0` to enabled/disable tools and other\nfunctionality.\n\n- `DESKTOP_MACHINE` - Install and use GUI tools that only work on desktop machines.\n\n- `WORK_MACHINE` - Setup the environment for work (aliases functions, etc.)\n\n- `COPILOT` - Use the GitHub Copilot plugin in Neovim.\n\n- `CODEIUM` - Use the Codeium (free Copilot alternative) plugin in Neovim.\n\n- `NERD_ICONS` - Use developer icons in Neovim/Vim/Vifm/etc. [Wezterm ships with NerdFont glyphs], so the icons are\n  displayed by default unless explicitly disabled by setting the option to `0`. If you don't use Wezterm, make sure to\n  install a [NerdFont] (e.g. `dot deps -t font`) before enabling the icons by setting the option to `1`.\n\n## Credits\n\nI learned and stole a lot from the following sources. There are credits/links in specific files as well, when relevant.\n\n- Copyright (c) 2020-2021 Bash-it `MIT` [[code](https://github.com/Bash-it/bash-it)]\n\n- Copyright (c) LazyVim `Apache License 2.0` [[code](https://github.com/LazyVim/LazyVim)]\n\n- Tom Ryder [[code](https://dev.sanctum.geek.nz/cgit/dotfiles.git/tree/)]\n\n- Seth House [[code](https://github.com/whiteinge/dotfiles)]\n\n[Atlassian tutorial]: https://www.atlassian.com/git/tutorials/dotfiles\n[GNU stow]: https://www.gnu.org/software/stow/\n[NerdFont]: https://www.nerdfonts.com/\n[WSL running Ubuntu]: https://ubuntu.com/desktop/wsl\n[Wezterm ships with NerdFont glyphs]: https://wezfurlong.org/wezterm/config/lua/wezterm/nerdfonts.html\n[apt dependency lists]: https://github.com/benelan/dotfiles/blob/4c9a56310effe37ad5f483d9d87fcff85d82ce1c/.dotfiles/bin/dot#L753-L1012\n[switch to the GNU version]: https://ryanparman.com/posts/2019/using-gnu-command-line-tools-in-macos-instead-of-freebsd-tools/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenelan%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenelan%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenelan%2Fdotfiles/lists"}