nix-home/home/fish/fish.nix

260 lines
7.4 KiB
Nix
Raw Normal View History

2023-11-08 11:47:29 +00:00
{ config, options, pkgs, lib, ... }:
2021-09-29 23:00:14 +00:00
2023-07-09 15:31:59 +00:00
with lib;
2024-05-28 20:01:08 +00:00
let
bootDesktop = pkgs.writeScript "boot-desktop" ''
#!/usr/bin/env fish
set -a PATH ${pkgs.gum}/bin
set -x GUM_CHOOSE_HEADER "Select the Desktop to boot into:"
set CHOICES
if which sway >/dev/null
set -a CHOICES "sway"
end
if which startplasma-wayland >/dev/null
set -a CHOICES "KDE Plasma"
end
set -a CHOICES "None: continue to shell"
switch (gum choose $CHOICES)
case "sway"
exec sway
case "KDE Plasma"
exec dbus-run-session startplasma-wayland
case '*'
exit 255
end
'';
in
2021-09-29 23:00:14 +00:00
{
2021-12-08 22:13:43 +00:00
imports = [
2023-11-08 11:47:29 +00:00
./tide
2021-12-08 22:13:43 +00:00
];
2021-09-29 23:00:14 +00:00
2023-07-09 15:31:59 +00:00
options.programs.fish.everywhereAbbrs = mkOption {
type = types.attrsOf types.str;
description = "Abbreviations that expands everywhere";
default = { };
};
config.home.packages = with pkgs; [
2023-02-05 12:58:35 +00:00
timg
# For fzf.fish
fzf
fd
bat
];
2022-06-07 21:27:18 +00:00
2023-07-09 15:31:59 +00:00
config.programs.fish = {
2021-12-08 22:13:43 +00:00
enable = true;
2022-11-01 10:09:05 +00:00
functions = {
2024-03-08 03:29:58 +00:00
rebuild = {
body = ''
command sudo -v && \
command sudo nixos-rebuild --flake ~/.config/nixpkgs -L --log-format internal-json -v $argv \
&| ${pkgs.nix-output-monitor}/bin/nom --json
'';
wraps = "nixos-rebuild";
};
2022-11-01 10:09:05 +00:00
# Simplify nix usage!
2022-11-01 10:38:34 +00:00
nx = {
body = ''
set impure
if test $argv[1] = "--impure"
set impure "--impure"
set argv $argv[2..]
end
if test (count $argv) -gt 0
nix run $impure nixpkgs#$argv[1] -- $argv[2..]
else
echo "nx [--impure] {package} [args...]"
2023-02-10 10:52:00 +00:00
return 1
2022-11-01 10:38:34 +00:00
end
'';
wraps = "nix run";
description = "Runs an app from the nixpkgs store.";
};
nsh = {
description = "Spawns a shell from the given nixpkgs packages";
wraps = "nix shell";
body = ''
set impure
if test $argv[1] = "--impure"
set impure "--impure"
set argv $argv[2..]
end
if test (count $argv) -gt 0
set minusc (contains -i -- "-c" $argv)
if test -z $minusc
nix shell $impure nixpkgs#$argv -c fish
else if test $minusc -eq (count $argv)
echo "nsh [--impure] {packages} [-c command args...]"
return 1
else
nix shell $impure nixpkgs#$argv[..(math $minusc - 1)] $argv[$minusc..]
end
else
echo "nsh [--impure] {packages} [-c command args...]"
return 1
end
'';
};
2022-11-01 10:09:05 +00:00
# Grep stuff
eg = {
body = ''
if test (count $argv) -gt 0
${pkgs.ripgrep}/bin/rg --vimgrep $argv | e
else
echo "eg {ripgrep options}"
return 1
end
'';
wraps = "rg";
description = "Search with ripgrep and put results into the editor";
};
2023-07-09 15:31:59 +00:00
echo-today = "date +%F";
2023-09-07 21:34:54 +00:00
newfile = "mkdir -p (dirname $argv[-1]) && touch $argv";
2022-11-01 10:09:05 +00:00
};
2021-09-29 23:00:14 +00:00
2023-09-07 21:34:54 +00:00
2021-12-08 22:13:43 +00:00
tide = {
2023-11-08 11:47:29 +00:00
enable = true;
leftItems = options.programs.fish.tide.leftItems.default;
rightItems = options.programs.fish.tide.rightItems.default;
2021-12-08 22:13:43 +00:00
};
2021-09-29 23:00:14 +00:00
2021-12-08 22:13:43 +00:00
shellAliases = {
cat = "bat --theme=GitHub ";
2023-03-12 17:19:39 +00:00
catp = "bat --theme=GitHub -p ";
2021-12-08 22:13:43 +00:00
l = "exa -l --color=always ";
2024-02-06 13:29:45 +00:00
"cp+" = "rsync -avzP";
2023-07-09 15:31:59 +00:00
};
2021-09-29 23:00:14 +00:00
2023-07-09 15:31:59 +00:00
everywhereAbbrs = {
lsports =
if pkgs.stdenv.isDarwin
then "lsof -i -P | grep LISTEN"
else "ss -tulp";
2021-12-08 22:13:43 +00:00
};
2021-09-29 23:00:14 +00:00
2021-12-08 22:13:43 +00:00
shellInit = ''
# Source brew integration
if test -e /opt/homebrew/bin/brew
/opt/homebrew/bin/brew shellenv | source
end
'';
2021-10-09 02:52:28 +00:00
2021-12-08 22:13:43 +00:00
interactiveShellInit = ''
# Sway!
2024-05-28 20:01:08 +00:00
if status --is-login; and test -z $DISPLAY; and test (tty) = "/dev/tty1"
${bootDesktop}
if test $status -ne 255
exit $status
end
end
2022-05-30 20:33:24 +00:00
function fish_greeting
2022-06-07 21:27:18 +00:00
${pkgs.timg}/bin/timg ${./arona.jpg}
printf (env LANG=ja_JP.UTF-8 date +"\n%A%Y%m%d%H%M \n\n")
2022-05-30 20:33:24 +00:00
end
2021-09-29 23:00:14 +00:00
2022-10-31 11:05:14 +00:00
functions --copy fish_title __original_fish_title
functions --erase fish_title
function fish_title
echo (__original_fish_title) - fish
end
2021-12-08 22:13:43 +00:00
# Set up an editor alias
if test -n "$EDITOR"
alias e="$EDITOR"
else
alias e="kak"
end
# Source iTerm2 integration
if test -e ~/.iterm2_shell_integration.fish; and test $__CFBundleIdentifier = "com.googlecode.iterm2"
source ~/.iterm2_shell_integration.fish
end
# Source Kitty integration
if set -q KITTY_INSTALLATION_DIR
set --global KITTY_SHELL_INTEGRATION enabled
source "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_conf.d/kitty-shell-integration.fish"
set --prepend fish_complete_path "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_completions.d"
# Add fish to PATH if installed as a MacOS App
test -e $KITTY_INSTALLATION_DIR/../../MacOS && set -x PATH $PATH "$KITTY_INSTALLATION_DIR/../../MacOS"
end
2021-12-08 22:13:43 +00:00
# Enable vi keybindings
fish_vi_key_bindings
## Set some kak-focused keybindings
bind -M default gi beginning-of-line
bind -M default gl end-of-line
2022-04-25 20:57:23 +00:00
2023-07-09 15:31:59 +00:00
# Everywhere abbrs
${
concatStringsSep "\n"
(mapAttrsToList (k: v: "abbr --add --position anywhere -- ${k} ${escapeShellArg v}")
config.programs.fish.everywhereAbbrs)
}
# Replace today with actual today
abbr --add --position anywhere today -f echo-today
2022-04-25 20:57:23 +00:00
# Set up direnv
2023-04-18 21:26:31 +00:00
# ${pkgs.direnv}/bin/direnv hook fish | source
2022-10-17 13:58:13 +00:00
# Set up tty for GPG
export GPG_TTY=(tty)
2023-02-05 12:58:35 +00:00
# Set up fzf bindings
fzf_configure_bindings --directory=\ct --processes=\cp
2023-02-10 10:52:00 +00:00
# Perl stuff
set -x PATH ${config.home.homeDirectory}/perl5/bin $PATH 2>/dev/null;
set -q PERL5LIB; and set -x PERL5LIB ${config.home.homeDirectory}/perl5/lib/perl5:$PERL5LIB;
set -q PERL5LIB; or set -x PERL5LIB ${config.home.homeDirectory}/perl5/lib/perl5;
set -q PERL_LOCAL_LIB_ROOT; and set -x PERL_LOCAL_LIB_ROOT ${config.home.homeDirectory}/perl5:$PERL_LOCAL_LIB_ROOT;
set -q PERL_LOCAL_LIB_ROOT; or set -x PERL_LOCAL_LIB_ROOT ${config.home.homeDirectory}/perl5;
set -x PERL_MB_OPT --install_base\ \"${config.home.homeDirectory}/perl5\";
set -x PERL_MM_OPT INSTALL_BASE=${config.home.homeDirectory}/perl5;
2021-12-08 22:13:43 +00:00
'';
plugins = [
{
name = "fzf";
src = pkgs.fetchFromGitHub {
2023-02-05 12:58:35 +00:00
owner = "PatrickF1";
repo = "fzf.fish";
rev = "v9.7";
sha256 = "sha256-haNSqXJzLL3JGvD4JrASVmhLJz6i9lna6/EdojXdFOo=";
2021-09-29 23:00:14 +00:00
};
2021-12-08 22:13:43 +00:00
}
2022-09-29 08:09:13 +00:00
{
name = "fenv";
src = pkgs.fetchFromGitHub {
owner = "oh-my-fish";
repo = "plugin-foreign-env";
rev = "b3dd471bcc885b597c3922e4de836e06415e52dd";
sha256 = "sha256-3h03WQrBZmTXZLkQh1oVyhv6zlyYsSDS7HTHr+7WjY8=";
};
}
2021-12-08 22:13:43 +00:00
];
};
# Source files
2023-07-09 15:31:59 +00:00
config.home.file = {
2021-12-08 22:13:43 +00:00
"fish/change_cmd.fish" = {
source = ./. + "/change_cmd.fish";
target = ".config/fish/conf.d/change_cmd.fish";
};
"fish/pls.fish" = {
source = ./. + "/pls.fish";
target = ".config/fish/conf.d/pls.fish";
2021-09-29 23:00:14 +00:00
};
2021-12-08 22:13:43 +00:00
};
2021-09-29 23:00:14 +00:00
}