First, fixing the weird things that annoy me. Ranging from things that don't work correctly by default to things that are straight up broken without some intervention.
Since I'm on Fedora, I enabled RPM Fusion. And I set up Flathub.
I then also did the multimedia steps the RMP Fusion site has. Apparently Fedora doesn't ship some media codecs you need to play a lot of videofiles. https://rpmfusion.org/Howto/Multimedia
At this point, update all the things!
sudo dnf update && sudo dnf upgrade
The audio was popping every time a sound starts playing similar to the sound you hear when you first plug in headphones.
To fix, I turned off power saving for the audio on my motherboard.
echo `options snd-hda-intel power_save=0` > /etc/modprobe.d/alsa-base.conf
There are 3 screens plugged into this computer:
- 2 PC monitors
- 1 TV
Either I use the 2 monitors, or the single TV. No matter what, it showed the login screen on the TV, even when it was off.
To fix it I deleted the ~/.config/monitors.xml
file.
Then set up my monitors with the graphical Gnome tool (right click on the desktop followed by Display Settings).
This created that file again. Then I made GDM (that's Gnome's login manager, in other words it's the screen with the password input when you boot) to use that file.
I copied the file that setting up the monitors created and made sure the gdm
user and group owned that file.
sudo cp -v ~/.config/monitors.xml /var/lib/gdm/.config/
sudo chown gdm:gdm /var/lib/gdm/.config/monitors.xml
Sadly, in Firefox my cursor went invisible if I dare to watch a YouTube video. So I fell into old habits and used Google Chrome.
But the text of tab titles was blurry.
In the browser I went to chrome://flags
and set the Preferred Ozone platform
to Wayland
.
Similar to how I installed build-essential
on WSL Ubuntu, Fedora needs some installed packages that are needed to build various pieces of software.
sudo dnf install make automake gcc gcc-c++ kernel-devel cmake
I noticed emojis don't display in the terminal (for instance the astronaut in astro.dev starter).
I set the specific font I use in the terminal to have a fallback to an emoji font is a glyph can not be displayed.
This is done by putting a file at ~/.config/fontconfig/fonts.conf
Help on the syntax in that file: https://fedoraproject.org/wiki/Fontconfig_packaging_tips
The specific syntax to use for the fallback (I used the nerdfont version if the jetbrainsmono font) https://blog.sebastian-daschner.com/entries/linux-terminal-font-alacritty-jetbrains-mono-emoji
Then force it to be applied with fc-cache --really-force
Test it by echoing a bunch of emojis in the terminal, most have color now (not that heart outline).
echo "♥❤️👍😍🙊🥱🥺✨✅🎊🏄".
This does not show combined emojis, but the parts that make them. The zero-width joiner unicode uses to combine emojis into new ones is still visible. An example is the astronaut emoji, instead of seeing an astronaut, you see the parts: "human,zwj,rocket": 🧑🚀
sudo dnf install git
Some default settings:
git config --global user.name "Nicky Meuleman"
git config --global user.email "[email protected]"
git config --global core.autocrlf input
git config --global init.defaultBranch main
sudo dnf install zsh
Change the default shell (bash
) to zsh
so it launches whenever you open the terminal.
chsh -s $(which zsh)
Install using the command they provide.
No manpage, so man starship
does not work.
See issue #2926
starship --help
works.
starship explain
is a handy tool that prints a quick summary of what every part of the current prompt is.
The starship
binary can generate shell completions.
Put the output for the specific shell in a file in the $fpath
starship completions zsh > $ZDIR/completions/_starship
Install using the command they provide.
Manpages are weird.
Cargo is under rustup man cargo
Trying to use it gives a usage hint that says:
USAGE:
rustup man [OPTIONS] <command>
But I have no idea what [OPTIONS] <command>
is, I only guessed cargo
.
Related: rust-lang/rustup#1729
Add completions to shell for both rustup
and cargo
: rustup help completions
rustup completions zsh > $ZDIR/completions/_rustup
rustup completions zsh cargo > $ZDIR/completions/_cargo
Install using the command they provide.
No manpage, so man fnm
does not work.
fnm --help
works.
A tl;dr is available: tldr fnm
The fnm
binary can generate shell completions.
Put the output for the specific shell in a file in the $fpath
fnm completions --shell=zsh > $ZDIR/completions/_fnm
https://github.com/junegunn/fzf
Installed from source. They have a handy script that does it for us, neat!
https://github.com/junegunn/fzf#using-git
No traditional completions so it does not fill in flags.
eg. when tabbing after fzf -
.
junegunn/fzf#3349
Fuzzy completion can be entered while typing a command pressing tax after the trigger sequence, which is "**" by default.
eg. vim **
and hitting tab will start a fuzzy search.
When a file is selected the "**" will be replaced with the path to that file.
You can start that fuzzy search off with a query by placing it before the trigger sequence before hitting tab. eg. vim potatoes**
starts fzf off with "potatoes" already entered.
https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh
You can also do this with hotkeys
https://github.com/junegunn/fzf#key-bindings-for-command-line
CTRL-t
does the almost same thing, it adds the selection to your prompt.
It does NOT start the fuzzy search off with what you already entered.
So if you did vim pota
, hit CTRL-t
and chose potatoes.txt
, your final prompt would be vim potapotatoes.txt
The fuzzy finder uses some vim motion keys to navigate. https://github.com/junegunn/fzf#using-the-finder
https://github.com/ajeetdsouza/zoxide
Installed from source.
- Clone repo and change directory into it
- Build for release with
cargo build --release
- Move the executable to a directory in
$PATH
cp target/release/zoxide $HOME/.local/bin/
- Move man page to its dedicated directory
cp -r man/ $HOME/.local/share/
- Move completions to a directory in
$fpath
cp contrib/completions/_zoxide $ZDIR/completions/_zoxide
Make sure to use the full name instead of the z
alias when using it for anything other than the base jumping functionality.
zoxide --help
works, but z --help
does not.
zoxide integrates with zsh-autocomplete
to show frecent (not a typo) directories when tabbing direcly after z
.
Pressing tab after a space triggers interactive completion (like you get when you use zi
)
eg. z thing
and then tabbing triggers the interactive searcher that uses fzf
with "thing" as query.
ajeetdsouza/zoxide#9 (comment)
I could download the release from github and install that via these instructions: https://github.com/jgm/pandoc/blob/main/INSTALL.md#linux
Instead I opted for convenience and installed a slightly older version with
sudo dnf install pandoc
sudo dnf install fd-find
The binary name is fd
, not fd-find
.
sudo dnf install just
The just
binary can generate shell completions.
Put the output for the specific shell in a file in the $fpath
just --completions zsh > $ZDIR/completions/_just
I previously used exa
, but that's unmaintained now.
https://github.com/eza-community/eza
Built from source.
- Clone repo and change directory into it
- Build for release with
cargo build --release
- Move the executable to a directory in
$PATH
cp target/release/eza $HOME/.local/bin/
- Build man pages with
just man
- Move man page to its dedicated directory
cp target/man/eza.1 $HOME/.local/share/man/man1/
cp target/man/eza_colors.5 $HOME/.local/share/man/man5/
cp target/man/eza_colors-explanation.5 $HOME/.local/share/man/man5/
- Move completions to a directory in
$fpath
- In my case
cp completions/zsh/_eza $ZDIR/completions/
- In my case
https://github.com/dbrgn/tealdeer
This tool accesses the community pages on https://tldr.sh/.
This is a rust version, the usual tldr
tool is written in nodejs.
Executable named tldr
sudo dnf install tealdeer
No manpage (but tldr
has a tldr
page! Hah!)
The website functions as those docs https://dbrgn.github.io/tealdeer/
https://github.com/sharkdp/bat
sudo dnf install bat
https://github.com/sharkdp/hyperfine
CLI benchmarking tool. Handy for quickly benchmarking some code without having to set up a proper benchmarking suite. (eg. using hyperfine instead of criterion
to quickly bench something in Rust)
sudo dnf install hyperfine
https://github.com/bootandy/dust
Built from source.
- Clone repo and change directory into it
- Build for release with
cargo build --release
- Move the executable to a directory in
$PATH
cp target/release/dust $HOME/.local/bin/
- Move man page to its dedicated directory
cp man-page/dust.1 $HOME/.local/share/man/man1/dust.1
- Move completions to a directory in
$fpath
cp _completions/_dust $ZDIR/completions/_dust
sudo sudo dnf install gh
after installing, authenticate with
gh auth login
These dotfiles also provide a shortcut (gh c
) to clone a github repo into a folder structure of OWNER/REPONAME.
Usage is either gh c owner/repo
or gh c repo-url
https://github.com/aristocratos/btop
sudo dnf install btop
No manpage. No shell completions.
https://github.com/BurntSushi/ripgrep
sudo dnf install ripgrep
https://github.com/XAMPPRocky/tokei
sudo dnf install tokei
No manpages.
No shell completions.
Removes node_modules/
in JS projects, target/
in Rust projects, and many more.
https://github.com/tbillington/kondo
Built from source.
- Clone repo and change directory into it
- Build for release with
cargo build --release
- Move the executable to a directory in
$PATH
cp target/release/kondo $HOME/.local/bin/
No manpages.
No shell completions.
An other terminal resource monitor because for some reason btop
does not tell you anything about your GPU.
This one is nicer anyway imo.
https://github.com/ClementTsang/bottom
Built from source.
The generation of manpages and shell completions is only performed when an env variale is set.
- Clone repo and change directory into it
- Build for release with
BTM_GENERATE=true cargo build --release --locked
- Move the executable to a directory in
$PATH
cp target/release/btm $HOME/.local/bin/
- Move man page to its dedicated directory
cp target/tmp/bottom/manpage/btm.1 $HOME/.local/share/man/man1/
- Move completions to a directory in
$fpath
cp target/tmp/bottom/completion/_btm $ZDIR/completions/
Something to differentiate terminal windows when I open up a bunch of clean ones. I didn't want to look for ASCII art, and a "fetch" script if fine, as long as it's fast.
https://github.com/Macchina-CLI/macchina
Installed from source.
- Clone repo and change directory into it
- Build for release with
cargo build --release
- The produced binary is quite huge, consider stripping it to reduce its size
strip target/release/macchina
- The produced binary is quite huge, consider stripping it to reduce its size
- Move the executable to a directory in
$PATH
cp target/release/macchina $HOME/.local/bin/
- Move man pages to its dedicated directory
cp doc/macchina.1 $HOME/.local/share/man/man1/
cp doc/macchina.7 $HOME/.local/share/man/man7/
No shell completions.
https://github.com/alacritty/alacritty
sudo sudo dnf install alacritty
This uses the catppuccin theme.
I cloned that repo and referred to a file in the .toml
config file.
https://github.com/celluloid-player/celluloid
Installed via flatpak:
flatpak install flathub io.github.celluloid_player.Celluloid
It's a frontend for mpv.
It supports some configuration files for mpv.
I linked the input.conf
file via preferences in the GUI to get the keybinds I am used to.
Somehow Fedora came without a clipboard tool? Used mainly to make neovim aware of the system clipboard.
sudo dnf install wl-clipboard
Neovim :checkhealth
recommended this.
It's a faster file watching tool, so it speeds up a lot of LSPs
sudo dnf fswatch
cargo install cargo-nextest --locked
cargo install tree-sitter-cli
Necessary because the treesitter grammar for LaTeX needs to be generated using the CLI-tool
https://github.com/Aloxaf/silicon/
Install dependencies:
sudo dnf install \
cmake \
expat-devel fontconfig-devel libxcb-devel \
freetype-devel libxml2-devel \
harfbuzz
Install with cargo
:
cargo install silicon
silicon
uses a lot of the same assets as bat
, so I am reusing the theme files.