points/.README.md
2024-04-24 15:07:30 +02:00

8.3 KiB

Bare Git Repository

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

alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'

dotfiles config --local status.showUntrackedFiles no

BKDIR=".dotfiles-backup/";
dotfiles checkout 2>&1 | egrep "\s+" | awk {'print $1'} |
  xargs -I{} sh -c "mkdir -p \$(dirname ${BKDIR}{}); mv -iv {} ${BKDIR}{}";

dotfiles checkout

When the fetch configuration is not set, insert the following line in .dotfiles/config:

    fetch = +refs/heads/*:refs/remotes/origin/*

Install into /etc/skel

sudo mkdir -p /etc/skel/.dotfiles
sudo chown $(whoami) /etc/skel

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

Every-day Tools

Recommended installation order:

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.

System Config

Debian Packages

apt install curl fd-find fzf git grc ripgrep wget xdg-utils

dpkg-divert --divert /usr/bin/fd --rename /usr/bin/fdfind
dpkg-divert --divert /usr/share/man/man1/fd.1.gz --rename /usr/share/man/man1/fdfind.1.gz
dpkg-divert --divert /usr/share/zsh/vendor-completions/_rg --rename /usr/share/zsh/vendor-completions/rg.zsh

ASDF & main plugins

.zshrc will install asdf.

Make sure you have the required system dependencies before installing/compiling Python.

sudo apt install --no-install-recommends XXX

asdf plugin add direnv
asdf plugin add python
cd ~/bin
asdf current
asdf install

Fonts

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 mv folder /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

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