# How to Automate Dotfiles Installation with a Single-Step OS-Aware Installer

> Automate dotfiles installation with issmirnov/dotfiles. Discover a single-step OS-aware installer that initializes submodules and symlinks configurations effortlessly.

- Repository: [Ivan Smirnov/dotfiles](https://github.com/issmirnov/dotfiles)
- Tags: how-to-guide
- Published: 2026-03-04

---

**Yes, the issmirnov/dotfiles repository provides a fully automated installer built on the dotbot framework that detects your operating system, initializes submodules, and symlinks all configurations with zero manual file copying.**

Managing dotfiles manually involves tedious copying and linking. The `issmirnov/dotfiles` repository eliminates this friction by providing a **single-step automation script** that handles the entire installation process across Linux and macOS. By leveraging the `dotbot` framework, the system parses YAML configurations to create symbolic links, execute shell commands, and apply OS-specific customizations automatically.

## How the Automated Installation Works

The `install` script executes four sequential phases to achieve full automation:

1. **Submodule initialization**. The script runs `git submodule update --init --recursive` to fetch the dotbot framework *(source: `install`, line 11)*.

2. **Base configuration execution**. The script invokes [`default.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/default.conf.yaml), which cleans the home directory (`- clean: ['~']`), runs shell commands to update caches and create directories, and establishes all core symbolic links *(source: [`default.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/default.conf.yaml), lines 1-35)*.

3. **OS detection and specific configuration**. By checking the `OSTYPE` environment variable *(source: `install`, lines 16-21)*, the script selects [`ubuntu.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/ubuntu.conf.yaml) for Linux or [`osx.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/osx.conf.yaml) for macOS to apply platform-specific dotfiles.

4. **Post-install hooks**. Optional actions such as installing Vim plugins via `vim +PlugInstall +PlugUpdate` and rebuilding font caches run automatically.

## OS-Aware Configuration Deployment

The installer automatically detects the host environment to apply platform-specific settings without user intervention.

### Linux Configuration

When running on Linux, the script loads [`ubuntu.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/ubuntu.conf.yaml) after the base configuration. This file extends the setup with Linux-specific assets, including X resources, font files, and window manager configurations for i3 and Waybar.

### macOS Configuration

On macOS systems (detected via `darwin*` pattern matching), the installer applies [`osx.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/osx.conf.yaml). This configuration includes macOS-specific tooling preferences and window management settings for utilities like Yabai and Skhd.

## Minimal Installation for Zsh-Only Environments

For users seeking a lightweight setup, the repository provides the `minstall` script. This utility reads [`minimal.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/minimal.conf.yaml) and creates only the essential symlinks for the **Zsh environment** and Git hooks, skipping the full OS-specific configuration. The companion `zsh/setup` helper script can also set Zsh as the default shell if it is not already configured.

Execute the minimal installer with:

```bash
cd ~/.dotfiles
./minstall

```

## Remote One-Liner Installation

The repository supports fully automated remote installation via a single `wget` pipeline that clones, configures, and links everything:

```bash
wget https://smirnov.link/d -O - | sh

```

This command downloads the repository, executes the full `install` script, and prints post-installation instructions. Use this method only if you trust the source, as it executes shell code directly from the network.

## Verifying the Automated Setup

After execution, confirm successful automation by checking that key files are symbolic links pointing to the repository:

```bash
ls -l ~/.zshrc ~/.vimrc ~/.config/htop/htoprc

```

All entries should show symlink paths referencing your cloned `~/.dotfiles` directory, confirming that the automation correctly mapped your environment.

## Summary

- The **`install`** script provides fully automated dotfiles deployment using the dotbot framework.
- **OS detection** automatically selects [`ubuntu.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/ubuntu.conf.yaml) for Linux or [`osx.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/osx.conf.yaml) for macOS based on the `OSTYPE` variable.
- The **`minstall`** script offers a lightweight alternative for Zsh-only configurations using [`minimal.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/minimal.conf.yaml).
- A **one-liner** `wget` command enables remote installation without manual repository cloning.
- All operations including submodule initialization, directory creation, and symbolic link management require zero manual intervention.

## Frequently Asked Questions

### How does the dotfiles installer detect which operating system to configure?

The `install` script checks the `OSTYPE` environment variable *(lines 16-21)*. If the value matches `linux*`, it loads [`ubuntu.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/ubuntu.conf.yaml); if it matches `darwin*`, it loads [`osx.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/osx.conf.yaml), ensuring the correct platform-specific resources are linked automatically.

### What is the difference between `./install` and `./minstall`?

The `./install` script runs the complete automation including all OS-specific configurations and tools, while `./minstall` executes a minimal setup using [`minimal.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/minimal.conf.yaml) that only symlinks the Zsh configuration and Git hooks, skipping heavier dependencies.

### Is it safe to run the wget one-liner for automated installation?

The command `wget https://smirnov.link/d -O - | sh` executes code downloaded from the internet. While this provides the fastest way to automate dotfiles installation, you should only run it if you trust the source repository and have verified the shortened URL destination.

### Can I customize which files get linked during automated installation?

Yes, the automation is driven by YAML configuration files—[`default.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/default.conf.yaml), [`ubuntu.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/ubuntu.conf.yaml), and [`osx.conf.yaml`](https://github.com/issmirnov/dotfiles/blob/main/osx.conf.yaml). You can modify the `link:` sections in these files to add, remove, or change symlink targets before running the installer.