me like nix
0

Configure Feed

Select the types of activity you want to include in your feed.

add claude notify

author
Sean Aye
date (Mar 22, 2026, 8:03 PM -0400) commit d114f55a parent 0d5d2f04 change-id wovpqmum
+81 -327
+23 -5
hosts/common/home.nix
··· 5 5 ... 6 6 }: 7 7 8 + let 9 + zjctl = import ../../packages/zjctl.nix { inherit pkgs; }; 10 + zrpc-wasm = import ../../packages/zrpc-wasm.nix { inherit pkgs; }; 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 + libnotify # for notify-send (claude-notify) 63 + zjctl # Programmatic Zellij control 64 + (pkgs.writeShellScriptBin "claude-notify" '' 65 + PANE_ID="$ZELLIJ_PANE_ID" 66 + ( 67 + ACTION=$(${pkgs.libnotify}/bin/notify-send "Claude Code" "Waiting for your approval" \ 68 + --app-name=claude-code \ 69 + --action=default=Open \ 70 + --wait) 71 + if [ "$ACTION" = "default" ]; then 72 + niri msg action focus-window --app-id Alacritty 73 + zjctl pane focus --pane "id:terminal:$PANE_ID" 74 + fi 75 + ) & 76 + '') 58 77 nautilus # file browser 59 78 sqlitebrowser 60 79 gnome-characters # symbol picker ··· 527 546 }; 528 547 }; 529 548 }; 549 + load_plugins = { 550 + "file:${zrpc-wasm}/zrpc.wasm" = {}; 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 - xdg.configFile."youtube-tui" = { 590 - source = ./youtube-tui; 591 - recursive = true; 592 - force = true; 593 - }; 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
··· 1 - borders: Rounded 2 - colors: 3 - text: Reset 4 - text_special: Reset 5 - text_secondary: Reset 6 - text_error: LightRed 7 - outline: Reset 8 - outline_selected: LightBlue 9 - outline_hover: LightRed 10 - outline_secondary: LightYellow 11 - message_outline: '#FF7F00' 12 - message_error_outline: LightRed 13 - message_success_outline: LightGreen 14 - command_capture: '#64FF64' 15 - item_info: 16 - tag: Gray 17 - title: LightBlue 18 - description: Gray 19 - author: LightGreen 20 - viewcount: LightYellow 21 - length: LightCyan 22 - published: LightMagenta 23 - video_count: '#838DFF' 24 - sub_count: '#65FFBA' 25 - likes: '#C8FF81' 26 - genre: '#FF75D7' 27 - page_turner: Gray
-25
hosts/common/youtube-tui/cmdefine.yml
··· 1 - bookmarks: loadpage bookmarks 2 - feed: loadpage feed 3 - pause: mpv sprop pause yes ;; echo mpv Player paused 4 - resume: mpv sprop pause no ;; echo mpv Player resumed 5 - library: loadpage library 6 - watchhistory: loadpage watchhistory 7 - x: quit 8 - q: quit 9 - playlist: loadpage playlist 10 - r: reload 11 - v: version 12 - trending: loadpage trending 13 - rc: reload configs 14 - search: loadpage search 15 - popular: loadpage popular 16 - back: mpv playlist-previous ;; echo mpv Skipped 17 - channel: loadpage channel 18 - tpause: mpv tprop pause ;; echo success Toggled player pause 19 - h: help 20 - sub: sync 21 - video: loadpage video 22 - next: mpv playlist-next ;; echo mpv Skipped 23 - exit: quit 24 - cp: copy 25 - print: echo
-82
hosts/common/youtube-tui/commandbindings.yml
··· 1 - global: 2 - ' ': 3 - 0: tpause ;; echo mpv Player pause toggled 4 - Right: 5 - 3: next ;; echo mpv Skipped 6 - 2: mpv seek 5 ;; echo mpv Fast forwarded 5 seconds 7 - Left: 8 - 3: back ;; echo mpv Unskipped 9 - 2: mpv seek -5 ;; echo mpv Rewinded 5 seconds 10 - 'y': 11 - 0: cp ${url} 12 - 'f': 13 - 2: run ${browser} '${url}' 14 - 'c': 15 - 2: cp ${url} 16 - search: 17 - 'a': 18 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 19 - 'A': 20 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 21 - 'p': 22 - 2: parrun mpv '${hover-url}' 23 - popular: 24 - 'a': 25 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 26 - 'p': 27 - 2: parrun mpv '${hover-url}' 28 - 'A': 29 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 30 - trending: 31 - 'p': 32 - 2: parrun mpv '${hover-url}' 33 - 'A': 34 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 35 - 'a': 36 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 37 - video: {} 38 - playlist: 39 - 'a': 40 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 41 - 'A': 42 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 43 - 'p': 44 - 2: parrun mpv '${hover-url}' 45 - channel_main: {} 46 - channel_videos: 47 - 'a': 48 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 49 - 'p': 50 - 2: parrun mpv '${hover-url}' 51 - 'A': 52 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 53 - channel_playlists: 54 - 'p': 55 - 2: parrun mpv '${hover-url}' 56 - 'A': 57 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 58 - 'a': 59 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 60 - watchhistory: 61 - 'a': 62 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 63 - 'p': 64 - 2: parrun mpv '${hover-url}' 65 - 'A': 66 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 67 - feed: 68 - 'P': 69 - 1: parrun ${terminal-emulator} mpv '${hover-channel-url}/videos' --no-video --loop-playlist=inf --shuffle 70 - 'a': 71 - 2: parrun ${terminal-emulator} mpv '${hover-video-url}' --no-video 72 - 'p': 73 - 2: parrun mpv '${hover-video-url}' 74 - 'A': 75 - 1: parrun ${terminal-emulator} mpv '${hover-channel-url}/videos' --no-video --loop-playlist=inf --shuffle 76 - library: 77 - 'a': 78 - 2: parrun ${terminal-emulator} mpv '${hover-url}' --no-video 79 - 'A': 80 - 1: parrun ${terminal-emulator} mpv '${hover-url}' --no-video --loop-playlist=inf --shuffle 81 - 'p': 82 - 2: parrun mpv '${hover-url}'
+7 -7
hosts/common/youtube-tui/commands.yml
··· 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 - - Play video: parrun ${video-player} '${embed-url}' 5 - - Play audio: run pkill -f 'mpv --no-video' ;; parrun mpv --no-video '${embed-url}' 6 - - Play audio (loop): run pkill -f 'mpv --no-video' ;; parrun mpv --no-video --loop '${embed-url}' 4 + - Play video: parrun ${video-player} '${url}' 5 + - Play audio: run pkill -f 'mpv --no-video' ;; parrun mpv --no-video '${url}' 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 - - 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 - - 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 + - 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 + - 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 - - 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 - - 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 + - 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 + - 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
··· 1 - 'q': 2 - 0: Exit 3 - Up: 4 - 2: PreviousEntry 5 - 0: MoveUp 6 - 'l': 7 - 0: MoveRight 8 - 'h': 9 - 0: MoveLeft 10 - Right: 11 - 2: NextWord 12 - 0: MoveRight 13 - 'w': 14 - 2: RemoveWord 15 - Left: 16 - 2: PreviousWord 17 - 4: Back 18 - 0: MoveLeft 19 - 'a': 20 - 2: First 21 - Backspace: 22 - 0: Back 23 - 'k': 24 - 0: MoveUp 25 - 'j': 26 - 0: MoveDown 27 - 'v': 28 - 2: Paste 29 - Enter: 30 - 0: Select 31 - Down: 32 - 0: MoveDown 33 - 2: NextEntry 34 - Esc: 35 - 0: Deselect 36 - End: 37 - 0: ClearHistory 38 - 'u': 39 - 2: ClearLine 40 - 'r': 41 - 2: Reload 42 - Home: 43 - 0: FirstHistory 44 - F5: 45 - 0: Reload 46 - ':': 47 - 0: StartCommandCapture 48 - 'd': 49 - 4: RemoveWord 50 - 0: ClearHistory 51 - 'e': 52 - 2: End
-30
hosts/common/youtube-tui/main.yml
··· 1 - mouse_support: true 2 - invidious_instance: https://invidious.f5.si 3 - write_config: Try 4 - allow_unicode: true 5 - message_bar_default: All good :) 6 - images: Halfblocks 7 - refresh_after_modifying_search_filters: true 8 - syncing: 9 - download_images: true 10 - sync_channel_info: true 11 - sync_channel_cooldown_secs: 86400 12 - sync_videos_cooldown_secs: 600 13 - limits: 14 - watch_history: 50 15 - search_history: 75 16 - commands_history: 75 17 - textbar_scroll_behaviour: History 18 - image_index: 4 19 - provider: YouTube 20 - search_provider: RustyPipe 21 - api_key: YOUR API KEY HERE 22 - shell: sh 23 - legacy_input_handling: false 24 - env: 25 - browser: xdg-open 26 - terminal-emulator: alacritty -e 27 - youtube-downloader: yt-dlp 28 - download-path: ~/Downloads/%(title)s-%(id)s.%(ext)s 29 - video-player: mpv 30 - save-path: ~/.local/share/youtube-tui/saved/
-88
hosts/common/youtube-tui/pages.yml
··· 1 - main_menu: 2 - layout: 3 - - type: NonCenteredRow 4 - items: 5 - - SearchBar 6 - - SearchFilters 7 - - type: CenteredRow 8 - items: 9 - - Library 10 - - Feed 11 - - History 12 - - type: NonCenteredRow 13 - items: 14 - - ItemList 15 - - type: NonCenteredRow 16 - items: 17 - - MessageBar 18 - message: Loading main menu... 19 - command: key Esc 0 ;; key Down 0 ;; key Down 0 ;; key Enter 0 20 - feed: 21 - layout: 22 - - type: NonCenteredRow 23 - items: 24 - - SearchBar 25 - - SearchFilters 26 - - type: CenteredRow 27 - items: 28 - - Library 29 - - Feed 30 - - History 31 - - type: NonCenteredRow 32 - items: 33 - - ChannelList 34 - - type: NonCenteredRow 35 - items: 36 - - VideoList 37 - - type: NonCenteredRow 38 - items: 39 - - MessageBar 40 - message: Loading feed... 41 - command: key Esc 0 ;; key Down 0 ;; key Down 0 ;; key Enter 0 42 - search: 43 - layout: 44 - - type: NonCenteredRow 45 - items: 46 - - SearchBar 47 - - SearchFilters 48 - - type: NonCenteredRow 49 - items: 50 - - ItemList 51 - - type: NonCenteredRow 52 - items: 53 - - MessageBar 54 - message: Loading search results... 55 - command: key Esc 0 ;; key Down 0 ;; key Enter 0 56 - singleitem: 57 - layout: 58 - - type: NonCenteredRow 59 - items: 60 - - SearchBar 61 - - SearchFilters 62 - - type: NonCenteredRow 63 - items: 64 - - SingleItemInfo 65 - - type: NonCenteredRow 66 - items: 67 - - MessageBar 68 - message: Loading item details... 69 - command: key Esc 0 ;; key Down 0 ;; key Enter 0 70 - channeldisplay: 71 - layout: 72 - - type: NonCenteredRow 73 - items: 74 - - SearchBar 75 - - SearchFilters 76 - - type: CenteredRow 77 - items: 78 - - ChannelMain 79 - - ChannelVideos 80 - - ChannelPlaylists 81 - - type: NonCenteredRow 82 - items: 83 - - ChannelDisplay 84 - - type: NonCenteredRow 85 - items: 86 - - MessageBar 87 - message: Loading channel details... 88 - command: key Esc 0 ;; key Down 0 ;; key Enter 0 ;; key Up 0
-4
hosts/common/youtube-tui/remaps.yml
··· 1 - 'a': 2 - 5: 3 - code: 'b' 4 - modifiers: 5
-7
hosts/common/youtube-tui/search.yml
··· 1 - query: '' 2 - filters: 3 - sort: Relevance 4 - date: None 5 - duration: None 6 - type: All 7 - page: 1
+26
packages/zjctl.nix
··· 1 + { 2 + pkgs, 3 + }: 4 + 5 + pkgs.stdenv.mkDerivation { 6 + pname = "zjctl"; 7 + version = "0.1.3"; 8 + 9 + src = pkgs.fetchurl { 10 + url = "https://github.com/mrshu/zjctl/releases/download/v0.1.3/zjctl-x86_64-linux.tar.gz"; 11 + hash = "sha256-jtCvbfGg6hlzS9omUtiquATgLJbIsdz2yVVydzU+XV4="; 12 + }; 13 + 14 + sourceRoot = "."; 15 + 16 + installPhase = '' 17 + install -Dm755 zjctl $out/bin/zjctl 18 + ''; 19 + 20 + meta = { 21 + description = "Programmatic Zellij automation CLI"; 22 + homepage = "https://github.com/mrshu/zjctl"; 23 + license = pkgs.lib.licenses.mit; 24 + platforms = [ "x86_64-linux" ]; 25 + }; 26 + }
+25
packages/zrpc-wasm.nix
··· 1 + { 2 + pkgs, 3 + }: 4 + 5 + pkgs.stdenv.mkDerivation { 6 + pname = "zrpc-wasm"; 7 + version = "0.1.3"; 8 + 9 + src = pkgs.fetchurl { 10 + url = "https://github.com/mrshu/zjctl/releases/download/v0.1.3/zrpc.wasm"; 11 + hash = "sha256-ldY8ZL2GeR1PI9K4X1eFlu42MnVWjmOPKRe0zDPLJl0="; 12 + }; 13 + 14 + dontUnpack = true; 15 + 16 + installPhase = '' 17 + install -Dm644 $src $out/zrpc.wasm 18 + ''; 19 + 20 + meta = { 21 + description = "Zellij RPC plugin for zjctl"; 22 + homepage = "https://github.com/mrshu/zjctl"; 23 + license = pkgs.lib.licenses.mit; 24 + }; 25 + }