homedir
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
This is a personal collection of dotfiles and shell utility scripts. It uses Ansible to automate the setup and configuration of a development environment across different machines.
Security Assessment
Overall risk: Low. The tool executes shell commands and modifies the local filesystem to install packages and apply dotfiles, which is its intended purpose. A light code scan of 12 files found no dangerous patterns, hardcoded secrets, or requests for dangerous permissions. The README explicitly states that the setup is idempotent and supports a `--check` mode, allowing users to preview exactly what changes will be made to their system before executing them.
Quality Assessment
The repository is actively maintained, with its most recent push happening today. The code appears well-structured and thoroughly documented. However, there are two minor warnings. First, the project lacks a formal open-source license, meaning legal usage rights are technically undefined. Second, it has very low community visibility (5 stars). Because it is explicitly designed as a developer's personal setup rather than a community tool, low visibility is expected and does not reflect poorly on the code's integrity.
Verdict
Safe to use, provided you review the Ansible playbooks in check mode (`--check --diff`) first to ensure the dotfiles and aliases match your preferred development workflow.
My personal dotfiles and homedir scripts
homedir
Personal dotfiles and home directory configuration for consistent development environments across machines.
Overview
This repository contains my personal shell configurations, editor settings, and custom utility scripts that I use to quickly set up a productive development environment on new machines. It includes configurations for zsh with Oh My Zsh, Vim settings, and various helpful aliases and tools.
Setup
Ansible-based Setup
Sync dev environment (current user, any machine):
$ cd
$ git clone https://github.com/MasonEgger/homedir.git
$ cd homedir
$ ansible-playbook ansible/setup.yml # Install everything for current user
Fresh mmegger user install (remote Debian/Ubuntu server):
ansible-playbook ansible/setup.yml --tags mmegger # Full mmegger user setup
The mmegger tag is self-contained: creates the user, hardens SSH, and then installs all packages, dotfiles, and tools for the mmegger user.
Modular Installation Options (sync scenario):
# Install specific components for the current user
ansible-playbook ansible/setup.yml --tags packages # Only install packages
ansible-playbook ansible/setup.yml --tags dotfiles # Only install core dotfiles
ansible-playbook ansible/setup.yml --tags claude # Only install .claude directory
ansible-playbook ansible/setup.yml --tags homedir # Only install .homedir scripts
# Combine multiple components
ansible-playbook ansible/setup.yml --tags packages,dotfiles
ansible-playbook ansible/setup.yml --tags claude,homedir
Check Mode and Preview Options:
# See what would change without making changes
ansible-playbook ansible/setup.yml --check
ansible-playbook ansible/setup.yml --tags dotfiles --check
# Show detailed before/after diffs of file changes
ansible-playbook ansible/setup.yml --check --diff
ansible-playbook ansible/setup.yml --tags dotfiles --check --diff
Additional Options:
--check- Preview changes without making them--diff- Show detailed before/after diffs
Features:
- Modular installation: Install only the components you need (packages, dotfiles, claude, homedir)
- Cross-platform package management: Automatically installs development tools via Homebrew (macOS) or apt (Ubuntu/Debian)
- Check mode support: Preview changes before making them with
--checkand--diff - Idempotent: Safe to run multiple times, only makes necessary changes
What's Included
Shell Configuration (.zshrc)
| Alias/Command | Description | Usage |
|---|---|---|
cdr |
Navigate to git repository root | cdr |
.. |
Go up one directory | .. |
... |
Go up two directories | ... |
.... |
Go up three directories | .... |
..... |
Go up four directories | ..... |
...... |
Go up five directories | ...... |
venv-on |
Activate Python virtual environment at git root | venv-on |
python |
Alias for python3 | python <script.py> |
django |
Shortcut for python manage.py | django <command> |
uuid |
Generate lowercase UUID with colorful output (using lolcat) | uuid |
Additional Configuration:
- Shell: Zsh with Oh My Zsh (geoffgarside theme)
- Plugins: git
- Path additions:
~/.homedir - Local configuration:
~/.zshrc.localfor machine-specific settings (auto-created, git-ignored) - Other: thefuck alias integration, GPG TTY export
Editor Configuration (.vimrc)
| Configuration | Vim Command | Description |
|---|---|---|
| Command height | set cmdheight=2 |
Enhanced command line display area |
| Backspace behavior | set backspace=2 |
Enable proper backspace functionality |
| Search highlighting | set hlsearch |
Highlight search results |
| Line numbers | set number |
Display line numbers |
| Ruler display | set ruler |
Show cursor position in status line |
| Column marker | set cc=80 |
80-character column marker |
| Tab expansion | set expandtab |
Convert tabs to spaces |
| Tab size | set ts=4 |
4-space tab width |
| Color scheme | colorscheme slate |
Slate color theme |
| Syntax highlighting | syntax on |
Enable syntax highlighting |
Terminal Multiplexer Configuration (.tmux.conf)
- Mouse support: Enabled for scrolling and pane selection
- Function key bindings:
F2- Create new windowF3- Previous windowF4- Next windowCtrl+F2- Horizontal splitShift+F2- Vertical split
- Pane navigation:
Shift+Arrowkeys to move between panes - Visual: Magenta status bar with black text, colored pane borders
- Settings: 10,000 line scrollback buffer, 256-color support, windows numbered from 1
Custom Tools (.homedir/)
| Command | Description | Arguments | Usage Example |
|---|---|---|---|
lmsify |
Convert GitHub Flavored Markdown to HTML for LMS publication (copies to clipboard using pbcopy) |
<file.md> - Markdown file to convert |
lmsify lesson.md |
wordcount |
Count words in files/directories, excluding Markdown code blocks | <path> [options] - File or directory to process with various options |
wordcount README.md or wordcount . -r -f json |
my-tools |
Display help for available custom tools | None | my-tools |
claude-plugins |
Install or update Claude Code plugins from official and personal marketplaces | None | claude-plugins |
Claude Settings (.claude/)
| File | Description |
|---|---|
CLAUDE.md |
Development guidelines for Claude AI assistant (separate from root CLAUDE.md) |
settings.json |
Global Claude Code configuration |
skills/python/ |
Python development standards skill (toolchain, TDD, CLI scripts, documentation) |
Claude Code plugins (BPE workflow, writing toolkit, productivity commands) live in a separate repository: MasonEgger/claude-code-plugin. The claude-plugins script in .homedir/ handles installing them from that marketplace.
File Structure
.
├── .claude/ # Claude AI assistant configuration
│ ├── CLAUDE.md # Claude-specific documentation
│ ├── settings.json # Global Claude settings
│ └── skills/ # Claude Code skills
│ └── python/ # Python development standards
│ ├── SKILL.md
│ └── references/ # Toolchain, TDD, CLI, docs guides
├── .homedir/ # Custom utility scripts
│ ├── claude-plugins # Claude Code plugin installer
│ ├── lmsify # Markdown to HTML converter
│ ├── my-tools # Tool help display
│ └── wordcount # Word count utility
├── ansible/ # Ansible automation setup
│ ├── setup.yml # Main Ansible playbook (orchestration only)
│ ├── group_vars/ # Variable definitions
│ │ └── all.yml # Package lists and configuration
│ ├── tasks/ # Modular task definitions
│ │ ├── packages.yml # System packages (apt/brew)
│ │ ├── user-tools.yml # Per-user tools (Oh My Zsh, Claude CLI, uv)
│ │ ├── dotfiles.yml # Core dotfiles installation
│ │ ├── claude.yml # .claude directory + plugin installation
│ │ ├── homedir.yml # .homedir scripts installation
│ │ ├── vale.yml # Vale prose linter
│ │ ├── git-hooks.yml # Global git hooks
│ │ ├── tailscale.yml # Tailscale VPN
│ │ └── mmegger.yml # Full user provisioning
│ ├── ansible.cfg # Ansible configuration
│ ├── hosts # Localhost inventory
│ └── requirements.yml # External role dependencies
├── .tmux.conf # Tmux terminal multiplexer configuration
├── .vimrc # Vim configuration
├── .zshrc # Zsh configuration with aliases
├── .zshrc.local.example # Template for machine-specific zsh configuration
├── CLAUDE.md # Instructions for Claude AI assistant
└── README.md # This file
Machine-Specific Configuration
Using .zshrc.local
The .zshrc.local file allows you to maintain machine-specific settings without modifying the tracked .zshrc file. This is perfect for:
- API keys and secrets (OpenAI, GitHub tokens, AWS credentials)
- Machine-specific PATH additions (local binaries, custom tools)
- Local aliases (project shortcuts specific to this machine)
- Environment variables (DEBUG flags, local development settings)
- Override repository defaults (custom themes, plugins)
Setup:
- Automatically created during Ansible setup if it doesn't exist
- Ignored by git (safe for secrets and machine-specific settings)
- Never overwritten when re-running
ansible-playbook - Sourced at the end of
.zshrc(settings here override repository defaults)
Usage:
# Edit your local configuration
vim ~/.zshrc.local
# Example content:
export OPENAI_API_KEY="sk-..."
alias myproject="cd ~/Projects/my-special-project"
export PATH="$HOME/bin:$PATH"
See .zshrc.local.example in the repository for more examples.
Notes
- Package Dependencies: The Ansible setup automatically installs required packages including
lolcat, development tools, anduv - The
lmsifycommand requireslessonmdtool to be installed (not included in automated setup) - The
wordcountscript usesuvfor Python script execution and supports multiple output formats (text, JSON, CSV) - All custom scripts in
.homedir/are executable and added to PATH - Ansible Requirement: Ensure Ansible is installed (
pip install ansibleorbrew install ansible) - Safe re-runs: Running
ansible-playbook ansible/setup.ymlmultiple times is safe and idempotent
Contributing
This is a personal configuration repository, but feel free to fork and adapt for your own use. When making changes:
- Test new aliases and scripts locally before committing
- Ensure shell scripts are executable (
chmod +x) - Avoid machine-specific configurations
Claude.md
The CLAUDE.md file provides guidance to Claude Code (claude.ai/code) when working with this repository. Claude.md crafted by myself, and shamelessly taken from harperreed
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found