I’m working on small nix flake to standardize the developer environments at my job.

What I’m still missing, however, is a way to clean up after leaving the shell. Some hook to call a shell script, when the shell is closed.

Is there something like this? I thought about wrapping the actual nix develop call inside a bash script and waiting for nix to terminate, but that seems rather hacky.

    • @rutrumA
      link
      fedilink
      English
      46 days ago

      Id never heard of trap. This is awesome! Thank you for sharing

  • Sickday
    link
    fedilink
    25 days ago

    Sounds like the perfect use case for devenv. I use it in a handful of personal projects and it’s proved to be very useful when swapping projects especially when they require multiple services (eg. postgres, redis, nginx, etc.)

    It can be setup as a flake that you can use with nix develop.

    There’s options to start services and you can use scripts if you want some easy ways to tear down environments while in the devenv shell.

    Hope this helps.

  • @paperd@lemmy.zip
    link
    fedilink
    English
    26 days ago

    But why? This only seems practical if people are using the environment once. Otherwise you’re just wasting a lot of bandwidth downloading dependencies over and over.

    You should really just set up nix garbage collection to run once a week or something and be done with it.

    • @leisesprecher@feddit.orgOP
      link
      fedilink
      English
      16 days ago

      I’m not talking about deleting anything nix related or downloadable, but development artifacts. Running Docker images, temporary data, services that were started during the development, etc.

      That is the opposite of using it once, but using it multiple times a day, because developers often need to switch projects.

      • @balsoft@lemmy.ml
        link
        fedilink
        English
        1
        edit-2
        6 days ago

        In this case what I would recommend is to provide a command (perhaps inside that nix develop) that would set up all the images/services/data, and a second one to tear it down, and allow devs to run those commands themselves. This allows for more flexibility, e.g. multiple nix develop shells of the same project, but only one does the stateful stuff, coming back to the same shell later in the day without waiting for the setup. Most importantly it would allow for easy clean-up if the shell is shutdown unexpectedly and doesn’t have time to clean up itself, e.g. SIGKILL or power loss. It can be as simple as using writeShellScriptBin to string together commands (instead of doing it in the shellHook as you presumably are doing right now), or as complex and flexible as https://github.com/svanderburg/nix-processmgmt .

        Then, if you really want to automate it, you can simply add your-setup-command and trap "your-cleanup-command" EXIT to your shellHook.

        • @leisesprecher@feddit.orgOP
          link
          fedilink
          English
          16 days ago

          I would externalize it into a separate script/command anyway (the skeleton already exists).

          However, knowing myself, I would certainly forget cleaning up manually once in a while. My goal was to create truly self-contained, stupid-simple dev environments - or get as close as possible to it.