Personal configuration files for the Linux, macOS, WSL, and Termux systems I use day to day. The repo is intentionally practical rather than frameworky: most files are the real configs used on specific hosts, with a shared symlink script that installs the right set for the current machine.
Clone this repository as ~/dotfiles:
git clone https://github.com/gojun077/jun-dotfiles.git ~/dotfiles- Shell configs in
bash/andmacOS/for Fedora, Asahi Linux, Ubuntu, WSL, Termux, and macOS. - Emacs configs in
emacs/, with per-platform.emacsentrypoints plus shared~/.emacs.d/modules for Org, GPTel, UI, Projectile, and YASnippet. - Terminal and editor configs for Vim, tmux, Ghostty, WezTerm, Alacritty, GNU Screen, ShellCheck, and Starship.
- Desktop and Wayland configs for Sway, Waybar, AeroSpace, yabai/skhd-era macOS workflows, XDG MIME handlers, and screenshot tooling.
- System/service configs for tools such as Ansible, dnsmasq, pacman, bitlbee, vsftpd, systemd, NetworkManager/iwd, and related host utilities.
This is a public dotfiles repo. Private material such as SSH keys, GPG keys, authinfo, Git identity, kubeconfigs, WireGuard keys, and AI/API credentials belongs in the separate encrypted dotfiles repo, not here.
Run the cross-platform symlink script from the repo root:
cd ~/dotfiles
bash create_symlinks.shDo not run it as root. The script expects $HOME to be your user home and
will stop if $USER is root.
The script uses a hybrid deployment model:
- Shared base symlinks are installed everywhere, such as
.vimrc,.screenrc,.shellcheckrc, Vim ftplugins, and XDG MIME desktop files. - Per-hostname blocks choose host-specific bash, Emacs, tmux, window manager, terminal, and prompt configs. Current examples include Asahi Linux on a MacBook Air, Fedora workstations, Ubuntu OCI, Raspberry Pi/Fedora, k3s, WSL, Termux, and macOS.
- Conditional app symlinks are only installed when the app exists on the machine, for example irssi, cmus, Quod Libet, Terminator, MAME, Midnight Commander, and Lynx.
- System-level symlinks are attempted for supported services when the
target directories/tools exist. These may require permissions prepared by
setACL_symlinks.sh.
Existing files are moved aside as .old backups before new symlinks are
created. If a .old backup already exists, the script adds a timestamped
suffix.
To add a new machine, add a case block for its hostname -s value in
create_symlinks.sh, then point each desired dotfile at
the platform-specific file in this repo.
The Emacs setup has grown into a small multi-platform configuration:
emacs/emacs_asahiandemacs/emacs_macare the active, modern entrypoints for Emacs 30-era systems usingstraight.elanduse-package.emacs/emacs_fedora,emacs/emacs_ubuntu_oci,emacs/emacs_wsl, andemacs/emacs_win11_nativepreserve host-specific setups for other systems.emacs/emacs.d/init-org.elandinit-org-macos.elhold Org/GTD capture, agenda, refile, and export behavior.emacs/emacs.d/init-gptel.elconfigures GPTel backends while keeping actual credentials outside this public repo.emacs/emacs.d/init-ui*.el,init-projectile.el, andinit-yasnippet.elkeep reusable UI, project, and snippet behavior separate from the top-level.emacsfiles.emacs/emacs.d/snippets/is symlinked into~/.emacs.d/snippetson systems that use the shared YASnippet module.
When editing Emacs Lisp in this repo, the Makefile provides helper targets for documentation lookup, apropos-style search, and linting:
make get_elisp_info SYMBOL=use-package
make search_elisp QUERY=gptel
make validate_elisp FILE=emacs/emacs.d/init-yasnippet.elMany files use a suffix to describe the host or platform they belong to:
| Suffix | Platform |
|---|---|
_asahi |
Asahi Linux / Fedora Remix on Apple Silicon |
_fedora, _fedora_pi |
Fedora systems |
_ubuntu, _ubuntu_oci |
Ubuntu systems, including Oracle Cloud |
_mac, _macbookair, _mbp |
macOS variants |
_wsl |
Windows Subsystem for Linux |
_k3s, _rpi |
Kubernetes / Raspberry Pi nodes |
_termux, _android |
Android / Termux |
Unsuffixed files are shared defaults unless the symlink script overrides them for a specific platform.
This public repository is paired with an encrypted dotfiles repository managed
separately by create_symlinks_enc.sh. Keep secrets and identity-bearing
configuration there, not in this repo.