Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32159485
install_nix.sh
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
install_nix.sh
View Options
#!/usr/bin/env bash
# Do initial nix install if nix is not available in PATH
if
!
command
-v
nix
>
/dev/null
;
then
# Stop script if install fails
set
-eo
pipefail
sh
<
(
curl
-L
https://nixos.org/nix/install
)
--daemon
# Rest of script is considered a best try depending on user setup
set
+eo
pipefail
# Source nix-daemon.sh to add nix to PATH
if
[[
-e
'/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
]]
;
then
# Path doesn't exist in shellcheck CI container
# shellcheck source=/dev/null
.
'/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
fi
fi
write_nix_path_to_file
()
{
target_file
=
"
$1
"
# Only write to files if they are missing the entry and writeable
if
!
grep
nix-profile
"
$target_file
"
2
>/dev/null
\
&&
[
-w
"
$target_file
"
]
||
[
!
-f
"
$target_file
"
]
;
then
echo
"Adding Nix path entry to
$target_file
"
>
&
2
# We want this to output $PATH without expansion
# shellcheck disable=SC2016
echo
'export PATH="$HOME"/.nix-profile/bin:/nix/var/nix/profiles/default/bin:"${PATH}"'
>>
"
$target_file
"
fi
}
# Apple may reset /etc/*rc on system updates which is how Nix exposes itself
# Add user entries to avoid Nix "disappearing" from PATH
if
[[
"
$OSTYPE
"
==
'darwin'
*
]]
;
then
write_nix_path_to_file
"
$HOME
/.zshenv"
write_nix_path_to_file
"
$HOME
/.bashrc"
write_nix_path_to_file
"
$HOME
/.bash_profile"
write_nix_path_to_file
"
$HOME
/.profile"
fi
# Figure out how many cores the system has, and set cache default
if
[[
"
$OSTYPE
"
==
'darwin'
*
]]
;
then
NPROC
=
$(
sysctl
-n
hw.physicalcpu
)
ADMIN_GROUP
=
"@admin"
elif
[[
"
$OSTYPE
"
==
'linux'
*
]]
;
then
NPROC
=
$(
nproc
)
ADMIN_GROUP
=
"@wheel @sudo"
fi
# Jobs = The number of different nix packages able to be built at the same time
# Cores = How many cores an individual job may use. This value is
# assigned to $NIX_BUILD_CORES within a nix build environment.
jobs
=
$((
NPROC
/
2
))
# Use only half of cores for individual jobs
cores
=
4
# Just a good default for consumer hardware
# NOTE: This has the potential of over-subscribing cores by a factor of 2.
# Potential load = jobs * cores = (n/2) * 4 = 2n
# However, this is probably the best compromise as most builds are largely
# single threaded, with a few exceptions which are massively parrallel.
# Check if nix.conf contains a value, append a default if missing.
add_if_missing_in_nix_conf
()
{
local
key
=
"
$1
"
local
value
=
"
$2
"
if
!
grep
"
$key
"
/etc/nix/nix.conf
&
>
/dev/null
;
then
echo
"/etc/nix/nix.conf is missing a value for
${
key
}
. "
\
"Appending '
${
key
}
=
${
value
}
' to /etc/nix/nix.conf"
# Make sure that user can write to file
if
sudo
test
-w
/etc/nix/nix.conf
;
then
echo
"
${
key
}
=
${
value
}
"
|
sudo
tee
-a
/etc/nix/nix.conf
&
>
/dev/null
else
# nix.conf is read only, which is true for NixOS
echo
"Unable to write '
${
key
}
=
${
value
}
' to nix.conf, "
\
"please add the value to your nix.conf"
fi
fi
}
# Add value for a given value, append the additional value
append_value_in_nix_conf
()
{
local
key
=
"
$1
"
local
value
=
"
$2
"
# Add value for key if it's missing entirely
if
!
grep
"
$key
"
/etc/nix/nix.conf
&
>
/dev/null
;
then
add_if_missing_in_nix_conf
"
$key
"
"
$value
"
;
return
$?
fi
# Check that key does not already contain the desired value
if
!
grep
"
$key
"
/etc/nix/nix.conf
|
grep
"
$value
"
&
>
/dev/null
;
then
echo
"/etc/nix/nix.conf is missing '
${
value
}
' for '
${
key
}
'. "
\
"Appending '
${
value
}
' to '
${
key
}
' in /etc/nix/nix.conf"
# Make sure that user can write to file
if
sudo
test
-w
/etc/nix/nix.conf
;
then
# Find the line with the related setting, then append the new value
# Values for nix.conf are space separated
sudo
sed
-i.bak
-e
"/
$key
/s|\$|
$value
|"
/etc/nix/nix.conf
else
# nix.conf is read only, which is true for NixOS
echo
"Unable to write to nix.conf, please append '
$value
' to '
$key
'"
\
"in your nix.conf"
fi
fi
}
# Check if nix.conf is already configured for a given value.
add_if_missing_in_nix_conf
"trusted-users"
"
${
ADMIN_GROUP
}
${
USER
}
"
add_if_missing_in_nix_conf
\
"experimental-features"
"flakes nix-command"
add_if_missing_in_nix_conf
"cores"
"
${
cores
}
"
add_if_missing_in_nix_conf
"max-jobs"
"
${
jobs
}
"
# Explictly add default cache for older nix versions to prevent custom cache
# becoming only trusted cache.
append_value_in_nix_conf
"substituters"
"https://cache.nixos.org"
append_value_in_nix_conf
"trusted-public-keys"
\
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
append_value_in_nix_conf
"substituters"
"https://comm.cachix.org"
append_value_in_nix_conf
"trusted-public-keys"
\
"comm.cachix.org-1:70RF31rkmCEhQ9HrXA2uXcpqQKGcUK3TxLJdgcUCaA4="
# Ask user if they would like to use Powerline for bash prompt
SCRIPT_DIR
=
$(
cd
"
$(
dirname
"
$0
"
)
"
||
true
;
pwd
-P
)
if
[[
"
$OSTYPE
"
==
'darwin'
*
]]
;
then
"
$SCRIPT_DIR
"
/prompt_direnv_macos.sh
fi
# Build the nixified script which is aware of Powerline and dependencies
nix
build
"
$SCRIPT_DIR
"
'/..#better-prompt'
# Source file to apply Powerline bootstrap logic
# shellcheck source=/dev/null
.
"
$(
nix
eval
--raw
"
$SCRIPT_DIR
"
'/..#better-prompt.outPath'
)
/bin/better-prompt"
File Metadata
Details
Attached
Mime Type
text/x-shellscript
Expires
Sun, Dec 7, 4:32 PM (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5017074
Default Alt Text
install_nix.sh (5 KB)
Attached To
Mode
rCOMM Comm
Attached
Detach File
Event Timeline
Log In to Comment