nixos/settings/shell.nix

149 lines
3.7 KiB
Nix
Raw Normal View History

{ config, pkgs, lib, ... }:
2025-12-03 19:53:58 +00:00
{
2025-12-21 20:42:08 +00:00
# Install fastfetch
2025-12-03 19:53:58 +00:00
environment.systemPackages = with pkgs; [
fastfetch
];
2025-12-21 20:42:08 +00:00
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.fira-mono
2025-12-03 20:29:57 +00:00
nerd-fonts.jetbrains-mono
nerd-fonts.meslo-lg
2025-12-03 20:29:05 +00:00
];
2025-12-21 20:42:08 +00:00
# Simple fastfetch config — run `fastfetch` manually for system info
environment.etc."fastfetch/config.jsonc".text = ''
2025-12-03 19:53:58 +00:00
{
"$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": [
{
"type": "title",
"format": "{user-name}@{host-name}"
2025-12-03 19:53:58 +00:00
},
"separator",
"os",
"kernel",
"shell",
"terminal",
"uptime",
"memory"
2025-12-03 19:53:58 +00:00
]
}
'';
# Fish shell settings and custom powerline prompt
programs.fish.interactiveShellInit = ''
# Disable default greeting
set -g fish_greeting
# Custom powerline prompt
function fish_prompt
set -l last_status $status
# Nix-shell indicator
if set -q IN_NIX_SHELL
set_color -o yellow
printf "[nix-shell] "
set_color normal
end
# --- Line 1: powerline segments ---
# Left round cap + NixOS icon
set_color 394b70
printf ""
set_color 7dcfff -b 394b70
printf " "
# Arrow transition: nix -> hostname
set_color 394b70 -b e0af68
printf ""
set_color 000000 -b e0af68
printf " %s " (hostname)
# Path segments - each folder gets its own color
set -l realhome (string escape --style=regex -- $HOME)
set -l rawpath (string replace -r "^$realhome" "~" $PWD)
set -l parts (string split "/" $rawpath)
set -l path_colors 41a6b5 9ece6a 7aa2f7
set -l prev_bg e0af68
set -l seg_count 0
for part in $parts
if test -n "$part"
set seg_count (math $seg_count + 1)
set -l cidx (math "(" $seg_count - 1 ")" "%" 3 + 1)
set -l seg_bg $path_colors[$cidx]
# Arrow from previous segment
set_color $prev_bg -b $seg_bg
printf ""
set_color 1a1b26 -b $seg_bg
printf " %s " $part
set prev_bg $seg_bg
end
end
# Git branch (if in a repo)
set -l branch (command git branch --show-current 2>/dev/null)
if test -n "$branch"
set_color $prev_bg -b bb9af7
printf ""
set_color 1a1b26 -b bb9af7
printf " %s " $branch
set prev_bg bb9af7
end
# Final arrow to terminal bg
set_color $prev_bg -b normal
printf ""
set_color normal
printf "\n"
# --- Line 2: prompt character ---
if test $last_status -ne 0
set_color red
else
set_color magenta
end
printf " "
set_color normal
end
function fish_right_prompt; end
# Set wallpaper and regenerate color theme
function wallpaper
if test (count $argv) -ne 1
echo "Usage: wallpaper <path-to-image>"
return 1
end
set -l img (realpath "$argv[1]")
if not test -f "$img"
echo "File not found: $img"
return 1
end
gsettings set org.gnome.desktop.background picture-uri "file://$img"
gsettings set org.gnome.desktop.background picture-uri-dark "file://$img"
matugen image "$img" --source-color-index 0 -m dark
echo "Wallpaper and colors updated! Shell theme reloaded."
end
'';
2025-12-03 19:53:58 +00:00
}