nushell: move to modules/home

Signed-off-by: Bloxx12 <charlie@charlieroot.dev>
Change-Id: I6a6a6964b332aee4de78ddbba4d16b55f6783485
This commit is contained in:
Bloxx12 2025-07-21 00:05:24 +02:00
commit 8c3ff343b0
Signed by: faukah
SSH key fingerprint: SHA256:jpYIt4Vkz1NBTQcks/N9OPTfTFxE6KF2W/rV7hrfrIw
10 changed files with 183 additions and 128 deletions

View file

@ -26,7 +26,6 @@
}) })
fish fish
kakoune kakoune
nushell
; ;
}) pkgsFor; }) pkgsFor;
devShells = lib.mapAttrs (_: pkgs: { devShells = lib.mapAttrs (_: pkgs: {

View file

@ -0,0 +1 @@

View file

@ -24,6 +24,102 @@ $env.config = {
} }
} }
$env.config.color_config = {
binary: '#b48ead'
block: '#81a1c1'
cell-path: '#e5e9f0'
closure: '#88c0d0'
custom: '#8fbcbb'
duration: '#ebcb8b'
float: '#bf616a'
glob: '#8fbcbb'
int: '#b48ead'
list: '#88c0d0'
nothing: '#bf616a'
range: '#ebcb8b'
record: '#88c0d0'
string: '#a3be8c'
bool: {|| if $in { '#88c0d0' } else { '#ebcb8b' } }
datetime: {|| (date now) - $in |
if $in < 1hr {
{ fg: '#bf616a' attr: 'b' }
} else if $in < 6hr {
'#bf616a'
} else if $in < 1day {
'#ebcb8b'
} else if $in < 3day {
'#a3be8c'
} else if $in < 1wk {
{ fg: '#a3be8c' attr: 'b' }
} else if $in < 6wk {
'#88c0d0'
} else if $in < 52wk {
'#81a1c1'
} else { 'dark_gray' }
}
filesize: {|e|
if $e == 0b {
'#e5e9f0'
} else if $e < 1mb {
'#88c0d0'
} else {{ fg: '#81a1c1' }}
}
shape_and: { fg: '#b48ead' attr: 'b' }
shape_binary: { fg: '#b48ead' attr: 'b' }
shape_block: { fg: '#81a1c1' attr: 'b' }
shape_bool: '#88c0d0'
shape_closure: { fg: '#88c0d0' attr: 'b' }
shape_custom: '#a3be8c'
shape_datetime: { fg: '#88c0d0' attr: 'b' }
shape_directory: '#88c0d0'
shape_external: '#88c0d0'
shape_external_resolved: '#88c0d0'
shape_externalarg: { fg: '#a3be8c' attr: 'b' }
shape_filepath: '#88c0d0'
shape_flag: { fg: '#81a1c1' attr: 'b' }
shape_float: { fg: '#bf616a' attr: 'b' }
shape_garbage: { fg: '#FFFFFF' bg: '#FF0000' attr: 'b' }
shape_glob_interpolation: { fg: '#88c0d0' attr: 'b' }
shape_globpattern: { fg: '#88c0d0' attr: 'b' }
shape_int: { fg: '#b48ead' attr: 'b' }
shape_internalcall: { fg: '#88c0d0' attr: 'b' }
shape_keyword: { fg: '#b48ead' attr: 'b' }
shape_list: { fg: '#88c0d0' attr: 'b' }
shape_literal: '#81a1c1'
shape_match_pattern: '#a3be8c'
shape_matching_brackets: { attr: 'u' }
shape_nothing: '#bf616a'
shape_operator: '#ebcb8b'
shape_or: { fg: '#b48ead' attr: 'b' }
shape_pipe: { fg: '#b48ead' attr: 'b' }
shape_range: { fg: '#ebcb8b' attr: 'b' }
shape_raw_string: { fg: '#8fbcbb' attr: 'b' }
shape_record: { fg: '#88c0d0' attr: 'b' }
shape_redirection: { fg: '#b48ead' attr: 'b' }
shape_signature: { fg: '#a3be8c' attr: 'b' }
shape_string: '#a3be8c'
shape_string_interpolation: { fg: '#88c0d0' attr: 'b' }
shape_table: { fg: '#81a1c1' attr: 'b' }
shape_vardecl: { fg: '#81a1c1' attr: 'u' }
shape_variable: '#b48ead'
foreground: '#e5e9f0'
background: '#2e3440'
cursor: '#e5e9f0'
empty: '#81a1c1'
header: { fg: '#a3be8c' attr: 'b' }
hints: '#4c566a'
leading_trailing_space_bg: { attr: 'n' }
row_index: { fg: '#a3be8c' attr: 'b' }
search_result: { fg: '#bf616a' bg: '#e5e9f0' }
separator: '#e5e9f0'
}
$env.config.ls = { $env.config.ls = {
clickable_links: true clickable_links: true
use_ls_colors: true use_ls_colors: true
@ -111,7 +207,7 @@ let menus = [
{ {
name: completion_menu name: completion_menu
only_buffer_difference: false only_buffer_difference: false
marker: "(ansi yellow)╋ " marker: $"(ansi yellow)╋ "
type: { type: {
layout: ide layout: ide
min_completion_width: 0 min_completion_width: 0
@ -195,12 +291,10 @@ def switch [] {
# fix sudo by prepending /run/wrappers/bin to the PATH. # fix sudo by prepending /run/wrappers/bin to the PATH.
$env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin') $env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin')
$env.PATH = ($env.PATH | split row (char esep) | prepend '/etc/profiles/per-user/cr/bin')
$env.CARAPACE_BRIDGES = 'inshellisense,fish,carapace,clap,bash' carapace _carapace nushell
$env.CARAPACE_MATCH = 1 | save -f ($nu.user-autoload-dirs | path join carapace.nu)
# Set environment variables according to the path of the clone source ./prompt.nu
$env.TOPIARY_CONFIG_FILE = ($env.HOME | path join .config | path join topiary languages.ncl) source ./zoxide.nu
$env.TOPIARY_LANGUAGE_DIR = ($env.HOME | path join .config | path join topiary languages)
# The prompt indicators are environmental variables that represent
# the state of the prompt.

View file

@ -0,0 +1,22 @@
{
pkgs,
...
}:
{
packages = with pkgs; [
nushell
inshellisense
carapace
];
environment.sessionVariables = {
CARAPACE_BRIDGES = "inshellisense,carapace,clap,bash";
CARAPACE_MATCH = 1;
};
files = {
".config/nushell/config.nu".source = ./config.nu;
".config/nushell/prompt.nu".source = ./prompt.nu;
".config/nushell/zoxide.nu".source = ./zoxide.nu;
};
}

View file

@ -0,0 +1,54 @@
# Initialize hook to add new entries to the database.
export-env {
$env.config = (
$env.config?
| default {}
| upsert hooks { default {} }
| upsert hooks.env_change { default {} }
| upsert hooks.env_change.PWD { default [] }
)
let __zoxide_hooked = (
$env.config.hooks.env_change.PWD | any { try { get __zoxide_hook } catch { false } }
)
if not $__zoxide_hooked {
$env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD | append {
__zoxide_hook: true,
code: {|_, dir| zoxide add -- $dir}
})
}
}
def zoxide_completions [context: string] {
let parts = $context | split row " " | skip 1
{
options: {
sort: false,
completion_algorithm: substring,
case_sensitive: false,
},
completions: (^zoxide query --list --exclude $env.PWD -- ...$parts | lines | first 10)
}
}
# Jump to a directory using only keywords.
def --env --wrapped __zoxide_z [...rest: string@zoxide_completions] {
let path = match $rest {
[] => {'~'},
[ '-' ] => {'-'},
[ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg}
_ => {
zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n"
}
}
cd $path
}
# Jump to a directory using interactive search.
def --env --wrapped __zoxide_zi [...rest:string] {
cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")'
}
# =============================================================================
alias z = __zoxide_z
alias zi = __zoxide_zi

View file

@ -2,7 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
self, sources,
... ...
}: }:
let let
@ -10,10 +10,9 @@ let
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) listOf str package; inherit (lib.types) listOf str package;
inherit (config.meta.mainUser) username; inherit (config.meta.mainUser) username;
nushell = pkgs.callPackage (self + "/packages/nushell") { };
in in
{ {
imports = [ (sources.hjem + "/modules/nixos") ];
options.meta = { options.meta = {
users = mkOption { users = mkOption {
type = listOf str; type = listOf str;
@ -52,7 +51,7 @@ in
}; };
package = mkOption { package = mkOption {
type = package; type = package;
default = nushell; default = pkgs.nushell;
}; };
}; };
}; };
@ -72,7 +71,7 @@ in
"nix" "nix"
"docker" "docker"
]; ];
shell = nushell; shell = pkgs.nushell;
}; };
}; };
}; };

View file

@ -7,12 +7,10 @@ let
inherit (pkgs) lib; inherit (pkgs) lib;
kakoune = pkgs.callPackage ./kakoune.nix { }; kakoune = pkgs.callPackage ./kakoune.nix { };
fish = pkgs.callPackage ./fish { inherit lib; }; fish = pkgs.callPackage ./fish { inherit lib; };
nushell = pkgs.callPackage ./nushell { };
in in
{ {
inherit inherit
kakoune kakoune
fish fish
nushell
; ;
} }

View file

@ -1,47 +0,0 @@
{ pkgs, ... }:
let
inherit (pkgs) lib;
inherit (lib.meta) getExe;
nu-config =
pkgs.writeText "nu-init"
# nu
''
#!/usr/bin/env nu
source ${./config.nu}
source ${./prompt.nu}
let autoload_dir = $nu.user-autoload-dirs.0
mkdir $autoload_dir
let zoxide_path = $autoload_dir | path join zoxide.nu
if not ($zoxide_path | path exists) {
${getExe pkgs.zoxide} init nushell --cmd cd | save -f $zoxide_path
}
# Atuin is too slow, sadly.
# let atuin_path = $autoload_dir | path join atuin.nu
# if not ($atuin_path | path exists) {
# ${getExe pkgs.atuin} init nu | save -f $atuin_path
# }
let carapace_path = $autoload_dir | path join carapace.nu
if not ($carapace_path | path exists) {
${getExe pkgs.carapace} _carapace nushell | save -f $carapace_path
}
'';
packages = import ./packages.nix pkgs;
in
(pkgs.symlinkJoin {
name = "nushell";
paths = [ pkgs.nushell ] ++ packages;
nativeBuildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/nu --add-flags "\
--config ${nu-config}"
'';
}).overrideAttrs
(_: {
passthru = {
shellPath = "/bin/nu";
};
meta.mainProgram = "nu";
})

View file

@ -1,65 +0,0 @@
pkgs:
builtins.attrValues {
inherit (pkgs)
# better cd
zoxide
# pipe viewer
pv
# hex editor
bvi
#better ls
eza
atuin
# better cat
bat
# clipboard
# yazi
serpl
diff-so-fancy
tig
direnv
sesh
mprocs
curlie
entr
procs
sd
# mult
glow
# dua-cli
dust
kondo
# better grep
ripgrep
# IP stuff
dig
# simply the best fetch tool out there
microfetch
fzf
element
difftastic
hexyl
yazi
gnumake
asciinema
inetutils
tokei
starship
wget
cpufetch
watchman
tealdeer
hyperfine
imagemagick
ffmpeg-full
timg
nmap
fd
jq
rsync
figlet
unzip
zip
ouch
;
}