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 = ''
|
|
|
|
|
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";
|
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 = ''
|
2024-01-25 22:38:11 +00:00
|
|
|
|
# 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}
|
2024-01-25 22:38:11 +00:00
|
|
|
|
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
|
2022-06-10 17:41:53 +00:00
|
|
|
|
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"
|
2022-07-14 23:26:09 +00:00
|
|
|
|
|
|
|
|
|
# Add fish to PATH if installed as a MacOS App
|
|
|
|
|
test -e $KITTY_INSTALLATION_DIR/../../MacOS && set -x PATH $PATH "$KITTY_INSTALLATION_DIR/../../MacOS"
|
2022-06-10 17:41:53 +00:00
|
|
|
|
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
|
|
|
|
}
|