# services/code-server.nix — Web IDE at code.nordhammer.it, protected by Authelia. # # Run as fred so it has access to ~/nixos-config and the rest of the home dir. # Auth is handled entirely by Authelia (auth = "none" disables code-server's own # password gate). After deploy, install the Claude extension from a terminal: # code-server --install-extension anthropic.claude-code # and set ANTHROPIC_API_KEY in ~/.config/code-server/env or via a shell profile. { config, pkgs, lib, ... }: { config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") { #trying to fix code-server claude file programs.nix-ld.enable = true; programs.nix-ld.libraries = with pkgs; [ stdenv.cc.cc.lib zlib openssl curl sqlite ]; services.code-server = { enable = true; host = "127.0.0.1"; port = 4444; auth = "none"; user = "fred"; extraArguments = [ "--disable-telemetry" "--disable-update-check" ]; }; # Make the claude CLI available in code-server's integrated terminal. environment.systemPackages = [ pkgs.claude-code ]; # Patch the Claude Code extension for Firefox compatibility. # Idempotent: sed patterns won't match after first apply. system.activationScripts.claude-code-firefox-fix.text = '' for d in /home/fred/.local/share/code-server/extensions/anthropic.claude-code-*/; do [ -d "$d" ] || continue # CORS fix: Firefox needs crossorigin on the stylesheet link. ${pkgs.gnused}/bin/sed -i \ 's|rel="stylesheet">|rel="stylesheet" crossorigin="anonymous">|g' \ "$d/extension.js" # Firefox contentEditable="plaintext-only" doesn't visually render # newlines on Shift+Enter. Two fixes: # 1. Intercept Shift+Enter to explicitly insert a line break. ${pkgs.gnused}/bin/sed -i \ 's|if(d.key==="Enter"&&!d.shiftKey)|if(d.key==="Enter"\&\&d.shiftKey){d.preventDefault();document.execCommand("insertLineBreak");T7();return}if(d.key==="Enter"\&\&!d.shiftKey)|' \ "$d/webview/index.js" # 2. Read innerText (converts
to \n) instead of textContent (ignores
). ${pkgs.gnused}/bin/sed -i \ 's|t\.current?.textContent|t.current?.innerText|g' \ "$d/webview/index.js" done ''; }; }