[{"content":" Gavin S. Davies Following up on the intro post, here\u0026rsquo;s the setup I actually work in day to day. None of this is exotic, but it\u0026rsquo;s stable, it\u0026rsquo;s synced across machines, and it\u0026rsquo;s the kind of thing I wish someone had written down for me when I was assembling it.\nThe hardware I run a Windows Dell XPS 17. Windows is the host OS, but almost none of my actual work happens there. It\u0026rsquo;s a shell for WSL.\nWSL as the real environment WSL2 runs Ubuntu, and that\u0026rsquo;s where the research computing happens: analysis code, grid job submission, git, everything. The split works well in practice. Windows handles hardware, drivers, and anything that wants a native GUI; Ubuntu handles the actual software environment, which matters when your collaborations assume a Linux-like target (novagpvm, emphaticgpvm, dunegpvm, and the like all expect that world).\nWezTerm as the terminal WezTerm is the terminal emulator on the Windows side, configured to launch straight into WSL Ubuntu on startup rather than opening a Windows shell first. A couple of details make the WSL boundary less annoying:\nA small startup script attaches to my existing main tmux session, or creates it if it does not exist, so opening a terminal takes me straight back to the same workspace. A gui-startup hook maximizes the window automatically, so every new WezTerm launch starts full screen without me touching it. The config lives at ~/.wezterm.lua inside WSL and gets copied out to the Windows side after edits, since WezTerm on Windows reads its config from the Windows home directory, not the Linux one. The color scheme is Dracula (Tokyo Night is sitting commented out right next to it as the backup option), and that same palette carries through to the prompt below, so more on it there.\ntmux for persistence tmux keeps sessions alive independent of the terminal window, which matters most for long-running or remote work: a grid job monitor, an SSH session to a gpvm, or a long build that I don\u0026rsquo;t want to lose if WezTerm closes. Prefix is remapped from the default Ctrl-b to Ctrl-a, panes split with | and - instead of the default bindings, and Alt+arrow switches panes without needing the prefix at all, which turns out to be the single biggest quality-of-life change once it\u0026rsquo;s muscle memory. tmux-resurrect and tmux-continuum (via TPM) handle the actual persistence: sessions get saved automatically and reconstructed on the next tmux start. After a reboot I get the pane layout and working directories back, although live processes do not survive a WSL shutdown.\nzsh, plugins, and fzf The shell itself is zsh, with a couple of plugins sourced directly rather than through a full framework: zsh-syntax-highlighting for as-you-type command coloring, and zsh-autosuggestions for fish-style history completions as I type. fzf adds fuzzy file and history search on top of that. A small ls wrapper function translates familiar flags (-l, -t, -r) onto eza so directory listings get icons and git status without having to relearn a new command.\nThe useful lesson here was to measure before replacing the most visible piece. My interactive shell was taking roughly 1.6 seconds to start; removing oh-my-zsh and lazy-loading pyenv cut that to roughly 0.8 seconds. nvm is lazy-loaded for the same reason. Changing the prompt alone was not the fix.\nAtuin for shell history Atuin layers a searchable local SQLite database over plain shell history, tagging commands with their directory, exit code, duration, hostname, and session. I keep it local-only for now rather than syncing history between machines. Searching by content, not just recency, turns \u0026ldquo;what was that command I ran last month to fix the CVMFS mount\u0026rdquo; from a scrollback hunt into a two-second lookup. Hooks also record shell commands run by Claude Code and Codex, so I can find what an agent ran later in the same history.\nyadm for dotfiles yadm manages the dotfiles themselves: .zshrc, .tmux.conf, .wezterm.lua, .config/starship.toml, and the various CLAUDE.md/AGENTS.md agent instruction files that now live alongside them. It\u0026rsquo;s a thin wrapper around git, which means the whole home-directory config is just a repo I can clone onto a new machine and be back to a working environment in minutes, encrypted secrets included via yadm encrypt.\nThe rest of the prompt Starship renders the actual prompt: current directory, git branch and status, command duration, and the active Python environment, all on a Dracula-themed palette that matches the WezTerm color scheme, so the whole stack looks like one thing rather than four tools duct taped together. The actual palette, straight out of starship.toml:\nbackground\n#282a36 current line\n#44475a foreground\n#f8f8f2 comment\n#6272a4 cyan\n#8be9fd green\n#50fa7b orange\n#ffb86c pink\n#ff79c6 purple\n#bd93f9 red\n#ff5555 yellow\n#f1fa8c palette = \u0026#34;dracula\u0026#34; [palettes.dracula] background = \u0026#34;#282a36\u0026#34; current_line = \u0026#34;#44475a\u0026#34; foreground = \u0026#34;#f8f8f2\u0026#34; comment = \u0026#34;#6272a4\u0026#34; cyan = \u0026#34;#8be9fd\u0026#34; green = \u0026#34;#50fa7b\u0026#34; orange = \u0026#34;#ffb86c\u0026#34; pink = \u0026#34;#ff79c6\u0026#34; purple = \u0026#34;#bd93f9\u0026#34; red = \u0026#34;#ff5555\u0026#34; yellow = \u0026#34;#f1fa8c\u0026#34; WezTerm runs the same Dracula scheme, so moving from a prompt to a diff to a man page never involves a jarring color shift.\nVS Code, for the GUI moments VS Code Most day-to-day work happens in the terminal, but VS Code covers everything that benefits from a real editor: the Remote - WSL extension connects straight into the Ubuntu filesystem, so it\u0026rsquo;s editing the same files the terminal tools see, not a separate Windows-side copy. The config is intentionally thin. A couple of keybinding tweaks so the terminal\u0026rsquo;s copy/paste behaves the way every other terminal on the machine does:\n[ { \u0026#34;key\u0026#34;: \u0026#34;ctrl+shift+c\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;workbench.action.terminal.copySelection\u0026#34;, \u0026#34;when\u0026#34;: \u0026#34;terminalFocus \u0026amp;\u0026amp; terminalTextSelected\u0026#34; }, { \u0026#34;key\u0026#34;: \u0026#34;ctrl+shift+v\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;workbench.action.terminal.paste\u0026#34;, \u0026#34;when\u0026#34;: \u0026#34;terminalFocus\u0026#34; } ] and an Emacs keybinding extension for anyone (like me) whose fingers learned C-x C-s before they learned Ctrl+S.\nAI coding assistants I run three different AI coding CLIs side by side, mostly because they\u0026rsquo;re each strongest in different places: Anthropic\u0026rsquo;s Claude Code for the bulk of day-to-day coding and agentic work (including most of the work behind this site and the legwork to gather configs and setup details for this post), OpenAI\u0026rsquo;s Codex CLI as a second opinion, and Google\u0026rsquo;s Antigravity for an occasional alternative pass.\nClaude Code OpenAI Codex Antigravity Note Icons via simple-icons, whose SVG shapes are released under CC0. The trademarks and brand identities they represent still belong to Anthropic, OpenAI, and Google respectively. The other half: notes in Obsidian Everything above is the software side. There\u0026rsquo;s an equally load-bearing second brain sitting next to it: a git-tracked Obsidian vault holding research notes, project logs, and daily journal entries, which is where most of this post actually started as a scratch note before it became a blog post.\nNote That vault, how it's organized, and how it fits together with the AI tools above is a big enough topic for its own post. More on that soon. Obsidian Why bother writing this down Partly so I have somewhere to point collaborators and students who ask \u0026ldquo;wait, how do you have your terminal set up,\u0026rdquo; and partly because dotfiles rot if nobody explains the reasoning behind them, only the syntax. A future me re-reading .tmux.conf in two years will at least know why the prefix key is remapped.\n","permalink":"https://gavinsdavies.com/blog/software-setup/","summary":"A tour of the laptop, shell, and terminal tools I actually use every day: a Windows XPS 17, WSL, WezTerm, tmux, zsh, Atuin, yadm, VS Code, and a trio of AI coding CLIs.","title":"My daily software setup"},{"content":" Gavin S. Davies I\u0026rsquo;m starting this blog with a short overview of my current setup, partly as an intro for new visitors and partly to have something to point back to as things change.\nExperiments I split my research time across three long-baseline and hadron-production experiments:\nNOvA, where I serve as Computing Coordinator, and where I\u0026rsquo;ve previously been an analysis convener and software framework manager. DUNE, the flagship next-generation effort to pin down the neutrino mass ordering and search for CP violation in the lepton sector. I\u0026rsquo;m the Mississippi Principal Investigator, and since January 2026 I\u0026rsquo;ve served as DUNE\u0026rsquo;s Global Software Technical Lead. Since May 2026 I also co-lead the collaboration\u0026rsquo;s Phlex Adoption Working Group. EMPHATIC, where I\u0026rsquo;m the Software and Analysis Coordinator, measuring the hadron-production cross sections that feed into systematic uncertainties for both NOvA and DUNE. Group and computing At the University of Mississippi I lead the UM Neutrino group, supervising graduate and undergraduate researchers across these experiments. I\u0026rsquo;m also the Principal Investigator on a DOE EPSCoR award establishing a scientific computing hub at UM, and I coordinate the summer training programme for the Mississippi EPSCoR Scientific Hub (MESH).\nWhat\u0026rsquo;s next I plan to write about the software and computing side of this work in more detail: what \u0026ldquo;software lead\u0026rdquo; actually means day to day, how a collaboration the size of DUNE coordinates its computing, and what running a university computing hub involves. More soon.\n","permalink":"https://gavinsdavies.com/blog/welcome/","summary":"An introduction to my current research setup: the experiments, the roles, and the group behind the work.","title":"What I'm working on right now"}]