/ flake.nix
flake.nix
1 { 2 description = 3 "Ready-made templates for easily creating flake-driven environments"; 4 5 inputs = { 6 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; 7 flake-utils.url = "github:numtide/flake-utils"; 8 }; 9 10 outputs = { self, flake-utils, nixpkgs }: 11 { 12 templates = rec { 13 clojure = { 14 path = ./clojure; 15 description = "Clojure development environment"; 16 }; 17 18 cue = { 19 path = ./cue; 20 description = "Cue development environment"; 21 }; 22 23 dhall = { 24 path = ./dhall; 25 description = "Dhall development environment"; 26 }; 27 28 elixir = { 29 path = ./elixir; 30 description = "Elixir development environment"; 31 }; 32 33 elm = { 34 path = ./elm; 35 description = "Elm development environment"; 36 }; 37 38 gleam = { 39 path = ./gleam; 40 description = "Gleam development environment"; 41 }; 42 43 go = { 44 path = ./go; 45 description = "Go (Golang) development environment"; 46 }; 47 48 hashi = { 49 path = ./hashi; 50 description = "HashiCorp DevOps tools development environment"; 51 }; 52 53 haskell = { 54 path = ./haskell; 55 description = "Haskell development environment"; 56 }; 57 58 java = { 59 path = ./java; 60 description = "Java development environment"; 61 }; 62 63 kotlin = { 64 path = ./kotlin; 65 description = "Kotlin development environment"; 66 }; 67 68 nickel = { 69 path = ./nickel; 70 description = "Nickel development environment"; 71 }; 72 73 nim = { 74 path = ./nim; 75 description = "Nim development environment"; 76 }; 77 78 nix = { 79 path = ./nix; 80 description = "Nix development environment"; 81 }; 82 83 node = { 84 path = ./node; 85 description = "Node.js development environment"; 86 }; 87 88 opa = { 89 path = ./opa; 90 description = "Open Policy Agent development environment"; 91 }; 92 93 php = { 94 path = ./php; 95 description = "PHP development environment"; 96 }; 97 98 protobuf = { 99 path = ./protobuf; 100 description = "Protobuf development environment"; 101 }; 102 103 purescript = { 104 path = ./purescript; 105 description = "Purescript development environment"; 106 }; 107 108 python = { 109 path = ./python; 110 description = "Python development environment"; 111 }; 112 113 ruby = { 114 path = ./ruby; 115 description = "Ruby development environment"; 116 }; 117 118 rust = { 119 path = ./rust; 120 description = "Rust development environment"; 121 }; 122 123 rust-toolchain = { 124 path = ./rust-toolchain; 125 description = "Rust development environment with Rust version defined by a rust-toolchain.toml file"; 126 }; 127 128 scala = { 129 path = ./scala; 130 description = "Scala development environment"; 131 }; 132 133 zig = { 134 path = ./zig; 135 description = "Zig development environment"; 136 }; 137 138 # Aliases 139 rt = rust-toolchain; 140 }; 141 } // flake-utils.lib.eachDefaultSystem (system: 142 let 143 pkgs = import nixpkgs { inherit system; }; 144 inherit (pkgs) mkShell writeScriptBin; 145 exec = pkg: "${pkgs.${pkg}}/bin/${pkg}"; 146 147 format = writeScriptBin "format" '' 148 ${exec "nixpkgs-fmt"} **/*.nix 149 ''; 150 151 dvt = writeScriptBin "dvt" '' 152 if [ -z $1 ]; then 153 echo "no template specified" 154 exit 1 155 fi 156 157 TEMPLATE=$1 158 159 ${exec "nix"} \ 160 --experimental-features 'nix-command flakes' \ 161 flake init \ 162 --template \ 163 "github:the-nix-way/dev-templates#''${TEMPLATE}" 164 ''; 165 166 update = writeScriptBin "update" '' 167 for dir in `ls -d */`; do # Iterate through all the templates 168 ( 169 cd $dir 170 ${exec "nix"} flake update # Update flake.lock 171 ${exec "direnv"} reload # Make sure things work after the update 172 ) 173 done 174 ''; 175 in 176 { 177 devShells = { 178 default = mkShell { 179 packages = [ format update ]; 180 }; 181 }; 182 183 packages = rec { 184 default = dvt; 185 186 inherit dvt; 187 }; 188 }); 189 }