[ruby] remove BUNDLE_JOBS config
change pvywrmlxzrxxzrkuwvmsywxnqrwmvkot
commit 06ba32946740dd407e24f1b43e27a96f3b2bf462
author Alpha Chen <alpha@kejadlen.dev>
date
parent ssqzuxwz
diff --git a/.bundle/config b/.bundle/config
index 8733e67b..38025561 100644
--- a/.bundle/config
+++ b/.bundle/config
@@ -1,6 +1,5 @@
 ---
 BUNDLE_PATH: ".direnv/ruby"
-BUNDLE_JOBS: "4"
 BUNDLE_GEM__COC: "true"
 BUNDLE_GEM__MIT: "true"
 BUNDLE_GEM__TEST: "minitest"
diff --git a/.config/git/ignore b/.config/git/ignore
index 07b9ac90..cd974783 100644
--- a/.config/git/ignore
+++ b/.config/git/ignore
@@ -30,3 +30,5 @@ pyrightconfig.json
 
 # aider
 .aider*
+
+**/.claude/settings.local.json
diff --git a/.config/nvim/fnl/init.fnl b/.config/nvim/fnl/init.fnl
index ce5505a6..c862b1c9 100644
--- a/.config/nvim/fnl/init.fnl
+++ b/.config/nvim/fnl/init.fnl
@@ -1,6 +1,7 @@
 (local {:nvim_create_autocmd create-autocmd
         :nvim_create_augroup create-augroup} vim.api)
 
+(vim.pack.add ["https://git.kejadlen.dev/alpha/vim-colors-paramount.git"])
 (vim.cmd.colorscheme :paramount)
 
 (set vim.o.cmdheight 0)
@@ -108,8 +109,7 @@
 ;;; vim.pack
 
 ;; :lua vim.pack.update({ 'nvim-lspconfig' })
-(vim.pack.add ["https://git.kejadlen.dev/alpha/vim-colors-paramount.git"
-               ;; was using jaawerth/fennel.vim, but there are some annoyances
+(vim.pack.add [;; was using jaawerth/fennel.vim, but there are some annoyances
                ;; with it, so let's try this one instead
                "https://github.com/atweiden/vim-fennel.git"
                "https://github.com/christoomey/vim-tmux-navigator.git"
diff --git a/.config/nvim/fnl/lsp.fnl b/.config/nvim/fnl/lsp.fnl
index bde22fb6..4654f146 100644
--- a/.config/nvim/fnl/lsp.fnl
+++ b/.config/nvim/fnl/lsp.fnl
@@ -44,6 +44,7 @@
            :formatStdin true
            :formatCanRange true
            :rootMarkers [:.prettierrc.json]}]
+      json [(fmt "jq .")]
       yaml [(fmt "yamlfmt -in")]]
   (lsp.config :efm
               {:init_options {:documentFormatting true
@@ -53,9 +54,10 @@
                               :completion true}
                :settings {:languages {: fennel
                                       : js
+                                      : json
                                       :typescript js
                                       :typescriptreact js
                                       : yaml}
                           ;; since otherwise eslint goes haywire
                           :lintDebounce 1000000000}
-               :filetypes [:fennel :typescriptreact :yaml]}))
+               :filetypes [:fennel :json :typescriptreact :yaml]}))
diff --git a/.config/nvim/nvim-pack-lock.json b/.config/nvim/nvim-pack-lock.json
index a4ed421a..b6362c8a 100644
--- a/.config/nvim/nvim-pack-lock.json
+++ b/.config/nvim/nvim-pack-lock.json
@@ -1,31 +1,105 @@
 {
   "plugins": {
-    "direnv.vim": [],
-    "fidget.nvim": [],
-    "fzf.vim": [],
-    "hotpot.nvim": [],
-    "indent-blankline.nvim": [],
-    "lightline.vim": [],
+    "direnv.vim": {
+      "rev": "ab2a7e0",
+      "src": "https://github.com/direnv/direnv.vim.git"
+    },
+    "fidget.nvim": {
+      "rev": "3f54759",
+      "src": "https://github.com/j-hui/fidget.nvim.git"
+    },
+    "fzf.vim": {
+      "rev": "879db51",
+      "src": "https://github.com/junegunn/fzf.vim.git"
+    },
+    "hotpot.nvim": {
+      "rev": "443fe56",
+      "src": "https://github.com/rktjmp/hotpot.nvim.git"
+    },
+    "indent-blankline.nvim": {
+      "rev": "005b560",
+      "src": "https://github.com/lukas-reineke/indent-blankline.nvim.git"
+    },
+    "lightline.vim": {
+      "rev": "e358557",
+      "src": "https://github.com/itchyny/lightline.vim.git"
+    },
     "nvim-lspconfig": {
+      "rev": "5bfcc89",
+      "src": "https://github.com/neovim/nvim-lspconfig.git",
       "version": "'v2.5.0'"
     },
-    "nvim-treesitter": [],
-    "nvim-treesitter-context": [],
-    "nvim-treesitter-textobjects": [],
-    "vim-abolish": [],
-    "vim-colors-paramount": [],
-    "vim-context-commentstring": [],
-    "vim-dirvish": [],
-    "vim-dispatch": [],
-    "vim-fennel": [],
-    "vim-repeat": [],
-    "vim-sensible": [],
-    "vim-sleuth": [],
-    "vim-speeddating": [],
-    "vim-surround": [],
-    "vim-terraform": [],
-    "vim-tmux-navigator": [],
-    "vim-unimpaired": [],
-    "vim-vinegar": []
+    "nvim-treesitter": {
+      "rev": "42fc28ba",
+      "src": "https://github.com/nvim-treesitter/nvim-treesitter.git"
+    },
+    "nvim-treesitter-context": {
+      "rev": "41847d3",
+      "src": "https://github.com/nvim-treesitter/nvim-treesitter-context.git"
+    },
+    "nvim-treesitter-textobjects": {
+      "rev": "71385f1",
+      "src": "https://github.com/nvim-treesitter/nvim-treesitter-textobjects.git"
+    },
+    "vim-abolish": {
+      "rev": "dcbfe06",
+      "src": "https://github.com/tpope/vim-abolish.git"
+    },
+    "vim-colors-paramount": {
+      "rev": "ceaed9d",
+      "src": "https://git.kejadlen.dev/alpha/vim-colors-paramount.git"
+    },
+    "vim-context-commentstring": {
+      "rev": "edcf56c",
+      "src": "https://github.com/suy/vim-context-commentstring.git"
+    },
+    "vim-dirvish": {
+      "rev": "5d1d1ef",
+      "src": "https://github.com/justinmk/vim-dirvish.git"
+    },
+    "vim-dispatch": {
+      "rev": "a2ff28a",
+      "src": "https://github.com/tpope/vim-dispatch.git"
+    },
+    "vim-fennel": {
+      "rev": "cb93482",
+      "src": "https://github.com/atweiden/vim-fennel.git"
+    },
+    "vim-repeat": {
+      "rev": "6584602",
+      "src": "https://github.com/tpope/vim-repeat.git"
+    },
+    "vim-sensible": {
+      "rev": "0ce2d84",
+      "src": "https://github.com/tpope/vim-sensible.git"
+    },
+    "vim-sleuth": {
+      "rev": "be69bff",
+      "src": "https://github.com/tpope/vim-sleuth.git"
+    },
+    "vim-speeddating": {
+      "rev": "c17eb01",
+      "src": "https://github.com/tpope/vim-speeddating.git"
+    },
+    "vim-surround": {
+      "rev": "3d188ed",
+      "src": "https://github.com/tpope/vim-surround.git"
+    },
+    "vim-terraform": {
+      "rev": "520498f",
+      "src": "https://github.com/hashivim/vim-terraform.git"
+    },
+    "vim-tmux-navigator": {
+      "rev": "c45243d",
+      "src": "https://github.com/christoomey/vim-tmux-navigator.git"
+    },
+    "vim-unimpaired": {
+      "rev": "db65482",
+      "src": "https://github.com/tpope/vim-unimpaired.git"
+    },
+    "vim-vinegar": {
+      "rev": "bb1bcdd",
+      "src": "https://github.com/tpope/vim-vinegar.git"
+    }
   }
-}
\ No newline at end of file
+}
diff --git a/.config/sketchybar/src/meeting-bar/next-meeting.swift b/.config/sketchybar/src/meeting-bar/next-meeting.swift
new file mode 100755
index 00000000..f223f31e
--- /dev/null
+++ b/.config/sketchybar/src/meeting-bar/next-meeting.swift
@@ -0,0 +1,140 @@
+#!/usr/bin/swift
+
+import Foundation
+import EventKit
+
+// Function to format a date into a readable time string
+func formatDate(_ date: Date) -> String {
+    let formatter = DateFormatter()
+    formatter.dateFormat = "h:mm a"
+    return formatter.string(from: date)
+}
+
+// Function to get the current time and date
+func getCurrentDate() -> Date {
+    return Date()
+}
+
+// Function to check if a meeting is happening now
+func isMeetingNow(event: EKEvent, currentDate: Date) -> Bool {
+    return currentDate >= event.startDate && currentDate <= event.endDate
+}
+
+// Main function to get the next meeting
+func getNextMeeting() -> String {
+    let eventStore = EKEventStore()
+    let status = EKEventStore.authorizationStatus(for: .event)
+
+    switch status {
+    case .authorized:
+        return fetchNextMeeting(eventStore: eventStore)
+    case .denied, .restricted:
+        return "๐Ÿ“… No access to calendar"
+    case .notDetermined:
+        var result = "๐Ÿ“… Requesting access..."
+        if #available(macOS 14.0, *) {
+            eventStore.requestFullAccessToEvents { granted, error in
+                if granted {
+                    result = fetchNextMeeting(eventStore: eventStore)
+                } else {
+                    result = "๐Ÿ“… Access denied"
+                }
+            }
+        } else {
+            // For older macOS versions
+            // Swift doesn't support #pragma directly, using @available attribute instead
+            @available(*, deprecated)
+            func requestAccessLegacy() {
+                eventStore.requestAccess(to: .event) { granted, error in
+                    if granted {
+                        result = fetchNextMeeting(eventStore: eventStore)
+                    } else {
+                        result = "๐Ÿ“… Access denied"
+                    }
+                }
+            }
+            requestAccessLegacy()
+        }
+        return result
+    case .fullAccess:
+        return fetchNextMeeting(eventStore: eventStore)
+    case .writeOnly:
+        return fetchNextMeeting(eventStore: eventStore)
+    @unknown default:
+        return "๐Ÿ“… Unknown status"
+    }
+}
+
+// Function to fetch the next meeting from the calendar
+func fetchNextMeeting(eventStore: EKEventStore) -> String {
+    let currentDate = getCurrentDate()
+
+    // Get all calendars and filter for alpha.chen@gusto.com
+    let allCalendars = eventStore.calendars(for: .event)
+    let personalCalendars = allCalendars.filter { calendar in
+        return calendar.title.contains("alpha.chen@gusto.com") ||
+               calendar.calendarIdentifier.contains("alpha.chen@gusto.com")
+    }
+
+    // Use filtered calendars or return early if none found
+    guard !personalCalendars.isEmpty else {
+        return "๐Ÿ“… No alpha.chen@gusto.com calendar found"
+    }
+
+    let calendars = personalCalendars
+
+    // Create a predicate for events starting from now until the end of the day
+    let startDate = currentDate
+
+    // Create a date for the end of tomorrow
+    let calendar = Calendar.current
+    guard let tomorrow = calendar.date(byAdding: .day, value: 1, to: currentDate),
+          let endOfTomorrow = calendar.date(bySettingHour: 0, minute: 0, second: 0, of: tomorrow) else {
+        return "๐Ÿ“… Error calculating date"
+    }
+
+    let endDate = endOfTomorrow
+
+    let predicate = eventStore.predicateForEvents(withStart: startDate, end: endDate, calendars: calendars)
+    let events = eventStore.events(matching: predicate).filter { !$0.isAllDay }
+
+    // Find current meeting
+    if let currentMeeting = events.first(where: { isMeetingNow(event: $0, currentDate: currentDate) }) {
+        return "๐Ÿ“… Now: \(currentMeeting.title ?? "Untitled Event")"
+    }
+
+    // Find next meeting
+    if let nextMeeting = events.first(where: { $0.startDate > currentDate }) {
+        let timeStr = formatDate(nextMeeting.startDate)
+        return "๐Ÿ“… Next: \(nextMeeting.title ?? "Untitled Event") at \(timeStr)"
+    }
+
+    return "๐Ÿ“… No more meetings today"
+}
+
+// Set this to true for debug mode, false for normal operation
+let debugMode = false
+
+if debugMode {
+    // Debug output to show all calendars
+    let eventStore = EKEventStore()
+    let calendars = eventStore.calendars(for: .event)
+    print("All calendars:")
+    for calendar in calendars {
+        print("- \(calendar.title) [\(calendar.calendarIdentifier)]")
+    }
+
+    // Also list filtered calendars
+    let filteredCalendars = calendars.filter { calendar in
+        return calendar.title.contains("alpha.chen@gusto.com") ||
+               calendar.calendarIdentifier.contains("alpha.chen@gusto.com")
+    }
+    print("\nFiltered calendars:")
+    for calendar in filteredCalendars {
+        print("- \(calendar.title) [\(calendar.calendarIdentifier)]")
+    }
+    print("\n")
+}
+
+// Output the next meeting information
+print(getNextMeeting())
\ No newline at end of file
diff --git a/.gitconfig b/.gitconfig
index ad0d22ef..cf682c5e 100644
--- a/.gitconfig
+++ b/.gitconfig
@@ -15,8 +15,6 @@
 	followTags = true
 	recurseSubmodules = on-demand
 	autoSetupRemote = true
-[url "git@github.com:"]
-	insteadof = https://github.com/
 [url "git@git.kejadlen.dev:"]
 	insteadof = https://git.kejadlen.dev/
 [transfer]
@@ -137,3 +135,7 @@
 
 [include]
 	path = ~/.gitconfig.local
+[credential]
+	helper = osxkeychain
+[maintenance]
+	repo = /Users/alpha.chen/src/gusto/zenpayroll
diff --git a/.hammerspoon/init.fnl b/.hammerspoon/init.fnl
index 2bdcbeeb..50a1b0b5 100644
--- a/.hammerspoon/init.fnl
+++ b/.hammerspoon/init.fnl
@@ -1,6 +1,7 @@
 ;; fennel-ls doesn't support arbitrary allowed globals, so
 ;; unwrap `hs` here to localize it to just one place
 (local {: eventtap
+        : execute
         : fs
         : hotkey
         : loadSpoon
@@ -48,8 +49,8 @@
 
 ;;; quitter
 
-(let [quitter (require :quitter)]
-  (quitter:start))
+; (let [quitter (require :quitter)]
+;   (quitter:start))
 
 ;;; sketchybar on screen changes
 
diff --git a/.zshrc b/.zshrc
index 6b3cae52..c618e4c9 100644
--- a/.zshrc
+++ b/.zshrc
@@ -169,8 +169,6 @@ function xman() { open x-man-page://$@ ; }
 
 # https://docs.brew.sh/Shell-Completion
 if type brew &>/dev/null; then
-  FPATH=${HOMEBREW_PREFIX:+$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}}
-
   autoload -Uz compinit
   compinit
 fi
diff --git a/Brewfile b/Brewfile
index 05e842b8..365048ca 100644
--- a/Brewfile
+++ b/Brewfile
@@ -71,7 +71,7 @@ cask "autodesk-fusion"
 cask "calibre"
 cask "cleanshot"
 cask "daisydisk"
-cask "discord"
+# cask "discord"
 cask "fantastical"
 cask "firefox@developer-edition"
 cask "ghostty"
diff --git a/flork/_dotfiles.fnl b/flork/_dotfiles.fnl
index a0de3011..4adfe601 100644
--- a/flork/_dotfiles.fnl
+++ b/flork/_dotfiles.fnl
@@ -4,19 +4,17 @@
                 :.digrc
                 :.gemrc
                 :.gitconfig
+                :.git_templates
                 :.hammerspoon
                 :.inputrc
-                :.local
                 :.p10k.zsh
                 :.profile
                 :.ruby-version
-                :.tmux.conf
                 :.zsh
                 :.zshenv
                 :.zshrc
                 :.bundle/config
-                :.cargo/config.toml
-                :.docker/config.json]]
+                :.cargo/config.toml]]
   (each [_ v (ipairs dotfiles)]
     (let [src (expand-env-vars (.. :$HOME/.dotfiles/ v))
           dest (expand-env-vars (.. :$HOME/ v))]
diff --git a/flork/main.fnl b/flork/main.fnl
index df471312..cf051246 100644
--- a/flork/main.fnl
+++ b/flork/main.fnl
@@ -27,3 +27,9 @@
         out (sh* :dscl "." :-read (expand-env-vars :$HOME/) :UserShell)
         actual-shell (chomp (out:match "UserShell: (.+)"))]
     (if (not= actual-shell desired-shell) (sh* :chsh :-s desired-shell))))
+
+;; TODO
+;; - brew bundle
+;;   - start sketchybar
+;; - install neovim plugins
+;; - install tmux plugins