Skip to content

Commit

Permalink
feat: homebrew on image
Browse files Browse the repository at this point in the history
  • Loading branch information
m2Giles committed May 16, 2024
1 parent d0c2260 commit 2dbf297
Show file tree
Hide file tree
Showing 11 changed files with 153 additions and 0 deletions.
17 changes: 17 additions & 0 deletions Containerfile
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,20 @@ RUN rpm-ostree install \
sed -i~ -E 's/=.\$\(command -v (nft|ip6?tables-legacy).*/=/g' /usr/lib/waydroid/data/scripts/waydroid-net.sh && \
ostree container commit

# Install Homebrew on Image
RUN touch /.dockerenv && \
mkdir -p /var/home && \
mkdir -p /var/roothome && \
curl -Lo /tmp/brew-install https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh && \
chmod +x /tmp/brew-install && \
/tmp/brew-install && \
/home/linuxbrew/.linuxbrew/bin/brew update && \
cp -R /home/linuxbrew /usr/share/homebrew && \
chown -R 1000:1000 /usr/share/homebrew && \
rm -f /usr/share/homebrew/.linuxbrew/Homebrew/Library/Homebrew/cmd/update.sh && \
rm -f /usr/share/homebrew/.linuxbrew/Homebrew/Library/Homebrew/cmd/update-reset.sh && \
ostree container commit

# Cleanup & Finalize
COPY system_files/overrides /
RUN /usr/libexec/containerbuild/build-initramfs && \
Expand Down Expand Up @@ -599,6 +613,9 @@ RUN /usr/libexec/containerbuild/build-initramfs && \
sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /usr/lib/systemd/system.conf && \
mkdir -p /usr/etc/flatpak/remotes.d && \
curl -Lo /usr/etc/flatpak/remotes.d/flathub.flatpakrepo https://dl.flathub.org/repo/flathub.flatpakrepo && \
systemctl enable var-home-linuxbrew.mount && \
systemctl enable brew-upgrade.timer && \
systemctl enable brew-update.timer && \
systemctl enable com.system76.Scheduler.service && \
systemctl enable btrfs-dedup@var-home.timer && \
systemctl enable displaylink.service && \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh
# shellcheck shell=sh disable=SC1091,SC2039,SC2166
# Check for interactive bash and that we haven't already been sourced.
if [ "x${BASH_VERSION-}" != x -a "x${PS1-}" != x -a "x${BREW_BASH_COMPLETION-}" = x ]; then

# Check for recent enough version of bash.
if [ "${BASH_VERSINFO[0]}" -gt 4 ] ||
[ "${BASH_VERSINFO[0]}" -eq 4 -a "${BASH_VERSINFO[1]}" -ge 2 ]; then
if [ -w /home/linuxbrew/.linuxbrew ]; then
if ! test -L /home/linuxbrew/.linuxbrew/etc/bash_completion.d/brew; then
/home/linuxbrew/.linuxbrew/bin/brew completions link > /dev/null
fi
fi
if test -d /home/linuxbrew/.linuxbrew/etc/bash_completion.d; then
for rc in /home/linuxbrew/.linuxbrew/etc/bash_completion.d/*; do
if test -r "$rc"; then
. "$rc"
fi
done
unset rc
fi
fi
BREW_BASH_COMPLETION=1
export BREW_BASH_COMPLETION
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/sh

if systemctl --quiet is-active var-home-linuxbrew.mount; then
HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_AUTO_UPDATE
fi
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=Auto update brew for mutable brew installs
After=local-fs.target
After=network-online.target
ConditionPathIsMountPoint=!/var/home/linuxbrew
ConditionPathExists=/home/linuxbrew/.linuxbrew/bin/brew

[Service]
# Override the user if different UID/User
User=1000
Type=oneshot
ExecStart=/home/linuxbrew/.linuxbrew/bin/brew update
StandardOutput=journal
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Unit]
Description=Timer for brew update for mutable brew
Wants=network-online.target

[Timer]
OnBootSec=20min
OnUnitInactiveSec=6h
Persistent=true

[Install]
WantedBy=timers.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=Upgrade Brew packages
After=local-fs.target
After=network-online.target
ConditionPathExists=/home/linuxbrew/.linuxbrew/bin/brew

[Service]
# Override the user if different UID/User
User=1000
Type=oneshot
Environment=HOMEBREW_NO_AUTO_UPDATE=1
ExecStart=/home/linuxbrew/.linuxbrew/bin/brew upgrade
StandardOutput=journal
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Unit]
Description=Timer for brew upgrade for on image brew
Wants=network-online.target

[Timer]
OnBootSec=20min
OnUnitInactiveSec=6h
Persistent=true

[Install]
WantedBy=timers.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=Cleanup Homebrew workdir
After=var.mount
Before=var-home-linuxbrew.mount
ConditionPathIsDirectory=%C/homebrew

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=-/usr/bin/rm -rf %C/homebrew/.*
ExecStart=-/usr/bin/rm -rf %C/homebrew/*
ExecStop=-/usr/bin/rm -rf %C/homebrew/.*
ExecStop=-/usr/bin/rm -rf %C/homebrew/*

[Install]
WantedBy=default.target multi-user.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[Unit]
Description=Homebrew overlay mount
Wants=cleanup-homebrew.service
After=cleanup-homebrew.service
After=var-mount.mount
ConditionPathIsDirectory=%S/homebrew
ConditionPathIsDirectory=%C/homebrew
ConditionPathExists=!/var/home/linuxbrew/.linuxbrew

[Mount]
Type=overlay
What=overlay
Options=lowerdir=/usr/share/homebrew,upperdir=%S/homebrew,workdir=%C/homebrew
Where=/var/home/linuxbrew

[Install]
WantedBy=local-fs.target
3 changes: 3 additions & 0 deletions system_files/desktop/shared/usr/lib/tmpfiles.d/homebrew.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
d /var/lib/homebrew 0755 1000 1000 - -
d /var/cache/homebrew 0755 1000 1000 - -
d /var/home/linuxbrew 0755 1000 1000 - -
21 changes: 21 additions & 0 deletions system_files/overrides/usr/share/fish/vendor_conf.d/brew.fish
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/fish
#shellcheck disable=all
if status --is-interactive
if [ -d /home/linuxbrew/.linuxbrew ]
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
if [ -w /home/linuxbrew/.linuxbrew ]
if [ ! -L (brew --prefix)/share/fish/vendor_completions.d/brew]
brew completions link > /dev/null
end
end
if test -d (brew --prefix)/share/fish/completions
set -p fish_complete_path (brew --prefix)/share/fish/completions
end
if test -d (brew --prefix)/share/fish/vendor_completions.d
set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
end
end
if systemctl --quiet is-active var-home-linuxbrew.mount
set -gx HOMEBREW_NO_AUTO_UPDATE 1
end
end

0 comments on commit 2dbf297

Please sign in to comment.