Why bother? • Doesn't pollute your environment 🌳 • Doesn't con f lict with globally installed programs • Project-speci f ic version of the JVM/terraform/awscli/node/...
Why bother? • Doesn't pollute your environment 🌳 • Doesn't con f lict with globally installed programs • Project-speci f ic version of the JVM/terraform/awscli/node/... • Share tools with the team (Git)
Why bother? • Doesn't pollute your environment 🌳 • Doesn't con f lict with globally installed programs • Project-speci f ic version of the JVM/terraform/awscli/node/... • Share tools with the team (Git) • Same setup locally and in Continuous Integration
Bonus: f lakes • Uses lock f ile to specify hash of Nixpkgs and other repositories • Less boilerplate for pinning • Still experimental, e ff orts to further simplify {
nix pro f ile • Drop-in replacement for $PACKAGE_MANAGER • Atomic installation, rollbacks • No transitive con f licts • User-scoped • For a declarative approach, see home-manager
nix pro f ile • Drop-in replacement for $PACKAGE_MANAGER • Atomic installation, rollbacks • No transitive con f licts • User-scoped • For a declarative approach, see home-manager • Also experimental, see nix-env
Recommendations • Use nix shells in your projects! • Use one-time shells to try stu ff out • Flakes + shells + nix-direnv = 🥰 • Use nix as a normal package manager
Recommendations • Use nix shells in your projects! • Use one-time shells to try stu ff out • Flakes + shells + nix-direnv = 🥰 • Use nix as a normal package manager • Use shells in CI
Nix+Scala in a perfect world • Lock f ile generated from sbt with a single line • Fast setup, using existing caches • Saving space with dependency reuse
Nix+Scala in a perfect world • Lock f ile generated from sbt with a single line • Fast setup, using existing caches • Saving space with dependency reuse • Splitting sbt build into modules?
Nix+Scala in a perfect world • Lock f ile generated from sbt with a single line • Fast setup, using existing caches • Saving space with dependency reuse • Splitting sbt build into modules? • Direct integration with scalac/bloop?
Nix+Scala in a perfect world • Lock f ile generated from sbt with a single line • Fast setup, using existing caches • Saving space with dependency reuse • Splitting sbt build into modules? • Direct integration with scalac/bloop? • Replacing sbt's dependency resolution?
Nix+Scala in a perfect world • Lock f ile generated from sbt with a single line • Fast setup, using existing caches • Saving space with dependency reuse • Splitting sbt build into modules? • Direct integration with scalac/bloop? • Replacing sbt's dependency resolution? • New build tool?
Nix+Scala work today • sbt-derivation (not actively developed) • Open ticket in sbt-derivation to support lock f iles • Possibly needed: new feature in sbt