{"id":13894621,"url":"https://github.com/g6ai/dotfiles","last_synced_at":"2025-07-17T09:33:31.618Z","repository":{"id":44125085,"uuid":"285899626","full_name":"g6ai/dotfiles","owner":"g6ai","description":"My dotfiles for Bash/Zsh, Vim/Neovim, Doom Emacs, tmux, Git, terminal emulators, JupyterLab, aria2, mpv, Nix and Homebrew","archived":false,"fork":false,"pushed_at":"2024-01-11T10:24:20.000Z","size":600,"stargazers_count":212,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-22T11:49:45.401Z","etag":null,"topics":["alacritty","aria2","bash","brewfile","chezmoi","doom-emacs","dotfiles","git","homebrew","jupyterlab","kitty","mpv","neovim","nix","tmux","vim","wezterm","zsh"],"latest_commit_sha":null,"homepage":"","language":"Vim Script","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/g6ai.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}},"created_at":"2020-08-07T18:49:25.000Z","updated_at":"2024-05-18T22:32:55.217Z","dependencies_parsed_at":"2024-05-18T22:32:52.417Z","dependency_job_id":"ee53c208-da72-4c73-8155-76238da97e84","html_url":"https://github.com/g6ai/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/g6ai/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/g6ai%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/g6ai%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/g6ai%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/g6ai%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/g6ai","download_url":"https://codeload.github.com/g6ai/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/g6ai%2Fdotfiles/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265589381,"owners_count":23793509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alacritty","aria2","bash","brewfile","chezmoi","doom-emacs","dotfiles","git","homebrew","jupyterlab","kitty","mpv","neovim","nix","tmux","vim","wezterm","zsh"],"created_at":"2024-08-06T18:01:39.683Z","updated_at":"2025-07-17T09:33:31.613Z","avatar_url":"https://github.com/g6ai.png","language":"Vim Script","funding_links":[],"categories":["Emacs Lisp","Vim Script"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Dotfiles\n\n![Latest commit](https://img.shields.io/github/last-commit/g6ai/dotfiles?style=flat)\n\nMy dotfiles. Some of my considerations are explained in [Wiki](https://github.com/g6ai/dotfiles/wiki).\n\n[Deployment](#deploy-with-ease-and-efficiency) • [Shell](#shell) • [Vim/Neovim](#vimneovim) • [Doom Emacs](#doom-emacs) • [tmux](#tmux) • [Git](#git) • [Terminal emulators](#terminal-emulators) • [Other config](#other-config)\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/g6ai/dotfiles/wiki/screenshots/dark.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/g6ai/dotfiles/wiki/screenshots/light.png\"\u003e\n  \u003cimg alt=\"\" src=\"https://github.com/g6ai/dotfiles/wiki/screenshots/dark.png\"\u003e\n\u003c/picture\u003e\n\nMore screenshots [here](https://github.com/g6ai/dotfiles/wiki/Screenshots).\n\n\u003c/div\u003e\n\n## Features\n\n### Deploy with ease and efficiency\n\n[*chezmoi*](https://www.chezmoi.io/) is used to bootstrap dotfiles.\n\n* Deploy with shell one-liner:\n    ```sh\n    sh -c \"$(curl -fsLS git.io/chezmoi)\" -- init --apply g6ai\n    ```\n\n* Uses [`text/template`](https://pkg.go.dev/text/template) syntax from Go extended with [text template functions from `sprig`](http://masterminds.github.io/sprig/).\n\n    For instance, here is a typical snippet in one of my dotfiles, [`init.vim.tmpl`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/nvim/init.vim.tmpl), residing in [`private_dot_config/nvim`](https://github.com/g6ai/dotfiles/tree/main/private_dot_config/nvim):\n    ```go\n    {{ $x := splitList \"_\" .chezmoi.sourceFile /* private dot config/nvim/init.vim.tmpl */ -}}\n    {{ $y := last $x | dir /* config/nvim */ -}}\n    {{ $rtp := list \"~/.\" $y | join \"\" /* ~/.config/nvim */ -}}\n    {{ $vim_flag := .vim_flag -}}\n    {{ template \"vim/vimrc\" dict \"rtp\" $rtp \"os\" .chezmoi.os \"vim_flag\" $vim_flag -}}\n    ```\n    It passes variables `rtp`, `os` and `vim_flag` to a common [`vimrc`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/vim/vimrc) template in [`.chezmoitemplates/vim`](https://github.com/g6ai/dotfiles/tree/main/.chezmoitemplates/vim). This [`vimrc`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/vim/vimrc) template contains both the actual config details and the logic operations which check the variables it receives on deployment, so it can generate different config per *Vim* variants (*Vim* or *Neovim*), OS (*Linux* or *macOS*) and other user-defined variables.\n\n    Such snippets are extensively used in these dotfiles to manage config files of different environments in one place ([`.chezmoitemplates`](https://github.com/g6ai/dotfiles/tree/main/.chezmoitemplates)), keeping the resource-demanding logical operations at the **deployment step** rather than the **runtime**.\n\n### Shell\n* [`rc.sh`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/rc.sh) template is the [runcom](https://en.wikipedia.org/wiki/RUNCOM) (run commands) file for both *Linux* and *macOS*.\n* [`bashrc`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/bashrc) template uses the [`rc.sh`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/rc.sh) template.\n* [`zshrc`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/zshrc) template uses the [`rc.sh`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/rc.sh) template, and utilizes [*Zim*](https://zimfw.sh/) for fancy features.\n* [`profile.sh`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/profile.sh) template is used in both [`dot_bash_profile.tmpl`](https://github.com/g6ai/dotfiles/blob/main/dot_bash_profile.tmpl) and [`dot_zprofile.tmpl`](https://github.com/g6ai/dotfiles/blob/main/dot_zprofile.tmpl).\n* [`run_append_motd`](https://github.com/g6ai/dotfiles/blob/main/run_append_motd) is a Bash script to personalize motd, which is run by *chezmoi*.\n\n### Vim/Neovim\n* The configs are located in the [`.chezmoitemplates/vim`](https://github.com/g6ai/dotfiles/tree/main/.chezmoitemplates/vim) directory. They are then deployed to *Vim* and *Neovim*'s runtime path.\n    * *Vim*'s [`vimrc.tmpl`](https://github.com/g6ai/dotfiles/blob/main/dot_vim/vimrc.tmpl) template and *Neovim*'s [`init.vim.tmpl`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/nvim/init.vim.tmpl) template use the versatile configs in [`vimrc`](https://github.com/g6ai/dotfiles/blob/main/.chezmoitemplates/vim/vimrc) template, which works for *Linux*, *macOS* and *Windows*! You can set if your system is good enough to enable plugins on *chezmoi* deployment.\n    * Most of the `vimrc`'s functionalities are divided and located in [`core`](https://github.com/g6ai/dotfiles/tree/main/.chezmoitemplates/vim/core) directory.\n* Neovim-specific config:\n    * Adopts the mighty [*coc.nvim*](https://github.com/neoclide/coc.nvim). Its config is `coc-settings.json`.\n    * Some experimetal features in *Neovim* 0.5+ are also embraced:\n        * [*nvim-treesitter*](https://github.com/nvim-treesitter/nvim-treesitter), provides beautiful code highlighting and more.\n        * [*telescope.nvim*](https://github.com/nvim-telescope/telescope.nvim), next generation fuzzy finder.\n\n### Doom Emacs\n\n* Configs for [*org-journal*](https://github.com/bastibe/org-journal) and [*Org-roam*](https://github.com/org-roam/org-roam), to cooperate with [*beorg*](https://beorgapp.com/manual/).\n\n### tmux\n* [`tmux.conf`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/tmux/tmux.conf) defines *tmux*'s style and key bindings, etc. Access to system clipboard is supported:\n  * For *macOS*, *pbcopy* is used. *pbcopy* is installed on *macOS* by default.\n  * For *Linux*, *xclip* is used. *xclip* needs to be installed. Within an *SSH* session, primary and/or clipboard content on the remote server can be sent to local machine by *X11* forwarding.\n* Helper scripts [`executable_update_display_vim.sh`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/tmux/executable_update_display_vim.sh) and [`executable_update_vim.sh`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/tmux/executable_update_vim.sh) update environment variable `$DISPLAY` and/or *Vim/Neovim* theme.\n\n### Git\n\nGlobal [`dot_gitignore_global.tmpl`](https://github.com/g6ai/dotfiles/blob/main/dot_gitignore_global.tmpl) per OS template. [GitHub’s collection of `.gitignore` file templates](https://github.com/github/gitignore) are used.\n\n### Terminal emulators\nFrom my experience, there's no perfect terminal emulator. I have tried *Terminal.app*, *iTerm2*, *Alacritty*, *kitty* and *WezTerm*. Currently I'm using *WezTerm*.\n* [`wezterm`](https://github.com/g6ai/dotfiles/tree/main/private_dot_config/wezterm) folder includes the *WezTerm* configuration file `wezterm.lua`.\n* [`kitty`](https://github.com/g6ai/dotfiles/tree/main/private_dot_config/kitty) folder includes the *kitty* configuration file `kitty.conf` for different OS.\n* [`alacritty`](https://github.com/g6ai/dotfiles/tree/main/private_dot_config/alacritty) folder includes the *Alacritty* configuration file `alacritty.yml` for different OS.\n\n### Other config\n* [`dot_aria2`](https://github.com/g6ai/dotfiles/tree/main/dot_aria2) folder includes config file for *aria2*. See [options section of aria2 documentation](https://aria2.github.io/manual/en/html/aria2c.html#options) for more options.\n* [`mpv`](https://github.com/g6ai/dotfiles/tree/main/private_dot_config/mpv) folder includes config files for *mpv*. See [mpv documentation](https://mpv.io/manual/master/) for more options.\n* *macOS* package manager:\n    * [`darwin-configuration.nix`](https://github.com/g6ai/dotfiles/blob/main/dot_nixpkgs/darwin-configuration.nix) contains config of [*nix-darwin*](https://github.com/LnL7/nix-darwin).\n    * [`Brewfile`](https://github.com/g6ai/dotfiles/blob/main/private_dot_config/Brewfile) contains config of the [*Homebrew Bundle*](https://github.com/Homebrew/homebrew-bundle) bundler.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fg6ai%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fg6ai%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fg6ai%2Fdotfiles/lists"}