[ruby] remove BUNDLE_JOBS config
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