Warsaw, 2023
Unix philosophy
synergy between tools
tools
Pros:
Cons:
$ cd workspace/projectA
$ code .Recipe
Binary
Linking
{
inputs.nixpkgs.url = "github:nixos/nixpkgs";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
{
devShell = pkgs.mkShell {
buildInputs = with pkgs; [
(sbt.override {
jre = temurin-jre-bin-17;
})
nodejs
yarn
];
};
}
);
}
devShell = pkgs.mkShell {
buildInputs = with pkgs; [
(sbt.override {
jre = temurin-jre-bin-17;
})
nodejs
yarn
];
};~ $ cd projectA
~ $ cd projectA
~/projectA $ which sbt
sbt not found
~ $ cd projectA
~/projectA $ which sbt
sbt not found
~/projectA $ which nodejs
nodejs not found
~ $ cd projectA
~/projectA $ which sbt
sbt not found
~/projectA $ which nodejs
nodejs not found
~/projectA $ nix develop
[15.1/0.0 MiB DL] downloading 'https://github.com/NixOS/nixpkgs/...'
~ $ cd projectA
~/projectA $ which sbt
sbt not found
~/projectA $ which nodejs
nodejs not found
~/projectA $ nix develop
[15.1/0.0 MiB DL] downloading 'https://github.com/NixOS/nixpkgs/...'
~/projectA $ which node 21:17:14
/nix/store/4bgg8j8275adawqbc5rkm4fv48dgg2i3-nodejs-18.18.2/bin/node
~/projectA $ which sbt 21:17:11
/nix/store/k9xwny18ihx78qh8pyxrnz7mrbqj962p-sbt-1.9.7/bin/sbt
~ $ cd projectA
~/projectA $ which sbt
sbt not found
~/projectA $ which nodejs
nodejs not found
~/projectA $ nix develop
[15.1/0.0 MiB DL] downloading 'https://github.com/NixOS/nixpkgs/...'
~/projectA $ which node 21:17:14
/nix/store/4bgg8j8275adawqbc5rkm4fv48dgg2i3-nodejs-18.18.2/bin/node
~/projectA $ which sbt 21:17:11
/nix/store/k9xwny18ihx78qh8pyxrnz7mrbqj962p-sbt-1.9.7/bin/sbt
~/projectA $ exit
~/projectA $ which sbt
sbt not found
Nix store
/nix/store/zzpm91md3wqllaqpzm7whvcpa
/nix/store/zzpss56rnqxmhsg01v72762ha
/nix/store/zzqbcqjn05771v42fy9q97chk
/nix/store/zzqk32qc4imypcifq9jz1wif5
/nix/store/zzqnsgnpsfnrhwg8s4g9ci0dn
/nix/store/zzrajbcphf2f6spria8c7szwr
/nix/store/zzrgf0qw8vd3rd3fznzif1fh5
/nix/store/zzsgwdfagsw6xq6fvs7yycpvq
/nix/store/zzsm2ynsib3ddkjxw7g0j8v47
$ cd ~/workspace/projectA
# will use jdk11 and python2.7$ cd ~/workspace/projectB
# will use jdk19 and node16$ cd ~/workspace/projectC
# will use python3 and node17PATH:=
Use direnv to automatically enable nix shell when entering project directory
Nix
Direnv
Editors
Language servers
is this enough to develop software?
language grammar
treesitter
parser.c
source code
AST + highlights
Nix
Direnv
?
https://github.com/Tencent/LuaHelper/blob/master/docs/manual/debugPrinciple.md
Nix
terminal multiplexer
Nix
Tmux
neogit
diffview
neotree
Nix
Tmux
neogit
diffview
neotree
feedback: https://yavaconf.com/user.html#!/lecture/YAVA23-b121/rate
slides: https://slides.com/kasperkondzielski-1/polyglot-developer
config: https://github.com/ghostbuster91/dot-files
@kkondzielski