nix/moduler/fish.nix
2026-04-27 14:46:44 +02:00

172 lines
7.4 KiB
Nix

{
pkgs,
lib,
config,
...
}:
let
inherit (lib) concatStringsSep mkOption types;
mkFzfOptionsString = lines: concatStringsSep " " lines;
catppuccinFzfOptions = {
mocha = mkFzfOptionsString [
"--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8"
"--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc"
"--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
"--color=selected-bg:#45475a"
"--multi"
];
latte = mkFzfOptionsString [
"--color=bg+:#ccd0da,bg:#eff1f5,spinner:#dc8a78,hl:#d20f39"
"--color=fg:#4c4f69,header:#d20f39,info:#1e66f5,pointer:#dc8a78"
"--color=marker:#fe640b,fg+:#4c4f69,prompt:#1e66f5,hl+:#d20f39"
"--color=selected-bg:#acb0be"
"--multi"
];
};
in
{
options.fish = {
theme = mkOption {
type = types.enum (builtins.attrNames catppuccinFzfOptions);
default = "mocha";
description = "Catppuccin theme variant used for Fish integrations such as FZF.";
example = "latte";
};
};
config = {
programs.fish = {
enable = true;
plugins = [
{
name = "z";
src = pkgs.fetchFromGitHub {
owner = "jethrokuan";
repo = "z";
rev = "e0e1b9dfdba362f8ab1ae8c1afc7ccf62b89f7eb";
sha256 = "0dbnir6jbwjpjalz14snzd3cgdysgcs3raznsijd6savad3qhijc";
};
}
{
name = "autopair";
src = pkgs.fishPlugins.autopair.src;
}
{
name = "foreign-env";
src = pkgs.fishPlugins.foreign-env.src;
}
{
name = "fzf";
src = pkgs.fishPlugins.fzf.src;
}
{
name = "done";
src = pkgs.fishPlugins.done.src;
}
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
shellAbbrs = {
ls = "eza -l";
lg = "lazygit";
ka = "kubectl apply -f";
e = "nvim";
};
interactiveShellInit =
let
fzfOpts = catppuccinFzfOptions.${config.fish.theme};
in
''
fish_vi_key_bindings
set fish_greeting
set FLAKE_DIR "/home/fw/nix"
set -l host_name (hostname)
function load_secret --argument-names env_name preferred_secret fallback_secret
if test -r "/run/secrets/$preferred_secret"
set -gx $env_name (string trim (cat "/run/secrets/$preferred_secret"))
else if test -r "/run/secrets/$fallback_secret"
set -gx $env_name (string trim (cat "/run/secrets/$fallback_secret"))
end
end
if test -r /run/secrets/jira_token
set -gx JIRA_API_TOKEN (string trim (cat /run/secrets/jira_token))
end
load_secret GOOGLE_OAUTH_CLIENT_ID "google_oauth_client_id_$host_name" google_oauth_client_id
load_secret GOOGLE_OAUTH_CLIENT_SECRET "google_oauth_client_secret_$host_name" google_oauth_client_secret
load_secret USER_GOOGLE_EMAIL "user_google_email_$host_name" user_google_email
load_secret MSSQL_SERVER "mssql_server_$host_name" mssql_server
load_secret MSSQL_DATABASE "mssql_database_$host_name" mssql_database
load_secret MSSQL_USER "mssql_user_$host_name" mssql_user
load_secret MSSQL_PASSWORD "mssql_password_$host_name" mssql_password
load_secret MSSQL_PORT "mssql_port_$host_name" mssql_port
load_secret MSSQL_ENCRYPT "mssql_encrypt_$host_name" mssql_encrypt
load_secret MSSQL_WINDOWS_AUTH "mssql_windows_auth_$host_name" mssql_windows_auth
load_secret VAULT_ADDR "vault_addr_$host_name" vault_addr
load_secret VAULT_TOKEN "vault_token_$host_name" vault_token
load_secret VAULT_NAMESPACE "vault_namespace_$host_name" vault_namespace
set -gx GITHUB_PERSONAL_ACCESS_TOKEN (cat /run/secrets/github_token)
set -gx GITHUB_HOST "https://github.com"
set -gx GRAFANA_SERVICE_ACCOUNT_TOKEN (cat /run/secrets/grafana_token)
set -gx GRAFANA_URL "https://monitoring.internalifacts.se"
set -Ux FZF_CTRL_R_OPTS "--reverse"
set -Ux FZF_TMUX_OPTS "-p"
set -e GOROOT
set -x -U GOPATH $HOME/.go
gh completion -s fish > ~/.config/fish/completions/gh.fish
set -gx PATH $PATH $HOME/scripts
set -gx PATH $PATH $HOME/.krew/bin
set -gx OPENCODE_DEFAULT_PROMPT_FILE "$HOME/.config/opencode/session-prompt.txt"
function oc
set -l passthrough_subcommands completion acp mcp attach debug providers auth agent upgrade uninstall serve web models stats export import github pr session plugin plug db
if test (count $argv) -gt 0
if string match -qr '^-' -- "$argv[1]"
command opencode $argv
return $status
end
for arg in $argv
if test "$arg" = "--prompt"
command opencode $argv
return $status
end
end
if contains -- "$argv[1]" $passthrough_subcommands
command opencode $argv
return $status
end
end
if test -r "$OPENCODE_DEFAULT_PROMPT_FILE"
set -l session_prompt (string collect < "$OPENCODE_DEFAULT_PROMPT_FILE")
command opencode --prompt "$session_prompt" $argv
else
command opencode $argv
end
end
complete -e -c oc
complete -c oc -w opencode
if not set -q SSH_AUTH_SOCK
eval (ssh-agent -c)
ssh-add ~/.ssh/id_ed25519 >/dev/null 2>&1
set SSH_AUTH_SOCK /home/fw/.bitwarden-ssh-agent.sock
end
set -Ux FZF_DEFAULT_OPTS "${fzfOpts}"
functions -e load_secret
'';
};
};
}