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¶
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
.tbkfile; 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:
- 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). - Doppler, when the station config carries both names:
hammunition station set --doppler-project PROJECT --doppler-config CONFIG(--clear-dopplerremoves them). Hammunition then runs exactlydoppler secrets get NAME --plain --project PROJECT --config CONFIGand takes its output.dopplermust be onPATHand logged in; a failure is reported with the first line of its error, never its output. - 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.