Compare commits

...

35 Commits

Author SHA1 Message Date
renovate[bot]
8bef11095e chore(deps)!: update peter-evans/create-pull-request (v7.0.11 → v8.0.0) (#258) 2025-12-10 01:23:11 +02:00
7d427d29bb chore: update workflows, go and yarn (#253) 2025-12-08 20:40:21 +02:00
renovate[bot]
fd71a1ad32 chore(deps): update peter-evans/create-pull-request action (v7.0.9 → v7.0.11) (#256)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 05:48:14 +00:00
renovate[bot]
277d47098f chore(deps): update image python to v3.14.1 (#255)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 05:48:06 +00:00
github-actions[bot]
d35014ed2e chore: update pre-commit hooks (#257) 2025-12-08 07:41:13 +02:00
github-actions[bot]
8e7af8ddc7 chore: update pre-commit hooks (#254) 2025-12-04 12:06:46 +02:00
099e6672c8 chore: upgrade actions 2025-12-02 23:54:02 +01:00
e578e52aff chore: upgrade yarn 2025-12-02 23:29:04 +01:00
renovate[bot]
0b5f80cb03 chore(deps): update pre-commit hook renovatebot/pre-commit-hooks (42.27.0 → 42.27.1) (#251)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-01 09:15:57 +02:00
github-actions[bot]
72f42835ff chore: update pre-commit hooks (#252)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-12-01 09:14:14 +02:00
renovate[bot]
a949f0d4cf chore(deps): update actions/setup-python action (v6.0.0 → v6.1.0) (#250)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 05:54:45 +00:00
renovate[bot]
8b1e4462b3 chore(deps): update ivuorinen/actions action (v2025.11.02 → v2025.11.23) (#249)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 05:54:39 +00:00
github-actions[bot]
055cf7ef2e chore: update pre-commit hooks (#242) 2025-11-27 07:51:23 +02:00
renovate[bot]
8c2b3fb475 chore(deps): update peter-evans/create-pull-request action (v7.0.8 → v7.0.9) (#246)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 18:39:10 +00:00
3fa1efe88d chore(ci): remove .github/dependabot.yml
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-11-24 14:21:30 +02:00
9cc81c4cbf chore(deps): update github actions 2025-11-22 09:40:16 +02:00
bba76843db chore(deps): update pre-commit hooks 2025-11-22 09:39:37 +02:00
9018d1a038 chore(deps): update go version to 1.25.4 2025-11-22 09:38:39 +02:00
github-actions[bot]
a8595e2e07 chore: update pre-commit hooks (#241) 2025-11-17 08:10:49 +02:00
renovate[bot]
beb89e9490 chore(deps): update pre-commit hook renovatebot/pre-commit-hooks (42.7.0 → 42.11.0) (#240)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-17 04:10:37 +00:00
dependabot[bot]
cb381fe57d chore(deps): bump js-yaml in the npm_and_yarn group across 1 directory (#239) 2025-11-16 01:22:30 +02:00
renovate[bot]
7be770a2af chore(deps): update node.js (v24.11.0 → v24.11.1) (#238)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-15 00:39:45 +00:00
github-actions[bot]
d16ce9ad0f chore: update pre-commit hooks (#237) 2025-11-13 13:21:31 +02:00
ab67f6be5a chore(tmux): fix catppuccin submodule 2025-11-13 00:25:40 +02:00
efadbb4248 chore(tmux): remove double default-terminal, theme tweaks
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-11-12 16:45:45 +02:00
ded4bf3bb3 fix(tmux): sesh selection now works in fish
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-11-12 11:48:10 +02:00
github-actions[bot]
62eb417935 chore: update pre-commit hooks (#234) 2025-11-11 22:34:15 +02:00
d22f9ece7d feat: hammerspoon & karabiner-elements
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-11-11 17:15:55 +02:00
79be2d41bc chore(theme): switch back to Catppuccin
Signed-off-by: Ismo Vuorinen <ismo@ivuorinen.net>
2025-11-11 14:02:07 +02:00
renovate[bot]
743ebb0e9f chore(deps): update softprops/action-gh-release action (v2.4.1 → v2.4.2) (#235)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-10 12:47:02 +00:00
renovate[bot]
8fcab21a67 chore(deps): update pre-commit hook renovatebot/pre-commit-hooks (42.0.2 → 42.1.3) (#233)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-09 06:48:18 +02:00
renovate[bot]
43a714513f chore(deps)!: update renovatebot/pre-commit-hooks (41.173.0 → 42.0.2) (#232)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 15:14:24 +02:00
github-actions[bot]
044298af74 chore: update pre-commit hooks (#231)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2025-11-06 07:15:25 +02:00
renovate[bot]
6604f7a2ca chore(deps)!: update node (v22.21.1 → v24.11.0) (#228) 2025-11-04 07:50:35 +02:00
github-actions[bot]
065eb2f9c0 chore: update pre-commit hooks (#230) 2025-11-03 09:30:56 +02:00
33 changed files with 20060 additions and 6420 deletions

View File

@@ -1,8 +0,0 @@
---
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'

View File

@@ -18,7 +18,7 @@ jobs:
permissions: write-all
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Create changelog text
id: changelog

View File

@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Yarn Lock Changes
uses: Simek/yarn-lock-changes@61d1a0595070b79c1abdc8e1e5a5f5d98b18918c # v0.12.2
@@ -35,4 +35,4 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run PR Lint
uses: ivuorinen/actions/pr-lint@ff0ca4bc920c518b2ce2dc20c5e5a6e95f76dee0 # v2025.11.02
uses: ivuorinen/actions/pr-lint@44a11e9773be8ae72c469d2461478413156de797 # v2025.12.07

View File

@@ -24,7 +24,7 @@ jobs:
version: ${{ steps.daily-version.outputs.version }}
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Create tag if necessary
uses: fregante/daily-version-action@fb1a60b7c4daf1410cd755e360ebec3901e58588 # v2.1.3
@@ -40,7 +40,7 @@ jobs:
- name: Create release
if: steps.daily-version.outputs.created
uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ steps.daily-version.outputs.version }}

View File

@@ -23,13 +23,13 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
- run: pip install pre-commit && pre-commit autoupdate
- uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
- uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update/pre-commit-hooks

View File

@@ -29,4 +29,4 @@ jobs:
issues: write
steps:
- uses: ivuorinen/actions/sync-labels@ff0ca4bc920c518b2ce2dc20c5e5a6e95f76dee0 # v2025.11.02
- uses: ivuorinen/actions/sync-labels@44a11e9773be8ae72c469d2461478413156de797 # v2025.12.07

View File

@@ -22,7 +22,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
submodules: true
fetch-depth: 2

44
.gitignore vendored
View File

@@ -11,47 +11,49 @@
.nfs*
.scannerwork
.vscode
.yarn/
!config/git/local.d/.gitkeep
!config/nvim/spell/.gitkeep
!config/zed/settings.json
!ssh/local.d/.gitkeep
**/exports-secret.fish
**/exports.secret.fish
*.tmp.*
Brewfile.lock.json
antidote_plugins.zsh
config/alacritty/theme-active.toml
config/cheat/cheatsheets/pure-bash-bible/*
config/cheat/cheatsheets/tldr/*
config/fish/completions/asdf.fish
config/fish/fish_variables
config/fish/fish_variables.*
config/gh/hosts.yml
config/git/credentials
config/git/local.d/*
config/gnupg/S.*
config/gnupg/private-keys-v1.d
config/gnupg/s
config/iterm2/AppSupport
config/karabiner/automatic_backups
config/npm/npmrc
config/nvim/lazy-lock.json
config/nvim/spell/*
!config/nvim/spell/.gitkeep
config/git/local.d/*
!config/git/local.d/.gitkeep
config/op/plugins/gh.json
config/op/plugins/used_items/gh.json
config/vim/.netrwhist
config/vim/extra/*
config/vim/fzf
config/vim/plugged/*
config/zed/*
!config/zed/settings.json
config/zed/settings.json
config/zsh/.zcompdump
dependency-check-report.html
iTermServer-*
lazy-lock.json
local/share/fonts/*
local/bin/asdf/plugins/*
local/bin/yabai
local/man/yabai.1
local/share/fonts/*
lock
node_modules
ssh/local.d/*
!ssh/local.d/.gitkeep
config/fish/fish_variables
**/exports.secret.fish
**/exports-secret.fish
config/fish/completions/asdf.fish
config/vim/.netrwhist
config/vim/extra/*
config/gh/hosts.yml
dependency-check-report.html
local/bin/yabai
local/man/yabai.1
config/op/plugins/used_items/gh.json
config/zed/settings.json
*.tmp.*
config/op/plugins/gh.json
config/fish/fish_variables.*

3
.gitmodules vendored
View File

@@ -83,3 +83,6 @@
[submodule "tmux/tmux-resurrect"]
path = config/tmux/plugins/tmux-resurrect
url = https://github.com/tmux-plugins/tmux-resurrect.git
[submodule "tmux/catppuccin"]
path = config/tmux/plugins/catppuccin
url = https://github.com/catppuccin/tmux.git

View File

@@ -1 +1 @@
1.25.3
1.25.5

2
.nvmrc
View File

@@ -1 +1 @@
22.21.1
24.11.1

View File

@@ -24,7 +24,7 @@ repos:
args: [--autofix, --no-sort-keys]
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.45.0
rev: v0.46.0
hooks:
- id: markdownlint
args: [-c, .markdownlint.json, --fix]
@@ -45,17 +45,17 @@ repos:
- id: shfmt
- repo: https://github.com/rhysd/actionlint
rev: v1.7.8
rev: v1.7.9
hooks:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 41.168.5
rev: 42.39.2
hooks:
- id: renovate-config-validator
- repo: https://github.com/JohnnyMorganz/StyLua
rev: v2.3.0
rev: v2.3.1
hooks:
- id: stylua # or stylua-system / stylua-github

View File

@@ -1 +1 @@
3.14.0
3.14.1

1
.yarnrc.yml Normal file
View File

@@ -0,0 +1 @@
nodeLinker: node-modules

View File

@@ -42,6 +42,8 @@ git submodule add --name tmux/tmux-current-pane-hostname \
-f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname
git submodule add --name tmux/tmux-dark-notify \
-f https://github.com/ivuorinen/tmux-dark-notify.git config/tmux/plugins/tmux-dark-notify
git submodule add --name tmux/catppuccin \
-f https://github.com/catppuccin/tmux.git config/tmux/plugins/catppuccin
# Takes submodules and sets them to ignore all changes
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do

View File

@@ -0,0 +1,15 @@
--
-- These globals can be set and accessed:
--
globals = {
"rawrequire",
}
--
-- These globals can only be accessed:
--
read_globals = {
"hs",
"ls",
"spoon",
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

204
base/hammerspoon/init.lua Normal file
View File

@@ -0,0 +1,204 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Hammerspoon config file │
-- ╰─────────────────────────────────────────────────────────╯
-- init.lua — Pure Hammerspoon window controls
-- Converted from skhdrc logic; expanded with perdisplay grids,
-- app rules with groups, wraparound focus, crossdisplay moves,
-- and overlay/notification toggles.
-- Author: Ismo Vuorinen (ivuorinen)
--------------------------------------------------
-- Caps Lock as Meh key (Shift+Control+Alt)
--------------------------------------------------
-- Prerequisites:
-- 1. Go to System Settings → Keyboard → Keyboard Shortcuts → Modifier Keys
-- 2. Set Caps Lock to "No Action" (you mentioned you already did this)
-- 3. Install Karabiner-Elements: brew install --cask karabiner-elements
-- 4. Open Karabiner-Elements, go to "Simple Modifications"
-- 5. Add: caps_lock → f18
--
-- Then you can use F18 as your Meh key in Hammerspoon:
local f18 = hs.hotkey.modal.new()
-- Capture F18 key press/release
hs.hotkey.bind({}, 'F18', function()
f18:enter()
end, function()
f18:exit()
end)
-- Meh (F18/Caps Lock) key bindings for window management
-- These provide quick access to common window operations
-- Helper function to get focused window
local function W()
return hs.window.focusedWindow()
end
-- Window positioning: thirds (U/I/O)
f18:bind({}, 'u', function()
local w = W()
if w then
w:moveToUnit({ x = 0, y = 0, w = 1 / 3, h = 1 }, 0)
end
end)
f18:bind({}, 'i', function()
local w = W()
if w then
w:moveToUnit({ x = 1 / 3, y = 0, w = 1 / 3, h = 1 }, 0)
end
end)
f18:bind({}, 'o', function()
local w = W()
if w then
w:moveToUnit({ x = 2 / 3, y = 0, w = 1 / 3, h = 1 }, 0)
end
end)
-- Window positioning: half width, full height (Y)
f18:bind({}, 'y', function()
local w = W()
if w then
w:moveToUnit({ x = 0, y = 0, w = 0.5, h = 1 }, 0)
end
end)
-- Cycle through all windows (H/L)
-- We need to maintain state to properly cycle through all windows
local windowCycleIndex = 1
local windowCycleList = {}
local lastCycleTime = 0
local function getWindowCycleList()
local currentTime = hs.timer.secondsSinceEpoch()
-- Reset if more than 2 seconds have passed since last cycle
if currentTime - lastCycleTime > 2 then
windowCycleIndex = 1
windowCycleList = hs.window.orderedWindows()
end
lastCycleTime = currentTime
return windowCycleList
end
f18:bind({}, 'h', function()
local windows = getWindowCycleList()
if #windows <= 1 then
return
end
-- Cycle backward
windowCycleIndex = windowCycleIndex - 1
if windowCycleIndex < 1 then
windowCycleIndex = #windows
end
windows[windowCycleIndex]:focus()
end)
f18:bind({}, 'l', function()
local windows = getWindowCycleList()
if #windows <= 1 then
return
end
-- Cycle forward
windowCycleIndex = windowCycleIndex + 1
if windowCycleIndex > #windows then
windowCycleIndex = 1
end
windows[windowCycleIndex]:focus()
end)
-- Window sizing: maximize (Up/J) and center (Down)
f18:bind({}, 'up', function()
local w = W()
if w then
w:maximize(0)
end
end)
f18:bind({}, 'j', function()
local w = W()
if w then
w:maximize(0)
end
end)
f18:bind({}, 'down', function()
local w = W()
if not w then
return
end
local f = w:frame()
local sf = w:screen():frame()
if f.w < sf.w * 0.95 then
w:maximize(0)
else
local ww, hh = math.floor(sf.w * 0.5), math.floor(sf.h * 0.9)
local xx = sf.x + math.floor((sf.w - ww) / 2)
local yy = sf.y + math.floor((sf.h - hh) / 2)
w:setFrame({ x = xx, y = yy, w = ww, h = hh }, 0)
end
end)
f18:bind({}, 'k', function()
local w = W()
if w then
local sf = w:screen():frame()
local ww, hh = math.floor(sf.w * 0.9), math.floor(sf.h * 0.9)
local xx = sf.x + math.floor((sf.w - ww) / 2)
local yy = sf.y + math.floor((sf.h - hh) / 2)
w:setFrame({ x = xx, y = yy, w = ww, h = hh }, 0)
end
end)
-- Move to next/previous screen (. and ,)
f18:bind({}, '.', function()
local w = W()
if w then
local s = w:screen()
local ns = s:toEast() or s:toWest()
if ns then
w:moveToScreen(ns, true, true, 0)
end
end
end)
f18:bind({}, ',', function()
local w = W()
if w then
local s = w:screen()
local ps = s:toWest() or s:toEast()
if ps then
w:moveToScreen(ps, true, true, 0)
end
end
end)
-- Window positioning: halves (Left/Right arrows)
f18:bind({}, 'left', function()
local w = W()
if w then
w:moveToUnit(hs.layout.left50, 0)
end
end)
f18:bind({}, 'right', function()
local w = W()
if w then
w:moveToUnit(hs.layout.right50, 0)
end
end)
-- Paste from clipboard with Meh + V
f18:bind({}, 'v', function()
hs.eventtap.keyStrokes(hs.pasteboard.getContents())
end)
-- Paste 1Password secret with Meh + P
f18:bind({}, 'p', function()
local output, status = hs.execute('op read "op://Svea/3hzhctmvovbwlgulv7mgy25rf4/login-input"', true)
if status then
hs.eventtap.keyStrokes(output:gsub('%s+$', '')) -- trim trailing whitespace
else
hs.alert.show('1Password CLI error')
end
end)
-- require 'generate_emmylua'

View File

@@ -0,0 +1,30 @@
# name: 'Catppuccin Latte'
# url: 'https://github.com/catppuccin/fish'
# preferred_background: eff1f5
fish_color_normal 4c4f69
fish_color_command 1e66f5
fish_color_param dd7878
fish_color_keyword d20f39
fish_color_quote 40a02b
fish_color_redirection ea76cb
fish_color_end fe640b
fish_color_comment 8c8fa1
fish_color_error d20f39
fish_color_gray 9ca0b0
fish_color_selection --background=ccd0da
fish_color_search_match --background=ccd0da
fish_color_option 40a02b
fish_color_operator ea76cb
fish_color_escape e64553
fish_color_autosuggestion 9ca0b0
fish_color_cancel d20f39
fish_color_cwd df8e1d
fish_color_user 179299
fish_color_host 1e66f5
fish_color_host_remote 40a02b
fish_color_status d20f39
fish_pager_color_progress 9ca0b0
fish_pager_color_prefix ea76cb
fish_pager_color_completion 4c4f69
fish_pager_color_description 9ca0b0

View File

@@ -0,0 +1,30 @@
# name: 'Catppuccin Mocha'
# url: 'https://github.com/catppuccin/fish'
# preferred_background: 1e1e2e
fish_color_normal cdd6f4
fish_color_command 89b4fa
fish_color_param f2cdcd
fish_color_keyword f38ba8
fish_color_quote a6e3a1
fish_color_redirection f5c2e7
fish_color_end fab387
fish_color_comment 7f849c
fish_color_error f38ba8
fish_color_gray 6c7086
fish_color_selection --background=313244
fish_color_search_match --background=313244
fish_color_option a6e3a1
fish_color_operator f5c2e7
fish_color_escape eba0ac
fish_color_autosuggestion 6c7086
fish_color_cancel f38ba8
fish_color_cwd f9e2af
fish_color_user 94e2d5
fish_color_host 89b4fa
fish_color_host_remote a6e3a1
fish_color_status f38ba8
fish_pager_color_progress 6c7086
fish_pager_color_prefix f5c2e7
fish_pager_color_completion cdd6f4
fish_pager_color_description 6c7086

View File

@@ -38,6 +38,8 @@ brew "openssl@3"
brew "cryptography"
# YAML Parser
brew "libyaml"
# Display directories as trees (with optional color/HTML output)
brew "tree"
# Automate deployment, configuration, and upgrading
brew "ansible"
# Checks ansible playbooks for practices and behaviour
@@ -104,7 +106,7 @@ brew "glib"
brew "cargo-binstall"
# Multi-platform support library with a focus on asynchronous I/O
brew "libuv"
# Platform built on V8 to build network applications
# Open-source, cross-platform JavaScript runtime environment
brew "node", link: false
# CLI tool for analyzing Claude Code usage from local JSONL files
brew "ccusage"
@@ -230,6 +232,8 @@ brew "luarocks"
brew "lzip"
# Swiss Army Knife for macOS
brew "m-cli"
# Cross platform, open source .NET development framework
brew "mono"
# Collection of tools that nobody wrote when UNIX was young
brew "moreutils"
# NCurses Disk Usage
@@ -290,8 +294,8 @@ brew "tflint"
brew "tfsec"
# Terminal multiplexer
brew "tmux"
# Display directories as trees (with optional color/HTML output)
brew "tree"
# Extremely fast Python package installer and resolver, written in Rust
brew "uv"
# Tool for creating isolated virtual python environments
brew "virtualenv"
# Command-line interface to the WakaTime api
@@ -349,13 +353,18 @@ cask "fantastical"
cask "font-jetbrains-mono"
cask "font-jetbrains-mono-nerd-font"
cask "font-monaspace"
cask "font-monaspace-nf"
cask "font-open-sans"
# GIT client
cask "fork"
# Desktop automation application
cask "hammerspoon"
# HTTP and GraphQL Client
cask "insomnia"
# JetBrains tools manager
cask "jetbrains-toolbox"
# Keyboard customiser
cask "karabiner-elements"
# End-to-end encryption software
cask "keybase"
# Kubernetes IDE

View File

@@ -0,0 +1,68 @@
{
"profiles": [
{
"complex_modifications": {
"rules": [
{
"description": "Change right_command+hjkl to arrow keys",
"manipulators": [
{
"from": {
"key_code": "h",
"modifiers": {
"mandatory": ["right_command"],
"optional": ["any"]
}
},
"to": [{ "key_code": "left_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "j",
"modifiers": {
"mandatory": ["right_command"],
"optional": ["any"]
}
},
"to": [{ "key_code": "down_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "k",
"modifiers": {
"mandatory": ["right_command"],
"optional": ["any"]
}
},
"to": [{ "key_code": "up_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "l",
"modifiers": {
"mandatory": ["right_command"],
"optional": ["any"]
}
},
"to": [{ "key_code": "right_arrow" }],
"type": "basic"
}
]
}
]
},
"name": "Default profile",
"selected": true,
"simple_modifications": [
{
"from": { "key_code": "caps_lock" },
"to": [{ "key_code": "f18" }]
}
],
"virtual_hid_keyboard": { "keyboard_type_v2": "iso" }
}
]
}

View File

@@ -1,31 +1,112 @@
return {
{
'neanias/everforest-nvim',
version = false,
lazy = false,
priority = 1000, -- make sure to load this before all the other start plugins
'catppuccin/nvim',
name = 'catppuccin',
priority = 1000,
config = function()
require('everforest').setup {
background = 'medium', -- hard, medium, soft
transparent_background_level = 2, -- 0, 1, 2
sign_column_background = 'grey', -- none, grey
disable_italic_comments = false,
diagnostic_virtual_text = 'coloured', -- coloured, gray, underline, none
diagnostic_line_highlight = true,
diagnostic_line_highlight_background = 'dimmed', -- dimmed, normal
diagnostic_text_highlight = true,
ui_contrast = 'low', -- high, low
italics = true,
spell_foreground = true,
show_eob = true,
colours_override = function() end,
float_style = 'dim',
on_highlights = function(_, _) end,
dim_inactive_windows = true,
inlay_hints_background = 'dimmed',
require('catppuccin').setup {
flavour = 'auto', -- latte, frappe, macchiato, mocha
background = { -- :h background
light = 'latte',
dark = 'mocha',
},
transparent_background = false,
float = {
transparent = true, -- enable transparent floating windows
solid = false, -- use solid styling for floating windows, see |winborder|
},
show_end_of_buffer = false, -- shows the '~' characters after the end of buffers
term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`)
dim_inactive = {
enabled = true, -- dims the background color of inactive window
shade = 'dark',
percentage = 0.15, -- percentage of the shade to apply to the inactive window
},
no_italic = false, -- Force no italic
no_bold = false, -- Force no bold
no_underline = false, -- Force no underline
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`):
comments = { 'italic' }, -- Change the style of comments
conditionals = { 'italic' },
loops = {},
functions = {},
keywords = {},
strings = {},
variables = {},
numbers = {},
booleans = {},
properties = {},
types = {},
operators = {},
-- miscs = {}, -- Uncomment to turn off hard-coded styles
},
lsp_styles = { -- Handles the style of specific lsp hl groups (see `:h lsp-highlight`).
virtual_text = {
errors = { 'italic' },
hints = { 'italic' },
warnings = { 'italic' },
information = { 'italic' },
ok = { 'italic' },
},
underlines = {
errors = { 'underline' },
hints = { 'underline' },
warnings = { 'underline' },
information = { 'underline' },
ok = { 'underline' },
},
inlay_hints = {
background = true,
},
},
color_overrides = {},
custom_highlights = {},
default_integrations = true,
auto_integrations = false,
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
notify = false,
mini = {
enabled = true,
indentscope_color = '',
},
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
},
}
-- setup must be called before loading
vim.cmd.colorscheme 'catppuccin'
end,
},
-- {
-- 'neanias/everforest-nvim',
-- version = false,
-- lazy = false,
-- priority = 1000, -- make sure to load this before all the other start plugins
-- config = function()
-- require('everforest').setup {
-- background = 'medium', -- hard, medium, soft
-- transparent_background_level = 2, -- 0, 1, 2
-- sign_column_background = 'grey', -- none, grey
-- disable_italic_comments = false,
-- diagnostic_virtual_text = 'coloured', -- coloured, gray, underline, none
-- diagnostic_line_highlight = true,
-- diagnostic_line_highlight_background = 'dimmed', -- dimmed, normal
-- diagnostic_text_highlight = true,
-- ui_contrast = 'low', -- high, low
-- italics = true,
-- spell_foreground = true,
-- show_eob = true,
-- colours_override = function() end,
-- float_style = 'dim',
-- on_highlights = function(_, _) end,
-- dim_inactive_windows = true,
-- inlay_hints_background = 'dimmed',
-- }
-- end,
-- },
-- Automatic dark mode
-- https://github.com/f-person/auto-dark-mode.nvim
@@ -60,37 +141,37 @@ return {
-- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent
{
'xiyaowong/nvim-transparent',
lazy = false,
enabled = true,
config = function()
local t = require 'transparent'
t.setup {
extra_groups = {
'NormalNC',
'NormalFloat',
'EndOfBuffer',
'FloatTitle',
'FloatBorder',
'NotifyDEBUGBorder',
'NotifyERRORBorder',
'NotifyINFOBorder',
'NotifyINFOBorder73',
'NotifyINFOBorder75',
'NotifyINFOBorder101',
'NotifyTRACEBorder',
'NotifyWARNBorder',
'NotifyBackground',
'TelescopeBorder',
'TelescopePromptBorder',
'TelescopeResultsBorder',
'TelescopePreviewBorder',
},
}
t.clear_prefix 'NeoTree'
end,
},
-- {
-- 'xiyaowong/nvim-transparent',
-- lazy = false,
-- enabled = true,
-- config = function()
-- local t = require 'transparent'
-- t.setup {
-- extra_groups = {
-- 'NormalNC',
-- 'NormalFloat',
-- 'EndOfBuffer',
-- 'FloatTitle',
-- 'FloatBorder',
-- 'NotifyDEBUGBorder',
-- 'NotifyERRORBorder',
-- 'NotifyINFOBorder',
-- 'NotifyINFOBorder73',
-- 'NotifyINFOBorder75',
-- 'NotifyINFOBorder101',
-- 'NotifyTRACEBorder',
-- 'NotifyWARNBorder',
-- 'NotifyBackground',
-- 'TelescopeBorder',
-- 'TelescopePromptBorder',
-- 'TelescopeResultsBorder',
-- 'TelescopePreviewBorder',
-- },
-- }
-- t.clear_prefix 'NeoTree'
-- end,
-- },
-- Display a character as the colorcolumn
-- https://github.com/lukas-reineke/virt-column.nvim

18
config/tmux/sesh-tmux.fish Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env fish
set selection (sesh list --icons | fzf-tmux -p 80%,70% \
--no-sort --ansi --border-label ' sesh ' --prompt '⚡ ' \
--header ' ^a all ^t tmux ^g configs ^x zoxide ^d tmux kill ^f find' \
--bind 'tab:down,btab:up' \
--bind 'ctrl-a:change-prompt(⚡ )+reload(sesh list --icons)' \
--bind 'ctrl-t:change-prompt(🪟 )+reload(sesh list -t --icons)' \
--bind 'ctrl-g:change-prompt(⚙️ )+reload(sesh list -c --icons)' \
--bind 'ctrl-x:change-prompt(📁 )+reload(sesh list -z --icons)' \
--bind 'ctrl-f:change-prompt(🔎 )+reload(fd -H -d 2 -t d -E .Trash . ~)' \
--bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(⚡ )+reload(sesh list --icons)' \
--preview-window 'right:55%' \
--preview 'sesh preview {}')
if test -n "$selection"
sesh connect "$selection"
end

View File

@@ -1,46 +1,3 @@
# Everforest dark theme for tmux
# Generated from template - do not edit manually
set -g @catppuccin_flavor "mocha"
set -g @catppuccin_window_status_style "basic"
# Enable proper color support
set -g default-terminal "tmux-256color"
set -as terminal-features ",*:RGB"
set -g pane-border-style "bg=default,fg=#859289"
set -g pane-active-border-style "bg=default,fg=#a7c080"
# Window tabs
set -g window-style "bg=default,fg=default,dim"
set -g window-status-style "bg=default,fg=default,dim"
set -g window-status-current-style "bg=default,fg=#d3c6aa"
set -g window-status-activity-style "bg=default,fg=#dbbc7f,nodim"
set -g window-status-bell-style "bg=default,fg=yellow,nodim"
set -g window-status-last-style "bg=default,fg=#a7c080"
set -g window-status-format " #I:#W "
# Messages
set -g message-style "bg=default,fg=#d3c6aa"
set -g message-command-style "bg=default,fg=#d3c6aa"
# Status bar
set -g status-style "bg=default,fg=default"
set -g status-left " #[default]"
set -g status-right " #[fg=#a7c080]#S@#[fg=#859289]#h #[fg=#7fbbb3]%H:%M #[fg=#dbbc7f]%d.%m "
set -g status-left-style "bg=default,fg=white"
set -g status-right-style "bg=default,fg=white"
set -g menu-style "bg=default,fg=white"
set -g menu-selected-style "bg=default,fg=#a7c080"
set -g menu-border-style "fg=#a7c080"
set -g menu-border-lines "single"
set -g popup-style "bg=default,fg=white"
set -g popup-border-style "fg=#a7c080"
set -g popup-border-lines "single"
set -g display-panes-colour "blue"
set -g display-panes-active-colour "red"
set -g display-panes-time 1000 # milliseconds
set -g pane-border-indicators "arrows"
set -g pane-border-lines "single"
set -g clock-mode-style "24"

View File

@@ -1,6 +1,2 @@
set-option -g status-style 'fg=#4c4f69,bg=default'
set-window-option -g window-status-style 'fg=#4c4f69,bg=default dim'
set-window-option -g window-status-current-style 'fg=#8839ef,bg=default'
set-window-option -g window-status-activity-style 'fg=#4c4f69,bg=default nodim'
set-window-option -g window-status-bell-style 'fg=#4c4f69,bg=default'
set -g message-style 'fg=#8839ef bg=#e6e9ef bold' # fg magenta, bg black
set -g @catppuccin_flavor "latte"
set -g @catppuccin_window_status_style "basic"

View File

@@ -18,6 +18,9 @@
set -ag terminal-overrides ",xterm-256color:RGB"
set -ag terminal-features 'xterm-256color:RGB'
# Enable proper color support
set -as terminal-features ",*:RGB"
set -g default-terminal "tmux-256color" # Set default terminal to 256 colors
set -g detach-on-destroy off # don't detach tmux when killing a session
set -g display-time 0 # Hide clock
@@ -51,17 +54,17 @@ if-shell '[ "$DEBUG" = "1" ]' 'set -g debug-file ~/.cache/tmux-debug.log'
# │ Theme │
# ╰──────────────────────────────────────────────────────────╯
set -g pane-active-border-style "bg=default,fg=#7aa2f7"
set -g pane-border-style "bg=default,fg=#31748f"
set -g status-style "bg=default"
set -g status-justify "left"
set -g status-left ''
set -g status-left-length "0"
set -g status-position "bottom"
set -g status-right "#S@#h #{tmux_mode_indicator}"
set -g status-right-length "30"
set -g status-right-length "50"
set -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} '
set -g window-status-format ' #I:#W '
set -g @catppuccin_status_background 'none'
set -g @catppuccin_window_flags 'icon'
set -g @catppuccin_status_connect_separator 'no'
# ╭──────────────────────────────────────────────────────────╮
# │ Bindings │
@@ -101,32 +104,16 @@ unbind p
bind p paste-buffer
# tms bindings
bind -N "tms" t display-popup -E "tms"
bind -N "tms" T display-popup -E "tms"
bind -N "tms windows" C-w display-popup -E "tms windows"
bind -N "tms switch" C-s display-popup -E "tms switch"
bind -N "tms refresh" C-r display-popup -E "tms refresh"
# global sessions
# bind-key "K" display-popup -h 90% -w 50% -E "sesh ui"
bind-key "K" run-shell "sesh connect \"$(
sesh list --icons --hide-duplicates | fzf-tmux -p 100%,100% --no-border \
--list-border \
--no-sort --prompt '⚡ ' \
--input-border \
--header-border \
--bind 'tab:down,btab:up' \
--bind 'ctrl-b:abort' \
--bind 'ctrl-a:change-prompt(⚡ )+reload(sesh list --icons)' \
--bind 'ctrl-t:change-prompt( )+reload(sesh list -t --icons)' \
--bind 'ctrl-g:change-prompt(⚙️ )+reload(sesh list -c --icons)' \
--bind 'ctrl-x:change-prompt(📁 )+reload(sesh list -z --icons)' \
--bind 'ctrl-f:change-prompt(🔎 )+reload(fd -H -d 2 -t d -E .Trash . ~)' \
--bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(⚡ )+reload(sesh list --icons)' \
--preview-window 'right:70%' \
--preview 'sesh preview {}' \
)\""
bind-key "N" display-popup -E "sesh ui"
bind -N "sesh selection" t run-shell "$HOME/.dotfiles/config/tmux/sesh-tmux.fish"
bind -N "last-session (via sesh) " L run-shell "sesh last"
bind -N "sesh ui" N display-popup -E "sesh ui"
# ╭──────────────────────────────────────────────────────────╮
# │ Plugins │
@@ -142,7 +129,7 @@ bind-key "N" display-popup -E "sesh ui"
## A plugin to name your tmux windows smartly.
## https://github.com/ofirgall/tmux-window-name
### Maximum name length of a window
set -g @tmux_window_name_max_name_len "20"
set -g @tmux_window_name_max_name_len "25"
### Replace $HOME with ~ in window names
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
set -g @tmux_window_name_ignored_programs "['sqlite3', 'antidote', 'direnv', 'md5']" # Default is []
@@ -189,5 +176,6 @@ run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/curren
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-fzf-url/fzf-url.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/catppuccin/catppuccin.tmux"
run-shell "$HOME/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux"

View File

@@ -66,9 +66,11 @@ config.scrollback_lines = 3000
-- Function to detect the theme based on appearance
function Scheme_for_appearance(appearance)
if appearance:find 'Dark' then
return 'Everforest Dark (Medium)'
return 'Catppuccin Mocha'
-- return 'Everforest Dark (Medium)'
else
return 'Everforest Light (Medium)'
return 'Catppuccin Latte'
-- return 'Everforest Light (Medium)'
end
end

View File

@@ -33,8 +33,10 @@ Leader: `<ctrl><space>`
? List key bindings
D Choose and detach a client from a list
E Spread panes out evenly
L Switch to the last client
L last-session (via sesh)
M Clear the marked pane
N sesh ui
T tms
] Paste the most recent paste buffer
c Create a new window
d Detach the current client
@@ -46,7 +48,7 @@ Leader: `<ctrl><space>`
o Select the next pane
q Display pane numbers
s Choose a session from a list
t tms
t sesh selection
w Choose a window from a list
x Kill the active pane
z Zoom the active pane
@@ -74,8 +76,6 @@ Leader: `<ctrl><space>`
M-Left Resize the pane left by 5
M-Right Resize the pane right by 5
C-o Rotate through the panes
C-r tms refresh
C-s tms switch
C-w tms windows
C-z Suspend the current client
C-Up Resize the pane up
@@ -87,3 +87,4 @@ Leader: `<ctrl><space>`
S-Left Move the visible part of the window left
S-Right Move the visible part of the window right
```

View File

@@ -30,13 +30,13 @@
},
"homepage": "https://github.com/ivuorinen/dotfiles#readme",
"devDependencies": {
"@ivuorinen/base-configs": "^2.0.0",
"@types/node": "^24.0.1",
"bats": "^1.12.0",
"editorconfig-checker": "^6.1.0",
"markdownlint": "^0.39.0",
"prettier": "^3.6.2",
"typescript": "^5.8.3"
"@ivuorinen/base-configs": "1.0.0",
"@types/node": "^24.10.1",
"bats": "^1.13.0",
"editorconfig-checker": "^6.1.1",
"markdownlint": "^0.40.0",
"prettier": "^3.7.4",
"typescript": "^5.9.3"
},
"packageManager": "yarn@1.22.22"
"packageManager": "yarn@4.12.0"
}

6823
yarn.lock

File diff suppressed because it is too large Load Diff