# xschemrc configuration file

set XSCHEM_SKYDIR $env(HOME)/.xschem/xschem_library/xschem_sky130

###########################################################################
## xschem installation directory XSCHEM_SHAREDIR
###########################################################################

# normally there is no reason to set this variable if using standard
# installation. Location of files is set at compile time but may be overridden
# with following line:
#
# set XSCHEM_SHAREDIR $env(HOME)/share/xschem

###########################################################################
## xschem system-wide design library paths XSCHEM_LIBRARY_PATH
###########################################################################

#### get library paths in a filesystem-independent way

set XSCHEM_LIBRARY_PATH {}
append XSCHEM_LIBRARY_PATH :${XSCHEM_SHAREDIR}/xschem_library
append XSCHEM_LIBRARY_PATH :${XSCHEM_SKYDIR}
append XSCHEM_LIBRARY_PATH :$env(PWD)
append XSCHEM_LIBRARY_PATH :$env(PWD)/../amsat_txrx_ic/design

###########################################################################
## set custom colors for xschem libraries matching certain patterns
## each line contains a dircolor(pattern) followed by a color
## color can be an ordinary name (grey, brown, blue) or a hex code {#77aaff}
## hex code must be enclosed in braces
###########################################################################
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


###########################################################################
## Window to open on startup XSCHEM_START_WINDOW
###########################################################################

# Start with a design if no filename given:
#
# sset XSCHEM_START_WINDOW {sky130_tests/top.sch}

# Start with a design
# To avoid absolute paths, use a path that is relative to one of the
# XSCHEM_LIBRARY_PATH directories.
#
set XSCHEM_START_WINDOW {user_analog_project_wrapper.sch}


###########################################################################
## Directory where simulations, netlist and simulator outputs are placed
###########################################################################
# If unset $USER_CONF_DIR/simulations is assumed (normally ~/.xschem/simulations) 
#
# set netlist_dir $env(HOME)/.xschem/simulations


###########################################################################
## change default [] with some other characters for bussed signals 
## in spice netlists (example: DATA[7] --> DATA<7>) 
###########################################################################

set bus_replacement_char {<>}

## for XSPICE
# set bus_replacement_char {__} 


###########################################################################
## some default behavior
###########################################################################

set netlist_type spice ;# allowed : spice, verilog, vhdl, tedax
set hspice_netlist 1
set verilog_2001 1
# set line_width 2
set change_lw 1
set color_ps 1
set initial_geometry {900x600}
set unzoom_nodrift 0

## if set to 1 allow to place multiple components with same name.
## Warning: this is normally not allowed in any simulation netlist.
set disable_unique_names 0

## if set to 1 continue drawing lines / wires after click
# set persistent_command 1


## set widget scaling (mainly for font display) 
# set tk_scaling 1.7

## disable some symbol layers
# set enable_layer(5) 0 ;# example to disable pin red boxes

###########################################################################
## custom grid / snap value settings
###########################################################################

# set grid 100
# set snap 50

###########################################################################
## Custom colors  may be defined here
###########################################################################

#  set cadlayers 22
#  set light_colors {
#   "#ffffff" "#0044ee" "#aaaaaa" "#222222" "#229900"
#   "#bb2200" "#00ccee" "#ff0000" "#888800" "#00aaaa"
#   "#880088" "#00ff00" "#0000cc" "#666600" "#557755"
#   "#aa2222" "#7ccc40" "#00ffcc" "#ce0097" "#d2d46b"
#   "#ef6158" "#fdb200" }

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

###########################################################################
## CAIRO STUFF
###########################################################################

#### Scale all fonts by this number
# set cairo_font_scale 1.0

#### default for following two is 0.85 (xscale) and 0.88 (yscale) to 
#### match cairo font spacing
# set nocairo_font_xscale 1.0
# set nocairo_font_yscale 1.0

#### Scale line spacing by this number
# set cairo_font_line_spacing 1.0

#### Specify a font
# set cairo_font_name {Arial}

#### Lift up text by some zoom-corrected pixels for
#### better compatibility wrt no cairo version.
#### Useful values in the range [-1, 3]
# set cairo_vert_correct 0
# set nocairo_vert_correct 0

###########################################################################
## KEYBINDINGS
###########################################################################

#### General format for specifying a replacement for a keybind
#### Replace Ctrl-d with Escape (so you wont kill the program)
# set replace_key(Control-d) Escape

#### swap w and W keybinds; Always specify Shift for capital letters
# set replace_key(Shift-W) w
# set replace_key(w) Shift-W

set terminal {xterm -geometry 100x35 -fn 9x15 -bg black -fg white -cr white -ms white }
## lxterminal is not OK since it will not inherit env vars: 
## In order to reduce memory usage and increase the performance, all instances
## of the terminal are sharing a single process. LXTerminal is part of LXDE

#### editor must not detach from launching shell (-f mandatory for gvim)
# set editor { xterm -geometry 100x40 -e nano }
# set editor { xterm -geometry 100x40 -e pico }
# set editor {gvim -f -geometry 90x28}
set editor {gedit}

#### show info window (ERC rules errors warnings etc) 
# set show_infowindow 1

#### command to translate xpm to png (assumes command takes source 
#### and dest file as arguments, example: gm convert plot.xpm plot.png)
set to_png {gm convert}

#### computer farm redirector
#### RTDA NC
# set computerfarm {nc run -Il}
#### LSF BSUB
# set computerfarm {bsub -Is}

#### set xschem listening port
set xschem_listen_port 2021

#### set gaw address for socket connection: {host port}
set gaw_tcp_address {localhost 2020}

#### utile (stefan's spice stimuli editor)
set utile_gui_path ${XSCHEM_SHAREDIR}/utile/utile3
set utile_cmd_path ${XSCHEM_SHAREDIR}/utile/utile

#### list of tcl files to preload.
# lappend tcl_files /home/schippes/x/Stefan_decoder/anddec.tcl
lappend tcl_files ${XSCHEM_SHAREDIR}/ngspice_backannotate.tcl
lappend tcl_files ${XSCHEM_SKYDIR}/scripts/sky130_models.tcl
#### toolbar
set toolbar_visible 0

set SKYWATER_MODELS $env(HOME)/skywater/skywater-pdk/libraries/sky130_fd_pr_ngspice/latest
set SKYWATER_STDCELLS $env(HOME)/skywater/skywater-pdk/libraries/sky130_fd_sc_hs/latest
