{"id":22727171,"url":"https://github.com/jekwwer/dotfiles","last_synced_at":"2026-05-21T22:12:30.496Z","repository":{"id":298937739,"uuid":"887844017","full_name":"Jekwwer/dotfiles","owner":"Jekwwer","description":"Personal dotfiles for quickly bootstrapping GitHub Codespaces‑based development environments.","archived":false,"fork":false,"pushed_at":"2025-11-16T07:35:27.000Z","size":468,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T06:11:31.471Z","etag":null,"topics":["automation","codespaces","commit-message-generator","dotfiles","git","shell"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Jekwwer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null}},"created_at":"2024-11-13T11:36:27.000Z","updated_at":"2025-06-15T19:19:10.000Z","dependencies_parsed_at":"2025-06-13T18:41:22.695Z","dependency_job_id":null,"html_url":"https://github.com/Jekwwer/dotfiles","commit_stats":null,"previous_names":["jekwwer/dotfiles"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Jekwwer/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jekwwer","download_url":"https://codeload.github.com/Jekwwer/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32035276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["automation","codespaces","commit-message-generator","dotfiles","git","shell"],"created_at":"2024-12-10T17:10:20.308Z","updated_at":"2026-05-21T22:12:30.489Z","avatar_url":"https://github.com/Jekwwer.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dotfiles\n\nPersonal development environment configuration for Linux/Codespaces and macOS.\n\n## Features ✨\n\n- **Shell Configuration**:\n  - **`.shell_common`**: Shared aliases, functions, and environment variables sourced by both shells.\n  - **`.bashrc`** (Linux/Codespaces): Bash-specific history, completions, and prompt.\n  - **`.zshrc`** (macOS): Zsh-specific history, options, and prompt.\n- **Editor Configuration** (`.editorconfig`): Enforces consistent coding styles for various file types.\n- **Git Configuration** (`.gitattributes_global`, `.gitconfig`, `.gitignore_global`, `.gitmessage`, `keys/signing.pub`):\n  Standardized settings, improved workflows, commit message templates, and SSH commit signing.\n- **Curl Configuration** (`.curlrc`): Enhanced `curl` settings for security, performance, and usability.\n- **Wget Configuration** (`.wgetrc`): Enhanced `wget` settings for reliability, security, and convenience.\n- **Login Banner Suppression** (`.hushlogin`): Hides the `Last login: ...` banner (and MOTD on PAM-configured\n  Linux/Codespaces) on login shells.\n- **Scripts**:\n  - **`install.sh`**: A setup script for linking dotfiles and preparing the environment.\n  - **`prune-cspell-words`**: Remove stale words from a `cspell.json` words list.\n\n## License 🛡️\n\nThis project is released under the [MIT License][LICENSE].\n\n## Installation 📦\n\n\u003e **Codespaces users:** If you've already set this repo as your \"dotfiles\" in your GitHub Codespaces settings, no\n\u003e further setup is required—your Codespaces environment will automatically apply these configurations.\n\n1. Clone the repository into your Codespaces or local machine:\n\n   ```bash\n   git clone https://github.com/Jekwwer/dotfiles.git ~/.dotfiles\n   ```\n\n2. Run the `install.sh` script:\n\n   ```bash\n   ~/.dotfiles/install.sh\n   ```\n\n3. Restart your terminal or apply the changes:\n\n   macOS:\n\n   ```bash\n   source ~/.zshrc\n   ```\n\n   Linux/Codespaces:\n\n   ```bash\n   source ~/.bashrc\n   ```\n\n## .bashrc\n\nBash shell config for Linux/Codespaces. Sources `.shell_common` for shared settings.\n\n- Interactive-only guard, lesspipe integration, and bash-completion setup\n- History: 5 000 in memory / 10 000 on disk, dedup, ignores trivial commands, append-only, timestamped, multi-line saved\n  as one entry\n- Shell options: `globstar`, `dirspell`, `cdspell`\n- Prompt: `user@host dir (branch)$` in color\n\n## .shell_common\n\nShared config sourced by both `.bashrc` and `.zshrc`. See [CHEATSHEET.md][CHEATSHEET.md] for the full alias and function\nreference.\n\n- Environment: `EDITOR`/`VISUAL=vim`, `PAGER=less`, `LESS=FRX`, UTF-8 locale, `~/bin` and `~/.local/bin` on `PATH`,\n  `DOCKER_CLI_HINTS=false` (no \"What's next\" prompts)\n- Navigation aliases: `..`, `...`, `....`\n- File aliases: `ll`, `la`, `l`; safe `rm`/`mv`/`cp` (with `-i`)\n- Git aliases: 21 `g*`-prefixed shortcuts covering status/commit/branch/diff/log/push/pull/rebase/stash etc. (see\n  CHEATSHEET for full list)\n- Functions: `hgrep \u003ctext\u003e` (history search), `reload` (re-source config)\n- OS-specific: `CLICOLOR`/`LSCOLORS` + `brew` update alias on macOS; `ls --color=auto` + `apt` update alias on Linux\n- `git_branch` helper used by both prompts (falls back to `(short-sha)` when detached)\n\n## .zshrc\n\nZsh shell config for macOS. Sources `.shell_common` for shared settings.\n\n- Completion: `compinit`\n- History: 5 000 in memory / 10 000 on disk, dedup-all, ignores trivial commands, shared across terminals, timestamped,\n  `!` expansion verified, blanks normalized\n- Shell options: `GLOB_STAR_SHORT`, `CORRECT`\n- Prompt: `user@host dir (branch)$` in color using `PROMPT_SUBST`\n\n## .hushlogin\n\nEmpty marker file that suppresses the `Last login: ...` banner on login shells. Existence is the flag — contents are\nignored.\n\n- macOS Terminal/iTerm: hides the last-login line shown when opening a new login shell\n- Linux/Codespaces SSH (PAM): hides last-login + MOTD via `pam_lastlog` / `pam_motd`\n- No effect on non-login interactive shells (most local terminal emulators)\n\n## .curlrc\n\n- Progress bar, follows redirects (capped at 10), retries 3× on transient errors (5xx/408/429/network — not 4xx)\n- Timeouts: 15 s connect, 120 s max (override with `--max-time 0` for large downloads)\n- TLS 1.2 floor (portable across all curl backends); schemeless URLs default to https\n- `--compressed`: requests gzip/deflate, transparently decompresses\n- `--fail-with-body`: exits non-zero on 4xx/5xx but still prints the response\n\n## .wgetrc\n\n- Retries up to 3×; timeouts: 15 s connect, 20 s read, 10 s DNS\n- Resumes partial downloads (`continue = on`)\n- Uses system CA certificates (`/etc/ssl/certs`)\n\n## .editorconfig\n\nFallback coding-style rules when a project has no `.editorconfig` of its own.\n\n- Defaults: UTF-8, LF endings, 2-space indent, trim trailing whitespace, final newline, 88-char line limit\n- Lockfiles (`*.lock`, `package-lock.json`): preserve trailing whitespace\n- Makefile: tab indent (4-size)\n- CSS/HTML/SVG: 120-char line limit\n- Markdown: 120-char limit, preserve trailing whitespace (for line breaks)\n- Python: 4-space indent\n- RST: 120-char line limit\n- Shell scripts: 4-space indent\n- Text/log files: preserve trailing whitespace\n\n## .gitattributes_global\n\nApplied globally via `core.attributesfile`. Per-repo `.gitattributes` still wins for matching patterns.\n\n- Auto-detects text + normalizes line endings; forces LF on common languages, configs, docs, shell, build files\n- Marks images, audio/video, fonts, archives, executables, packages, and databases as binary\n- SVG kept as text with markup-aware diff (`diff=html`)\n- Suppresses diffs for noisy files (`*.log`, `*.lock`, `package-lock.json`)\n- Linguist hints: lockfiles + `dist/build/coverage/` marked generated; `vendor/` marked vendored\n- Excludes temp files, editor dirs, and `node_modules/` from `git archive`\n\n## .gitconfig\n\nSee [CHEATSHEET.md][CHEATSHEET.md] for the full alias reference.\n\n- User: Evgenii Shiliaev; `~/.gitmessage` template; verbose commit editor\n- Signing: SSH-signed commits (`gpg.format = ssh`, `user.signingkey = ~/.ssh/id_ed25519_signing.pub`); local\n  verification via `~/.config/git/allowed_signers`\n- Core: `code --wait` editor, histogram diff, `less -RFX` pager, fsmonitor, untracked cache\n- Globals: sources `~/.gitignore_global` (excludesfile) and `~/.gitattributes_global` (attributesfile)\n- Credentials: macOS Keychain with `cache` fallback (1-hour timeout)\n- Diff polish: moved-code with reindent, mnemonic prefixes, copy detection\n- Workflow: rebase on pull, `autoSetupRemote`, `pushf`, `rerere`, `autoStash`, `autoSquash` of fixup commits, tags\n  follow commits on push\n- Log: abbreviated hashes, ISO dates, short decorations, custom pretty format\n- Branches sorted by most recent commit; tags sorted by version, pruned with refs on fetch\n\n## .gitignore_global\n\nApplied globally via `core.excludesfile`. Per-repo `.gitignore` adds repo-specific patterns on top.\n\nAggregated from upstream Node, Python, and Visual Studio gitignore templates:\n\n- Node.js: package managers (npm, pnpm, yarn), modern frameworks (Next/Nuxt/Sveltekit/Vite/Vuepress/etc.), build/cache\n  dirs\n- Python: byte-compiled, virtualenvs, packaging, test caches, Jupyter, pyenv/poetry/pdm\n- Visual Studio / .NET: build dirs, IDE caches, NuGet, Azure, profilers\n\n## .gitmessage\n\nConventional Commits template. Commit types that trigger a release:\n\n| Type                                       | Release |\n| ------------------------------------------ | ------- |\n| `feat`                                     | minor   |\n| `fix`, `security`, `deps`, `perf`, `build` | patch   |\n\nAppend `!` for breaking changes (`feat!:`); add `BREAKING CHANGE: \u003cdescription\u003e` as the **last footer** — nothing after\nit, or the trailing content becomes part of the changelog note.\n\n## install.sh\n\nSymlinks all dotfiles into `$HOME`. Detects OS to link `.zshrc` (macOS) or `.bashrc` (Linux/Codespaces).\n\n- Self-locating: works wherever the repo is cloned\n- Always symlinks: `.shell_common`, `.curlrc`, `.editorconfig`, `.gitattributes_global`, `.gitconfig`,\n  `.gitignore_global`, `.gitmessage`, `.hushlogin`, `.wgetrc`\n- OS-aware: `.zshrc` on macOS, `.bashrc` on Linux/Codespaces\n- Creates `~/bin/` and symlinks `scripts/prune-cspell-words` into it\n- SSH signing: symlinks `keys/signing.pub` → `~/.ssh/id_ed25519_signing.pub` and writes `~/.config/git/allowed_signers`\n  from `user.email` + pubkey; warns if `keys/signing.pub` is missing\n\n## keys/signing.pub\n\nSSH ed25519 public key used for commit signing. Private key lives on the host and is forwarded into devcontainers via\nssh-agent.\n\n- Wired up by `install.sh`: symlinked to `~/.ssh/id_ed25519_signing.pub`; `~/.config/git/allowed_signers` written from\n  `user.email` + this pubkey\n- Generate a fresh key (host-side): `ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_signing -N ''`\n- Replace `keys/signing.pub` with the new pubkey contents and commit\n- Upload to GitHub for verified-badge: `gh ssh-key add ~/.ssh/id_ed25519_signing.pub --type signing`\n\n## prune-cspell-words\n\nRemove stale words from a cspell config words list. Symlinked into `~/bin/` by `install.sh`.\n\n```\nprune-cspell-words [-c PATH] [-n] [-v]\n```\n\n- `-c / --config PATH`: path to cspell config (default: auto-detect standard JSON config in cwd — `.cspell.json`,\n  `cspell.json`, `.cSpell.json`, `cSpell.json`, or `cspell.config.json`)\n- `-n / --dry-run`: preview removals without modifying the file\n- `-v / --verbose`: print each word as it is checked\n\n## Contact 📬\n\nFor questions, reach out via [evgenii.shiliaev@jekwwer.com][evgenii.shiliaev@jekwwer.com].\n\n[LICENSE]: LICENSE\n[CHEATSHEET.md]: CHEATSHEET.md\n[evgenii.shiliaev@jekwwer.com]: mailto:evgenii.shiliaev@jekwwer.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjekwwer%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjekwwer%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjekwwer%2Fdotfiles/lists"}