{"id":13894690,"url":"https://github.com/suonlight/dotfiles","last_synced_at":"2025-07-17T10:30:25.054Z","repository":{"id":118162808,"uuid":"142977007","full_name":"suonlight/dotfiles","owner":"suonlight","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-28T03:32:31.000Z","size":9466,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-28T04:39:09.483Z","etag":null,"topics":["internal-tools"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/suonlight.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2018-07-31T07:15:53.000Z","updated_at":"2024-07-08T03:16:43.000Z","dependencies_parsed_at":"2023-11-11T08:22:22.482Z","dependency_job_id":"83d50537-643a-4a80-b7a8-e64988a55d0b","html_url":"https://github.com/suonlight/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suonlight%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suonlight%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suonlight%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suonlight%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suonlight","download_url":"https://codeload.github.com/suonlight/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226248375,"owners_count":17595159,"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":["internal-tools"],"created_at":"2024-08-06T18:01:42.398Z","updated_at":"2025-07-17T10:30:25.049Z","avatar_url":"https://github.com/suonlight.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"#+TITLE: Dotfiles\n#+Author: Minh Nguyen\n\n* [#A] Basic Tools\n** Setup dotfiles\n\nYou need to have environment in your .zshenv first. My config is:\n\n#+begin_src shell :async :results output\nexport WORKSPACE=\"$HOME/projects\"\n#+end_src\n\n#+begin_src shell :async :results output\nmkdir -p $WORKSPACE\ncd $WORKSPACE\ngit clone git@github.com:suonlight/dotfiles.git\nmkdir -p ~/.config/nvim\nmkdir -p ~/.config/bat\nrm -rf ~/.zshrc ~/.tmux.conf ~/.tmux.sp ~/.ctags ~/.editorconfig ~/.config/doom ~/.config/nvim ~/.config/alacritty\nln -s $WORKSPACE/dotfiles/.zshrc ~/.zshrc\nln -s $WORKSPACE/dotfiles/.tmux.conf ~/.tmux.conf\nln -s $WORKSPACE/dotfiles/.tmux.sp ~/.tmux.sp\nln -s $WORKSPACE/dotfiles/.editorconfig ~/.editorconfig\nln -s $WORKSPACE/dotfiles/.ctags ~/.ctags\nln -s $WORKSPACE/dotfiles/nvim ~/.config/nvim\nln -s $WORKSPACE/dotfiles/doom ~/.config/doom\nln -s $WORKSPACE/dotfiles/karabiner ~/.config/karabiner\nln -s $WORKSPACE/dotfiles/tridactyl ~/.config/tridactyl\n\nln -s $WORKSPACE/dotfiles/alacritty ~/.config/alacritty\nln -s $WORKSPACE/dotfiles/bat.conf ~/.config/bat/config\n\n# for ubuntu\nln -s $WORKSPACE/dotfiles/ubuntu/alacritty ~/.config/alacritty\nln -s $WORKSPACE/dotfiles/xremap ~/.config/xremap\nln -s $WORKSPACE/dotfiles/systemd ~/.config/systemd\n#+end_src\n\n** Neovim\n\n#+begin_src shell :async :results output\nbrew install neovim\n#+end_src\n\nStart nvim then run `:PackerInstall` to install vim's Plugins\n\n** Tmux\n\n#+begin_src shell :async :results output\nbrew install tmux\n\n# install tpm\ngit clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm\n#+end_src\n\nStart tmux then press `C-SPC I` (C-SPC means tmux prefix) to install tpm plugins\n\n** ZSH\n\n#+begin_src shell :async :results output\nbrew install zsh zsh-completions\nchsh -s /bin/zsh\nsh -c \"$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\"\nbrew install zplug\n#+end_src\n\n** Emacs\n*** Use emacs-plus\n\n#+begin_src shell :async :results output\nbrew install gcc libgccjit\n# need to reinstall if you already installed $ brew reinstall gcc libgccjit\nbrew tap d12frosted/emacs-plus\n#+end_src\n\n#+BEGIN_SRC shell :async :results output\nbrew install emacs-plus@29 --with-native-comp --with-modern-sexy-v1-icon\n#+END_SRC\n\n*** Doom\n\n#+begin_src shell :async :results output\nrm -rf ~/.emacs.d\ngit clone --depth 1 https://github.com/hlissner/doom-emacs ~/projects/doom-emacs\nln -s ~/projects/doom-emacs ~/.config/emacs\n#+end_src\n\n#+begin_src shell :async :results output\nln -s ~/projects/dotfiles/doom ~/.config/doom\nrm -rf ~/.config/doom/snippets\nln -s ~/.config/doom/private/snippets ~/.config/doom/snippets\n#+end_src\n\n#+begin_src shell :async :results output\ncd ~/.config/emacs\nbin/doom install\n#+end_src\n\n*To make sure vterm use zsh by default*\n\n#+begin_src shell\nexport SHELL=/usr/bin/zsh\nbin/doom sync\n#+end_src\n\n* Programming Languages\n** [#A] asdf\n\nhttps://asdf-vm.com/#/core-manage-asdf-vm\n\n#+begin_src shell :async :results output\nasdf plugin-add postgres\nasdf plugin-add ruby\nasdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git\nasdf plugin-add yarn\n#+end_src\n\n** [#A] Terminal tools\n\n#+begin_src shell :async :results output\nbrew install ripgrep\nbrew install autojump\nbrew install wget\n#+end_src\n\n#+begin_src shell :async :results output\nasdf plugin add fd\nasdf install fd latest\nasdf global fd 8.2.1\n#+end_src\n\n#+begin_src shell :async :results output\nasdf plugin add fzf https://github.com/kompiro/asdf-fzf.git\nasdf install fzf latest\nasdf global fzf 0.27.2\n#+end_src\n\n#+begin_src shell :async :results output\nasdf plugin-add yq https://github.com/sudermanjr/asdf-yq.git\nasdf install yq 4.0.0\nasdf global yq 4.0.0\n#+end_src\n\n#+begin_src shell :async :results output\nasdf plugin add bat\nasdf install bat latest\nasdf global bat 0.18.3\n#+end_src\n\n** [#A] Ruby\n\n#+begin_src shell :async :results output\nasdf install ruby 2.6.6\nasdf global ruby 2.6.6\n#+end_src\n\n** [#A] Postgres\n\n#+begin_src shell :async :results output\nPOSTGRES_EXTRA_CONFIGURE_OPTIONS=--with-uuid=e2fs asdf install postgres 13.4\nasdf global postgres 13.4\n#+end_src\n\n** [#A] Redis\n\n#+begin_src shell :async :results output\nasdf plugin-add redis https://github.com/smashedtoatoms/asdf-redis.git\nasdf install redis latest\nasdf global redis 6.2.6\n#+end_src\n\n** [#A] NodeJs\n\n#+begin_src shell :async :results output\nbrew install gnupg\nbash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring\nasdf install nodejs 12.22.4\nasdf global nodejs 12.22.4\nasdf install yarn 1.21.1\nasdf global yarn 1.21.1\n#+end_src\n** [#B] Python\n\n#+begin_src shell :async :results output\nasdf plugin-add python\nasdf install python 2.7.16\nasdf install python 3.9.1\nasdf global python 2.7.16 3.9.1\n#+end_src\n\n#+RESULTS:\n: 82759ff0eb6345e2432a6c33ea604a7a\n\n** [#B] R\n\n#+begin_src shell :async :results output\nasdf plugin-add R https://github.com/taiar/asdf-R.git\nR_EXTRA_CONFIGURE_OPTIONS=--with-x=no asdf install R 4.0.3\nasdf global R 4.0.3\n#+end_src\n\n#+begin_src shell :async :results output\ninstall.packages(\"dplyr\")\ninstall.packages(\"ggplot2\")\n#+end_src\n\n** [#B] Java\n\n#+begin_src shell :async :results output\nasdf plugin-add java https://github.com/halcyon/asdf-java.git\nasdf install java adoptopenjdk-15.0.1+9\nasdf global java adoptopenjdk-15.0.1+9\n#+end_src\n\n** [#B] Rust\n#+begin_src shell :async :results output\ncurl https://sh.rustup.rs -sSf | sh\n#+end_src\n\n#+begin_src shell :async :results output\nrustup toolchain add nightly\ncargo +nightly install racer\ncargo install rustfmt\nrustup component add rls rust-analysis rust-src\n#+end_src\n\n** [#B] Others\n\n#+begin_src shell :async :results output\nbrew install jq\nbrew install q\nbrew install ctags\n#+end_src\n\n#+begin_src shell :async :results output\n# format sql\npip install sqlparse\nbrew install sqlformat\n#+end_src\n\n#+begin_src shell :async :results output\nbrew install mplayer\n#+end_src\n\n* [#B] Advance Tools\n** Key Repeat\n\n#+begin_src shell :async :results output\ndefaults write NSGlobalDomain KeyRepeat -int 1 # normal minimum is 2 (30 ms)\ndefaults write NSGlobalDomain InitialKeyRepeat -int 10\n#+end_src\n\n** org-protocol\n*** Test org-protocol\n\n- Test on Emacs. Follow https://github.com/xuchunyang/setup-org-protocol-on-mac\n\n#+begin_src shell :async :results output\nemacsclient -c 'org-protocol:/capture?template=L\u0026url=foo\u0026title=bar'\n#+end_src\n\n- Test on Browser\n\n#+begin_src js\nlocation.href='org-protocol:/capture?template=E\u0026url=foo\u0026title=bar'\n#+end_src\n\n*** Creating org-protocol by Apple Script\n\n#+BEGIN_SRC applescript\non open location this_URL\n  -- do shell script \"/usr/local/bin/emacsclient \\\"\" \u0026 this_URL \u0026 \"\\\" -F '((name . \\\"doom-capture\\\") (width . 70) (height . 25) (transient . t))'\"\n  do shell script \"/usr/local/bin/emacsclient -F '((name . \\\"doom-capture\\\") (width . 70) (height . 25) (transient . t))' -e '(org-protocol-open-frame \\\"\" \u0026 this_URL \u0026 \"\\\")'\"\n  activate application \"Emacs\"\nend open location\n#+END_SRC\n\nor\n\n#+begin_src shell :async :results output\ncp ~/projects/dotfiles/org-protocol* /Applications/\n#+end_src\n\n- Open org-protocol and export it by application\n- Edit Info.plist with\n\n#+begin_src shell :async :results output\n/Applications/org-protocol.app/Contents/Info.plist\n#+end_src\n\n#+RESULTS:\n\n#+begin_src xml\n\u003ckey\u003eCFBundleURLTypes\u003c/key\u003e\n\u003carray\u003e\n  \u003cdict\u003e\n    \u003ckey\u003eCFBundleURLName\u003c/key\u003e\n    \u003cstring\u003eorg-protocol handler\u003c/string\u003e\n    \u003ckey\u003eCFBundleURLSchemes\u003c/key\u003e\n    \u003carray\u003e\n      \u003cstring\u003eorg-protocol\u003c/string\u003e\n    \u003c/array\u003e\n  \u003c/dict\u003e\n\u003c/array\u003e\n#+end_src\n\n- *IMPORTANT: Exit and Active org-protocol.app by clicking on it*\n\n*** Setup on Firefox\n\n#+begin_src js\n[\n  {\n    \"key\": \"ctrl+shift+n\",\n    \"action\": \"javascript\",\n    \"blacklist\": \"false\",\n    \"sites\": \"*mail.google.com*\",\n    \"open\": false,\n    \"activeInInputs\": true,\n    \"code\": \"location.href = 'org-protocol://capture?template=N\u0026url='+encodeURIComponent(location.href)+'\u0026title='+encodeURIComponent(document.title)+'\u0026body='+encodeURIComponent(window.getSelection()).replace(/'/g, '%27');\",\n    \"exported\": false,\n    \"sitesArray\": [\n      \"*mail.google.com*\"\n    ],\n    \"customName\": \"Capture today notes\"\n  },\n  {\n    \"key\": \"ctrl+shift+e\",\n    \"action\": \"javascript\",\n    \"blacklist\": \"false\",\n    \"sites\": \"*mail.google.com*\",\n    \"open\": false,\n    \"code\": \"var activeTextarea = document.activeElement;\\nvar selection = activeTextarea.tagName == \\\"TEXTAREA\\\" ? activeTextarea.value.substring(\\n    activeTextarea.selectionStart, activeTextarea.selectionEnd\\n ) : window.getSelection();\\n\\nlocation.href='org-protocol://capture?template=E\u0026url='+encodeURIComponent(location.href)+'\u0026title='+encodeURIComponent(document.title)+'\u0026body='+encodeURIComponent(selection)\",\n    \"activeInInputs\": true,\n    \"exported\": false,\n    \"sitesArray\": [\n      \"*mail.google.com*\"\n    ]\n  }\n]\n#+end_src\n\n** Install Fonts\n\n#+begin_src shell :async :results output\nbrew tap homebrew/cask-fonts \u0026\u0026 brew install --cask font-source-code-pro\n#+end_src\n\nInstall all the icons by Emacs\n\n#+BEGIN_SRC emacs-lisp\n(all-the-icons-install-fonts)\n#+END_SRC\n\n** talon\n\nMy talon config is here: https://github.com/suonlight/knausj_talon\n\n#+BEGIN_SRC shell :results output\ngit clone git@github.com:suonlight/knausj_talon.git $WORKSPACE/knausj_talon\n\nmkdir -p ~/.talon/user ~/.config/polybar\nrm -rf ~/.talon/user/knausj_talon\nrm -rf ~/.talon/user/hero\nln -s $WORKSPACE/knausj_talon ~/.talon/user/knausj_talon\nln -s $WORKSPACE/dotfiles/doom/private/talon/hero ~/.talon/user/hero\n#+END_SRC\n\n** aspell\n\n#+BEGIN_SRC shell :results output\nruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\" \u003c /dev/null 2\u003e /dev/null\n#+END_SRC\n\n* Linux\n\nUsing emacs exwm\n\n#+begin_src shell :async :results output\n# polybar\nrm -rf ~/.config/polybar\nln -s $WORKSPACE/dotfiles/polybar ~/.config/polybar\n\n# x window\nrm ~/.xinitrc ~/.xprofile\nln -s $WORKSPACE/dotfiles/.xinitrc ~/.xinitrc\nln -s $WORKSPACE/dotfiles/.xprofile ~/.xprofile\n#+end_src\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuonlight%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuonlight%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuonlight%2Fdotfiles/lists"}