You can always but an exported global in a module and just import that everywhere. Otherwise you have to use a define I think, or patch it into the system module..
Maybe more important is why you want a program level global.
I can bind a proc to a type,
Sorry, I can not understand your question that well, maybe Mr. Munch can answer it, he is generally really good in understanding questions.
I guess with "bind a proc to a type" you are referring to https://ssalewski.de/nimprogramming.html#_procedures_bound_to_a_data_type?. That is not used that often, but maybe with a similar construct you may access variables?
you are referring to https://ssalewski.de/nimprogramming.html#_procedures_bound_to_a_data_type
Exactly. But as you said, it's not a current method in Nim.
If you mean a static member sure you can emulate that:
type Foo* = object
var fooBar = 9
proc bar*(t: typedesc[Foo]):int = fooBar
echo Foo.bar
with the global unexported and the getter exported, and ufcs