Initial project setup with Nix flake and gitignore
Nix devshell with gh, bubblewrap sandbox, and yolo mode. Gitignore for .claude, .wave internals, secrets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
.claude/*
|
||||||
|
!.claude/commands/
|
||||||
|
.archive/
|
||||||
|
.idea/
|
||||||
|
.wave/*
|
||||||
|
!.wave/pipelines/
|
||||||
|
!.wave/personas/
|
||||||
|
!.wave/contracts/
|
||||||
|
!.wave/prompts/
|
||||||
|
wave.yaml
|
||||||
|
.env
|
||||||
100
flake.nix
Normal file
100
flake.nix
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
{
|
||||||
|
description = "Notesium notes environment";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flake-utils }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { inherit system; config.allowUnfree = true; };
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
|
# claude-code
|
||||||
|
gh
|
||||||
|
bubblewrap
|
||||||
|
];
|
||||||
|
|
||||||
|
shellFunctions = ''
|
||||||
|
yolo() { claude --dangerously-skip-permissions --resume; }
|
||||||
|
'';
|
||||||
|
|
||||||
|
shellFunctionsScript = pkgs.writeText "shell-functions.sh" shellFunctions;
|
||||||
|
|
||||||
|
sandboxScript = pkgs.writeShellScriptBin "enter-sandbox" ''
|
||||||
|
PROJECT_DIR="''${SANDBOX_PROJECT_DIR:-$PWD}"
|
||||||
|
|
||||||
|
BWRAP_ARGS=(
|
||||||
|
--unshare-all
|
||||||
|
--share-net
|
||||||
|
--die-with-parent
|
||||||
|
|
||||||
|
--ro-bind / /
|
||||||
|
--dev /dev
|
||||||
|
--proc /proc
|
||||||
|
|
||||||
|
--tmpfs "$HOME"
|
||||||
|
|
||||||
|
--bind "$PROJECT_DIR" "$PROJECT_DIR"
|
||||||
|
--bind "$HOME/.claude" "$HOME/.claude"
|
||||||
|
--bind "$HOME/.claude.json" "$HOME/.claude.json"
|
||||||
|
|
||||||
|
--ro-bind "$HOME/.gitconfig" "$HOME/.gitconfig"
|
||||||
|
--ro-bind "$HOME/.ssh" "$HOME/.ssh"
|
||||||
|
--ro-bind "$HOME/.config/gh" "$HOME/.config/gh"
|
||||||
|
--ro-bind "$HOME/.local/bin" "$HOME/.local/bin"
|
||||||
|
|
||||||
|
--tmpfs /tmp
|
||||||
|
|
||||||
|
--setenv HOME "$HOME"
|
||||||
|
--setenv PATH "$PATH"
|
||||||
|
--setenv TERM "''${TERM:-xterm}"
|
||||||
|
--setenv SANDBOX_ACTIVE "1"
|
||||||
|
--chdir "$PROJECT_DIR"
|
||||||
|
)
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.claude"
|
||||||
|
touch "$HOME/.claude.json"
|
||||||
|
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
exec ${pkgs.bubblewrap}/bin/bwrap "''${BWRAP_ARGS[@]}" "$@"
|
||||||
|
else
|
||||||
|
exec ${pkgs.bubblewrap}/bin/bwrap "''${BWRAP_ARGS[@]}" ${pkgs.bash}/bin/bash
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells = {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
buildInputs = packages ++ [ sandboxScript ];
|
||||||
|
shellHook = ''
|
||||||
|
export SANDBOX_PROJECT_DIR="$PWD"
|
||||||
|
export SHELL_FUNCTIONS="${shellFunctionsScript}"
|
||||||
|
|
||||||
|
if [ ! -t 0 ] || [ -n "$NIX_DEVELOP_COMMAND" ]; then
|
||||||
|
echo "=== Notesium (sandbox: enter-sandbox) ==="
|
||||||
|
else
|
||||||
|
echo "=== Notesium Sandbox ==="
|
||||||
|
echo "WRITE: $PWD, ~/.claude"
|
||||||
|
exec enter-sandbox ${pkgs.bash}/bin/bash --rcfile <(cat << 'SANDBOX_BASHRC'
|
||||||
|
source "$SHELL_FUNCTIONS"
|
||||||
|
PS1="[sandbox] \w \$ "
|
||||||
|
SANDBOX_BASHRC
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
yolo = pkgs.mkShell {
|
||||||
|
buildInputs = packages;
|
||||||
|
shellHook = ''
|
||||||
|
${shellFunctions}
|
||||||
|
echo "=== Notesium (YOLO - no sandbox) ==="
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user