211 lines
5.6 KiB
Nix
211 lines
5.6 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
with builtins;
|
|
with lib.attrsets;
|
|
let
|
|
scripts = (import ./scripts.nix) pkgs;
|
|
aliases = with scripts; {
|
|
"cp-mov" = cp-media "mov" "movies";
|
|
"cp-ser" = cp-media "ser" "shows";
|
|
"cp-ani" = cp-media "ani" "anime";
|
|
"dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm";
|
|
"p" = calc;
|
|
"s" = "systemctl";
|
|
"j" = "journalctl";
|
|
"ju" = "journalctl -u";
|
|
"jfu" = "journalctl -fu";
|
|
"ls" = "${pkgs.eza}/bin/eza --git";
|
|
"ll" = "${pkgs.eza}/bin/eza --git";
|
|
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
|
|
"open" = "${pkgs.xdg-utils}/bin/xdg-open";
|
|
"cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
|
|
"cat" = "${pkgs.bat}/bin/bat";
|
|
|
|
"pull" = "${pkgs.git}/bin/git pull";
|
|
"push" = "${pkgs.git}/bin/git push";
|
|
"commit" = "${pkgs.git}/bin/git commit";
|
|
"add" = "${pkgs.git}/bin/git add";
|
|
"patch" = "${pkgs.git}/bin/git add -p";
|
|
"amend" = "${pkgs.git}/bin/git commit --amend";
|
|
"log" = "${pkgs.git}/bin/git log --all --graph --decorate";
|
|
"st" = "${pkgs.git}/bin/git status";
|
|
"checkout" = "${pkgs.git}/bin/git checkout";
|
|
"rebase" = "${pkgs.git}/bin/git rebase";
|
|
"stash" = "${pkgs.git}/bin/git stash";
|
|
|
|
"f" = "nautilus --no-desktop . &";
|
|
};
|
|
# extracting any compressed format
|
|
extract = ''
|
|
function extract -a file -d "decompress a file"
|
|
if not test -f $file
|
|
echo "'$file' is not a valid file"
|
|
return 1
|
|
end
|
|
switch $file
|
|
# tar can automatically figure out how to decompress
|
|
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
|
|
case '*.bz2'; bunzip2 $file; end
|
|
case '*.rar'; unrar e $file; end
|
|
case '*.gz'; gunzip $file; end
|
|
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
|
|
case '*.Z'; uncompress $file; end
|
|
case '*.7z'; 7z x $file; end
|
|
case '*';
|
|
echo "'$file' cannot be extracted"
|
|
return 1
|
|
end
|
|
end
|
|
'';
|
|
in
|
|
{
|
|
programs = {
|
|
atuin = {
|
|
enable = true;
|
|
enableFishIntegration = true;
|
|
|
|
settings = {
|
|
filter_mode_shell_up_key_binding = "directory";
|
|
exit_mode = "return-original";
|
|
|
|
workspaces = true;
|
|
};
|
|
};
|
|
|
|
zoxide = {
|
|
enable = true;
|
|
enableFishIntegration = true;
|
|
};
|
|
|
|
direnv = {
|
|
enable = true;
|
|
# enableFishIntegration = lib.mkDefault true;
|
|
};
|
|
|
|
fzf = {
|
|
enable = true;
|
|
enableFishIntegration = true;
|
|
};
|
|
|
|
fish = {
|
|
enable = true;
|
|
shellAliases = aliases;
|
|
plugins = with pkgs.fishPlugins; [
|
|
{
|
|
name = "tide";
|
|
inherit (tide) src;
|
|
}
|
|
{
|
|
name = "sponge";
|
|
inherit (sponge) src;
|
|
}
|
|
{
|
|
name = "autopair";
|
|
inherit (autopair) src;
|
|
}
|
|
];
|
|
|
|
functions = {
|
|
fish_jj_prompt = {
|
|
body = ''
|
|
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
|
|
return 1
|
|
end
|
|
|
|
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
|
|
separate(
|
|
" ",
|
|
bookmarks.join(", "),
|
|
change_id.shortest(),
|
|
commit_id.shortest(),
|
|
if(conflict, "conflict"),
|
|
if(empty, "empty"),
|
|
if(divergent, "divergent"),
|
|
if(hidden, "hidden"),
|
|
)
|
|
'
|
|
'';
|
|
};
|
|
|
|
_tide_item_jj = {
|
|
body = ''
|
|
set -l _tide_item_jj_color $_tide_location_color
|
|
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
|
|
'';
|
|
};
|
|
|
|
_tide_item_git = {
|
|
body = ''
|
|
if not test -d .jj
|
|
fish_git_prompt '%s'
|
|
end
|
|
'';
|
|
};
|
|
};
|
|
|
|
interactiveShellInit = ''
|
|
fish_vi_key_bindings
|
|
|
|
set -g sponge_successful_exit_codes 0
|
|
set -g sponge_allow_previously_successful false
|
|
set -g sponge_delay 10
|
|
|
|
${config.programs.jujutsu.package}/bin/jj util completion fish | source
|
|
|
|
if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
|
|
set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
|
|
if test $tide_item_jj_idx
|
|
set tide_left_prompt_items \
|
|
$tide_left_prompt_items[1..$tide_item_jj_idx] \
|
|
jj \
|
|
$tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
|
|
end
|
|
end
|
|
|
|
function t
|
|
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
|
end
|
|
|
|
function temp
|
|
t $argv
|
|
end
|
|
|
|
function rs
|
|
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
|
|
cargo init . --bin --name $(basename "$PWD")
|
|
vim src/main.rs
|
|
end
|
|
|
|
fish_add_path "$HOME/.cargo/bin"
|
|
fish_add_path "$HOME/.local/bin"
|
|
fish_add_path "$HOME/Documents/scripts"
|
|
fish_add_path "$HOME/.nix-profile/bin"
|
|
'';
|
|
};
|
|
};
|
|
|
|
home.activation = {
|
|
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
setupTide() {
|
|
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
|
|
lib.cli.toGNUCommandLineShell { } {
|
|
auto = true;
|
|
style = "Lean";
|
|
prompt_colors = "True color";
|
|
show_time = "No";
|
|
lean_prompt_height = "Two lines";
|
|
prompt_connection = "Disconnected";
|
|
prompt_spacing = "Compact";
|
|
icons = "Few icons";
|
|
transient = "Yes";
|
|
}
|
|
}"} >/dev/null 2>&1
|
|
}
|
|
setupTide
|
|
'';
|
|
};
|
|
}
|