Add files
This commit is contained in:
263
install.sh
Normal file
263
install.sh
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
HOSTNAME="t440p"
|
||||||
|
USERNAME="olari"
|
||||||
|
PASSWORD="redacted"
|
||||||
|
REGION="Europe/Tallinn"
|
||||||
|
KEYMAP="dvorak-programmer"
|
||||||
|
MIRROR="http://mirrors.dotsrc.org/archlinux/\$repo/os/\$arch"
|
||||||
|
DEVICE="/dev/sda"
|
||||||
|
|
||||||
|
PACKAGES=(
|
||||||
|
# Base groups
|
||||||
|
base # Base installation
|
||||||
|
base-devel # Tools for building packages
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
grub # Bootloader
|
||||||
|
efibootmgr # EFI support
|
||||||
|
intel-ucode # Intel microcode
|
||||||
|
|
||||||
|
# T440p Drivers
|
||||||
|
xf86-video-intel # Intel video driver
|
||||||
|
xf86-input-synaptics # Touchpad driver
|
||||||
|
|
||||||
|
# Network and audio
|
||||||
|
networkmanager # Network management
|
||||||
|
pulseaudio # Audio management
|
||||||
|
|
||||||
|
# Desktop environment
|
||||||
|
gdm # Display manager
|
||||||
|
gnome-shell # Graphical shell
|
||||||
|
gvfs # Gnome virtual file system
|
||||||
|
gvfs-smb # Samba support for gvfs
|
||||||
|
xdg-user-dirs-gtk # User directory manager
|
||||||
|
nautilus # File manager
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
ttf-dejavu # General font
|
||||||
|
ttf-liberation # Arial-like font
|
||||||
|
noto-fonts-cjk # Asian characters
|
||||||
|
noto-fonts-emoji # Emoticons
|
||||||
|
|
||||||
|
# Media players
|
||||||
|
mpv # Video player
|
||||||
|
audacious # Music player
|
||||||
|
sxiv # Image viewer
|
||||||
|
zathura # Document viewer
|
||||||
|
zathura-pdf-mupdf # Pdf support for zathura
|
||||||
|
zathura-cb # Comic book support for zathura
|
||||||
|
zathura-djvu # Djvu support for zathura
|
||||||
|
|
||||||
|
# Terminal environment
|
||||||
|
alacritty # Terminal emulator
|
||||||
|
fish # Friendly interactive shell
|
||||||
|
tmux # Terminal multiplexer
|
||||||
|
neovim # Text editor
|
||||||
|
|
||||||
|
# Terminal utils
|
||||||
|
jq # JSON parser
|
||||||
|
git # Version control
|
||||||
|
htop # Process viewer
|
||||||
|
openssh # SSH client and server
|
||||||
|
gnu-netcat # Network utility (for CTF)
|
||||||
|
atool # Archive tool
|
||||||
|
zip unzip # Zip support
|
||||||
|
unrar p7zip # RAR, 7z support
|
||||||
|
|
||||||
|
# Internet
|
||||||
|
firefox # Web browser
|
||||||
|
wget curl # File transfer
|
||||||
|
qbittorrent # Bittorrent client
|
||||||
|
youtube-dl # Video downloader
|
||||||
|
|
||||||
|
# Development
|
||||||
|
python # Scripting language
|
||||||
|
python-pip # Package manager for python
|
||||||
|
clang # C and C++ compiler and tools
|
||||||
|
gcc # C and C++ compiler
|
||||||
|
gdb # Debugger
|
||||||
|
cmake # Build system
|
||||||
|
nodejs # JavaScript runtime
|
||||||
|
yarn # Node package manager
|
||||||
|
|
||||||
|
# Other
|
||||||
|
ntfs-3g # NTFS driver
|
||||||
|
tlp # Laptop power manager
|
||||||
|
)
|
||||||
|
|
||||||
|
SERVICES=(gdm NetworkManager tlp tlp-sleep)
|
||||||
|
|
||||||
|
function prepare_disk_uefi {
|
||||||
|
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' <<EOF | fdisk "${DEVICE}"
|
||||||
|
g # Create gpt partition table.
|
||||||
|
|
||||||
|
## Create partitions
|
||||||
|
n # Create efi partition...
|
||||||
|
1 # ... at index 1...
|
||||||
|
# ... at default start pos...
|
||||||
|
+512M # ... with 512MB size.
|
||||||
|
|
||||||
|
n # Create swap partition...
|
||||||
|
2 # ... at index 2...
|
||||||
|
# ... at default start pos...
|
||||||
|
+4G # ... with 4G size.
|
||||||
|
|
||||||
|
n # Create root partition...
|
||||||
|
3 # ... at index 3...
|
||||||
|
# ... at default start pos...
|
||||||
|
# ... with max size.
|
||||||
|
|
||||||
|
## Set partition types
|
||||||
|
t # Change parition type...
|
||||||
|
1 # ... of the efi partition...
|
||||||
|
1 # ... to "1 EFI System".
|
||||||
|
|
||||||
|
t # Change partition type...
|
||||||
|
2 # ... of the swap partition...
|
||||||
|
19 # ... to "19 Linux swap".
|
||||||
|
|
||||||
|
t # Change partition type...
|
||||||
|
3 # ... of the root partition...
|
||||||
|
20 # ... to "20 Linux filesystem"
|
||||||
|
|
||||||
|
w # Write changes
|
||||||
|
q # Quit
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Format the partitions
|
||||||
|
mkfs.fat -F32 "${DEVICE}1"
|
||||||
|
mkswap "${DEVICE}2"
|
||||||
|
mkfs.ext4 "${DEVICE}3"
|
||||||
|
|
||||||
|
# Mount the partitions
|
||||||
|
swapon "${DEVICE}2"
|
||||||
|
mount "${DEVICE}3" /mnt
|
||||||
|
mkdir /mnt/boot
|
||||||
|
mount "${DEVICE}1" /mnt/boot
|
||||||
|
|
||||||
|
# Create fstab file
|
||||||
|
mkdir /mnt/etc
|
||||||
|
cat <<EOF > /mnt/etc/fstab
|
||||||
|
/dev/sda1 /boot vfat defaults 0 2
|
||||||
|
/dev/sda2 none swap sw 0 0
|
||||||
|
/dev/sda3 / ext4 noatime,discard 0 1
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepare_disk_dos {
|
||||||
|
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk "${DEVICE}"
|
||||||
|
o # Create dos partition table.
|
||||||
|
|
||||||
|
## Create partitions
|
||||||
|
n # Create swap partition...
|
||||||
|
# ... with default type...
|
||||||
|
1 # ... at index 1...
|
||||||
|
# ... at default start pos...
|
||||||
|
+4G # ... with 8G size.
|
||||||
|
|
||||||
|
n # Create root partition...
|
||||||
|
# ... with default type...
|
||||||
|
2 # ... at index 2...
|
||||||
|
# ... at default start pos...
|
||||||
|
# ... with default size.
|
||||||
|
|
||||||
|
## Set partition types
|
||||||
|
t # Change parition type...
|
||||||
|
1 # ... of the swap partuition...
|
||||||
|
82 # ... to "82 Linux swap".
|
||||||
|
|
||||||
|
t # Change partition type...
|
||||||
|
2 # ... of the root partition...
|
||||||
|
83 # ... to "83 Linux".
|
||||||
|
|
||||||
|
a # Set bootable flag...
|
||||||
|
2 # ... on the root partition.
|
||||||
|
|
||||||
|
w # Write changes
|
||||||
|
q # Quit
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Format partitions
|
||||||
|
mkswap "${DEVICE}1"
|
||||||
|
mkfs.ext4 "${DEVICE}2"
|
||||||
|
|
||||||
|
# Fount partition
|
||||||
|
swapon "${DEVICE}1"
|
||||||
|
mount "${DEVICE}2" /mnt
|
||||||
|
|
||||||
|
# Create fstab file
|
||||||
|
mkdir /mnt/etc
|
||||||
|
cat <<EOF > /mnt/etc/fstab
|
||||||
|
/dev/sda1 none swap sw 0 0
|
||||||
|
/dev/sda2 / ext4 noatime,discard 0 1
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check internet connection
|
||||||
|
ping -w1 -c1 google.com || exit 1
|
||||||
|
|
||||||
|
# Enable network time synchronization
|
||||||
|
timedatectl set-ntp true
|
||||||
|
|
||||||
|
# Prepare disk according to boot mode
|
||||||
|
if [[ -d /sys/firmware/efi/efivars ]]; then
|
||||||
|
prepare_disk_uefi
|
||||||
|
else
|
||||||
|
prepare_disk_dos
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set mirror and install system
|
||||||
|
sed -i "1iServer = ${MIRROR}" /etc/pacman.d/mirrorlist
|
||||||
|
pacstrap /mnt ${PACKAGES[*]}
|
||||||
|
|
||||||
|
# Set language and keymap
|
||||||
|
echo "LANG=en_US.UTF-8" > /mnt/etc/locale.conf
|
||||||
|
echo "KEYMAP=${KEYMAP}" > /mnt/etc/vconsole.conf
|
||||||
|
|
||||||
|
# Set hostname and create /etc/hosts
|
||||||
|
echo "${HOSTNAME}" > /mnt/etc/hostname
|
||||||
|
cat <<EOF > /mnt/etc/hosts
|
||||||
|
127.0.0.1 localhost
|
||||||
|
::1 localhost
|
||||||
|
127.0.1.1 ${HOSTNAME}.localdomain ${HOSTNAME}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Set timezone and sync clock
|
||||||
|
arch-chroot /mnt ln -sf /usr/share/zoneinfo/"${REGION}" /etc/localtime
|
||||||
|
arch-chroot /mnt hwclock --systohc
|
||||||
|
|
||||||
|
# Generate locale
|
||||||
|
arch-chroot /mnt sed -i '1ien_US.UTF-8 UTF-8' /etc/locale.gen
|
||||||
|
arch-chroot /mnt locale-gen
|
||||||
|
|
||||||
|
# Install bootloader
|
||||||
|
if [[ -d /sys/firmware/efi/efivars ]]; then
|
||||||
|
arch-chroot /mnt grub-install \
|
||||||
|
--target=x86_64-efi \
|
||||||
|
--efi-directory=/boot \
|
||||||
|
--bootloader-id=grub
|
||||||
|
else
|
||||||
|
arch-chroot /mnt grub-install "${DEVICE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure bootloader
|
||||||
|
arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
|
|
||||||
|
# Create user
|
||||||
|
arch-chroot /mnt useradd -m -G wheel -s /bin/bash "${USERNAME}"
|
||||||
|
|
||||||
|
# Enable nopasswd sudo for wheel group
|
||||||
|
arch-chroot /mnt sed -i '1i%wheel ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
|
||||||
|
|
||||||
|
# Set user credentials
|
||||||
|
echo "${USERNAME}:${PASSWORD}" | chpasswd --root /mnt
|
||||||
|
echo "root:${PASSWORD}" | chpasswd --root /mnt
|
||||||
|
|
||||||
|
# Change user shell to fish
|
||||||
|
arch-chroot /mnt chsh -s /usr/bin/fish "${USERNAME}"
|
||||||
|
|
||||||
|
# Enable services
|
||||||
|
arch-chroot /mnt systemctl enable ${SERVICES[*]}
|
||||||
|
|
||||||
99
setup.sh
Normal file
99
setup.sh
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
AUR_PACKAGES=(
|
||||||
|
yaru-{gtk,icon,sound}-theme # Theme from Ubuntu
|
||||||
|
consolas-font # Monospace font used by Visual Studio
|
||||||
|
shadowfox-updater # Universal dark mode for Firefox
|
||||||
|
pup-git # Commandline HTML parser (useful for bash scripts)
|
||||||
|
ccls # C++ language server
|
||||||
|
ranger-git # File manager
|
||||||
|
)
|
||||||
|
|
||||||
|
PYTHON_PACKAGES=(
|
||||||
|
# Web scraping libraries
|
||||||
|
requests # HTML requests
|
||||||
|
beautifulsoup4 # HTML parsing
|
||||||
|
|
||||||
|
# Statistics libraries
|
||||||
|
matplotlib # Plotting
|
||||||
|
numpy # Matrix manipulation
|
||||||
|
pandas # Data analysis
|
||||||
|
|
||||||
|
# Tools
|
||||||
|
pylint # Python linter
|
||||||
|
autopep8 # Python formatter
|
||||||
|
gdbgui # GDB frontend
|
||||||
|
ueberzug # Terminal image preview (used by ranger)
|
||||||
|
)
|
||||||
|
|
||||||
|
function set_gnome_settings {
|
||||||
|
# Set yaru theme
|
||||||
|
gsettings set org.gnome.desktop.interface enable-animations false
|
||||||
|
gsettings set org.gnome.desktop.interface gtk-theme Yaru-dark
|
||||||
|
gsettings set org.gnome.desktop.interface cursor-theme Yaru
|
||||||
|
gsettings set org.gnome.desktop.interface icon-theme Yaru
|
||||||
|
|
||||||
|
# Disable animations
|
||||||
|
gsettings set org.gnome.desktop.sound theme-name Yaru
|
||||||
|
|
||||||
|
# Set dvorak-programmer layout
|
||||||
|
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+dvp')]"
|
||||||
|
|
||||||
|
# Set caps to ctrl
|
||||||
|
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
|
||||||
|
|
||||||
|
# Change keyboard delay and speed
|
||||||
|
gsettings set org.gnome.desktop.peripherals.keyboard delay 250
|
||||||
|
gsettings set org.gnome.desktop.peripherals.keyboard repeat-interval 25
|
||||||
|
|
||||||
|
# Enable night light
|
||||||
|
gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true
|
||||||
|
|
||||||
|
# Sort directories before files
|
||||||
|
gsettings set org.gtk.Settings.FileChooser sort-directories-first true
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_firefox_settings {
|
||||||
|
local prefs_file=$(ls ~/.mozilla/firefox/*release/prefs.js)
|
||||||
|
|
||||||
|
# Make shadowfox work on FF69
|
||||||
|
sed -i 's/\("toolkit.legacyUserProprefs_fileCustomizations.stylesheets", \)true/\1true/' "${prefs_file}"
|
||||||
|
sed -i 's/\("browser.in-content.dark-mode", \)false/\1true/' "${prefs_file}"
|
||||||
|
|
||||||
|
# Enable some privacy features
|
||||||
|
sed -i 's/\("privacy.firstparty.isolate", \)false/\1true/' "${prefs_file}"
|
||||||
|
sed -i 's/\("privacy.resistFingerprinting", \)false/\1true/' "${prefs_file}"
|
||||||
|
|
||||||
|
# Disable some spying features
|
||||||
|
sed -i 's/\("browser.send_pings", \)true/\1false/' "${prefs_file}"
|
||||||
|
sed -i 's/\("dom.event.clipboardevents.enabled", \)true/\1false/' "${prefs_file}"
|
||||||
|
sed -i 's/\("media.navigator.enabled.stylesheets", \)true/\1false/' "${prefs_file}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Check internet connection
|
||||||
|
ping -w1 -c1 google.com || exit 1
|
||||||
|
|
||||||
|
# Enable pacman colors
|
||||||
|
sudo sed -i 's/#Color/Color/' /etc/pacman.conf
|
||||||
|
|
||||||
|
# Install yay if not installed
|
||||||
|
if ! pacman -Qi yay; then
|
||||||
|
git clone http://aur.archlinux.org/yay.git
|
||||||
|
cd yay
|
||||||
|
makepkg -si --noconfirm
|
||||||
|
cd ..
|
||||||
|
rm -rf yay
|
||||||
|
fi
|
||||||
|
|
||||||
|
yay -Sy --noconfirm --needed ${AUR_PACKAGES[*]}
|
||||||
|
pip install --user ${PYTHON_PACKAGES[*]}
|
||||||
|
|
||||||
|
# Install vim-plug
|
||||||
|
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
|
||||||
|
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||||
|
|
||||||
|
set_gnome_settings
|
||||||
|
set_firefox_settings
|
||||||
|
|
||||||
Reference in New Issue
Block a user