{"id":28101234,"url":"https://github.com/happy-dude/dotfiles","last_synced_at":"2025-05-13T18:54:25.141Z","repository":{"id":2188840,"uuid":"3136668","full_name":"happy-dude/dotfiles","owner":"happy-dude","description":"Custom dotfile configurations and settings","archived":false,"fork":false,"pushed_at":"2024-08-22T20:28:46.000Z","size":27390,"stargazers_count":16,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-08-22T22:34:41.154Z","etag":null,"topics":["configuration-files","dotfiles","emacs","evil-mode","linux","macos","neovim","nvim","personal","stow","tmux","vim"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/happy-dude.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"Happy-Dude"}},"created_at":"2012-01-09T13:29:31.000Z","updated_at":"2024-07-01T06:45:03.000Z","dependencies_parsed_at":"2024-04-07T05:22:54.334Z","dependency_job_id":"98412595-d6e1-47c0-9300-2c54bdb83dbc","html_url":"https://github.com/happy-dude/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/happy-dude%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happy-dude%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happy-dude%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happy-dude%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/happy-dude","download_url":"https://codeload.github.com/happy-dude/dotfiles/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254010461,"owners_count":21998988,"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":["configuration-files","dotfiles","emacs","evil-mode","linux","macos","neovim","nvim","personal","stow","tmux","vim"],"created_at":"2025-05-13T18:54:23.775Z","updated_at":"2025-05-13T18:54:25.130Z","avatar_url":"https://github.com/happy-dude.png","language":"Shell","funding_links":["https://github.com/sponsors/Happy-Dude"],"categories":[],"sub_categories":[],"readme":"# Happy-Dude's dotfiles\n\n\u003e happy-dude's personal dotfiles repo\n\nThis repo is managed solely by myself and configured for my personal workflows\nand use-cases.\n\nFeel free to browse and adopt any settings to help tweak your own setup; I've\ndone my best to attribute resources in the comments for further details.\n\nMy entire workflow is currently based within macOS, reflecting in Unix-compatible\nconfigurations. I have not used Linux nor Windows as a daily driver in a while and\nI will make the appropriate changes to make my settings compatible when I do.\n\n## Branches\n\nMultiple branches of dotfiles are useful for different platforms or environments\nthat require modified settings.\n\nThere are (currently) two branches, `master` and `macos`. macOS users should\ncheckout the `macos` branch by executing:\n\n```bash\ngit checkout -b macos origin/macos\n```\n\n## Submodules\n\nThis repo contains git [submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules)\nfor many [configs](https://github.com/Happy-Dude/dotfiles/tree/master/zsh),\n[vim](https://github.com/Happy-Dude/dotfiles/tree/master/vim/.vim/pack/bundle/opt), and\n[emacs](https://github.com/Happy-Dude/dotfiles/tree/master/emacs/.config/emacs/plugins)\nplugin packages.\n\nEach of these project repos have their own maintainers, licenses, and issue\ntrackers. Credit goes to each respective project and their communities for\nproviding useful tool for people like me to use. Please check them out and\nsupport them where you can!\n\n## Tweaking and Tuning\n\nI recommend starting with minimal configs and adopting tweaks over time\nthat:\n\n1. streamlines a workflow you perform regularly or\n2. helps overcome and solve a problem at hand.\n\nApproaching your own tweaking and tuning with these points in mind help make\nsettings easy to understand and immediately productive while saving on bloat\nfrom superfluous settings you may not actually need.\n\n## Install\n\nTODO: write a script that \"stowifies\" the configs automatically. Take a look at\n[prior-art](https://writingco.de/blog/how-i-manage-my-dotfiles-using-gnu-stow/#automate-the-dotfiles)\nand remix, transform, and adapt accordingly.\n\n### Requirements\n\n* [git](https://github.com/git/git)\n* [gnu stow](https://github.com/aspiers/stow/)\n* [bash](https://www.gnu.org/software/bash/) (for scripts)\n\n1. Clone the repository and submodules\n\n    ```bash\n    git clone --recursive https://github.com/Happy-Dude/dotfiles.git $HOME/dotfiles\n    cd $HOME/dotfiles\n    git submodule update --init --recursive --remote\n    ```\n\n2. Use GNU Stow to symlink configs\n\n    NOTE: stow will not symlink over an existing file or symlink. Check out the\n    [manual](https://www.gnu.org/software/stow/manual/stow.html#Conflicts) for more\n    details.\n\n    ```bash\n    cd $HOME/dotfiles\n    stow vim\n    stow tmux\n    stow zsh\n    ... etc ...\n    ```\n\n### Neovim\n\nUnfortunately, stow does not [currently](https://github.com/aspiers/stow/issues/3#issuecomment-586654099)\nhandle directories or files that are symlinked. For example, symlinking\n`neovim/init.vim` to `vim/vimrc` and then running `stow` on\nthe directories do not have the effect of creating a symlink to the absolute path\nof the original link, `neovim/init.vim`.\n\nSince I have my neovim and vim configurations backwards-compatible with each other\nand using the same directories, I use stow for the base vim configs and use the\nfollowing symlink for neovim:\n\n```bash\nln -s $HOME/dotfiles/.vim $HOME/.config/nvim\n```\n\n### Enable True-Color support on (Neo)vim and Tmux w/ terminfo on macOS\n\nRefer to prior-art from bbqtd's excellent [gist](https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95)\nand [jdhao's blog](https://jdhao.github.io/2018/10/19/tmux_nvim_true_color/).\nThere is also extra context on the following tmux issues [here](https://github.com/tmux/tmux/issues/597)\nand [here](https://github.com/tmux/tmux/issues/1257).\n\n#### terminfo\n\nGrab the latest terminfo database from\n[Thomas E. Dickey](https://invisible-island.net/), who is brilliant and has\nworked on projects like\n[ncurses](https://invisible-island.net/ncurses/ncurses.html). There is some extra\nreading available about [ncurses](https://invisible-island.net/ncurses/ncurses.faq.html),\nthe\n[terminfo database](https://invisible-island.net/ncurses/ncurses.faq.html#terminfo_copying)\nand some thoughts on\n[copyright notices](https://invisible-island.net/ncurses/ncurses.faq.html#terminfo_copying).\nCheck out his [GitHub](https://github.com/ThomasDickey)\nand [ncurses-snapshots](https://github.com/ThomasDickey/ncurses-snapshots) repo!\n\n1. Download latest terminfo sources\n\n    ```bash\n    curl -LO https://raw.githubusercontent.com/ThomasDickey/ncurses-snapshots/master/misc/terminfo.src\n    ```\n\n2. Extract terminfo from source to their compiled formats\n\n    The compiled sources will be outputted to your `$HOME/.terminfo` directory\n\n    ```bash\n    tic -xe tmux,tmux-256color terminfo.src\n\n    # Feel free to extra other terminfo sources\n    tic -xe screen,screen-256color,xterm,xterm-256color,alacritty,alacritty-direct,kitty terminfo.src\n    ```\n\n3. Validate the terminfo sources have been \"installed\"\n\n    ```bash\n    infocmp -x tmux-256color\n    ```\n\n#### Tmux\n\nWith the above terminfo generated and a terminal emulator that supports\n\"true color\" (24-bit), enable the following options in your tmux config.\nSee the tmux [FAQ](https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour)\nfor more details.\n\n```text\nset-option -sa terminal-overrides ',*256col*:RGB,'\nset-option -ga terminal-overrides ',*256col*:Tc,'\n```\n\n#### (Neo)vim\n\nEnable the following setting in your vimrc:\n\n```vim\nif (\u0026t_Co == 256 || \u0026t_Co == 88) \u0026\u0026 has(\"termguicolors\")\n    set termguicolors\nendif\n```\n\n### 'Other' Configs\n\nThere are a handful of configs and settings in the\n['other'](https://github.com/Happy-Dude/dotfiles/tree/master/other) directory\nwhich is primarily a collection of useful scripts, configs, and preferences I am\ncurrently using or have used in the past.\n\nThese are generally not stow-able files since they may not belong in the\nuser's `$HOME` directory; review them on a case-by-case basis.\n\n## Updating\n\nTo update the repo, make sure to pull in the latest changes and update submodules:\n\nNOTE: There may be breaking changes within the repo and submodules. Please use\ndue diligence and review each project's commit history and changelog before\nincorporating updates into your configs.\n\n### Fetching Latest Changes\n\n```bash\ncd $HOME/dotfiles\ngit fetch --all\n```\n\n### Applying Latest Changes\n\n```bash\ncd $HOME/dotfiles\ngit pull\ngit submodule --init --recursive --remote\n```\n\n## Misc\n\n### tmux, macOS, and copy-paste\n\nInstalling tmux on OS X on using Homebrew (and likely Macports also) would cause\na message saying `launch_msg(\"SetUserEnvironment\"): Socket is not connected`\nerror. According to a\n[StackOverflow](http://stackoverflow.com/questions/10193561/tmux-socket-is-not-connected-error-on-os-x-lion)\nanswer, and ChrisJohnsen's\n[tmux-MacOSX-pasteboard](https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard),\nit seems that OS X's pbcopy and pbpaste \"fail to function properly\" for\napplicationsthat run on Terminal emulators and have clipboard access (like vim,\ntmux, and screen). See thoughtbot's [How to Copy and Paste with tmux on Mac OS X](https://thoughtbot.com/blog/how-to-copy-and-paste-with-tmux-on-mac-os-x)\nand [tmux Copy \u0026 Paste on OS X: A Better Future](https://thoughtbot.com/blog/tmux-copy-paste-on-os-x-a-better-future)\nfor context.\n\nChris Johnsen's patch should fix this problem. Install his\nreattach-to-user-namespace wrapper/patch using the following command (if you're\nusing Homebrew):\n\n```bash\nbrew install reattach-to-user-namespace\n```\n\nIf you are using Macports, execute\n\n```bash\nport install tmux-pasteboard\n```\n\n### Old iptables Notes (circa 2014)\n\n#### iptables Rules\n\nNOTE: This has only worked on Ubuntu-based Linux distributions. I need\nto learn more about the boot process in other distributions to make them work\nright. I'm looking into seeing how it works for Arch Linux.\n\n```bash\nln -s ~/dotfiles/iptables /etc/iptables; \\\nln -s ~/dotfiles/iptables/iptables /etc/init.d/iptables; \\\nchmod +x /etc/init.d/iptables; \\\nsudo update-rc.d iptables\n```\n\nExecute the script with `service iptables start`. Again, this so far has only\nbeen tested on Ubuntu-based distributions.\n\nTo install on Arch Linux (as of April 2013, running systemd), execute the\nfollowing commands:\n\n```bash\nln -s ~/dotfiles/iptables/iptables.rules /etc/iptables/iptables.rules\nln -s ~/dotfiles/iptables/ip6tables.rules /etc/ip6tables/ip6tables.rules\nsudo systemctl enable iptables.service\n```\n\n#### iptables Files\n\nI decided to include my IPTables configuration with this repository, located in\nthe `other/iptables` directory.\n\nInside this directory are\n\n* iptables, the executable script\n* iptables.complete, the full list of iptable rules I have made and exported\n* iptables.current, the list of iptable rules after importing iptables.complete\n* iptables.conf, a configuration file used by the executable script\n\nIn Ubuntu, the entire iptables directory should be symlinked into /etc/iptables\nand the `iptables` script should be symlinked to `/etc/init.d/iptables`. Once\nthis is done, you can start and stop your IPTable rules like any other running\nservice by issuing commands such as `service iptables start` or `service iptables\nstop`.\n\nOn Arch Linux, this seems to be a little bit different due to how Arch decides\nto simply some of the configuration and boot process. I have not implemented the\nscripts on a Arch Linux installtion yet, so I have to do a little bit of reading\nabout the [boot process](https://wiki.archlinux.org/index.php/Arch_Boot_Process).\n\n## Meta\n\n* Last change: Fri Sep 11 01:22:59 CDT 2020\n* Maintainer: Stanley Chan, a.k.a. [Happy-Dude](https://github.com/happy-dude)\n\n## License\n\nThe files and code contributed from myself are in the public domain.\n\nYou are free to use, transform, adapt, and/or remix my content however you like.\n\nThe submodules included in this project repo have their own maintainers and licenses.\nPlease visit the respective projects' repos to learn more.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappy-dude%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhappy-dude%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappy-dude%2Fdotfiles/lists"}