{"id":19817599,"url":"https://github.com/adamelliotfields/dotfiles","last_synced_at":"2025-05-01T11:30:55.356Z","repository":{"id":157894851,"uuid":"627917991","full_name":"adamelliotfields/dotfiles","owner":"adamelliotfields","description":"Shell scripts 🐚","archived":false,"fork":false,"pushed_at":"2024-09-10T18:54:00.000Z","size":1962,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-10T21:12:40.603Z","etag":null,"topics":["bash","dotfiles","fish","shell"],"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/adamelliotfields.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":"codeowners","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-14T13:39:59.000Z","updated_at":"2024-09-10T18:54:05.000Z","dependencies_parsed_at":"2023-12-15T23:51:56.789Z","dependency_job_id":"e57035a0-612c-4b5b-9339-fe66bd001431","html_url":"https://github.com/adamelliotfields/dotfiles","commit_stats":{"total_commits":55,"total_committers":3,"mean_commits":"18.333333333333332","dds":0.2545454545454545,"last_synced_commit":"810b3321f2c503c2fbe62f8ef7086c1448d00117"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamelliotfields%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamelliotfields%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamelliotfields%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamelliotfields%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adamelliotfields","download_url":"https://codeload.github.com/adamelliotfields/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224253344,"owners_count":17280934,"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","dotfiles","fish","shell"],"created_at":"2024-11-12T10:13:06.927Z","updated_at":"2025-05-01T11:30:55.349Z","avatar_url":"https://github.com/adamelliotfields.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./dotfiles.jpg\" width=\"360\" height=\"270\" alt=\"A digital world with a shell and fish\" /\u003e\n  \u003ch1\u003e\u003ccode\u003edotfiles\u003c/code\u003e\u003c/h1\u003e\n\u003c/div\u003e\n\nSee [GitHub does dotfiles](https://dotfiles.github.io).\n\n## Features\n\n  * [`apt.sh`](./lib/apt.sh): Updates and installs Apt packages.\n  * [`btop.sh`](./lib/btop.sh): Installs btop from source for GPU monitoring.\n  * [`bun.sh`](./lib/bun.sh): Installs Bun for your OS and arch.\n  * [`chsh.sh`](./lib/chsh.sh): Sets the default shell for the current user.\n  * [`deb.sh`](./lib/deb.sh): Installs Deb packages from GitHub.\n  * [`deno.sh`](./lib/deno.sh): Installs Deno for your OS and arch.\n  * [`fish.sh`](./lib/fish.sh): Installs Fish from the fish-shell PPA.\n  * [`fnm.sh`](./lib/fnm.sh): Installs Fast Node Manager from GitHub.\n  * [`go.sh`](./lib/go.sh): Installs Go for your OS and arch.\n  * [`homebrew.sh`](./lib/homebrew.sh): Installs Homebrew for macOS.\n  * [`link.sh`](./lib/link.sh): Recursively symlinks files.\n  * [`magick.sh`](./lib/magick.sh): Installs ImageMagick from GitHub.\n  * [`nerdfont.sh`](./lib/nerdfont.sh): Installs a Nerdfont.\n  * [`rust.sh`](./lib/rust.sh): Installs Rust via Rustup for your OS and arch.\n  * [`sudoers.sh`](./lib/sudoers.sh): Adds a user to the sudoers file.\n  * [`user.sh`](./lib/user.sh): Creates a passwordless user.\n  * [`uv.sh`](./lib/uv.sh): Installs `uv` and `uvx` from GitHub.\n\n## Installation\n\n```sh\ngit clone https://gh.aef.me/dotfiles.git\n./dotfiles/install.sh\n```\n\n## Usage\n\n### Secrets\n\nAll shell *rc files source `~/.secrets` if it exists. This file should be a series of `export VAR=val` statements.\n\n### Git\n\nMost settings are in [`.config/git/config`](https://github.com/adamelliotfields/dotfiles/blob/main/shared/.config/git/config). The rest go in `~/.gitconfig`:\n\n```properties\n[user]\n\tname = \u003cyour_name\u003e\n\temail = \u003cyour_email\u003e\n\tsigningkey = \u003cyour_key\u003e\n[commit]\n\tgpgsign = true\n```\n\nSee the [`git config`](https://git-scm.com/docs/git-config#FILES) docs for how the files are resolved.\n\n#### Authentication\n\nCreate `~/.git-credentials` with:\n\n```\nhttps://\u003cyour_username\u003e:\u003cyour_token\u003e@github.com\n```\n\n### GPG\n\n_GNU Privacy Guard_ is the de facto implementation of the OpenPGP (Pretty Good Privacy) standard. This is how I use it to sign commits.\n\n#### Generate a key\n\n```sh\n# install gnupg if necessary\nsudo apt install -y gnupg\n\n# you'll be asked a few questions, respond with:\n#   1. RSA and RSA\n#   2. 4096\n#   3. 0 (does not expire)\n# then enter your full name and email address; passphrase can be left empty\ngpg --full-generate-key\n\n# this command prints the ID of the key associated with your email address\n# you can also use the fingerprint, which is a hash of the public key\ngpg --list-keys --with-colons $YOUR_EMAIL | tr ' ' '\\n' | grep '^pub' | cut -d':' -f5\n\n# the armor flag outputs ASCII (text) instead of binary (\"ASCII armor\")\n# add your email in a comment so you know what the key is for\ngpg --armor --comment $YOUR_EMAIL --export $YOUR_EMAIL \u003e your.pub.key\ngpg --armor --comment $YOUR_EMAIL --export-secret-keys $YOUR_EMAIL \u003e your.sec.key\n```\n\n#### Import a key\n\nIf you just made the key, then it is already in the keychain of the computer you made it on. Here's how to import the secret key everywhere else:\n\n```sh\ncat your.sec.key | gpg --import\n```\n\nNow you have to _trust_ the key so you can sign with it:\n\n```sh\n# get the 16-digit key ID again\nYOUR_KEY=$(gpg --list-keys --with-colons $YOUR_EMAIL | tr ' ' '\\n' | grep '^pub' | cut -d':' -f5)\n\n# enter the following:\n#   1. trust (type out the word \"trust\")\n#   2. 5\n#   3. y\n#   4. quit\ngpg --edit-key $YOUR_KEY\n```\n\n#### Sign commits\n\nPut this in `~/.gitconfig`:\n\n```properties\n[commit]\n\tgpgsign = true\n```\n\nFinally, you need to let GitHub know about your key. You can do it through the website or `gh` if you have the **GPG scope** on your token.\n\n```sh\ngh gpg-key add /path/to/your.pub.key\n```\n\n#### Windows\n\nThe steps are similar to Linux, but you need to install [Gpg4win](https://www.gpg4win.org). Here's how to get the key ID:\n\n```powershell\n$yourKey = gpg --list-keys --with-colons $yourEmail |\nWhere-Object { $_.StartsWith('pub:') } |\nForEach-Object { ($_ -split ':')[4] }\n```\n\n## Inspiration\n\n* [jessfraz/dotfiles](https://github.com/jessfraz/dotfiles)\n* [holman/dotfiles](https://github.com/holman/dotfiles)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamelliotfields%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadamelliotfields%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamelliotfields%2Fdotfiles/lists"}