How I Remove Duplicate Lines From a File With awk

One of the repositories I maintain is a beginner’s GitHub repo. New developers can make their first pull request by adding their GitHub handle to a simple text file. When pull requests get merged into the master branch, they often contain duplicates. The file has more than 7,000 lines. Names are not sorted alphabetically. I needed a simple way to remove all duplicates lines from the file without sorting the lines.
Read more →

TIL: Pass Multiple Commands to Xargs

I’m using fd, an alternative to the Unix native find, to find a list of files and copy them to a different location, using xargs. On Unix, we use cp to copy the files, but the command is silent. I don’t know which files cp will copy. Maybe I could use echo to log the files? How can I pass multiple shell commands to xargs? Previous command: fd --changed-within 1hour -0 | xargs -I cp {} /new/location/ fd -0 --changed-within: find all files changed within a time frame, separate results by null character |: pipe previous command as stdin to the next command xargs -I cp {} /new/location/: takes the input from previous command (fd) and uses cp to copy the files; {} is a placeholder What does not work:
Read more →

TIL: How to Set Multiple GOPATHs

How to set multiple workspaces (GOPATH) A Go Workspace is how Go manages our source files, compiled binaries, and cached objects used for faster compilation later. It is typical, and also advised, to have only one Go Workspace, though it is possible to have multiple spaces. The GOPATH acts as the root folder of a workspace. 1 Why multiple workspaces? I’d like to install my global binaries into a central location.
Read more →

My Git Aliases And Abbreviations

As a developer, Git is one of the essential tools in my daily work. Today I want to share my git aliases and fish abbreviations that make working with Git more comfortable. In my ~/.gitconfig file: [alias] # Git Commit, and Push — in one step. cmp = "!f() { git commit -m \"$@\"; }; f" # NEW. new = "!f() { git cmp \"📦 NEW: $@\"; }; f" # IMPROVE.
Read more →

The Terminal Sparks Joy

The Terminal Sparks Joy
Today I realized that using tools like the terminal, Vim or Tmux “spark joy” for me. The term comes from Marie Kondo’s bestselling book about tidying up. It loosely translates from original Japanese to ”the feeling of excitement and pleasure”. I thoroughly enjoy using Unix and its tools. For me, it’s like a mini game where I can always learn something new and feel more productive. For example, you can be productive with Vim after a few days.
Read more →

TIL: How to Watch YouTube Videos With mpv and Keyboard Shortcuts

Distraction-free YouTube (and other videos) on your computer The free YouTube version has ads and suggestions what to watch. Those try to keep the user on YouTube’s website. Tons of useful videos exist. If you’re like me, you’ll soon fall into the rabbit hole and spend too much time on YouTube. Today I learned how to use a distraction-free method of watching YouTube with mpv and (optionally) Vimium.
Read more →

TIL: How to Replace Backslashes (grep, sed, ripgrep, sd, ruplacer)

Today I needed to remove backslashes from a number of files. I have yaml frontmatter that should look like this: tags: - React.js - JavaScript I had some files that had backslashes before the dash: tags: \- React.js \- JavaScript You can use Unix tools like grep or sed to search all files that match a pattern. Then you can replace that pattern. But you have to remember that a backslash is a special character.
Read more →

Friday Picks 079

Read more →

Friday Picks 076

Read more →

Friday Picks 072

Read more →

TIL About Adding a New Line to “git commit -m”

For Git messages I use git commit -m to add a headline to a git commit. So far, I’ve never used the detailed summary which you can add to a commit message. It was tooMuch of a hassle to open a text editor and add a detailed explanation. Today I learned that you can write a multi-line commit message with git commit -m. For example, in Bash: git commit -m 'my headline Here goes the detailed explanation of the commit ' Source:
Read more →

TIL How to Execute an External Command in Vim and Reload the File

Or: How To Pipe The Current Vim Buffer Through Unix Commands In this post I will show you how to run a shell command from within Vim, and immediately reload that file. The Problem I write a Go file in (Neo)Vim. I want to use the command gofmt to format my file. Running gofmt will change the contents of my file, so I’ll need to reload my Vim buffer.
Read more →

broot - the better ls

It’s become popular to rewrite classic command-line tools in Rust: Shell is the essential tool for every programmer. The more familiar you become with the available tools, the more efficient you can be with using your computer. Many Rust alternatives provide a modern, faster, and more user-friendly alternative. One of them is broot. What Is broot? broot is a combination of ls (for listing directory contents) and tree (for listing contents in a tree-like format).
Read more →

Spotify in the Terminal With spotify-tui and spotifyd

Spotify TUI is a Spotify client for the terminal, written in Rust. In conjuction with Spotifyd, a lighteight Unix daemon, you’ll get a fully-featured terminal application that connects to your Spotify Premium account. Install Spotifyd Installation There are pre-build libraries for different operating systems. For Arch, you can find several packages in the AUR. I use pulseaudio as my sound server, so I chose spotifyd-pulseaudio-git from the AUR: yay -S spotifyd-pulseaudio-git Installation takes a while.
Read more →

TIL About Finding the Path Environment Variables With Fish Shell

The fish_user_paths are the alternative for $PATH in fish shell. But how do I find out, what’s in my fish path? echo $fish_user_paths | tr " " "\n" | nl This gives you an array of path environment variables. You can erase a path with set -e fish_user_paths[1]. Be aware that the array is mutable, so if you delete an item, another one will take its place. Further Reading How to remove a path from $PATH variable in fish?
Read more →

TIL: Linux - Delete Files Older Than X Days

Today I learned that you can pass a date argument to find. I wanted to delete all files that were older than 10 days using the command line. We can use find which ships with every Linux distribution. find . -type f -mtime +20 Find all files that are older than 20 days in the current directory. Now let’s delete them: find . -type f -mtime +20 -exec rm -f {} \; I use fd as an alternative to find:
Read more →

Friday Picks 040

Read more →

TIL: How to Search and Replace Text in All Files With rg and sed

Read more →

TIL: How to Run Your Scripts From Everywhere

I’ve been writing a few bash scripts and some Nim command line utilities. You can run a script from the folder which contains the script. Here’s an example file structure: ~/bin/ ├── git-reset-author.sh └── readme_template When I’m inside the ~/bin directory, I can type into the terminal: readme_template. But what if I want to navigate to a different folder on my machine and run the script from that location? fish: unknown command readme_template The shell doesn’t find the program.
Read more →

How I Manage My SSH Keys

Setup SSH keys with Manjaro i3 and keychain The following blog post details how I setup my SSH keys. I always forget some of the moving parts. Then I have to painstakingly debug why ssh-add doesn’t remember my keys or why ssh-agent doesn’t work. Create ssh-keys with ssh-keygen. cd ~/.ssh ssh-keygen -t ed25519 -o -a 100 Make sure to save both public and private key inside ~/.
Read more →

Suspend Vim to the Background or What Is Linux Job Control

Vim has an inbuilt terminal, which you can start with :terminal. That means that you don’t have to leave your Vim editor to run commands in the shell. Sometimes, it’s still useful. If you quickly want to switch to your shell, suspend the Vim editor with Ctrl+z. That sends the process into the background (on Linux). Now you have access to your standard terminal and can run commands. Type jobs or jobs -l to see a list of the background processes.
Read more →

Fish Plugins I Like

Fish shell is my favorite shell. It’s awesome. Fish comes with useful features out of the box. For example, excellent auto-completion and syntax highlighting make my life easier. Fish is a joy to use. What Is a Shell? From technopedia: A shell is software that provides an interface for an operating system’s users to provide access to the kernel’s services. On Unix-based or Linux-based operating systems, a shell can be invoked through the shell command in the command line interface (CLI), allowing users to direct operations through computer commands, text or script.
Read more →

Pipe a Terminal Command to Vim

How can you run a command in your normal shell and then pipe it to Vim? A typical use case could be to run a find command and open the found file in Vim. Answer: You can use command substitution. vim $(find . -name example.txt) Here’s a useful command that I’m using now: nvim (fd | fzy) (I’m using fish as my interactive shell. Thus I don’t need to use $.
Read more →

Tool: fd - The Faster Alternative to find

fd is a “simple, fast, and user-friendly alternative to find”. This neat tool offers a more intuitive syntax for finding files and operating on them. The author wrote fd in Rust. Thus, it’s quite fast. Let’s say we want to find all mp3 files in a directory. With find, you have to do something like this: find -name "*.mp3" fd looks simpler: fd -e mp3 Here’s an example command that converts all jpg files to png files:
Read more →

256color $TERM With st, tmux and fish

It can be difficult to get your terminal colors working correctly between your terminal emulator, tmux and your shell. st, tmux and fish shell sometimes don’t play nice together when it comes to setting a 256 color scheme. First, check the TERM variable in the fish shell: $ echo $TERM Ideally, it should be either screen-256color, st-256color, xterm-256color or something like that. You shouldn’t set the TERM variable with fish.
Read more →

Bash and $PATH

I was always confused about where to put my config for the bash shell on Linux. I shoved everything into ~./bashrc because that seemed to be the easiest solution. What is .bashrc? .bashrc is a shell script that Bash runs whenever it is started interactively. It initializes an interactive shell session. You can put any command in that file that you could type at the command prompt. You put commands here to set up the shell for use in your particular environment, or to customize things to your preferences.
Read more →

Setting up Fish Shell With Unicode Glyphs

Fish Shell is an interactive and user-friendly command shell for all platforms. The default shell on Linux (and macOS?) is bash. But fish is much nicer. It looks better, it has great autocomplete features and it just works out of the box with no fuss. You can install beautiful (and useful) themes and prompts which make working with git a breeze. For example, this is the bobthefish theme: You can easily see the git branch you’re working on and other information (i.
Read more →

Sign up for the newletter!

powered by Buttondown