226 lines
5.7 KiB
Nix
226 lines
5.7 KiB
Nix
{pkgs, ...}: {
|
|
programs.nushell = {
|
|
enable = true;
|
|
|
|
settings = {
|
|
show_banner = false;
|
|
completions = {
|
|
algorithm = "fuzzy";
|
|
case_sensitive = false;
|
|
};
|
|
history = {
|
|
file_format = "sqlite";
|
|
};
|
|
};
|
|
|
|
environmentVariables = {
|
|
COLORTERM = "truecolor";
|
|
COLORFGBG = "15;0";
|
|
TERM_BACKGROUND = "light";
|
|
};
|
|
|
|
extraEnv = ''
|
|
$env.LS_COLORS = (${pkgs.vivid}/bin/vivid generate catppuccin-latte)
|
|
'';
|
|
|
|
extraConfig = ''
|
|
# --- Catppuccin Latte Theme ---
|
|
let theme = {
|
|
rosewater: "#dc8a78"
|
|
flamingo: "#dd7878"
|
|
pink: "#ea76cb"
|
|
mauve: "#8839ef"
|
|
red: "#d20f39"
|
|
maroon: "#e64553"
|
|
peach: "#fe640b"
|
|
yellow: "#df8e1d"
|
|
green: "#40a02b"
|
|
teal: "#179299"
|
|
sky: "#04a5e5"
|
|
sapphire: "#209fb5"
|
|
blue: "#1e66f5"
|
|
lavender: "#7287fd"
|
|
text: "#4c4f69"
|
|
subtext1: "#5c5f77"
|
|
subtext0: "#6c6f85"
|
|
overlay2: "#7c7f93"
|
|
overlay1: "#8c8fa1"
|
|
overlay0: "#9ca0b0"
|
|
surface2: "#acb0be"
|
|
surface1: "#bcc0cc"
|
|
surface0: "#ccd0da"
|
|
base: "#eff1f5"
|
|
mantle: "#e6e9ef"
|
|
crust: "#dce0e8"
|
|
}
|
|
|
|
let scheme = {
|
|
recognized_command: $theme.blue
|
|
unrecognized_command: $theme.text
|
|
constant: $theme.peach
|
|
punctuation: $theme.overlay2
|
|
operator: $theme.sky
|
|
string: $theme.green
|
|
virtual_text: $theme.surface2
|
|
variable: { fg: $theme.flamingo attr: i }
|
|
filepath: $theme.yellow
|
|
}
|
|
|
|
$env.config.color_config = {
|
|
separator: { fg: $theme.surface2 attr: b }
|
|
leading_trailing_space_bg: { fg: $theme.lavender attr: u }
|
|
header: { fg: $theme.text attr: b }
|
|
row_index: $scheme.virtual_text
|
|
record: $theme.text
|
|
list: $theme.text
|
|
hints: $scheme.virtual_text
|
|
search_result: { fg: $theme.base bg: $theme.yellow }
|
|
shape_closure: $theme.teal
|
|
closure: $theme.teal
|
|
shape_flag: { fg: $theme.maroon attr: i }
|
|
shape_matching_brackets: { attr: u }
|
|
shape_garbage: $theme.red
|
|
shape_keyword: $theme.mauve
|
|
shape_match_pattern: $theme.green
|
|
shape_signature: $theme.teal
|
|
shape_table: $scheme.punctuation
|
|
cell-path: $scheme.punctuation
|
|
shape_list: $scheme.punctuation
|
|
shape_record: $scheme.punctuation
|
|
shape_vardecl: $scheme.variable
|
|
shape_variable: $scheme.variable
|
|
empty: { attr: n }
|
|
filesize: {||
|
|
if $in < 1kb {
|
|
$theme.teal
|
|
} else if $in < 10kb {
|
|
$theme.green
|
|
} else if $in < 100kb {
|
|
$theme.yellow
|
|
} else if $in < 10mb {
|
|
$theme.peach
|
|
} else if $in < 100mb {
|
|
$theme.maroon
|
|
} else if $in < 1gb {
|
|
$theme.red
|
|
} else {
|
|
$theme.mauve
|
|
}
|
|
}
|
|
duration: {||
|
|
if $in < 1day {
|
|
$theme.teal
|
|
} else if $in < 1wk {
|
|
$theme.green
|
|
} else if $in < 4wk {
|
|
$theme.yellow
|
|
} else if $in < 12wk {
|
|
$theme.peach
|
|
} else if $in < 24wk {
|
|
$theme.maroon
|
|
} else if $in < 52wk {
|
|
$theme.red
|
|
} else {
|
|
$theme.mauve
|
|
}
|
|
}
|
|
datetime: {|| (date now) - $in |
|
|
if $in < 1day {
|
|
$theme.teal
|
|
} else if $in < 1wk {
|
|
$theme.green
|
|
} else if $in < 4wk {
|
|
$theme.yellow
|
|
} else if $in < 12wk {
|
|
$theme.peach
|
|
} else if $in < 24wk {
|
|
$theme.maroon
|
|
} else if $in < 52wk {
|
|
$theme.red
|
|
} else {
|
|
$theme.mauve
|
|
}
|
|
}
|
|
shape_external: $scheme.unrecognized_command
|
|
shape_internalcall: $scheme.recognized_command
|
|
shape_external_resolved: $scheme.recognized_command
|
|
shape_block: $scheme.recognized_command
|
|
block: $scheme.recognized_command
|
|
shape_custom: $theme.pink
|
|
custom: $theme.pink
|
|
background: $theme.base
|
|
foreground: $theme.text
|
|
cursor: { bg: $theme.rosewater fg: $theme.base }
|
|
shape_range: $scheme.operator
|
|
range: $scheme.operator
|
|
shape_pipe: $scheme.operator
|
|
shape_operator: $scheme.operator
|
|
shape_redirection: $scheme.operator
|
|
glob: $scheme.filepath
|
|
shape_directory: $scheme.filepath
|
|
shape_filepath: $scheme.filepath
|
|
shape_glob_interpolation: $scheme.filepath
|
|
shape_globpattern: $scheme.filepath
|
|
shape_int: $scheme.constant
|
|
int: $scheme.constant
|
|
bool: $scheme.constant
|
|
float: $scheme.constant
|
|
nothing: $scheme.constant
|
|
binary: $scheme.constant
|
|
shape_nothing: $scheme.constant
|
|
shape_bool: $scheme.constant
|
|
shape_float: $scheme.constant
|
|
shape_binary: $scheme.constant
|
|
shape_datetime: $scheme.constant
|
|
shape_literal: $scheme.constant
|
|
string: $scheme.string
|
|
shape_string: $scheme.string
|
|
shape_string_interpolation: $theme.flamingo
|
|
shape_raw_string: $scheme.string
|
|
shape_externalarg: $scheme.string
|
|
}
|
|
$env.config.highlight_resolved_externals = true
|
|
$env.config.explore = {
|
|
status_bar_background: { fg: $theme.text, bg: $theme.mantle },
|
|
command_bar_text: { fg: $theme.text },
|
|
highlight: { fg: $theme.base, bg: $theme.yellow },
|
|
status: {
|
|
error: $theme.red,
|
|
warn: $theme.yellow,
|
|
info: $theme.blue,
|
|
},
|
|
selected_cell: { bg: $theme.blue fg: $theme.base },
|
|
}
|
|
|
|
# --- Custom Commands ---
|
|
def --env open_project [] {
|
|
let base = ($env.HOME | path join "Projects")
|
|
let choice = (
|
|
${pkgs.fd}/bin/fd -t d -d 1 -a . ($base | path join "Personal") ($base | path join "Work")
|
|
| lines
|
|
| each {|p| $p | str replace $"($base)/" "" }
|
|
| str join "\n"
|
|
| ${pkgs.fzf}/bin/fzf --prompt "project > "
|
|
)
|
|
if ($choice | str trim | is-not-empty) {
|
|
cd ($base | path join ($choice | str trim))
|
|
}
|
|
}
|
|
|
|
# --- Keybinding: Ctrl+O for open_project ---
|
|
$env.config.keybindings = ($env.config.keybindings | append [
|
|
{
|
|
name: open_project
|
|
modifier: control
|
|
keycode: char_o
|
|
mode: [emacs vi_insert vi_normal]
|
|
event: {
|
|
send: executehostcommand
|
|
cmd: "open_project"
|
|
}
|
|
}
|
|
])
|
|
'';
|
|
};
|
|
}
|