-
-
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 [email protected]:/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/[email protected] | |
| gpg --import /tmp/[email protected] | |
| 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/[email protected] | |
| sudo tee /etc/systemd/system/[email protected]/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 + DownHope 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.)
yaourtis deprecated for real by now,yayis 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.