     )
   }
 
-  required init?(coder: NSCoder) {
-    fatalError("init(coder:) has not been implemented")
-  }
-
-  // We cannot use outlineView(_:willDisplayOutlineCell:for:item:) delegate
-  // method to customize the disclosure triangle in a view-based
-  // NSOutlineView.
-  // See https://stackoverflow.com/a/20454413/9850227
-  override func makeView(
-    withIdentifier identifier: NSUserInterfaceItemIdentifier, owner: Any?
-  ) -> NSView? {
-    let result = super.makeView(withIdentifier: identifier, owner: owner)
-
-    if identifier == NSOutlineView.disclosureButtonIdentifier {
-      let triangleButton = result as? NSButton
-      triangleButton?.image = self.triangleClosed
-      triangleButton?.alternateImage = self.triangleOpen
-    }
-
-    return result
-  }
-
-  private let emit: (UuidAction<FileBrowser.Action>) -> Void
-  private let disposeBag = DisposeBag()
-
-  private let uuid: String
-
-  private var root: Node
-  private var cwd: URL {
-    return self.root.url
-  }
-  private let treeController = NSTreeController()
-
-  private var cachedColumnWidth = CGFloat(20)
-  private var usesTheme: Bool
-  private var lastFileSystemUpdateMark = Token()
-  private var showsFileIcon: Bool
-  private var isShowHidden: Bool
-
-  private var triangleClosed: NSImage
-  private var triangleOpen: NSImage
-
   private func childUrls(for url: URL) -> [URL] {
     let urls = FileUtils.directDescendants(of: url).sorted { lhs, rhs in
       return lhs.lastPathComponent < rhs.lastPathComponent

  }
}

fileprivate extension NSTreeNode {

  var node: Node? {
    return self.representedObject as? Node

    self.triangleClosed = NSImage.fontAwesomeIcon(
      name: .caretRight,
      textColor: self.theme.directoryForeground,
      dimension: triangleImageSize
    )
    self.triangleOpen = NSImage.fontAwesomeIcon(
      name: .caretDown,
      textColor: self.theme.directoryForeground,
      dimension: triangleImageSize
    )

    super.init(frame: .zero)

    NSOutlineView.configure(toStandard: self)
    self.delegate = self

    source
      .observeOn(MainScheduler.instance)
