-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
71 lines (61 loc) · 1.99 KB
/
Dockerfile
File metadata and controls
71 lines (61 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
FROM ubuntu:24.04
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
ENV DEBIAN_FRONTEND=noninteractive
# Minimal packages for installing Nix
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl xz-utils sudo ca-certificates
# Ensure ubuntu user has passwordless sudo
RUN echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/90-ubuntu-nopasswd \
&& chmod 0440 /etc/sudoers.d/90-ubuntu-nopasswd
# Ubutu is the user with id=1000
USER ubuntu
WORKDIR /home/ubuntu
ENV USER=ubuntu
ENV NIX_BUILD_SHELL=/bin/bash
# Install Nix
RUN sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon --yes
# Enable flakes
RUN mkdir -p /home/ubuntu/.config/nix \
&& printf '%s\n' \
'experimental-features = nix-command flakes' \
'accept-flake-config = true' \
>> /home/ubuntu/.config/nix/nix.conf
# Install packages
RUN /home/ubuntu/.nix-profile/bin/nix profile install \
nixpkgs#less \
nixpkgs#vim \
nixpkgs#nano \
nixpkgs#gdb \
nixpkgs#starship \
nixpkgs#direnv \
nixpkgs#nix-direnv \
nixpkgs#git \
nixpkgs#ripgrep \
nixpkgs#fd \
nixpkgs#bat \
nixpkgs#file \
nixpkgs#tmux \
nixpkgs#tealdeer \
nixpkgs#tree \
nixpkgs#delta \
nixpkgs#rsync \
nixpkgs#fzf
# Make Nix binaries available
RUN printf 'if [ -e /home/ubuntu/.nix-profile/etc/profile.d/nix.sh ]; then . /home/ubuntu/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer\n' \
>> /home/ubuntu/.bashrc
# direnv + nix-direnv setup
RUN mkdir -p /home/ubuntu/.config/direnv \
&& printf '%s\n' 'source "$HOME/.nix-profile/share/nix-direnv/direnvrc"' \
> /home/ubuntu/.config/direnv/direnvrc
# Shell setup
RUN printf '%s\n' \
'if command -v direnv >/dev/null 2>&1; then' \
' eval "$(direnv hook bash)"' \
'fi' \
'if command -v starship >/dev/null 2>&1; then' \
' eval "$(starship init bash)"' \
'fi' \
'alias ll="ls -alF"' \
'alias la="ls -A"' \
'alias l="ls -CF"' \
>> /home/ubuntu/.bashrc