9.8 KiB
Installation Tips
Recommended installation order:
- Debian packages
- dotfiles
- System Config
- Qubes proxy scripts
- ASDF & plugins
- Newer Debian packages
- Fonts
- kitty —
st
? - lazygit
- nnn
- neovim
- Install into
/etc/skel
(see dotfiles)
Generic Tips
Desktop Files
See https://specifications.freedesktop.org/desktop-entry-spec/latest/
GIT remotes as subtree
- https://www.atlassian.com/git/tutorials/git-subtree
- Create an alias for remote repository
dotfiles remote add <remote-name> <URL>
- Import remote as a single commit (squashed)
- `dotfiles subtree add --prefix --squash
- Note 1: Must be called from $HOME
- Note 2: Do not start with $HOME or ~
Github Patches
From stackoverflow.
wget https://github.com/jesseduffield/lazygit/pull/2604.patch
git apply --stat --apply 2604.patch
Qubes Internet Access
- In Basic, connect to
sys-firewall
; - In Firewall rules:
- check Limit outgoing connections;
- check Allow full access for 25 minutes.
Debian Packages
apt install --no-install-recommends \
aptitude \
curl fd-find fzf git grc ripgrep \
vim-nox vim-tiny- wget xdg-utils \
dpkg-divert --rename --divert /usr/bin/fd /usr/bin/fdfind
dpkg-divert --rename --divert /usr/share/man/man1/fd.1.gz \
/usr/share/man/man1/fdfind.1.gz
dpkg-divert --rename --divert /usr/share/zsh/vendor-completions/_rg \
/usr/share/zsh/vendor-completions/rg.zsh
# Installed by kicksecure
dpkg-divert --rename --divert /usr/share/zsh-autosuggestions/disabled \
/usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
dotfiles — Bare Git Repository
- https://www.atlassian.com/git/tutorials/dotfiles
- StreakyCobra
Starting from scratch
git init --bare $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
dotfiles config --local status.showUntrackedFiles no
Install onto a new system
The checkout
command is expected to fail with a message.
This is because your $HOME folder might already have some stock configuration
files which would be overwritten by Git.
The “BKDIR” part is a rough shortcut to move all the offending files
automatically to a backup folder:
git clone --bare <git-repo-url> $HOME/.dotfiles
export ALL_PROXY=127.0.0.1:8082
git clone --bare https://forge.chapril.org/michel_ouba/points.git $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
dotfiles config --local status.showUntrackedFiles no
BRANCH=main
BKDIR=".dotfiles-backup/";
dotfiles checkout ${BRANCH} 2>&1 | egrep "\s+" | awk {'print $1'} |
xargs -I{} sh -c "mkdir -p \$(dirname ${BKDIR}{}); mv -iv {} ${BKDIR}{}";
dotfiles checkout ${BRANCH}
for file in ${BKDIR%/}/*(D); {
ls -lh ${file} ./${file#${BKDIR}}; read;
vimdiff ${file} ./${file#${BKDIR}} }
When the fetch
configuration is not set, insert the following line in the
remote section of .dotfiles/config
:
fetch = +refs/heads/*:refs/remotes/origin/*
Install into /etc/skel
sudo mkdir -p /etc/skel/.dotfiles
sudo chown $(whoami) /etc/skel /etc/skel/.dotfiles
sudo chown $(whoami) -R /etc/skel/.config
git clone --bare $(dotfiles remote -v | head -1 | cut -f2 | cut -f1 -d' ') /etc/skel/.dotfiles
alias skelfiles='/usr/bin/git --git-dir=/etc/skel/.dotfiles --work-tree=/etc/skel'
skelfiles config --local status.showUntrackedFiles no
skelfiles checkout
Useful Commands
- List all tracked files (from CWD):
dotfiles ls-tree --name-only -rz main | xargs -0 $(whence lsd) -lU
Other Tools
lazygit --git-dir=$HOME/.dotfiles --work-tree=$HOME
System Config
- SysRq
sudo cp -aiv ~/.aptitude /root
Qubes proxy scripts
chmod +x $HOME/bin/*-proxy
export ALL_PROXY=127.0.0.1:8082
source ~/.zshrc
TODO: Insert random part in filenames.
ASDF & main plugins
.zshrc
will install asdf
.
Before installing/compiling Python, make sure you have the required system dependencies.
sudo apt install --no-install-recommends \
build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
asdf plugin add direnv
asdf install direnv latest
asdf direnv setup --version latest
asdf global direnv latest
asdf plugin add python
for Plugin in $(asdf plugin list); { echo $Plugin; asdf list $Plugin }
Newer Debian packages
cd ~/bin
asdf current
asdf local direnv latest
asdf install
direnv allow
python -m pip install -r requirements.txt
cd ~/Downloads
versions_check
wget-proxy https://...
dpkg -i *.deb
Fonts
-
- Choose files without “NL” (No Ligatures) in their names
-
- Download
- JetBrainsMono.tar.xz
- NerdFontsSymbolsOnly.tar.xz
- Cheat Sheet
- https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/bin/scripts/test-fonts.sh
- Download
in $HOME/.fonts
mv folder ~/.fonts
fc-cache -fv ~/.fonts
See also How to install and manage fonts on Linux.
in /opt/fonts
/etc/fonts/conf.d/00-opt.conf
:
<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/opt/fonts</dir>
</fontconfig>
sudo mkdir -p /opt/fonts
sudo mv folder /opt/fonts
sudo chown root:root -R /opt/fonts
fc-cache -fv /opt/fonts
kitty
Dependencies
JetBrains Mono
(without NL)NerdFontsSymbolsOnly
- Note: outside of kitty, it may be interesting to also install JetBrains Mono with NL.
- terminfo
sudo apt install kitty-terminfo
# OR:
wget 'https://salsa.debian.org/debian/kitty/-/raw/debian/sid/terminfo/x/xterm-kitty
Install
# Show installed version, debian package & changelog
(ls =kitty;
kitty --version;
apt show kitty;
curl https://sw.kovidgoyal.net/kitty/changelog/ | html2text) | less
# Debian package
sudo apt install kitty
# In $HOME
sh ~/.config/kitty/installer.sh
# In /opt/kitty.app
sudo sh ~/.config/kitty/installer.sh launch=n dest=/opt
sudo update-alternatives \
--install /usr/bin/x-terminal-emulator \
x-terminal-emulator /opt/kitty.app/bin/kitty 99
Note: Kitty prepends its bin folder to the path. So it is more coherent/simpler to copy this behaviour into Zsh.
lazygit
Dependencies
- git-delta
- go language (when compiling)
# debian testing & unstable:
apt install git-delta
From Source
mkdir -p $HOME/dev_3rd/golang
cd $HOME/dev_3rd/golang
git clone https://github.com/jesseduffield/lazygit.git
cd lazygit
path+=(/usr/lib/go-1.21/bin)
go install
Binary Releases
mkdir -p /opt/lazygit/bin
cd /opt/lazygit/bin
URI=https://api.github.com/repos/jesseduffield/lazygit
LOCATION=$(curl -s $URI/releases/latest \
| grep "browser_download_url.*Linux_x86_64" \
| awk '{ print $2 }' \
| sed 's/,$//' \
| sed 's/"//g')
echo $LOCATION
wget $LOCATION
tar xf *.tar.gz(om[1])
From Go Package
go install github.com/jesseduffield/lazygit@latest
export GOPATH=/opt/go && sudo mkdir -p $GOPATH
sudo -E go install github.com/jesseduffield/lazygit@latest
Problem: Commit ID, build date and version aren't set.
$ lazygit --version
commit=, build date=, build source=unknown, version=unversioned, os=linux, arch=amd64, git version=2.43.0
neovim
Dependencies
- kitty / NerdFont
- libfuse2
- xsel
Binary Nightly Release
mkdir -p $HOME/.local/bin
cd $HOME/.local/bin
# ---
mkdir -p /opt/neovim/bin
cd /opt/neovim/bin
curl -LO https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage
chmod u+x nvim.appimage
ln -sf nvim.appimage nvim
ln -sf nvim.appimage vi
cd $HOME
nvim --version
vi --version
flatpak
flatpak install flathub io.neovim.nvim
nnn — n³
Dependencies
-
kitty / NerdFont
-
Archives Management:
- bsdtar (
libarchive-tools
) supports Zstd - fuse-archive
atool
: last release is from 2012
- bsdtar (
-
Drag&Drop: https://github.com/mwh/dragon
-
Trash:
trash-cli
is a much better CLI-only solution! Compare the outputs oftrash-cli
andgio trash --list
… https://github.com/andreafrancia/trash-cli- For
gio trash
, packageslibglib2.0
&gvfs
are recommended.
From source
# From release
URI=https://github.com/jarun/nnn
xdg-open $URI/releases/latest
ARCHIVE=$(echo $HOME/Downloads/*.gz(om[1])) && echo $ARCHIVE
tar xf $ARCHIVE
# From repository
git clone https://github.com/jarun/nnn.git
# Compile
cd nnn*(om[1])
make clean
sudo make O_GITSTATUS=1 O_NAMEFIRST=1 O_NERD=1 install
sudo make PREFIX=/opt/nnn O_GITSTATUS=1 O_NAMEFIRST=1 O_NERD=1 install
sudo cp -v misc/auto-completion/zsh/* /usr/local/share/zsh/site-functions
sudo chmod a+r /usr/local/share/zsh/site-functions/*
# Plugins
mv -v ~/.config/nnn/plugins plugins_$(stat -c %Y ~/.config/nnn/plugins)
mkdir -p ~/.config/nnn
cp -av plugins ~/.config/nnn