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.
- 1 Overview and architecture.
- 2 The software I use. (coming soon)
- 3 The install process
- 4 Contribute.
- 5 Gallery. (coming soon)
1. Overview and architecture. [toc]
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:
- simply replace $HOME with whatever your personal space is called. One can issue
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:
- a blog post about bare repositories.
- a video from distrotube if you want to see the creation of such a repository step by step.
2. The software I use. [toc]
COMING SOON
Note
3. The install process. [toc]
- https://archlinux.org/download/
- https://wiki.archlinux.org/title/USB_flash_installation_medium
- https://wiki.archlinux.org/title/Iwd#iwctl
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:
- install Rust and
cargo
viarustup
bash> export CARGO_HOME=~/.local/share/cargo
bash> curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- install Nushell with
cargo
bash> cargo install nu
- enter Nushell
bash> nu
- install the dotfiles
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/*"
- install Nupm and a tool to manage Git repositories
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 assumenupm
andgm
have been brought into scope withuse nupmand
use nu-git-manager gmrespectively
- pull down repositories
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
}
}
- install Nushell packages
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
# in `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
# in `neovim/neovim`
git checkout v0.9.0
make CMAKE_BUILD_TYPE=Release
sudo make install
# in `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 thendiscord install --help
- settings > multitasking > 4 workspaces
- settings > keyboard > default layout to us
- edit
/etc/default/keyboard
with
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=
XKBOPTIONS=""
BACKSPACE="guess"
- settings > keyboard > bindings > custom >
- bye on
super + shift + q
:rio --command nu --env-config ~/.config/nushell/env.nu --commands "logout.nu --lock 'gnome-screensaver-command --lock'"
- terminal on
super + enter
:rio --command nu --commands "$env.SHELL = $nu.current-exe; tmux new-session -A -s (random uuid)"
- bye on
- disable settings > keyboard > bindings > windows > hide window on
super + h
- disable settings > keyboard > bindings > system > lock screen on
super + l
- settings > keyboard > bindings > navigation > move workspace left / right with
super + h / l
- settings > keyboard > bindings > navigation > move window to workspace left / right with
super + shift + h / l
- settings > keyboard > bindings > navigation > switch windows on
super + j
- settings > keyboard > bindings > navigation > switch windows directly on
super + k
- disable settings > power -> screen blank
- disable settings > power > automatic suspend
- run
gsettings set org.gnome.desktop.interface locate-pointer true
4. Contribute. [toc]
YOU can contribute to this project in the wonderfull world of linux, arch and configuration!
- if you like this overview, try to install the config and see what it looks like!
- if you like this config, please share it to whoever could be interested.
- if you stumble upon bugs, ideas, new amazing color palettes or alternatives,
- if you want to be part of the testers for my install script. do not hesitate to contact me, either via email, github issues or pull requests!
5. Gallery. [toc]
COMING SOON