Skip to content

Instantly share code, notes, and snippets.

@nickpascucci
Last active June 5, 2018 01:41
Show Gist options
  • Select an option

  • Save nickpascucci/cd69c247a4123c3961e896def1f1fc3b to your computer and use it in GitHub Desktop.

Select an option

Save nickpascucci/cd69c247a4123c3961e896def1f1fc3b to your computer and use it in GitHub Desktop.

Revisions

  1. nickpascucci revised this gist Jun 5, 2018. 3 changed files with 63 additions and 0 deletions.
    54 changes: 54 additions & 0 deletions dev-base.bashrc.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    export TERM="xterm-256color"

    export CLICOLOR="true"

    alias ls="ls --color"
    alias ll="ls --color -alh"

    get-git-dirty-state() {
    if [[ $(git status 2> /dev/null | tail -n1) =~ "nothing to commit" ]]; then
    echo ""
    else
    echo "*"
    fi
    }

    get-git-branch() {
    branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
    if [ ! -z "$branch" ]; then
    echo " [$branch]"
    fi
    }

    BLUE="\[\e[0;34m\]"
    LIGHT_GREEN="\[\e[1;32m\]"
    WHITE="\[\e[0;37m\]"
    MAGENTA="\[\e[0;35m\]"
    RED="\[\e[0;31m\]"
    LAMBDA=$'\uf09d'
    #export PS1="$LIGHT_GREEN[\D{%H:%M:%S}]$WHITE ${debian_chroot:+($debian_chroot)}\w »$WHITE "
    export PS1="$LIGHT_GREEN{SANDBOX} [\D{%H:%M:%S}]$WHITE ${debian_chroot:+($debian_chroot)}\w$MAGENTA\$(get-git-branch)$RED >$WHITE "

    # don't put duplicate lines in the history. See bash(1) for more options
    # ... or force ignoredups and ignorespace
    HISTCONTROL=ignoredups:ignorespace

    # append to the history file, don't overwrite it
    shopt -s histappend

    export HISTCONTROL=ignoredups:erasedups # no duplicate entries
    export HISTSIZE=100000 # big big history
    export HISTFILESIZE=100000 # big big history

    # Save and reload the history after each command finishes
    # export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

    # check the window size after each command and, if necessary,
    # update the values of LINES and COLUMNS.
    shopt -s checkwinsize

    # Helper function for sending commands to other tmux panes
    function tsk {
    args=$@
    tmux send-keys -t right "$args" C-m
    }
    7 changes: 7 additions & 0 deletions dev-base.tmux.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    unbind-key C-b
    set -g prefix 'C-\'
    bind-key 'C-\' send-prefix

    set-option -g default-shell "/bin/bash"

    source-file "$HOME/gray.tmuxtheme"
    2 changes: 2 additions & 0 deletions sudoers.d.90-nick-dev-image
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    # Give 'nick' user passwordless sudo functionality.
    nick ALL=(ALL) NOPASSWD:ALL
  2. nickpascucci revised this gist Jun 5, 2018. 1 changed file with 14 additions and 0 deletions.
    14 changes: 14 additions & 0 deletions start-sandbox.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    #! /bin/bash

    # This script helps with starting sandboxes based on the ndpi/dev-base image.
    # Call it with the name of the docker image containing the dev sandbox and the
    # directory to mount at /src.

    docker run \
    --mount type=bind,src=$2,dst=/src \
    --mount type=bind,src=$HOME/.ssh,dst=/home/nick/.ssh,readonly \
    -p 8080:8080 \
    -p 3000:3000 \
    -e TERM -e COLUMNS="`tput cols`" -e LINES="`tput lines`" \
    -e TZ='America/New_York'
    -it $1
  3. nickpascucci created this gist Jun 5, 2018.
    21 changes: 21 additions & 0 deletions dev-base.Dockerfile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    FROM ndpi/emacs-base

    USER root

    RUN apt-get update && apt-get install -y \
    tmux \
    sudo \
    && rm -rf /var/lib/apt/lists/*

    COPY sudoers /etc/sudoers.d/90-nick-dev-image
    RUN chmod 0440 /etc/sudoers.d/90-nick-dev-image
    USER nick

    COPY gray.tmuxtheme /home/nick/gray.tmuxtheme
    COPY tmux.conf /home/nick/.tmux.conf
    COPY bashrc /home/nick/.bashrc
    COPY start-tmux.sh /home/nick/start-tmux.sh

    WORKDIR /src

    ENTRYPOINT /bin/bash /home/nick/start-tmux.sh
    37 changes: 37 additions & 0 deletions dev-base.start-tmux.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    #! /bin/bash

    # Set up a tmux session with a default layout.
    {
    SESSION="sandbox"

    tmux start-server

    tmux new-session -d -s "$SESSION"

    # Set up the main window with Emacs.
    tmux selectp -t 0
    tmux send-keys "emacs" C-m

    # Split the window horizontally, and start any worker processes specified by the sandbox.
    tmux splitw -h -p 35
    if [ -e "/home/nick/sandbox-init-helper.sh" ]; then
    tmux send-keys "/home/nick/sandbox-init-helper.sh" C-m
    else
    # If no helper script defined, list the /src directory.
    tmux send-keys "ls -al" C-m
    fi

    # Split the window again, vertically this time.
    tmux selectp -t 1
    tmux splitw -v -p 75

    # Show git status in 3rd window.
    tmux selectp -t 2
    tmux send-keys "git status" C-m

    # Switch back to Emacs.
    tmux selectp -t 0

    # Attach to the session we created.
    tmux attach-session -t "$SESSION"
    } &>/tmp/start-tmux.log
    31 changes: 31 additions & 0 deletions emacs.Dockerfile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,31 @@
    FROM ubuntu:18.04

    RUN apt-get update && apt-get install -y \
    emacs-nox \
    python \
    curl \
    git \
    util-linux \
    coreutils \
    findutils \
    grep \
    && rm -rf /var/lib/apt/lists/*

    RUN useradd -m -u 501 -U nick

    COPY . /home/nick/.emacs.d/
    RUN chown -R nick:nick /home/nick
    RUN mv /home/nick/.emacs.d/path.docker.txt /home/nick/.path.txt

    RUN mkdir /src; chown -R nick:nick /src

    USER nick

    WORKDIR /home/nick/.emacs.d/
    RUN curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python && \
    /home/nick/.cask/bin/cask install && \
    /home/nick/.cask/bin/cask list

    WORKDIR /src

    ENTRYPOINT emacs -nw
    21 changes: 21 additions & 0 deletions reasonml-sandbox.Dockerfile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    FROM ndpi/dev-base

    USER root

    RUN apt-get update && apt-get install -y \
    nodejs \
    npm \
    ocaml \
    && rm -rf /var/lib/apt/lists/*

    # Note: bs-platform install will fail if npm is >= 5.0.0, so install it first
    # then update npm.
    RUN npm install -g bs-platform reason-cli
    RUN npm install -g npm@latest

    USER nick

    COPY sandbox-init-helper.sh /home/nick/sandbox-init-helper.sh

    # Install an Emacs module which sets up ReasonML integration.
    COPY reasonml.module.org /home/nick/.emacs.d/modules
    16 changes: 16 additions & 0 deletions reasonml-sandbox.reasonml.module.org
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,16 @@
    * Emacs configuration module for ReasonML development

    #+begin_src emacs-lisp
    (package-install 'reason-mode)
    (package-install 'tuareg)
    (package-install 'merlin-eldoc)

    (setq refmt-width-mode 'fill)
    (setq merlin-command "ocamlmerlin")
    (setq merlin-eldoc-occurrences nil)

    (add-hook 'reason-mode-hook
    (lambda ()
    (add-hook 'before-save-hook 'refmt-before-save)))
    (add-hook 'reason-mode-hook 'merlin-eldoc-setup)
    #+end_src
    11 changes: 11 additions & 0 deletions reasonml-sandbox.sandbox-init-helper.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    #! /bin/bash

    # Helper script for setting up the sandbox.

    # Start an NPM build watcher process.
    if [ -e "package.json" ]; then
    npm start
    else
    echo "No package.json found here."
    echo "Navigate to the project root and run 'npm start'."
    fi