2026-05-16 10:59:35 +01:00
|
|
|
# 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.
|
2026-05-30 11:11:33 +01:00
|
|
|
{ config, pkgs, lib, ... }:
|
2026-05-16 10:59:35 +01:00
|
|
|
{
|
|
|
|
|
config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") {
|
2026-05-30 15:44:54 +01:00
|
|
|
#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
|
|
|
|
|
];
|
|
|
|
|
|
2026-05-16 10:59:35 +01:00
|
|
|
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 ];
|
2026-05-16 12:10:05 +01:00
|
|
|
|
2026-05-30 16:38:36 +01:00
|
|
|
# Patch the Claude Code extension for Firefox compatibility.
|
|
|
|
|
# Idempotent: sed patterns won't match after first apply.
|
2026-05-16 12:10:05 +01:00
|
|
|
system.activationScripts.claude-code-firefox-fix.text = ''
|
2026-05-30 16:38:36 +01:00
|
|
|
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 <br> to \n) instead of textContent (ignores <br>).
|
|
|
|
|
${pkgs.gnused}/bin/sed -i \
|
|
|
|
|
's|t\.current?.textContent|t.current?.innerText|g' \
|
|
|
|
|
"$d/webview/index.js"
|
2026-05-16 12:10:05 +01:00
|
|
|
done
|
|
|
|
|
'';
|
2026-05-16 10:59:35 +01:00
|
|
|
};
|
|
|
|
|
}
|