zellij-org / zellij

A terminal workspace with batteries included
https://zellij.dev
MIT License
21.75k stars 658 forks source link

How to activate a python environment on load of a layout file #3361

Open satyamjay-iitd opened 5 months ago

satyamjay-iitd commented 5 months ago

I want to do something very simple(or so I thought). Create two tabs, one with helix opened, and other with just a shell.

I wrote the following layout file.

layout {
    tab name="editor" {
       pane command="zsh" {
            args "-c" "source venv/bin/activate && hx"
            cwd "~/dev/calcite-qp/python"
        }
    }

    tab name="shell" {
        pane command="zsh" {
            args "-c" "source venv/bin/activate"
            cwd "~/dev/calcite-qp/python"
        }
    }
}

The editor opens fine, but the shell is not working. Kindly point in the right direction.

shaleh commented 5 months ago

Not a direct answer, but maybe look into the direnv tool? It will automatically load a python env whenever you cd into or otherwise load a directory in your shell. Super super handy. I have it load python and some environment variables some tools need. It is also a generic tool that works across shells and other programming languages. It can load all kinds of things.

https://direnv.net/

susludusrotalis commented 5 months ago

Encountered the same problem. While not against using direnv, I am intending to use Zellij for collaborative work, so don`t want to have extra dependencies. Maybe there is some workaround to make Zellij source venv/bin/activate on startup or something like that?

susludusrotalis commented 5 months ago

@satyamjay-iitd Think I`ve found the solution. You can source virtualenv like this:

layout {
    pane command="bash" {
        args "-c" "bash --rcfile <(cat ~/.bashrc; echo 'source venv/bin/activate';)"
    }
}

I'm still not sure exactly as to why it works as though starting bash with bash -c should`ve resulted in both bash shells to be closed. But it works. _<(commandlist)> is the Bash Process Substitution syntax