#!/usr/bin/nualias MENU = fuzzel -dlet sections = [ "active", "recent", "comments" ]$env.CACHE_PATH = ("~/.cache/lobsters" | path expand)$env.ACTIVE_RSS = ( $env.CACHE_PATH | path join "active.xml")$env.COMMENTS_RSS = ( $env.CACHE_PATH | path join "comments.xml")$env.RECENT_RSS = ( $env.CACHE_PATH | path join "recent.xml")if ($env.CACHE_PATH | path exists) { } else { mkdir $env.CACHE_PATH }if (ls $env.CACHE_PATH | is-empty) or (ls $env.CACHE_PATH | get -i size | any { |s| $s == 0KB }) { for section in $sections { http get "https://lobste.rs/rss" | save -f $env.ACTIVE_RSS http get "https://lobste.rs/newest.rss" | save -f $env.RECENT_RSS http get "https://lobste.rs/comments.rss" | save -f $env.COMMENTS_RSS }} else if (ls $env.CACHE_PATH | get -i modified | all { |i| $i < (date now) } ) { http get "https://lobste.rs/rss" | save -f $env.ACTIVE_RSS http get "https://lobste.rs/newest.rss" | save -f $env.RECENT_RSS http get "https://lobste.rs/comments.rss" | save -f $env.COMMENTS_RSS} else {}let section = ($sections | to text | str trim | MENU -p "choose lobsters section>")let active_list = ( open --raw $env.ACTIVE_RSS | query xml //item | get //item )let comment_list = ( open --raw $env.COMMENTS_RSS | query xml //item | get //item )let recent_list = ( open --raw $env.RECENT_RSS | query xml //item | get //item )if ($section | is-empty) { exit 1}# line 2 -> link to post# line 6 -> link to commentif ($section =~ "active") { let TITLES = ($active_list | each {|it| $it | lines | str trim | get 1} | uniq) let LINKS = ($active_list | each {|it| $it | lines | str trim | get 2}) let POSTS = ($active_list | each {|it| $it | lines | str trim | get 6}) let TITLE = ($TITLES | to text | MENU -p "active section list>") if ($TITLE | is-empty) { exit 1 } let options = [ "link to comment" "link to title" ] let option = ($options | to text | str trim | MENU -p "select option>" ) if ($option =~ "link to title") { for $title in $TITLES --numbered { if $TITLE =~ $title.item { xdg-open $"($LINKS | get $title.index)" } } } else if ($option =~ "link to comment") { for $title in $TITLES --numbered { if $TITLE =~ $title.item { xdg-open $"($POSTS | get $title.index)" } } }} else if ($section =~ "comments") { # line to title -> 1 # line to link comments -> 2 let TITLES = ($comment_list | each {|it| $it | lines | str trim | get 1} | uniq) let TITLE = ($TITLES | to text | MENU -p "active section list>") if ($TITLE | is-empty) { exit 1 } let link = ($comment_list | each {|item| $item | lines | str trim | to text } | where ($it =~ $"($TITLE)") | each {|link| $link | lines | get 2 } | to text | MENU -p "link to comments>") xdg-open $"($link)"} else if ($section =~ "recent") { let TITLES = ($recent_list | each {|it| $it | lines | str trim | get 1} | uniq) let LINKS = ($recent_list | each {|it| $it | lines | str trim | get 2}) let POSTS = ($recent_list | each {|it| $it | lines | str trim | get 6}) let TITLE = ($TITLES | to text | MENU -p "active section list>") if ($TITLE | is-empty) { exit 1 } let options = [ "link to comment" "link to title" ] let option = ($options | to text | str trim | MENU -p "select option>" ) if ($option =~ "link to title") { for $title in $TITLES --numbered { if $TITLE =~ $title.item { xdg-open $"($LINKS | get $title.index)" } } } else if ($option =~ "link to comment") { for $title in $TITLES --numbered { if $TITLE =~ $title.item { xdg-open $"($POSTS | get $title.index)" } } }} else { exit 1}