Skip to content

Instantly share code, notes, and snippets.


Daniel Dunbar ddunbar

View GitHub Profile
View OS X Say Status
$ cat ~/bin/status
if [ $# -lt 2 ]; then
echo "Usage: $(basename $0) <exit-code> <name ...>"
echo "This script is intended to be used along with a shell alias"
echo "such as:"
echo " alias status='status $?'"
echo "which will automatically add the last exit code."
ddunbar / extensible-raw-values.swift
Created Aug 12, 2016
Extensible enum raw values
View extensible-raw-values.swift
import Foundation
struct X: Equatable, ExpressibleByStringLiteral {
let strings: Set<String>
init?(_ characters: String.CharacterView) {
let strings = Set<String>(String(characters).components(separatedBy: ",").map{ String($0) })
if strings.isEmpty {
return nil
View HashableBox.swift
/// Box for exposing an item as a hashable.
public struct HashableBox<T, H: Hashable>: Hashable {
/// The wrapped item.
public let item: T
private let accessor: (T) -> H
/// Create a new hashable box for `item` where `accessor` defines the hashable content.
public init(_ item: T, accessor: @escaping (T) -> H) {
self.item = item
ddunbar /
Last active Aug 16, 2016
Personal Package Manager TODO List


  • Eliminate POSIX imports from everything downstream of Basic.

  • Eliminate Utility module (clean up names here)

  • Clean up topological sort and closure algorithms

  • Speed up tests

View update-swift-dev (Linux)
set -e
if [ -z "${CONFIGURATION}" ]; then
# Create the development toolchain.
ddunbar / update-swift-dev
Created Jun 2, 2016
This is the script I currently use on OS X to get a working "swift-dev.xctoolchain" out of a built Swift. It isn't designed to work for anyone but me, but it should be easy to adapt. I always run this after every build, and then use `TOOLCHAINS=swift-dev swift build` (etc) to use the development compiler.
View update-swift-dev
set -e
if [ -z "${CONFIGURATION}" ]; then
# Create the development toolchain.
rm -rf ~/public/swift-project/build/Ninja-ReleaseAssert/swift-dev.xctoolchain
View gist:c5058565691e0ec323d429994d77f9ba
Enter Mac mode:
Hold =, press m.
The top four thumb keys while in Mac mode, from left to right are: Command | Option | Ctrl | Command
Enable Media keys:
Hold =, press n. If you have applied the remappings below, note that it is the *remapped* = (i.e. tab).
Disable key clicks:
Hold Progrm, press -/_ (disable beeps).
Hold Progrm, press |/\ (disable clicks).
ddunbar /
Last active Aug 12, 2020
Deployable Artifacts thoughts

My hopes for deployable artifacts:

  1. Packages would be able to just describe how the things they build should get laid out in a tarball.
  2. We would implement this as part of the build, it should be super fast (we might want to consider actually generating the tar directly for portability & control purposes).
  3. Packages could have control over the permissions inside the tar file (ideally without having to manipulate the permissions in the filesystem, problematic sometimes if root permission in the tar is desired).
  4. The mechanism would support knowing how to handle RPATH issues.
  5. The mechanism would know how to handle libswift* portability issues.
  6. The mechanism would know how to handle cross-Linux distro issues.
  7. Unlike below, I wouldn't expect the mechanism to handle the GIT REVISION stuff, that belongs in a separate proposal.
  8. The mechanism would support typical Unix-y things, like bin, lib, libexec, share.
  9. The mechanism could support vendored assets like other DSOs or frameworks that can't l
ddunbar / Xcode-user-defaults
Last active Aug 24, 2020
Xcode user defaults
View Xcode-user-defaults
# Enable timings on build operations
defaults write ShowBuildOperationDuration -bool YES
# Enable extensive per-task timings
defaults write IDEBuildOperationTimingLogLevel -int 3
# Enable old build system logging for "implicit dependencies"
defaults write IDEBuildOperationDependenciesLogLevel -int 3
# Show logs from the "prebuild" step
You can’t perform that action at this time.