diff --git a/.conclaude.yaml b/.conclaude.yaml index c22732cb..e264519d 100644 --- a/.conclaude.yaml +++ b/.conclaude.yaml @@ -39,11 +39,6 @@ stop: # Message to send when infinite mode is enabled infiniteMessage: "continue working on the task" - # Alternative to infinite mode - run for a specific number of rounds - # When set, Claude will continue for the specified number of rounds - rounds: null - # Example: rounds: 3 - # Pre-tool-use hook configuration - runs before tools are executed # All file protection rules are consolidated in this section preToolUse: diff --git a/.config/mouseless/config.yaml b/.config/mouseless/config.yaml new file mode 100644 index 00000000..8fc6c042 --- /dev/null +++ b/.config/mouseless/config.yaml @@ -0,0 +1,428 @@ +app_version: 0.4.0-preview.2 +behavior_configs: + - base_move_speed: 5.0 + base_wheel_speed: 16.0 + free_mode_auto_off_s: 10 + grid_action_level: subgrid + hide_cursor_on_click: false + hide_location: bottom_left + initial_action_location: screen_center + initial_overlay_monitor: last_used + move_duration_ms: 100 + move_real_cursor_with_virtual: false + move_speed_multiplier: 3.0 + movement_easing: 0.1 + multi_action_timeout_ms: 400 + name: main_behavior + send_escape_after_global_alt_tap__windows: true + tap_threshold_ms: 300 + wheel_easing: 0.1 + wheel_speed_multiplier: 4.0 + wheel_step_size: 100.0 + wheel_step_size_large: 500.0 +classname: AppConfig +custom_monitor_assignments: [] +display_input: none +event_tap_location: hid_head +grid_configs: + - always_show_subgrid: false + grid_defn: + - border_width: 0.0 + callback: build_cell_strings + keys: ASDFG HJKL; + num_cells_x: 10 + num_cells_y: 1 + - border_width: 1.0 + callback: build_cell_strings + keys: QWERT YUIOP ASDFG HJKL; ZXCVB NM,./ + num_cells_x: 1 + num_cells_y: 26 + - border_width: 0.0 + callback: apply_strings_and_subgrid_to_cells + keys: "" + num_cells_x: 2 + num_cells_y: 1 + hold_subgrid_key_for_nudge: false + name: position_based_columns + nudges_per_cell: 4 + strategy: subgrid + subgrid_dims: + - 10 + - 3 + subgrid_mouse_action_keys: QWERT YUIOP ASDFG HJKL; ZXCVB NM,./ +keyboard_layout: + id: com.apple.keylayout.ABC + name: ABC + vk_to_char: + 0: + - a + - A + 1: + - s + - S + 2: + - d + - D + 3: + - f + - F + 4: + - h + - H + 5: + - g + - G + 6: + - z + - Z + 7: + - x + - X + 8: + - c + - C + 9: + - v + - V + 10: + - "\xA7" + - "\xB1" + 11: + - b + - B + 12: + - q + - Q + 13: + - w + - W + 14: + - e + - E + 15: + - r + - R + 16: + - y + - Y + 17: + - t + - T + 18: + - "1" + - "!" + 19: + - "2" + - "@" + 20: + - "3" + - "#" + 21: + - "4" + - $ + 22: + - "6" + - ^ + 23: + - "5" + - "%" + 24: + - "=" + - + + 25: + - "9" + - ( + 26: + - "7" + - "&" + 27: + - "-" + - _ + 28: + - "8" + - "*" + 29: + - "0" + - ) + 30: + - "]" + - "}" + 31: + - o + - O + 32: + - u + - U + 33: + - "[" + - "{" + 34: + - i + - I + 35: + - p + - P + 36: "\r" + 37: + - l + - L + 38: + - j + - J + 39: + - "'" + - '"' + 40: + - k + - K + 41: + - ; + - ":" + 42: + - \ + - "|" + 43: + - "," + - < + 44: + - / + - "?" + 45: + - n + - N + 46: + - m + - M + 47: + - . + - ">" + 48: "\t" + 49: " " + 50: + - "`" + - "~" + 51: "\b" + 52: "\x03" + 53: "\e" + 65: . + 66: + - "\x1D" + - "*" + 67: "*" + 69: + + 70: + - "\x1C" + - + + 71: "\e" + 72: + - "\x1F" + - "=" + 75: / + 76: "\x03" + 77: + - "\x1E" + - / + 78: "-" + 81: "=" + 82: "0" + 83: "1" + 84: "2" + 85: "3" + 86: "4" + 87: "5" + 88: "6" + 89: "7" + 91: "8" + 92: "9" + 96: "\x10" + 97: "\x10" + 98: "\x10" + 99: "\x10" + 100: "\x10" + 101: "\x10" + 102: "\x10" + 103: "\x10" + 104: "\x10" + 105: "\x10" + 106: "\x10" + 107: "\x10" + 108: "\x10" + 109: "\x10" + 110: "\x10" + 111: "\x10" + 112: "\x10" + 113: "\x10" + 114: "\x05" + 115: "\x01" + 116: "\v" + 117: "\x7F" + 118: "\x10" + 119: "\x04" + 120: "\x10" + 121: "\f" + 122: "\x10" + 123: "\x1C" + 124: "\x1D" + 125: "\x1F" + 126: "\x1E" +keymaps: + - entries: + back mouse button: null + back mouse button (w/o overlay): null + close UI element: Escape + cycle click count: null + cycle font: null + cycle font reverse: null + cycle grid action level: null + cycle mouse action type: null + cycle mouse button: null + decrease overlay opacity: ArrowDown + edit config: Tab + enter free mode: null + execute mouse action: Space + execute mouse move: ControlRight tap + exit free mode: Escape + forward mouse button: null + forward mouse button (w/o overlay): null + hide overlay: Escape + hold for back button: null + hold for drag: CommandLeft + hold for forward button: null + hold for middle button: null + hold for move: OptionLeft + hold for right button: ControlLeft + hold for speed decrease: null + hold for speed increase: ShiftLeft + increase overlay opacity: ArrowUp + jump to bottom: null + jump to left edge: null + jump to right edge: null + jump to top: null + left mouse button: null + left mouse button (w/o overlay): null + middle mouse button: null + middle mouse button (w/o overlay): null + move down: null + move left: null + move right: null + move up: null + release hold/drag: null + repeat last mouse action: null + right mouse button: null + right mouse button (w/o overlay): null + show overlay: cmd+shift+alt+ctrl+z + subgrid nudge down: null + subgrid nudge left: null + subgrid nudge right: null + subgrid nudge up: null + switch monitor left: null + switch monitor right: null + toggle continuous mode: null + toggle continuous mode until closed: null + toggle free mode: ControlRight tap + toggle overlay: null + toggle overlay lock: null + undo last key: Backspace + wheel down: J + wheel down fast: null + wheel left: H + wheel left fast: null + wheel right: L + wheel right fast: null + wheel step down: null + wheel step down large: null + wheel step left: null + wheel step left large: null + wheel step right: null + wheel step right large: null + wheel step up: null + wheel step up large: null + wheel up: K + wheel up fast: null + name: mac +monitor_assignment_mode: auto +name: "" +style_configs: + - always_on_subgrid_rgba: + - 0.58 + - 1.0 + - 0.42 + - 0.2 + background_rgba: + - 0.05 + - 0.2 + - 0.0 + - 0.35 + char_spacing_cell_width_ratio: 0.5 + char_spacing_font_size_ratio: 0.5 + char_spacing_strategy: cell_width_relative + cursor_drag_rgba: + - 0.0 + - 0.5 + - 1.0 + - 0.7 + cursor_move_rgba: + - 0.75 + - 0.41 + - 0.92 + - 0.7 + cursor_other_rgba: + - 1.0 + - 1.0 + - 1.0 + - 0.7 + cursor_rgba: + - 0.34 + - 1.0 + - 0.0 + - 0.8 + cursor_right_button_rgba: + - 0.92 + - 0.32 + - 0.32 + - 0.7 + cursor_size: 7 + font_family: "[Apple System Font]" + font_size_multiplier: 0.5 + font_weight: 500 + grid_line_style: dots + grid_rgba: + - 0.58 + - 1.0 + - 0.42 + - 1.0 + highlight_animation_ms: 0 + highlight_rgba: + - 0.0 + - 1.0 + - 0.05 + - 0.2 + name: dark_bg + show_initial_highlight: false + subgrid_font_size_multiplier: 0.75 + subgrid_rgba: + - 0.58 + - 1.0 + - 0.42 + - 1.0 + subgrid_text_rgba: + - 0.996078431372549 + - 0.996078431372549 + - 0.996078431372549 + - 1.0 + text_rgba: + - 1.0 + - 1.0 + - 1.0 + - 1.0 + text_shadow_blur_radius: 4.0 + text_shadow_offset: + - 0.0 + - 0.0 + text_shadow_rgba: + - 0.28 + - 1.0 + - 0.0 + - 1.0 + text_y_offset: 0.0 + window_opacity: 1.0 diff --git a/.stowrc b/.stowrc index 8a89374c..43e36c51 100644 --- a/.stowrc +++ b/.stowrc @@ -36,3 +36,4 @@ --ignore AGENTS.md --ignore .claude --ignore .crush +--ignore result diff --git a/.zshrc b/.zshrc index 0e7e429d..07e7013e 100644 --- a/.zshrc +++ b/.zshrc @@ -59,7 +59,6 @@ alias git-reset='git checkout main && git pull' # nvimfi is find all files ignoring .git alias nvimfi='nvim "$(find . -type f -path "./.git" -prune -o -type f -not -path "*/\.*" -print | fzf --preview "bat --color=always {}")"' -alias latest='git add . && git commit -m "latest" && git push' alias nxi='nix' alias wtr='git worktree remove' alias wtl='git worktree list' diff --git a/flake.lock b/flake.lock index e08a88b9..15ee232b 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1763922789, - "narHash": "sha256-XnkWjCpeXfip9tqYdL0b0zzBDjq+dgdISvEdSVGdVyA=", + "lastModified": 1764714051, + "narHash": "sha256-AjcMlM3UoavFoLzr0YrcvsIxALShjyvwe+o7ikibpCM=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a20a0e67a33b6848378a91b871b89588d3a12573", + "rev": "a43bedcceced5c21ad36578ed823e6099af78214", "type": "github" }, "original": { @@ -71,11 +71,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1752979451, - "narHash": "sha256-0CQM+FkYy0fOO/sMGhOoNL80ftsAzYCg9VhIrodqusM=", + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "27cf1e66e50abc622fb76a3019012dc07c678fac", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", "type": "github" }, "original": { @@ -110,11 +110,11 @@ ] }, "locked": { - "lastModified": 1764075838, - "narHash": "sha256-kGteNhGINhOvbj9XvDhxfyqC39YXbKr3TcfVMxi9ccU=", + "lastModified": 1764827643, + "narHash": "sha256-JKUigAKdEJzWD6FL31p0i2rnu/MRpcRMSuSlES+810I=", "owner": "Saghen", "repo": "blink.cmp", - "rev": "f13226770b4947eb7e66befbeb53c3db39f13e25", + "rev": "57d900e6982f63c7cde689aa06d8af76c8da083e", "type": "github" }, "original": { @@ -156,11 +156,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1764976694, - "narHash": "sha256-FrcgzCSKaQKqF0g3y9vKPUcHOxzxU3o9WPprFoyhtcE=", + "lastModified": 1765195113, + "narHash": "sha256-BTDd1dlMArNoZrUe1IIV36vsnhA0IdT7SW7uixIPqTs=", "owner": "connerohnesorge", "repo": "conclaude", - "rev": "031a97b13e6b7af3ff84c570fc9274ee3adc4d37", + "rev": "2c1cfb8df3a634d6c892aab8b579362bf007fcca", "type": "github" }, "original": { @@ -276,11 +276,11 @@ ] }, "locked": { - "lastModified": 1764110879, - "narHash": "sha256-xanUzIb0tf3kJ+PoOFmXEXV1jM3PjkDT/TQ5DYeNYRc=", + "lastModified": 1764627417, + "narHash": "sha256-D6xc3Rl8Ab6wucJWdvjNsGYGSxNjQHzRc2EZ6eeQ6l4=", "owner": "nix-community", "repo": "disko", - "rev": "aecba248f9a7d68c5d1ed15de2d1c8a4c994a3c5", + "rev": "5a88a6eceb8fd732b983e72b732f6f4b8269bef3", "type": "github" }, "original": { @@ -314,11 +314,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1758112371, - "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", + "lastModified": 1764724327, + "narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", + "rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047", "type": "github" }, "original": { @@ -394,11 +394,11 @@ "flake-compat_5": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "lastModified": 1765121682, + "narHash": "sha256-4VBOP18BFeiPkyhy9o4ssBNQEvfvv1kXkasAYd0+rrA=", "owner": "edolstra", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "65f23138d8d09a92e30f1e5c87611b23ef451bf3", "type": "github" }, "original": { @@ -493,11 +493,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1763759067, + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", "type": "github" }, "original": { @@ -679,11 +679,11 @@ "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1764278522, - "narHash": "sha256-p8Td183XnasIwUOpNGALCn6nTqLn37EdI8bpNWtsiaA=", + "lastModified": 1765173468, + "narHash": "sha256-BtzbbWM7C8kRimjnj7BOkhHnRyZtJucfQ68xo+VzNTg=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "d8aeffe1e9719121de4102d349ed5acb49ebf02a", + "rev": "9cd96e4b64a58b88b9cc260fbfd642b0d10dc716", "type": "github" }, "original": { @@ -767,11 +767,11 @@ "flake": false, "locked": { "host": "gitlab.gnome.org", - "lastModified": 1762869044, - "narHash": "sha256-nwm/GJ2Syigf7VccLAZ66mFC8mZJFqpJmIxSGKl7+Ds=", + "lastModified": 1764524476, + "narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "680e3d195a92203f28d4bf8c6e8bb537cc3ed4ad", + "rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22", "type": "gitlab" }, "original": { @@ -808,11 +808,11 @@ ] }, "locked": { - "lastModified": 1764194569, - "narHash": "sha256-iUM9ktarEzThkayyZrzQ7oycPshAY2XRQqVKz0xX/L0=", + "lastModified": 1765172714, + "narHash": "sha256-/cjofqGxSWpRj2XJM+Bd5VUgWDkBWSxxO//HE+zOHMY=", "owner": "nix-community", "repo": "home-manager", - "rev": "9651819d75f6c7ffaf8a9227490ac704f29659f0", + "rev": "a7887340779d5e70ef68012f3823568ee59eaa30", "type": "github" }, "original": { @@ -912,6 +912,7 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", + "hyprwire": "hyprwire", "nixpkgs": [ "nixpkgs" ], @@ -920,11 +921,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1764278064, - "narHash": "sha256-pSbXYmb9AXWfNN3p6NU9R3uCPArPjRCym1CKKUk1Erk=", + "lastModified": 1765141510, + "narHash": "sha256-IjlKl72fJ40zZFiag9VTF37249jHCRHAE4RP7bI0OXA=", "owner": "hyprwm", "repo": "hyprland", - "rev": "68eecf61cd8149c7f830ccea8b5d88295b42d299", + "rev": "a5b7c91329313503e8864761f24ef43fb630f35c", "type": "github" }, "original": { @@ -966,11 +967,11 @@ ] }, "locked": { - "lastModified": 1763727565, - "narHash": "sha256-vRff/2R1U1jzPBy4OODqh2kfUzmizW/nfV2ROzTDIKo=", + "lastModified": 1764812575, + "narHash": "sha256-1bK1yGgaR82vajUrt6z+BSljQvFn91D74WJ/vJsydtE=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "7724d3a12a0453e7aae05f2ef39474219f05a4b4", + "rev": "fd321368a40c782cfa299991e5584ca338e36ebe", "type": "github" }, "original": { @@ -1020,11 +1021,11 @@ ] }, "locked": { - "lastModified": 1763819661, - "narHash": "sha256-0jLarTR/BLWdGlboM86bPVP2zKJNI2jvo3JietnDkOM=", + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a318deec0c12409ec39c68d2be8096b636dc2a5c", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", "type": "github" }, "original": { @@ -1072,11 +1073,11 @@ ] }, "locked": { - "lastModified": 1763503177, - "narHash": "sha256-VPoiswJBBmTLVuNncvT/8FpFR+sYcAi/LgP/zTZ+5rA=", + "lastModified": 1764592794, + "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "f4e1e12755567ecf39090203b8f43eace8279630", + "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", "type": "github" }, "original": { @@ -1097,11 +1098,11 @@ ] }, "locked": { - "lastModified": 1763996058, - "narHash": "sha256-DsqzFZvrEV+aDmavjaD4/bk5qxeZwhGxPWBQdpFyM9Y=", + "lastModified": 1764962281, + "narHash": "sha256-rGbEMhTTyTzw4iyz45lch5kXseqnqcEpmrHdy+zHsfo=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "0168583075baffa083032ed13a8bea8ea12f281a", + "rev": "fe686486ac867a1a24f99c753bb40ffed338e4b0", "type": "github" }, "original": { @@ -1135,6 +1136,35 @@ "type": "github" } }, + "hyprwire": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1764872015, + "narHash": "sha256-INI9AVrQG5nJZFvGPSiUZ9FEUZJLfGdsqjF1QSak7Gc=", + "owner": "hyprwm", + "repo": "hyprwire", + "rev": "7997451dcaab7b9d9d442f18985d514ec5891608", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwire", + "type": "github" + } + }, "kiro-flake": { "inputs": { "flake-utils": "flake-utils_3", @@ -1219,11 +1249,11 @@ ] }, "locked": { - "lastModified": 1764278335, - "narHash": "sha256-HxX9Xc/KqTXgTmX8pANdMkPofEB9LSOUkAj47GVOFO4=", + "lastModified": 1765188893, + "narHash": "sha256-GDHlP/CHbB8FQwTBoMWE1qe6Sk64y9hgNyzxze3lXxY=", "owner": "numtide", "repo": "nix-ai-tools", - "rev": "91d3dd200e33798574219721b596c39c9557e277", + "rev": "8041c8a7715dc48b75a18b17c21c11179c31ffc0", "type": "github" }, "original": { @@ -1260,11 +1290,11 @@ ] }, "locked": { - "lastModified": 1764161084, - "narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=", + "lastModified": 1765065051, + "narHash": "sha256-b7W9WsvyMOkUScNxbzS45KEJp0iiqRPyJ1I3JBE+oEE=", "owner": "nix-darwin", "repo": "nix-darwin", - "rev": "e95de00a471d07435e0527ff4db092c84998698e", + "rev": "7e22bf538aa3e0937effcb1cee73d5f1bcc26f79", "type": "github" }, "original": { @@ -1281,11 +1311,11 @@ ] }, "locked": { - "lastModified": 1763870992, - "narHash": "sha256-NPyc76Wxmv/vAsXJ8F+/8fXECHYcv2YGSqdiSHp/F/A=", + "lastModified": 1765080594, + "narHash": "sha256-5t3d655GqLblE+p5xN5ntkeRfZBesN7vehOWcRcU88M=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "d7423982c7a26586aa237d130b14c8b302c7a367", + "rev": "4194c582d0a3f440382ee00b729ea5cc5ef59754", "type": "github" }, "original": { @@ -1301,11 +1331,11 @@ ] }, "locked": { - "lastModified": 1763973343, - "narHash": "sha256-VltuxbdEwpxrqdaKJCQoZj7M+m8B6oaYEh6/nNqKG/w=", + "lastModified": 1765181983, + "narHash": "sha256-lRU5q1TXf0S5Q6VJilH4CLpHhfmzSagSEGX/Q/ZAhpY=", "owner": "Mic92", "repo": "nix-ld", - "rev": "ca567ee02ee26c773f7be30094a83a3bbd1bf63c", + "rev": "9505c64def3ab356fc89c32f05b5d23493b42b2f", "type": "github" }, "original": { @@ -1340,11 +1370,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1764269296, - "narHash": "sha256-lXAKymcMNIvuw3WLHBhdNWUs1bXl/BYWBtYNhhK+D1s=", + "lastModified": 1764440730, + "narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "00e9525fb65da500852aae7bef666071eedf1b3e", + "rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3", "type": "github" }, "original": { @@ -1360,11 +1390,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1764072830, - "narHash": "sha256-ezkjlUCohD9o9c47Ey0/I4CamSS0QEORTqGvyGqMud0=", + "lastModified": 1765191003, + "narHash": "sha256-d3b3eQsdgXZDW/y4fmDuNiGBjZzwFrLhwD5i3NmM1mM=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "c7832dd786175e20f2697179e0e03efadffe4201", + "rev": "a16b061ec61831755df35fae916d19b0ac5a43cc", "type": "github" }, "original": { @@ -1539,11 +1569,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1763678758, - "narHash": "sha256-+hBiJ+kG5IoffUOdlANKFflTT5nO3FrrR2CA3178Y5s=", + "lastModified": 1764950072, + "narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "117cc7f94e8072499b0a7aa4c52084fa4e11cc9b", + "rev": "f61125a668a320878494449750330ca58b78c557", "type": "github" }, "original": { @@ -1555,11 +1585,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1763966396, - "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", + "lastModified": 1764950072, + "narHash": "sha256-BmPWzogsG2GsXZtlT+MTcAWeDK5hkbGRZTeZNW42fwA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", + "rev": "f61125a668a320878494449750330ca58b78c557", "type": "github" }, "original": { @@ -1661,11 +1691,11 @@ ] }, "locked": { - "lastModified": 1758998580, - "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", + "lastModified": 1764773531, + "narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=", "owner": "nix-community", "repo": "NUR", - "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", + "rev": "1d9616689e98beded059ad0384b9951e967a17fa", "type": "github" }, "original": { @@ -1704,11 +1734,11 @@ ] }, "locked": { - "lastModified": 1763988335, - "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", + "lastModified": 1765016596, + "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", + "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", "type": "github" }, "original": { @@ -1813,11 +1843,11 @@ ] }, "locked": { - "lastModified": 1764021963, - "narHash": "sha256-1m84V2ROwNEbqeS9t37/mkry23GBhfMt8qb6aHHmjuc=", + "lastModified": 1765079830, + "narHash": "sha256-i9GMbBLkeZ7MVvy7+aAuErXkBkdRylHofrAjtpUPKt8=", "owner": "Mic92", "repo": "sops-nix", - "rev": "c482a1c1bbe030be6688ed7dc84f7213f304f1ec", + "rev": "aeb517262102f13683d7a191c7e496b34df8d24c", "type": "github" }, "original": { @@ -1835,16 +1865,15 @@ "treefmt-nix": "treefmt-nix_4" }, "locked": { - "lastModified": 1764708356, - "narHash": "sha256-yBfUoUWhOJTyivxk1d5sAT3iUnWxaH8k8JfWkeVGO0o=", + "lastModified": 1765193964, + "narHash": "sha256-+xGOREsOX7K9kqV8iOqvoeiCOvzDWm9v3oH3vjMr9IA=", "owner": "connerohnesorge", "repo": "spectr", - "rev": "f76c63103dbce38cbd45aff9629dddcbc3a3ab33", + "rev": "0a9c6aaaaee78f7bd7c43d7e022a3ff05d9a5677", "type": "github" }, "original": { "owner": "connerohnesorge", - "ref": "f76c63103dbce38cbd45aff9629dddcbc3a3ab33", "repo": "spectr", "type": "github" } @@ -1872,12 +1901,12 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1764254063, - "narHash": "sha256-V22JzkaTLF/GAL2LgqvOsJhAr8JbJsKaD8hnHjGwXfE=", - "rev": "a1451bc40413870f0c7b576b751c1ca92055e323", - "revCount": 1279, + "lastModified": 1765047449, + "narHash": "sha256-VQcqjJ2g0kT9TW4ENwA2HBQJzfbCUd5s1Wm3K+R2QZY=", + "rev": "bd00e01aab676aee88e6cc5c9238b4a5a7d6639a", + "revCount": 1294, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/danth/stylix/0.1.1279%2Brev-a1451bc40413870f0c7b576b751c1ca92055e323/019ac5bd-9780-765d-8579-b265d6bac021/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/danth/stylix/0.1.1294%2Brev-bd00e01aab676aee88e6cc5c9238b4a5a7d6639a/019af508-152b-7c76-a38a-a7a81b7a174b/source.tar.gz" }, "original": { "type": "tarball", @@ -2085,11 +2114,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1757716333, - "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", + "lastModified": 1763914658, + "narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=", "owner": "tinted-theming", "repo": "schemes", - "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", + "rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c", "type": "github" }, "original": { @@ -2101,11 +2130,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1757811970, - "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", + "lastModified": 1764465359, + "narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", + "rev": "edf89a780e239263cc691a987721f786ddc4f6aa", "type": "github" }, "original": { @@ -2117,11 +2146,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1757811247, - "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", + "lastModified": 1764464512, + "narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", + "rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a", "type": "github" }, "original": { @@ -2304,11 +2333,11 @@ "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1763672442, - "narHash": "sha256-YaRIiy0gcXREl0Aonzhs/j2+R7wA3de4jlW5ovkpSAY=", + "lastModified": 1765193506, + "narHash": "sha256-7DnRVTO/PkCwToP5q4HZ7oTUNX9rFwdKuWBTuVS4LiU=", "owner": "connerohnesorge", "repo": "zen-browser-flake", - "rev": "010f659fd03699f5fc69d0f4da2d7f8f6bf05786", + "rev": "e52cc81ed6e61ee754077d8bcabde699e3804052", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 99bb9287..268319cc 100644 --- a/flake.nix +++ b/flake.nix @@ -7,7 +7,7 @@ proton-authenticator.url = "github:connerohnesorge/proton-authenticator-flake?ref=0494e1b70724861b4f8e2fb314b744e0591dfbb5"; proton-authenticator.inputs.nixpkgs.follows = "nixpkgs"; - spectr.url = "github:connerohnesorge/spectr?ref=f76c63103dbce38cbd45aff9629dddcbc3a3ab33"; + spectr.url = "github:connerohnesorge/spectr"; spectr.inputs.nixpkgs.follows = "nixpkgs"; conclaude.url = "github:connerohnesorge/conclaude"; diff --git a/modules/features/engineer.nix b/modules/features/engineer.nix index 6a025321..eca970b6 100644 --- a/modules/features/engineer.nix +++ b/modules/features/engineer.nix @@ -35,6 +35,7 @@ in cldk.enable = true; cldo.enable = true; clds.enable = true; + latest.enable = true; ghostty.enable = true; dx.enable = true; cf.enable = true; @@ -171,6 +172,10 @@ in programs = { tmux.enable = true; nix-ld.dev.enable = true; + nix-ld.libraries = with pkgs; [ + stdenv.cc.cc.lib + zlib + ]; direnv.enable = true; direnv.nix-direnv.enable = true; ssh = { @@ -213,6 +218,7 @@ in zlaude.enable = true; klaude.enable = true; nvimf.enable = true; + latest.enable = true; }; }; environment = { diff --git a/modules/features/nvidia.nix b/modules/features/nvidia.nix index 169d4b7e..5c2c8f62 100644 --- a/modules/features/nvidia.nix +++ b/modules/features/nvidia.nix @@ -117,7 +117,6 @@ in virtualisation = { docker = { enable = true; - enableNvidia = true; }; }; diff --git a/modules/features/ollama.nix b/modules/features/ollama.nix index 55b315fa..316ba337 100644 --- a/modules/features/ollama.nix +++ b/modules/features/ollama.nix @@ -35,12 +35,12 @@ in ollama = { enable = true; loadModels = ["gpt-oss:20b"]; - acceleration = + package = if myconfig.features.amd.enable - then "rocm" + then pkgs.ollama-rocm else if myconfig.features.nvidia.enable - then "cuda" - else null; + then pkgs.ollama-cuda + else pkgs.ollama-cpu; }; }; }; diff --git a/modules/programs/latest/default.nix b/modules/programs/latest/default.nix new file mode 100644 index 00000000..38f1ec71 --- /dev/null +++ b/modules/programs/latest/default.nix @@ -0,0 +1,25 @@ +{ + delib, + pkgs, + ... +}: let + inherit (delib) singleEnableOption; + + program = pkgs.writeShellApplication { + name = "latest"; + text = builtins.readFile ./latest.sh; + }; +in + delib.module { + name = "programs.latest"; + + options = singleEnableOption false; + + nixos.ifEnabled = { + environment.systemPackages = [program]; + }; + + darwin.ifEnabled = { + environment.systemPackages = [program]; + }; + } diff --git a/modules/programs/latest/latest.sh b/modules/programs/latest/latest.sh new file mode 100644 index 00000000..47f202f1 --- /dev/null +++ b/modules/programs/latest/latest.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +cldk "commit and push all changes with good commit messages" diff --git a/spectr/changes/add-latest-program/proposal.md b/spectr/changes/add-latest-program/proposal.md new file mode 100644 index 00000000..c974947e --- /dev/null +++ b/spectr/changes/add-latest-program/proposal.md @@ -0,0 +1,16 @@ +# Change: Add `latest` program to replace shell alias + +## Why +The current `latest` alias in `.zshrc` (`git add . && git commit -m "latest" && git push`) creates uninformative commit messages. Replacing it with a program that invokes `cldk` to generate AI-assisted commit messages will produce more meaningful git history. + +## What Changes +- Create new program module `modules/programs/latest/` that calls `cldk "commit and push all changes with good commit messages"` +- Remove `latest` alias from `.zshrc` +- Enable the `latest` program in the engineer feature module for both NixOS and Darwin + +## Impact +- Affected specs: `shell-utilities` +- Affected code: + - `modules/programs/latest/` (new) + - `modules/features/engineer.nix` (add `latest.enable = true`) + - `.zshrc` (remove alias) diff --git a/spectr/changes/add-latest-program/specs/shell-utilities/spec.md b/spectr/changes/add-latest-program/specs/shell-utilities/spec.md new file mode 100644 index 00000000..7ef872a6 --- /dev/null +++ b/spectr/changes/add-latest-program/specs/shell-utilities/spec.md @@ -0,0 +1,16 @@ +## ADDED Requirements + +### Requirement: Latest Program +The system SHALL provide a `latest` program that commits and pushes all changes with AI-generated commit messages using the `cldk` tool. + +#### Scenario: User runs latest in git repository +- **WHEN** user executes `latest` in a git repository with uncommitted changes +- **THEN** the program invokes `cldk "commit and push all changes with good commit messages"` to stage, commit, and push changes with meaningful AI-generated messages + +#### Scenario: Cross-platform availability +- **WHEN** the engineer feature is enabled on NixOS or Darwin +- **THEN** the `latest` program is available in the system PATH + +#### Scenario: Replaces shell alias +- **WHEN** user previously used the `latest` alias in `.zshrc` +- **THEN** the `latest` program provides the same entry point with improved commit message quality diff --git a/spectr/changes/add-latest-program/tasks.md b/spectr/changes/add-latest-program/tasks.md new file mode 100644 index 00000000..60996167 --- /dev/null +++ b/spectr/changes/add-latest-program/tasks.md @@ -0,0 +1,13 @@ +## 1. Implementation + +- [x] 1.1 Create `modules/programs/latest/` directory +- [x] 1.2 Create `modules/programs/latest/latest.nix` with Denix module pattern +- [x] 1.3 Add `latest.enable = true` to `modules/features/engineer.nix` for NixOS +- [x] 1.4 Add `latest.enable = true` to `modules/features/engineer.nix` for Darwin +- [x] 1.5 Remove `latest` alias from `.zshrc` + +## 2. Testing + +- [x] 2.1 Run `nix flake check` to validate module syntax +- [x] 2.2 Run `nixos-rebuild build --flake .` to verify NixOS configuration builds +- [x] 2.3 Manually test `latest` command in a test git repository diff --git a/templates/cuda-shell/flake.nix b/templates/cuda-shell/flake.nix index 3eb3029a..3e1475d1 100644 --- a/templates/cuda-shell/flake.nix +++ b/templates/cuda-shell/flake.nix @@ -74,7 +74,7 @@ pkgs.xorg.libXcursor pkgs.xorg.libXi pkgs.opencv4 - ]}"; + ]}:/run/opengl-driver/lib"; }; corePackages = with pkgs; [ diff --git a/templates/latex-shell/flake.lock b/templates/latex-shell/flake.lock index 00949182..86e9f54f 100644 --- a/templates/latex-shell/flake.lock +++ b/templates/latex-shell/flake.lock @@ -1,5 +1,37 @@ { "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1765121682, + "narHash": "sha256-4VBOP18BFeiPkyhy9o4ssBNQEvfvv1kXkasAYd0+rrA=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "65f23138d8d09a92e30f1e5c87611b23ef451bf3", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -18,13 +50,56 @@ "type": "github" } }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765016596, + "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1755020227, - "narHash": "sha256-gGmm+h0t6rY88RPTaIm3su95QvQIVjAJx558YUG4Id8=", + "lastModified": 1765270179, + "narHash": "sha256-g2a4MhRKu4ymR4xwo+I+auTknXt/+j37Lnf0Mvfl1rE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "695d5db1b8b20b73292501683a524e0bd79074fb", + "rev": "677fbe97984e7af3175b6c121f3c39ee5c8d62c9", "type": "github" }, "original": { @@ -36,7 +111,9 @@ }, "root": { "inputs": { + "flake-compat": "flake-compat", "flake-utils": "flake-utils", + "git-hooks": "git-hooks", "nixpkgs": "nixpkgs", "treefmt-nix": "treefmt-nix" } @@ -63,11 +140,11 @@ ] }, "locked": { - "lastModified": 1754847726, - "narHash": "sha256-2vX8QjO5lRsDbNYvN9hVHXLU6oMl+V/PsmIiJREG4rE=", + "lastModified": 1762938485, + "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "7d81f6fb2e19bf84f1c65135d1060d829fae2408", + "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", "type": "github" }, "original": { diff --git a/templates/latex-shell/flake.nix b/templates/latex-shell/flake.nix index 8e8777ae..95b79f6e 100644 --- a/templates/latex-shell/flake.nix +++ b/templates/latex-shell/flake.nix @@ -24,8 +24,11 @@ ... }: flake-utils.lib.eachDefaultSystem (system: let + isLinux = builtins.elem system ["x86_64-linux" "aarch64-linux"]; pkgs = import nixpkgs { inherit system; + config.allowUnfree = true; + config.cudaSupport = isLinux; }; rooted = exec: @@ -110,6 +113,7 @@ programs = { alejandra.enable = true; # Nix formatter texfmt.enable = true; # TeX formatter + black.enable = true; # Python formatter }; }; @@ -120,40 +124,58 @@ }; }; in { - devShells.default = pkgs.mkShell { - name = "latex-dev"; - - # Available packages on https://search.nixos.org/packages - packages = with pkgs; - [ - # Nix tooling - alejandra - nixd - statix - deadnix - - # Core LaTeX - Full TeX Live distribution - texliveFull # Includes all LaTeX packages, fonts, and tools - - # LaTeX language server and IDE support - texlab # LSP for LaTeX - ltex-ls # Grammar/spell checking LSP - - # Additional utilities - pandoc # Document conversion (Markdown ↔ LaTeX) - ghostscript # PostScript/PDF manipulation - poppler_utils # PDF utilities (pdfinfo, pdftotext, etc.) - watchexec # File watcher alternative to latexmk -pvc - ] - ++ builtins.attrValues scriptPackages - ++ preCommitCheck.enabledPackages; - - shellHook = - preCommitCheck.shellHook - + '' - echo "🎓 LaTeX Development Environment 🎓" - ''; - }; + devShells.default = pkgs.mkShell ({ + name = "latex-dev"; + + # Available packages on https://search.nixos.org/packages + packages = with pkgs; + [ + # Nix tooling + alejandra + nixd + statix + deadnix + + # Core LaTeX - Full TeX Live distribution + texliveFull # Includes all LaTeX packages, fonts, and tools + + # LaTeX language server and IDE support + texlab # LSP for LaTeX + ltex-ls # Grammar/spell checking LSP + + # Additional utilities + pandoc # Document conversion (Markdown ↔ LaTeX) + ghostscript # PostScript/PDF manipulation + poppler-utils # PDF utilities (pdfinfo, pdftotext, etc.) + watchexec # File watcher alternative to latexmk -pvc + pyrefly + + graphviz + # Python tooling for training scripts + uv # Python package manager + ruff + ] + ++ builtins.attrValues scriptPackages + ++ preCommitCheck.enabledPackages; + + shellHook = + preCommitCheck.shellHook + + '' + echo "🎓 LaTeX Development Environment 🎓" + ''; + } + // pkgs.lib.optionalAttrs isLinux { + env.TRITON_LIBCUDA_PATH = "/run/opengl-driver/lib"; + env.LD_LIBRARY_PATH = + pkgs.lib.makeLibraryPath [ + pkgs.glib + pkgs.libGL + pkgs.cudaPackages.cudatoolkit + pkgs.cudaPackages.cudnn + pkgs.stdenv.cc.cc.lib + ] + + ":/run/opengl-driver/lib"; + }); # Minimal CI/CD devShell optimized for automated builds devShells.ci = pkgs.mkShell { @@ -166,7 +188,7 @@ texliveFull # PDF utilities for validation - poppler_utils + poppler-utils ] ++ builtins.attrValues scriptPackages ++ preCommitCheck.enabledPackages; diff --git a/templates/latex-shell/shell.nix b/templates/latex-shell/shell.nix new file mode 100644 index 00000000..c6801d77 --- /dev/null +++ b/templates/latex-shell/shell.nix @@ -0,0 +1,12 @@ +(import + ( + let + inherit ((builtins.fromJSON (builtins.readFile ./flake.lock)).nodes) flake-compat; + in + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${flake-compat.locked.rev}.tar.gz"; + sha256 = flake-compat.locked.narHash; + } + ) + {src = ./.;}) +.shellNix