rice.sh (7171B)
1 #!/bin/sh 2 set -e 3 WORKDIRECTORY=$PWD 4 5 if [ "$(id -u)" -ne 0 ] 6 then printf "The script has to be run as root.\n" 7 exit 8 fi 9 10 if [ -x "$(command -v doas)" ]; then 11 PERMUSER=$DOAS_USER 12 evalcommand="doas -u $PERMUSER" 13 cp /etc/doas.conf /etc/doas.bak 14 echo "permit nopass :wheel" > /etc/doas.conf 15 echo "permit nopass root" >> /etc/doas.conf 16 else 17 PERMUSER=$SUDO_USER 18 evalcommand="sudo -u $PERMUSER" 19 echo "%wheel ALL=(ALL) NOPASSWD: ALL 20 Defaults:%wheel,root runcwd=*" >/etc/sudoers.d/temp 21 fi 22 23 run_as_user() { 24 $evalcommand "$@" 25 } 26 27 usermod -aG seat $PERMUSER 28 29 DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' dependencies.txt | tr '\n' ' '`" 30 pacman -Sy --noconfirm 31 pacman -S $DEPLIST --noconfirm --needed 32 33 run_as_user cp -r "$WORKDIRECTORY"/.config /home/"$PERMUSER" 34 run_as_user cp -r "$WORKDIRECTORY"/.local /home/"$PERMUSER" 35 run_as_user cp -a "$WORKDIRECTORY"/.zprofile /home/"$PERMUSER" 36 37 run_as_user mkdir -p /home/"$PERMUSER"/.config/git 38 run_as_user touch /home/"$PERMUSER"/.config/git/config 39 run_as_user mkdir -p /home/"$PERMUSER"/.config/npm 40 run_as_user touch /home/"$PERMUSER"/.config/npm/npmrc 41 run_as_user mkdir -p /home/"$PERMUSER"/.cache/zsh 42 run_as_user mkdir -p /home/"$PERMUSER"/.config/mpd/playlists 43 run_as_user mkdir -p /home/"$PERMUSER"/.local/share/themes 44 run_as_user mkdir -p /home/"$PERMUSER"/.local/share/icons 45 46 cd "$WORKDIRECTORY" || exit 47 run_as_user git clone https://github.com/zdharma-continuum/fast-syntax-highlighting 48 mkdir -p /usr/share/zsh/plugins 49 cp -rf fast-syntax-highlighting /usr/share/zsh/plugins 50 cd "$WORKDIRECTORY" 51 52 run_as_user mkdir -p /home/"$PERMUSER"/.ssh 53 run_as_user mkdir -p /home/"$PERMUSER"/.gnupg 54 run_as_user touch /home/"$PERMUSER"/.gnupg/gpg-agent.conf 55 56 cat <<EOL >> /home/$PERMUSER/.gnupg/gpg-agent.conf 57 enable-ssh-support 58 pinentry-program /usr/bin/pinentry-gnome3 59 default-cache-ttl 34560000 60 max-cache-ttl 34560000 61 EOL 62 63 cat <<EOL >> /home/$PERMUSER/.config/npm/npmrc 64 prefix=\${XDG_DATA_HOME}/npm 65 cache=\${XDG_CACHE_HOME}/npm 66 init-module=\${XDG_CONFIG_HOME}/npm/config/npm-init.js 67 logs-dir=\${XDG_STATE_HOME}/npm/logs 68 EOL 69 70 run_as_user find /home/"$PERMUSER"/.gnupg -type f -exec chmod 600 {} \; 71 run_as_user find /home/"$PERMUSER"/.gnupg -type d -exec chmod 700 {} \; 72 run_as_user find /home/"$PERMUSER"/.ssh -type f -exec chmod 600 {} \; 73 run_as_user find /home/"$PERMUSER"/.ssh -type d -exec chmod 700 {} \; 74 75 chsh -s /bin/zsh "$PERMUSER" 76 77 mkdir -p /root/.config/nvim 78 cat <<EOL >> /root/.config/nvim/init.vim 79 set title 80 set clipboard+=unnamedplus 81 set relativenumber 82 colorscheme vim 83 EOL 84 85 # Make pacman colorful, concurrent downloads and Pacman eye-candy. 86 grep -q "ILoveCandy" /etc/pacman.conf || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf 87 sed -Ei "s/^#(ParallelDownloads).*/\1 = 5/;/^#Color$/s/#//" /etc/pacman.conf 88 89 # Disable Pacman sandbox since kernel doesn't support landlock (only for custom kernels from my artix script) 90 # sed -Ei "s/^#(DisableSandbox).*/\1/" /etc/pacman.conf 91 92 # Use all cores for compilation. 93 sed -i "s/-j2/-j$(nproc)/;/^#MAKEFLAGS/s/^#//" /etc/makepkg.conf 94 95 if [ -x "$(command -v doas)" ]; then 96 # Use doas for Pacman authentification 97 sed -i 's/#PACMAN_AUTH=.*$/PACMAN_AUTH=(doas)/' /etc/makepkg.conf 98 fi 99 100 cat <<EOL >> /usr/share/libalpm/hooks/statusbar.hook 101 [Trigger] 102 Operation = Upgrade 103 Type = Package 104 Target = * 105 106 [Action] 107 Description = Updating statusbar... 108 When = PostTransaction 109 Exec = /usr/bin/pkill -RTMIN+8 waybar 110 EOL 111 112 113 cat <<EOL >> /etc/pacman.d/hooks/sing-box.hook 114 [Trigger] 115 Type = Package 116 Operation = Install 117 Operation = Upgrade 118 Target = sing-box 119 120 [Action] 121 Description = Setting rights for sing-box... 122 When = PostTransaction 123 Exec = /usr/bin/setcap cap_net_admin=ep /usr/sbin/sing-box 124 EOL 125 126 run_as_user git clone https://aur.archlinux.org/paru.git 127 cd paru 128 run_as_user makepkg -csi --noconfirm 129 cd "$WORKDIRECTORY" 130 DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' aurdeps.txt | tr '\n' ' '`" 131 run_as_user paru --sudo doas -S $DEPLIST --noconfirm 132 run_as_user dbus-launch gsettings set org.gnome.desktop.interface gtk-theme "catppuccin-mocha-pink-standard+default" 133 run_as_user dbus-launch gsettings set org.gnome.desktop.wm.preferences theme "catppuccin-mocha-pink-standard+default" 134 run_as_user dbus-launch gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu' 135 run_as_user dbus-launch gsettings set org.gnome.desktop.interface font-name "Sans 11" 136 cd .. 137 rm -rf hyprdots 138 rm -rf paru 139 rm -rf go 140 141 dinitctl enable cronie 142 echo "*/30 * * * * export DBUS_SESSION_BUS_ADDRESS=\$(grep -E -z \"DBUS_SESSION_BUS_ADDRESS\" \"/proc/\$(pgrep -x Hyprland)/environ\" | sed 's/DBUS_SESSION_BUS_ADDRESS=//'); /home/$PERMUSER/.local/bin/cron/newsup 143 */30 * * * * export DBUS_SESSION_BUS_ADDRESS=\$(grep -E -z \"DBUS_SESSION_BUS_ADDRESS\" \"/proc/\$(pgrep -x Hyprland)/environ\" | sed 's/DBUS_SESSION_BUS_ADDRESS=//'); /home/$PERMUSER/.local/bin/cron/checkup 144 */10 * * * * export DBUS_SESSION_BUS_ADDRESS=\$(grep -E -z \"DBUS_SESSION_BUS_ADDRESS\" \"/proc/\$(pgrep -x Hyprland)/environ\" | sed 's/DBUS_SESSION_BUS_ADDRESS=//'); /usr/local/bin/mailsync" | run_as_user crontab - 145 146 run_as_user git clone https://git.awy.one/mutt-wizard /home/"$PERMUSER"/mutt-wizard 147 cd /home/"$PERMUSER"/mutt-wizard 148 make install 149 150 cd /home/"$PERMUSER" 151 run_as_user git clone https://git.awy.one/autofox 152 cd autofox 153 run_as_user ./configure_firefox.sh 154 cd /home/"$PERMUSER" 155 156 rm -rf autofox 157 rm -rf mutt-wizard 158 159 # MPV 160 thumbfastlua_url=https://raw.githubusercontent.com/po5/thumbfast/refs/heads/master/thumbfast.lua 161 thumbfastconf_url=https://raw.githubusercontent.com/po5/thumbfast/refs/heads/master/thumbfast.conf 162 sponsorblock_url=https://codeberg.org/jouni/mpv_sponsorblock_minimal/raw/branch/master/sponsorblock_minimal.lua 163 config_dir="/home/$PERMUSER/.config/mpv" 164 scriptopts_dir="$config_dir/script-opts" 165 166 run_as_user mkdir -p $scriptopts_dir || echo "Couldn't create: $scriptopts_dir" 167 168 # thumbfast 169 run_as_user curl -Ls -o "$config_dir/scripts/thumbfast.lua" $thumbfastlua_url || echo "Couldn't download: $thumbfastlua_url" 170 run_as_user curl -Ls -o "$scriptopts_dir/thumbfast.conf" $thumbfastconf_url || echo "Couldn't download: $thumbfastconf_url" 171 sed -Ei "s/(network).*/\1=yes/" "$scriptopts_dir/thumbfast.conf" 172 173 # sponsorblock 174 run_as_user curl -Ls -o "$config_dir/scripts/sponsorblock_minimal.lua" $sponsorblock_url || echo "Couldn't download: $sponsorblock_url" 175 176 # necessary symlinks (pass for mutt-wizard and bemenu for tessen) 177 ln -s /bin/gopass /bin/pass 178 ln -s /usr/local/bin/wmenu /bin/bemenu 179 180 # nvchad 181 run_as_user git clone https://git.awy.one/nvchad /home/"$PERMUSER"/.config/nvim 182 rm -rf /home/"$PERMUSER"/.config/nvim/.git 183 184 # pam 185 sed -i '/auth[[:space:]]*include[[:space:]]*system-local-login/a auth optional pam_gnome_keyring.so' /etc/pam.d/login 186 sed -i '/session[[:space:]]*include[[:space:]]*system-local-login/a session optional pam_gnome_keyring.so auto_start' /etc/pam.d/login 187 echo "password optional pam_gnome_keyring.so" >> /etc/pam.d/passwd 188 189 yes | run_as_user paru --sudo doas -Scc 190 rm -rf /home/"$PERMUSER"/.cargo 191 192 if [ -x "$(command -v doas)" ]; then 193 rm /etc/doas.conf 194 mv /etc/doas.bak /etc/doas.conf 195 else 196 rm /etc/sudoers.d/temp 197 fi 198 199 chown -R $PERMUSER:wheel /home/$PERMUSER 200 201 echo "Your linux is riced!"