Skip to content
This repository was archived by the owner on Nov 30, 2023. It is now read-only.
This repository was archived by the owner on Nov 30, 2023. It is now read-only.

Do not update user's dotfiles #512

Closed
@felipecrs

Description

@felipecrs

In the scripts from script's library, often we see the function updaterc updating the user's dotfiles such as ~/.bashrc. I think we should never do that since those files will be later replaced in case the user has a dotfiles repository configured.

So I have two suggestions:

First

Instead, perform these changes to the global bashrc and zshrc files, which are respectively /etc/bash.bashrc and /etc/zsh/zshrc. Those files gets sourced by bash and zsh automatically, for all the users.

This means that for free, we would earn synchronization between root and non-root user without having to update both user's dotfiles.

Second

Update /etc/bash.bashrc and /etc/zsh/zshrc to include something like . /etc/profile, because unfortunately, in Docker, /etc/profile does not get read automatically.

Then, if you take a look at /etc/profile you'll see something like:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

This means that any .sh under /etc/profile.d/ will get sourced by /etc/profile, and this is the recommended way to customize the system-wide Linux environment.

Then, we could convert lines such as:

echo "export SDKMAN_DIR=${SDKMAN_DIR}\nsource \${SDKMAN_DIR}/bin/sdkman-init.sh" >> /home/vscode/.bashrc
echo "export SDKMAN_DIR=${SDKMAN_DIR}\nsource \${SDKMAN_DIR}/bin/sdkman-init.sh" >> /home/vscode/.zshrc
# for root
echo "export SDKMAN_DIR=${SDKMAN_DIR}\nsource \${SDKMAN_DIR}/bin/sdkman-init.sh" >> /root/.bashrc
echo "export SDKMAN_DIR=${SDKMAN_DIR}\nsource \${SDKMAN_DIR}/bin/sdkman-init.sh" >> /root/.zshrc

with:

echo "export SDKMAN_DIR=${SDKMAN_DIR}\nsource \${SDKMAN_DIR}/bin/sdkman-init.sh" >> /etc/profile.d/sdkman.sh

Which has the benefits:

  1. Works for all users (root and non-root)
  2. Works for bash and zsh
  3. Much safer than editing the rc directly

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions