Add rofi scripts & replace scratch terminal w/ emacs frame
This commit is contained in:
parent
3a8a306ba9
commit
eba864d724
56
bin/rofi/bookmarks
Executable file
56
bin/rofi/bookmarks
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Interactively select (in skim) bookmarks to open from Firefox or
|
||||
# Chrome/Chromium (depends on $BROWSER). Should work on Linux and MacOS.
|
||||
#
|
||||
# requires: sqlite3, jq (if you use chrome/chromium)
|
||||
|
||||
sep='{{::}}'
|
||||
|
||||
_do_rofi() {
|
||||
for url in $(awk -F "${1:-$sep}" '{printf "%s, %s\n", $1, $2}' | rofi -dmenu -p 'bookmarks > ' -multi-select | sed 's#.*\(https*://\)#\1#'); do
|
||||
if command -v "$BROWSER" >/dev/null; then
|
||||
$BROWSER "$url" &
|
||||
elif command -v open >/dev/null; then
|
||||
open "$url" &
|
||||
else
|
||||
xdg-open "$url" &
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
case ${BROWSER:-firefox} in
|
||||
firefox)
|
||||
for dir in ~/.mozilla/firefox/*.default \
|
||||
$XDG_CONFIG_HOME/firefox/.mozilla/firefox/*.default \
|
||||
$XDG_DATA_HOME/mozilla/firefox/*.default \
|
||||
~/Library/Application\ Support/Firefox/Profiles/*.default; do
|
||||
if [[ -d "$dir" ]]; then
|
||||
# The db can be locked from time to time. This is inefficient, but
|
||||
# places.sqlite is usually under 30mb so this should be instant, and
|
||||
# /tmp is cleared at boot so...
|
||||
cp "$dir/places.sqlite" "/tmp/places.sqlite"
|
||||
sqlite3 -separator $sep "/tmp/places.sqlite" \
|
||||
"SELECT DISTINCT mb.title, mp.url FROM moz_bookmarks mb \
|
||||
INNER JOIN moz_places mp ON mp.id = mb.fk \
|
||||
WHERE mb.type = 1 AND mb.title IS NOT NULL \
|
||||
ORDER BY mp.frecency DESC" | _do_rofi
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
qutebrowser)
|
||||
sed -e 's/ /{{::}}/' urls | awk -F'{{::}}' '{printf "%s{{::}}%s\n", $2, $1}' | _do_rofi
|
||||
;;
|
||||
*)
|
||||
for dir in ~/.config/google-chrome/Default ~/.config/chromium/Default ~/Library/Application\ Support/Google/Chrome/Default; do
|
||||
# requires jq
|
||||
if [[ -f "$dir/Bookmarks" ]]; then
|
||||
jq -r '.. | [.name, .url]? | @tsv' "$dir/Bookmarks" | \
|
||||
sed '/^[ \t]*$/d;/\t$/d;/\tchrome:\/\//d' | \
|
||||
_do_rofi "\t"
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
2
bin/rofi/calc
Executable file
2
bin/rofi/calc
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env bash
|
||||
rofi -show calc -modi "calc:qalc +u8"
|
6
bin/rofi/file
Executable file
6
bin/rofi/file
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env sh
|
||||
DIR="$(fd -L --type d . $HOME | rofi -dmenu)"
|
||||
if [ -d "$DIR" ]; then
|
||||
cd "$DIR"
|
||||
xst
|
||||
fi
|
59
bin/rofi/history
Executable file
59
bin/rofi/history
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Interactively select (in skim) an url from Firefox/Chrome/Chromium history to
|
||||
# open in your browser (depends on $BROWSER). Should work on Linux and MacOS.
|
||||
#
|
||||
# requires: sqlite3
|
||||
|
||||
sep='{{::}}'
|
||||
|
||||
_do_rofi() {
|
||||
for url in $(awk -F "${1:-$sep}" '{printf "%s, %s\n", $1, $2}' | rofi -dmenu -p='history > ' -multi-select | sed 's#.*\(https*://\)#\1#'); do
|
||||
if command -v "$BROWSER" >/dev/null; then
|
||||
$BROWSER "$url" &
|
||||
elif command -v open >/dev/null; then
|
||||
open "$url" &
|
||||
else
|
||||
xdg-open "$url" &
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
case ${BROWSER:-firefox} in
|
||||
qutebrowser)
|
||||
sqlite3 -separator $sep "$XDG_DATA_HOME/qutebrowser/history.sqlite" \
|
||||
"SELECT title, url FROM History \
|
||||
WHERE title != '' \
|
||||
GROUP BY url \
|
||||
ORDER BY atime DESC" | _do_rofi
|
||||
;;
|
||||
firefox)
|
||||
for dir in ~/.mozilla/firefox/*.default \
|
||||
$XDG_CONFIG_HOME/firefox/.mozilla/firefox/*.default \
|
||||
$XDG_DATA_HOME/mozilla/firefox/*.default \
|
||||
~/Library/Application\ Support/Firefox/Profiles/*.default; do
|
||||
if [[ -d "$dir" ]]; then
|
||||
# The db can be locked from time to time. This is inefficient, but
|
||||
# places.sqlite is usually under 30mb so this should be instant, and
|
||||
# /tmp is cleared at boot so...
|
||||
cp "$dir/places.sqlite" "/tmp/places.sqlite"
|
||||
sqlite3 -separator $sep "/tmp/places.sqlite" \
|
||||
"SELECT DISTINCT title, url FROM moz_places \
|
||||
WHERE title IS NOT NULL \
|
||||
ORDER BY last_visit_date DESC" | _do_rofi
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*)
|
||||
for dir in ~/.config/google-chrome/Default ~/.config/chromium/Default ~/Library/Application\ Support/Google/Chrome/Default; do
|
||||
if [[ -f "$dir/History" ]]; then
|
||||
cp -f "$dir/History" "/tmp/_h"
|
||||
sqlite3 -separator $sep "/tmp/_h" \
|
||||
"SELECT substr(title, 1, $((COLUMNS / 3))), url \
|
||||
FROM urls ORDER BY last_visit_time DESC" | _do_rofi
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
2
bin/rofi/ssh
Executable file
2
bin/rofi/ssh
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env sh
|
||||
rofi -show ssh -multi-select
|
|
@ -15,12 +15,12 @@ bspc config remove_unplugged_monitors true
|
|||
bspc rule -r '*'
|
||||
|
||||
bspc rule -a 'Emacs:org*' state=floating
|
||||
bspc rule -a 'Emacs:scratch' state=floating
|
||||
bspc rule -a mpv state=floating center=on
|
||||
bspc rule -a Pinentry state=floating center=on
|
||||
bspc rule -a Emacs split_ratio=0.32 state=fullscreen
|
||||
bspc rule -a Firefox split_ratio=0.32
|
||||
bspc rule -a feh state=fullscreen
|
||||
bspc rule -a st-scratch state=floating sticky=on center=on
|
||||
|
||||
|
||||
#
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
configuration {
|
||||
m: "-1";
|
||||
theme: "~/.config/rofi/theme";
|
||||
}
|
|
@ -24,10 +24,10 @@ super + Return
|
|||
xst
|
||||
|
||||
super + grave
|
||||
st-scratch
|
||||
emacsclient -a "" -e "(open-scratch-frame)"
|
||||
|
||||
super + space
|
||||
rofi -monitor -4 -show run
|
||||
rofi -monitor -4 -show drun -show-icons
|
||||
|
||||
super + backslash
|
||||
rofi-pass
|
||||
|
|
|
@ -27,12 +27,13 @@
|
|||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
# Just the bear necessities~
|
||||
libqalculate
|
||||
coreutils
|
||||
git
|
||||
wget
|
||||
vim
|
||||
killall
|
||||
unzip
|
||||
bc
|
||||
vim
|
||||
wget
|
||||
# Support for extra filesystems
|
||||
sshfs
|
||||
exfat
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [ ./. ];
|
||||
imports = [
|
||||
./.
|
||||
./rofi.nix
|
||||
];
|
||||
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
xst # st + nice-to-have extensions
|
||||
|
||||
lightdm
|
||||
bspwm
|
||||
dunst
|
||||
|
@ -14,39 +19,13 @@
|
|||
pulseSupport = true;
|
||||
nlSupport = true;
|
||||
})
|
||||
killall
|
||||
|
||||
rofi
|
||||
(writeScriptBin "rofi" ''
|
||||
#!${stdenv.shell}
|
||||
exec ${rofi}/bin/rofi -config "$XDG_CONFIG_HOME/rofi/config" $@
|
||||
'')
|
||||
|
||||
xst # st + nice-to-have extensions
|
||||
# A quick 'n dirty script for opening a scratch terminal.
|
||||
(writeScriptBin "st-scratch" ''
|
||||
#!${stdenv.shell}
|
||||
SCRID=st-scratch
|
||||
focused=$(xdotool getactivewindow)
|
||||
scratch=$(xdotool search --onlyvisible --classname $SCRID)
|
||||
if [[ -n $scratch ]]; then
|
||||
if [[ $focused == $scratch ]]; then
|
||||
xdotool windowkill $scratch
|
||||
else
|
||||
xdotool windowactivate $scratch
|
||||
fi
|
||||
else
|
||||
xst -t $SCRID -n $SCRID -c $SCRID \
|
||||
-f "$(xrdb -query | grep 'st-scratch\.font' | cut -f2)" \
|
||||
-g 100x26 \
|
||||
-e $SHELL
|
||||
fi
|
||||
'')
|
||||
];
|
||||
};
|
||||
|
||||
fonts.fonts = [ pkgs.siji ];
|
||||
|
||||
programs.zsh.interactiveShellInit = "export TERM=xterm-256color";
|
||||
|
||||
services = {
|
||||
xserver = {
|
||||
desktopManager.xterm.enable = false;
|
||||
|
@ -66,9 +45,7 @@
|
|||
home-manager.users.hlissner.xdg.configFile = {
|
||||
"sxhkd".source = <config/sxhkd>;
|
||||
|
||||
# link recursively so other modules can link files in their folders, e.g.
|
||||
# ~/.config/bspwm/rc.d and ~/.config/rofi/theme
|
||||
# link recursively so other modules can link files in their folders
|
||||
"bspwm" = { source = <config/bspwm>; recursive = true; };
|
||||
"rofi" = { source = <config/rofi>; recursive = true; };
|
||||
};
|
||||
}
|
||||
|
|
20
modules/desktop/rofi.nix
Normal file
20
modules/desktop/rofi.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
(writeScriptBin "rofi" ''
|
||||
#!${stdenv.shell}
|
||||
exec ${rofi}/bin/rofi -terminal xst -theme "$XDG_CONFIG_HOME/rofi/theme" -m -1 $@
|
||||
'')
|
||||
rofi
|
||||
];
|
||||
|
||||
# shellAliases = {};
|
||||
};
|
||||
|
||||
home-manager.users.hlissner.xdg.configFile = {
|
||||
# link recursively so other modules can link files in its folder
|
||||
"rofi" = { source = <config/rofi>; recursive = true; };
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue