These are notes taken be me through the years of using (mostly) Arch Linux distribution as well as (less) Windows OS.
This can be considered as a ‘loose provisioning guidelines’ and it acts for me as a goto-source-of-copy-paste when [re]configuring [new] system (including containerized).
It’s worth mentioning that these are more like ‘init’-scripts rather than ‘maintenance’-scripts which I publish in a separate section maintenance guideliness (todo – link).
1. arch install
https://wiki.archlinux.org/title/Installation_guide
# comes from pacman -S terminus-font setfont ter-132b fdisk /dev/the_disk_to_be_partitioned mkfs.ext4 /dev/root_partition mount /dev/root_partition /mnt mount --mkdir /dev/efi_system_partition /mnt/boot/efi pacstrap -K /mnt base linux linux-firmware grub efibootmgr os-prober ntfs3g systemd man-db man-pages git\ vim stow openssh fish networkmanager fwupd btop tlp gnupg pass mount --mkdir /dev/win_system_partition /mnt/mnt/win genfstab -U /mnt >> /mnt/etc/fstab arch-chroot /mnt ln -sf /usr/share/zoneinfo/Region/City /etc/localtime hwclock --systohc #Edit /etc/locale.gen and uncomment en_US.UTF-8 UTF-8 and other needed UTF-8 locales. Generate the locales by running: locale-gen /etc/locale.conf LANG=en_US.UTF-8 /etc/hostname yourhostname mkinitcpio -P grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub #then edit /etc/default/grub and add/uncomment: GRUB_DISABLE_OS_PROBER=false grub-mkconfig -o /boot/grub/grub.cfg # in case if os-prober doesn't work # https://www.fosstools.net/fix-arch-os-prober-not-detecting-windows-how-to sudo vim /etc/grub.d/40_custom menuentry "Windows" --class windows --class os { search --fs-uuid --no-floppy --set=root UUID_Here chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi } passwd reboot
2. essential
Essential packages and configurations
2.1. package management
echo '[multilib]' | sudo tee -a /etc/pacman.conf echo 'Include = /etc/pacman.d/mirrorlist' | sudo tee -a /etc/pacman.conf
2.1.1. update
sudo pacman -Syu
2.1.2. yay for arch aur
sudo pacman -S --noconfirm --needed git base-devel git-delta git clone https://aur.archlinux.org/yay-bin.git cd yay-bin makepkg -si --noconfirm cd .. rm -rf yay-bin
2.1.3. speed up aur compilations
sudo pacman -S ccache sudo vim /etc/makepkg.conf MAKEFLAGS="-j16" BUILDENV=(!distcc color ccache check !sign) export PATH="/usr/lib/ccache/bin/:$PATH"
2.1.4. pactree
pacin pacman-contrib
2.2. user
useradd -m -s /bin/zsh twist passwd twist sudo usermod -aG wheel twist
2.3. time & date
# enable time sync timedatectl set-ntp true
2.4. envvars
# this probably works only if sway is launched through systemd # ln -s ~/configs/linux/.config/environment.d ~/.config # what works for both sway/i3 - .profile and when starting sway/startx from greetd zsh session # this one works too # ln -s ~/configs/linux/.pam_environment ~ # but currently I'm simply using .profile
2.5. configs
dot-files basically
sudo pacman --noconfirm -Sy git stow openssh cd ~ git clone https://github.com/thatwist/configs.git ln -s ~/configs/linux/bin ~/ stow --target=$HOME --dir=$HOME/configs/linux stow stow git profile
2.6. terminal
2.6.1. zsh
# zsh+depedencies used within .zshrc sudo pacman -S --noconfirm zsh exa bat zoxide atuin stow zsh
2.6.2. alacritty
pacin alacritty stow alacritty
2.6.3. oh-my
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" ln -s ~/configs/linux/.zshrc ~/
2.6.4. vim binds in zsh
git clone https://github.com/jeffreytse/zsh-vi-mode \ $ZSH/custom/plugins/zsh-vi-mode plugins+=(zsh-vi-mode) or just set -o vi (vi-mode)
2.6.5. kitty
I use alacritty now though..
pacin kitty ln -s ~/configs/linux/.config/kitty ~/.config/ # set TERM env var to xterm-kitty # see `toe` output
2.6.6. (on fedora/gnome/ubuntu?) making kitty default terminal (instead of gnome-terminal)
# from here https://unix.stackexchange.com/a/642886/495090 sudo install -vDm755 /dev/null /usr/local/bin/gnome-terminal
#!/bin/bash [ x"$1" = x"--" ] || { exec /usr/bin/gnome-terminal "$@"; exit 0; } shift TITLE="$(basename "$1")" if [ -n "$TITLE" ]; then /usr/bin/kitty -T "$TITLE" "$@" else /usr/bin/kitty "$@" fi
2.6.7. zsh plugins
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Set ZSH_THEME=”powerlevel10k/powerlevel10k” in ~/.zshrc
these plugins are already in soft-linked .zshrc
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
2.6.8. to change shell (chsh)
# fedora sudo dnf install -y util-linux-user # arch sudo pacman -S --noconfirm util-linux # change shell chsh -s $(which zsh)
2.6.9. themes (e.g. for gnome-terminal, termite, ..)
# https://mayccoll.github.io/Gogh/ bash -c "$(wget -qO- https://git.io/vQgMr)"
2.6.10. fortune, cowsay
dnfi fortune-mod dnfi cowsay
2.6.11. icons
yain icons-in-terminal
2.6.12. fonts
# for better tty console fonts pacin terminus-font
2.7. tools
Various important and useful packages – most of them are rather mandatory than optional.
pacin just stow atuin lsof btop htop glances jq ncdu wget tmux sshd openssh lvm2 git-delta # build-essentials arch pacin build-devel # comression pacin zstd # used in ranger pacin unzip # unrar pacin unrar # math, used in some i3blocks pacin bc # plocate faster than mlocate pacin plocate sudo updatedb # like cat but better pacin bat # tmux stow tmux # crontab pacin cronie # scheduler (not using right now) pacin at #pacin s-nail
2.7.1. build-essentials fedora
sudo dnf install cmake make automake autoconf gettext-devel texinfo gnutls-devel libXpm-devel libjpeg-turbo-devel giflib-devel gcc gcc-c++ kernel-devel systemd-devel libevdev libevdev-devel yaml-cpp yaml-cpp-devel intltool
2.8. network
pacin networkmanager # autoconnect wifi nmcli device set wlp2s0 autoconnect yes # selinux labels to use required certs for vpn restorecon -Rf ~/.cert # applet pacin network-manager-applet # vpn # first, copy cert files into ~/.cert (cacert.pem, yostapchuk.pem, yostapchuk.key) # install openvpn plugin pacin networkmanager-openvpn # import it sudo nmcli connection import type openvpn file ~/vpn/romex.ovpn # inetutils (hostname command) pacin inetutils # graph ping pacin gping # even better than ping pacin mtr # speedtest pacin speedtest-cli
2.9. emacs
2.9.1. install
At the moment I’m simply using yay emacs-git package
yain emacs-git
- from git source
#git clone https://github.com/emacs-mirror/emacs #git clone --depth 1 -b emacs-27 https://git.savannah.gnu.org/git/emacs.git cd ~/emacs ./autogen.sh ./configure --with-mailutils --with-xwidgets --with-native-compilation make # check it's working src/emacs --version sudo make install
- native-comp and other dependencies
# native yain libgccjit # json pacin jansson
- from source zip
# Dependencies for development sudo dnf group install "Development Tools" # Dependencies specific to emacs sudo dnf builddep emacs # Download the latest stable release from emacs website wget http://mirrors.kernel.org/gnu/emacs/emacs-26.3.tar.xz wget http://mirrors.kernel.org/gnu/emacs/emacs-26.3.tar.xz.sig # Verify the tar.xz file gpg --verify emacs-26.3.tar.xz.sig emacs-26.3.tar.xz # Once that has been taken care of, extract the tar.xz archive. tar -xvf emacs-26.3.tar.xz # Go into the newly made folder cd emacs-26.3 # Configure the source ./configure # Compile the source make # Check the binary to see that it runs smoothly src/emacs -Q # Install the binary sudo make install
- fedora
sudo dnf install emacs
- from rpm
- download through rpmfinder – emacs, emacs-common, emacs-filesystem
- remove –noautoremove above
- install using dnf install <file>
- download through rpmfinder – emacs, emacs-common, emacs-filesystem
- on osx
brew install emacs --HEAD --with-cocoa --with-gnutls --with-librsvg --with-imagemagick@6 --with-mailutils brew linkapps emacs rm /Applications/Emacs.app osascript -e 'tell application "Finder" to make alias file to POSIX file "/usr/local/opt/emacs/Emacs.app" at POSIX file "/Applications"'
2.9.2. config
git clone https://github.com/thatwist/.emacs.d.git ~/.config/emacs
Then you have to open .config/emacs/config.org and M-x org-babel-tangle
- chemacs (been experimenting with) – https://github.com/plexus/chemacs2
2.9.3. start as daemon
see configs/bin/emacsclient-smart script
2.9.4. fonts
M-x all-the-icons-install-fonts M-x nerd-icons-install-fonts on windows - this will ask to download only, then install it manually
2.9.5. mu4e & mail
pacin gmime3 xapian-core python-html2text xdg-utils guile2.0 git clone git://github.com/djcb/mu.git cd mu ./autogen.sh && make sudo make install # man mu, man mu-easy yain mbsync ln -s ~/configs/linux/.mbsyncrc ~
2.9.6. shell colors
# see emacs config ln -s ~/configs/linux/.terminfo ~/.terminfo
2.9.7. various desktop file shortcuts
sudo ln -s ~/configs/linux/usr/local/share/applications/* /usr/local/share/applications/
2.10. vim
I use emacs 95% of time but still may use vim in some quick sys-files edits
stow vim nvim # theme yain vim-gruvbox-git # neovim yain neovim neovim-symlinks nvimpager neovide # vim plugins curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
3. system
Lower-level optional tweaks and packages
3.1. boot
I’m currently using refind for dual boot of windows+arch
pacin refind refind-install # https://github.com/EvanPurkhiser/rEFInd-minimal # for, but doesn't make blinking at load # https://github.com/anthon38/refind-black # tools # uefi shell pacin edk2-shell sudo cp /usr/share/edk2-shell/x64/Shell.efi /efi/shellx64.efi # memtest yain memtest86-efi sudo cp /usr/share/memtest86-efi/bootx64.efi /efi/EFI/tools/memtest86.efi # after fwupd installed sudo cp /usr/lib/fwupd/efi/fwupdx64.efi /efi/EFI/tools/ # gdisk # download https://sourceforge.net/projects/gptfdisk/files/gptfdisk/1.0.4/gdisk-binaries/gdisk-efi-1.0.4.zip/download sudo cp gdisk_x64.efi /efi/EFI/tools # todo - configure manual refind boot conf entries for each tool
3.2. firmware
pacin fwupd # this one is not required on arch for sure # sudo service fwupd start # display devices fwupdmgr get-devices fwupdmgr get-updates fwupdmgr update
3.3. kernel
# been experimenting with pacin linux-zen # edit ../EFI/refind/refind.conf # vmlinuz-zen, initramfs.., fallback
3.4. performance
# monitoring & info pacin btop htop s-tui dmidecode # sysinfo pacin inxi # power pacin powertop pacin upower # cpu pacin i7z i7z-mon cpupower cpupower-gui # this or throttled - conflicts pacin thermald # laptop pacin tlp tlp-rdw tlpui # for thinkpads pacin tpacpi-bat acpi_call yain tlpui-git # some more pacin acpid
disk&network tools
pacin smartmontools ethtool # netstat pacin net-tools
monitor traffic
# requires running daemon pacin vnstat sc-enable vnstat # by hosts pacin iftop # by processes pacin nethogs sudo nethogs # by devices, with live graph pacin nload sudo nload wlp2s0
sleep&hibernate
# uncomment /etc/systemd/logind.conf for suspend on lidclose etc # and then sc-kill -s HUP systemd-logind
disable system beep permanently (was needed on fedora)
rmmod pcspkr ; echo "blacklist pcspkr" >>/etc/modprobe.d/blacklist.conf
3.4.1. install on fedora
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm sudo dnf install http://repo.linrunner.de/fedora/tlp/repos/releases/tlp-release.fc$(rpm -E %fedora).noarch.rpm sudo dnf install akmod-tp_smapi akmod-acpi_call kernel-devel sudo dnf install tlp tlp-rdw sudo dnf install acpid sudo dnf install apmd # conflicts with throttled # sudo dnf install thermald sudo dnf install stress sudo dnf install s-tui # install lenovo_fix cpu throttle for thinkpad # https://github.com/erpalma/throttled sudo dnf copr enable adrake/throttled sudo dnf install -y throttled
i7z
sudo dnf install ncurses-devel #https://github.com/afontenot/i7z #sudo dnf install qt-devel
4. crypt
These are notes on how I setup and manage sensitive information and configs:
- passwords/credentials
- private-keys (ssh, gpg, etc)
- secure storage
pacin gnupg chmod 700 ~/.gnupg
4.1. crypt
# these has to be copied in secure way # - .cert (vpn certs) # - .gnupg # - .ssh # - .authinfo (not used anymore) # - .gitconfig (not, as far as ssh used and/or auth-info-pass + gh-auth populated in emacs) # - .aws (creds get from pass) # I used to have symlinks but switched to simply keeping a separate copies of each of these folders from rclone:crypt storage rclone copy crypt:<files> ~/<....> # rclone copy crypt: ~/Documents/crypt # ln -s ~/Documents/crypt/.aws ~/.aws # ln -s ~/Documents/crypt/.ssh ~/.ssh # ln -s ~/Documents/crypt/.gnupg ~/.gnupg chmod 600 ~/.ssh/id_rsa
4.2. test if gpg works
# list pub keys gpg -k # list priv keys gpg -K # encrypt echo "testsdf" > test.txt gpg -r twist522@gmail.com -e test.txt # decrypt gpg -d test.txt.gpg
4.3. pass
pacin pass pass init <gpg-key> pass git init pass git remote add origin git@github.com:thatwist/pass-store.git pacin browserpass pacin browserpass-chromium # experimental pacin pass-git-helper ln -s ~/configs/linux/.config/pass-git-helper/ ~/.config yain pass-update pass-import pass-extension-tail pip install keyring-pass yain passrofi-git # pinentry # https://github.com/ritze/pinentry-dmenu yain pinentry-rofi # otp pacin pass-otp pacin zbar # to scan qr code: # zbarimg ~/Documents/screenshots/2021-10-26-1635267895_screenshot_502x509.jpg pass otp append <pass-name>
4.4. access win bitlocked disk
yain dislocker-noruby linux-notes:how to mount bitlocked windows disk
5. desktop
I’m currently using xorg+i3+i3blocks
5.1. i3
pacin i3-wm dmenu xbacklight feh lm_sensors rofi scrot ln -s ~/configs/linux/.config/i3 ~/.config/ # ln -s ~/configs/linux/.config/i3status ~/.config/ ln -s ~/configs/linux/.config/rofi ~/.config/ ln -s ~/configs/linux/.xinitrc ~ ln -s ~/configs/linux/.xprofile ~ ln -s ~/configs/linux/.xsettingsd ~ # required by i3-match-windows.sh pacin xorg-xwininfo
i3 rename window (in-progess)
pacin xdotool wmctrl
5.2. i3blocks
pacin i3blocks # dependencies for some blocks modules pacin acpi mkdir ~/.config/i3blocks ln -s ~/configs/linux/.config/i3blocks/config ~/.config/i3blocks/config git clone https://github.com/thatwist/i3blocks-contrib ~/.config/i3blocks/i3blocks-contrib git clone https://github.com/Anachron/i3blocks ~/.config/i3blocks/i3blocks-anachron cd ~/.config/i3blocks/i3blocks-contrib git checkout origin/mine -b mine cd ~/.config/i3blocks/i3blocks-contrib/cpu_usage2 make
5.3. i3ipc
Used by Alt-tab script in ~/bin/
pacin python-i3ipc
5.4. clipboard
pacin xclip xsel
5.5. X key bindings
# some old xbind stuff here # ln -s ~/configs/linux/.xprofile ~/.xprofile # some more scaling terminal stuff and old urxvt configs here # ln -s ~/configs/linux/.Xresources ~/.Xresources
5.6. wayland & sway
swayfx # sway + additional visual fx seatd # dm alternative wlroots # compositor slurp # select a region of screen grim # make a screenshot swayshot # scripts and bindings for slurp+grim wayshot # grim alternative written in rust wf-recorder # screen recorder wl-clipboard swaybg swayidle swaylock swayimg # img editor waybar foot # terminal wmenu # dmenu wofi # rofi mako # dunst wdisplays xorg-xwayland # x compatibility
sudo run x apps under wayland
# sometimes it is required to run as sudo pacin xhost xhost local:root
manage xresources on wayland&sway
pacin xorg-xrdb # then xrdb -load # but what is enough is just to put everything into .Xdefaults
dmenu (but I’m using rofi now)
pacin bemenu yain j4-dmenu-desktop
cursors (wayland)
# pacin xcursor-simpleandsoft # TODO - requires some more configuration probably # seat seat0 xcursor_theme my_cursor_theme my_cursor_size
5.7. hyprland
hyprland hyprcursor hypridle hyprlock hyprshade pyprland hyprpaper # wallpapers xdg-desktop-portal-hyprland
5.8. scaling
# scaling stuff here, this will be initialized by agreety, but not by gtkgreeter (zsh,etc init order - should invistigate) ln -s ~/configs/linux/.profile ~/.profile # Xfont scaling - used by wayland as well ln -s ~/configs/linux/.Xdefaults ~/.Xdefaults
5.9. fonts & icons
pacin ttf-ibm-plex ttf-input ttf-victor-mono-nerd ln -s ~/configs/linux/.config/fontconfig ~/.config yain ttf-font-awesome yain awesome-terminal-fonts # todo - below fonts mess up everything # ln -s ~/configs/linux/.fonts ~/.fonts # adobe-source-code-pro-fonts (in conflict with google fonts) # unifont-fonts (bdg-unifont on arch) # fontawesome-fonts (awesome-terminal-fonts on arch, ttf-font-awesome) # ttf-dejavu # ttf-roboto # ttf-ibm-plex # aur:ttf-google-fonts-git # what is this font for? git clone https://github.com/stark/siji && cd siji ./install.sh # font cache reload fc-cache -fv # arial/timesnewroman/microsoft fonts pacin ttf-liberation # some symbolic/emoji fonts yain ttf-symbola # for emacs all-the-icons yain ttf-all-the-icons # nerd fonts mess up icons - do not install: +yay nerd-fonts-complete+
5.9.1. install ibm plex from sources
cd /usr/share/fonts/truetype sudo mkdir plex sudo cp /from/wherever/the-flex-font.ttf plex/. sudo fc-cache -fv
5.9.2. manage fonts
# before - `conda deactive` yain font-manager # this one is nice pacin fontforge # will produce png fontimage /home/twist/.fonts/IBMPlexMono-SemiBoldItalic.ttf # X pacin xorg-xfontsel xorg-xlsfonts xorg-xgd
5.9.3. mono fonts
https://rubjo.github.io/victor-mono/
pacin ttf-fira-mono ttf-fira-code ttf-hack # includes consolas yain ttf-vista-fonts
5.10. tray icons
yain hardcode-tray python -m pip install PyGObject pacin papirus-icon-theme # run on desktop start sudo -E hardcode-tray --conversion-tool RSVGConvert --size 22 --theme Papirus --apply
5.11. notifications
5.11.1. dunst
mkdir ~/.config/dunst sudo dnf install dunst sudo dnf install notification-daemon # TODO - copy your dunst conf systemctl restart --user dunst.service ln -s ~/configs/linux/.config/dunst ~/.config/ # journalctl errors: yay -S journalctl-desktop-notification-git # it's not for i3 # cp /usr/share/applications/journalctl-desktop-notification.desktop ~/.config/autostart/
5.11.2. mako (wayland)
pacin mako ln -s ~/configs/linux/.config/mako ~/.config
5.11.3. battery_low
# make sure bin folder is linked into home sudo ln -s /home/twist/configs/linux/usr/share/icons/hicolor/scalable/status/notification-battery-low.svg /usr/share/icons/hicolor/scalable/status/notification-battery-low.svg # this is to provide sound # ln -s /home/twist/configs/linux/.config/battery_low /home/twist/.config/ (sudo crontab -l 2>/dev/null; echo "*/5 * * * * /home/twist/bin/battery_low") | sudo crontab -
5.11.4. do not disturb on meetings
(sudo crontab -l 2>/dev/null; echo "* * * * * /home/twist/bin/auto_do_not_disturb.sh") | sudo crontab -
5.11.5. sounds
5.12. wallpaper
# ln -s ~/configs/linux/.fehbg ~/ # sudo ln -s /home/twist/configs/linux/usr/local/share/backgrounds /usr/local/share/ pacin nitrogen
5.13. minimalist greeter (instead of display manager) for sway
# add sway-start script before this one (see above) yain greetd # trying gtk greeter first yain greetd-gtkgreet # wayland+sway yain greetd-wlgreet # greetd configs sudo ln -s ~/configs/linux/etc/greetd/sway-conf /etc/greetd/sway-conf sudo chown -h greeter:greeter /etc/greetd/sway-conf # add greeter to video group sudo usermod -a -G video greeter # in /etc/greetd/config.toml # command = "agreety --cmd sway" # or # command = "sway --my-next-gpu-wont-be-nvidia --config /etc/greetd/sway-config" # no sway pacin cage command = "cage gtkgreet"
5.14. rofi
pacin rofi # use rofi for passmenu etc ln -s /usr/bin/rofi /usr/bin/dmenu # clipboard yain rofi-greenclip
5.15. screen/idle lock, suspend
# yain i3lock-fancy-rapid-git # yain i3lock-fancy-multimonitor yain i3lock-color yain xidlehook # pacin xorg-xautolock # then ln -s .config/systemd should place the service # this one is for lock after idle # lightdm doesn't work with logind idle events (eh) systemctl --user enable --now autolock.service # this one is for lock right after suspend sudo vim /etc/systemd/system/suspend@.service[Unit] Description=Lock the screen Before=sleep.target [Service] User=%I Type=forking Environment=DISPLAY=:0 ExecStart=/home/twist/bin/lock.sh [Install] WantedBy=sleep.target
if not lightdm – set IdleAction=lock in sudo vim /etc/systemd/logind.conf
lightdm lid close handlers – set HandleLidSwitch=suspend in /etc/systemd/logind.conf
betterlockscreen
# betterlockscreen -u ~/wallpaper/004.png
5.15.1. i3lock
I’m not using this anymore
BLANK='#00000000' CLEAR='#ffffff22' DEFAULT='#6c71c4aa' TEXT='#6c71c4ee' WRONG='#dc322fbb' VERIFYING='#d33682bb' i3lock \ --radius 80 \ --ring-width 5 \ --insidever-color=$CLEAR \ --ringver-color=$VERIFYING \ \ --insidewrong-color=$CLEAR \ --ringwrong-color=$WRONG \ \ --inside-color=$BLANK \ --ring-color=$DEFAULT \ --line-color=$BLANK \ --separator-color=$DEFAULT \ \ --verif-color=$TEXT \ --wrong-color=$TEXT \ --time-color=$TEXT \ --date-color=$TEXT \ --layout-color=$TEXT \ --keyhl-color=$WRONG \ --bshl-color=$WRONG \ \ --screen 1 \ --blur 5 \ --clock \ --indicator \ --time-str="%H:%M:%S" \ --date-str="%A, %m %Y" \ --keylayout 1 \
5.16. screensaver (stupid)
pacin xscreensaver
5.17. composite manager
# this on is old probably # pacin xcompmgr pacin picom # ui for configuring yain compton-conf ln -s ~/configs/linux/.config/picom.conf ~/.config/
5.18. prettifying and settings tools
stow gtk pacin variety nitrogen gtk-chtheme lxappearance yain qtconfig-qt4 # managed by lxappearance or by yourself ln -s configs/linux/.gtkrc-2.0 . ~/.config/gtk-3.0/settings.ini # but gsettings take higher priority pacin xsettingsd yain gruvbox-material-icon-theme-git yain gruvbox-material-gtk-theme-git yain volantes-cursors # gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs" gsettings set org.gnome.desktop.interface cursor-theme "volantes_cursors" gsettings set org.gnome.desktop.interface gtk-theme "Gruvbox-Material-Dark" gsettings set org.gnome.desktop.wm.preferences theme "Gruvbox-Material-Dark" gsettings set org.gnome.desktop.interface icon-theme "Gruvbox-Material-Dark" yain qt5ct qt5-styleplugins # c'mon lets use some reasonable ui to manage this configs pacin xfce4-settings # worth looking into - manjaro i3 configs https://github.com/Airblader/dotfiles-manjaro # option to show hidden files in gtk file dialog is in ln -s ~/configs/linux/.config/gtk-2.0 ~/.config
5.19. cursors
# to apply changed theme of cursors ln -s ~/configs/linux/.config/gtk-3.0 ~/.config # preview and change cursors git clone https://github.com/drizt/xcursor-viewer cmake . make sudo make install
5.20. display manager
- lightdm - pacin lightdm lightdm-webkit2-greeter - sc-enable lightdm
5.21. conky
pacin conky # pacin conky-manager ln -s ~/configs/linux/.config/conky ~/.config # remote server monitors https://github.com/fouad-j/monitoring-server-conky
5.22. screenfetch -t
pacin screenfetch
6. peripheral
6.1. keyboard & touch
6.1.1. on x11
# used by i3blocks # yain xkb-switch yain xkb-switch-i3 # tap to click, inversed scroll, keyboard, etc sudo ln -s /home/twist/configs/linux/etc/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf # not sure why I needed this one # sudo ln -s /home/twist/configs/linux/etc/X11/xorg.conf.d/20-intel-brightness.conf /etc/X11/xorg.conf.d/20-intel-brightness.conf sudo ln -s /home/twist/configs/linux/etc/X11/xorg.conf.d/00-keyboard.conf /etc/X11/xorg.conf.d/
6.1.2. gestures
yain libinput-gestures sudo gpasswd -a $USER input stow libinput-gestures libinput-gestures-setup stop service autostart start # restart system
6.1.3. on wayland-sway
configure in sway config
6.1.4. interceptions tools, caps2esc, space2meta, return2ctrl
cd ~ git clone https://gitlab.com/interception/linux/tools git clone https://gitlab.com/interception/linux/plugins/caps2esc git clone https://gitlab.com/interception/linux/plugins/space2meta # sudo make install # on arch - from aur yain interception-tools interception-space2meta interception-caps2esc # make sure to install yaml-cpp-0.6.2, 0.6.3 doesn't work with udevmon (on fedora) # on arch works with yaml-cpp-0.6.3-2 # aur # return2ctrl # TODO - put into my github git clone https://github.com/thatwist/interception-return2ctrl && \ cd interception-return2ctrl && rm -rf build && mkdir build && cd build && cmake .. && make && sudo make install # add service - this one is redundant, udevmon is already there on arch # sudo cp /home/twist/configs/linux/usr/lib/systemd/system/udevmon.service /usr/lib/systemd/system/ sudo cp /home/twist/configs/linux/etc/udevmon.yaml /etc/ sudo systemctl enable --now udevmon
6.1.5. screen capture on sway
yain swayshot wf-recorder-git pacin grim slurp wl-clipboard wf-recorder
6.1.6. screenkey with slop
dnfi screenkey pygtk2 slop # usage: screenkey -p fixed -g $(slop -n -f '%g')
6.2. camera
# disable IR camera on Carbon # find camera usb port and cd into that dir lsusb cd /sys/bus/usb/devices/1-5 cat id{Vendor,Product} # disable it echo 0 > bConfigurationValue # basic app pacin xawtv
6.3. fingerprint
thinkpad x1 carbon gen6
yain python-validity pacin open-fprintd fprintd-enroll sudo validity-sensors-firmware
# factory reset: sudo systemctl stop python3-validity sudo validity-sensors-firmware sudo python3 /usr/share/python-validity/playground/factory-reset.py
ok, now setup pam:
/etc/pam.d/system-auth
/etc/pam.d/system-local-login
# this is to restrict finger enroll only to root # need to enable polkit and have gui agent (maybe not required) pacin lxqt-policykit
6.4. thunderbolt
pacin bolt # to authorize device boltctl authorize <uuid>
7. display & graphics
7.1. intel graphics
mesa # benchmarks and glx- utils mesa-demos
7.2. nvidia gpu
# reload kernel modules - needed after nvidia update? # sudo mkinitcpio -P pacin nvidia nvidia-settings nvidia-prime # opengl pacin nvidia-utils # opengl multilib (for steam), version 4 (otherwise it uses mesa opengl version3) pacin lib32-nvidia-utils # benchmarks yain unigine-heaven unigine-superposition # manual load sudo modprobe nvidia nvidia-modprobe # info lspci -vnnn | grep 'VGA' lspci -k | grep -A 2 -E "(VGA|3D)" nvidia-smi sudo lsof /dev/nvidia* xrandr --listproviders # card in use glxinfo|egrep "OpenGL vendor|OpenGL renderer" glxheads
7.3. autoxrandr
pacin autorandr xrandr --output HDMI1 --auto --left-of eDP1 # ready config # ln -s ~/configs/linux/.config/autorandr/ ~/.config/ # to generate autorandr --save external
7.4. backlight & brightness
# adjust screen backlight pacin light # allow to run without sudo (this may break after package update, by default light should work as is becuase it install udev rules but it didn't) sudo chmod +s /usr/bin/light
7.5. redshift
# adjust screen brightness and warmness pacin redshift
at /etc/geoclue
check:
/usr/lib/geoclue-2.0/demos/agent
/usr/lib/geoclue-2.0/demos/where-am-i
service
7.6. manage displays on wayland
yain wdisplays
7.7. screen sharing on wayland
yain xdg_desktop_portal_wlr # then you need XDG_CURRENT_DESKTOP=sway in .profile and MOZ_ENABLE_WAYLAND=1 yain pipewire # in chromium, enable webrtc setting for pipewire: chrome://flags/#enable-webrtc-pipewire-capturer # check if pipewire running ok systemctl --user status pipewire.socket systemctl --user status pipewire.service
8. disks & files
8.1. disks
# daemon for management of disks and media using dbus pacin udisks2 # automount usb media, there is exec in swayconf to start it in tray pacin udiskie # trash bin trash-cli # backup yain timeshift # disk free pacin duf
8.2. nemo
pacin nemo
8.3. ranger
pacin ranger # if from scratch # ranger --copy-config=rc,rifle # own config ln -s ~/configs/linux/.config/ranger ~/.config/ # add image preview in kitty support python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow # to fix yank in X, dirty fix to remove wayland clipboard pacrem wl-clipboard # highlights pacin python-prompt_toolkit pacin python-pygments pacin ffmpegthumbnailer sudo python -m pip install xlsx2csv # yain perl-xls2csv # below works pacin catdoc yain pandoc-bin # for image preview pacin w3m
8.4. dirvish
pacin exa pacin ffmpegthumbnailer yain epub-thumbnailer-git yain mediainfo
8.5. dropbox
# dnf: dropbox - rpm nautilius yain dropbox dropbox-cli # required by install daemon to verify signatures pacin python3-pgp # install daemon dropbox-cli start -i # prevent auto-updates rm -rf ~/.dropbox-dist install -dm0 ~/.dropbox-dist # autostart # (on boot) systemctl edit dropbox@username # (on login) DISPLAY should be already imported but it's not systemctl --user edit dropbox# config [Service] Environment=DISPLAY=:0 # empty override for ExecStart, otherwise systemc compains ExecStart=
8.6. rclone
pacin rclone ln -s ~/configs/linux/.config/rclone ~/.config
8.7. office
pacin libreoffice-fresh libreoffice-fresh-uk
8.8. gdrive
# not using it # go get -u github.com/odeke-em/drive/cmd/drive
8.8.1. google-drive-ocamlfuse
yain google-drive-ocamlfuse-opam
- automount (fstab)
/usr/bin/gdfuse +x
#!/bin/bash su $USERNAME -l -c "google-drive-ocamlfuse -label $1 $*" exit 0
etc/fstab
gdfuse#default /home/$USERNAME/gdrive fuse uid=1000,gid=1000,allow_other,user,_netdev 0 0
- automount (systemd)
sudo vi /etc/systemd/system/google-drive.service
[Unit] Description=FUSE filesystem over Google Drive After=network.target [Service] User=twist Group=twist ExecStart=/home/twist/.opam/default/bin/google-drive-ocamlfuse -label default /home/twist/mnt/drive ExecStop=fusermount -u /home/twist/mnt/drive Restart=always Type=forking [Install] WantedBy=multi-user.target Alias=google-drive.servicesudo systemctl daemon-reload sudo systemctl start google-drive
8.8.2. gvfs and files-mngr integration
pacin gvfs-goa gvfs-google gnome-online-accounts
8.8.3. rclone
rclone mount drive:/ mnt/drive
8.9. android mount&files
pacin mtpfs mtp-detect pacin android-file-transfer aft-mtp-mount ~/mnt # easy aft-mtp-cli # below - I'm not sure if needed sudo su echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"18d1\", ATTR{idProduct}==\"4ee1\", MODE=\"0666\"" >> /etc/udev/rules.d/51-android.rules sc-restart udevmon sc-restart systemd-udevd # ## # gnome vfs integration pacin gvfs-mtp # tramp emacs - adb pacin android-tools
8.10. pdf & djvu
pacin poppler # pacin zathura zathura-pdf-mupdf djvulibre # this one better # pacin epdfview # this pacin xreader
8.11. latex
# required to export org into pdf pacin texlive-core # this one is for emacs and auctex? pacin okular # cyrillic pacin texlive-langcyrillic pacin texlive-latexextra
8.12. books
sudo pacman -S calibre
8.13. mime
# mime yain lsdesktopf yain selectdefaultapplication-git # mime fix skype open octetstream sudo rm /usr/share/applications/skypeforlinux-share.desktop
9. multimedia
9.1. audio
pacin alsa-utils pacin mpd pacin pavucontrol pulseaudio-alsa pulseaudio-bluetooth /etc/pulse/default.pa # automatically switch to newly-connected devices load-module module-switch-on-connect # EXPERIMENTAL: update for shorter name for i3blocks pacmd 'update-sink-proplist alsa_output.pci-0000_00_1f.3.analog-stereo device.description="Built-in Audio"' pacin pulseaudio-equalizer # used by emacs google-translate pacin mplayer # stream music pacin youtube-dl mpd mpc ln -s ~/configs/linux/.config/mpd ~/.config/mpd cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf # split mp3 pacin mpgtx yain audio-recorder
9.2. issue with mic not detected on startup (only detected after in-out of headphones)
# as per https://newbedev.com/microphone-not-working-on-archlinux # we can manually load module load-module module-alsa-source device=hw:0,0 # although it had to be loaded by udev setting
9.3. music
browser-playerctl pacin playerctl # yain youtube-music-bin chrome://flags/#hardware-media-key-handling # to download youtube music yt-dlp --ignore-errors --format bestaudio --extract-audio --audio-format mp3 --audio-quality 160K --output "%(title)s.%(ext)s" --yes-playlist '<YouTube playlist URL>' # yain soundux museeks # vlc skins # https://www.videolan.org/vlc/skins.php # but it is better just to configure qt5 interface appearance (see 'desktop/qt5 appearance') # set vlc interface to 'gtk2' after installing qt5 stuff
9.4. bluetooth
pacin bluez bluez-utils blueman
enable bluetooth.service
/etc/bluetooth/main.conf
9.4.1. how to connect bluetooth headset?
power off # (optionally) sudo btmgmt ssp off untrust .. remove .. power on agent off default-agent agent on scan on trust .. pair .. pulseaudio -k [add module switch-on-connect into /etc/pulse/default.pa] change mic priority in sudo vim /usr/share/pulseaudio/alsa-mixer/paths/analog-input-headset-mic.conf (98) pulseaudio --start connect ..
9.5. codecs
sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-ugly gstreamer1-plugins-bad-free gstreamer1-plugins-bad-free gstreamer1-plugins-bad-freeworld gstreamer1-plugins-bad-free-extras ffmpeg sudo dnf group upgrade --with-optional Multimedia sudo dnf install vlc
9.6. video
# video convert sudo dnf install HandBrake-gui # media player pacin mpv # and better ui for mpv yain mpv-uosc-git
9.7. images
# pacin sxiv # # gallery? didn't work for me # pacin nomacs # # manage photos # pacin shotwell # # thumbnails # pacin raw-thumbnailer # pacin tumbler libraw # yain ufraw-thumbnailer # this one is better yain qimgv # if there is a problem with qt versions ("cannot mix incompatible qt library"): yay -S qt5-styleplugins
9.8. drive&photos
gphotos-uploader-cli
9.9. graphics editing
pacin inkscape
9.10. camera
pacin libgphoto2 gphoto2 # fuse yain gphotofs # frontend (old) yain gtkam # for gvfs file manager pacin gvfs-gphoto2 scu-enable-now gvfs-gphoto2-volume-monitor.service # photo edit pacin darktable gimp # failed to build yain rawstudio
9.10.1. control from computer
https://medium.com/nerdery/dslr-webcam-setup-for-linux-9b6d1b79ae22
https://www.crackedthecode.co/how-to-use-your-dslr-as-a-webcam-in-linux/
# need to test yain entangle # or pacin dkms linux-headers pacin v4l-utils v4l2loopback-dkms ffmpeg sudo modprobe v4l2loopback exclusive_caps=1 max_buffers=2 # sudo vim /etc/modules-load.d/dslr-webcam.conf dslr-webcam # sudo vim /etc/modprobe.d/dslr-webcam.conf alias dslr-webcam v4l2loopback options v4l2loopback exclusive_caps=1 max_buffers=2 # test (open lens first) gphoto2 --capture-image-and-download # make sure /dev/video4 gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video4 # with gpu accel gphoto2 --stdout --capture-movie | ffmpeg -hwaccel nvdec -c:v mjpeg_cuvid -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video4 # the capture in vlc, but that didn't work for me # for android - to use it as a webcam (haven't tested) yain -i v4l2loopback-dc-dkms
9.11. video
# video edit pacin openshot
9.12. daw
yain reaper-bin
10. apps
10.1. msgs
10.1.1. zoom
yain zoom # hidpi QT_SCALE_FACTOR=2 zoom
10.1.2. slack
yain slack-desktop # hidpi # in desktop entry: Exec=env GDK_SCALE=1 GDK_DPI_SCALE=1 /usr/bin/slack -s --force-device-scale-factor=1.5 %U
10.1.3. others
yain teamviewer yain viber
10.1.4. telegram
pacin telegram-desktop # hidpi - in settings 150% # for emacs telega yay -S libtd libtgvoip
10.1.5. skype
yain skypeforlinux-stable-bin
10.1.6. pidgin
pacin pidgin sudo dnf install purple-facebook purple-skypeweb purple-telegram pidgin-libnotify sudo dnf install libsecret-devel purple-devel pidgin-devel libpurple-devel json-glib json-glib-devel # https://github.com/aebrahim/pidgin-gnome-keyring # https://github.com/sardemff7/purple-libnotify-plus#purple-libnotify # $HOME/.purple/smileys/ # https://github.com/stv0g/unicode-emoji # https://github.com/VxJasonxV/emoji-for-pidgin # whatsapp # https://fedora.pkgs.org/31/rpm-sphere-x86_64/whatsapp-purple-0.6-4.4.x86_64.rpm.html # download rpmsphere releases, rpm install, dnf install whatsapp-purple
10.1.7. yain ferdi
10.1.8. yain upwork
10.1.9. matrix
# command line pacin weechat # rich pacin element-desktop
- synapse
# https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/prerequisites.md # server # ssh keys echo "<pubkey>" > .ssh/authorized_keys # host # https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/ansible.md pacin ansible # https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook.md # install (reinstall) ansible-playbook -i inventory/hosts setup.yml --tags=setup-all # start/restart ansible-playbook -i inventory/hosts setup.yml --tags=start # check ansible-playbook -i inventory/hosts setup.yml --tags=self-check #https://federationtester.matrix.org/#matrix.ostapchuk.xyz # create user ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=twist522 password=<pass> admin=yes' --tags=register-user # maintenance
https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/faq.md#maintenance
see:how to increase swap
- slack
# how to (re)link bridge link xoxc d-cookie # (but remove last %% from that cookie value)
10.2. beancount & [h]ledger
pacin ledger gnuplot ln -s configs/linux/.ledgerrc . npm install -g ledgerble # nice analytics sudo npm install -g ledger-analytics # beancount sudo pip3 install beancount # hledger yain hledger-bin hledger-iadd-bin hledger-ui-bin hledger-web-bin # plots pacin gnuplot # ledger viz pacin graphviz
10.3. wine
# enable multilib - uncomment it in /etc/pacman.conf, then pacman -Sy pacin wine # for .net pacin wine-mono # hidpi winecfg => graphics - 192dpi
10.4. virtualbox
# dnf - virtualbox sudo wget https://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo -P /etc/yum.repos.d sudo dnf install -y VirtualBox
10.5. qemu
# faster tham vbox pacin qemu-full virt-manager
10.6. steam
# choose lib32-nvidia-utils (2) pacin steam # cmd version yain steamcmd
10.7. others
# mindmaps pacin freemind # flash yain flashplayer-standalone # calculator yain qalculate-gtk
10.8. jackd
pacin jack2 jackmeter jack_mixer jack_utils
10.9. accessibility
pacin festival festival-english festival-us # emacspeak pacin libotf extra/m17n-db extra/m17n-lib extra/tk git clone https://github.com/tvraman/emacspeak cd emacspeak ; make config ; make
(load-file "/home/twist/emacspeak/lisp/emacspeak-setup.el")
11. dev tools
11.1. scala
curl -s "https://get.sdkman.io" | bash sdk install scala
11.2. sbt
# sbt fedora curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo sudo dnf --enablerepo=bintray--sbt-rpm install -y sbt # sbt arch pacin sbt
11.3. java
sudo dnf install java-1.8.0-openjdk-devel sudo dnf install java-1.8.0-openjdk-src pacin jdk-openjdk pacin jdk8-openjdk # pick version archlinux-java
11.3.1. java8
#!/usr/bin/env bash wget --no-cookies \ --no-check-certificate \ --header "Cookie: oraclelicense=accept-securebackup-cookie" \ "http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-arm64-vfp-hflt.tar.gz" \ -O jdk-8u162-linux-arm64.tar.gz tar -xzvf jdk-8u162-linux-arm64.tar.gz sudo mkdir /usr/lib/jvm sudo mv ./jdk1.8* /usr/lib/jvm/jdk1.8.0 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0/bin/java" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0/bin/javac" 1 sudo chmod a+x /usr/bin/java sudo chmod a+x /usr/bin/javac echo 'JAVA_HOME="/usr/lib/jvm/jdk1.8.0"' | sudo tee -a /etc/environment > /dev/null && source /etc/environment && echo $JAVA_HOME sudo rm jdk-8*
11.4. gradle
pacin gradle
11.5. python
pacin python python-pip pyenv pip install virtualenv
11.5.1. conda
https://docs.conda.io/en/latest/miniconda.html conda config --set changeps1 False # pip install conda # what is this?
11.5.2. pip
pip install pyspark pandas numpy sklearn matplotlib jupyter jupyterlab notebook
11.5.3. libs
conda install Pillow
11.6. jupyter
conda install sparkmagic conda run jupyter nbextension enable --py --sys-prefix widgetsnbextension conda run jupyter labextension install "@jupyter-widgets/jupyterlab-manager" # to fix autocomplete conda install jedi==0.17.2
11.7. npm
# fedora sudo dnf install -y gcc-c++ make curl -sL https://rpm.nodesource.com/setup_12.x | sudo -E bash - sudo dnf install nodejs # arch pacin nodejs npm # for global access installs https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
11.8. other dev tools
pacin maven # ag code searcher pacin the_silver_searcher # ripgrep code searcher pacin ripgrep # fzf pacin fzf # find pacin fd # zoxide - aka fast 'cd' pacin zoxide # golang pacin go # highlight in ranger (and other places) pacin highlight # sqlworkbench yain sql-workbench # dbeaver pacin dbeaver # rsync pacin rsync # aws pacin aws-cli pip install aws-shell # required for live preview of markdown in emacs yain multimarkdown # redis-cli pacin redis # mysql pacin mariadb # spark yain apache-spark # postgre pacin postgresql # presto yay presto # jupyter sudo pip install jupyter sudo pip install notebook # plantuml/emacs yain plantuml # github pacin github-cli
11.9. reveal.js used by org-reveal
# git clone https://github.com/hakimel/reveal.js yain reveal-md npm i puppeteer
11.10. lsp
11.10.1. js
sudo npm i -g vscode-json-languageserver sudo npm i -g typescript-language-server sudo npm i -g typescript
11.10.2. py
# the below one is newer # sudo pip install 'python-language-server[all]' pacin python-lsp-server
11.10.3. others
sudo npm install -g yaml-language-server sudo npm install -g bash-language-server sudo npm install -g dockerfile-language-server-nodejs sudo npm install -g vscode-css-languageserver-bin sudo npm install -g vscode-html-languageserver-bin # php sudo npm install -g intelephense
11.10.4. c++/c
pacin ccls
11.11. docker
# arch pacin docker docker-compose # fedora sudo dnf -y install dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable docker.service sudo systemctl start docker.service sudo groupadd docker sudo usermod -aG docker $USER newgrp docker # docker login yain docker-credential-pass
11.12. boxes
pacin distrobox xhost +SI:localuser:$USER # this is required by host-spawn to run host execs from inside containers pacin flatpak
11.13. lombok for lsp
cd ~ curl -O -J -L https://projectlombok.org/downloads/lombok.jar mkdir lombok mv lombok.jar lombok/
11.14. scala metals
curl -Lo coursier https://git.io/coursier-cli chmod +x coursier ./coursier bootstrap org.scalameta:metals_2.12:0.10.0 -r bintray:scalacenter/releases -r sonatype:snapshots -f --java-opt -Xss4m --java-opt -Xms100m --java-opt -Dmetals.client=emacs --java-opt -Xmx2g --java-opt -XX:+UseG1GC --java-opt -XX:+UseStringDeduplication --java-opt -Dmetals.status-bar=off --java-opt -Dmetals.icons=unicode --java-opt -Dmetals.slow-task=status-bar -o /usr/local/bin/metals-emacs -f # windows coursier bootstrap org.scalameta:metals_2.12:0.10.5 -r "bintray:scalacenter/releases" -r "sonatype:snapshots" -f --java-opt "-Xss4m" --java-opt "-Xms100m" --java-opt "-Dmetals.client=emacs" --java-opt "-Xmx2g" --java-opt "-XX:+UseG1GC" --java-opt "-XX:+UseStringDeduplication" --java-opt "-Dmetals.status-bar=off" --java-opt "-Dmetals.icons=unicode" --java-opt "-Dmetals.slow-task=status-bar" -o C:\Users\Admin\AppData\Local\Coursier\data\bin\metals # + fix COURSIER_CACHE=C:\Users\Admin\AppData\Local\Coursier\cache
11.15. kafkacat
yain kafkacat
11.16. k8s
pacin helm
11.17. spell-check
# used by M-$ in emacs pacin aspell-en
11.18. sql
yay -S sqls go get github.com/mjibson/sqlfmt gem install sqlint
11.19. s3 mount
sudo pacman -S s3fs-fuse # faster yain goofys-bin
11.20. ftp
pacin curlftpfs
11.21. android
yay -S android-sdk-cmdline-tools-latest android-sdk-platform-tools android-sdk-build-tools yay -S android-emulator yay -S flutter yay -S android-studio # you may need to fix /opt/flutter permissions first see linux-notes:how to add user to writable group flutter doctor flutter doctor --android-licenses # you may need to set android-auto with enable-usb-logging on android device connected flutter devices flutter config --enable-linux-desktop
11.22. android
11.22.1. emulation
yain android-sdk yain android-x86-system-image-28 sudo avdmanager create avd -n MyWhatsAppVM -k "system-images;android-28;google_apis_playstore;x86" # sdkmanager --install "system-images;android-28;google_apis_playstore;x86" sudo avdmanager create avd -n MyVM28 -k "system-images;android-28;google_apis_playstore;x86" emulator -show-kernel -no-boot-anim -avd MyVM28 -no-audio -camera-back webcam0 -verbose
11.22.2. anbox
linux-zen
https://wiki.archlinux.org/title/Anbox#Loading_the_kernel_modules
yain anbox-git yain anbox-image-gapps-rooted # apps: apkmirror.com