# Bare Git Repository - - StreakyCobra ## Starting from scratch ```sh 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: ```sh git clone --bare $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`: ```config fetch = +refs/heads/*:refs/remotes/origin/* ``` ## Install into `/etc/skel` ```sh 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 ```sh lazygit --git-dir=$HOME/.dotfiles --work-tree=$HOME ``` # Install remotes as subtree - - Create an alias for remote repository - `dotfiles remote add ` - 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 ~ # Every-day Tools Recommended installation order: - System Config - [Debian packages](#debian) - Qubes proxy scripts (TODO) - dotfiles (see above) - [ASDF](#asdf) & plugins - Newer Debian packages: `bin/versions_check` - [Fonts](#fonts) - [kitty](#kitty) — `st`? - [lazygit](#lazygit) - [nnn](#nnn) - [neovim](#neovim) ## Generic Tips ### Desktop Files See ### Github Patches From [stackoverflow](https://stackoverflow.com/questions/28484186/apply-github-commit-pull-request-as-a-patch). ```sh 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 - [SysRq](https://www.kicksecure.com/wiki/SysRq) ## Debian Packages {#debian} ```sh 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 {#asdf} `.zshrc` will install `asdf`. Make sure you have the required [system dependencies](https://github.com/pyenv/pyenv/wiki#suggested-build-environment) before installing/compiling Python. ```sh sudo apt install --no-install-recommends XXX asdf plugin add direnv asdf plugin add python cd ~/bin asdf current asdf install ``` ## Fonts {#fonts} - [JetBrains Mono](https://www.jetbrains.com/lp/mono/) - Install the files **without** “NL” (No Ligatures) in their names - [Nerd Fonts](https://www.nerdfonts.com/) - [Download](https://github.com/ryanoasis/nerd-fonts/tags) - JetBrainsMono.tar.xz - NerdFontsSymbolsOnly.tar.xz - [Cheat Sheet](https://www.nerdfonts.com/cheat-sheet) - ### in /opt/fonts `/etc/fonts/conf.d/00-opt.conf`: ```xml /opt/fonts ``` ### in $HOME/.fonts ```sh mv folder ~/.fonts fc-cache -fv ~/.fonts ``` See also [How to install and manage fonts on Linux](https://linuxconfig.org/how-to-install-and-manage-fonts-on-linux). ### in /opt/fonts `/etc/fonts/conf.d/00-opt.conf`: ```xml /opt/fonts ``` ```sh sudo mv folder /opt/fonts fc-cache -fv /opt/fonts ``` ## kitty {#kitty} - ### Dependencies - `JetBrains Mono` (without NL) - `NerdFontsSymbolsOnly` - Note: outside of kitty, it may be interesting to also install _JetBrains Mono_ **with** _NL_. - terminfo ```sh sudo apt install kitty-terminfo # OR: wget 'https://salsa.debian.org/debian/kitty/-/raw/debian/sid/terminfo/x/xterm-kitty ``` ### Install ```sh # 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 {#lazygit} ### Dependencies - git-delta - go language (when compiling) ```sh # debian testing & unstable: apt install git-delta ``` ### From Source ```sh 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 ```sh 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 ```sh 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. ```sh $ lazygit --version commit=, build date=, build source=unknown, version=unversioned, os=linux, arch=amd64, git version=2.43.0 ``` ## neovim {#neovim} ### Dependencies - kitty / NerdFont - libfuse2 - xsel ### Binary Nightly Release ```sh 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 ```sh flatpak install flathub io.neovim.nvim ``` ## nnn — n³ {#nnn} ### Dependencies - kitty / NerdFont - Archives Management: - bsdtar (`libarchive-tools`) supports _Zstd_ - [fuse-archive](https://github.com/google/fuse-archive) - `atool`: last release is from 2012 - - - Drag&Drop: - Trash: - `trash-cli` is a much better CLI-only solution! Compare the outputs of `trash-cli` and `gio trash --list`… - For `gio trash`, packages `libglib2.0` & `gvfs` are recommended. ### From source ```sh # 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 ```