Personally I'm a big fan of Julia's syntax here. Indentation-insensitive with the use of the word "end" as the terminator for all types of block. In practice you can lay it out like Python, and the "end"s help you keep track when e.g. you need to place a single expression after some deeply-nested blocks.
Is indentation actually necessary to parse a block? I think if you have a well defined terminator (a literal keyword token, such as `end`), indentation can just be a function of an autoformatter with no indentation constraints on syntax.