# admin-toolkit
A Windows-only terminal tool for staging hostname, password, and domain changes.
## Why
At the time of building this program, I worked as an intern at the Itu City Hall (Prefeitura da Estância Turística de Itu). I had to perform system administration tasks — changing hostnames, resetting passwords, joining machines to the domain — all manually through different Windows interfaces. Each task required navigating separate settings dialogs, clicking through multiple screens, and repeating the same steps dozens of times a day.
This tool centralizes those repetitive operations into a single, keyboard-driven terminal interface. It was built for my own workflow, but it reflects a real need: the average municipal office still runs on aging hardware, and anything that reduces clicks and context-switching makes the daily grind a little more bearable.
## Why Rust
I chose Rust for three reasons that mattered in that environment:
**Performance.** The machines at City Hall weren't new. Some were pushing ten years of continuous operation. Rust's zero-cost abstractions and small runtime footprint meant the tool would launch instantly and stay responsive even under constraints that would choke a heavier runtime.
**High-level ergonomics with low-level control.** Rust gives you the expressiveness of a high-level language — pattern matching, iterators, Result handling — while still letting you tap into Windows APIs directly. I could call `netdom.exe`, manipulate the Windows registry, and work with the Win32 API without writing a single line of C or C++.
**Mature TUI ecosystem.** At the time I started, `ratatui` (formerly `tui-rs`) was already a robust, well-maintained library for building terminal user interfaces in Rust. It gave me keyboard handling, layout primitives, and styling without the overhead of a GUI framework — exactly what I needed for a tool that lives in the console.
## What it does
- Shows current hostname and domain.
- Lets you stage three independent actions:
- change hostname
- change password for `Prefeitura`
- change domain to `itu.local`
- Requires elevation.
- Applies changes only after a confirm screen.
## Controls
- `↑` / `↓` move between actions
- `Space` toggle selected action
- `e` edit hostname or password target
- `Enter` confirm or apply
- `Esc` go back
- `q` quit
## Build and test
Development build
```bash
cargo build
```
Produces a debug binary at `target/debug/admin-toolkit.exe`.
Release build
```bash
cargo build --release
```
Produces an optimized binary at `target/release/admin-toolkit.exe`.
Run tests
```bash
cargo test
```
## Release
Tagged releases use the GitHub Actions workflow in `.github/workflows/release.yml`.
- Tag format: `v*`
- Builds Windows binaries for:
- `i686-pc-windows-msvc`
- `x86_64-pc-windows-msvc`
- `aarch64-pc-windows-msvc`
- Publishes the binaries to the GitHub Release page for that tag.
## CI
GitHub Actions test workflow: `.github/workflows/test.yml`