-
-
Save BurntSushi/b76e2f161ed98797f88a0811c492b98c to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Recommended steps: | |
# | |
# bootstrap before entering chroot | |
# copy this script into INSTALL_DIR | |
# rootinit after entering chroot | |
# x (if installing graphics) | |
# pkgs | |
# xpkgs (if installing graphics) | |
# userinit | |
# kaitinit (optional) | |
# grubinit | |
# | |
# At this point, log in as the user created above. | |
# | |
# yayinit | |
# yaypkgs | |
# yayxpkgs (if installing graphics) | |
# homeinit | |
# xenvinit (if installing graphics) | |
# gpginit | |
# sshinit | |
# scannerinit | |
# autologin (for media PCs) | |
# nmmedia (for media PCs) | |
INSTALL_DIR=/mnt | |
bootstrap() { | |
pacstrap "$INSTALL_DIR" base base-devel linux linux-firmware | |
genfstab -U "$INSTALL_DIR" >> "$INSTALL_DIR"/etc/fstab | |
} | |
rootinit() { | |
if [ $# != 1 ]; then | |
echo "Usage: $(basename "$0") rootinit <hostname>" >&2 | |
exit 1 | |
fi | |
hostname="$1" | |
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime | |
hwclock --systohc | |
sed -i 's/^#\(en_US\.UTF-8 .*\)$/\1/g' /etc/locale.gen | |
locale-gen | |
echo 'LANG=en_US.UTF-8' > /etc/locale.conf | |
echo "$hostname" > /etc/hostname | |
{ | |
echo "127.0.0.1 localhost" | |
echo "::1 localhost" | |
echo "127.0.1.1 $hostname.localdomain $hostname" | |
} >> /etc/hosts | |
echo 'COMPRESSXZ=(xz -c -z -0 -)' >> /etc/makepkg.conf | |
echo "set root password:" | |
passwd | |
} | |
x() { | |
if [ $# != 1 ]; then | |
echo "Usage: $(basename "$0") x <intel | radeon>" >&2 | |
exit 1 | |
fi | |
driver="$1" | |
pacman --noconfirm -S xorg xorg-xinit | |
case "$driver" in | |
intel) | |
pacman --noconfirm -S xf86-video-intel | |
;; | |
radeon) | |
pacman --noconfirm -S xf86-video-ati | |
;; | |
*) | |
echo "unrecognized graphics driver" >&2 | |
exit 1 | |
;; | |
esac | |
} | |
pkgs() { | |
pacman --noconfirm -S \ | |
zsh \ | |
asp \ | |
sudo \ | |
vi \ | |
alsa-utils \ | |
aspell aspell-en hunspell hunspell-en_US \ | |
python python-pip python-setuptools python-virtualenv bpython \ | |
python2 python2-pip python2-setuptools python2-virtualenv bpython2 \ | |
flake8 \ | |
go go-tools \ | |
rustup \ | |
grub efibootmgr \ | |
iputils inetutils whois bind-tools dhcpcd \ | |
cups \ | |
shellcheck \ | |
pdftk \ | |
cronie openssh openssl sshfs sshuttle gnupg tmux nfs-utils enscript \ | |
docker espeak ffmpeg jq ripgrep youtube-dl fzf \ | |
iotop htop linux-tools pkgfile pwgen pv strace tig time tree valgrind \ | |
vim \ | |
git aws-cli s3cmd colordiff curl wget ctags darkhttpd pass rsync | |
pkgfile --update | |
} | |
xpkgs() { | |
pacman --noconfirm -Rsn vim | |
pacman --noconfirm -S \ | |
xterm \ | |
alacritty alacritty-terminfo \ | |
k3b konversation konsole dolphin okular \ | |
qt5 qt5ct oxygen oxygen-icons \ | |
xsane \ | |
xbindkeys \ | |
libnotify \ | |
kmix \ | |
dunst \ | |
i3lock \ | |
mpv \ | |
nitrogen \ | |
numlockx \ | |
xclip \ | |
xdotool \ | |
trayer \ | |
freerdp \ | |
gmrun \ | |
gvim \ | |
noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra \ | |
firefox | |
} | |
userinit() { | |
# Use the same group ID on all machines. | |
sudo groupmod -n users-old users | |
sudo groupadd -g 100 users | |
sudo useradd -g users -u 1000 -m -s /bin/zsh \ | |
-G disk,lp,wheel,log,dbus,network,video,audio,optical,storage,scanner,power \ | |
andrew | |
echo "set andrew password" | |
sudo passwd andrew | |
echo "make sure '%wheel ALL=(ALL) NOPASSWD: ALL' is in sudoers" | |
} | |
kaitinit() { | |
sudo useradd -g users -u 1002 -m -s /bin/bash \ | |
-G disk,lp,wheel,log,dbus,network,video,audio,optical,storage,scanner,power \ | |
kait | |
echo "set kait password" | |
sudo passwd kait | |
echo "make sure '%wheel ALL=(ALL) NOPASSWD: ALL' is in sudoers" | |
} | |
grubinit() { | |
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub | |
grub-mkconfig -o /boot/grub/grub.cfg | |
} | |
yayinit() { | |
cd /tmp || exit 1 | |
if [ ! -d yay ]; then | |
git clone https://aur.archlinux.org/yay | |
fi | |
cd yay || exit 1 | |
makepkg -fsi --noconfirm | |
} | |
yaypkgs() { | |
yay --noconfirm -S \ | |
brother-dcp7065dn \ | |
brscan4 \ | |
ngrok \ | |
par \ | |
vim-fzf-git vim-go-git vim-ledger-git vim-plug-git \ | |
vim-renamer-git vim-syntastic-git vim-toml-git \ | |
zsh-autosuggestions \ | |
zsh-completions \ | |
zsh-syntax-highlighting \ | |
zsh-fast-syntax-highlighting-git \ | |
dict-wn | |
} | |
yayxpkgs() { | |
yay --noconfirm -S \ | |
dzen2-xft-xpm-xinerama-git \ | |
google-chrome \ | |
mirage \ | |
idesk \ | |
gkrellm \ | |
gkleds \ | |
gkrellsun \ | |
gkrellweather \ | |
nerd-fonts-hack \ | |
ttf-oxygen \ | |
ttf-dejavu \ | |
ttf-fira-mono \ | |
ttf-mononoki-git \ | |
ttf-roboto \ | |
ttf-ubuntu-font-family | |
} | |
homeinit() { | |
cd "$HOME" || exit 1 | |
curl https://burntsushi.net/stuff/setup-home > /tmp/setup-home.sh | |
sh /tmp/setup-home.sh | |
git clone andrew@home.burntsushi.net:/m/git/password-store .password-store | |
mkdir -p .gnupg | |
{ | |
echo 'default-cache-ttl 86400' | |
echo 'max-cache-ttl 86400' | |
} > .gnupg/gpg-agent.conf | |
} | |
xenvinit() { | |
cd "$HOME" || exit 1 | |
. "$HOME/bin/x11-go" | |
go get -v github.com/BurntSushi/wingo/... | |
go get -v github.com/BurntSushi/gohead/... | |
virtualenv2 "$HOME/.pyx11" | |
. "$HOME/.pyx11/bin/activate" | |
pip install pywingo | |
} | |
gpginit() { | |
rscp nas:/m/data/andrew/keys/*.key.* /tmp/ | |
gpg --import /tmp/jamslam@gmail.com.key.priv | |
gpg --import /tmp/kbrady39@gmail.com.key.priv | |
echo "use 'gpg --edit-key {email}' to trust each key completely" | |
} | |
sshinit() { | |
ssh-extract-key burntsushi | |
ssh-extract-key feral | |
} | |
scannerinit() { | |
brsaneconfig4 -a name=Brother model=DCP-7065DN ip=192.168.1.150 | |
} | |
autologin() { | |
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d | |
sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf > /dev/null <<EOF | |
[Service] | |
ExecStart= | |
ExecStart=-/usr/bin/agetty --autologin andrew --noclear %I $TERM | |
EOF | |
} | |
nmmedia() { | |
script="/etc/NetworkManager/dispatcher.d/10-media.sh" | |
sudo tee "$script" > /dev/null <<EOF | |
#!/bin/sh | |
status="\$2" | |
case "\$status" in | |
up) | |
sudo -i -u andrew zsh -c '. ~/.zshrc && media' | |
;; | |
down) | |
sudo -i -u andrew zsh -c '. ~/.zshrc && media down' | |
;; | |
esac | |
EOF | |
sudo chmod 0755 "$script" | |
} | |
case "$1" in | |
bootstrap) shift ; bootstrap "$@" ;; | |
rootinit) shift ; rootinit "$@" ;; | |
x) shift ; x "$@" ;; | |
pkgs) shift ; pkgs "$@" ;; | |
xpkgs) shift ; xpkgs "$@" ;; | |
userinit) shift ; userinit "$@" ;; | |
kaitinit) shift ; kaitinit "$@" ;; | |
grubinit) shift ; grubinit "$@" ;; | |
yayinit) shift ; yayinit "$@" ;; | |
yaypkgs) shift ; yaypkgs "$@" ;; | |
yayxpkgs) shift ; yayxpkgs "$@" ;; | |
homeinit) shift ; homeinit "$@" ;; | |
xenvinit) shift ; xenvinit "$@" ;; | |
gpginit) shift ; gpginit "$@" ;; | |
sshinit) shift ; sshinit "$@" ;; | |
scannerinit) shift ; scannerinit "$@" ;; | |
autologin) shift ; autologin "$@" ;; | |
nmmedia) shift ; nmmedia "$@" ;; | |
*) | |
echo "unrecognized command" >&2 | |
exit 1 | |
;; | |
esac |
Ah thanks. And wow, yeah, yaourt isn't even listed there any more! I'll check out yay
.
yay
's top contributor Morganamilo is Arch trusted user, so it's like a seal of approval and look no further for me. Should be a drop-in replacement for yauort
in this parsticular script and in general.
One more thing I had on my mind after reading your latest blog post.
I very much miss the dedicated volume keys on the ThinkPad. I want to be able to adjust the volume quickly and without looking. Having to use the Fn key does not make that easy. I may wind up just adding some new keybinding for this to work around it.
I also use xbindkeys
for hotkeys and for sound I quite like to use Ctrl + Up/Down
for global sound control. Really fast and easy. Also, what can be more logical than controlling volume level up and down with Control + Up/Down? 😃
Ctrl + Alt + Up/Down
for music player volume control. If it's MPRIS-compatible, then playerctl
is a a good helper. Relevant part of my xbindkeysrc
:
# ALSA
"amixer -q set Master 5%+"
control + Up
"amixer -q set Master 5%-"
control + Down
# Pulse Audio (volume can exceed 100%, so it sucks)
# "pactl set-sink-volume @DEFAULT_SINK@ +5%" # isn't limited to 100%, watch out
# control + Up
# "pactl set-sink-volume @DEFAULT_SINK@ -5%"
# control + Down
# Music player
"playerctl play-pause"
control + alt + space
"playerctl next"
control + alt + Right
"playerctl previous"
control + alt + Left
"playerctl volume 0.05+"
control + alt + Up
"playerctl volume 0.05-"
control + alt + Down
Hope it helps in a way.
Great! Thanks for the ping again. I was finally moved to switch to yay
. Overall very happy. I love its diff options.
I've updated this script to use yay
as well, so that others passing by will not be inclined to use yaourt
just because I hadn't updated yet.
As for volume, I had settled on Super + Tab
for volume up and Super + Shift + Tab
for volume down and Super + Grave
for mute toggle. Not a huge fan. I added your control options as well, and we'll see how it goes. :-)
Also, for changing volume, I use i3-volume
. I don't use i3, and despite its name, it works just fine with any WM. (I actually use my own patched version of it that makes it work a little nicer with dunst, and plays a "ding" sound any time the volume changes.)
yaourt
is deprecated for real by now,yay
is often recommended instead (I use it myself, and it works; shell completion is present).https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_tables for actual ones.