Dotfiles
Set up a developer friendly Arch Linux system in minutes. Also supports WSL 2, Debian, Ubuntu and macOS for CLI tools!
Install / Use
/learn @nickjj/DotfilesREADME
dotfiles
This readme along with an install script will help you get everything running in a few minutes. It contains a bunch of configuration for the tools I use. I also have a number of blog posts and videos related to my dev environment.
🧬 Who Is This For?
This project is more than a few config files. In 1 command and ~5 minutes it can take a new or existing system and install / configure a number of tools aimed at developers. It will prompt or warn you if it's doing a destructive action like overwriting a config file. You can run the idempotent install script multiple times to stay up to date.
Philosophy
I deeply understand one person's bloat is another person's treasure. All packages, configs and symlinks are configurable before you modify your system. A mini-goal of this project is to avoid needing to fork this project while still giving you a reasonable amount of control, and if you want to fork it that's fine too.
Your machine is yours. If you want to dual boot, do it up. If you want multiple users, sure thing. If you don't want to encrypt your drive, no problem. Everyone is welcome here and you have full control.
🎁 What's in the Box?
Command Line
Supports Arch Linux, Debian, Ubuntu and macOS. It also supports WSL 2 for any supported Linux distro.
- Highlights:
- Tweak out your shell (zsh)
- Set up tmux
- Fully configure Neovim
- Create SSH / GPG keys if they don't already exist
- Install modern CLI tools and programming languages
(Optional) Scrolling / Tiling Desktop Environment
Supports Arch Linux.
- Highlights:
- niri (Wayland compositor), Waybar (status bar), Walker (app launcher) and friends
- Hotkey focused but tons of mouse / trackpad support
- Prefer TUI (Terminal User Interface) apps over GUI apps when possible
- Development / media creation focused apps are ready to go
Why niri and not XYZ?
It's resource efficient, extremely stable, lightning fast, infinitely tweakable, intuitively handles scrolling / tiling / floating windows, integrates awesomely with multiple monitors, actively developed, well thought out, has great documentation and the author is very helpful.
niri feels like a perfect match and I wanted to make a special call out because it's that good. I'm the "I was there 3,000 years ago" meme from Windows 2000, XP, 7, 10 and also macOS on company issued laptops. Nothing I have ever used in ~25 years has approached how I feel using this set up. It's not even close (yes I tried Hyprland too).
I recorded a demo video on how I use niri in my day to day. This repo will always have the most up to date changes so what you see on video will likely evolve over time!
Full Package List
There's docs with a complete list of packages along with what they're being used for and why.
The source of truth can always be found near the top of the install
script. If you scroll down a little bit you'll see variables for
each package manager. You can search for PACKAGES_PACMAN and go from there.
🧾 Documentation
🎨 Themes
Since these dotfiles are constantly evolving and I tend to reference them in videos, blog posts and other places I thought it would be a good idea to include screenshots in 1 spot.
Tokyonight Moon

Gruvbox Dark (Medium)

I prefer using themes that have good contrast ratios and are clear to see in video recordings. These dotfiles currently support easily switching between both themes but you can use any theme you'd like.
If you want to see icons you'll need a "nerd font". There's hundreds of them on https://www.nerdfonts.com/font-downloads with previews. I personally use Inconsolata NF which these dotfiles install for you.
Setting a theme
# Get a full list of themes by running: dot-theme-set --list
# There's also a --menu flag to preview themes in the desktop environment.
#
# Optionally you can skip adding a theme name and the next theme will be picked.
dot-theme-set THEME_NAME
When switching themes most terminal apps will update automatically, but if you
have a bunch of shells already open you can run the SZ (source
zsh)
alias to source new theme related configs.
Not all terminals are supported, if yours didn't change then check theming custom apps.
You can look in the themes/ directory to see which apps are themed and add additional apps too. If you don't like the included themes that's no problem. You can add custom themes and remove the defaults.
Wallpapers
Only available when the desktop environment is set up.
# Get a full list of wallpapers by running: dot-theme-set-bg --list
# There's also a --menu flag to preview wallpapers.
#
# Optionally you can skip adding a wallpaper name and the next wallpaper will be picked.
dot-theme-set-bg WALLPAPER_NAME
You can cycle between wallpapers that are compatible with the active theme.
This is controlled through the _theme.json file in each theme's directory,
it's under the wallpaper.synergy object.
✨ Quickly Get Set Up
There's an ./install script you can run to automate installing everything.
That includes installing system packages such as zsh, tmux, Neovim, etc. and
configuring a number of tools in your home directory.
It even handles cloning down this repo. You'll get a chance to pick the clone location when running the script as well as view and / or change any system packages that get installed before your system is modified.
If you're setting up a brand new system and plan to use the desktop environment you'll want to set up a bootable USB stick with the official Arch Linux ISO and then run the official archinstall script. There is a FAQ item covering all of that.
🌱 On a fresh system?
We're in a catch-22 where this install script will set everything up for you but to download and run the script to completion a few things need to exist on your system first.
It comes down to needing these packages, you can skip this step if you have them:
curlto download the install scriptbash 4+since the install script uses modern Bash features- This is only related to macOS, all supported Linux distros are good to go out of the box
Here's 1 liners you can copy / paste once to meet the above requirements on all supported platforms:
Debian / Ubuntu
# You can run this as root.
apt-get update && apt-get install -y curl
macOS
If you run bash --version and it says you're using Bash 3.X please follow
the instructions below:
# Curl is installed by default but bash needs to be upgraded, we can do that
# by brew installing bash. Once this command completes you can run the install
# script in the same terminal where you ran this command. Before running the
# install script `bash --version` should return a version > 3.X.
# OPTION 1: Using Apple silicon?
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& eval "$(/opt/homebrew/bin/brew shellenv)" \
&& brew install bash \
&& bash
# OPTION 2: Using an Intel CPU?
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& eval "$(/usr/local/bin/brew shellenv)" \
&& brew install bash \
&& bash
# The colors will look bad with the default macOS Terminal app. These dotfiles install: https://ghostty.org/
⚡️ Install script
You can download and run the install script with this 1 liner:
BOOTSTRAP=1 bash <(curl -fsSL https://raw.githubusercontent.com/nickjj/dotfiles/master/install)
The above command only downloads a few files into a temporary directory and then provides a little bit of help text on how to proceed with the installation. Think of it as a pre-installer.
If you're not comfortable blindly running a script on the internet, that's no problem. You can view the install script to see exactly what it does. The bottom of the file is a good place to start. Alternatively you can look around this repo and reference the config files directly without using any script.
🐳 Try it in Docker without modifying your system:
# Start a Debian container, we're passing IN_CONTAINER to be explicit we're in Docker.
docker container run --rm -it -e "IN_CONTAINER=1" -v "${PWD}:/app" -w /app debian:stable-slim bash
# Copy / paste all 3 lines into the container's prompt and run it.
#
# Since we can't open a new terminal in a container we'll need to manually
# launch zsh and source a few files. That's what the last line is doing.
apt-get update && apt-get install -y curl \
&& bash <(curl -sS https://raw.githubusercontent.com/nickjj/dotfiles/master/install) \
&& zsh -c ". ~/.config/zsh/.zprofile && . ~/.config/zsh/.zshrc; zs
Related Skills
openhue
330.3kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
330.3kElevenLabs text-to-speech with mac-style say UX.
weather
330.3kGet current weather and forecasts via wttr.in or Open-Meteo
cc-switch
31.8kA cross-platform desktop All-in-One assistant tool for Claude Code, Codex, OpenCode, openclaw & Gemini CLI.
