#----------------------------------------------------------------------
# PATH DEFINITIONS
#----------------------------------------------------------------------
set DESIGN_PATH [exec pwd]
# set PDK_PATH $env(SKY130_PDK_PATH)
set PDK_PATH /tmp/caravel_tutorial/pdk/skywater-pdk/libraries

#----------------------------------------------------------------------
# xschem system-wide design library paths: xschem_library_path
#----------------------------------------------------------------------
append XSCHEM_LIBRARY_PATH :${DESIGN_PATH}
set XSCHEM_SKY130_SCRIPTS_PATH ${DESIGN_PATH}/xschem/scripts

# NOTE: You need update this to point to your xschem symbols,
#       or place the symbols in this location:
append XSCHEM_LIBRARY_PATH :${DESIGN_PATH}/xschem/symbols

#----------------------------------------------------------------------
# window to open on startup: xschem_start_window
#----------------------------------------------------------------------
# set XSCHEM_START_WINDOW ${DESIGN_PATH}/user_analog_project_wrapper.sch
set XSCHEM_START_WINDOW ${DESIGN_PATH}/top/xschem_top.sch

#----------------------------------------------------------------------
# DIRECTORY WHERE SIMULATIONS, NETLIST AND SIMULATOR OUTPUTS ARE PLACED
#----------------------------------------------------------------------
# set netlist_dir ${DESIGN_PATH}/../sim
set netlist_dir .
#----------------------------------------------------------------------
# change default [] with some other characters for bussed signals 
# in spice netlists (example: data[7] --> data<7>) 
# set bus_replacement_char {<>} 
#----------------------------------------------------------------------
set bus_replacement_char {__}

#----------------------------------------------------------------------
# some default behavior
#----------------------------------------------------------------------
set netlist_type spice
set hspice_netlist 1
set initial_geometry {1920x1080}
set persistent_command 1

#----------------------------------------------------------------------
# custom grid / snap value settings
#----------------------------------------------------------------------
set grid 20
set snap 10

#----------------------------------------------------------------------
# custom colors  may be defined here
#----------------------------------------------------------------------

set dark_colors { 
"#eee4c2" "#268BD2" 
"#aaaaaa" "#222222" 
"#229900" "#bb2200" 
"#00ccee" "#ff0000" 
"#888800" "#00aaaa"
"#880088" "#00ff00" 
"#0000cc" "#666600" 
"#557755" "#aa2222" 
"#7ccc40" "#00ffcc" 
"#ce0097" "#d2d46b"
"#ef6158" "#fdb200" }

set light_colors {
"#222222" "#00ccee" 
"#3f3f3f" "#cccccc" 
"#88dd00" "#bb2200" 
"#00ccee" "#ff0000" 
"#ffff00" "#ffffff"
"#ff00ff" "#00ff00" 
"#0000cc" "#aaaa00" 
"#aaccaa" "#ff7777" 
"#bfff81" "#00ffcc" 
"#ce0097" "#d2d46b"
"#ef6158" "#fdb200" }

#----------------------------------------------------------------------
# set custom colors for xschem libraries matching certain patterns
#----------------------------------------------------------------------
array unset dircolor
set dircolor(sky130_fd_pr$) blue
set dircolor(sky130_tests$) blue
set dircolor(xschem_sky130$) blue
set dircolor(xschem_library$) red
set dircolor(devices$) red

#----------------------------------------------------------------------
# keybindings
#----------------------------------------------------------------------

set replace_key(Key-a) m
set replace_key(Key-d) Delete
set replace_key(Key-i) Insert
set replace_key(Key-r) Control-e
set replace_key(Key-y) Control-c
set replace_key(Key-q) Shift-Q
set replace_key(Shift-Q) q
set replace_key(Key-l) Alt-Shift-L
set replace_key(Shift-L) Alt-l
set replace_key(Shift-L) Alt-l
set replace_key(Key-p) Control-w

#----------------------------------------------------------------------
# terminal
#----------------------------------------------------------------------
set terminal {gnome-terminal}

#----------------------------------------------------------------------
# editor
#----------------------------------------------------------------------
set editor { xterm -geometry 70x25 -e nvim }

#----------------------------------------------------------------------
# tcl files to load at startup
#----------------------------------------------------------------------
lappend tcl_files ${XSCHEM_SHAREDIR}/ngspice_backannotate.tcl
lappend tcl_files ${XSCHEM_SKY130_SCRIPTS_PATH}/sky130_models.tcl

#----------------------------------------------------------------------
# skywater pdk specific variables
#----------------------------------------------------------------------
set SKYWATER_MODELS ${PDK_PATH}/sky130_fd_pr_ngspice/latest
set SKYWATER_STDCELLS ${PDK_PATH}/sky130_fd_sc_hd/latest
