nix-home/home/fish/fish.nix

293 lines
9 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
2024-06-03 01:32:53 +00:00
if which sway &>/dev/null
2024-05-28 20:01:08 +00:00
set -a CHOICES "sway"
end
2024-06-03 01:32:53 +00:00
if which startplasma-wayland &>/dev/null
2024-05-28 20:01:08 +00:00
set -a CHOICES "KDE Plasma"
end
set -a CHOICES "None: continue to shell"
switch (gum choose $CHOICES)
case "sway"
2024-06-03 20:39:06 +00:00
systemctl --user unset-environment NIXOS_OZONE_WL
2024-05-28 20:01:08 +00:00
exec sway
case "KDE Plasma"
2024-06-03 20:39:06 +00:00
exec ${pkgs.kdePackages.plasma-workspace}/libexec/plasma-dbus-run-session-if-needed startplasma-wayland
2024-05-28 20:01:08 +00:00
case '*'
2024-06-03 01:32:53 +00:00
exec fish -i
2024-05-28 20:01:08 +00:00
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 = ''
2024-09-22 13:46:35 +00:00
pls nixos-rebuild --flake ~/.config/nixpkgs -L --log-format internal-json -v $argv \
2024-03-08 03:29:58 +00:00
&| ${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 = ''
argparse -s 'h/help' 'impure' 'u/unstable' 'g/git' -- $argv
if set -q _flag_help || test (count $argv) -eq 0
echo "nx [--impure] [-u/--unstable/-g/--git] {package} [args...]"
2023-02-10 10:52:00 +00:00
return 1
else
set -q _flag_impure && set impure "--impure"
set nixpkgs "nixpkgs"
set -q _flag_unstable && set nixpkgs "nixpkgs-unstable"
set -q _flag_git && set nixpkgs "github:nixOS/nixpkgs/nixpkgs-unstable"
nix run $impure $nixpkgs"#"$argv[1] -- $argv[2..]
2022-11-01 10:38:34 +00:00
end
'';
description = "Runs an app from the nixpkgs store.";
};
nsh = {
description = "Spawns a shell from the given nixpkgs packages";
wraps = "nix shell";
body = ''
function help
echo "nsh [--impure] [--impure] [-u/--unstable/-g/--git] {package}* [-c command args...]"
2022-11-01 10:38:34 +00:00
end
argparse -s 'h/help' 'impure' 'u/unstable' 'g/git' -- $argv
if set -q _flag_help || test (count $argv) -eq 0
help
return 0
end
set packages $argv
set minusc (contains -i -- "-c" $argv)
if test -n "$minusc"
if test $minusc -eq 1
help
2022-11-01 10:38:34 +00:00
return 1
end
set packages $argv[..(math $minusc - 1)]
set argv $argv[(math $minusc + 1)..]
2022-11-01 10:38:34 +00:00
else
set argv "fish" "-i"
end
if test (count $packages) -eq 0
help
2022-11-01 10:38:34 +00:00
return 1
end
set -q _flag_impure && set impure "--impure"
set nixpkgs "nixpkgs"
set -q _flag_unstable && set nixpkgs "nixpkgs-unstable"
set -q _flag_git && set nixpkgs "github:nixOS/nixpkgs/nixpkgs-unstable"
nix shell $impure $nixpkgs"#"$packages --command $argv
2022-11-01 10:38:34 +00:00
'';
};
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";
2024-09-27 09:51:03 +00:00
# pls
pls = {
wraps = "sudo";
body = ''
set -l cmd "`"(string join " " -- $argv)"`"
echo "I-It's not like I'm gonna run "$cmd" for you or a-anything! Baka >:C" >&2
# Send a notification on password prompt
if command sudo -vn 2>/dev/null
# nothing to do, user already authenticated
else
# throw a notification
set notif_id (kitten notify -P \
-p ${./haruka.png} \
-a "pls" \
-u critical \
"A-a command requires your p-password" \
(printf "I-I need your p-password to r-run the following c-command:\n\n%s" $cmd))
command sudo -v -p "P-password please: "
kitten notify -i $notif_id ""
end
command sudo $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
2024-07-22 15:37:20 +00:00
# Override PATH
set --export --prepend PATH ~/.bin/overrides ~/.local/bin
2021-12-08 22:13:43 +00:00
'';
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"
2024-06-03 01:32:53 +00:00
exec ${bootDesktop}
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" = {
2024-09-22 13:46:35 +00:00
source = ./pls_extra.fish;
target = ".config/fish/conf.d/pls_extra.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
}