Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

MarkArranz/dotfiles

Repository files navigation

Dotfiles

Personal development environment configurations managed with chezmoi. These dotfiles target macOS and Linux (Arch-based), with chezmoi templates handling platform-specific differences automatically.

A Catppuccin color scheme is applied across all tools (Mocha variant in most tools, Macchiato in tmux, Frappe in qt6ct).

Prerequisites

  • chezmoi -- dotfile manager that uses templates to handle cross-platform differences. It maps this repo's source files (e.g. dot_gitconfig.tmpl) to their real locations (e.g. ~/.gitconfig).
  • Nerd Font -- many tools here expect a patched Nerd Font for icons and symbols. The configs default to JetBrains Mono NL Nerd Font.

Getting Started

Automated Install

An install script is included that installs all tools and their prerequisites for the current platform (macOS with Homebrew or Arch Linux with pacman/yay):

git clone https://github.com/MarkArranz/dotfiles.git
cd dotfiles
./install.sh

The script will prompt before making changes and handles:

  • Installing all packages (Homebrew formulae/casks or pacman/AUR packages)
  • Setting up plugin managers (TPM for tmux)
  • Optionally installing Claude Code CLI
  • Applying the dotfiles via chezmoi
  • Setting Zsh as the default shell

Manual Install

If you prefer to install tools yourself:

# One-liner: install chezmoi and apply these dotfiles
chezmoi init --apply <your-github-username>

See the chezmoi quick start guide for more details.

Included Tools

Cross-Platform

These tools are configured for both macOS and Linux.

Tool Description
Neovim A modern, extensible terminal-based text editor forked from Vim. Configured here with the LazyVim distribution, which provides a batteries-included IDE experience with LSP support, syntax highlighting via Tree-sitter, fuzzy finding, and more.
Zsh A powerful Unix shell with advanced tab completion, globbing, and scripting capabilities. Two configs are included that you can switch between by changing ZDOTDIR: one based on Oh My Zsh (omz/) and one based on Zap (zsh/). Both provide aliases, autosuggestions, syntax highlighting, and vi-mode keybindings.
Git Distributed version control system. Configured with delta as the pager for improved diffs, conditional includes for separating work and personal identities, and zdiff3 merge conflict style.
tmux A terminal multiplexer that lets you run multiple terminal sessions inside a single window, detach and reattach to sessions, and split panes. Configured here with Ctrl+Space as the prefix key, vim-style pane navigation, and the TPM plugin manager.
Starship A fast, minimal, and highly customizable shell prompt written in Rust. It displays contextual information such as the current git branch, active language runtimes, and exit codes -- all rendered with Nerd Font icons.
fzf A general-purpose command-line fuzzy finder. It lets you interactively search and select from lists of files, command history, processes, and more. Used here as the backend for shell history search and tab completion.
zoxide A smarter cd command that learns which directories you visit most frequently. Type z foo and it jumps to the most likely match instead of requiring a full path.
bat A cat replacement with syntax highlighting, line numbers, and git integration. When you bat a file, it renders the contents with color-coded syntax, making it much easier to read code in the terminal.
Yazi A blazing-fast terminal file manager written in Rust with image preview support, vim-like keybindings, and a plugin system. Think of it as a modern alternative to ranger.
Kitty A GPU-accelerated terminal emulator that supports ligatures, image rendering, and tiling layouts natively. Configured here with a JetBrains Mono Nerd Font, powerline-style tabs, and integration with Neovim for scrollback browsing via kitty-scrollback.nvim.
Zathura A lightweight, keyboard-driven PDF and document viewer with vim-like navigation.
btop A resource monitor that shows CPU, memory, disk, network, and process usage with a colorful TUI. A modern alternative to top and htop.
delta A syntax-highlighting pager for git diff, git log, and git show output. It makes diffs significantly more readable with side-by-side views, line numbers, and language-aware highlighting. Used as the configured git pager.

Linux Only

These tools are specific to a Linux (Wayland/Hyprland) desktop environment.

Tool Description
Hyprland A dynamic tiling Wayland compositor (window manager) with smooth animations, rounded corners, and a highly scriptable configuration. It manages window placement, workspaces, keybindings, and multi-monitor setups. Also includes companion utilities: hyprlock (lock screen), hypridle (idle management), hyprpaper (wallpaper), and hyprsunset (blue light filter).
Ashell A status bar and notification panel for Hyprland. Displays workspaces, the focused window title, system info, a tray, clock, and more along the top of the screen.
Rofi An application launcher and window switcher. Press a keybinding and a search bar appears where you can type to find and launch applications, switch windows, browse files, or run shell commands.
Kanata A software keyboard remapper that runs as a background service. Used here to implement home-row mods -- holding a, s, d, f (and their right-hand counterparts) produces Ctrl, Alt, Meta, and Shift, while tapping them types the normal letter.
Qt6ct A configuration tool for Qt 6 application appearance on non-KDE desktops. Used here to apply the Catppuccin Frappe theme to Qt-based applications so they match the rest of the desktop.
Chromium & Electron flags Configuration files (chromium-flags.conf, electron-flags.conf) that enable native Wayland support for Chromium-based browsers and Electron apps, preventing them from falling back to XWayland.

macOS Only

These tools are specific to a macOS desktop environment.

Tool Description
yabai A tiling window manager for macOS that uses a scripting addition for advanced features like window opacity, animations, and automatic space management.
skhd A simple hotkey daemon for macOS. It listens for keyboard shortcuts globally and triggers actions like launching apps, focusing windows, or sending commands to yabai. Acts as the keybinding layer for the yabai window manager.
Karabiner-Elements A powerful, low-level keyboard remapper for macOS. It can remap any key, create complex modification rules (like tap-vs-hold behavior), and handle device-specific configurations. Used here for system-level keyboard customization.
SketchyBar A highly customizable status bar replacement for the macOS menu bar. Configured here with Lua scripts to show workspaces, the focused app, battery, CPU usage, volume, Wi-Fi, GitHub notifications, and more. Integrates with yabai for workspace awareness.
JankyBorders A lightweight utility that draws colored borders around the focused window on macOS, making it easy to see which window is active. Configured with a pink-to-sky gradient for the active window.

Repository Structure

.
├── install.sh                  # Automated installer for all tools and prerequisites
├── .chezmoi.toml.tmpl          # Chezmoi config: detects OS, chassis type, hostname
├── .chezmoiexternal.toml.tmpl  # External dependencies (themes, plugins, archives)
├── .chezmoiignore.tmpl         # Platform-specific ignore rules
├── dot_gitconfig.tmpl          # Git configuration
├── dot_gitignore_global        # Global gitignore patterns
├── dot_zshenv.tmpl             # Zsh environment entry point (XDG dirs, etc.)
├── dot_claude/                 # Claude Code IDE settings
├── private_dot_config/         # ~/.config/ directory contents
│   ├── ashell/                 # [Linux] Ashell status bar
│   ├── bat/                    # bat syntax highlighter
│   ├── borders/                # [macOS] JankyBorders
│   ├── delta/                  # delta diff pager theme
│   ├── hypr/                   # [Linux] Hyprland compositor + utilities
│   ├── hyprpanel/              # [Linux] HyprPanel status bar
│   ├── kanata/                 # [Linux] Kanata keyboard remapper
│   ├── karabiner/              # [macOS] Karabiner-Elements (symlink)
│   ├── kitty/                  # Kitty terminal emulator
│   ├── nvim/                   # Neovim (LazyVim)
│   ├── qt6ct/                  # [Linux] Qt6 theming
│   ├── rofi/                   # [Linux] Rofi application launcher
│   ├── sketchybar/             # [macOS] SketchyBar status bar
│   ├── skhd/                   # [macOS] skhd hotkey daemon
│   ├── starship/               # Starship shell prompt
│   ├── systemd/                # [Linux] Systemd user services
│   ├── tmux/                   # tmux terminal multiplexer
│   ├── uwsm/                   # [Linux] UWSM session environment
│   ├── yabai/                  # [macOS] yabai window manager
│   ├── yazi/                   # Yazi file manager
│   ├── zathura/                # Zathura PDF viewer
│   ├── omz/                    # Zsh config (Oh My Zsh)
│   └── zsh/                    # Zsh config (Zap)
└── externally_modified/        # Configs tracked in git but not managed by chezmoi
    ├── karabiner/              # [macOS] Karabiner-Elements
    ├── lazyvim/                # LazyVim distribution
    └── hyprpanel/              # [Linux] Hyprpanel configs

Customization

Before applying, you may want to:

  1. Review the chezmoi templates -- files ending in .tmpl contain conditional logic based on OS and hostname. You will likely need to adjust hostname checks (e.g. digdug) and monitor configurations to match your hardware.
  2. Swap out personal details -- the git config references a specific GitHub username and email. Update dot_gitconfig.tmpl with your own.
  3. Adjust keybindings -- keybindings are tailored to personal preference. Review the skhd, Hyprland, and Kanata configs to make sure they work for your keyboard and workflow.

License

This project is licensed under the MIT License.