diff --git a/flake.nix b/flake.nix index 4da6410..3b0db0b 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ { home-manager.users.me = import ./home/common.nix; home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users.root = import ./home/root.nix; } ]; in { diff --git a/home/fish/interactive.fish b/home/fish/interactive.fish index 7452a34..f5b1fd3 100644 --- a/home/fish/interactive.fish +++ b/home/fish/interactive.fish @@ -13,6 +13,8 @@ function postexec_test --on-event fish_postexec echo end +set -g fish_prompt_pwd_dir_length 0 + function fish_prompt set -l last_status $status set -l markers @@ -53,20 +55,93 @@ function fish_prompt set_color 9ece6a echo -n "$host " - set_color 89ddff - echo -n (prompt_pwd) + set -l pwd - set_color bb9af7 - echo -n (fish_git_prompt) + if git rev-parse --show-toplevel >/dev/null 2>&1 + set -l root (git rev-parse --show-toplevel) + set -l rel (string replace "$root/" "" "$PWD") + set pwd (basename "$root") + if test "$rel" = "$PWD" + set pwd (basename "$root") + else + set pwd (basename "$root")"/"$rel + end + else + set pwd (prompt_pwd) + end + + set_color 89ddff + echo -n $pwd + + set -l git_info (git status --porcelain=v2 --branch 2>/dev/null) + + if test $status -eq 0 + set -l branch + set -l ahead 0 + set -l behind 0 + set -l staged 0 + set -l modified 0 + set -l untracked 0 + + for line in $git_info + switch $line + case '# branch.head*' + set branch (string split ' ' $line)[3] + + case '# branch.ab*' + set -l parts (string split ' ' $line) + set ahead (string sub -s 2 -- $parts[3]) + set behind (string sub -s 2 -- $parts[4]) + + case '1*' '2*' + set -l xy (string sub -s 3 -l 2 $line) + if test (string sub -s 1 -l 1 $xy) != "." + set staged (math $staged + 1) + end + if test (string sub -s 2 -l 1 $xy) != "." + set modified (math $modified + 1) + end + case '?*' + set untracked (math $untracked + 1) + end + end + + set_color bb9af7 + echo -n " [$branch" + + test $ahead -gt 0; and echo -n " ↑$ahead" + test $behind -gt 0; and echo -n " ↓$behind" + test $staged -gt 0; and echo -n " +$staged" + test $modified -gt 0; and echo -n " ~$modified" + test $untracked -gt 0; and echo -n " ?$untracked" + + echo -n "]" + end if test (count $markers) -gt 0 set_color ff9e64 echo -n " ("(string join " " $markers)")" end + set_color white + + if test (count (jobs)) -gt 0 + echo -n "  "(count (jobs)) + end + + if set -q SSH_CONNECTION + echo -n " on ssh" + end + echo - set_color 73daca - echo -n "λ " + + if fish_is_root_user + set_color ff007c + echo -n "# " + else + set_color 73daca + echo -n "λ " + end set_color normal end diff --git a/home/root.nix b/home/root.nix new file mode 100644 index 0000000..4db7c56 --- /dev/null +++ b/home/root.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: + +{ + imports = [ + ./fish + ./eza + ]; + + home.username = "root"; + home.homeDirectory = "/root"; + + home.stateVersion = "26.05"; +} diff --git a/hosts/common.nix b/hosts/common.nix index 2a1d64a..3e06ddd 100644 --- a/hosts/common.nix +++ b/hosts/common.nix @@ -34,6 +34,8 @@ useXkbConfig = true; }; + users.users.root.shell = pkgs.fish; + users.users.me = { isNormalUser = true; shell = pkgs.fish; @@ -53,6 +55,8 @@ }; environment.systemPackages = with pkgs; [ + neovim + gitui libinput gnupg age