package provide punk::config [namespace eval punk::config { variable version set version 0.1 }] namespace eval punk::config { variable loaded variable startup ;#include env overrides variable running variable known_punk_env_vars #todo - XDG_DATA_HOME etc #https://specifications.freedesktop.org/basedir-spec/latest/ # see also: http://hiphish.github.io/blog/2020/08/30/dotfiles-were-a-mistake/ variable vars set vars [list \ apps \ config \ configset \ scriptlib \ color_stdout \ color_stderr \ logfile_stdout \ logfile_stderr \ syslog_stdout \ syslog_stderr \ syslog_active \ exec_unknown \ ] #todo pkg punk::config #defaults dict set startup configset .punkshell dict set startup exec_unknown true ;#whether to use exec instead of experimental shellfilter::run #dict set startup color_stdout [list cyan bold] ;#not a good idea to default dict set startup color_stdout [list] dict set startup color_stderr [list red bold] dict set startup syslog_stdout "127.0.0.1:514" dict set startup syslog_stderr "127.0.0.1:514" dict set startup syslog_active 0 #default file logs to logs folder at same location as exe if writable, or empty string dict set startup logfile_stdout "" dict set startup logfile_stderr "" set exefolder [file dirname [info nameofexecutable]] set log_folder $exefolder/logs dict set startup scriptlib $exefolder/scriptlib dict set startup apps $exefolder/../../punkapps if {[file exists $log_folder]} { if {[file isdirectory $log_folder] && [file writable $log_folder]} { dict set startup logfile_stdout $log_folder/repl-exec-stdout.txt dict set startup logfile_stderr $log_folder/repl-exec-stderr.txt } } #todo - load/write config file #env vars override the configuration #todo - define which configvars are settable in env set known_punk_env_vars [list \ PUNK_APPS \ PUNK_CONFIG \ PUNK_CONFIGSET \ PUNK_SCRIPTLIB \ PUNK_EXECUNKNOWN \ PUNK_COLOR_STDERR \ PUNK_COLOR_STDOUT \ PUNK_LOGFILE_STDOUT \ PUNK_LOGFILE_STDERR \ PUNK_SYSLOG_STDOUT \ PUNK_SYSLOG_STDERR \ PUNK_SYSLOG_ACTIVE \ ] #override with env vars if set variable evar foreach evar $known_punk_env_vars { if {[info exists ::env($evar)]} { set f [set ::env($evar)] if {$f ne "default"} { #e.g PUNK_SCRIPTLIB -> scriptlib set varname [string tolower [string range $evar 5 end]] dict set startup $varname $f } } } unset -nocomplain evar unset -nocomplain vars set running [dict create] set running [dict merge $running $startup] }