/config-2024-07-19

Linux configuration files

Primary LanguageShell

My Linux Config

This repository contains my personal configuration files when I want to setup a Linux environment.

Minimal Manual Action to Get Started

At a minimum, we need to manually install Task which will allow us to install the rest of the software stack.

Rust and go

You may have to install Rust and Go first.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

{ mkdir -p ~/opt && cd ~/opt && wget 'https://go.dev/dl/go1.22.5.linux-amd64.tar.gz' -O - | tar zx && mv go go-1.22.5; }

Task

Go Task - Documentation: Task is a task runner / build tool that aims to be simpler and easier to use than, for example, GNU Make. Go Task - GitHub: A task runner / simpler Make alternative written in Go.

env GOBIN=$HOME/.local/bin go install github.com/go-task/task/v3/cmd/task@latest

ChezMoi

ChezMoi - Documentation ChezMoi - GitHub: Manage your dotfiles across multiple diverse machines, securely.

env GOBIN=$HOME/.local/bin go install github.com/twpayne/chezmoi@latest

or

task -t taskfiles/go_essentials.yml chezmoi

Clone and Apply Chezmoi

chezmoi init --apply github:SamuelLarkin/dotfiles.git

CLI Tools

Favorites

These are my most used CLIs.

  • bat - GitHub: A cat(1) clone with syntax
  • delta - GitHub: A syntax-highlighting pager for git, diff, and grep output
  • fzf - GitHub: fzf is a general-purpose command-line fuzzy finder. Also available, a vim plugin for fzf.
  • fzf-tmux - GitHub: Starts fzf in a tmux pane.
  • gdu - go DiskUsage - GitHub: Pretty fast disk usage analyzer written in Go.
  • Glow - GitHub: Render markdown on the CLI, with pizzazz!
  • hexyl - GitHub: is a simple hex viewer for the terminal. It uses a colored output to distinguish different categories of bytes (NULL bytes, printable ASCII characters, ASCII whitespace characters, other ASCII characters and non-ASCII).
  • histo - GitHub: Histograms with a configurable number of buckets, and a terminal-friendly Display.
  • histogram.py - GitHub: Command line utilities for data analysis.
  • htop - GitHub: is a cross-platform interactive process viewer
  • hyperfine - GitHub: A command-line benchmarking tool
  • jless - GitHub: jless is a command-line JSON viewer. Use it as a replacement for whatever combination of less, jq, cat and your editor you currently use for viewing JSON files. It is written in Rust and can be installed as a single standalone binary. jless — a command-line JSON viewer
  • jq: jq is a lightweight and flexible command-line JSON processor
  • lazygit - GitHub: A simple terminal UI for git commands, written in Go with the gocui library.
  • lsd (LSDeluxe) - GitHub: This project is a rewrite of GNU ls with lot of added features like colors, icons, tree-view, more formatting options etc. The project is heavily inspired by the super colorls project.
  • ncdu: NCurses Disk Usage
  • parallel - GNU parallel: is a shell tool for executing jobs in parallel using one or more computers
  • rename - Cpan File::Rename
  • tabulate - GitHub: Pretty-print tabular data in Python, a library and a command-line utility.
  • tig - GitHub: text-mode interface for Git
  • tmux-fzf - GitHub: Use fzf to manage your tmux work environment!
  • tqdm - GitHub: Progress Bar.
  • ug/ugrep - GitHub: Search for anything in everything... ultra fast.
  • zoxide - GitHub: zoxide is a smarter cd command, inspired by z and autojump. It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes. zoxide works on all major shells. eval "$(zoxide init bash)"

All

  • asciigraph - GitHub: Go package to make lightweight ASCII line graphs ╭┈╯.
  • bat - GitHub: A cat(1) clone with syntax
  • bottom - GitHub: Another TUI based system monitor, this time in Rust
  • bpytop - GitHub: Linux/OSX/FreeBSD resource monitor
  • chezmoi - GitHub: Manage your dotfiles across multiple diverse machines, securely.
  • delta - GitHub: A syntax-highlighting pager for git, diff, and grep output
  • difftastic - GitHub: Difftastic is an experimental diff tool that compares files based on their syntax.
  • Diskonaut - GitHub: windirstat like for the CLI.
  • duf - GitHub: Disk Usage/Free Utility (Linux, BSD, macOS & Windows).
  • dust: du + rust = dust - GitHub: Like du but more intuitive.
  • Erdtree - GitHub: A bLazInGlY fAsT, simplified version of the ancient tree command which displays a colorful depth indented listing of files with their memory sizes adjacent.
  • exa - Documentation: modern replacement for ls
  • F2 - GitHub: F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!
  • fd - GitHub: is a program to find entries in your filesystem
  • forgit - GitHub: A utility tool powered by fzf for using git interactively.
  • fzf - GitHub: fzf is a general-purpose command-line fuzzy finder. Also available, a vim plugin for fzf.
  • fzf-git.sh - GitHub: bash and zsh key bindings for Git objects, powered by fzf.
  • fzf-tmux - GitHub: Starts fzf in a tmux pane.
  • gdu - go DiskUsage - GitHub: Pretty fast disk usage analyzer written in Go.
  • glances - GitHub: An eye on your system
  • Glow - GitHub: Render markdown on the CLI, with pizzazz!
  • gojq - GitHub: Pure Go implementation of jq. This is an implementation of jq command written in Go language. You can also embed gojq as a library to your Go products.
  • gotz - GitHub: gotz - a simple CLI timezone info tool.
  • hexyl - GitHub: is a simple hex viewer for the terminal. It uses a colored output to distinguish different categories of bytes (NULL bytes, printable ASCII characters, ASCII whitespace characters, other ASCII characters and non-ASCII).
  • histo - GitHub: Histograms with a configurable number of buckets, and a terminal-friendly Display.
  • histogram.py - GitHub: Command line utilities for data analysis.
  • hq - GitHub: Powerful HTML slicing and dicing at the command line.
  • htop - GitHub: is a cross-platform interactive process viewer
  • hyperfine - GitHub: A command-line benchmarking tool
  • jless - GitHub: jless is a command-line JSON viewer. Use it as a replacement for whatever combination of less, jq, cat and your editor you currently use for viewing JSON files. It is written in Rust and can be installed as a single standalone binary. jless — a command-line JSON viewer
  • jo - GitHub: JSON output from a shell.
  • jq: jq is a lightweight and flexible command-line JSON processor
  • lazydocker - GitHub: A simple terminal UI for both docker and docker-compose, written in Go with the gocui library.
  • lazygit - GitHub: A simple terminal UI for git commands, written in Go with the gocui library.
  • lf - GitHub: lf (as in "list files") is a terminal file manager written in Go with a heavy inspiration from ranger file manager.
  • lsd (LSDeluxe) - GitHub: This project is a rewrite of GNU ls with lot of added features like colors, icons, tree-view, more formatting options etc. The project is heavily inspired by the super colorls project.
  • Miller - GitHub: Miller is like awk, sed, cut, join, and sort for data formats such as CSV, TSV, JSON, JSON Lines, and positionally-indexed.
  • Navi - GitHub: An interactive cheatsheet tool for the command-line.
  • ncdu: NCurses Disk Usage
  • oxker - GitHub: A simple tui to view & control docker containers.
  • parallel - GNU parallel: is a shell tool for executing jobs in parallel using one or more computers
  • procs - GitHub: is a replacement for ps written in Rust
  • pv - GitHub: a terminal-based tool for monitoring the progress of data through a pipeline.
  • py-spy: py-spy: Sampling profiler for Python programs py-spy top -- python myprogram.py
  • Pyinstrument: Pyinstrument is a Python profiler.
  • rename - Cpan File::Rename
  • rg: ripgrep - GitHub: ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern
  • Rich CLI - GitHub: Rich-cli is a command line toolbox for fancy output in the terminal, built with Rich. Use the rich command to highlight a variety of file types in the terminal, with specialized rendering for Markdown and JSON files. Additionally you can markup and format text from the command line.
  • RnR - GitHub: RnR is a command-line tool to securely rename multiple files and directories that supports regular expressions.
  • runiq - GitHub: This project offers an efficient way (in both time and space) to filter duplicate entries (lines) from texual input.
  • starship - GitHub: ☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!
  • tabulate - GitHub: Pretty-print tabular data in Python, a library and a command-line utility.
  • termeter - GitHub: Visualize data in the terminal.
  • Termgraph - GitHub: A command-line tool that draws basic graphs in the terminal, written in Python. Termgraph – How To Draw basic graphs on Linux terminal - Blog.
  • termscp - GitHub: A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/S3.
  • tig - GitHub: text-mode interface for Git
  • tldr-pages - GitHub: The tldr-pages project is a collection of community-maintained help pages for command-line tools, that aims to be a simpler, more approachable complement to traditional man pages.
  • tmux-fzf - GitHub: Use fzf to manage your tmux work environment!
  • tmuxp - GitHub: tmuxp, tmux session manager.
  • tqdm - GitHub: Progress Bar.
  • ug/ugrep - GitHub: Search for anything in everything... ultra fast.
  • vifm - GitHub: Vim-like file manager
  • vivid - GitHub: vivid is a generator for the LS_COLORS environment variable that controls the colorized output of ls, tree, fd, bfs, dust and many other tools.
  • xonsh: XONSH is a Python-powered shell
  • xq - GitHub: Apply XPath expressions to XML, like jq does for JSONPath and JSON.
  • xsv - GitHub: xsv is a command line program for indexing, slicing, analyzing, splitting and joining CSV files. Commands should be simple, fast and composable.
  • yq in python - GitHub: yq: Command-line YAML/XML/TOML processor - jq wrapper for YAML, XML, TOML documents.
  • yq in go - GitHub: A lightweight and portable command-line YAML, JSON and XML processor. yq uses jq like syntax but works with yaml files as well as json and xml.
  • ytop - GitHub: Another TUI based system monitor, this time in Rust
  • zellij: A terminal workspace with batteries included.
  • zenith - GitHub: In terminal graphical metrics for your Xnix system written in Rust.
  • zoxide - GitHub: zoxide is a smarter cd command, inspired by z and autojump. It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes. zoxide works on all major shells. eval "$(zoxide init bash)"

Shells

  • elvish: Elvish is an expressive programming language and a versatile interactive shell, combined into one seamless package. It runs on Linux, BSDs, macOS and Windows.
  • elvish - GitHub: Elvish = Expressive Programming Language + Versatile Interactive Shell
  • fish - GitHub: the friendly interactive shell
  • nushell: A new type of shell with plugins.
  • nushell - GitHub: A new type of shell.
  • xonsh: XONSH is a Python-powered shell

Dropped

  • fz - GitHub: A shell plugin that seamlessly adds fuzzy search to tab completion of z, lets you easy to jump around among your historical directories
  • z - GitHub: jump around

delta

~/.gitconfig

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true  # use n and N to move between diff sections

[merge]
    conflictstyle = diff3

[diff]
    colorMoved = default

Things to Try

CLI Tools

  • Desed - GitHub: Demystify and debug your sed scripts, from comfort of your terminal.
  • artem - GitHub: artem is a small cli program written in rust to easily convert images to ascii art.
  • atuin - GitHub: Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. Additionally, it provides optional and fully encrypted synchronisation of your history between machines, via an Atuin server.
  • autoenv - GitHub: Directory-based environments
  • bfs - GitHub A breadth-first version of the UNIX find command.
  • direnv: Unclutter your .profile
  • fx - GitHub: Terminal JSON viewer
  • gitui - GitHub: GitUI provides you with the comfort of a git GUI but right in your terminal. Not as great as lazygit.
  • hoard - GitHub: command organizer tool to hoard all your precious commands.
  • jaq - GitHub: jaq is a clone of the JSON data processing tool jq. jaq aims to support a large subset of jq's syntax and operations.
  • joshuto - GitHub: ranger-like terminal file manager written in rust
  • jql - GitHub: A JSON Query Language CLI tool built with Rust.
  • ripgrep (rg) - GitHub: ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern
  • xq - GitHub: JQ reimplemented purely in Rust.
  • yazi - GitHub: 💥 Blazing fast terminal file manager written in Rust, based on async I/O.

Vim Plugins

Neovim

I'm debating if I should switch to Neovim or one of it's customization.

  • Neovim: Neovim is a Vim-fork focused on extensibility and usability
  • LazyVim: Neovim config for the lazy LazyVim
  • Lunarvim: 🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.
  • AstroNvim: AstroNvim is an aesthetic and feature-rich neovim config that is extensible and easy to use with a great set of plugins.
  • NvChad: Blazing fast Neovim config providing solid defaults and a beautiful UI, enhancing your neovim experience. NvChad
  • CosmicNvim: CosmicNvim is a lightweight and opinionated Neovim config for web development, specifically designed to provide a 💫 COSMIC programming experience!

Vim Plugins equivalent

vim neovim
vimgutter gitsigns
VCSVimDiff diffview.nvim
statusbar navic
tagbar symbols-outline, navbuddy, aerial, vista

Links