Aliases de shell, por definição, não oferecem uma maneira de usá-los condicionalmente. Eles se aplicam a qualquer coisa que você execute a partir de um prompt interativo.
A maneira de fazer isso é com uma função. (Veja No Bash, quando alias, quando escrever e quando escrever uma função? para saber mais sobre o porquê isso é diferente.)
function python () {
test -z "$1" && ipython || command python "$@"
}
Algo parecido com essas linhas no arquivo rc do seu shell fará com que seu shell execute esta função ao invés do binário diretamente. Se o primeiro argumento estiver em branco, ele disparará o ipython para você, caso contrário, passará todos os argumentos para qualquer binário python em seu caminho (observe o uso de command
para forçar o binário em vez da função a executar e causar uma recursão em si mesmo.