# 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 $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 ``` ## 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 ``` # Install remotes as subtree - https://www.atlassian.com/git/tutorials/git-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 ~ # Install recent versions of applications ## Generic Tips ### Github Patches From [stackoverflow](https://stackoverflow.com/questions/28484186/apply-github-commit-pull-request-as-a-patch). ``` wget https://github.com/jesseduffield/lazygit/pull/2604.patch git apply --stat --apply 2604.patch ``` ## Fonts - [How to install and manage fonts on Linux](https://linuxconfig.org/how-to-install-and-manage-fonts-on-linux) - `mv folder ~/.fonts` - `fc-cache -fv ~/.fonts` - [JetBrains Mono](https://www.jetbrains.com/lp/mono/) - Install the files **without “NL”** (i.e No Ligatures) in their names - [Nerd Fonts](https://www.nerdfonts.com/) - [Download](https://github.com/ryanoasis/nerd-fonts/tags) - NerdFontsSymbolsOnly.tar.xz - [Cheat Sheet](https://www.nerdfonts.com/cheat-sheet) - https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/bin/scripts/test-fonts.sh ## kitty - https://sw.kovidgoyal.net/kitty/binary/ - Install `JetBrains Mono` (without NF) & `NerdFontsSymbolsOnly` fonts. - Note: outside of kitty, it may be interesting to also install _JetBrains Mono_ *with* _NF_. ``` sudo apt-get install kitty-terminfo (kitty --version && curl https://sw.kovidgoyal.net/kitty/changelog/ | html2text) | less sh ~/.config/kitty/installer.sh ``` **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 ### Binary Releases ``` 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]) ``` ### Go ``` go install github.com/jesseduffield/lazygit@latest ``` ### Manual ``` mkdir -p $HOME/dev_3rd/golang cd $HOME/dev_3rd/golang git clone https://github.com/jesseduffield/lazygit.git cd lazygit go install ``` ## neovim ### Dependencies - kitty / NerdFont - libfuse2 - xsel ### Binary Nightly Release ``` mkdir -p $HOME/.local/bin cd $HOME/.local/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 ``` ## nnn — n³ ### Dependencies - kitty / NerdFont - Archives Management: - bsdtar (`libarchive-tools`) supports _Zstd_ - [fuse-archive](https://github.com/google/fuse-archive) - `atool`: last release is from 2012 - https://github.com/solsticedhiver/atool2 - https://github.com/wummel/patool - Drag&Drop: URI=https://github.com/mwh/dragon - 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. ### Source Code of Latest Release ``` # Download archive & extract files URI=https://github.com/jarun/nnn xdg-open $URI/releases/latest ARCHIVE=$(echo $HOME/Downloads/*.gz(om[1])) && echo $ARCHIVE tar xf $ARCHIVE # Compile cd nnn*(om[1]) make clean sudo make O_GITSTATUS=1 O_NAMEFIRST=1 O_NERD=1 install # Copy plugins plugins/getplugs ```