dotfiles

Table of Contents

1. dotfiles

GOAL: Have a syncronized config in +KUbuntu+ Arch Linux when you install a new computer (programming, emacs)

1.2. Resources

1.2.1. https://wiki.archlinux.org/index.php/Dotfiles#Tools

1.2.1.1. https://deadc0de.re/dotdrop/
1.2.1.3. GNU Stow

Cada carpeta en un repo de dotfiles se linka a $HOME
tmux/.config/tmux → $HOME/.config/tmux/config.

1.2.1.4. CANCELLED Usar simplemente git bare
1.2.1.5. Chezmoi

1.2.2. Get the lastest release of a github package

1.2.4. Gestión de instalaciones en $HOME

https://github.com/neovim/neovim/issues/1415#issuecomment-63947728
I have a snippet in my .zprofile that greatly helps managing home installations. I use it to install almost every software that is not part of my distro’s package manager(I have about 20 packages installed there at this time):

prefixes_dir="$HOME/.user-prefixes"
if [[ -d $prefixes_dir ]]; then
    for dir in "$prefixes_dir"/*; do
        dir=${dir:A}
        if [[ -d "$dir/bin" ]]; then
            PATH="$dir/bin:$PATH"
        fi
        if [[ -d "$dir/share/man" ]]; then
            MANPATH="$dir/share/man:$MANPATH"
        fi
        if [[ -d "$dir/lib" ]]; then
            LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$dir/lib"
        fi
        if [[ -d "$dir/lib/pkgconfig" ]]; then
            PKG_CONFIG_PATH="$dir/lib/pkgconfig:$PKG_CONFIG_PATH"
        fi
    done
fi
unset dir prefixes_dir
export PATH MANPATH LD_LIBRARY_PATH PKG_CONFIG_PATH

This will adjust PATH, MANPATH, LD_LIBRARY_PATH and PKG_CONFIG_PATH based on ~/.user-prefixes subdirectories. In a few words, this allows me to install things in ~/.user-prefixes that can easily be removed. This is how I install nvim:

  make CMAKE_EXTRA_FLAGS='-DCMAKE_INSTALL_PREFIX=$HOME/.user-prefixes/nvim'
#+END_SRC BASH

and this is how I uninstall it:

#+BEGIN_SRC BASH
  rm -rf ~/.user-prefixes/nvim
#+END_SRC BASH

http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html → este dice usar GNU Stow para esto también. Interesante

1.2.5. XDG Base Directory Specification

1.2.5.1. What are the step to move all your dotfiles into XDG directories? - Super User
1.2.5.2. Make Vim obey XDG Base Directory specification | Joren

1.2.7. KDE stuff

1.2.7.1. reddit thread

Real issue is that most of the time KDE is mixing application state and settings in one file. How do you version-control such files? That’s what I call annoying.
Also related to this is a that a lot of potentially sensitive information like list of recently opened files is stored in those plain text config files and is not being cleared by sweeper app.

1.3. Docker para instalar dependencias de desarrollo

Aquí tengo una lista de cosas que se pueden ejecutar, y qué volumen tiene que estar montado para tener persistencia
https://github.com/tighten/takeout/tree/main/app/Services
https://github.com/fhsinchy/jeeves/blob/master/data.py
https://github.com/bluxmit/alnoda-workspaces → este te viene con dockers ya precompilados (también es más complicado de reutilizar al no tirar de imágenes oficiales)
Por ejemplo no está jenkins, aquí pone cómo hacerlo:

Jupyter using docker

Postgres añadir las extensiones: ./init_pgvector.sql:/docker-entrypoint-initdb.d/init_pgvector.sql

Al final esto es equivalente a kubernetes/docker-compose/orquestadores de contenedores: el entorno de producción es el mismo que el de desarrollo y tira todo del mismo yaml
También devcontainers está haciendo lo mismo: https://github.com/devcontainers

1.4. Distrobox - Ejecutar distintas distros

1.5. Dockerfile ejecutable y Cosmopolitan Libc y nix-shell shebang

1.6. Ejecutar distintos tipos de paquetes en una misma distro

1.6.2. arch2appimage A Python script to convert any arch linux package (official/AUR) to an AppImage

1.7. Ideas de cosas para instalar / probar / configurar   idea

1.7.1. Things to be installed

1.7.1.1. Include fasd   project idea try maybe_20230330
  1. GitHub - clvv/fasd: Command-line productivity booster, offers quick access to files and directories, inspired by autojump, z and v.

    All the alias v=vim, f=thefuck and so on

    1. Está un poco muerto, no mergean PRs
    2. GitHub - wting/autojump: A cd command that learns - easily navigate directories from the command line
    3. GitHub - rupa/z: z - jump around → Lo tengo ya en zsh por defecto
1.7.1.2. Python deadsnakes

Para tener versiones nuevas según salen de python

1.7.1.3. espanso
1.7.1.5. Ver “Tech Weekly #8 | Cheat Sheet” en YouTube
1.7.1.6. Run your stuff remotely
  1. bcvi - run vi over a ’back-channel’

    Esto quizás no hace falta, si haces vim scp:// ya te funciona
    http://sshmenu.sourceforge.net/articles/bcvi/
    espanso y movidas de remote vim

  2. Instalar en un servidor remoto

    https://stackoverflow.com/questions/764942/using-local-settings-through-ssh

    1. Posible manera de ejecutar todo

      https://unix.stackexchange.com/questions/83926/how-to-download-a-file-using-just-bash-and-nothing-else-no-curl-wget-perl-et

      1. Conseguir algo que se baje cosas con https (lo de arriba es http)
        https://www.baeldung.com/linux/http-https-download-file
        Esto funciona pero necesita openssl
      2. Con tmux cualquier cosa que me baje puedo hacer:

          function send_file() {
            tmux send-keys -t 0 'rm -f $1' 'Enter'; base64 -w 10000 $1 | xargs -I {} tmux send-keys -t 0 "echo -n \"{}\" >> $1.base64" 'Enter'; tmux send-keys -t 0 "base64 -d $1.base64 > $1 && chmod +x $1" 'Enter'
          }
          base64 /usr/bin/openssl | xargs -I _  tmux send-keys -t 0 'echo -n "_" >> openssl' 'Enter'
          # En el otro lado cuando se termina de copiar:
          base64 -d openssl > openssl.bin
        

        Si necesitase implementación de base64:
        https://github.com/eliasbenali/base64sh

      3. Instalarse openssl y compilarlo en estático
        1. Ejecutar en un docker de la imagen base necesaria

                apt-get update && apt-get install -y git gcc make
                git clone https://github.com/openssl/openssl && cd openssl
                # ./Configure --no-shared -no-shared --nopin-shared -nopin-shared --static -static no-shared no-pinshared
                ./Configure  no-shared no-pinshared no-module
                # command-line option '-fno-shared' is valid for Modula-2 but not for C
                make
                make install
          
      4. Instalarse curl y xz
        Para que openssl funcione me tengo que copiar los /etc/ssl/certs a la máquina

           Añadir -CApath /home/user/certs a la función de baeldung
           cd /etc/ssl/certs
           for file in *; do send_file $file; done
        

        raw_download ’https://github.com/stunnel/static-curl/releases/download/8.7.1/curl-linux-x86_64-8.7.1.tar.xz’ ’curl-linux-x86_64-8.7.1.tar.xz’ → hace una redirección que no mola, puedo pillar el Location de la respuesta
        Otra si no es:
        tmux send-keys -t 0 “raw_download ‘$(curl -sL -w %{url_effective} ‘https://github.com/stunnel/static-curl/releases/download/8.7.1/curl-linux-x86_64-8.7.1.tar.xz’ -o /dev/null)’ > curl-linux-x86_64-8.7.1.tar.xz” ’Enter’

        https://git.alpinelinux.org/aports/tree/main/xz/APKBUILD?h=3.17-stable

           git clone https://github.com/tukaani-project/xz && cd xz
           ./autogen.sh
           ./configure
                --sysconfdir=/etc \
               --mandir=/usr/share/man \
               --infodir=/usr/share/info \
               --localstatedir=/var \
               --disable-rpath \
               --disable-werror \
               --disable-doc
           sed -i \
             -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
             -e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
           libtool
           make
        

        No es del todo estático, sino que es un wrapper para llamar a .libs/xz y eso sí que tiene librerías:

        If you want to link xz against static liblzma, the simplest way
        is to pass –disable-shared to configure. If you want also shared
        liblzma, run configure again and run “make install” only for
        src/liblzma.

        https://raw.githubusercontent.com/Ravenports/Ravenports/master/bucket_12/xz

      5. Con eso ya me puedo bajar nix
        https://nixos.wiki/wiki/Nix_Installation_Guide#Installing_without_root_permissions
        Lo malo es que las imágenes están compiladas para musl: https://github.com/nix-community/nix-user-chroot/releases/tag/1.2.2

           git clone https://github.com/lytex/nix-user-chroot && cd nix-user-chroot
           RUSTFLAGS='-C target-feature=+crt-static' cargo build --release
        

        unshare failed: EPERM → unshare –user –pid echo YES no está permitido. Probablemente me tenga que ir a https://github.com/proot-me/PRoot

        https://proot-me.github.io/#downloads

           curl -LO https://proot.gitlab.io/proot/bin/proot
           chmod +x ./proot
           proot --version
        

        proot distribuye binarios: https://proot.gitlab.io/proot/bin/proot
        Instalarlo con PRoot → subir los certificados (se pueden descomprimir con xz) → bajarse curl (solucionando la redirección) y PRoot

      https://github.com/mosajjal/binary-tools

      1. dive nginx:latest

        Mirar cómo instala los certificados la imagen oficial de docker de nginx. Hay un paso que hace eso

    2. https://github.com/DavHau/nix-portable
  3. distant + distant.nvim → remote nvim with all your plugins
  4. xxh/xxh: 🚀 Bring your favorite shell wherever you go through the ssh.

1.7.2. includeIf for creating different git identities | Codexpedia

Para poner distintas configuraciones en función de si estás en un directorio u otro, por ejemplo para pillar la clave gpg de trabao vs el de trabajo, o usuario, etc

1.7.3. espanso y movidas de remote vim

Tener un espanso que tene la forma:
echo vim scp://{{output}}:$PWD
Donde {{output}} es un nombre que saco de mi ~/.ssh/config local, y $PWD es un comando que se ejecuta en remoto
Así me da un vim loquesea que puedo utilizar
El formato de scp no es muy flexible y no me permite hosts ssh https://gist.github.com/sloanlance/f481b7b8ffc0bfa3f46a1c942c7e7b78
Quizás alguno de estos lo permite: https://www.reddit.com/r/vim/comments/1e9cr6/a_better_netrw_does_it_exist/
$SSH_CONNECTION → 83.61.76.170 60024 5.196.26.17 9999 variable con los datos de la conexión
$SSH_TTY

1.7.4. Instalar Postman   project idea someday_20230330

Genera código en base a interacción

1.7.5. How Does Free Graphic Design Software Stack Up?

Alternativas Open Source de programas propietarios

1.7.5.1. Krita - Wikipedia

Edición de imágenes

1.7.5.2. Scribus - Wikipedia

Diseño de PDFs para carteles y demás

1.7.6. Redirigir los repos de github a dotfiles   project idea someday_20230330

La idea es centralizar todo y no tener un repo por cada cosa

1.7.7. Añadir tema claro y poder cambiar entre temas claro/ oscuro   project idea someday_20230330

En general esto es tema de config, quiero que sea así con un shortcut global (idealmente)

  • Firefox (desactivar la extensión y cambiar el tema)
    También tengo instalado shadowFox
    Es más fácil hacer un perfil de modo claro y ya está
  • doom emacs
  • neovim (no va con perfil de consola como vim)
  • KDE (cambiar el tema)
  • Telegram
  • DBeaver en el trabajo

-—
Poner un archivo en un sitio conocido, y cuando cambie (tener un inotify o algo así), cambiar al modo oscuro de cada repo y recargar/reiniciar las instancias que haya corriendo
Plasma tiene un comando para detectar si estás en modo oscuro o no: plasma-apply-colorscheme --list-schemes | grep current | grep Dark

  • Modo oscuro
plasma-apply-colorscheme BreezeDark
plasma-apply-lookandfeel -a org.kde.breezedark.desktop
plasma-apply-desktoptheme breeze-dark

plasma-apply-cursortheme Quintom_Ink
chezmoi apply ~/.config/alacritty/alacritty.yml
chezmoi apply ~/.config/i3/config
i3 reload

Modo claro

plasma-apply-colorscheme BreezeLight
plasma-apply-lookandfeel -a org.kde.breeze.desktop
plasma-apply-desktoptheme breeze-light

plasma-apply-cursortheme Quintom_Ink
chezmoi apply ~/.config/alacritty/alacritty.yml
chezmoi apply ~/.config/i3/config
i3 reload
1.7.7.1. Usar i3status en rust para que tenga modo claro   project idea someday_20230330 someday_20230330

1.7.8. Crearme un Vagrant con mi config (conectarme a máquina virtual con toda mi config)   project idea maybe_20230330

Quizás en el servidor orgwiki o algo así

1.7.9. ajeetdsouza/zoxide: A smarter cd command. Supports all major shells.

zoxide is a blazing fast replacement for your cd command, inspired by z and z.lua. It keeps track of the directories you use most frequently, and uses a ranking algorithm to navigate to the best match.

1.7.10. Alternativas Sourcetrail   project idea try someday_20230330

1.7.12. Dunst - ArchWiki

https://wiki.archlinux.org/title/Dunst
Para el proyecto de orgzly-integrations te permite un tag por cada notificación para que se sobrescriba en vez de que se lanze
Para config de trabajo, para lanzar botones con acciones
https://linuxcommandlibrary.com/man/dunstify

1.7.13. Vim File Manager

Buscar uno que utiliza tags para navegar

1.7.13.2. vifm: A Terminal File Browser for Hardcore Vim Lovers - It’s FOSS
1.7.13.4. gokcehan/lf: Terminal file manager

https://github.com/gokcehan/lf
Como Ranger, pero mejor

1.7.14. An Interactive Python Cheat Sheet That Brings The Answer To You

1.8. config from org-mode

1.8.1. Using Org-Mode to Manage Configs (Passwords)

https://www.reddit.com/r/emacs/comments/knu0qs/using_orgmode_to_manage_configs/

Nice post but a bit raw, in usability term. Few points: keeping hard-coded password in a config sometimes is needed, there is no point in avoiding it org-mode side, the attack surface is the same. You might instead benefit from org-crypt to cypher few headings with secrets and opening them only for tangle, perhaps with the GNUPG agent caching help.
Configs might need extra files, not something you put in a babel block, for that org-attach does help much, you can store such files/directories under an org-attach managed common root and accessing them via org-mode, on tangle those paths can be copied, hard-linked, sym-linked or something else case by case, also keep config as attachments let you version them individually with a SCM system like git (magit-wrapped in Emacs) to track changes and easily revert them.
You can “centralize” your configs with org-roam or with linkmarks and access them with a keypress and search&narrowing style, an example for me: if I want to change my zsh config I hit a single key, ivy pops up start typing zsh and tab/enter to visit the relevant org-mode config. Far more comfortable and quicker than accessing visiting files in a classic fs taxonomy.

1.8.2. Llamar a los scripts de otras partes llamándolos/transcluyéndolos (estoy seguro?)

Esto puede ser problemático porque para generar el script de instalación necesito tener chezmoi funcionando
Es verdad que aclara a nivel de paquete de dónde viene cada cosa, pero tendría que tener una manera sencilla de implementarlo por ejemplo en bash para poder ejecutar las transclusiones sin depender de nada
Estan las cosas en este archivo, incluso lo podría rellenar a mano o lo que sea para crearme un primer install.sh, o también generarme distintos archivos de config en una máquina que tenga ya funcionando con chezmoi

cat ~/.config/chezmoi/chezmoi.toml

[data]

desktop = true

work = false

Por ejemplo los paquetes de los que depende neovim los podemos en el readme de neovim y hacemos un tangle desde ahí, lo mismo con los de i3…
Hacer una lista de paquetes a instalar por cada módulo, y luego tener un script de pre instalación y post instalación, y listar dependencias entre ellos… y me estoy dando cuenta de que ahora quiero hacer un framework para gestión de dependencias y ejecución de scripts xD

Lo ideal sería poder ver siempre los dos niveles, verlo todo colapsado o verlo todo de una vez (quizás con folds se puede hacer), o con peek definition

1.9. dotfiles de otra gente

1.9.1. https://github.com/benmezger/dotfiles/

Está en Ansible y tiene Github actions

1.9.3. https://github.com/petobens/dotfiles/

Muy buena integración entre las distintas herramientas (pillé la config para listar con fzf las ventanas)

1.9.4. https://github.com/waylonwalker/devtainer (dotfiles)

vim+python+ipython+tmux, con integraciones para WSL

1.9.6. Dotfiles en Ansible

1.9.6.1. Example of Desktop environment configuration with ansible
1.9.6.2. https://github.com/geerlingguy/ansible-role-dotfiles

Este es un paquete para instalar los dotfiles de un repo cualquiera

1.9.6.3. https://thebroken.link/managing-dotfiles-with-ansible/

Guía para hacerlo con ansible con roles
Usando Ansible puedo evitar submódulos, y usar roles para especificar qué instalar

1.9.7. Dotfiles en Ansible + Guix

1.11. Scripts para activar/desactivar servicios que más consumen

 #!/bin/bash
killall git-sync.sh; killall wrapper.sh
systemctl stop syncthing --user
systemctl stop onedrive --user
#!/bin/bash
(setsid ~/.config/autostart-scripts/git-sync.sh &)
systemctl start syncthing --user
systemctl start onedrive --user

1.12. Pantalla con xrandr

xrandr  --output eDP-1-1 --auto # Para activarla después de haberla desactivado

1.13. Best of .bashrc | datagubbe.se POSIX tools to have in any system

1.14. VMs con Windows y demás

Idealmente no las tendría que utilizar pero asdfghjkl;

1.14.1. CrossOver 21.1 Released With GTA V Support, Restores Outlook 2016 & 365 Support - Phoronix

1.18. virt-manager en Arch linux

1.19. Pacman / Paru

1.19.2. Buscar en qué paquete está un comando (Pacman)

1.19.3. Revertir paquetes

paru -U ~/.cache/paru/clone/ferdium-bin/ferdium-bin-6.0.0.nightly.92-1-x86_64.pkg.tar.zst

Para pacman https://wiki.archlinux.org/title/downgrading_packages

sudo pacman -U file:///var/cache/pacman/pkg/package-old_version.pkg.tar.type

El lock de pacman está en /var/lib/pacman/db.lck
Para comprobar si hay algún proceso usándolo:

sudo fuser /var/lib/pacman/db.lck

1.19.4. Instalar paquetes antiguos

1.19.5. Errores de librerías binarias

aw-qt daba este error:
libGL error: MESA-LOADER: failed to open iris: /opt/activitywatch/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/lib/dri/iris_dri.so) (search paths /usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open iris: /opt/activitywatch/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/lib/dri/iris_dri.so) (search paths /usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast: /opt/activitywatch/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/lib/dri/swrast_dri.so) (search paths /usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast

sudo mv /opt/activitywatch/libstdc++.so.6 ~/.local/share/Trash → Esto lo soluciona al parecer, o también desinstalar y volver a instalar, quizás?

Normalmente tienes que revertir el paquete que no está donde tiene que estar

1.19.6. Rollback / Transactional updates in Arch Linux

1.19.6.1. Arch Linux Archive - ArchWiki

https://wiki.archlinux.org/title/Arch_Linux_Archive
Es un archivo por si quieres instalar la versión que estuvo disponible hace unos años, para montar entornos antiguos

1.19.6.2. Transactional package management for arch? : r/archlinux
1.19.6.3. History of transactions with pacman? : r/archlinux

https://www.reddit.com/r/archlinux/comments/3ltjhe/history_of_transactions_with_pacman/
Never update, always reinstall into a new BTRFS snapshot:-) That way you can switch back to the old configuration with a simple reboot.

1.19.6.4. Garuda Linux brings an important feature to the Arch world: snapshots and rollback

Bad thing → uses calamares as an installer, which is not optimal if I want to install all by myself using a script
Uses BTRFS with compression (meaning that all those snapshots won’t take quite so much space) and Snapper

1.19.6.5. Pin all your commits in paru?

You should be able to pin:
/home/julian/.cache/paru/clone/bookmarksync-git (aur repo), /home/julian/.cache/paru/clone/bookmarksync-git/bookmarksync (bare repo) and /home/julian/.cache/paru/clone/bookmarksync-git/src (full repo)
Maybe pin also in pacman

1.19.6.6. Custom PKGBUILD repositories in paru

1.19.7. How To Ignore A Package From Being Upgraded In Arch Linux (like pinning packages)

https://ostechnix.com/safely-ignore-package-upgraded-arch-linux/
But also holds back every other dependency of that package, so it can lead to outdated packages and system breakage

edit /etc/pacman.conf
IgnorePkg = vlc

1.19.8. Actualizar después de 2 semanas

(286/286) checking keys in keyring                                                              [########################################################] 100%
(286/286) checking package integrity                                                            [########################################################] 100%
error: dbeaver: signature from "Fabio Castelli (Muflone) (VBSimple) <muflone@vbsimple.net>" is marginal trust
:: File /var/cache/pacman/pkg/dbeaver-22.1.3-1-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] Y
error: failed to commit transaction (invalid or corrupted package)
Errors occurred, no packages were upgraded.

https://bbs.archlinux.org/viewtopic.php?id=233480

sudo pacman -S archlinux-keyring

1.19.9. Mantenimiento de Pacman

https://www.reddit.com/r/archlinux/comments/zli3iu/is_arch_a_time_eater_is_there_any_truth_to_this/?utm_source=share&utm_medium=android_app&utm_name=androidcss&utm_term=14&utm_content=share_button
Before updating, I check https://archlinux.org/news/ if something has been published that is relevant to my installations. If so, I take it into account.
The check can be automated with https://aur.archlinux.org/packages/informant for example, or paru -Pw, paru -Pww

Using a hook the cache of pacman will be reduced automatically (https://wiki.archlinux.org/title/pacman#Cleaning_the_package_cache).

From time to time I synchronize my configuration files with the pacnew files. There are utilities for this as well (https://wiki.archlinux.org/title/Pacman/Pacnew_and_Pacsave).

1.19.10. if you use AUR packages that depend on a library then you need to rebuild those packages when the library goes up by a major version.

1.19.11. Rebuild package

makepkg -srif --noconfirm

1.19.14. paru / pacman consume demasiada CPU

https://forum.manjaro.org/t/how-do-i-limit-pamac-or-yays-cpu-core-usage-while-compiling/55043

Look in /etc/makepkg.conf. Find the line containing MAKEFLAGS= and uncomment it if it’s commented. Change it to -jX where X is the number of cores you want it to use.

1.19.15. Cambiar dependencias de paquetes

https://aur.archlinux.org/packages/virtualbox-ext-oracle
sudo nvim /var/lib/pacman/local/virtualbox-ext-oracle-7.0.4-1/desc

1.19.16. 08:58 Instalar CUDA en Arch Linux

https://jaggu-iitm.medium.com/setting-up-deep-learning-with-cuda-tensorflow-and-keras-on-arch-linux-with-dual-gpu-nvidia-gpu-82963d2ecb75

sudo pacman -S cuda cudnn nvidia-dkms nvidia-utils linux-headers
/opt/cuda/extras/demo_suite/deviceQuery

Reiniciar después

1.19.17. Rust para ripgrep compilado

Al instalar rust en Arch linux tienes que ejecutar esto para que ripgrep compile:

rustup toolchain install nightly

1.19.18. debtap → convertir .deb a paquetes de Pacman

Update debtap database (before the first run):

sudo debtap –update

Convert the specified package:

debtap path/to/package.deb

Convert the specified package bypassing all questions, except for editing metadata files:

debtap –quiet path/to/package.deb

Generate a PKGBUILD file:

debtap –pkgbuild path/to/package.deb

1.20. apt

1.20.1. Buscar en qué paquete está un comando (apt)

https://askubuntu.com/questions/481/how-do-i-find-the-package-that-provides-a-file

sudo apt-get install apt-file
sudo apt-file update
apt-file find kwallet.h

Instalar paquetes de monitorización (en un kubernetes que eres root) → meter a espanso

apt-get install -y procps
apt-get install -y iproute2

1.20.2. Resolver dependencias forzando con dpkg

  • dpkg --force-all deja instalar y eliminar paquetes incluso si rompe dependencias o deja el sistema inusable (OJO con esto porque si quitas una librería/paquete crítica se puede liar).

Luego una vez que has resuelto el problema vuelves a instalar los paquetes necesarios

1.20.3. Errores con postprocesado de un paquete

https://askubuntu.com/questions/482928/ignore-apt-get-postinstall-scripts-automatically

apt-get download <package>
sudo dpkg --unpack <package>*.deb
sudo rm /var/lib/dpkg/info/<package>.postinst -f
sudo dpkg --configure <package>
sudo apt-get install -yf #To fix dependencies

1.21. Alternativas a AUR en Ubuntu/Debian

1.21.1. Ver “Pacstall Is An ”AUR“ For Ubuntu” en YouTube

https://youtu.be/MFbO60gBRLg
De momento está muy verde

1.21.2. MPR - Home (Former Debian User Repository (DUR))

Lo mismo que AUR en debian DUR

wget -qO - 'https://proget.hunterwittenborn.com/debian-feeds/makedeb.pub' | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/makedeb-archive-keyring.gpg &> /dev/null

echo 'deb [signed-by=/usr/share/keyrings/makedeb-archive-keyring.gpg arch=all] https://proget.hunterwittenborn.com/ makedeb main' | \
sudo tee /etc/apt/sources.list.d/makedeb.list

sudo apt update
sudo apt install makedeb

cd ~/code
git clone "https://mpr.hunterwittenborn.com/makedeb.git"
cd ../makedeb/
makedeb -si
# [!] Couldn't find PKGBUILD

1.21.3. DUR: The Debian User Repository | Hacker News

Explica por qué construir paquetes en Ubuntu es complicado comparado con Arch

1.23. Dependency Hell

1.23.1. Problems

  • Many dependencies
  • Long chains of dependencies
  • Conflicting dependencies
  • Circular dependencies
  • Package manager dependencies
  • Diamond dependency

1.23.2. Solutions

  • Removing dependencies
  • Version numbering
  • Private per application versions
  • Side-by-side installation of multiple versions
  • Smart package management
  • Installer options
  • Easy adaptability in programming
  • Strict compatibility requirement in code development and maintenance
  • Software appliances
  • Portable applications

1.24. Dokuwiki nueva instalación


1.24.1. Repos Kubuntu

  • ansible
  • backports
  • deadsnakes (versiones de python)
  • chrome
  • kxstudio, ubuntustudio (trae poco)
  • r
  • syncthing
  • vscodium

1.24.2. Encriptación

  1. Encriptar al instalar con LUKS
  2. Encriptar /home después de instalar con ecryptfs. También encriptar
    el swap.
  3. https://www.howtogeek.com/116032/how-to-encrypt-your-home-folder-after-installing-ubuntu/
  4. https://askubuntu.com/questions/63594/mount-encrypted-volumes-from-command-line.
    Tal vez hacer en algún momento una sección explícita de esto.

1.24.3. Programación

1.24.3.1. python
  • Instalar
    pip, pip3, virtualenv, virtualenvwrapper, numpy, scipy, matplotlib, sympy
    desde pip
  • Instalar desde el virtualenv
  • ’’ pip install –upgrade –force-reinstall –ignore-installed (-I)
    –no-deps (no reinstala deps)’’ para instalar la última versión

1.24.4. Suites de oficina

  • Latex
  • LibreOffice
  • Gestor de impresión (a veces hace falta)
  • Drivers de la impresora Samsung
    Unified Linux Drivers
  • XSane (escanear)
1.24.4.1. Latex
  • texlive-fonts-extra para utilizar
    \usepackage[bitstream-charter]{mathdesign}

1.24.5. Navegador

1.24.6. Música

  • qtractor (metrónomo), qsampler, timidity, seq64, musescore (mejor
    instalar con snap o similar, si no está muy desactualizado), lilypond,
    VCVRack
  • Librerías de sonido

1.24.7. Herramientas

  • bash-completion, Xarchiver/Ark(kde), gnome disks, gparted, WinFF,
    okular, (eye of gnome), shotwell (image viewer), redshift y
    redshift.conf, Transmission (KTorrent)
  • Configurar sudo para la cuenta de administrador
  • youtube-dl (desde pip suele ser mejor) con aria2c y workarround:
    https://github.com/rg3/youtube-dl/issues/17457

$ youtube-dl -x --audio-format mp3 --audio-quality 2 --external-downloader aria2c "https://www.youtube.com/watch?v=et0roLIkekk" --external-downloader-args "-x 16 -t 1 -j 16 -m 0 -s 16"

1.24.8. Herramientas (kde)

1.24.9. xfce

  • En xfce, greybird (Appareance>Style y Window Manager>Style)
  • Super + 1234 -> Cambiar a escritorio 1234
  • Super + F1F2F3F4 -> Mover ventana a escritorio 1234
  • Super+Space -> Cambiar teclado (teclado americano con tilde o ñ
    international AltGr dead keys)
  • Tile Top/B/L/R -> Super+\(\uparrow / \downarrow / \leftarrow / \rightarrow\)
  • Top-L/R -> Crtl+Super+\(\leftarrow / \rightarrow\)
  • Bottom-L/R -> Shift+Crtl+\(\leftarrow / \rightarrow\)

1.24.10. KDE

  • Alt + 1234 -> Cambiar a escritorio 1234
  • Super + 1234 -> Mover ventana a escritorio 1234
  • Super+\(\uparrow / \downarrow / \leftarrow / \rightarrow\) -> Partir la
    pantalla
  • Cursor: Quintom_Ink
  1. gtk mostrar carpetas primero

    sudo apt install dconf-editor org/gtk/settings/file-chooser ->
    sort-directories-first -> true

1.24.11. Problemas conocidos

1.24.11.1. Copia lenta a USB

Correr como root:

  echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
  echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

https://unix.stackexchange.com/questions/107703/why-is-my-pc-freezing-while-im-copying-a-file-to-a-pendrive/107722#107722
Para hacer persistente, poner en /etc/sysctl.conf:

  vm.dirty_background_bytes = 16777216
  vm.dirty_bytes = 50331648
1.24.11.2. presets de WinFF que no funcionan

Unknown encoder 'libvo_aacenc' -> reemplazar -acodec libvo_aacenc por -c:a aac

Author: Julian Lopez Carballal

Created: 2024-11-06 mié 12:56