diff --git a/modules/home/agents/home-claude.ulu.nix b/modules/home/agents/home-claude.ulu.nix index bac4f41..867a46b 100644 --- a/modules/home/agents/home-claude.ulu.nix +++ b/modules/home/agents/home-claude.ulu.nix @@ -76,8 +76,8 @@ "gh workflow list*" "gh workflow view*" + # not `nix develop*`: `nix develop -c ` would run anything "nix build*" - "nix develop*" "nix eval*" "nix flake archive*" "nix flake check*" @@ -360,6 +360,10 @@ env.CLAUDE_CODE_FORCE_GLOBAL_CACHE = "1"; env.MCP_CONNECTION_NONBLOCKING = "1"; env.USE_BUILTIN_RIPGREP = "0"; + # rea mcp ghidra provider + env.GHIDRA_INSTALL_DIR = "${pkgs.ghidra}/lib/ghidra"; + env.GHIDRA_HEADLESS_MAXMEM = "6G"; + env.REA_GHIDRA_STARTUP_TIMEOUT_MS = "3600000"; # bittersweet alwaysThinkingEnabled = true; diff --git a/modules/home/home-browser-zen.ulu.nix b/modules/home/home-browser-zen.ulu.nix index a40531e..d5749b7 100644 --- a/modules/home/home-browser-zen.ulu.nix +++ b/modules/home/home-browser-zen.ulu.nix @@ -39,7 +39,6 @@ "firefox-extension@steamdb.info" "chrome-mask@overengineer.dev" "{a4cc20af-d30a-4758-a799-2089ce45f452}" - "plasma-browser-integration@kde.org" ] mkExtension; }; profiles.Yamura = { diff --git a/modules/home/home-discord-plugins.ulu.nix b/modules/home/home-discord-plugins.ulu.nix index decbba2..8a84e8a 100644 --- a/modules/home/home-discord-plugins.ulu.nix +++ b/modules/home/home-discord-plugins.ulu.nix @@ -26,7 +26,6 @@ }; equibopStreamFixes.enable = true; equicordHelper.enable = true; - fakeNitro.enable = true; fakeProfileThemes.enable = true; fixSpotifyEmbeds = { enable = true; @@ -35,11 +34,6 @@ fixYoutubeEmbeds.enable = true; gifCollections.enable = true; messageLinkEmbeds.enable = true; - messageLogger = { - enable = true; - ignoreBots = false; - }; - messageLoggerEnhanced.enable = true; newPluginsManager.enable = true; noF1.enable = true; noNitroUpsell.enable = true; @@ -60,7 +54,6 @@ }; showHiddenThings.enable = true; showTimeoutDuration.enable = true; - spotifyCrack.enable = true; streamingCodecDisabler = { enable = true; disableAv1Codec = true; diff --git a/modules/home/home-file-manager-actions.ulu.nix b/modules/home/home-file-manager-actions.ulu.nix index fdbb5de..551c38b 100644 --- a/modules/home/home-file-manager-actions.ulu.nix +++ b/modules/home/home-file-manager-actions.ulu.nix @@ -34,7 +34,14 @@ fi } trap finish EXIT - stem() { printf '%s' "''${1%.*}"; } + # path without the extension; only the file name's own dot counts + # (not one in a directory name, not a dotfile's leading dot) + stem() { + d=$(dirname -- "$1") + b=$(basename -- "$1") + case "$b" in ?*.*) b="''${b%.*}" ;; esac + printf '%s/%s' "$d" "$b" + } resolve_dnxhr() { profile="$1"; shift for f in "$@"; do @@ -203,9 +210,21 @@ notify "PDF rendered" "$# document(s)" ;; pdf-merge) - require_count 2 "$@" 2>/dev/null || true - pdfunite "$@" merged.pdf - notify "PDFs merged" "merged.pdf" + if [ "$#" -lt 2 ]; then + notify-send -a Dolphin -u critical "action failed" \ + "select at least 2 PDFs" || true + exit 2 + fi + # next to the first PDF, never over an existing file + dir=$(dirname -- "$1") + out="$dir/merged.pdf" + n=1 + while [ -e "$out" ]; do + out="$dir/merged-$n.pdf" + n=$((n + 1)) + done + pdfunite "$@" "$out" + notify "PDFs merged" "$(basename -- "$out")" ;; compare) require_count 2 "$@" diff --git a/modules/home/home-ghidra.ulu.nix b/modules/home/home-ghidra.ulu.nix new file mode 100644 index 0000000..acbd221 --- /dev/null +++ b/modules/home/home-ghidra.ulu.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + flake.homeModules.home-ghidra = + { pkgs, ... }: + { + home.packages = [ pkgs.ghidra ]; + home.sessionVariables.GHIDRA_INSTALL_DIR = "${pkgs.ghidra}/lib/ghidra"; + }; +} diff --git a/modules/home/home-ghostty.ulu.nix b/modules/home/home-ghostty.ulu.nix index fdd2080..6d6d0df 100644 --- a/modules/home/home-ghostty.ulu.nix +++ b/modules/home/home-ghostty.ulu.nix @@ -1,11 +1,9 @@ { ... }: { flake.homeModules.home-ghostty = - { pkgs, lib, ... }: + { pkgs, ... }: let - isDarwin = pkgs.stdenv.isDarwin; - - linuxKeybinds = [ + keybinds = [ "alt+r=reload_config" "ctrl+shift+q=close_surface" @@ -38,36 +36,6 @@ "ctrl+shift+e=equalize_splits" ]; - darwinKeybinds = [ - "cmd+s>r=reload_config" - "cmd+s>x=close_surface" - "cmd+s>n=new_window" - - "cmd+s>c=new_tab" - "cmd+s>shift+l=next_tab" - "cmd+s>shift+h=previous_tab" - "cmd+s>comma=move_tab:-1" - "cmd+s>period=move_tab:1" - - "cmd+s>1=goto_tab:1" - "cmd+s>2=goto_tab:2" - "cmd+s>3=goto_tab:3" - "cmd+s>4=goto_tab:4" - "cmd+s>5=goto_tab:5" - "cmd+s>6=goto_tab:6" - "cmd+s>7=goto_tab:7" - "cmd+s>8=goto_tab:8" - "cmd+s>9=goto_tab:9" - - "cmd+s>\\=new_split:right" - "cmd+s>-=new_split:down" - "cmd+s>h=goto_split:left" - "cmd+s>j=goto_split:bottom" - "cmd+s>k=goto_split:top" - "cmd+s>l=goto_split:right" - "cmd+s>z=toggle_split_zoom" - "cmd+s>e=equalize_splits" - ]; in { home.packages = [ pkgs.nerd-fonts.profont ]; @@ -95,10 +63,7 @@ adjust-cell-height = "35%"; background-opacity = 0.96; - keybind = linuxKeybinds ++ lib.optionals isDarwin darwinKeybinds; - } - // lib.optionalAttrs isDarwin { - macos-titlebar-style = "transparent"; + keybind = keybinds; }; }; }; diff --git a/modules/home/home-jujutsu-signing.ulu.nix b/modules/home/home-jujutsu-signing.ulu.nix new file mode 100644 index 0000000..4cea245 --- /dev/null +++ b/modules/home/home-jujutsu-signing.ulu.nix @@ -0,0 +1,17 @@ +{ ... }: +{ + flake.homeModules.home-jujutsu-signing = + { ... }: + { + # Same GPG key as common-git. Commits are signed when pushed rather than + # on every working-copy rewrite, so gpg isn't called on each snapshot. + programs.jujutsu.settings = { + signing = { + backend = "gpg"; + key = "5EA48F7312A42B84"; + behavior = "drop"; + }; + git.sign-on-push = true; + }; + }; +} diff --git a/modules/home/home-shell-tools.ulu.nix b/modules/home/home-shell-tools.ulu.nix index 6315516..261756c 100644 --- a/modules/home/home-shell-tools.ulu.nix +++ b/modules/home/home-shell-tools.ulu.nix @@ -3,7 +3,11 @@ flake.homeModules.home-shell-tools = { ... }: { - programs.starship.enable = true; + programs.starship = { + enable = true; + # nushell has its own jj prompt (home-nushell-prompt) + enableNushellIntegration = false; + }; programs.fzf.enable = true; programs.zoxide = { enable = true; diff --git a/modules/home/home-zsh.ulu.nix b/modules/home/home-zsh.ulu.nix index a027f73..0726c98 100644 --- a/modules/home/home-zsh.ulu.nix +++ b/modules/home/home-zsh.ulu.nix @@ -21,8 +21,6 @@ zstyle ':completion:*' menu select zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' - export MESA_SHADER_CACHE_MAX_SIZE=2G - export MESA_SHADER_CACHE_DIR=/tmp/mesa_shader_cache export PATH="$HOME/.local/bin:$PATH" ''; }; diff --git a/modules/home/nu/home-nushell.ulu.nix b/modules/home/nu/home-nushell.ulu.nix index b74ad5d..b92c53f 100644 --- a/modules/home/nu/home-nushell.ulu.nix +++ b/modules/home/nu/home-nushell.ulu.nix @@ -49,8 +49,6 @@ }; environmentVariables = { - MESA_SHADER_CACHE_MAX_SIZE = "2G"; - MESA_SHADER_CACHE_DIR = "/tmp/mesa_shader_cache"; FZF_DEFAULT_OPTS = "--height 40% --layout=reverse --border"; FZF_DEFAULT_COMMAND = "fd --type f --hidden --follow --exclude .git"; }; diff --git a/modules/home/theme/home-theme-discord.ulu.nix b/modules/home/theme/home-theme-discord.ulu.nix index 2334741..de275b9 100644 --- a/modules/home/theme/home-theme-discord.ulu.nix +++ b/modules/home/theme/home-theme-discord.ulu.nix @@ -136,9 +136,14 @@ ''; in { - xdg.configFile."legcord/quickCss.css".text = '' - ${builtins.readFile ./discord-system24.css} - ${colors} - ''; + # nixcord owns the client's settings.json, so a theme enabled from the + # UI is lost on restart; enable it here instead. + programs.nixcord.config = { + themes.kemuri-system24 = '' + ${builtins.readFile ./discord-system24.css} + ${colors} + ''; + enabledThemes = [ "kemuri-system24.css" ]; + }; }; } diff --git a/modules/home/vscode/home-vscode.ulu.nix b/modules/home/vscode/home-vscode.ulu.nix index 096303f..dbb112b 100644 --- a/modules/home/vscode/home-vscode.ulu.nix +++ b/modules/home/vscode/home-vscode.ulu.nix @@ -169,9 +169,7 @@ "search.followSymlinks" = false; # ── terminal: nushell, same colours as ghostty ──────────────────── - "terminal.integrated.defaultProfile.osx" = "nu"; "terminal.integrated.defaultProfile.linux" = "nu"; - "terminal.integrated.profiles.osx".nu.path = "${pkgs.nushell}/bin/nu"; "terminal.integrated.profiles.linux".nu.path = "${pkgs.nushell}/bin/nu"; "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font', monospace"; "terminal.integrated.fontSize" = 13; @@ -186,12 +184,7 @@ "terminal.integrated.shellIntegration.decorationsEnabled" = "never"; "terminal.integrated.enableVisualBell" = false; - # ── scm (jj colocated: the git view reads the git side) ─────────── - "git.confirmSync" = false; - "git.enableSmartCommit" = true; - "git.autofetch" = false; - "git.openRepositoryInParentFolders" = "never"; - "git.decorations.enabled" = true; + # ── scm (the git extension is off, jjk drives it: home-vscode-jujutsu) "scm.defaultViewMode" = "list"; "scm.diffDecorations" = "gutter"; "diffEditor.ignoreTrimWhitespace" = false;