Go to file
Bastien Chanot 0bd936bf33 feat(install): gnome-remote-desktop remote login + code-server; drop wkhtmltopdf
Replace the Wayland-incompatible xrdp approach with gnome-remote-desktop system
"Remote Login": idempotent self-signed TLS cert, RDP enable, and an interactive
gate-credential prompt (ensure_rdp_credentials) — skipped when already set, never
hardcoding the secret, with a non-TTY fallback that prints the manual command.
Without gate credentials the RDP server rejects every connection (mstsc 0x904).

Also bundle prior uncommitted installer work: install code-server (skip if
present), swap wkhtmltopdf -> weasyprint for PDF rendering, and append a
login-time dtach auto-router to ~/.profile.

Verified: bash -n + shellcheck clean. Not run live; RDP connection untested.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JSFhCiEgndbRrMf7s8mmth
2026-06-23 17:13:21 +02:00
.claude docs(memory): record scrubbed OpenRouter key as BLK-002 2026-05-27 18:51:19 +02:00
bash fix(bashrc): add ~/.local/bin to PATH in deployed bashrc 2026-05-27 18:56:56 +02:00
bin feat(bin): add dt, dtach-router, claude-provider CLI scripts 2026-05-27 18:51:04 +02:00
vim added vim 2025-12-11 16:53:30 +01:00
.gitignore chore(claude): add onboard config — memory, tasks, audit, gitignore 2026-05-27 18:28:18 +02:00
CLAUDE.md feat(install): expand apt packages, Docker, pipx CLIs, deploy bin/ 2026-05-27 18:51:13 +02:00
install.sh feat(install): gnome-remote-desktop remote login + code-server; drop wkhtmltopdf 2026-06-23 17:13:21 +02:00
README.md fix(bashrc): add ~/.local/bin to PATH in deployed bashrc 2026-05-27 18:56:56 +02:00
remote-install.sh feat(install): add remote-install.sh curl|bash bootstrap 2026-05-27 18:28:37 +02:00

config

Personal dotfiles — vim + bash configuration and a one-shot installer.

Quick start

Install everything (clone + setup) with one command:

curl -fsSL https://git.bchanot.fr/bchanot/config/raw/branch/master/remote-install.sh | bash

(Runs a remote script through bash — see the Install section for what it does and the manual alternative.)

What's inside

Path Purpose
install.sh Installs apt packages + Docker, backs up old config, deploys vim + bashrc (OS-detected), installs CLI scripts.
vim/vimrc Vim config: pathogen, molokai, syntastic (C with -Wall -Werror -Wextra), NERDTree, 42-style canonical class generators (:ClassH, :ClassC).
vim/autoload/ pathogen.vim plugin loader (committed).
vim/colors/ molokai.vim colorscheme (committed).
bash/bashrc-linux bashrc for desktop Linux (git-aware prompt + command timer).
bash/bashrc-osx bashrc for macOS.
bin/dt dtach session manager for claude-in-dtach sessions.
bin/dtach-router SSH-login dashboard to resume dtach sessions (sourced from bashrc).
bin/claude-provider Switch Claude Code between Anthropic and OpenRouter.

Install

One-liner (clone + install)

curl -fsSL https://git.bchanot.fr/bchanot/config/raw/branch/master/remote-install.sh | bash

remote-install.sh ensures git is present, clones the repo to ~/config (or pulls if already there), then runs install.sh. Override with env vars: REPO_URL=... CLONE_DIR=... BRANCH=... curl ... | bash.

Piping a remote script into bash runs unreviewed code over the network. Read remote-install.sh first, or use the manual clone below.

Manual

git clone https://git.bchanot.fr/bchanot/config.git && cd config
./install.sh

No argument — the OS is auto-detected.

What it does:

  1. On Debian/Ubuntu, installs a set of CLI/dev packages via apt-get (see below). Skipped automatically where apt-get is absent (macOS).
  2. Sets up Docker's official apt repo (Ubuntu) and installs the engine + compose plugin — skipped if docker is already present.
  3. Moves any existing ~/.vim, ~/.vimrc, ~/.bashrc, ~/.Sublivim to ~/Oldconfig.
  4. Clones the syntastic and nerdtree vim plugins into ~/.vim/bundle/.
  5. Copies the tracked vim files into ~/.vim and symlinks ~/.vimrc.
  6. Picks the bashrc by OS: macOS → bashrc-osx (falls back to bashrc-linux if missing), everything else → bashrc-linux. Copies it to ~/.bashrc.
  7. Installs Python CLIs via pipx (PyMuPDFpymupdf, Markdownmarkdown_py) — skipped if pipx is absent.
  8. Copies the bin/ scripts (dt, dtach-router, claude-provider) into ~/.local/bin.

Packages installed (apt)

  • Build / VCS / C dev: vim git git-lfs git-filter-repo gcc make pkg-config dkms valgrind shellcheck
  • Net / security / transport: curl gnupg ca-certificates apt-transport-https net-tools openssh-server cifs-utils lftp ftp
  • Shell tooling: unzip tree tmux fzf dtach
  • Runtimes: nodejs python3-pip pipx php-cli
  • Media / doc CLI: ffmpeg wkhtmltopdf poppler-utils qpdf webp libavif-bin
  • Docker: docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin (via Docker's repo)
  • pipx: PyMuPDF (pymupdf), Markdown (markdown_py)

The script is re-runnable: each run re-backs up to ~/Oldconfig (overwriting the previous backup), re-clones plugins, skips Docker if already installed, and re-deploys the bin/ scripts.

Notes: the package list is Debian/Ubuntu-specific, and the Docker repo step assumes Ubuntu. On macOS the whole apt-get block is skipped — install vim/git/toolchain via Homebrew yourself.

CLI scripts (bin/)

Deployed to ~/.local/bin (the deployed bashrc adds this dir to PATH):

  • dt — manage claude-in-dtach sessions (dt ls|at|kill). Needs dtach + fzf.
  • dtach-router — source from ~/.bashrc to get a session dashboard on SSH login. Needs dt, dtach, fzf.
  • claude-provider — switch Claude Code between Anthropic and OpenRouter. OpenRouter mode reads the key from $OPENROUTER_API_KEY (never hardcoded). Export it from a private, untracked file, e.g. ~/.bashrc.local:
    export OPENROUTER_API_KEY="<your-openrouter-key>"
    

Requirements

  • bash, git
  • Debian/Ubuntu apt-get for the package step (optional elsewhere)
  • A bash login shell (zsh users: switch to bash for these prompts to apply)

Lint

shellcheck install.sh bash/bashrc-*