# How to Install Doom: A Complete Guide to the AD Certificate Template Viewer

> Easily install Doom and launch the AD certificate template viewer with pipx. Get the command-line tool and explore Active Directory certificate templates using this guide.

- Repository: [000pp/doom](https://github.com/000pp/doom)
- Tags: how-to-guide
- Published: 2026-02-22

---

**Install Doom using pipx with `pipx install git+https://github.com/000pp/doom` to obtain the `doom` command-line tool, which launches a Textual TUI for enumerating Active Directory certificate templates.**

Doom is a Python-based Text User Interface (TUI) built on the Textual framework that connects to Active Directory servers to discover AD Certificate Services (ADCS) hosts and enumerate available certificate templates. Learning how to install Doom from the 000pp/doom repository provides security professionals with a streamlined tool for certificate template analysis. The installation process is straightforward and requires only Python and the pipx package manager to get started.

## Prerequisites

Before you install Doom, ensure your system meets the following requirements:

- **Python 3.8 or higher** installed on your system
- **pipx** (recommended) or **pip** for package installation
- **Git** to clone the repository if installing from source

## Installation Methods

### Install Doom with pipx (Recommended)

The cleanest way to install Doom is using pipx, which isolates the application and its dependencies (Textual, ldap3, and Certipy parsing libraries) in a dedicated virtual environment.

On Linux distributions:

```bash
sudo apt install pipx git
pipx ensurepath
pipx install git+https://github.com/000pp/doom

```

On macOS:

```bash
brew install pipx
pipx ensurepath
pipx install git+https://github.com/000pp/doom

```

### Install Doom with pip

If you prefer using pip directly:

```bash
pip install git+https://github.com/000pp/doom

```

### Install from Source

For development or customization, clone the repository and install in editable mode:

```bash
git clone https://github.com/000pp/doom.git
cd doom
pip install -e .

```

## Running Doom After Installation

Once installed, the `doom` console script becomes available in your system PATH. This entry point executes the `run()` function in [`src/doom/__main__.py`](https://github.com/000pp/doom/blob/main/src/doom/__main__.py), which creates a `DoomApp` instance (a Textual `App`) and starts the event loop.

```bash
doom

```

Executing this command launches the TUI and immediately displays the `LoginScreen` defined in [`src/doom/screens/login_screen.py`](https://github.com/000pp/doom/blob/main/src/doom/screens/login_screen.py). This screen prompts you for the target IP address, domain name, and credentials required to bind to the Active Directory LDAP server.

## What Happens When You Run Doom

Understanding the execution flow helps verify that your installation worked correctly:

1. **Entry Point**: The `doom` command calls `doom.__main__.run()` in [`src/doom/__main__.py`](https://github.com/000pp/doom/blob/main/src/doom/__main__.py)
2. **Application Initialization**: Creates `DoomApp` with global bindings (Ctrl+Q to quit)
3. **Login Phase**: `LoginScreen` collects connection parameters and builds a `login_data` dictionary
4. **Enumeration Phase**: `LoadingScreen` (from [`src/doom/screens/loading_screen.py`](https://github.com/000pp/doom/blob/main/src/doom/screens/loading_screen.py)) initiates LDAP discovery via [`src/doom/protocols/ldap.py`](https://github.com/000pp/doom/blob/main/src/doom/protocols/ldap.py) and runs `enumerate_templates()` from [`src/doom/modules/enumerate_templates.py`](https://github.com/000pp/doom/blob/main/src/doom/modules/enumerate_templates.py)
5. **Display Phase**: Results are rendered in `MainScreen` using parsing logic from [`src/doom/parsers/certipy/structs.py`](https://github.com/000pp/doom/blob/main/src/doom/parsers/certipy/structs.py)

## Advanced: Programmatic Usage

After you install Doom, you can also import its modules directly for automation scripts:

```python
from doom.modules.enumerate_templates import enumerate_templates
from doom.protocols.ldap import LDAPConnection

conn = LDAPConnection(
    ip="192.168.1.10",
    domain="corp.local",
    username="administrator",
    password="SecurePass123"
)

templates = enumerate_templates(conn)
for template in templates:
    print(f"Template: {template['name']}")

```

## Summary

- **Install Doom** using `pipx install git+https://github.com/000pp/doom` for the most reliable setup
- The entry point `doom` executes [`src/doom/__main__.py`](https://github.com/000pp/doom/blob/main/src/doom/__main__.py), launching a Textual TUI
- Core functionality depends on `ldap3` for Active Directory connectivity and Certipy parsers for template decoding
- The modular architecture separates UI screens (`src/doom/screens/`), LDAP protocols (`src/doom/protocols/`), and business logic (`src/doom/modules/`)
- Supports both interactive TUI usage and programmatic import of `enumerate_templates`

## Frequently Asked Questions

### What Python version is required to install Doom?

Doom requires Python 3.8 or higher. The application depends on Textual for the TUI and ldap3 for Active Directory connectivity, both of which require modern Python 3 versions.

### Can I install Doom without pipx?

Yes, you can use standard pip with `pip install git+https://github.com/000pp/doom`. However, pipx is recommended because it installs Doom in an isolated virtual environment, preventing dependency conflicts with system Python packages.

### Where is the entry point defined when I run the `doom` command?

The console script entry point is configured in the package metadata and calls `doom.__main__.run()`. This function is implemented in [`src/doom/__main__.py`](https://github.com/000pp/doom/blob/main/src/doom/__main__.py) and instantiates the `DoomApp` class, which manages the Textual application lifecycle and screen navigation.

### How do I verify that Doom installed correctly?

Run the `doom` command in your terminal. If the installation succeeded, the Textual TUI will launch and display the login interface from [`src/doom/screens/login_screen.py`](https://github.com/000pp/doom/blob/main/src/doom/screens/login_screen.py), prompting for Active Directory connection details. Press Ctrl+Q to exit.