118 lines
4.3 KiB
Nix
118 lines
4.3 KiB
Nix
{ lib, pkgs, config, hostname, ... }: let
|
|
inherit (lib) mkIf mkEnableOption mkOption types mergeAttrs;
|
|
cfg = config.chuj.stuff.fish;
|
|
user = config.chuj.system.user;
|
|
in {
|
|
options.chuj.stuff.fish = {
|
|
enable = mkEnableOption "fish";
|
|
extraAliases = mkOption {
|
|
type = types.attrs;
|
|
default = {};
|
|
};
|
|
};
|
|
|
|
config = let
|
|
XDG_DATA_HOME = config.home-manager.users.${user}.xdg.dataHome;
|
|
in mkIf cfg.enable {
|
|
environment.systemPackages = [ pkgs.fish ];
|
|
programs.fish.enable = true;
|
|
users.users.${user}.shell = pkgs.fish;
|
|
|
|
programs.fish.promptInit = ''
|
|
${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
|
|
'';
|
|
|
|
home-manager.users.${user}.programs.fish = {
|
|
enable = true;
|
|
|
|
# todo: move some to abbrs
|
|
shellAliases = mergeAttrs {
|
|
"ls" = "${pkgs.eza}/bin/eza -lhs type";
|
|
"cp" = "cp -v";
|
|
"mv" = "mv -v";
|
|
"ytmp3" = "yt-dlp -o '%(title)s.%(ext)s' -x --audio-format mp3";
|
|
"myip" = "curl ifconfig.me";
|
|
"0x0" = ''curl -F"file=@$argv" https://0x0.st'';
|
|
"wget" = "${pkgs.wget}/bin/wget --hsts-file='${XDG_DATA_HOME}/wget-hsts'";
|
|
|
|
# ulimit -n 4096 fixes the "too many open files" error i get sometimes when
|
|
# updating the entire flake
|
|
"rebuild" = "ulimit -n 4096 && sudo nixos-rebuild switch --flake ~/nix#${hostname} -v";
|
|
} cfg.extraAliases;
|
|
|
|
shellAbbrs = { # todo: mkif xclip in pkgs
|
|
"2clip" = "xclip -selection clipboard";
|
|
};
|
|
|
|
functions = {
|
|
"fish_greeting" = "${(pkgs.fortune.override { withOffensive = true; })}/bin/fortune";
|
|
"fish_prompt" = ''
|
|
# name: Informative Vcs
|
|
# author: Mariusz Smykula <mariuszs at gmail.com>
|
|
|
|
# function fish_prompt --description 'Write out the prompt'
|
|
set -l last_pipestatus $pipestatus
|
|
set -lx __fish_last_status $status # Export for __fish_print_pipestatus.
|
|
|
|
if not set -q __fish_git_prompt_show_informative_status
|
|
set -g __fish_git_prompt_show_informative_status 1
|
|
end
|
|
if not set -q __fish_git_prompt_hide_untrackedfiles
|
|
set -g __fish_git_prompt_hide_untrackedfiles 1
|
|
end
|
|
if not set -q __fish_git_prompt_color_branch
|
|
set -g __fish_git_prompt_color_branch magenta --bold
|
|
end
|
|
if not set -q __fish_git_prompt_showupstream
|
|
set -g __fish_git_prompt_showupstream informative
|
|
end
|
|
if not set -q __fish_git_prompt_color_dirtystate
|
|
set -g __fish_git_prompt_color_dirtystate blue
|
|
end
|
|
if not set -q __fish_git_prompt_color_stagedstate
|
|
set -g __fish_git_prompt_color_stagedstate yellow
|
|
end
|
|
if not set -q __fish_git_prompt_color_invalidstate
|
|
set -g __fish_git_prompt_color_invalidstate red
|
|
end
|
|
if not set -q __fish_git_prompt_color_untrackedfiles
|
|
set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal
|
|
end
|
|
if not set -q __fish_git_prompt_color_cleanstate
|
|
set -g __fish_git_prompt_color_cleanstate green --bold
|
|
end
|
|
|
|
set -l color_cwd
|
|
set -l suffix
|
|
if functions -q fish_is_root_user; and fish_is_root_user
|
|
if set -q fish_color_cwd_root
|
|
set color_cwd $fish_color_cwd_root
|
|
else
|
|
set color_cwd $fish_color_cwd
|
|
end
|
|
set suffix '#'
|
|
else
|
|
set color_cwd $fish_color_cwd
|
|
set suffix '$'
|
|
end
|
|
|
|
# PWD
|
|
set_color $color_cwd
|
|
echo -n (prompt_pwd)
|
|
set_color normal
|
|
|
|
printf '%s ' (fish_vcs_prompt)
|
|
|
|
set -l status_color (set_color $fish_color_status)
|
|
set -l statusb_color (set_color --bold $fish_color_status)
|
|
set -l prompt_status (__fish_print_pipestatus "[" "]" "|" "$status_color" "$statusb_color" $last_pipestatus)
|
|
echo -n $prompt_status
|
|
set_color normal
|
|
|
|
echo -n "$suffix "
|
|
# end
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|