{"id":50537014,"url":"https://github.com/pfei/dotfiles","last_synced_at":"2026-06-03T17:30:20.424Z","repository":{"id":355593303,"uuid":"923626934","full_name":"pfei/dotfiles","owner":"pfei","description":"My personal dotfiles: Zsh, Tmux, and Pandoc templates. Optimized for productivity and clean LaTeX exports","archived":false,"fork":false,"pushed_at":"2026-05-29T12:42:49.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-29T14:06:48.827Z","etag":null,"topics":["dotfiles","linux-config","pandoc-template","tmux","workflow","zsh"],"latest_commit_sha":null,"homepage":"https://github.com/pfei/.dotfiles#readme","language":"Python","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/pfei.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-28T15:32:38.000Z","updated_at":"2026-05-29T12:42:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pfei/dotfiles","commit_stats":null,"previous_names":["pfei/.dotfiles","pfei/dotfiles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pfei/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfei%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfei%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfei%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfei%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pfei","download_url":"https://codeload.github.com/pfei/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfei%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33876327,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"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":["dotfiles","linux-config","pandoc-template","tmux","workflow","zsh"],"created_at":"2026-06-03T17:30:18.104Z","updated_at":"2026-06-03T17:30:20.411Z","avatar_url":"https://github.com/pfei.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 dotfiles\n\nMy personal configuration files\nfor a productive terminal-first Linux development environment.\n\nThis repository centralizes my setup for:\n\n- Zsh\n- Tmux\n- Kitty\n- Helix\n- Git\n- Vim\n- Pandoc\n- themes and shell utilities\n\n______________________________________________________________________\n\n# 🧠 Philosophy \u0026 Design Goals\n\nThe goal is simple:\n\n\u003e identical workflow everywhere.\n\nWhether on:\n\n- a local Debian desktop,\n- a remote VPS,\n- a headless server,\n- a temporary VM,\n- or a fresh reinstall,\n\nthe experience should remain nearly identical:\n\n- same shell,\n- same terminal behavior,\n- same keybindings,\n- same clipboard workflow,\n- same editor,\n- same tmux navigation,\n- same Git ergonomics.\n\nThis repository is intentionally:\n\n- reproducible,\n- idempotent,\n- modular,\n- portable,\n- dependency-light,\n- and terminal-first.\n\nCurrent core stack:\n\n- Kitty\n- Tmux\n- Helix\n- Git\n- Zsh\n\nEverything else is optional.\n\n______________________________________________________________________\n\n## 🛠️ Manual Prerequisites\n\nBefore running the automation, ensure the following are installed:\n\n### 1. System Packages \u0026 Python Build Dependencies\n\nEssential for general workflows and compiling isolated Python environments with `pyenv`:\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y \\\ncurl git zsh tmux kitty xclip yad shfmt \\\nfonts-noto-color-emoji \\\nbuild-essential libssl-dev zlib1g-dev libbz2-dev \\\nlibreadline-dev libsqlite3-dev libncursesw5-dev \\\nxz-utils tk-dev libxml2-dev libxmlsec1-dev \\\nlibffi-dev liblzma-dev\n```\n\n### 2. Base Frameworks\n\n```bash\n# Oh My Zsh\nsh -c \"$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)\"\n\n# Pyenv \u0026 plugins\ncurl https://pyenv.run | bash\n```\n\n### 3. Server Configuration (Optional)\n\nIf setting up a headless environment / VPS, flag the machine as a server.\n\nThis automatically switches the shell prompt Oh My Zsh theme from:\n\n- local desktop theme → arrow\n- server theme → refined\n\n```bash\nsudo touch /etc/is_server\n```\n\n### 4. Helix Editor (AppImage)\n\nThe setup intentionally uses the official AppImage instead of distro packages.\n\nReason:\n\n- distro versions are often outdated,\n- AppImage guarantees consistency across machines.\n\nDownload the official AppImage: https://github.com/helix-editor/helix/releases\n\nThen place it inside:\n\n```bash\n~/.local/bin/\n```\n\nExample:\n\n```bash\nmkdir -p ~/.local/bin\nmv helix-*.AppImage ~/.local/bin/\nchmod +x ~/.local/bin/helix-*.AppImage\n```\n\nThe installation script automatically:\n\n- detects the AppImage,\n- creates symlinks,\n- and extracts it on headless systems when FUSE is unavailable.\n\n## ⚙️ Installation\n\nClone the repository anywhere:\n\n```bash\ngit clone https://github.com/pfei/dotfiles.git ~/src/dotfiles\ncd ~/src/dotfiles\ngit submodule update --init\n./install.py\n```\n\nThe installer dynamically adapts to the environment:\n\n- desktop,\n- headless VPS,\n- GUI availability,\n- terminal capabilities.\n\nIt automatically installs/symlinks supported modules\nand skips incompatible GUI modules on headless systems.\n\nCurrent modules:\n\n- git\n- zsh\n- tmux\n- kitty\n- helix\n- vim\n- pandoc\n- themes\n- mate-terminal (legacy)\n\n### 🐍 Post-Installation: Python Environment Integration\n\nTo complete your Python isolation setup and\nmake the `.zshrc` workflow fully operational,\ninstall your target Python version\nand initialize `virtualenvwrapper` hooks inside it:\n\nFor example with python 3.13.13:\n\n```bash\n# 1. Install and set your working Python version\npyenv install 3.13.13\npyenv global 3.13.13\n\n# 2. Bind virtualenvwrapper inside the isolated version\npip install virtualenvwrapper\n\n# 3. Reload your shell configuration\nomz reload\n```\n\n### 🔒 Post-Installation: Git Identity\n\nGit identity is loaded at install time from a local `git/identity.json` file (not tracked).\nCopy the example and fill in your details:\n\n```bash\ncp git/identity.json.example git/identity.json\n# then edit git/identity.json with your name, email, and SSH signing key path\n```\n\nThe installer will then inject your identity into `~/.gitconfig` automatically.\n\n______________________________________________________________________\n\n## Features at a Glance\n\n### 🐚 Zsh (Oh My Zsh)\n\nA modular Zsh setup with dynamic environment handling:\n\n- **Modular Architecture**: Configuration split into exports and functions.\n- **Adaptive Themes**: Uses `refined` (e.g., `~ ❯ user@srvXXXXXX`)\n  on servers via `/etc/is_server`, and `arrow` (e.g., `~ ➤`) on local machines.\n- **Language Integration**: nvm, pyenv, Go, Deno — all lazy-loaded to keep shell startup fast.\n- **Python Workflow**: pyenv for version management, virtualenvwrapper\n  for lightweight virtual environments. Both use stub functions\n  that defer initialization until first use (~500ms saved on startup).\n- **Node Workflow**: nvm and its ecosystem (node, npm, npx, yarn) are lazy-loaded via stub functions.\n- **Autoload Functions**: `~/.zsh_autoload_functions/` hosts private helpers\n  (e.g., `load_google_api_key`) not tracked in the repository.\n- **UI**: Custom steady yellow underline cursor that resets on exit.\n\n### 🔒 Local Overrides\n\nThe `.zshrc` configuration dynamically checks for and sources `~/.zshrc.local`\nright before initializing the cursor UI. This provides a clean point of extension\nto inject private paths, professional/personal aliases, or specific overrides\nwithout polluting the public repository tracking.\n\n### 🖥️ Tmux\n\nTerminal multiplexer configured for ergonomics and speed:\n\n- **Prefix**: Remapped to `Ctrl-a`.\n- **Navigation**: Pane switching with `Alt + Arrow Keys`,\n  window switching with `Ctrl + PageUp/Down`.\n- **Window Management**: Move windows left/right with `Ctrl + Shift + PageUp/Down`;\n  windows auto-renumber on close; rename with `F2`.\n- **Copy Mode**: vi keybindings with system clipboard integration (xclip).\n  Mouse drag also copies to clipboard.\n- **Clipboard**: OSC 52 passthrough enabled for seamless clipboard across SSH sessions.\n- **Persistence**: New panes/windows open in the current working directory.\n- **History**: 100,000 lines scrollback.\n\n### 🐱 Kitty\n\n- **Configuration**: `kitty/kitty.conf` → `~/.config/kitty/kitty.conf`\n- `F11` mapped to toggle fullscreen.\n\n### 💻 VS Code\n\n- **Centralized Config**: Settings, keybindings, and snippets in one directory.\n- **Automation**: One-command deployment of symlinks and extensions.\n- **Smart Formatting**: Auto-format shell scripts on save via shfmt, Python via Ruff, JSON/JS/TS/HTML/CSS via Prettier.\n- **Vim Integration**: Optimized Vim keybindings via vscodevim (toggle with `Ctrl+Alt+V`).\n- **Spell Checking**: English and French, enabled only for Markdown files.\n- **Extensions**: Ruff, Pylance, mypy, ESLint, Prettier, Jupyter, R, Rainbow CS\n\n### 🪨 Helix\n\n- **Configuration**: `helix/config.toml` → `~/.config/helix/config.toml`\n- **Language Support**: `helix/languages.toml` → `~/.config/helix/languages.toml` — configures\n  auto-formatting for Python (Ruff), Bash (shfmt), Markdown (mdformat), and JSON (jq), with debugpy integration for Python.\n- **Theme**: Custom `my_mocha` theme (inherits Catppuccin Mocha with adjusted statusline colors)\n  → `~/.config/helix/themes/my_mocha.toml`\n- **AppImage Management**: Automatically symlinks `hx` directly to the AppImage\n  on desktop environments, or extracts it cleanly into a FUSE-less standalone wrapper on headless servers.\n- **Hidden Files**: `.ignore` ensures dotfiles are visible in the file picker (`Space + f`).\n- **Keybindings**: `Space + n` hides line numbers, `Space + l` restores them.\n\n### 🔧 Git\n\n- **Configuration**: `git/gitconfig` included into `~/.gitconfig` via `[include]`\n  — keeps private identity out of the repository.\n- **Identity**: Loaded at install time from `git/identity.json` (not tracked).\n  Copy from `git/identity.json.example`.\n- **SSH Commit Signing**: Configured via `[gpg] format = ssh` with `allowed_signers`\n  auto-setup. The installer appends your public key to `~/.ssh/allowed_signers` automatically.\n- **Editor**: Helix (`hx`) as default commit editor.\n- **Aliases**: `lg` — compact, colorized graph log with dates.\n- **Jupyter Support**: `nbdime` drivers configured for notebook diff and merge.\n- **Headless optimization**: On servers, `credential.helper = store` is set automatically.\n\n### 📝 Vim\n\n- **Configuration**: `vim/.vimrc` → `~/.vimrc`\n- Relative line numbers, persistent undo, Space as leader key.\n- Smart case-insensitive search, no swap/backup files.\n- Clean Git commit editing (no relative numbers, no cursorline).\n\n### 📄 Pandoc\n\n- **Templates**: `pandoc/templates/` → `~/.local/share/pandoc/templates/`\n- Clean LaTeX journal template for PDF export.\n\n### 🎨 Themes\n\n- **Dracula GTK**: Dracula theme submodule linked to `~/.themes/Dracula`.\n- **Dracula-Yad**: Custom Dracula variant for `yad` dialogs with high-contrast cyan border and large yellow labels → `~/.themes/Dracula-Yad/`.\n- **MATE Desktop**: Dracula GTK theme, Mint-Y icons, and wallpaper applied automatically via `gsettings`.\n- **MATE Terminal** (legacy): Catppuccin color profiles (Mocha, Macchiato, Frappé, Latte) loaded via dconf.\n\n______________________________________________________________________\n\n## 🛠️ Custom Functions \u0026 Aliases\n\n### Shell Utilities\n\n- `h`: History search — no args shows last 20, number shows N lines, string greps.\n- `lsym`: Lists symlinks in current directory with color-coded targets.\n- `lst`: Shows the 5 most recently modified files.\n- `dumpcode`: Dumps the full codebase to a text file for LLM analysis, skipping locks and binaries.\n- `gitscan`: Scans git history for secrets using `gitleaks`. It runs in redacted mode to safely display results on public screens.\n\n## 📂 Repository Structure\n\n```\n.\n├── zsh/\n│   ├── .zshrc             # Main entry point\n│   ├── aliases.zsh        # Custom shortcuts\n│   ├── exports.zsh        # PATH and env variables\n│   ├── functions.zsh      # Utilities and helpers\n│   └── setup.py           # Symlinks + autoload stub\n├── tmux/\n│   ├── .tmux.conf          # Tmux configuration\n│   └── setup.py\n├── kitty/\n│   ├── kitty.conf\n│   └── setup.py\n├── vscode/\n│   ├── settings.json\n│   ├── keybindings.json\n│   ├── extensions.txt\n│   ├── snippets/\n│   └── setup.py\n├── helix/\n│   ├── config.toml\n│   ├── languages.toml\n│   ├── themes/\n│   │   └── my_mocha.toml\n│   └── setup.py            # Symlinks config + hx AppImage/Wrapper\n├── git/\n│   ├── gitconfig\n│   ├── identity.json.example\n│   └── setup.py\n├── vim/\n│   ├── .vimrc\n│   └── setup.py\n├── pandoc/\n│   ├── templates/          # LaTeX templates\n│   └── setup.py\n├── themes/\n│   ├── Dracula/            # GTK theme (submodule)\n│   ├── Dracula-Yad/        # Custom yad GTK theme\n│   └── setup.py\n├── mate-terminal/\n│   ├── catppucin.dconf\n│   └── setup.py\n├── .local/bin/\n│   └── dumpcode            # Codebase dump utility\n├── install.py              # Global installer\n├── .ignore                 # Show dotfiles in Helix file picker\n└── LICENSE\n```\n\n______________________________________________________________________\n\n## ⚖️ License\n\nMIT License — see LICENSE for details.\n\nLast updated: May 2026\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfei%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpfei%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfei%2Fdotfiles/lists"}