Skip to content

Hypha developer tips

Git configuration and commands

To avoid spurious merge commits use a rebase workflow when appropriate.

Set this to always use rebase when pulling in updates in a branch.

git config --global branch.autosetuprebase always

When updating a feature branch with new commits from the main branch use rebase and not merge

git switch feature-branch-name
git fetch origin
git rebase origin/main

To update the feature branch on GitHub you then need to do a forced push. Instead of --force use --force-with-lease. If someone have made changes to the branch that you do not have locally you get a warning. It is a good habit to always use --force-with-lease. One day it will save you from a bad mistake.

git push --force-with-lease

Postgres snapshots/restore

Hypha dev requirements contain the dslr tool. Use this for fast snapshots and restores of the postgres database.

Perfekt when testing migrations and other times when you need to reset the database or switch between databases.

Take a snapshot, you can have as many as you like.

dslr snapshot name-of-the-snapshot

Restore the snapshot.

dslr restore name-of-the-snapshot

Delete a snapshot you no longer need.

dslr delete name-of-the-snapshot

List all your snapshots:

dslr list

Commands in Makefile

This is the one stop place to find commands for runiing test, build resources and docs, linting and code style checks/fixes.

Coding style and linting in pre-commit hook

Hypha's coding style is enforced by ruff and prettier and comes pre-configured with prettier.

Install pre-commit to auto-format the code before each commit:

pre-commit install

Editor extensions

If you editor does not a Language Server Protocol (LSP) preinstalled make sure to add the plugin for it. Then add "LSP-ruff" for a fast Python linter and code transformation tool.

Your editor most likely have plugins for the other languages Hypha uses as well, css/scss, yaml and html. We recoment to install them as well.

Shell configuration

In the shell you can press the up arrow to see earlier (history) commands. It is possible to bind this to history search.

You can then e.g. write git and then press the upp arrow and see the commands from your history that start with git. So useful and intuitive that it should be the default.

For zsh:

# Settings for history function
HISTFILE=$ZDOTDIR/.zsh_history
HISTSIZE=75000
SAVEHIST=70000
setopt append_history
setopt extended_history
setopt hist_expire_dups_first
setopt hist_ignore_dups
setopt hist_ignore_space
setopt hist_reduce_blanks
setopt hist_verify
setopt inc_append_history
setopt share_history
autoload -Uz up-line-or-beginning-search
autoload -Uz down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search

# Bind up/down arrows to history search.
if [[ $OSTYPE == darwin* ]]; then
  bindkey '\e[A' up-line-or-beginning-search
  bindkey '\e[B' down-line-or-beginning-search
else
  bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
  bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
fi

For bash:

# Settings for history function
export HISTFILESIZE=50000
export HISTSIZE=50000
export HISTCONTROL=ignoreboth:erasedups
export HISTIGNORE='\&:e:c:l:ca:cd:cd -'

# Make history work well with multiple shells
# append to the history file, don't overwrite it
shopt -s histappend

# Bind up/down arrow to history search
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'