Compare commits

..

5 Commits

10 changed files with 73 additions and 26 deletions

View File

@@ -1,8 +1,5 @@
# Extra autostart processes # Extra autostart processes
# kanshi for managing multi-monitor setup
exec-once = uwsm app -- kanshi
# assign workspaces to preferred monitors # assign workspaces to preferred monitors
exec = ~/.local/bin/assign-workspace-monitors exec = ~/.local/bin/assign-workspace-monitors

View File

@@ -11,7 +11,7 @@ listener {
} }
listener { listener {
timeout = 300 # 5min timeout = 151 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed on-timeout = loginctl lock-session # lock screen when timeout has passed
} }

View File

@@ -29,7 +29,8 @@ input {
} }
# Scroll faster in the terminal # Scroll faster in the terminal
windowrule = scrolltouchpad 1.5, tag:terminal windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5
windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
device { device {
name = pixa3854:00-093a:0274-touchpad name = pixa3854:00-093a:0274-touchpad

View File

@@ -1,18 +1,18 @@
# datagrip gets its own named workspace # datagrip gets its own named workspace
windowrule = workspace name:DataGrip, class:jetbrains-datagrip windowrule = workspace name:DataGrip, match:class jetbrains-datagrip
# creddy gets some special treatment # creddy gets some special treatment
# windowrule = workspace special:creddy, class:creddy # windowrule = workspace special:creddy, class:creddy
windowrule = float, class:creddy windowrule = float 1, match:class creddy
windowrule = size 800 600, class:creddy windowrule = size 800 600, match:class creddy
# this just gets ignored when monitor 2 isn't present, which is perfect # this just gets ignored when monitor 2 isn't present, which is perfect
windowrule = monitor 2, class:creddy windowrule = monitor 1, match:class creddy
windowrule = workspace special:slack, class:Slack windowrule = workspace special:slack, match:class Slack
# excluding floating windows allows the unlock and quick-access popups to show in any workspace # excluding floating windows allows the unlock and quick-access popups to show in any workspace
windowrule = workspace special:1password, class:1Password, floating:0 windowrule = workspace special:1password, match:class 1Password, match:float 0
# quick-access popup doesn't resize automatically when its content changes # quick-access popup doesn't resize automatically when its content changes
# windowrule = size 550 404, class:1Password, title:Quick.* # windowrule = size 550 404, class:1Password, title:Quick.*
windowrule = persistentsize, class:1Password, title:Quick.* windowrule = persistent_size 1, match:class 1Password, match:title Quick.*

View File

@@ -21,6 +21,9 @@ rg = "latest"
duckdb = "latest" duckdb = "latest"
tokei = "latest" tokei = "latest"
claude = "latest" claude = "latest"
"cargo:shikane" = "latest"
xh = "latest"
"pipx:asciinema" = "latest"
[tools."gitlab:tools/setconf"] [tools."gitlab:tools/setconf"]
version = "latest" version = "latest"

View File

@@ -0,0 +1,11 @@
[Unit]
Description=Shikane monitor manager
After=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/mise exec -- shikane
[Install]
WantedBy=default.target

View File

@@ -5,7 +5,7 @@
"spacing": 0, "spacing": 0,
"height": 26, "height": 26,
"modules-left": ["custom/omarchy", "hyprland/workspaces"], "modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator"], "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator"],
"modules-right": [ "modules-right": [
"group/tray-expander", "group/tray-expander",
"bluetooth", "bluetooth",
@@ -91,12 +91,13 @@
}, },
"pulseaudio": { "pulseaudio": {
"format": "{icon}", "format": "{icon}",
"on-click": "omarchy-launch-or-focus-tui wiremix", "on-click": "omarchy-launch-audio",
"on-click-right": "pamixer -t", "on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%", "tooltip-format": "Playing at {volume}%",
"scroll-step": 5, "scroll-step": 5,
"format-muted": "", "format-muted": "",
"format-icons": { "format-icons": {
"headphone": "",
"default": ["", "", ""] "default": ["", "", ""]
} }
}, },
@@ -118,6 +119,19 @@
"signal": 8, "signal": 8,
"return-type": "json" "return-type": "json"
}, },
"custom/voxtype": {
"exec": "omarchy-voxtype-status",
"return-type": "json",
"format": "{icon}",
"format-icons": {
"idle": "",
"recording": "󰍬",
"transcribing": "󰔟"
},
"tooltip": true,
"on-click-right": "omarchy-voxtype-config",
"on-click": "omarchy-voxtype-model"
},
"tray": { "tray": {
"icon-size": 12, "icon-size": 12,
"spacing": 17 "spacing": 17

View File

@@ -69,7 +69,7 @@ tooltip {
} }
#clock { #clock {
margin-left: 8.75px; margin-left: 5px;
} }
.hidden { .hidden {
@@ -78,10 +78,20 @@ tooltip {
#custom-screenrecording-indicator { #custom-screenrecording-indicator {
min-width: 12px; min-width: 12px;
margin-left: 8.75px; margin-left: 5px;
font-size: 10px; font-size: 10px;
padding-bottom: 1px;
} }
#custom-screenrecording-indicator.active { #custom-screenrecording-indicator.active {
color: #a55555; color: #a55555;
} }
#custom-voxtype {
min-width: 12px;
margin: 0 0 0 7.5px;
}
#custom-voxtype.recording {
color: #a55555;
}

View File

@@ -7,6 +7,9 @@
// custom settings, run `zed: open default settings` from the // custom settings, run `zed: open default settings` from the
// command palette (cmd-shift-p / ctrl-shift-p) // command palette (cmd-shift-p / ctrl-shift-p)
{ {
"git_panel": {
"tree_view": true
},
"agent": { "agent": {
"model_parameters": [], "model_parameters": [],
"default_profile": "write" "default_profile": "write"

View File

@@ -3,11 +3,11 @@
import json import json
import subprocess import subprocess
CONFIG = { CONFIG = [
'Samsung Electric Company LS27A800U HCJW301093': 1, {'make': 'Samsung Electric Company', 'model': 'LS27A800U', 'position': 'left', 'workspace': 1},
'Seanix Technology Inc NX-EDG27X C6F0K3CN07UL': 2, {'make': 'Seanix Technology Inc', 'model': 'NX-EDG27X', 'position': 'center', 'workspace': 2},
'BOE 0x0BCA': 3 {'make': 'BOE', 'model': '0x0BCA', 'position': 'right', 'workspace': 3},
} ]
p = subprocess.run( p = subprocess.run(
@@ -17,15 +17,23 @@ p = subprocess.run(
encoding='utf-8' encoding='utf-8'
) )
monitors = json.loads(p.stdout) monitors = json.loads(p.stdout)
print('monitors:', monitors) # print('monitors:', monitors)
if set(m['description'] for m in monitors) == CONFIG.keys(): monitor_ids = {}
for mon in monitors:
for conf in CONFIG:
if conf['make'] == mon['make'] and conf['model'] == mon['model']:
monitor_ids[ conf['position'] ] = mon['id']
if len(monitor_ids) == len(CONFIG):
print('config matched, assigning:') print('config matched, assigning:')
dispatches = [] dispatches = []
for m in monitors: for conf in CONFIG:
workspace = CONFIG[m['description']] workspace = conf['workspace']
monitor_id = monitor_ids[ conf['position'] ]
# move workspace to desired monitor # move workspace to desired monitor
dispatches.append(f"dispatch moveworkspacetomonitor {workspace} {m['name']}") dispatches.append(f"dispatch moveworkspacetomonitor {workspace} {monitor_id}")
# focus the workspace so that it's visible after moving # focus the workspace so that it's visible after moving
dispatches.append(f"workspace {workspace}") dispatches.append(f"workspace {workspace}")
cmd = ['hyprctl', '--batch', ' ; '.join(dispatches)] cmd = ['hyprctl', '--batch', ' ; '.join(dispatches)]