Skip to content

Your callsign in each program

Almost every program on the station asks for the same two things on first run: your callsign and your grid square. This page says which ones Hammunition fills in for you and where to type them in the rest, so you do it once per program and never wonder where a setting went.

Tell Hammunition once

hammunition station set --callsign N0TST --grid-square FN31pr
hammunition station show

Use your own callsign and grid, not these placeholders. They are kept in ~/.config/hammunition/station.yml, readable only by you. station show prints them back; it is fine on your screen, but do not paste its output into a forum or an issue: a callsign leads to a name and an address.

Nothing is ever invented. If a program needs a value you have not set, the install still happens, and the plan names the one file it could not write and the command that would let it. See the station command.

What Hammunition writes for you

The table is generated from every package manifest's config_files block. Each row is one file, not a promise of a fully configured application. An unset value defers that file only, never the package or the rest of the transaction (D-035). Set the missing values with hammunition station set and install the unit again, or write the file by hand.

Program File Station values Missing-value behavior
aprx /etc/aprx.conf ax25_callsign (from callsign) Defer this file only if any of callsign is unset
ax25-tools /etc/ax25/axports ax25_callsign (from callsign) Defer this file only if any of callsign is unset
chrony /etc/chrony/conf.d/hammunition-gps.conf None No station value required; no missing-value deferral
chrony /etc/systemd/system/gpsd.service.d/hammunition-gps.conf None No station value required; no missing-value deferral
direwolf /etc/direwolf.conf ax25_callsign (from callsign) Defer this file only if any of callsign is unset
gpredict ~/.config/Gpredict/sample.qth grid_square, latitude (from grid_square), longitude (from grid_square) Defer this file only if any of grid_square is unset
gpredict ~/.config/Gpredict/hwconf/hammunition.rig rig_device Defer this file only if any of rig_device is unset
linbpq /etc/bpq32.cfg callsign, grid_square, node_alias Defer this file only if any of callsign, grid_square, node_alias is unset
tlf ~/tlf/logcfg.dat callsign, grid_square Defer this file only if any of callsign, grid_square is unset
uronode /etc/ax25/uronode.conf ax25_callsign (from callsign), node_alias Defer this file only if any of callsign, node_alias is unset

ax25_callsign is the stored callsign in AX.25 form: one to six letters and digits, with no /suffix. An incompatible callsign defers the files that use it; the engine never truncates or changes it. latitude and longitude are derived from the centre of the grid square, not a measured GPS position. Files whose paths start with ~/ belong to the operator: without an identified non-root operator, those files are deferred too. Run the install as yourself or pass --user <name>.

The packet configs are starting points: Direwolf still needs your audio and PTT settings, aprx still needs an interface and your own APRS-IS passcode to gate, and URONode needs its ports and permissions configured. See Packet and Winlink and APRS. AX.25's port entry is appended, leaving existing entries alone; an existing wl2k port or matching callsign skips the addition. gpredict's ground station and radio connection are independent files: setting the grid does not set the rig device. See Rig control. For tlf, start in ~/tlf or use tlf -f ~/tlf/logcfg.dat; copy the file into each contest directory and choose the contest rules yourself.

chrony's two fixed drop-ins need no station values (D-072). Installing chrony is by name only and never silently replaces a conflicting time daemon. The ntpsec GPS-time files are not package config_files: the helper manages them through hardware apply and hammunition time (D-058). See Time and GPS for both paths and their inspection and reversal steps.

The plan lists each file before writing it. Existing files are backed up as <path>.hammunition-backup. Uninstall leaves these config files in place: to reverse a write, restore that backup by hand, preserving any later edits, or remove a file created by Hammunition that you no longer need. For the appended AX.25 port, remove only the entry Hammunition added. Review the generated files before using them, especially before transmitting.

Programs that rewrite their own settings file every time they close, like WSJT-X and fldigi, stay on the list below: their first-run dialog is the safer place for the value than a file written underneath them.

Where to type it in the rest

Program Where Fields
WSJT-X, JTDX File → Settings → General My Call, My Grid
JS8Call File → Settings → General → Station Callsign, Grid
MSHV Options → Macros My Call, My Grid
fldigi, and flmsg, flamp, fllog which share it Configure → Operator Callsign, Name, QTH, Locator
FreeDV Tools → Options → Reporting Callsign, Grid square, to appear on FreeDV Reporter
QSSTV Options → Configuration → Operator Callsign, Locator
Pat pat-winlink configure mycall, locator
Xastir File → Configure → Station Callsign, position, symbol
YAAC its first-run wizard Callsign, position
CQRLOG Preferences → Station Callsign, Locator
QLog Settings → Station Callsign, Locator (a station profile)
HamClock, OpenHamClock first-run setup Callsign, location
Hammunition Hill /etc/hammunition-hill/config.toml, then sudo systemctl restart hammunition-hill Callsign, and an ADIF log to show

The dialog names come from each program's documentation and move a little between versions; the field names do not.

Things that are secrets, not settings

Some programs also want something that is a credential. Hammunition never stores or writes any of these, and they never belong in a shared screenshot.

  • Winlink password (Pat's secure_login_password): issued by Winlink when you first connect. Pat stores it in its own config file.
  • APRS-IS passcode (Xastir, YAAC, Direwolf's iGate): a number derived from your callsign. Xastir ships a tool that prints it: callpass N0TST. It is a gate against accidental uploads, not strong security, but keep it to yourself.
  • Logbook of the World certificate (TQSL): ARRL issues it after verifying your licence, and it signs every contact you upload. TQSL's File → Backup writes a .tbk file; keep that somewhere safe and private.
  • QRZ.com or HamQTH logins for callsign lookups in the loggers.

Secrets for downloads

A few downloads need a key that is yours: RepeaterBook's API today (offline-navigation), and any keyed fetch added later. They all resolve the key the same way, through one helper, resolve_secret(name) in src/hammunition/secrets.py (D-081), in this order:

  1. The environment variable, when it is set and not empty: export REPEATERBOOK=... lasts for one shell (each keyed download names its own variable; RepeaterBook's is the client's, REPEATERBOOK).
  2. Doppler, when the station config carries both names: hammunition station set --doppler-project PROJECT --doppler-config CONFIG (--clear-doppler removes them). Hammunition then runs exactly doppler secrets get NAME --plain --project PROJECT --config CONFIG and takes its output. doppler must be on PATH and logged in; a failure is reported with the first line of its error, never its output.
  3. Otherwise the download stops and says both ways.

What is stored is the two names, in the station file, mode 0600. A token is never written to the repository, the station file, a command line or a log: the run log (D-077) redacts the resolved value wherever it appears and any Authorization or X-RB-App-Token header line, and station show says only that the two names are set (its --json document carries them, never a token). A new keyed download calls the helper rather than reading the environment itself, so this page stays true of all of them.

The radio is a station value too

Alongside the callsign, station set takes the radio on the station — which rig, on which port, at what speed — so one shared rigctld carries it to every program instead of each one opening the serial port itself:

hammunition station set --rig yaesu-ft-991a \
    --rig-device /dev/serial/by-id/usb-...-if00-port0 --rig-baud 38400
hammunition install rig-service

The full walk-through, the program-by-program settings, radios with no CAT, the flrig alternative and the unattended-station option are in Rig control (D-073).

What was measured

The station commands and the file they write were run against this checkout's engine on 2026-09-30. callpass was run from Xastir 2.2.0 on Ubuntu 24.04 the same day. The dialog paths are the programs' own; this project has not yet walked every row against every version it installs.