From 2c89b8f1694fc312ed9dccbfc4811b7b38db54f0 Mon Sep 17 00:00:00 2001 From: Trevi Awater Date: Mon, 7 Sep 2026 19:08:42 +0200 Subject: [PATCH] Refresh configs, add update.fish, rewrite README as setup runbook - Re-dump brewfile (adds postgresql@16, tree; drops typeit4me) - Refresh claude-settings.json, hosts, and serena_config.yml from machine - Add update.fish to actualise the copied configs in one go - Rewrite README as a complete ordered fresh-machine setup guide Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MN5eka2MuNJP9uCMdTda75 --- README.md | 115 +++++++++++++++++++---- brewfile | 86 ++++++++++++++++- claude-settings.json | 96 ++++++++++++++++++- fish-config.fish | 7 ++ hosts | 1 - serena_config.yml | 214 +++++++++++++++++++++++++++++++++++++++++++ ssh-config | 7 ++ update.fish | 58 ++++++++++++ 8 files changed, 561 insertions(+), 23 deletions(-) create mode 100644 serena_config.yml create mode 100755 update.fish diff --git a/README.md b/README.md index 2afbb45..2b65822 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,133 @@ # macOS Configuration -Personal macOS setup and configuration files. +Personal macOS setup. This README is a complete, ordered runbook for setting up a +fresh machine — follow it top to bottom and you end up with a working environment. -## Setup +Two kinds of files live here: -### 1. Install Homebrew +- **Symlinked** — the file in this repo *is* the live config (fish, starship, ssh, + kube, npm, NuGet). Edit either side, they're the same file. +- **Copied** — files that can't be symlinked (`/etc/hosts`, Claude/Serena settings, + the brewfile). Refresh them from the machine with `./update.fish`. + +## Fresh machine setup + +### 1. Install Command Line Tools and clone this repo + +```bash +xcode-select --install +mkdir -p ~/Repositories/personal +git clone https://github.com/awatertrevi/macos-configuration.git ~/Repositories/personal/macos-configuration +cd ~/Repositories/personal/macos-configuration +``` + +(First clone happens over HTTPS; once 1Password + SSH are set up below, remotes work over SSH.) + +### 2. Install Homebrew ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +eval "$(/opt/homebrew/bin/brew shellenv)" ``` -### 2. Install packages and apps +### 3. Install all packages, casks, and VS Code extensions ```bash brew bundle --file=brewfile ``` -### 3. Symlink configuration files +This installs everything: CLI tools (fish, gh, node, pnpm, uv, opentofu, …), +apps (1Password, iTerm2, Docker Desktop, Fork, VS Code, …), fonts, and +VS Code extensions. + +### 4. Sign in to 1Password and enable the SSH agent + +Open 1Password → Settings → Developer → enable **SSH Agent**. The ssh-config +symlinked below routes all SSH auth through the 1Password agent +(`~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock`), so the +private keys never live on disk — only the `.pub` files referenced in +`ssh-config` need to exist in `~/.ssh/` (1Password can export them, or copy +them from the old machine). + +### 5. Symlink configuration files + +Run from the repo root: ```bash +mkdir -p ~/.config/fish ~/.kube ~/.nuget/NuGet ln -sf $(pwd)/fish-config.fish ~/.config/fish/config.fish -ln -sf $(pwd)/starship.toml ~/.config/starship.toml -ln -sf $(pwd)/ssh-config ~/.ssh/config +ln -sf $(pwd)/starship.toml ~/.config/starship.toml +ln -sf $(pwd)/ssh-config ~/.ssh/config +ln -sf $(pwd)/kube-config ~/.kube/config +ln -sf $(pwd)/.npmrc ~/.npmrc +ln -sf $(pwd)/NuGet.Config ~/.nuget/NuGet/NuGet.Config ``` -### 4. Set Fish as default shell +### 6. Restore the copied configs + +```bash +mkdir -p ~/.claude ~/.serena +cp claude-settings.json ~/.claude/settings.json +cp serena_config.yml ~/.serena/serena_config.yml +sudo cp hosts /etc/hosts +``` + +### 7. Set fish as the default shell ```bash echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells chsh -s /opt/homebrew/bin/fish ``` -### 5. Configure iTerm2 +### 8. Configure iTerm2 -Import `iterm-profile.json` via iTerm2 preferences. Uses 1Password SSH agent for key management. +iTerm2 → Settings → Profiles → Other Actions → **Import JSON Profiles** → +select `iterm-profile.json`, then set it as the default profile. +(Requires the Fira Code Nerd Font installed in step 3.) -## Scripts - -### clone-resoftware-repos.fish - -Clones all repositories from the `resoftware` GitHub organization, organized by customer number: +### 9. Install the .NET 10 SDK ```bash +fish install-dotnet10.fish +``` + +Installs into `~/.dotnet` via the official dotnet-install script and prints the +`fish_add_path` line to persist it if needed. + +### 10. Clone work repositories + +```bash +gh auth login # authenticate the GitHub CLI first fish clone-resoftware-repos.fish ``` -Repos are cloned via SSH into `~/Repositories/{customer-number}/{repo-name}` based on each repo's `customer-number` custom property. Safe to re-run -- already cloned repos are skipped. +Clones every repo in the `resoftware` GitHub org via SSH into +`~/Repositories/{customer-number}/{repo-name}`, based on each repo's +`customer-number` custom property. Safe to re-run — existing clones are skipped. -## Updating the Brewfile +### 11. WireGuard tunnel to home network (optional) + +`meerkoet-proxy.conf` is a WireGuard client config for the home (Fritz!Box) +network. Import it into the WireGuard app (installable from the App Store) via +**Import Tunnel(s) from File**. + +### 12. Manual leftovers + +Things not automated here: + +- Sign in: iCloud, Chrome/Zen, Slack, Spark, Google Drive, Docker Desktop, Todoist. +- JetBrains Toolbox → sign in and install the IDEs you use. +- Grant permissions as apps ask (Bartender, BetterTouchTool, CleanShot, Mos, Cursr). +- Alfred / BetterTouchTool: restore licenses and sync/import preferences. + +## Keeping this repo up to date + +The symlinked files are always current by construction. Refresh the copied ones with: ```bash -brew bundle dump --file=brewfile --force +./update.fish ``` + +It re-dumps the brewfile (`brew bundle dump --force`) and re-copies +`~/.claude/settings.json`, `~/.serena/serena_config.yml`, and `/etc/hosts` into +the repo. Review `git diff` afterwards and commit. diff --git a/brewfile b/brewfile index 7120189..3ebf328 100644 --- a/brewfile +++ b/brewfile @@ -1,61 +1,144 @@ +# Official Amazon AWS command-line interface brew "awscli" +# Azure Storage data transfer utility +brew "azcopy" +# Clone of cat(1) with syntax highlighting and Git integration brew "bat" +# Play, record, convert, and stream select audio and video codecs +brew "ffmpeg" +# User-friendly command-line shell for UNIX-like operating systems brew "fish" +# Command-line fuzzy finder written in Go brew "fzf" +# GitHub command-line tool brew "gh" +# CLI for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more +brew "googleworkspace-cli" +# Open-source build automation tool based on the Groovy and Kotlin DSL +brew "gradle" +# CLI for Infisical brew "infisical" +# Postgres C API library brew "libpq" +# Open-source, cross-platform JavaScript runtime environment brew "node" +# Development kit for the Java programming language +brew "openjdk@17" +# Development kit for the Java programming language +brew "openjdk@21" +# Drop-in replacement for Terraform. Infrastructure as Code Tool brew "opentofu" +# Fast, disk space efficient package manager brew "pnpm" +# PDF rendering library (based on the xpdf-3.0 code base) +brew "poppler" +# Object-relational database system +brew "postgresql@16", link: true +# Cross-shell prompt for astronauts brew "starship" +# SMTP command-line test tool brew "swaks" +# Terminal multiplexer brew "tmux" +# Display directories as trees (with optional color/HTML output) +brew "tree" +# Extremely fast Python package installer and resolver, written in Rust brew "uv" +# Library to create, extract, and modify Windows Imaging files +brew "wimlib" +# Feature-rich command-line audio/video downloader +brew "yt-dlp" +# Password manager that keeps all passwords secure behind one password cask "1password" +# Command-line interface for 1Password +cask "1password-cli" +# Application launcher and productivity software cask "alfred" +# Command-line tools for building and debugging Android apps +cask "android-commandlinetools" +# Integrated CAD, CAM, CAE, and PCB software +cask "autodesk-fusion" +# Menu bar icon organiser cask "bartender" +# Tool to customise input devices and automate computer systems cask "bettertouchtool" +# Web debugging Proxy application cask "charles" +# Anthropic's official Claude AI desktop app cask "claude" +# Terminal-based AI coding assistant cask "claude-code" +# Tool to remove unnecessary files and folders from disk cask "cleanmymac" +# Screen capturing tool cask "cleanshot" +# Customise mouse movements between multiple displays cask "cursr" +# Drivers for DisplayLink docks, adapters and monitors cask "displaylink" +# App to build and share containerised applications and microservices cask "docker-desktop" cask "font-fira-code-nerd-font" +# GIT client cask "fork" +# Finder replacement and FTP, SFTP, WebDAV and Amazon s3 client cask "forklift" +# Kubernetes IDE cask "freelens" +# Free and open-source image editor cask "gimp" +# Web browser cask "google-chrome" +# Client for the Google Drive storage service cask "google-drive" +# Companion app for Home Assistant home automation software cask "home-assistant" cask "insomnium" +# Terminal emulator as alternative to Apple's Terminal app cask "iterm2" +# JetBrains tools manager cask "jetbrains-toolbox" +# Explorer for Azure Storage cask "microsoft-azure-storage-explorer" +# Smooths scrolling and set mouse scroll directions independently cask "mos" +# Reverse proxy, secure introspectable tunnels to localhost +cask "ngrok" +# Knowledge base that works on top of a local folder of plain text Markdown files cask "obsidian" +# Finder Toolbar app to open the current directory in Terminal or Editor cask "openinterminal" +# RAW photo processor +cask "rawtherapee" +# Email client cask "readdle-spark" +# Team communication and collaboration software cask "slack" +# Music streaming service cask "spotify" +# Messaging app with a focus on speed and security cask "telegram" +# Unpacks archive files cask "the-unarchiver" +# To-do list cask "todoist-app" -cask "typeit4me" +# PDF editor cask "updf" +# Open-source code editor cask "visual-studio-code" +# Native desktop client for WhatsApp cask "whatsapp" +# Connect to Windows cask "windows-app" +# Gecko based web browser cask "zen" vscode "alefragnani.project-manager" vscode "anthropic.claude-code" vscode "astro-build.astro-vscode" vscode "dbaeumer.vscode-eslint" vscode "dracula-theme.theme-dracula" +vscode "fwcd.kotlin" +vscode "github.vscode-github-actions" vscode "hashicorp.terraform" vscode "ms-python.debugpy" vscode "ms-python.python" @@ -63,5 +146,6 @@ vscode "ms-python.vscode-pylance" vscode "ms-python.vscode-python-envs" vscode "pkief.material-icon-theme" vscode "redhat.vscode-yaml" +vscode "tomoki1207.pdf" vscode "usernamehw.errorlens" vscode "vue.volar" diff --git a/claude-settings.json b/claude-settings.json index 3d038d0..c930dbd 100644 --- a/claude-settings.json +++ b/claude-settings.json @@ -1,9 +1,99 @@ { + "env": { + "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" + }, + "permissions": { + "defaultMode": "auto" + }, + "model": "fable[1m]", + "hooks": { + "Notification": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Waiting # notchbar-agents-claude-hook" + } + ] + } + ], + "PostToolUse": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Auto # notchbar-agents-claude-hook" + } + ] + } + ], + "PostToolUseFailure": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' ToolFail # notchbar-agents-claude-hook" + } + ] + } + ], + "PreToolUse": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Working # notchbar-agents-claude-hook" + } + ] + } + ], + "SessionEnd": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Ended # notchbar-agents-claude-hook" + } + ] + } + ], + "SessionStart": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Idle # notchbar-agents-claude-hook" + } + ] + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Idle # notchbar-agents-claude-hook" + } + ] + } + ], + "UserPromptSubmit": [ + { + "hooks": [ + { + "type": "command", + "command": "'/Users/trevi/Library/Application Support/Bartender/NotchBar/AgentStatus/hooks/claude-event-hook.sh' Working # notchbar-agents-claude-hook" + } + ] + } + ] + }, "enabledPlugins": { "frontend-design@claude-plugins-official": true, "serena@claude-plugins-official": true }, - "env": { - "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" - } + "tui": "fullscreen", + "skipDangerousModePermissionPrompt": true, + "agentPushNotifEnabled": true, + "skipAutoPermissionPrompt": true } diff --git a/fish-config.fish b/fish-config.fish index 64da244..4edce91 100644 --- a/fish-config.fish +++ b/fish-config.fish @@ -1,6 +1,13 @@ +# The following lines were added by Docker Desktop to add commands to your PATH. +export PATH="$PATH:/Users/trevi/.docker/bin" +# End of Docker Desktop section. + set -g fish_greeting set -gx NUXT_TELEMETRY_DISABLED 1 +# User-installed command-line tools (including Hermes) +fish_add_path "$HOME/.local/bin" + if status is-interactive starship init fish | source set -gx LSCOLORS Exfxcxdxbxegedabagacad diff --git a/hosts b/hosts index c1aee7c..bbd890d 100644 --- a/hosts +++ b/hosts @@ -4,7 +4,6 @@ # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## - 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost diff --git a/serena_config.yml b/serena_config.yml new file mode 100644 index 0000000..c0f9c76 --- /dev/null +++ b/serena_config.yml @@ -0,0 +1,214 @@ +# the language backend to use for code understanding and manipulation. +# Possible values are: +# * LSP: Use the language server protocol (LSP), spawning freely available language servers +# via the SolidLSP library that is part of Serena. +# * JetBrains: Use the Serena plugin in your JetBrains IDE. +# (requires the plugin to be installed and the project being worked on to be open +# in your IDE). +language_backend: LSP + +# line ending convention to use when writing source files. +# Possible values: "lf" (Unix), "crlf" (Windows), "native" (platform default). +# Note that Serena's own files (e.g. memories and configuration files) always use native line endings. +# This setting can be overridden on a per-project basis in project.yml files. +line_ending: native + +# whether to open a graphical window with Serena's logs. +# This is mainly supported on Windows and (partly) on Linux; not available on macOS. +# If you prefer a browser-based tool, use the `web_dashboard` option instead. +# Further information: https://oraios.github.io/serena/02-usage/060_dashboard.html +# +# Being able to inspect logs is useful both for troubleshooting and for monitoring the tool calls, +# especially when using the agno playground, since the tool calls are not always shown, +# and the input params are never shown in the agno UI. +# When used as MCP server for Claude Desktop, the logs are primarily for troubleshooting. +# Note: unfortunately, the various entities starting the Serena server or agent do so in +# mysterious ways, often starting multiple instances of the process without shutting down +# previous instances. This can lead to multiple log windows being opened, and only the last +# window being updated. Since we can't control how agno or Claude Desktop start Serena, +# we have to live with this limitation for now. +gui_log_window: false + +# whether to start the Serena Dashboard, which provides detailed information on your Serena session, +# the current configuration and furthermore allows some settings to be conveniently modified on the fly. +# We strongly recommend to always enable this option! +# If you want to prevent the Dashboard window from being opened on launch, +# set `web_dashboard_open_on_launch` to false (see below). +# Further information: https://oraios.github.io/serena/02-usage/060_dashboard.html +web_dashboard: true + +# the address the web dashboard will listen on (bind address). +web_dashboard_listen_address: 127.0.0.1 + +# whether to open the Dashboard window/browser tab when Serena starts (provided that `web_dashboard` is enabled). +# If set to false, you can still open the dashboard manually: +# * When using an interface that supports a tray icon (see setting `web_dashboard_interface`), +# you can conveniently open the dashboard from the system tray. +# * When using the `browser` interface (no tray icon), so you can only open the dashboard by +# a) telling the LLM to "open the dashboard" (provided that the open_dashboard tool is enabled) or by +# b) manually navigating to http://localhost:24282/dashboard/ in your web browser (actual port +# may be higher if you have multiple instances running; try ports 24283, 24284, etc.) +# Further information: https://oraios.github.io/serena/02-usage/060_dashboard.html +web_dashboard_open_on_launch: false +jetbrains_plugin_server_address: 127.0.0.1 + +# the minimum log level for the GUI log window and the dashboard (10 = debug, 20 = info, 30 = warning, 40 = error) +log_level: 20 + +# whether to trace the communication between Serena and the language servers. +# This is useful for debugging language server issues. +trace_lsp_communication: false + +# advanced configuration option allowing to configure language server-specific options. +# Maps the language key to the options. +# Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available. +# No documentation on options means no options are available. +ls_specific_settings: {} + +# list of paths to ignore across all projects. +# Same syntax as gitignore, so you can use * and **. +# These patterns are merged additively with each project's own ignored_paths. +# Quote patterns that start with `*`, e.g. `"**/bin/**"`. +ignored_paths: [] + +# list of regex patterns which, when matched, mark a memory entry as read‑only. +# For example, "global/.*" will mark all global memories as read-only. +# You can extend the list on a per-project basis in the project.yml configuration file. +read_only_memory_patterns: [] + +# timeout, in seconds, after which tool executions are terminated +tool_timeout: 240 + +# list of tools to be globally excluded +excluded_tools: [] + +# list of optional tools (which are disabled by default) to be included +included_optional_tools: [] + +# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools. +# This cannot be combined with non-empty excluded_tools or included_optional_tools. +fixed_tools: [] + +# list of mode names to that are always to be included in the set of active modes. +# The full set of modes to be activated is base_modes + default_modes + added_modes, +# where added_modes can be defined by projects/CLI parameters. +# If this is undefined/empty, no base modes are included. +# See https://oraios.github.io/serena/02-usage/050_configuration.html#modes +base_modes: +default_modes: +- interactive +- editing + +# Used as default for tools where the apply method has a default maximal answer length. +# Even though the value of the max_answer_chars can be changed when calling the tool, it may make sense to adjust this default +# through the global configuration. +default_max_tool_answer_chars: 150000 + +# the name of the token count estimator to use for tool usage statistics. +# See the `RegisteredTokenCountEstimator` enum for available options. +# +# By default, a very naive character count estimator is used, which simply counts the number of characters. +# You can configure this to TIKTOKEN_GPT4O to use a local tiktoken-based estimator for GPT-4o (will download tiktoken +# data files on first run), or ANTHROPIC_CLAUDE_SONNET_4 which will use the (free of cost) Anthropic API to +# estimate the token count using the Claude Sonnet 4 tokenizer. +token_count_estimator: CHAR_COUNT + +# time budget (seconds) per tool call for the retrieval of additional symbol information +# such as docstrings or parameter information. +# (currently only used by LSP-based tools). +# If the budget is exceeded, Serena stops issuing further retrieval requests +# and returns partial info results. +# 0 disables the budget (no early stopping). Negative values are invalid. +# This is an advanced setting that can help alleviate problems with LSP servers +# that have a slow implementation of request_hover (clangd is one of those) +# or with tool calls that find very many symbols. +# Can be overridden in project.yml. +symbol_info_budget: 10 + +# template for the location of the per-project .serena data folder (memories, caches, etc.). +# Supports the following placeholders: +# $projectDir - the absolute path to the project root directory +# $projectFolderName - the name of the project directory +# Default: "$projectDir/.serena" (data stored inside the project directory) +# Example for a central location: "/projects-metadata/$projectFolderName/.serena" +project_serena_folder_location: "$projectDir/.serena" + +# the list of registered project paths (updated automatically). +projects: +- /Users/trevi/Repositories/personal/xamarin-neo4j + +# list of regex patterns for memories to completely ignore. +# Matching memories will not appear in list_memories or activate_project output +# and cannot be accessed via read_memory or write_memory. +# To access ignored memory files, use the read_file tool on the raw file path. +# This is useful for projects with large numbers of archived memory files. +# You can extend the list on a per-project basis in the project.yml configuration file. +# Example: ["_archive/.*", "_episodes/.*"] +ignored_memory_patterns: [] + +# defines the interface (application mode) used for the web dashboard (if enabled). +# If empty/null, use platform-dependent default. Otherwise, possible values: +# * browser: the dashboard is opened in the default browser (if `web_dashboard_open_on_launch` is true) +# This is supported on all platforms. +# * app: the dashboard is opened in a separate native-like app window with accompanying tray icon, whose +# lifecycle is tied to the Serena process. +# If `web_dashboard_open_on_launch` is false, the dashboard can be conveniently accessed via the tray icon. +# This is supported on Windows and macOS, but note that on macOS, where tray icons are very visible, +# this may result in too many icons being displayed when using multi-agent setups. +# * tray_manager: use a global tray icon to provide access to the dashboards of all running Serena instances, +# opening the dashboard in browser tabs when selected from the tray menu. +# This is EXPERIMENTAL. It is tested on Windows only. We will establish macOS support, but it is yet untested. +# On Linux, this cannot be universally supported, but it may work in some desktop environments. +# On NixOS, when using the package from flake.nix, both modern AppIndicator trays as well as +# older Xorg-/XEmbed-based trays should be supported. +# See https://oraios.github.io/serena/02-usage/060_dashboard.html +web_dashboard_interface: + +# trusted hosts used to access the web dashboard. +# By default, only allow access via local addresses for security reasons. +# If you want to allow access from remote machines, add the hostname used to access the dashboard to this list. +# If the list is empty/undefined, all hosts are trusted. +web_dashboard_trusted_hosts: +- 127.0.0.1 +- localhost + +# command used to launch a JetBrains IDE on demand (only relevant when using the JetBrains language backend) +# If this is non-empty and, at project activation, the Serena JetBrains Plugin server instance corresponding +# to the project is not found, use this command to spawn a new instance. +# Specifically, if this is , then ` ` is launched. +# Provide the full path to the executable/script (e.g., "/usr/bin/idea" or "C:/Users/bob/AppData/Local/JetBrains/Toolbox/scripts/idea.cmd"). +jetbrains_launch_command: + +# list of glob patterns for project root directories that are considered trusted. +# Some project settings will only be applied if the project is trusted. +# A glob pattern can contain the following: +# * matches any sequence of characters except path separators +# ** matches any sequence of characters including path separators +# ? matches any single character except path separators +# [abc] matches any single character in the set (here: a, b, or c) +# Path separators are normalised internally, so on Windows, both / and \ can be used in the patterns. +# Example: +# trusted_project_path_patterns: +# - /home/user/projects/** +# - C:\Users\Anna\Dev\work\** +# The pattern "**" matches any project path, so it can be used to trust all projects. +trusted_project_path_patterns: +- '**' + +# mapping from language server keys to integer priority values (higher = more preferred), which determine +# language server selection during automatic project creation and are used to break ties when multiple +# language servers match an equal number of source files. +# The priority values override Serena's default priorities: +# * 0 = experimental or secondary language servers, which are never auto-detected +# (e.g. `python_*` and `php_*` are "secondary"; also applies to non-programming languages like `json`) +# * 1 = supersets of other languages, which shall be preferred only if they match more files +# (e.g. `vue` and `svelte`, which are supersets of `typescript`) +# * 2 = default priority +# Example: +# ls_priorities: +# python: 0 +# python_basedpyright: 3 +# This example would achieve that `python_basedpyright` becomes the preferred language server for Python, +# giving it a high priority of 3, while the default Python language server is fully excluded from +# auto-detection with priority 0. +ls_priorities: diff --git a/ssh-config b/ssh-config index 52c76f3..cd83f0a 100644 --- a/ssh-config +++ b/ssh-config @@ -10,6 +10,13 @@ Host meerkoet01 Port 22 IdentityFile ~/.ssh/personal.pub +Host meerkoet02 + Hostname 192.168.178.108 + User Administrator + Port 22 + IdentityFile ~/.ssh/meerkoet02 + StrictHostKeyChecking no + Host meerkoet03 Hostname 192.168.178.70 User trevi diff --git a/update.fish b/update.fish new file mode 100755 index 0000000..477f960 --- /dev/null +++ b/update.fish @@ -0,0 +1,58 @@ +#!/usr/bin/env fish + +# Actualise the tracked config files from the current machine state. +# +# Most files in this repo are symlinked into place (see README), so they are +# always current. This script refreshes the ones that are plain copies and +# therefore drift out of date: +# +# * brewfile <- `brew bundle dump` +# * claude-settings.json <- ~/.claude/settings.json +# * hosts <- /etc/hosts +# * serena_config.yml <- ~/.serena/serena_config.yml +# +# Safe to re-run. Review the diff afterwards and commit what you want to keep. + +set -l repo (dirname (status --current-filename)) +cd $repo; or exit 1 + +echo "Actualising config in $repo" +echo + +# --- Homebrew packages, casks and VS Code extensions ----------------------- +if type -q brew + echo "==> Dumping Homebrew bundle -> brewfile" + brew bundle dump --file=brewfile --force +else + echo "==> Skipping brewfile (brew not found)" +end + +# --- Claude Code settings -------------------------------------------------- +set -l claude_settings "$HOME/.claude/settings.json" +if test -f $claude_settings + echo "==> Copying $claude_settings -> claude-settings.json" + cp $claude_settings claude-settings.json +else + echo "==> Skipping claude-settings.json ($claude_settings not found)" +end + +# --- Serena config --------------------------------------------------------- +set -l serena_config "$HOME/.serena/serena_config.yml" +if test -f $serena_config + echo "==> Copying $serena_config -> serena_config.yml" + cp $serena_config serena_config.yml +else + echo "==> Skipping serena_config.yml ($serena_config not found)" +end + +# --- /etc/hosts ------------------------------------------------------------ +if test -f /etc/hosts + echo "==> Copying /etc/hosts -> hosts" + cp /etc/hosts hosts +else + echo "==> Skipping hosts (/etc/hosts not found)" +end + +echo +echo "Done. Review changes:" +echo " git -C $repo diff --stat"