#----------------------------------------------------------------------
# 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

#----------------------------------------------------------------------
# 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
