codefastdieyoung
  • about
  • links
    • github
    • twitter
  • .config
    • .emacs.d
    • Linux setup
    • Windows setup
    • Emacs usage notes
    • :emacs: posts
    • :configuration: posts
codefastdieyoung
  • about
  • links
    • github
    • twitter
  • .config
    • .emacs.d
    • Linux setup
    • Windows setup
    • Emacs usage notes
    • :emacs: posts
    • :configuration: posts

Linux system setup

Home » Knowledge base » Linux system setup

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
    1. download through rpmfinder – emacs, emacs-common, emacs-filesystem
    2. remove –noautoremove above
    3. install using dnf install <file>
  • 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

input

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 -
  • swaynag-battery

    yain swaynag-battery
    ln -s ~/configs/linux/.config/systemd ~/.config

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

https://bigsoundbank.com/

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

auth sufficient pam_fprintd.so auth [success=2 default=ignore] pam_unix.so try_first_pass nullok -auth [success=1 default=ignore] pam_systemd_home.so

/etc/pam.d/system-local-login

auth sufficient pam_fprintd.so auth include system-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

url=https://location.services.mozilla.com/v1/geolocate?key=geoclue [redshift] allowed=true system=false users=

check:
/usr/lib/geoclue-2.0/demos/agent
/usr/lib/geoclue-2.0/demos/where-am-i

service

systemctl –user enable redshift.service systemctl –user start redshift.service systemctl –user restart redshift.service systemctl –user status redshift.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.service
    sudo 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

[Policy] AutoEnable=true

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
  • Twitter
  • Telegram
  • Email
  • RSS
© 2023 - made in ukraine