alpha
Login
or
Join now
seanaye.bsky.social
/
nixos-config
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
me like nix
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
add claude notify
author
Sean Aye
date
3 months ago
(Mar 22, 2026, 8:03 PM -0400)
commit
d114f55a
d114f55a743a3fa2d8766105f82e6af90c37dfef
parent
0d5d2f04
0d5d2f0429b7e8b0b7f39752b0d820bca0207ae1
change-id
wovpqmum
wovpqmumpqumuytpzkpqwxtulnumuyup
+81
-327
12 changed files
Expand all
Collapse all
Unified
Split
hosts
common
home.nix
youtube-tui
appearance.yml
cmdefine.yml
commandbindings.yml
commands.yml
keybindings.yml
main.yml
pages.yml
remaps.yml
search.yml
packages
zjctl.nix
zrpc-wasm.nix
+23
-5
hosts/common/home.nix
Reviewed
···
5
5
...
6
6
}:
7
7
8
8
+
let
9
9
+
zjctl = import ../../packages/zjctl.nix { inherit pkgs; };
10
10
+
zrpc-wasm = import ../../packages/zrpc-wasm.nix { inherit pkgs; };
11
11
+
in
8
12
{
9
13
# Import the home-manager modules you want to use
10
14
imports = [
···
55
59
zoxide
56
60
chromium
57
61
claude-code
62
62
+
libnotify # for notify-send (claude-notify)
63
63
+
zjctl # Programmatic Zellij control
64
64
+
(pkgs.writeShellScriptBin "claude-notify" ''
65
65
+
PANE_ID="$ZELLIJ_PANE_ID"
66
66
+
(
67
67
+
ACTION=$(${pkgs.libnotify}/bin/notify-send "Claude Code" "Waiting for your approval" \
68
68
+
--app-name=claude-code \
69
69
+
--action=default=Open \
70
70
+
--wait)
71
71
+
if [ "$ACTION" = "default" ]; then
72
72
+
niri msg action focus-window --app-id Alacritty
73
73
+
zjctl pane focus --pane "id:terminal:$PANE_ID"
74
74
+
fi
75
75
+
) &
76
76
+
'')
58
77
nautilus # file browser
59
78
sqlitebrowser
60
79
gnome-characters # symbol picker
···
527
546
};
528
547
};
529
548
};
549
549
+
load_plugins = {
550
550
+
"file:${zrpc-wasm}/zrpc.wasm" = {};
551
551
+
};
530
552
pane_frames = false;
531
553
show_startup_tips = false;
532
554
ui = {
···
586
608
scripts = [ pkgs.mpvScripts.mpris ];
587
609
config.af = "loudnorm=I=-16:TP=-1.5:LRA=11";
588
610
};
589
589
-
xdg.configFile."youtube-tui" = {
590
590
-
source = ./youtube-tui;
591
591
-
recursive = true;
592
592
-
force = true;
593
593
-
};
611
611
+
xdg.configFile."youtube-tui/commands.yml".source = ./youtube-tui/commands.yml;
594
612
programs.git = {
595
613
enable = true;
596
614
settings = {
-27
hosts/common/youtube-tui/appearance.yml
Reviewed
···
1
1
-
borders: Rounded
2
2
-
colors:
3
3
-
text: Reset
4
4
-
text_special: Reset
5
5
-
text_secondary: Reset
6
6
-
text_error: LightRed
7
7
-
outline: Reset
8
8
-
outline_selected: LightBlue
9
9
-
outline_hover: LightRed
10
10
-
outline_secondary: LightYellow
11
11
-
message_outline: '#FF7F00'
12
12
-
message_error_outline: LightRed
13
13
-
message_success_outline: LightGreen
14
14
-
command_capture: '#64FF64'
15
15
-
item_info:
16
16
-
tag: Gray
17
17
-
title: LightBlue
18
18
-
description: Gray
19
19
-
author: LightGreen
20
20
-
viewcount: LightYellow
21
21
-
length: LightCyan
22
22
-
published: LightMagenta
23
23
-
video_count: '#838DFF'
24
24
-
sub_count: '#65FFBA'
25
25
-
likes: '#C8FF81'
26
26
-
genre: '#FF75D7'
27
27
-
page_turner: Gray
-25
hosts/common/youtube-tui/cmdefine.yml
Reviewed
···
1
1
-
bookmarks: loadpage bookmarks
2
2
-
feed: loadpage feed
3
3
-
pause: mpv sprop pause yes ;; echo mpv Player paused
4
4
-
resume: mpv sprop pause no ;; echo mpv Player resumed
5
5
-
library: loadpage library
6
6
-
watchhistory: loadpage watchhistory
7
7
-
x: quit
8
8
-
q: quit
9
9
-
playlist: loadpage playlist
10
10
-
r: reload
11
11
-
v: version
12
12
-
trending: loadpage trending
13
13
-
rc: reload configs
14
14
-
search: loadpage search
15
15
-
popular: loadpage popular
16
16
-
back: mpv playlist-previous ;; echo mpv Skipped
17
17
-
channel: loadpage channel
18
18
-
tpause: mpv tprop pause ;; echo success Toggled player pause
19
19
-
h: help
20
20
-
sub: sync
21
21
-
video: loadpage video
22
22
-
next: mpv playlist-next ;; echo mpv Skipped
23
23
-
exit: quit
24
24
-
cp: copy
25
25
-
print: echo
-82
hosts/common/youtube-tui/commandbindings.yml
Reviewed
···
1
1
-
global:
2
2
-
' ':
3
3
-
0: tpause ;; echo mpv Player pause toggled
4
4
-
Right:
5
5
-
3: next ;; echo mpv Skipped
6
6
-
2: mpv seek 5 ;; echo mpv Fast forwarded 5 seconds
7
7
-
Left:
8
8
-
3: back ;; echo mpv Unskipped
9
9
-
2: mpv seek -5 ;; echo mpv Rewinded 5 seconds
10
10
-
'y':
11
11
-
0: cp ${url}
12
12
-
'f':
13
13
-
2: run ${browser} '${url}'
14
14
-
'c':
15
15
-
2: cp ${url}
16
16
-
search:
17
17
-
'a':
18
18
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
19
19
-
'A':
20
20
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
21
21
-
'p':
22
22
-
2: parrun mpv '${hover-url}'
23
23
-
popular:
24
24
-
'a':
25
25
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
26
26
-
'p':
27
27
-
2: parrun mpv '${hover-url}'
28
28
-
'A':
29
29
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
30
30
-
trending:
31
31
-
'p':
32
32
-
2: parrun mpv '${hover-url}'
33
33
-
'A':
34
34
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
35
35
-
'a':
36
36
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
37
37
-
video: {}
38
38
-
playlist:
39
39
-
'a':
40
40
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
41
41
-
'A':
42
42
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
43
43
-
'p':
44
44
-
2: parrun mpv '${hover-url}'
45
45
-
channel_main: {}
46
46
-
channel_videos:
47
47
-
'a':
48
48
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
49
49
-
'p':
50
50
-
2: parrun mpv '${hover-url}'
51
51
-
'A':
52
52
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
53
53
-
channel_playlists:
54
54
-
'p':
55
55
-
2: parrun mpv '${hover-url}'
56
56
-
'A':
57
57
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
58
58
-
'a':
59
59
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
60
60
-
watchhistory:
61
61
-
'a':
62
62
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
63
63
-
'p':
64
64
-
2: parrun mpv '${hover-url}'
65
65
-
'A':
66
66
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
67
67
-
feed:
68
68
-
'P':
69
69
-
1: parrun ${terminal-emulator} mpv '${hover-channel-url}/videos' --no-video --loop-playlist=inf --shuffle
70
70
-
'a':
71
71
-
2: parrun ${terminal-emulator} mpv '${hover-video-url}' --no-video
72
72
-
'p':
73
73
-
2: parrun mpv '${hover-video-url}'
74
74
-
'A':
75
75
-
1: parrun ${terminal-emulator} mpv '${hover-channel-url}/videos' --no-video --loop-playlist=inf --shuffle
76
76
-
library:
77
77
-
'a':
78
78
-
2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video
79
79
-
'A':
80
80
-
1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle
81
81
-
'p':
82
82
-
2: parrun mpv '${hover-url}'
+7
-7
hosts/common/youtube-tui/commands.yml
Reviewed
···
1
1
launch_command: loadpage library ;; flush ;; history clear ;; key Esc 0 ;; key Up 0 ;; key Up 0 ;; key Left 0 ;; key Enter 0
2
2
video:
3
3
- Reload updated video: run rm '~/.cache/youtube-tui/info/${id}.json' ;; video ${id}
4
4
-
- Play video: parrun ${video-player} '${embed-url}'
5
5
-
- Play audio: run pkill -f 'mpv --no-video' ;; parrun mpv --no-video '${embed-url}'
6
6
-
- Play audio (loop): run pkill -f 'mpv --no-video' ;; parrun mpv --no-video --loop '${embed-url}'
4
4
+
- Play video: parrun ${video-player} '${url}'
5
5
+
- Play audio: run pkill -f 'mpv --no-video' ;; parrun mpv --no-video '${url}'
6
6
+
- Play audio (loop): run pkill -f 'mpv --no-video' ;; parrun mpv --no-video --loop '${url}'
7
7
- View channel: channel ${channel-id}
8
8
- Subscribe to channel: sync ${channel-id}
9
9
- Open in browser: parrun ${browser} '${url}'
10
10
- Toggle bookmark: togglemark ${id}
11
11
-
- Save video to library: bookmark ${id} ;; run rm -rf '${save-path}${id}.*' ;; parrun ${terminal-emulator} ${youtube-downloader} '${embed-url}' -o '${save-path}%(title)s[%(id)s].%(ext)s'
12
12
-
- Save audio to library: bookmark ${id} ;; parrun rm -rf '${save-path}${id}.*' ;; parrun ${terminal-emulator} ${youtube-downloader} '${embed-url}' -x -o '${save-path}%(title)s[%(id)s].%(ext)s'
11
11
+
- Save video to library: bookmark ${id} ;; run rm -rf '${save-path}${id}.*' ;; parrun ${terminal-emulator} ${youtube-downloader} '${url}' -o '${save-path}%(title)s[%(id)s].%(ext)s'
12
12
+
- Save audio to library: bookmark ${id} ;; parrun rm -rf '${save-path}${id}.*' ;; parrun ${terminal-emulator} ${youtube-downloader} '${url}' -x -o '${save-path}%(title)s[%(id)s].%(ext)s'
13
13
- 'Mode: ${provider}': switchprovider
14
14
saved_video:
15
15
- Reload updated video: run rm '~/.cache/youtube-tui/info/${id}.json' ;; video ${id}
···
20
20
- Subscribe to channel: sync ${channel-id}
21
21
- Open in browser: parrun ${browser} '${url}'
22
22
- Toggle bookmark: togglemark ${id}
23
23
-
- Redownload video to library: bookmark ${id} ;; run rm ${save-path}*${id}*.* ;; parrun ${terminal-emulator} ${youtube-downloader} ${embed-url} -o '${save-path}%(title)s[%(id)s].%(ext)s'
24
24
-
- Redownload audio to library: bookmark ${id} ;; run rm ${save-path}*${id}*.* ;; parrun ${terminal-emulator} ${youtube-downloader} ${embed-url} -x -o '${save-path}%(title)s[%(id)s].%(ext)s'
23
23
+
- Redownload video to library: bookmark ${id} ;; run rm ${save-path}*${id}*.* ;; parrun ${terminal-emulator} ${youtube-downloader} ${url} -o '${save-path}%(title)s[%(id)s].%(ext)s'
24
24
+
- Redownload audio to library: bookmark ${id} ;; run rm ${save-path}*${id}*.* ;; parrun ${terminal-emulator} ${youtube-downloader} ${url} -x -o '${save-path}%(title)s[%(id)s].%(ext)s'
25
25
- Delete saved file: run rm ${save-path}*${id}*.*
26
26
playlist:
27
27
- Switch view: '%switch-view%'
-52
hosts/common/youtube-tui/keybindings.yml
Reviewed
···
1
1
-
'q':
2
2
-
0: Exit
3
3
-
Up:
4
4
-
2: PreviousEntry
5
5
-
0: MoveUp
6
6
-
'l':
7
7
-
0: MoveRight
8
8
-
'h':
9
9
-
0: MoveLeft
10
10
-
Right:
11
11
-
2: NextWord
12
12
-
0: MoveRight
13
13
-
'w':
14
14
-
2: RemoveWord
15
15
-
Left:
16
16
-
2: PreviousWord
17
17
-
4: Back
18
18
-
0: MoveLeft
19
19
-
'a':
20
20
-
2: First
21
21
-
Backspace:
22
22
-
0: Back
23
23
-
'k':
24
24
-
0: MoveUp
25
25
-
'j':
26
26
-
0: MoveDown
27
27
-
'v':
28
28
-
2: Paste
29
29
-
Enter:
30
30
-
0: Select
31
31
-
Down:
32
32
-
0: MoveDown
33
33
-
2: NextEntry
34
34
-
Esc:
35
35
-
0: Deselect
36
36
-
End:
37
37
-
0: ClearHistory
38
38
-
'u':
39
39
-
2: ClearLine
40
40
-
'r':
41
41
-
2: Reload
42
42
-
Home:
43
43
-
0: FirstHistory
44
44
-
F5:
45
45
-
0: Reload
46
46
-
':':
47
47
-
0: StartCommandCapture
48
48
-
'd':
49
49
-
4: RemoveWord
50
50
-
0: ClearHistory
51
51
-
'e':
52
52
-
2: End
-30
hosts/common/youtube-tui/main.yml
Reviewed
···
1
1
-
mouse_support: true
2
2
-
invidious_instance: https://invidious.f5.si
3
3
-
write_config: Try
4
4
-
allow_unicode: true
5
5
-
message_bar_default: All good :)
6
6
-
images: Halfblocks
7
7
-
refresh_after_modifying_search_filters: true
8
8
-
syncing:
9
9
-
download_images: true
10
10
-
sync_channel_info: true
11
11
-
sync_channel_cooldown_secs: 86400
12
12
-
sync_videos_cooldown_secs: 600
13
13
-
limits:
14
14
-
watch_history: 50
15
15
-
search_history: 75
16
16
-
commands_history: 75
17
17
-
textbar_scroll_behaviour: History
18
18
-
image_index: 4
19
19
-
provider: YouTube
20
20
-
search_provider: RustyPipe
21
21
-
api_key: YOUR API KEY HERE
22
22
-
shell: sh
23
23
-
legacy_input_handling: false
24
24
-
env:
25
25
-
browser: xdg-open
26
26
-
terminal-emulator: alacritty -e
27
27
-
youtube-downloader: yt-dlp
28
28
-
download-path: ~/Downloads/%(title)s-%(id)s.%(ext)s
29
29
-
video-player: mpv
30
30
-
save-path: ~/.local/share/youtube-tui/saved/
-88
hosts/common/youtube-tui/pages.yml
Reviewed
···
1
1
-
main_menu:
2
2
-
layout:
3
3
-
- type: NonCenteredRow
4
4
-
items:
5
5
-
- SearchBar
6
6
-
- SearchFilters
7
7
-
- type: CenteredRow
8
8
-
items:
9
9
-
- Library
10
10
-
- Feed
11
11
-
- History
12
12
-
- type: NonCenteredRow
13
13
-
items:
14
14
-
- ItemList
15
15
-
- type: NonCenteredRow
16
16
-
items:
17
17
-
- MessageBar
18
18
-
message: Loading main menu...
19
19
-
command: key Esc 0 ;; key Down 0 ;; key Down 0 ;; key Enter 0
20
20
-
feed:
21
21
-
layout:
22
22
-
- type: NonCenteredRow
23
23
-
items:
24
24
-
- SearchBar
25
25
-
- SearchFilters
26
26
-
- type: CenteredRow
27
27
-
items:
28
28
-
- Library
29
29
-
- Feed
30
30
-
- History
31
31
-
- type: NonCenteredRow
32
32
-
items:
33
33
-
- ChannelList
34
34
-
- type: NonCenteredRow
35
35
-
items:
36
36
-
- VideoList
37
37
-
- type: NonCenteredRow
38
38
-
items:
39
39
-
- MessageBar
40
40
-
message: Loading feed...
41
41
-
command: key Esc 0 ;; key Down 0 ;; key Down 0 ;; key Enter 0
42
42
-
search:
43
43
-
layout:
44
44
-
- type: NonCenteredRow
45
45
-
items:
46
46
-
- SearchBar
47
47
-
- SearchFilters
48
48
-
- type: NonCenteredRow
49
49
-
items:
50
50
-
- ItemList
51
51
-
- type: NonCenteredRow
52
52
-
items:
53
53
-
- MessageBar
54
54
-
message: Loading search results...
55
55
-
command: key Esc 0 ;; key Down 0 ;; key Enter 0
56
56
-
singleitem:
57
57
-
layout:
58
58
-
- type: NonCenteredRow
59
59
-
items:
60
60
-
- SearchBar
61
61
-
- SearchFilters
62
62
-
- type: NonCenteredRow
63
63
-
items:
64
64
-
- SingleItemInfo
65
65
-
- type: NonCenteredRow
66
66
-
items:
67
67
-
- MessageBar
68
68
-
message: Loading item details...
69
69
-
command: key Esc 0 ;; key Down 0 ;; key Enter 0
70
70
-
channeldisplay:
71
71
-
layout:
72
72
-
- type: NonCenteredRow
73
73
-
items:
74
74
-
- SearchBar
75
75
-
- SearchFilters
76
76
-
- type: CenteredRow
77
77
-
items:
78
78
-
- ChannelMain
79
79
-
- ChannelVideos
80
80
-
- ChannelPlaylists
81
81
-
- type: NonCenteredRow
82
82
-
items:
83
83
-
- ChannelDisplay
84
84
-
- type: NonCenteredRow
85
85
-
items:
86
86
-
- MessageBar
87
87
-
message: Loading channel details...
88
88
-
command: key Esc 0 ;; key Down 0 ;; key Enter 0 ;; key Up 0
-4
hosts/common/youtube-tui/remaps.yml
Reviewed
···
1
1
-
'a':
2
2
-
5:
3
3
-
code: 'b'
4
4
-
modifiers: 5
-7
hosts/common/youtube-tui/search.yml
Reviewed
···
1
1
-
query: ''
2
2
-
filters:
3
3
-
sort: Relevance
4
4
-
date: None
5
5
-
duration: None
6
6
-
type: All
7
7
-
page: 1
+26
packages/zjctl.nix
Reviewed
···
1
1
+
{
2
2
+
pkgs,
3
3
+
}:
4
4
+
5
5
+
pkgs.stdenv.mkDerivation {
6
6
+
pname = "zjctl";
7
7
+
version = "0.1.3";
8
8
+
9
9
+
src = pkgs.fetchurl {
10
10
+
url = "https://github.com/mrshu/zjctl/releases/download/v0.1.3/zjctl-x86_64-linux.tar.gz";
11
11
+
hash = "sha256-jtCvbfGg6hlzS9omUtiquATgLJbIsdz2yVVydzU+XV4=";
12
12
+
};
13
13
+
14
14
+
sourceRoot = ".";
15
15
+
16
16
+
installPhase = ''
17
17
+
install -Dm755 zjctl $out/bin/zjctl
18
18
+
'';
19
19
+
20
20
+
meta = {
21
21
+
description = "Programmatic Zellij automation CLI";
22
22
+
homepage = "https://github.com/mrshu/zjctl";
23
23
+
license = pkgs.lib.licenses.mit;
24
24
+
platforms = [ "x86_64-linux" ];
25
25
+
};
26
26
+
}
+25
packages/zrpc-wasm.nix
Reviewed
···
1
1
+
{
2
2
+
pkgs,
3
3
+
}:
4
4
+
5
5
+
pkgs.stdenv.mkDerivation {
6
6
+
pname = "zrpc-wasm";
7
7
+
version = "0.1.3";
8
8
+
9
9
+
src = pkgs.fetchurl {
10
10
+
url = "https://github.com/mrshu/zjctl/releases/download/v0.1.3/zrpc.wasm";
11
11
+
hash = "sha256-ldY8ZL2GeR1PI9K4X1eFlu42MnVWjmOPKRe0zDPLJl0=";
12
12
+
};
13
13
+
14
14
+
dontUnpack = true;
15
15
+
16
16
+
installPhase = ''
17
17
+
install -Dm644 $src $out/zrpc.wasm
18
18
+
'';
19
19
+
20
20
+
meta = {
21
21
+
description = "Zellij RPC plugin for zjctl";
22
22
+
homepage = "https://github.com/mrshu/zjctl";
23
23
+
license = pkgs.lib.licenses.mit;
24
24
+
};
25
25
+
}