this post was submitted on 21 Oct 2023
75 points (100.0% liked)

Linux

1253 readers
86 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Hi. I've been using powerlevel10k for a long time, but a few days ago, I decided I wanted to customize it a bit. I opened the .p10k.zsh file, and I was shocked. It's really massive, with TONS of options. I've been digging through for a few hours already, and it's absolutely amazing how much you can customize it without actually programming anything. I was wondering what other people are using. So my questions are:

  • Do you customize your shell prompt?
  • If yes, do you use some framework or pre-made theme, or do you just configure it the vanilla way in your bashrc/zshrc/...
  • How is your experiences with it so far?
  • Share screenshot of your prompts, please (Sadly, my prompt is currently half done, so I can't really share it)
top 50 comments
sorted by: hot top controversial new old
[–] nbailey@lemmy.ca 33 points 11 months ago (1 children)

I use plain old bash with the plain old .bashrc that ships with Debian. I’ll bolt on a git-branch-aware function into the prompt here and there, but that’s about it.

Why? I ssh into a few dozen machines most days and my shitty little lizard brain can’t deal with everything being different on each box. So as much as I appreciate zsh, powerline plug-ins, all that glitzy stuff, I’ll be a late adopter when it comes to plain old Debian stable…

[–] thelastknowngod@lemm.ee 2 points 11 months ago (1 children)

This was me until the kubernetes transition occurred. Now I ssh into nothing unless it's a personal box. I've become a zsh convert.

[–] InputZero@lemmy.ml 1 points 11 months ago (1 children)

I've been casually transitioning to kubernetes and zsh, but I'm just too comfortable with bash and my os running on bare metal. (He says with more than half his apps switched to containers.) It's simple, effective, and is always available. I should take the plunge, someday.

[–] thelastknowngod@lemm.ee 2 points 11 months ago

FWIW, once I got deep enough into it, the thought of going back to the old way seemed like a crazy idea. I don't want to manage servers like that again if it can be avoided. YMMV.

[–] starman@programming.dev 16 points 11 months ago* (last edited 11 months ago) (1 children)
[–] winety@communick.news 4 points 11 months ago (1 children)

How is Nushell? Is it stable?

[–] starman@programming.dev 1 points 11 months ago

There are some breaking changes made to config sometimes, it's v0.x after all.

[–] hellfire103@sopuli.xyz 15 points 11 months ago* (last edited 11 months ago)

I use Zsh with the Oh My Zsh! framework, and I use a different theme depending on which subuserland I’m in, by customising ~/.zshrc. For example, I use the gentoo theme on Debian and its derivatives, agnoster on NixOS, darkblood on Arch, strug for Mageia, apple on my macOS device, aussiegeek on FreeBSD, and gallifrey on OpenBSD. Different themes helps me remember which package manager to use and which distro-specific commands will work.

I'll send some screenshots in a bit, when I boot up my PC.

I like Zsh because of its tab completion and command history. I also quite like its plugins.

Before anyone asks, I have tried Fish before, and I prefer Zsh. I have tried configuring Bash before, and I prefer Zsh. I have played with Ksh and Tcsh on BSD, and I prefer Zsh. I used PowerShell a long time ago, and I prefer Zsh.

[–] chayleaf@lemmy.ml 12 points 11 months ago* (last edited 11 months ago) (1 children)

I use fish + tide

I tried zsh+p10k before fish+tide, but zsh felt annoying in subtle ways that weren't fixable with (existing) plugins, so I switched back to fish, but installed tide to mimic my previous p10k theme.

[–] Fjor@lemm.ee 4 points 11 months ago

Didn't know about Tide, super neat! ✨

[–] Guenther_Amanita@feddit.de 10 points 11 months ago* (last edited 11 months ago)

I just use the default fish without any modifications.

To be fair, I don't use the terminal that often.

Even for my homeserver, I access most stuff (containers, updates, etc.) graphically with CasaOS (a web interface), and as a more "casual" PC user, I work with the tools given by my DE. I don't do much fancy stuff.

And when I really need the CLI, fish is alright for me. It's simple, has sane defaults, and feels (thanks to the automatically activated spell check and completion) very efficient for me.

Bash isn't bad, but feels a bit lackluster. Zsh may be better, but requires too much configuration for what it's worth for me.

[–] 12510198@lemmy.blahaj.zone 9 points 11 months ago (1 children)

I designed this prompt shortly after I switched to Linux, I've been using it for a while, it has a few features like putting the exit code if it isn't 0, changing the hostname color if its detected that you are over ssh, changing the directory color to red if it isn't writeable, changing the prompt color to red if your euid is 0, and instead of printing I have no name! when your user does not have an entry in the passwd file, it will just print your uid in red. I also have a version that I wrote in C that works the same way with a subsitution shell, but it was harder to sync across all my devices when I made a change, so I rewrote it in posix shell that could be synced with just my .bashrc and work almost anywhere.

I don't know how to post a screenshot, sorry for the long paragraph, but here is the source code, feel free to share or do whatever with it!

#-----PS1-----#
BOLDRED="\001\033[1;31m\002"
BOLDBLUE="\001\033[1;34m\002"
BOLDPURPLE="\001\033[1;35m\002"
BOLDCYAN="\001\033[1;36m\002"
BOLDGREEN="\001\033[1;32m\002"
COLORRESET="\001\033[0m\002"
CURSOR_BLINK="\001\033[5 q\002"
INFO_COLOR=$BOLDGREEN
SUPERUSER_COLOR=$BOLDRED
NORMALUSER_COLOR=$BOLDCYAN
SSH_COLOR=$BOLDPURPLE
__shellprompt ()
{
        if [ "$(id -u)" = 0 ]; then
                PROMPT_COLOR=$SUPERUSER_COLOR
                PROMPT_EMBLEM='#'
        else
                PROMPT_COLOR=$NORMALUSER_COLOR
                PROMPT_EMBLEM='$'
        fi
        # [user@hostname]
        printf "%b%s%b" "${PROMPT_COLOR}[${INFO_COLOR}" "$(whoami 2>/dev/null || (printf "%b%s" "${BOLDRED}" "UID:$(id -u)"))" "${PROMPT_COLOR}@"
        if [ -n "${SSH_TTY}" ] || [ -n "${SSH_CLIENT}" ]; then
                printf "%b" "$SSH_COLOR"
        else
                printf "%b" "$INFO_COLOR"
        fi
        printf "%s%b" "$(hostname)" "${PROMPT_COLOR}]"
        # :
        printf "%b" "${COLORRESET}:"
        # (/pwd)
        printf "%b" "${PROMPT_COLOR}("
        if [ -w "$PWD" ]; then
                printf "%b" "${INFO_COLOR}"
        else
                printf "%b" "${BOLDRED}"
        fi
        if [ -n "$HOME" ] && [ "$HOME" != "/" ] && { [ "$PWD" = "$HOME" ] || [ "$PWD" != "${PWD#"$HOME/"}" ]; }; then
                printf "%s" "~${PWD#"$HOME"}"
        else
                printf "%s" "${PWD}"
        fi
        printf "%b" "${PROMPT_COLOR})${COLORRESET}"
        # :(EXITCODE)
        if [ "$1" != 0 ]; then
                printf "%b" "${COLORRESET}:"
                printf "%b%s%b" "${PROMPT_COLOR}(${BOLDRED}" "${1}" "${PROMPT_COLOR})${COLORRESET}"
        fi
        # ->$
        # ->#
        printf "%b" "\n${PROMPT_COLOR}->${PROMPT_EMBLEM} ${COLORRESET}${CURSOR_BLINK}"
}
export PS1='$(__shellprompt $?)'
#-----PS1-----#
load more comments (1 replies)
[–] wgs@lemmy.sdf.org 9 points 11 months ago (1 children)

I'm on the boring side...

PS1="% "

I like it though, it gives me more room for commands !

[–] stepanzak@iusearchlinux.fyi 2 points 11 months ago (1 children)

Most of the pre-built prompts have two lines to give enough space for commands. The first line has all the info, and the second line is something like your prompt. If your prompt works for you, it's great, though.

[–] wgs@lemmy.sdf.org 2 points 11 months ago (1 children)

But I have more vertical space too ;)

[–] stepanzak@iusearchlinux.fyi 4 points 11 months ago* (last edited 11 months ago) (1 children)

That's fair. Powerlevel10k actually has a very smart feature for this called transient prompt that removes the first line full of info from every executed command. It's hard to explain. There is a screen recording in the README I have linked.

[–] Cwilliams 1 points 11 months ago (1 children)

That sounds really cool! Do you know if I could do with default zsh?

[–] stepanzak@iusearchlinux.fyi 1 points 11 months ago

I'm sure you can since powerlevel10k is also written in pure zsh. I have no idea how to do it or how difficult it would be, however.

[–] squid@feddit.uk 7 points 11 months ago (1 children)

Bash with blesh captured_image8259805959819673767 And nano-syntax-highlighting captured_image5235261566743949456

[–] Cwilliams 1 points 11 months ago (1 children)

I used to use ble.sh, but I switched to zsh because I was... unimpressed with the ble.sh documentation. Have you had the same problem?

[–] squid@feddit.uk 1 points 11 months ago

I'd also once switched to zsh but some of my scripts had failed to run so I'm back to bash, blue.sh is okay, mostly use it for auto-fill

[–] Cwilliams 7 points 11 months ago

starship.rs on zsh

[–] 30p87@feddit.de 7 points 11 months ago* (last edited 11 months ago)

As I use bash basically for everything, I wanted my prompt to be as basic as possible (No newlines, fixed format) and compatible across my PC, Laptop as well as server and Pi via SSH.
Therefore, it's a simple __prompt_command function in my .bashrc (nearly) everywhere.
It's structured as:

  1. Terminal/TTY number in orange
  2. Username in green (for roots .bashrc it's red)
  3. Hostname in green
  4. Current working dir in blue
  5. Current git branch in yellow (if in a git repo)
  6. Exit code in red (if not 0)

Looks like this: 1000011281

I used some prompt generator to get the variables and colors right, and then wrapped parts in if-then where needed.
The result is:

__prompt_command() {
    local EXIT="$?"
    PS1="\[\033[38;5;216m\](\l)\[$(tput sgr0)\] \[$(tput sgr0)\]\[\033[38;5;85m\]\u@\H\[$(tput sgr0)\]:\[$(tput sgr0)\]\[\033[38;5;68m\][\w\[$(tput sgr0)\]"
    local GIT_BRANCH="$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')"
    if ! [[ -z "$GIT_BRANCH" ]]; then
        PS1+=":\[$(tput sgr0)\]\[\033[38;5;142m\]${GIT_BRANCH}\[$(tput sgr0)\]"
    fi
    PS1+="\[\033[38;5;68m\]]\[$(tput sgr0)\]"
    if [ $EXIT != 0 ]; then
        PS1+=":\[$(tput sgr0)\]\[\033[38;5;1m\]${EXIT}\[$(tput sgr0)\]"
    fi
    PS1+="\\$ \[$(tput sgr0)\]"
}

In practice I use every aspect of it. The terminal number is useful for sorting, the username is needed especially when handling e.g. git or db servers with specific users, and one has a terminal as the user, one as root and one as normal user. Hostname is obviously important with multiple ssh sessions open all the time (especially without terminal emulator titles). Typing pwd all the time would be very tedious, as I only move around my system in bash, so having it in the prompt is nice. If I am in a git repo I also need to know the branch and otherwise it's not displayed anyway. Quickly identifying silently failed commands is tedious, especially because issuing one command overwrites $? again, so 'logging' it if necessary is nice.

[–] happyhippo@feddit.it 6 points 11 months ago (1 children)

I tried oh-my-bash with some fancy theme, but went back to plain old bash from my distro since suggestions for autocomplete had suddenly started to lag. Went back to default and it's as quick as ever to suggest.

I'm not willing to trade efficiency for bells and whistles

[–] stepanzak@iusearchlinux.fyi 3 points 11 months ago

I don't know about oh-my-bash themes, but on the zsh side, the powerlevel10k can display a lot of information without any lag due to asynchronous implementation. I'm sure there is something similar for bash too.

[–] theshatterstone54@feddit.uk 5 points 11 months ago

Currently, I use starship, but I have considered switching to a regular PS1 or similar setup, it's just that I can't get the colours right when using PS1.

[–] Polyester6435@lemmy.blahaj.zone 5 points 11 months ago* (last edited 11 months ago)

Vanilla zsh prompt. I had a thing that told me which git branch I was on for a while but my editor tells me that so I decided I didn't need it

[–] palordrolap@kbin.social 4 points 11 months ago* (last edited 11 months ago) (1 children)

Standard Bash with a twist:

[ /full/path/~-prefixed where possible ]
 user@short-hostname $ _

(Underscore = cursor, not part of prompt, in case that's not obvious.)

It's similar enough to the most common Bash prompt that I don't feel totally alienated on a different system but different enough to be unique / useful.

The carriage return is deliberate. Paths can often get quite long in my homedir (if not other places), even with the ~ abbreviations. I can't imagine anyone likes starting to type a command more than halfway across a screen because of a long path; this was my solution.

The spacing is deliberate too. The brackets are hard to distinguish without the spaces either side of the path. On the second line, the 1-char indent and the spaces around the obligatory $ were the layout I found most pleasing.

There are embedded colour codes, but it's designed so that it looks fine without them, just in case.

As for other configuration, I use whatever comes with the distro I'm using, especially any command-completion, etc.

[–] not_amm 1 points 11 months ago

How did you do it? I've been wanting to do that, but I've been busy and haven't had the time 😿

[–] rutrum@lm.paradisus.day 4 points 11 months ago* (last edited 11 months ago)

When I hopped on the home manager train I enabled starship (since it was just a couple lines to add) and I'm very happy with it. It has a couple small things out of the box that I really want. Mostly, its trimming my path so it doesnt take the full width of my terminal. I have it set so it only prints the lowest 3 directories and it wont print any directory higher than the current git repo Im in. IMO i hate all the little emojis but that was very easy to remove/disable. Its a very clean experience, and straightforward config (toml if not using nix).

EDIT: here's a pic of the path trimming. This is about as complicated as it gets. Also, I'm using catpuccin color scheme in urxvt.

[–] snowcatridge10 3 points 11 months ago
[–] vettnerk@lemmy.ml 3 points 11 months ago* (last edited 11 months ago)

I used variations of the same homecooked bash prompt ever since my FreeBSD days 25 years ago, up until Parrotsec made me realize that a prompt doesn't have to be confined to one line.

So now I use:

username@host:/full/path #
:

...with a bunch of colors and special characters to make it more readable at a glance. That colon represents the input line.

To conserve some space I only used last part of CWD before, but now that it's multiline I can use the full path, making it easier when I need to copy-paste an scp-friendly path, as I'm usually working across a bunch of different usernames and hosts.

[–] __jov@lemmy.ml 3 points 11 months ago

I used to use starship with zsh. It's pretty good, I did write my configuration from scratch but kept it really short and barebones. The configuration is fairly nice and easy so you won't feel overwhelmed really.

Although at this point I just use bash with the default prompt in Fedora. Couldn't be bothered setting it up again(even though it takes like 5 minutes) because I rarely use the cli lol.

[–] sebastiancarlos@lemmy.sdf.org 3 points 11 months ago (1 children)

.bashrc:

# Prompt
# "Make it simple, just the dollar sign"
# "Say no more, fam"
# - if error code is not 0, then prepend [N] where N is the error code
# - if user is root, use red and #
blue='\e[34m'
red='\e[31m'
bold='\e[1m'
reset='\e[0m'
PS1='$( status=$?; [ $status -ne 0 ] && echo "[$status] ")\['"$blue""$bold"'\]$\['"$reset"'\] '

if [[ $EUID -eq 0 ]]; then
  PS1='$( status=$?; [ $status -ne 0 ] && echo "[$status] ")\['"$red""$bold"'\]#\['"$reset"'\] '
fi

.inputrc:

# vi mode, change to 'emacs' here if you prefer
set editing-mode vi

# vi INSERT prompt
set vi-ins-mode-string "\1\e[30;44m\2 INS \1\e[0m\2 "

# vi NORMAL prompt
set vi-cmd-mode-string "\1\e[30;47m\2 NOR \1\e[0m\2 "
[–] stepanzak@iusearchlinux.fyi 2 points 11 months ago (1 children)

Thanks for sharing! Vi mode ftw 😎

[–] sebastiancarlos@lemmy.sdf.org 2 points 11 months ago

Yes! I use it all the time. No idea why it's not more popular

[–] mikesailin@lemmy.ml 2 points 11 months ago

Color green for normal users and red for root. then date, hostname. and finally time of day

[–] Pixel@lemmy.sdf.org 2 points 11 months ago

I used to color my prompt depending on which server I was connected to (ssh), and a different color scheme for prod, dev and local. But that was a long time ago and the script is buried somewhere, also I don't stay ssh'd to nearly as many places as I did back then. But I did like it, I'd use it now if I had it.

[–] z3rOR0ne@lemmy.ml 2 points 11 months ago* (last edited 11 months ago)

Custom PROMPT variable in my .zshrc. Similar format in .bashrc, but uses PS1 instead.

Prompt shows git branch, italics and custom colors/characters. Shows a hanging arrow on a newline (i know, wasted newlines are blasphemy to some, but I like it).

Renders nicely in my custom compiled suckless terminal using monospace font.

PROMPT='%B%F{blue}[  %B%F{white}$(tput sitm)'%1~'$(tput sgr0)$(tput bold)%B%F{blue}]$(tput sitm)$ %B%F{white}$(tput setaf 5)${vcs_info_msg_0_}%B%F$(tput sgr0)$(tput setaf 4)$(tput bold)
└─>%B%F{white} '
[–] matejc@matejc.com 2 points 11 months ago

Zsh and Starship.rs on top with few extra minor things. I like my shell fast and clean.

[–] esm 2 points 11 months ago (1 children)

There are two usability tweaks that I would find it hard to live without: (1) red prompt on last-command failure, and (2) highlight what I type, dehighlight output:

Reason for 1 is obvious, 2 is more subtle: it helps my eye scan scrollback and identify what I've typed, which is what I'm scanning for 90% of the time.

Implementations vary, here's how I do it in zsh:

  1. PS1='%(?.%K{cyan}%F{white}.%B%K{red}%F{white})XX%b%k%f %(?.%F{cyan}.%F{red})yyy%k%b%F{yellow}%(!.#.$)%f '. Duplication is evil, but AFAIK necessary because the conditional (error check) is %(? and I highlight both parts of my two-part prompt. Suggestions welcome for removing the duplication.
  2. zle_highlight=("default:fg=white") (on a Solarized Dark term, where the default fg color is light gray. Adjust to fit your needs).
[–] stepanzak@iusearchlinux.fyi 2 points 11 months ago

Thanks for your detailed explanation! It's minimal, yet it looks very well usable.

[–] davefischer 2 points 11 months ago

VERY simple. Time & node:

HH:MM node%

Except in the xterm I keep open for dealing with my camera. That's time & last-word-in-cwd:

HH:MM dir%

Sometimes on a cellphone I will use battery charge percent:

BB%

And when I'm su'ed it's just:

root%

[–] doomkernel@sopuli.xyz 2 points 11 months ago

I use oh-my-posh (on a windows machine) with a custom theme that tells me some git info and a few other things. But when I'm in my Linux machine its a vanilla zsh

[–] acow@programming.dev 2 points 11 months ago

I’ve used powerline-go for a long time now. The modules I use are, modules = ["cwd" "ssh" "dotenv" "nix-shell" "gitlite" "exit"]; (from my home-manager config). It tells me everything I need, and looks pretty, too. Maybe I should mix it up for some variety, but I do like the info it provides.

[–] nordring12@lemmy.ml 1 points 11 months ago

Fish + OMF.... Work flawlessly

[–] Turbo@lemmy.ml 1 points 11 months ago

I'm using guake

I like that it's just the F12 key away then F11 to expand to full window. Supports multiple tabs.

Anyone using guake?

[–] neosheo@discuss.tchncs.de 1 points 11 months ago

I use bash-it and set it to powerline theme

[–] iortega@lemmy.eus 1 points 11 months ago

I use budspencer theme on fish. https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md#budspencer-theme It looks cool and yellow, which I like. I prints the path on the far right and parent folders are printed only with initial letter, so it doesn't take 2 lines in the shell and it ends up pretty short. It also has git integration and some budspencer exclusive commands to perform some cools actions, I don't care about and I have never used. Also, I like that command errors are displayed as ✔ or ✘ on the next prompt. It also prints the time the last command has been running. I use vi keybidings, so prompt color changes when I change the mode feel cool. I would also like to have the execution time for every command, but I have another theme for that I don't remember the name of on my work machine.

[–] java 1 points 11 months ago

I use the default bash prompt with minor cosmetic changes (color, font weight). Looking at other comments, I think that adding a git branch (if any) can be useful.