filesystem organization and synchronization
Table of Contents
- 1. filesystem organization and synchronization project
- 1.1. Dolphin con tags y demás
- 1.1.1. Sacar las tags sin balooctl
- 1.1.2. Tags jerárquicas
- 1.1.3. Utilizar tags key:value project someday_20230330
- 1.1.4. Extended attributes: the good, the not so good, the bad. → Lack of support
- 1.1.5. https://wiki.archlinux.org/title/Extended_attributes
- 1.1.6. Hacer un script de bash que genera todas las tags
- 1.1.7. Tags automáticas de git
- 1.1.8. Hacer una función que te devuelva las tags/links o lo que sea (recursivo / autoreferencial)
- 1.1.9. Format de query de Dolphin
- 1.1.10. FSQL (File System Query Language)
- 1.1.11. Cosas que no añadir
- 1.1.12. DONE Hacer un .org de Documents
- 1.1.13. Utilizar dired con tags
- 1.1.14. DONE fzf para tener los places/tags en un mismo sitio y poder acceder desde la terminal
- 1.2. Agrupar archivos por día de descarga
- 1.1. Dolphin con tags y demás
1. filesystem organization and synchronization project
1.1. Dolphin con tags y demás
Tiene que estar Baloo corriendo
https://community.kde.org/Baloo
https://community.kde.org/Baloo/Architecture
https://api.kde.org/frameworks/baloo/html/searching.html
Además para que funcione hay que mover a mano las tags en la parte de places, para que estén disponibles en ~/.local/share/user-places.xbel
baloosearch tag:project 2>&1 | grep -v Elapsed # Esto lo puede procesar fzf o rofi o lo que sea
Se pueden guardar estas búsquedas, son a nivel de sistema, y además crear links si hago click derecho>create new>link to location (url)
Tienes que quitar las tags de los archivos antes de borrarlos, si no se quedan colgando sin referencias y tienes que reindexar
Que no se sincronize con Syncthing es una feature, porque mantienes listas de proyectos distintas entre trabajo y casa
1.1.1. Sacar las tags sin balooctl
Están en /run/user/1000/kio-fuse-*/tags
Tienes que navegar a una etiqueta y abrir una terminal con F6 para que se cree el directorio
cd /run/user/1000/kio-fuse-*/tags ls -l | tail -n +2 | awk '{ $1=$2=$3=$4=$5=$6=$7=$8=""; print $0}' | sed "s#$PWD##"
1.1.2. Tags jerárquicas
Si llamas a una tag tag1/tag2 se crea una jerarquía de tags, como si fuesen carpetas
Esto puede servir para implementar una interfaz en la que se crea la jerarquía sobre la marcha?
1.1.3. Utilizar tags key:value project someday_20230330
Originalmente de How to Use Tags
1.1.4. Extended attributes: the good, the not so good, the bad. → Lack of support
Write a bash script that gets synced up that contains all the tags
1.1.6. Hacer un script de bash que genera todas las tags
Otra idea muy buena es también que cuando añades un directorio con tag repo te añada si no existe a ese script
1.1.7. Tags automáticas de git
sudo apt install attr
getfattr
setfattr
Encontrar todos los repos que no estan en ~/.config/repoignore
find . -iname ".git" | sed 's/\.git//' | grep -v "$(cat ~/.config/repoignore)"
Tagear con “repo” todos los que cumplen estas condiciones
find . -iname ".git" | sed 's/\.git//' | grep -v "$(cat ~/.config/repoignore)" | xargs -I _ setfattr -n user.xdg.tags -v repo "_"
Sacar los comandos de git clone para clonar todos los repos necesarios
find . -iname ".git" 2>/dev/null | sed 's/\.git//' | grep -v "$(cat ~/.config/repoignore)" | xargs -I _ bash -c 'cd _ && echo "git clone $(git remote get-url origin 2>&1) _"' | grep -v -e error -e fatal
#!/bin/bash echo ".doom.d/org-html-themes .zsh .oh-my-zsh .emacs.d .config/emacs/ .cache/paru .local/share/nvim Downloads .cargo/registry" > ~/.config/repoignore cd ~ find . -iname ".git" | sed 's/\.git//' | grep -v "$(cat ~/.config/repoignore)" | xargs -I _ setfattr -n user.xdg.tags -v repo "_" cd ~/Work/1projects find . -maxdepth 1 -mindepth 1 -type d | xargs -I _ setfattr -n user.xdg.tags -v project "_"
1.1.7.1. Antiguo
Encontrar todos los repos que no son subrepos (parte de un repo más grande, más arriba en el path)
No funciona del todo bien porque no encuentra algunos repos como los de ~/code/python/… por ejemplo
find . -iname "*.git" | xargs -I _ zsh -c 'curr="_"; curr=${${curr%/.git*}%/*}; while [ "." != "$curr" ]; do curr=${curr%/*}; if ls -l "$curr/.git" 2>/dev/null 1>/dev/null; break; done; if [ "." = "$curr" ]; then file=_; file=${file%/.git*}; echo $file; fi'
Tagear con “repo” todos los que cumplen estas condiciones
find . -iname "*.git" | xargs -I _ zsh -c 'curr="_"; curr=${${curr%/.git*}%/*}; while [ "." != "$curr" ]; do curr=${curr%/*}; if ls -l "$curr/.git" 2>/dev/null 1>/dev/null; break; done; if [ "." = "$curr" ]; then file=_; file=${file%/.git*}; echo $file; fi' | xargs -I _ setfattr -n user.xdg.tags -v repo "_"
Filtrar más con algún blacklist de cosas que no quiero que se consideren
find . -iname .git 2>/dev/null | sed "s/\.git//" | sed "s#./##"
1.1.8. Hacer una función que te devuelva las tags/links o lo que sea (recursivo / autoreferencial)
Así generas unos archivos mktags.sh que te extraen las tags y te las generan
Te las puede generar un archivos que se llame mkmktags.sh por ejemplo, en base a un archivo. Así lo que pretendo es:
Ejecuta compara la salida de mkmktags.sh con lo que hay en mktags.sh. Si coinciden los archivos (para esto puedo utilizar chezmoi por ejemplo, o hashes), entonces está todo bien.
Si no, tienes que ejecutar mktags.sh, y una vez hecho sí que debería de coincidir la salida de mkmktags.sh con lo que hay en mktags.sh
mkmktags.sh lo que hace es, en base a lo que hay en el sistema, te saca los comandos que van en mktags.sh, que son los comandos que al ser ejecutados crean las tags/links correspondientes en un sistema sin nada instalado
Idealmente tendría en cuenta lo que hay, y puedes definir en un archivo de configuración cuál es tu estado deseado, pero mkmktags.sh sigue siendo util
1.1.9. Format de query de Dolphin
Baloo tiene este que está documentado: https://api.kde.org/frameworks/baloo/html/searching.html
baloosearch 'tag:repo AND tag:musica'
Dolphin le añade alguna cosa más: baloosearch:?json={"includeFolder":"Documents","searchString":"some text" ... "some text" includeFolder:Documents type:Document.
Un ejemplo de queries que funciona en Dolphin son
baloosearch:?json=%7B%22searchString%22:%22tag:motos AND tag:repo%22%7D&title=Query Results from '' baloosearch:?json=%7B%22searchString%22:%22tag:project OR tag:repo OR tag:motos%22%7D&title=Query Results from ''
https://github.com/KDE/dolphin/blob/8aa81a1dc7fa978d44d2c6397df270432df1506f/src/search/dolphinquery.cpp#L100-L145
https://invent.kde.org/frameworks/baloo/-/blob/master/src/lib/query.cpp#L326 → fromSearchUrl
Para crear una entrada tienes que irte a una query de una tag ya existente, Ctrl+F para abrir el buscador, y guardar la query, arriba a la izq. A partir de ahí ya existe en user-places.xbel y la puedes editar
1.1.10. FSQL (File System Query Language)
1.1.11. Cosas que no añadir
.cache/paru/clone/* .local/share/paru-bin/ .local/share/nvim/site/pack/packer/start/* .oh-my-zsh/ .oh-my-zsh/custom/themes/powerlevel10k/ .oh-my-zsh/custom/plugins/* .cargo/registry/index/github.com-1ecc6299db9ec823/ .mozilla/firefox/8ct7a3n2.default-release/ .emacs.d/ .emacs.d/.local/straight/repos/* .emacs.d/.local/straight/build-28.1/doom-snippets/ .zsh/plugins/zsh-system-clipboard/ Documents/backup_rpi/pi/orgzly-integrations/ Documents/backup_rpi/pi/raspberrypi/
1.1.12. DONE Hacer un .org de Documents
find Documents \( -iname "*pdf" -o -iname "*.epub" \) | sed "s/^/* /" | sort > ~/org/Documents.org
Me llena demasiado de ruido, y además no puedo poner lins persistentes.
Puedo generarme un hash que se igual a su ruta, o sólamente pillando el nombre para que sea independiente de la localización (pero puedo tener duplicados entonces)
:ID: 7421da71-bdd2-4a73-b470-cd4964f9d0ea
https://www.reddit.com/r/orgmode/comments/p9i2og/does_anyone_use_org_attach_a_lot/
También utilizar orgzly-integrations para tener todos los archivos accesibles como links de org mode
Quizás hacer una integración, primero org → sistema de archivos, y luego bidireccional, de las tags que tiene cada uno, para que sean accesibles desde org mode y kde
1.1.13. Utilizar dired con tags
1.1.14. DONE fzf para tener los places/tags en un mismo sitio y poder acceder desde la terminal
# Navegación por places directory=$(cat ~/.local/share/user-places.xbel | grep -F 'bookmark href="file:///' | sed -E 's#[ ]*<bookmark href="file://([^"]+)">#\1#' | fzf --multi --preview "ls '{1}'"); cd "$directory" # Navegación por tags tag=$(cat ~/.local/share/user-places.xbel | grep -F 'bookmark href="tags:/' | grep -vF ' <bookmark href="tags:/">' | sed -E 's#[ ]*<bookmark href="tags:/([^"]+)">#\1#' | fzf --multi --preview 'baloosearch tag:{1}'); directory=$(baloosearch tag:$tag | fzf --multi --preview "ls '{1}'"); cd "$directory"
1.2. Agrupar archivos por día de descarga
Igual que hace Windows
Quizás hacerlo en org mode?
https://github.com/alphapapa/taxy.el/blob/master/examples/diredy.el Ya lo hace, habría qye definirse uno que agrupe por fecha