{"id":14069777,"url":"https://github.com/nickjj/dotfiles","last_synced_at":"2025-05-15T00:14:06.671Z","repository":{"id":37850613,"uuid":"162295765","full_name":"nickjj/dotfiles","owner":"nickjj","description":"Settings for various tools I use.","archived":false,"fork":false,"pushed_at":"2025-05-06T12:09:20.000Z","size":733,"stargazers_count":992,"open_issues_count":0,"forks_count":184,"subscribers_count":45,"default_branch":"master","last_synced_at":"2025-05-06T13:25:00.155Z","etag":null,"topics":["dotfiles","neovim","terminal","tmux","wsl2","zsh"],"latest_commit_sha":null,"homepage":"https://nickjanetakis.com/blog/the-tools-i-use","language":"Shell","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/nickjj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"nickjj","custom":["https://www.paypal.me/nickjanetakis"]}},"created_at":"2018-12-18T13:53:57.000Z","updated_at":"2025-05-06T12:09:25.000Z","dependencies_parsed_at":"2023-11-11T14:28:10.502Z","dependency_job_id":"88542a59-a00b-4695-b5eb-15b72f3f01ad","html_url":"https://github.com/nickjj/dotfiles","commit_stats":{"total_commits":351,"total_committers":3,"mean_commits":117.0,"dds":0.02564102564102566,"last_synced_commit":"dcef267f36765d960c8bf893456ea2165c58c38f"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickjj%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickjj","download_url":"https://codeload.github.com/nickjj/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254249206,"owners_count":22039029,"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":["dotfiles","neovim","terminal","tmux","wsl2","zsh"],"created_at":"2024-08-13T07:07:13.128Z","updated_at":"2025-05-15T00:14:01.661Z","avatar_url":"https://github.com/nickjj.png","language":"Shell","funding_links":["https://github.com/sponsors/nickjj","https://www.paypal.me/nickjanetakis"],"categories":["Dotfiles","Shell"],"sub_categories":["Swift"],"readme":"# dotfiles\n\nThis readme along with an install script will help you get everything running\nin a few commands. It contains a bunch of configuration for the [tools I\nuse](https://nickjanetakis.com/blog/the-tools-i-use). I also have a number of\n[blog posts and\nvideos](https://nickjanetakis.com/blog/tag/dev-environment-tips-tricks-and-tutorials)\nrelated to my dev environment.\n\n## 🧾 Documentation\n\n- [View screenshots](#screenshots) of the current set up and how to switch themes\n- [Quickly get set up with these dotfiles](#quickly-get-set-up-with-these-dotfiles)\n  - [Extra WSL 1 and WSL 2 steps](#extra-wsl-1-and-wsl-2-steps)\n- [FAQ](#faq)\n  - [How to personalize these dotfiles?](#how-to-personalize-these-dotfiles)\n  - [How to get theme support in your terminal?](#how-to-get-theme-support-in-your-terminal)\n  - [How to add custom themes to the set-theme script?](#how-to-add-custom-themes-to-the-set-theme-script)\n  - [How to fix Neovim taking a long time to open when inside of WSL?](#how-to-fix-vim-taking-a-long-time-to-open-when-inside-of-wsl)\n  - [Where is the original Vim config?](#where-is-the-original-vim-config)\n- [About the author](#about-the-author)\n\n## 🎨 Themes\n\nSince these dotfiles are constantly evolving and I tend to reference them in\nvideos, blog posts and other places I thought it would be a good idea to\ninclude screenshots in 1 spot.\n\n### Tokyonight Moon\n\n![Tokyonight Moon](https://nickjanetakis.com/assets/screenshots/dotfiles-tokyonight-moon-7320a3fb8a76462e64d13bc125a2f284.jpg)\n\n### Gruvbox Dark (Medium)\n\n![Gruvbox Dark Medium](https://nickjanetakis.com/assets/screenshots/dotfiles-gruvbox-dark-medium-cfde05b1e4ccfa0ca9ebf0c089d99a28.jpg)\n\nI prefer using themes that have good contrast ratios and are clear to see in\nvideo recordings. These dotfiles currently support easily switching between\nboth themes but you can use any theme you'd like.\n\nIt's worth pointing out if you want to see icons you'll need a \"nerd font\".\nThere's hundreds of them on \u003chttps://www.nerdfonts.com/font-downloads\u003e with\npreviews. I personally use \"[Inconsolata Nerd\nFont](https://github.com/ryanoasis/nerd-fonts/releases/download/v3.3.0/Inconsolata.zip)\".\n\n### Setting a theme\n\nThese dotfiles include a `set-theme` script that you can run from your terminal\nto set your theme to any of the themes listed above. This script takes care of\nconfiguring your terminal, tmux, Neovim, GitUI and FZF in 1 command.\n\nIf you don't like the included themes that's no problem. You can use whatever\nyou want, there's no limitations. You could choose to manually change the\ncolors or [adjust the set-theme\nscript](#how-to-add-custom-themes-to-the-set-theme-script) to add a custom\ntheme.\n\nAfter installing these dotfiles you can switch themes with:\n\n```sh\n# Available themes are: tokyonight-moon and gruvbox-dark-medium\nset-theme THEME_NAME\n```\n\nWhen switching themes your terminal and tmux colors will update automatically,\nbut if you have Neovim already open you'll need to manually close and open it.\n\n*If you get a message about your terminal being unknown please review [this FAQ\nitem](#how-to-get-theme-support-in-your-terminal).*\n\n## ✨ Quickly Get Set Up with These Dotfiles\n\nThere's an `./install` script you can run to automate installing everything.\nThat includes installing system packages such as zsh, tmux, Neovim, etc. and\nconfiguring a number of tools in your home directory.\n\nIt even handles cloning down this repo. You'll get a chance to pick the clone\nlocation in the script as well as view and / or change any system packages that\nget installed.\n\nThe script is idempotent so you can run it more than once to stay updated.\n\nThe install script is optimized for these operating systems and distros:\n\n- Debian, Ubuntu and its derivatives\n- macOS\n\nIt will still work with other distros of Linux if you skip installing system\npackages (more details are below).\n\n**You can download and run the install script with this 1 liner:**\n\n```sh\nbash \u003c(curl -sS https://raw.githubusercontent.com/nickjj/dotfiles/master/install)\n```\n\n*If you're not comfortable blindly running a script on the internet, that's no\nproblem. You can view the [install\nscript](https://github.com/nickjj/dotfiles/blob/master/install) to see exactly\nwhat it does. Each section is commented. Sudo is only used to install system\npackages. Alternatively you can look around this repo and reference the config\nfiles directly without using any script.*\n\nYou can also run the script without installing system packages:\n\n```sh\nbash \u003c(curl -sS https://raw.githubusercontent.com/nickjj/dotfiles/master/install) --skip-system-packages\n```\n\nThe above can be useful if you're using an unsupported distro of Linux in which\nyou'll need to install the [dependent system\npackages](https://github.com/nickjj/dotfiles/blob/master/install) on your own\nbeforehand. Besides that, everything else is supported since it's only dealing\nwith files in your home directory.\n\nThis set up targets zsh 5.0+, tmux 3.1+ and Neovim v0.10+. As long as you can\nmeet those requirements you're good to go. The install script will take care\nof installing these for you unless you've skipped system packages.\n\n**Try it in Docker without modifying your system:**\n\n```sh\n# Start a Python container. We're using Python for Python LSP support.\ndocker container run --rm -it -v \"${PWD}:/app\" -w /app python:3.13.2-slim-bookworm bash\n\n# Copy / paste all 3 lines into the container's prompt and run it.\n#\n# We need to install curl + sudo beforehand because they're not installed by\n# default in this Docker image.\n#\n# Also, since we can't open a new terminal in a container we'll need to manually\n# launch zsh and source a few files.\napt-get update \u0026\u0026 apt-get install -y curl sudo \\\n  \u0026\u0026 bash \u003c(curl -sS https://raw.githubusercontent.com/nickjj/dotfiles/master/install) \\\n  \u0026\u0026 zsh -c \". ~/.config/zsh/.zprofile \u0026\u0026 . ~/.config/zsh/.zshrc; zsh -i\"\n```\n\n*Keep in mind with the Docker set up, unless your terminal is already\nconfigured to use Tokyonight Moon then the colors may look off. That's because\nyour local terminal's config will not get automatically updated.*\n\n### Did you install everything successfully?\n\nNice!\n\nIf you haven't done so already please close your terminal and open a new\none, then follow the step(s) below:\n\n#### 1. Configure your git name and email\n\nOne of the things the install script did was create a git ignored\n`.config/git/config.local` file in your dotfiles directory and symlinked it to\n`~/.config/git/config.local`. You're meant to put in your name and email\naddress so your details are used when you make git commits.\n\n```sh\nnvim ~/.config/git/config.local\n```\n\n*There are other git ignored \"local\" files unrelated to git in `.config/zsh/`\ntoo.*\n\n#### 2. (Optional) confirm that a few things work\n\n```sh\n# Check to make sure git is configured with your name and email.\ngit config --list\n\n# Sanity check to see if you can run some of the tools we installed.\nnvim --version\ntmux -V\nnode --version\n```\n\nBefore you start customizing certain config files, take a look at the\n[personalization question in the FAQ](#how-to-personalize-these-dotfiles).\n\n### Extra WSL 1 and WSL 2 steps\n\nIn addition to the Linux side of things, there's a few config files that I have\nin various directories of this dotfiles repo. These have long Windows paths and\nare in the `c/` directory.\n\nIt would be expected that you copy those over to your system while replacing\n\"Nick\" with your Windows user name if you want to use those things, such as my\nMicrosoft Terminal `settings.json` file and others. Some of the paths and guids\n(WSL distros, etc.) may also contain unique IDs too, so adjust them as needed\non your end.\n\nSome of these configs expect that you have certain programs or tools installed\non Windows. The [tools I use blog\npost](https://nickjanetakis.com/blog/the-tools-i-use) has a complete list of\nthose tools so you can pick the ones you want to install.\n\nPay very close attention to the `c/Users/Nick/.wslconfig` file because it has\nvalues in there that you will very likely want to change before using it.\n[This commit\nmessage](https://github.com/nickjj/dotfiles/commit/d0f1fc2622204b809cf7fcbb1a82d45b451064c4)\ngoes into the details.\n\nAlso, you should reboot to activate your `/etc/wsl.conf` file (the install\nscript created this). That will be necessary if you want to access your mounted\ndrives at `/c` or `/d` instead of `/mnt/c` or `/mnt/d`.\n\n## 🔍 FAQ\n\n### How to personalize these dotfiles?\n\nChances are you'll want to personalize some of these files, such as various\nNeovim settings. Since this is a git repo you can always do a `git pull` to get\nthe most up to date copy of these dotfiles, but then you may find yourself\nclobbering over your own personal changes.\n\nSince we're using git here, we have a few reasonable options.\n\nFor example, from within this dotfiles git repo you can run `git checkout -b\npersonalized` and now you are free to make whatever changes that you want on\nyour custom branch.  When it comes time to pull down future updates you can run\na `git pull origin master` and then `git rebase master` to integrate any\nupdates into your branch.\n\nAnother option is to fork this repo and use that, then periodically pull and\nmerge updates. It's really up to you.\n\n### How to get theme support in your terminal?\n\nThe `set-theme` script tries to be pretty flexible but it's not super tuned to\nsupport every terminal in every operating system. If it can't find a valid\nterminal config it will skip trying to set the theme and try to provide a\nhelpful message.\n\n#### Windows Terminal\n\nThese dotfiles have my exact config in\n`c/Users/Nick/AppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/LocalState/settings.json`,\nyou can copy / paste that config to a similar path within your Windows set up.\nIt comes set up with all supported themes. This is only necessary to do once.\nIt's not automated because it would be pretty rude if the install script\noverwrote your Windows files.\n\nOnce you have that set up, running `set-theme THEME_NAME` will work without\nfurther manual adjustments.\n\n#### iTerm2\n\nThese dotfiles have color presets for all supported themes in\n`c/Users/Nick/iTerm2`. You'll want to import them into your iTerm2 profile.\nThis is only necessary to do once. Here's the steps to take:\n\n1. Open *iTerm2*\n2. Goto *Settings*\n3. Goto *Profiles* (tab within settings)\n4. Goto *Colors* (tab within profiles)\n5. Click the *Color Presets..*. drop down box in the bottom right\n6. Select *Import...* and choose the theme you want to import\n7. Repeat these steps for each theme you're interested in\n\nI don't use a Mac full time (only on a work laptop) so I haven't automated much\nbut iTerm2 appears a little tricky to fully automate with theme switching. When\nyou run `set-theme THEME_NAME` to switch themes you will need to manually pick\nthe theme in iTerm2. You can run through steps 1-5 above and pick it from the\nlist instead of importing it. If you have a way to automate this reliably\nplease open a PR!\n\nAlso, if you noticed ALT+x keymaps within Neovim aren't working that's because\nyou need to goto your profile (step 3 from above), then the *Keys* tab and\nenable \"Esc+\" for the ALT keys you plan to use (left and / or right). If it's\nset to \"Normal\" (the likely default) then they won't work out of the box.\n\n#### Everything else\n\nIf you're using a popular terminal and want it officially supported please open\na pull request. You'd modify `set-theme` for the `TERMINALS` dictionary as well\nas the `change_terminal_theme` function. The basic idea is it tries to find\nspecific lines within the config file and does a regex find and replace to swap\nin the theme name.\n\nHappy to assist in your PR to answer questions.\n\n### How to add custom themes to the set-theme script?\n\nAfter installing these dotfiles you'll have a `~/.local/bin/set-theme` script.\nIt's a [zero dependency Python 3\nscript](https://github.com/nickjj/dotfiles/blob/master/.local/bin/set-theme).\n\n1. Open the above file\n2. Check out the `THEMES` dictionary near the top of the file\n3. Copy one of the existing themes' dictionary items, such as `tokyonight-moon` or `gruvbox-dark-medium`\n    - If your theme has Neovim variants, copy Gruvbox else copy Tokyonight\n4. Rename the dictionary's key to whatever your new theme's name is\n    - If the Neovim theme name is the same as the dictionary key, that will be used\n5. Create the associated `tmux` theme in `~/.config/tmux/themes`\n6. Create the associated `fzf` theme in `~/.config/zsh/themes/fzf`\n7. Create the associated `gitui` theme in `~/.config/gitui`\n8. Modify any supported terminal configs to add the theme\n9. Run `set-theme cooltheme`, replacing `cooltheme` with whatever name you used in step 4\n\nIf you added a theme with good contrast ratios please open a pull request to\nget it added to the script.\n\n### How to fix Neovim taking a long time to open when inside of WSL?\n\nIt primarily comes down to either VcXsrv not running or a firewall tool\nblocking access to VcXsrv and it takes a bit of time for the connection to time\nout.\n\nYou can verify this by starting Neovim with `nvim -X` instead of `nvim`. This\nwill prevent Neovim from connecting to an X server. This also means clipboard\nsharing to your system clipboard won't work, but it's good for a test.\n\nNeovim will try to connect to that X server by default because `DISPLAY` is\nexported in the `.zshrc` file. Installing and configuring VcXsrv as per these\ndotfiles will fix that issue.\n\nIf it still persists, it might be a software firewall issue. You can open TCP\nport 6000 and also restrict access to it from only WSL 2. This will depend on\nwhich tool you're using to configure that but that should do the trick.\n\n### Where is the original Vim config?\n\nI've made dozens of [blog posts and\nvideos](https://nickjanetakis.com/blog/tag/vim-tips-tricks-and-tutorials) about\nVim. Sometimes I linked directly to a commit so there's a permalink to it but\nother times I did not.\n\nBefore switching to Neovim I made a `vim` git tag. You can check out the state\nof the repo for that tag by [going\nhere](https://github.com/nickjj/dotfiles/tree/vim). You'll see `.vimrc` in the\nroot directory. If you cloned these dotfiles locally you can `git checkout\nvim`. Keep in mind that's frozen to that point in time. Future updates\nunrelated to Vim will not be included in that tag.\n\n## 👀 About the Author\n\nI'm a self taught developer and have been freelancing for the last ~20 years.\nYou can read about everything I've learned along the way on my site at\n[https://nickjanetakis.com](https://nickjanetakis.com/). There's hundreds of\n[blog posts](https://nickjanetakis.com/blog/) and a couple of [video\ncourses](https://nickjanetakis.com/courses/) on web development and deployment\ntopics. I also have a [podcast](https://runninginproduction.com) where I talk\nto folks about running web apps in production.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickjj%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickjj%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickjj%2Fdotfiles/lists"}