The following document gives a high level overview of my linux config.
This particular config has been tested on ArchLinux only (last update on 22-02-20).
Thus, only pacman
and yay
have been used and tested as arch and AUR package managers respectively.
The reader is highly adviced to search the internet and in particular the ArchWiki, EVEN in NON arch-based systems!!
First, an overview of the repo is given in section 1.
The software I use and a link to the official doc are presented and linked in section 2.
In section 3, the automatic install script is presented.
Finally, ways to contribute to this project are put forward in section 4 for who is interested and a gallery of photos is presented in section 5,
to give an idea of the final rendering of the config.
If you want a quick brief of what dotfiles really are, I recommend this video of FireShip.
This repo has been created using a bare
repository, i.e. initialization has been done with git init --bare $HOME/.dotfiles
instead of the
usual git init
. This command creates a bare repository, meaning that there is no working directory inside it, only .git
files.
This is normal as bare repositories are not meant to host working files, but only track files inside the working directory.
This makes the process of tracking dotfiles much easier! There is no need anymore to copy files into the dotfiles repository, track them
and put them back where they should be using symlinks! A simple alias
of the form cfg='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
is enough to use git
on any file inside $HOME
.
Hence, the architecture of the files above is a perfect mirror, regarding tracked files only, of my system!
Notes:
echo $HOME
in a terminal to check this.If you want more information about bare git
repositories, you can check one of the following resources:
COMING SOON
Note
on Ubuntu, there are some requirements to install before anything else
# general
sudo apt install git cmake curl
# nushell
sudo apt install libssl-dev
# neovim
sudo apt install libtool-bin gettext
on ArchLinux
# minimal
sudo pacman -S openssl openssh vim git libxft cmake unzip xorg xorg-xinit bspwm sxhkd tmux qutebrowser xclip libnotify rofi slock dunst pinentry at-spi2-core gtk3 bluez bluez-utils cronie ranger
first of all, we will install Nushell to make our lives easier:
cargo
via rustup
bash> export CARGO_HOME=~/.local/share/cargo
bash> curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo
bash> cargo install nu
bash> nu
git clone --bare https://github.com/amtoine/dotfiles /tmp/dotfiles
alias cfg = ^git --git-dir /tmp/dotfiles --work-tree $nu.home-path
cfg reset --hard
cfg config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git clone https://github.com/nushell/nupm /tmp/nupm
git clone https://github.com/amtoine/nu-git-manager /tmp/nu-git-manager
use /tmp/nupm/nupm nupm install --path /tmp/nupm/ nupm install --path /tmp/nu-git-manager/
> **Note**
> in the following we assume `nupm` and `gm` have been brought into scope with
> ```nushell
> use nupm
> ```
> and
> ```nushell
> use nu-git-manager gm
> ```
> respectively
- pull down repositories
```nushell
const REPOS = [
[url, bare, fetch, push];
[git://git.suckless.org/st, false, git, git],
[https://github.com/amtoine/nu-git-manager, false, https, ssh],
[https://github.com/amtoine/dotfiles, true, https, ssh],
[https://github.com/amtoine/scripts, false, https, ssh],
[https://github.com/amtoine/tmux-sessionizer, false, https, ssh],
[https://github.com/neovim/neovim, false, https, https],
[https://github.com/nushell/nu_scripts, false, https, https],
[https://github.com/nushell/nupm, false, https, https],
[https://github.com/nushell/nushell, false, https, https],
]
$REPOS | each {|repo|
if $repo.bare {
gm clone $repo.url --fetch $repo.fetch --push $repo.push --bare
} else {
gm clone $repo.url --fetch $repo.fetch --push $repo.push
}
}
const PKGS = [
github.com/amtoine/nu-git-manager
github.com/amtoine/scripts/nu_scripts
github.com/amtoine/scripts/nu-logout
github.com/amtoine/tmux-sessionizer
github.com/nushell/nu_scripts
github.com/nushell/nupm
]
$PKGS | each {|pkg| nupm install --force --path (gm status | get root.path | path join $pkg) }
- install Nushell from source
cargo install --path (gm list --full-path | find "nushell/nushell" | get 0)
- install the ST terminal emulator
st/st
cp ~/.config/st/config.h . sudo make clean install
- install the Rio terminal emulator from source
cargo install --force --locked --git https://github.com/raphamorim/rio
- install the Alacritty terminal emulator from source
cargo install --force --locked --git https://github.com/alacritty/alacritty --rev cad0cbec
- install the Zellij terminal multiplexer
cargo install --locked zellij@0.38.0
- install Neovim from source
neovim/neovim
git checkout v0.9.0 make CMAKE_BUILD_TYPE=Release sudo make install
amtoine/kickstart.nvim
tk setup tk update
- install Nix
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
- install some more software
cargo install git-delta fd-find ripgrep sd sudo apt install gnome-screensaver gnome-shell-extensions tmux wl-clipboard bat
- enable bluetooth
systemctl enable bluetooth
- enable cron jobs
systemctl enable cronie
- install Discord with `use ~/.config/discord/install.nu *` and then `discord install --help`
## Ubuntu-specific instructions
- settings > multitasking > 4 workspaces
- settings > keyboard > default layout to us
- edit `/etc/default/keyboard` with
```bash
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=
XKBOPTIONS=""
BACKSPACE="guess"
super + shift + q
: rio --command nu --env-config ~/.config/nushell/env.nu --commands "logout.nu --lock 'gnome-screensaver-command --lock'"
super + enter
: rio --command nu --commands "$env.SHELL = $nu.current-exe; tmux new-session -A -s (random uuid)"
super + h
super + l
super + h / l
super + shift + h / l
super + j
super + k
gsettings set org.gnome.desktop.interface locate-pointer true
YOU can contribute to this project in the wonderfull world of linux, arch and configuration!
COMING SOON