O2YUP7WC5ZYDHJKNYD46343XCJHHT7H2V46TTUFPANWBN5KFP7MAC 6N6XEOQN4XVAMCOI7FOOAJVLC4FXEC36URB2I4UPLC62SMCADHSQC OXW7NEX2KPFGGVEZEW3BZAJSXV67E5STEWEWMJVUA4AAV37LG3KAC 4OB2JIJDYNWQO552QAMRY27F7Y2DQO4Y5YH4E2UMOKDUZ5BPISJQC MQT74AV47PUYNCX27OMFK6BFN7PP4DX46JAACN2EPRYXUXV7EL3AC YVII7NUI5Z6DPUDQZG2ZVJ6QNQRCEUYX5547IYCMPZI7GJ3GDZQAC OAEKH6K2OSMVEXCRQXUTVAQRQZIZCXGI7EBMUVGNE6XPROLVLM5QC YQHYDW47JG225XJX56JC2BKU6A7KCTQ7BZEZCSI2EJCCTLCUBUVQC 3CJ46F2EWV5MKVQODGD2O4UX6QKMUW6UO7HUSOGNG7WE3MRFL2QQC QYZI7WAY5QWGDDJF7RQGVVNZ4LZCBOOKTTNJDEFTMMDK3ZXP6CTAC AOGOOIMLV2JI2VBXZYBY57RHR4DLKAMIR5W63FP4TKTXVHFQAKLAC 3MYK6W7RI2HWNJ3AK4VKVUBCGZ75M4L6DIHRLUZLOL4OHGG3GG7AC NL74BK76PCP3DH26NB756WU22JMZOT43CEDXPU4ERAMAFVXNB4TAC MNQAE7JL5JJNNG2FYK6DGYQ7GHEST5IW2T2EMNAWVXOIDIVAQOPAC 57YL7DCTGXYT4AYL5E7HPXDT6AUCJ6NOKUAUJYOL4A3AVAOUNY3AC CTCIAQGFIKAIP7JGXIBYWNGE7A5QMF6U662OV3KZOT4HKIWOSTZQC UBB7TTAXVPQQCOVHACKWXSPV2NPARSHREYJB6J3RSEDZZIXPFGOAC oops = "nix run nixpkgs#sqlite -- ${config.directory}/.config/nushell/history.sqlite3 'DELETE FROM history WHERE rowid IN (SELECT rowid FROM history ORDER BY rowid DESC LIMIT 5);'";
oops = "nix run nixpkgs#sqlite -- ${homeDir}/.config/nushell/history.sqlite3 'DELETE FROM history WHERE rowid IN (SELECT rowid FROM history ORDER BY rowid DESC LIMIT 5);'";
packages = [pkgs.bashpkgs.carapacepkgs.direnvpkgs.fishpkgs.inshellisensepkgs.nushellpkgs.zoxidepkgs.zsh];xdg.config.files."direnv/lib/nix-direnv.sh".source = "${pkgs.nix-direnv}/share/nix-direnv/direnvrc";xdg.config.files."nushell/config.nu".text =# nu''${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: val: "alias ${name} = ${val}") aliases)}$env.config.edit_mode = "vi"$env.config.buffer_editor = "${config.environment.sessionVariables.EDITOR}"$env.config.show_banner = false$env.config.footer_mode = "auto"$env.config.use_kitty_protocol = true
hjem.extraModules = singleton {packages = [pkgs.bashpkgs.carapacepkgs.direnvpkgs.fishpkgs.inshellisensepkgs.nushellpkgs.zoxidepkgs.zsh];
$env.config.completions.algorithm = "substring"$env.config.completions.sort = "smart"$env.config.completions.case_sensitive = false$env.config.completions.quick = true$env.config.completions.partial = true$env.config.completions.use_ls_colors = true
xdg.config.files."nushell/config.nu".text =# nu''${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: val: "alias ${name} = ${val}") aliases)}$env.config.edit_mode = "vi"$env.config.buffer_editor = "${config.environment.variables.EDITOR}"$env.config.show_banner = false$env.config.footer_mode = "auto"$env.config.use_kitty_protocol = true
$env.config.rm.always_trash = false
$env.config.completions.algorithm = "substring"$env.config.completions.sort = "smart"$env.config.completions.case_sensitive = false$env.config.completions.quick = true$env.config.completions.partial = true$env.config.completions.use_ls_colors = true
$env.config.cursor_shape.emacs = "block"$env.config.cursor_shape.vi_insert = "line"$env.config.cursor_shape.vi_normal = "block"
$env.config.table.trim.methodology = "wrapping"$env.config.table.trim.wrapping_try_keep_words = true$env.config.table.trim.truncating_suffix = "..."
$env.config.explore.help_banner = true$env.config.explore.exit_esc = true$env.config.explore.command_bar_text = "#C4C9C6"$env.config.explore.highlight.bg = "yellow"$env.config.explore.highlight.fg = "black"
$env.config.cursor_shape.emacs = "block"$env.config.cursor_shape.vi_insert = "line"$env.config.cursor_shape.vi_normal = "block"
$env.config.explore.table.split_line = "#404040"$env.config.explore.table.cursor = true$env.config.explore.table.line_index = true$env.config.explore.table.line_shift = true$env.config.explore.table.line_head_top = true$env.config.explore.table.line_head_bottom = true$env.config.explore.table.show_head = true$env.config.explore.table.show_index = true
$env.config.float_precision = 2$env.config.use_ansi_coloring = "auto"
$env.config.explore.config.cursor_color.bg = "yellow"$env.config.explore.config.cursor_color.fg = "black"
$env.config.explore.help_banner = true$env.config.explore.exit_esc = true$env.config.explore.command_bar_text = "#C4C9C6"$env.config.explore.highlight.bg = "yellow"$env.config.explore.highlight.fg = "black"
$env.config.keybindings = [{name: quit_shellmodifier: controlkeycode: char_dmode: emacsevent: null}{name: quit_shellmodifier: controlkeycode: char_dmode: vi_insertevent: null}{name: quit_shellmodifier: controlkeycode: char_dmode: vi_normalevent: null}]
$env.config.explore.table.split_line = "#404040"$env.config.explore.table.cursor = true$env.config.explore.table.line_index = true$env.config.explore.table.line_shift = true$env.config.explore.table.line_head_top = true$env.config.explore.table.line_head_bottom = true$env.config.explore.table.show_head = true$env.config.explore.table.show_index = true
direnv export json | from json | default {} | load-env}]
$env.config.keybindings = [{name: quit_shellmodifier: controlkeycode: char_dmode: emacsevent: null}{name: quit_shellmodifier: controlkeycode: char_dmode: vi_insertevent: null}{name: quit_shellmodifier: controlkeycode: char_dmode: vi_normalevent: null}]
$env.config.hooks.display_output = {if (term size).columns >= 100 { tee { table --expand | print } } | try { if $in != null { $env.last = $in } }}
$env.config.hooks.env_change.PWD = [{ |before, after| zellij-update-tabname }{||if (which direnv | is-empty) { return }
$env.CARAPACE_BRIDGES = "zsh,fish,bash,inshellisense,clap,jj,nu"mkdir $"($nu.cache-dir)"carapace _carapace nushell | save --force $"($nu.cache-dir)/carapace.nu"
xdg.config.files."nushell/env.nu".text =with theme.withHash;#nu''use std/config ${theme.nushell}$env.config.color_config = (${theme.nushell})
# let carapace_completer = {|spans: list<string>|# # If the current command is an alias, get it's expansion.# let expanded_alias = (scope aliases | where name == $spans.0 | get -i 0 | get -i expansion)
jj util completion nushell | save --force $"($nu.cache-dir)/jj.nu"
# # Overwrite.# let spans = (if $expanded_alias != null {# # put the first word of the expanded alias first in the span# $spans | skip 1 | prepend ($expanded_alias | split row " " | take 1)# } else { $spans })
# let carapace_completer = {|spans: list<string>|# # If the current command is an alias, get it's expansion.# let expanded_alias = (scope aliases | where name == $spans.0 | get -i 0 | get -i expansion)# # Overwrite.# let spans = (if $expanded_alias != null {# # put the first word of the expanded alias first in the span# $spans | skip 1 | prepend ($expanded_alias | split row " " | take 1)# } else { $spans })
# carapace $spans.0 nushell ...$spans# | from json# | if ($in | default [] | any {|| $in.display | str starts-with "ERR"}) { null } else { $in }# }
# carapace $spans.0 nushell ...$spans# | from json# | if ($in | default [] | any {|| $in.display | str starts-with "ERR"}) { null } else { $in }# }
let theme_json = $"($env.HOME)/nixos/modules/theme.json"if ($theme_json | path exists) {let theme = (open $theme_json)$env.THEME_MODE = $theme.mode$env.THEME_SCHEME = $theme.scheme} else {$env.THEME_MODE = "${theme.variant}"$env.THEME_SCHEME = "${theme.colorScheme}"}
let theme_json = $"($env.HOME)/nixos/modules/theme.json"if ($theme_json | path exists) {let theme = (open $theme_json)$env.THEME_MODE = $theme.mode$env.THEME_SCHEME = $theme.scheme} else {$env.THEME_MODE = "${theme.variant}"$env.THEME_SCHEME = "${theme.colorScheme}"}
let status = if not ($exit_code == 0) or $transient {$"(ansi '${base0D}')┫(ansi rst)(if $exit_code == 0 { ansi '${base0D}' } else { ansi '${base08}' })($exit_code)(ansi rst)(ansi '${base0D}')┣(ansi rst)"} else {$"(ansi '${base0D}')━(ansi rst)"}
let status = if not ($exit_code == 0) or $transient {$"(ansi '${base0D}')┫(ansi rst)(if $exit_code == 0 { ansi '${base0D}' } else { ansi '${base08}' })($exit_code)(ansi rst)(ansi '${base0D}')┣(ansi rst)"} else {$"(ansi '${base0D}')━(ansi rst)"}
let dir = if ($jj_root | is-not-empty) {let subpath = $pwd | path relative-to $jj_rootlet subpath = if ($subpath | is-not-empty) {$"(ansi '${base0E}') ⟶ (ansi rst)(ansi '${base0B}')($subpath)(ansi rst)"}$"($jj_root | path basename)($subpath)"} else {let pwd = if ($pwd | str starts-with $env.HOME) {"~" | path join ($pwd | path relative-to $env.HOME)} else { $pwd }
let dir = if ($jj_root | is-not-empty) {let subpath = $pwd | path relative-to $jj_rootlet subpath = if ($subpath | is-not-empty) {$"(ansi '${base0E}') ⟶ (ansi rst)(ansi '${base0B}')($subpath)(ansi rst)"}$"($jj_root | path basename)($subpath)"} else {let pwd = if ($pwd | str starts-with $env.HOME) {"~" | path join ($pwd | path relative-to $env.HOME)} else { $pwd }
let jj_info = if (which jj | is-not-empty) {try {let jj_output = (jj --quiet --color always --ignore-working-copy log --no-graph --revisions @ --template 'separate(" ",bookmarks.join(", "),if(empty, label("empty", "(empty)")),coalesce(surround("\"", "\"",if(description.first_line().substr(0, 26).starts_with(description.first_line()),description.first_line().substr(0, 26),description.first_line().substr(0, 25) ++ "…")),label(if(empty, "empty"), "")),change_id.shortest(),commit_id.shortest(),if(conflict, label("conflict", "(conflict)")),if(divergent, label("divergent prefix", "(divergent)")),if(hidden, label("hidden prefix", "(hidden)")),if(immutable, label("immutable", "(immutable)")),)' err> /dev/null | str trim)
let jj_info = if (which jj | is-not-empty) {try {let jj_output = (jj --quiet --color always --ignore-working-copy log --no-graph --revisions @ --template 'separate(" ",bookmarks.join(", "),if(empty, label("empty", "(empty)")),coalesce(surround("\"", "\"",if(description.first_line().substr(0, 26).starts_with(description.first_line()),description.first_line().substr(0, 26),description.first_line().substr(0, 25) ++ "…")),label(if(empty, "empty"), "")),change_id.shortest(),commit_id.shortest(),if(conflict, label("conflict", "(conflict)")),if(divergent, label("divergent prefix", "(divergent)")),if(hidden, label("hidden prefix", "(hidden)")),if(immutable, label("immutable", "(immutable)")),)' err> /dev/null | str trim)
# Only show parent bookmark if current change has no bookmarks.let jj_has_bookmark = (jj --quiet --color always log --no-graph --revisions @ --template 'bookmarks.len() > 0' err> /dev/null | str trim) == "true"let jj_parent = if not $jj_has_bookmark {(jj --quiet --color always --ignore-working-copy log --no-graph --revisions 'heads(::@ & bookmarks())' --template 'bookmarks ++ "\n"' err> /dev/null | lines | str join ",")} else { "" }
# Only show parent bookmark if current change has no bookmarks.let jj_has_bookmark = (jj --quiet --color always log --no-graph --revisions @ --template 'bookmarks.len() > 0' err> /dev/null | str trim) == "true"let jj_parent = if not $jj_has_bookmark {(jj --quiet --color always --ignore-working-copy log --no-graph --revisions 'heads(::@ & bookmarks())' --template 'bookmarks ++ "\n"' err> /dev/null | lines | str join ",")} else { "" }
let combined = if ($jj_parent_display | is-not-empty) and ($jj_output | is-not-empty) {$" ($jj_parent_display) ($jj_output)"} else if ($jj_parent_display | is-not-empty) {$" ($jj_parent_display)"} else if ($jj_output | is-not-empty) {$" ($jj_output)"} else { "" }$combined} catch { "" }} else { "" }
let combined = if ($jj_parent_display | is-not-empty) and ($jj_output | is-not-empty) {$" ($jj_parent_display) ($jj_output)"} else if ($jj_parent_display | is-not-empty) {$" ($jj_parent_display)"} else if ($jj_output | is-not-empty) {$" ($jj_output)"} else { "" }$combined} catch { "" }} else { "" }
let ms = ($env.CMD_DURATION_MS | into int)let duration = if $transient or $ms > 1000 {let secs = $ms / 1000 | math floorif $transient and $ms < 1000 {$" (ansi '${base0A}')($ms)ms"} else {$" (ansi '${base0A}')($secs)s"}} else { "" }
let ms = ($env.CMD_DURATION_MS | into int)let duration = if $transient or $ms > 1000 {let secs = $ms / 1000 | math floorif $transient and $ms < 1000 {$" (ansi '${base0A}')($ms)ms"} else {$" (ansi '${base0A}')($secs)s"}} else { "" }
let prompt_line = [(char nl)$bar$status$bar$host" "$directory" "(if ($jj_info | is-not-empty) {[$"(ansi '${base0D}')━┫(ansi rst)"$jj_info$" (ansi '${base0D}')┣━(ansi rst)"] | str join} else {[$bar$bar$bar] | str join})$duration(char nl)] | str join
let prompt_line = [(char nl)$bar$status$bar$host" "$directory" "(if ($jj_info | is-not-empty) {[$"(ansi '${base0D}')━┫(ansi rst)"$jj_info$" (ansi '${base0D}')┣━(ansi rst)"] | str join} else {[$bar$bar$bar] | str join})$duration(char nl)] | str join
$env.PROMPT_COMMAND = { || prompt }$env.PROMPT_COMMAND_RIGHT = ""$env.TRANSIENT_PROMPT_COMMAND = { || prompt --transient }$env.TRANSIENT_PROMPT_COMMAND_RIGHT = ""
$env.PROMPT_COMMAND = { || prompt }$env.PROMPT_COMMAND_RIGHT = ""$env.TRANSIENT_PROMPT_COMMAND = { || prompt --transient }$env.TRANSIENT_PROMPT_COMMAND_RIGHT = ""
$env.PROMPT_INDICATOR = " "$env.PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR'';
$env.PROMPT_INDICATOR = " "$env.PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR'';};
environment.sessionVariables = {BAT_THEME_LIGHT = "gruvbox-light";BAT_THEME_DARK = "gruvbox-dark";MANPAGER = pager;PAGER = pager;BAT_PAGER = "${less} --quit-if-one-screen --RAW-CONTROL-CHARS";};};
environment.sessionVariables = {BAT_THEME_LIGHT = "gruvbox-light";BAT_THEME_DARK = "gruvbox-dark";MANPAGER = pager;PAGER = pager;BAT_PAGER = "${less} --quit-if-one-screen --RAW-CONTROL-CHARS";RIPGREP_CONFIG_PATH = "%h/.config/ripgrep/ripgreprc";};
xdg.config.files."ripgrep/ripgreprc".text = ''--line-number--smart-case'';};ezaConfig ={ pkgs, ... }:{packages = [pkgs.eza];
flake.modules.hjem.shell-tools ={ pkgs, lib, ... }:letinherit (lib.lists) flatten;bat = batConfig { inherit pkgs lib; };ripgrep = ripgrepConfig { inherit pkgs; };eza = ezaConfig { inherit pkgs; };other = otherConfig { inherit pkgs; };in{packages =[bat.packagesripgrep.packageseza.packagesother.packages]|> flatten;environment.sessionVariables =bat.environment.sessionVariables // ripgrep.environment.sessionVariables;xdg.config.files = ripgrep.xdg.config.files;};
flake.modules.nixos.shell-tools = shellToolsBase;flake.modules.darwin.shell-tools = shellToolsBase;