---
title: Tor Configuration
description: This script applies the Tor configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc` to the system and then restarts Tor
sidebar_label: 27 Tor Configuration
slug: /scripts/after/run_onchange_after_27-tor.sh.tmpl
githubLocation: https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoiscripts/universal/run_onchange_after_27-tor.sh.tmpl
scriptLocation: https://github.com/megabyte-labs/install.doctor/raw/master/home/.chezmoiscripts/universal/run_onchange_after_27-tor.sh.tmpl
repoLocation: home/.chezmoiscripts/universal/run_onchange_after_27-tor.sh.tmpl
---
# Tor Configuration

This script applies the Tor configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc` to the system and then restarts Tor

## Overview

Tor is a network that uses onion routing, originally published by the US Navy. It is leveraged by privacy enthusiasts
and other characters that deal with sensitive material, like journalists and people buying drugs on the internet.
This script:

1. Determines the system configuration file location
2. Applies the configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc`
3. Enables and restarts the Tor service with the new configuration

## Links

* [Tor configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/tor/torrc)



## Source Code

```
{{- if and (ne .host.distro.family "windows") (ne .host.work true) -}}
#!/usr/bin/env bash
# @file Tor Configuration
# @brief This script applies the Tor configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc` to the system and then restarts Tor
# @description
#     Tor is a network that uses onion routing, originally published by the US Navy. It is leveraged by privacy enthusiasts
#     and other characters that deal with sensitive material, like journalists and people buying drugs on the internet.
#     This script:
#
#     1. Determines the system configuration file location
#     2. Applies the configuration stored at `${XDG_CONFIG_HOME:-HOME/.config}/tor/torrc`
#     3. Enables and restarts the Tor service with the new configuration
#
#     ## Links
#
#     * [Tor configuration](https://github.com/megabyte-labs/install.doctor/tree/master/home/dot_config/tor/torrc)

# tor config hash: {{ include (joinPath .host.home ".config" "tor" "torrc") | sha256sum }}

{{ includeTemplate "universal/profile" }}
{{ includeTemplate "universal/logg" }}

# @description Determine the Tor configuration location by checking whether the system is macOS or Linux
if [ -d /Applications ] && [ -d /System ]; then
    # macOS
    TORRC_CONFIG_DIR=/usr/local/etc/tor
else
    # Linux
    TORRC_CONFIG_DIR=/etc/tor
fi
TORRC_CONFIG="$TORRC_CONFIG_DIR/torrc"

# @description Apply the configuration if the `torrc` binary is available in the `PATH`
if command -v toron > /dev/null; then
    if [ -d  "$TORRC_CONFIG_DIR" ]; then
        # @description Copy the configuration from `${XDG_CONFIG_HOME:-$HOME/.config}/tor/torrc` to the system configuration file location
        sudo cp -f "${XDG_CONFIG_HOME:-$HOME/.config}/tor/torrc" "$TORRC_CONFIG"
        sudo chmod 600 "$TORRC_CONFIG"

        # @description Enable and restart the Tor service
        if [ -d /Applications ] && [ -d /System ]; then
            # macOS
            brew services restart tor
        else
            if [[ ! "$(test -d /proc && grep Microsoft /proc/version > /dev/null)" ]]; then
                # Linux
                sudo systemctl enable tor
                sudo systemctl restart tor
            else
                logg info 'Environment is WSL so the Tor systemd service will not be enabled / restarted'
            fi
        fi
    else
        logg warn 'The '"$TORRC_CONFIG_DIR"' directory is missing'
    fi
else
    logg warn 'toron is missing from the PATH'
fi

{{ end -}}
```
