https://github.com/jekwwer/dotfiles
Personal dotfiles for quickly bootstrapping GitHub Codespaces‑based development environments.
https://github.com/jekwwer/dotfiles
automation codespaces commit-message-generator dotfiles git shell
Last synced: about 1 month ago
JSON representation
Personal dotfiles for quickly bootstrapping GitHub Codespaces‑based development environments.
- Host: GitHub
- URL: https://github.com/jekwwer/dotfiles
- Owner: Jekwwer
- License: gpl-3.0
- Created: 2024-11-13T11:36:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-11-16T07:35:27.000Z (8 months ago)
- Last Synced: 2026-04-13T06:11:31.471Z (3 months ago)
- Topics: automation, codespaces, commit-message-generator, dotfiles, git, shell
- Language: Shell
- Homepage:
- Size: 457 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# dotfiles
Personal development environment configuration for Linux/Codespaces and macOS.
## Features ✨
- **Shell Configuration**:
- **`.shell_common`**: Shared aliases, functions, and environment variables sourced by both shells.
- **`.bashrc`** (Linux/Codespaces): Bash-specific history, completions, and prompt.
- **`.zshrc`** (macOS): Zsh-specific history, options, and prompt.
- **Editor Configuration** (`.editorconfig`): Enforces consistent coding styles for various file types.
- **Git Configuration** (`.gitattributes_global`, `.gitconfig`, `.gitignore_global`, `.gitmessage`, `keys/signing.pub`):
Standardized settings, improved workflows, commit message templates, and SSH commit signing.
- **Curl Configuration** (`.curlrc`): Enhanced `curl` settings for security, performance, and usability.
- **Wget Configuration** (`.wgetrc`): Enhanced `wget` settings for reliability, security, and convenience.
- **Login Banner Suppression** (`.hushlogin`): Hides the `Last login: ...` banner (and MOTD on PAM-configured
Linux/Codespaces) on login shells.
- **Scripts**:
- **`install.sh`**: A setup script for linking dotfiles and preparing the environment.
- **`prune-cspell-words`**: Remove stale words from a `cspell.json` words list.
## License 🛡️
This project is released under the [MIT License][LICENSE].
## Installation 📦
> **Codespaces users:** If you've already set this repo as your "dotfiles" in your GitHub Codespaces settings, no
> further setup is required—your Codespaces environment will automatically apply these configurations.
1. Clone the repository into your Codespaces or local machine:
```bash
git clone https://github.com/Jekwwer/dotfiles.git ~/.dotfiles
```
2. Run the `install.sh` script:
```bash
~/.dotfiles/install.sh
```
3. Restart your terminal or apply the changes:
macOS:
```bash
source ~/.zshrc
```
Linux/Codespaces:
```bash
source ~/.bashrc
```
## .bashrc
Bash shell config for Linux/Codespaces. Sources `.shell_common` for shared settings.
- Interactive-only guard, lesspipe integration, and bash-completion setup
- History: 5 000 in memory / 10 000 on disk, dedup, ignores trivial commands, append-only, timestamped, multi-line saved
as one entry
- Shell options: `globstar`, `dirspell`, `cdspell`
- Prompt: `user@host dir (branch)$` in color
## .shell_common
Shared config sourced by both `.bashrc` and `.zshrc`. See [CHEATSHEET.md][CHEATSHEET.md] for the full alias and function
reference.
- Environment: `EDITOR`/`VISUAL=vim`, `PAGER=less`, `LESS=FRX`, UTF-8 locale, `~/bin` and `~/.local/bin` on `PATH`,
`DOCKER_CLI_HINTS=false` (no "What's next" prompts)
- Navigation aliases: `..`, `...`, `....`
- File aliases: `ll`, `la`, `l`; safe `rm`/`mv`/`cp` (with `-i`)
- Git aliases: 21 `g*`-prefixed shortcuts covering status/commit/branch/diff/log/push/pull/rebase/stash etc. (see
CHEATSHEET for full list)
- Functions: `hgrep ` (history search), `reload` (re-source config)
- OS-specific: `CLICOLOR`/`LSCOLORS` + `brew` update alias on macOS; `ls --color=auto` + `apt` update alias on Linux
- `git_branch` helper used by both prompts (falls back to `(short-sha)` when detached)
## .zshrc
Zsh shell config for macOS. Sources `.shell_common` for shared settings.
- Completion: `compinit`
- History: 5 000 in memory / 10 000 on disk, dedup-all, ignores trivial commands, shared across terminals, timestamped,
`!` expansion verified, blanks normalized
- Shell options: `GLOB_STAR_SHORT`, `CORRECT`
- Prompt: `user@host dir (branch)$` in color using `PROMPT_SUBST`
## .hushlogin
Empty marker file that suppresses the `Last login: ...` banner on login shells. Existence is the flag — contents are
ignored.
- macOS Terminal/iTerm: hides the last-login line shown when opening a new login shell
- Linux/Codespaces SSH (PAM): hides last-login + MOTD via `pam_lastlog` / `pam_motd`
- No effect on non-login interactive shells (most local terminal emulators)
## .curlrc
- Progress bar, follows redirects (capped at 10), retries 3× on transient errors (5xx/408/429/network — not 4xx)
- Timeouts: 15 s connect, 120 s max (override with `--max-time 0` for large downloads)
- TLS 1.2 floor (portable across all curl backends); schemeless URLs default to https
- `--compressed`: requests gzip/deflate, transparently decompresses
- `--fail-with-body`: exits non-zero on 4xx/5xx but still prints the response
## .wgetrc
- Retries up to 3×; timeouts: 15 s connect, 20 s read, 10 s DNS
- Resumes partial downloads (`continue = on`)
- Uses system CA certificates (`/etc/ssl/certs`)
## .editorconfig
Fallback coding-style rules when a project has no `.editorconfig` of its own.
- Defaults: UTF-8, LF endings, 2-space indent, trim trailing whitespace, final newline, 88-char line limit
- Lockfiles (`*.lock`, `package-lock.json`): preserve trailing whitespace
- Makefile: tab indent (4-size)
- CSS/HTML/SVG: 120-char line limit
- Markdown: 120-char limit, preserve trailing whitespace (for line breaks)
- Python: 4-space indent
- RST: 120-char line limit
- Shell scripts: 4-space indent
- Text/log files: preserve trailing whitespace
## .gitattributes_global
Applied globally via `core.attributesfile`. Per-repo `.gitattributes` still wins for matching patterns.
- Auto-detects text + normalizes line endings; forces LF on common languages, configs, docs, shell, build files
- Marks images, audio/video, fonts, archives, executables, packages, and databases as binary
- SVG kept as text with markup-aware diff (`diff=html`)
- Suppresses diffs for noisy files (`*.log`, `*.lock`, `package-lock.json`)
- Linguist hints: lockfiles + `dist/build/coverage/` marked generated; `vendor/` marked vendored
- Excludes temp files, editor dirs, and `node_modules/` from `git archive`
## .gitconfig
See [CHEATSHEET.md][CHEATSHEET.md] for the full alias reference.
- User: Evgenii Shiliaev; `~/.gitmessage` template; verbose commit editor
- Signing: SSH-signed commits (`gpg.format = ssh`, `user.signingkey = ~/.ssh/id_ed25519_signing.pub`); local
verification via `~/.config/git/allowed_signers`
- Core: `code --wait` editor, histogram diff, `less -RFX` pager, fsmonitor, untracked cache
- Globals: sources `~/.gitignore_global` (excludesfile) and `~/.gitattributes_global` (attributesfile)
- Credentials: macOS Keychain with `cache` fallback (1-hour timeout)
- Diff polish: moved-code with reindent, mnemonic prefixes, copy detection
- Workflow: rebase on pull, `autoSetupRemote`, `pushf`, `rerere`, `autoStash`, `autoSquash` of fixup commits, tags
follow commits on push
- Log: abbreviated hashes, ISO dates, short decorations, custom pretty format
- Branches sorted by most recent commit; tags sorted by version, pruned with refs on fetch
## .gitignore_global
Applied globally via `core.excludesfile`. Per-repo `.gitignore` adds repo-specific patterns on top.
Aggregated from upstream Node, Python, and Visual Studio gitignore templates:
- Node.js: package managers (npm, pnpm, yarn), modern frameworks (Next/Nuxt/Sveltekit/Vite/Vuepress/etc.), build/cache
dirs
- Python: byte-compiled, virtualenvs, packaging, test caches, Jupyter, pyenv/poetry/pdm
- Visual Studio / .NET: build dirs, IDE caches, NuGet, Azure, profilers
## .gitmessage
Conventional Commits template. Commit types that trigger a release:
| Type | Release |
| ------------------------------------------ | ------- |
| `feat` | minor |
| `fix`, `security`, `deps`, `perf`, `build` | patch |
Append `!` for breaking changes (`feat!:`); add `BREAKING CHANGE: ` as the **last footer** — nothing after
it, or the trailing content becomes part of the changelog note.
## install.sh
Symlinks all dotfiles into `$HOME`. Detects OS to link `.zshrc` (macOS) or `.bashrc` (Linux/Codespaces).
- Self-locating: works wherever the repo is cloned
- Always symlinks: `.shell_common`, `.curlrc`, `.editorconfig`, `.gitattributes_global`, `.gitconfig`,
`.gitignore_global`, `.gitmessage`, `.hushlogin`, `.wgetrc`
- OS-aware: `.zshrc` on macOS, `.bashrc` on Linux/Codespaces
- Creates `~/bin/` and symlinks `scripts/prune-cspell-words` into it
- SSH signing: symlinks `keys/signing.pub` → `~/.ssh/id_ed25519_signing.pub` and writes `~/.config/git/allowed_signers`
from `user.email` + pubkey; warns if `keys/signing.pub` is missing
## keys/signing.pub
SSH ed25519 public key used for commit signing. Private key lives on the host and is forwarded into devcontainers via
ssh-agent.
- Wired up by `install.sh`: symlinked to `~/.ssh/id_ed25519_signing.pub`; `~/.config/git/allowed_signers` written from
`user.email` + this pubkey
- Generate a fresh key (host-side): `ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_signing -N ''`
- Replace `keys/signing.pub` with the new pubkey contents and commit
- Upload to GitHub for verified-badge: `gh ssh-key add ~/.ssh/id_ed25519_signing.pub --type signing`
## prune-cspell-words
Remove stale words from a cspell config words list. Symlinked into `~/bin/` by `install.sh`.
```
prune-cspell-words [-c PATH] [-n] [-v]
```
- `-c / --config PATH`: path to cspell config (default: auto-detect standard JSON config in cwd — `.cspell.json`,
`cspell.json`, `.cSpell.json`, `cSpell.json`, or `cspell.config.json`)
- `-n / --dry-run`: preview removals without modifying the file
- `-v / --verbose`: print each word as it is checked
## Contact 📬
For questions, reach out via [evgenii.shiliaev@jekwwer.com][evgenii.shiliaev@jekwwer.com].
[LICENSE]: LICENSE
[CHEATSHEET.md]: CHEATSHEET.md
[evgenii.shiliaev@jekwwer.com]: mailto:evgenii.shiliaev@jekwwer.com