diff --git a/Makefile b/Makefile index 591e38b..785a1e4 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,43 @@ .PHONY: lint lint.py lint.sh +## lint | lint.* lint: lint.py lint.sh +## lint.python | lint python files lint.python: black $(shell find -type f -name "*.py") + +## lint.sh | lint shell files lint.sh: shfmt -s -w $(shell shfmt -f .) +.PHONY: $(addprefix d-,b r build run) + +## db, d-build | build docker image +db d-build: + docker build -f docker/Dockerfile -t dots . + +## dr, d-run | run docker image +dr d-run: + docker run --rm -it dots + +.PHONY: dr-keep +dr-keep: + docker run -it dots + +.DEFAULT_GOAL := help +# ## h, help | show this help +# .PHONY: help h +# help h: Makefile +# @awk -v fill=$(shell sed -n 's/^## \(.*\) | .*/\1/p' $< | wc -L)\ +# 'match($$0,/^## (.*) \|/,name) && match($$0,/\| (.*)$$/,help)\ +# {printf "\033[1;93m%*s\033[0m | \033[30m%s\033[0m\n",\ +# fill,name[1],help[1];} match($$0,/^### (.*)/,str) \ +# {printf "%*s \033[30m%s\033[0m\n",fill," ",str[1];}' $< +GOAL_COLOR=b_magenta +HELP_SEP= >> +-include .task.mk +ifeq "help" "$(filter help,$(MAKECMDGOALS))" +.task.mk: + curl https://raw.githubusercontent.com/daylinmorgan/task.mk/main/task.mk -o .task.mk +endif diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..cfe6084 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,42 @@ +FROM debian:bookworm-20220822-slim + +ENV TERM='xterm-256color' \ + HOME='/root' + +COPY ./docker/install_packages.sh /usr/bin/install_packages + +RUN install_packages \ + ca-certificates \ + locales \ + tmux \ + curl \ + gawk \ + zsh \ + vim \ + git \ + neovim + +RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ + locale-gen +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' + +WORKDIR /root + +RUN sh -c "$(curl -fsLS https://chezmoi.io/get)" + +COPY . .dotfiles +RUN ./bin/chezmoi init --apply -S ~/.dotfiles + +ENV DOTFILES_DIR="$HOME/.dotfiles" \ + PATH="$PATH:$HOME/bin:$HOME/.dotfiles/bin" + +# setup eget for tools script +RUN curl https://zyedidia.github.io/eget.sh | sh && mv ./eget ./bin/eget + +# use eget to fetch yq and some needed tools +RUN tools $(cat .dotfiles/docker/tools.txt) + +# get shell extensions +RUN sheldon -q --config-file ~/.config/sheldon/plugins.toml lock + +CMD ["zsh"] diff --git a/docker/install_packages.sh b/docker/install_packages.sh new file mode 100755 index 0000000..e5e2977 --- /dev/null +++ b/docker/install_packages.sh @@ -0,0 +1,24 @@ +#!/bin/sh +set -e +set -u +export DEBIAN_FRONTEND=noninteractive +n=0 +max=2 +until [ $n -gt $max ]; do + set +e + ( + apt-get update -qq && + apt-get install -y --no-install-recommends "$@" + ) + CODE=$? + set -e + if [ $CODE -eq 0 ]; then + break + fi + if [ $n -eq $max ]; then + exit $CODE + fi + echo "apt failed, retrying" + n=$((n + 1)) +done +rm -r /var/lib/apt/lists /var/cache/apt/archives diff --git a/docker/tools.txt b/docker/tools.txt new file mode 100644 index 0000000..6d3740d --- /dev/null +++ b/docker/tools.txt @@ -0,0 +1,4 @@ +starship +sheldon +ripgrep +lsd