2025-12-03 19:53:58 +00:00
|
|
|
{ config, pkgs, ... }:
|
|
|
|
|
{
|
2025-12-21 13:42:38 +00:00
|
|
|
# Install fastfetch, ghostty, and nerd fonts
|
2025-12-03 19:53:58 +00:00
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
|
fastfetch
|
|
|
|
|
];
|
2025-12-03 20:29:05 +00:00
|
|
|
# Install Nerd Fonts for icon support
|
|
|
|
|
fonts.packages = with pkgs; [
|
2025-12-03 20:29:57 +00:00
|
|
|
nerd-fonts.fira-code
|
|
|
|
|
nerd-fonts.jetbrains-mono
|
|
|
|
|
nerd-fonts.meslo-lg
|
2025-12-03 20:29:05 +00:00
|
|
|
];
|
2025-12-20 22:37:20 +00:00
|
|
|
# Create the fastfetch config file with custom image
|
2025-12-03 19:53:58 +00:00
|
|
|
environment.etc."fastfetch/config.jsonc".text = ''
|
|
|
|
|
{
|
|
|
|
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
2025-12-21 12:16:53 +00:00
|
|
|
"logo": {
|
|
|
|
|
"source": "none"
|
|
|
|
|
},
|
2025-12-03 19:53:58 +00:00
|
|
|
"display": {
|
2025-12-03 20:22:36 +00:00
|
|
|
"separator": " ",
|
2025-12-03 19:53:58 +00:00
|
|
|
"color": {
|
|
|
|
|
"keys": "blue",
|
|
|
|
|
"title": "cyan"
|
2025-12-03 20:58:54 +00:00
|
|
|
},
|
|
|
|
|
"key": {
|
|
|
|
|
"type": "icon"
|
2025-12-03 19:53:58 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"modules": [
|
|
|
|
|
{
|
2025-12-21 14:05:34 +00:00
|
|
|
"type": "command",
|
|
|
|
|
"text": "echo $(whoami)@$(hostname) $(uname -r)"
|
2025-12-03 19:53:58 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"type": "colors",
|
|
|
|
|
"symbol": "circle"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
'';
|
2025-12-03 20:22:36 +00:00
|
|
|
# Set up bash with fastfetch and a nice prompt
|
2025-12-03 20:29:05 +00:00
|
|
|
programs.bash.promptInit = ''
|
2025-12-21 14:11:48 +00:00
|
|
|
# Powerline-style prompt with background colors
|
|
|
|
|
# Powerline separator
|
|
|
|
|
SEP=""
|
|
|
|
|
|
2025-12-21 14:13:58 +00:00
|
|
|
# Background colors
|
2025-12-21 17:42:37 +00:00
|
|
|
BG_BLUE="\001$(echo -e '\033[48;5;33m')\002"
|
|
|
|
|
BG_PURPLE="\001$(echo -e '\033[48;5;98m')\002"
|
|
|
|
|
BG_GREEN="\001$(echo -e '\033[48;5;35m')\002"
|
|
|
|
|
BG_CYAN="\001$(echo -e '\033[48;5;37m')\002"
|
2025-12-21 19:37:26 +00:00
|
|
|
BG_ORANGE="\001$(echo -e '\033[48;5;208m')\002"
|
2025-12-21 14:11:48 +00:00
|
|
|
|
|
|
|
|
# Foreground colors for separators
|
2025-12-21 17:42:37 +00:00
|
|
|
FG_BLUE="\001$(echo -e '\033[38;5;33m')\002"
|
|
|
|
|
FG_PURPLE="\001$(echo -e '\033[38;5;98m')\002"
|
|
|
|
|
FG_GREEN="\001$(echo -e '\033[38;5;35m')\002"
|
|
|
|
|
FG_CYAN="\001$(echo -e '\033[38;5;37m')\002"
|
2025-12-21 19:37:26 +00:00
|
|
|
FG_ORANGE="\001$(echo -e '\033[38;5;208m')\002"
|
2025-12-21 14:13:58 +00:00
|
|
|
|
|
|
|
|
# White text and reset
|
2025-12-21 17:42:37 +00:00
|
|
|
WHITE="\001$(echo -e '\033[97m')\002"
|
|
|
|
|
RESET="\001$(echo -e '\033[0m')\002"
|
2025-12-21 14:11:48 +00:00
|
|
|
|
2025-12-21 14:13:58 +00:00
|
|
|
# Function to build path with colored segments
|
|
|
|
|
build_path_prompt() {
|
2025-12-21 19:37:26 +00:00
|
|
|
local output=""
|
|
|
|
|
|
|
|
|
|
# Username segment
|
|
|
|
|
output+="''${BG_ORANGE}''${WHITE} \u ''${RESET}"
|
|
|
|
|
|
|
|
|
|
# Path segments
|
2025-12-21 14:13:58 +00:00
|
|
|
local path="''${PWD/#$HOME/~}"
|
|
|
|
|
local IFS='/'
|
|
|
|
|
local parts=($path)
|
|
|
|
|
local colors=("''${BG_GREEN}" "''${BG_CYAN}" "''${BG_BLUE}")
|
|
|
|
|
local fg_colors=("''${FG_GREEN}" "''${FG_CYAN}" "''${FG_BLUE}")
|
|
|
|
|
local i=0
|
2025-12-21 17:42:37 +00:00
|
|
|
local last_color_idx=0
|
2025-12-21 14:13:58 +00:00
|
|
|
|
|
|
|
|
for part in "''${parts[@]}"; do
|
|
|
|
|
local color_idx=$((i % 3))
|
|
|
|
|
local next_color_idx=$(((i + 1) % 3))
|
2025-12-21 17:42:37 +00:00
|
|
|
last_color_idx=$color_idx
|
2025-12-21 14:13:58 +00:00
|
|
|
|
|
|
|
|
if [ -n "$part" ]; then
|
2025-12-21 19:37:26 +00:00
|
|
|
if [ $i -eq 0 ]; then
|
|
|
|
|
output+="''${colors[$color_idx]}''${FG_ORANGE}''${SEP}"
|
|
|
|
|
else
|
|
|
|
|
output+="''${colors[$color_idx]}''${fg_colors[$(((i - 1) % 3))]}''${SEP}"
|
2025-12-21 14:13:58 +00:00
|
|
|
fi
|
2025-12-21 19:37:26 +00:00
|
|
|
output+="''${colors[$color_idx]}''${WHITE} $part "
|
2025-12-21 14:13:58 +00:00
|
|
|
((i++))
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
2025-12-21 19:37:26 +00:00
|
|
|
echo -n "$output"
|
2025-12-21 14:13:58 +00:00
|
|
|
}
|
2025-12-03 20:22:36 +00:00
|
|
|
|
|
|
|
|
# Function to get git branch
|
|
|
|
|
parse_git_branch() {
|
2025-12-21 14:11:48 +00:00
|
|
|
local branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
|
2025-12-21 19:37:26 +00:00
|
|
|
|
|
|
|
|
# Calculate last path color
|
|
|
|
|
local path="''${PWD/#$HOME/~}"
|
|
|
|
|
local IFS='/'
|
|
|
|
|
local parts=($path)
|
|
|
|
|
local count=0
|
|
|
|
|
for part in "''${parts[@]}"; do
|
|
|
|
|
if [ -n "$part" ]; then
|
|
|
|
|
((count++))
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
local last_color_idx=$(( (count - 1) % 3 ))
|
|
|
|
|
local fg_colors=("''${FG_GREEN}" "''${FG_CYAN}" "''${FG_BLUE}")
|
|
|
|
|
|
2025-12-21 14:11:48 +00:00
|
|
|
if [ -n "$branch" ]; then
|
2025-12-21 19:37:26 +00:00
|
|
|
echo -n "''${BG_PURPLE}''${fg_colors[$last_color_idx]}''${SEP}''${BG_PURPLE}''${WHITE} $branch ''${RESET}''${FG_PURPLE}''${SEP}''${RESET} "
|
|
|
|
|
else
|
|
|
|
|
echo -n "''${RESET}''${fg_colors[$last_color_idx]}''${SEP}''${RESET} "
|
2025-12-21 14:11:48 +00:00
|
|
|
fi
|
2025-12-03 20:22:36 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-21 14:13:58 +00:00
|
|
|
# Set prompt command to rebuild on each prompt
|
2025-12-21 19:37:26 +00:00
|
|
|
PROMPT_COMMAND='PS1="$(build_path_prompt)$(parse_git_branch)"'
|
2025-12-03 19:53:58 +00:00
|
|
|
'';
|
2025-12-03 20:29:05 +00:00
|
|
|
programs.bash.interactiveShellInit = ''
|
2025-12-03 21:29:18 +00:00
|
|
|
# Run fastfetch on terminal start
|
2025-12-03 20:29:05 +00:00
|
|
|
if [[ $- == *i* ]]; then
|
2025-12-03 21:29:18 +00:00
|
|
|
${pkgs.fastfetch}/bin/fastfetch --config /etc/fastfetch/config.jsonc
|
2025-12-03 20:29:05 +00:00
|
|
|
fi
|
|
|
|
|
'';
|
2025-12-03 19:53:58 +00:00
|
|
|
}
|