jj, fish, better kanata, etc
This commit is contained in:
parent
52b1728e2e
commit
d030ebe744
17 changed files with 1642 additions and 938 deletions
211
programs/fish/default.nix
Normal file
211
programs/fish/default.nix
Normal file
|
|
@ -0,0 +1,211 @@
|
|||
{
|
||||
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
|
||||
'';
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue