+
+pre_install () {
+ # Check that the group and users don't already exist
+ if [[ -n $(cut -d: -f1 /etc/group | grep -w nixbld) ]]; then
+ echo "The nixbld group already exists. This install cannot proceed."
+ exit 1
+ fi
+
+ for i in {1..10}; do
+ if [[ -n $(cut -d: -f1 /etc/passwd | grep -w nixbld$i) ]]; then
+ echo "The nixbld$i user already exists. This install cannot proceed."
+ exit 1
+ fi
+ done
+}
+
+create_users () {
+ # Create a nixbld group.
+ groupadd -r nixbld
+
+ # Create 10 nixbld{i} users
+ for i in {1..10}; do
+ useradd -g nixbld -G nixbld -r -N -M -d /var/empty -s /sbin/nologin nixbld$i
+ done
+}
+
+delete_users() {
+ # Remove the users
+ for i in {1..10}; do
+ userdel nixbld$i
+ done
+
+ # Remove the group
+ groupdel nixbld
+}
+
+create_store() {
+ # Create nix folders and set permissions
+ mkdir -p /nix/store
+ chown root.nixbld /nix/store
+ chmod 1775 /nix/store
+ mkdir -p -m 1777 /nix/var/nix/gcroots/per-user
+ mkdir -p -m 1777 /nix/var/nix/profiles/per-user
+}
+
+restore_store() {
+ # Restore folder permissions
+ chmod 755 /nix/store
+ chown root.root /nix/store
+}
+
+init_channels() {
+ # Initialize default nix channel
+ echo "Initializing default nix channel"
+ source /etc/profile.d/nix.sh
+ nix-channel --update
+}
+
+daemon_info() {
+ echo "To start the nix daemon, execute one of the following:"
+ echo
+ echo " systemctl enable nix-daemon.socket # Sets the daemon to start on next boot"
+ echo " systemctl enable --now nix-daemon.socket # Starts now and on next boot too"
+ echo
+ echo "Also, if this is a new install, you need to start a new login shell or otherwise"
+ echo
+ echo " source /etc/profile.d/nix.sh"
+ echo " source /etc/profile.d/nix-daemon.sh"
+ echo
+ echo "Once your environment is set-up, you will need to add some channels. You can see how"
+ echo "to do that here:"
+ echo " https://nixos.org/nix/manual/#sec-channels"
+}
+
+post_install() {
+ create_users
+ create_store
+ init_channels
+ daemon_info
+}
+
+pre_upgrade() {
+ systemctl stop nix-daemon.socket
+ systemctl stop nix-daemon
+}
+
+post_upgrade() {
+ delete_users
+ create_users
+ create_store
+ daemon_info
+}
+
+pre_remove() {
+ restore_store
+ delete_users
+}