Ya no deseo mantener este repositorio, así que lo archivaré.
nix-desktop le permite definir la integración de escritorio de Linux de proyectos NIX. Con este script, puede definir las entradas del menú de escritorio XDG y las unidades Systemd declarativamente usando NIX y aplicarlo de manera ideempotente.
Soy un usuario de Home-Manager. Le permite administrar una configuración completa del usuario (inicio) que incluye ejecutables de programa, archivos de configuración, servicios Systemd y otros archivos, pero su forma de configuración está centralizada. (Aparentemente) permite solo una configuración por directorio de inicio. A veces, quería algo ligeramente descentralizado. Por ejemplo, tengo algunos repositorios de Git privados que contienen datos, y quiero instalar aplicaciones relacionadas con los repositorios en máquinas que solo son relevantes. Quiero ocultar su existencia del público y, por lo tanto, no deberían mencionarse en mi configuración pública.
Nix Flakes le permite definir paquetes y aplicaciones dentro de los repositorios de proyectos, que parecen convenientes. Sin embargo, no encontré una manera de integrar tales aplicaciones con el escritorio de Linux. Para comenzarlos sin abrir una terminal, quería instalar entradas de menú para esas aplicaciones, definidas en proyectos. Este es un intento de implementarlo de manera consistente. Nota: Esto no depende de las copos de Nix.
A diferencia de la instalación ingenua ad-hoc de los archivos de configuración utilizando nix-env , nix-desktop actualiza el estado del sistema. Notifica las actualizaciones en las entradas del menú de escritorio y la recarga/habilitación/(re) inicia las unidades SystemD instaladas (y detiene y deshabilita las unidades desinstaladas). Esta es una solución conveniente y confiable para depender un conjunto de aplicaciones y servicios de escritorio.
Instale este repositorio con NIX:
nix-env -if .Alternativamente, puede usar el programa sin instalarlo si ya ha habilitado Nix Flakes:
nix run ' github:akirak/nix-desktop ' Puede definir la configuración creando un archivo llamado desktop.nix en un repositorio. El siguiente es un ejemplo:
let
pkgs = import <nixpkgs> { } ;
thisDir = builtins . toString ./. ;
in
{
name = "my-config" ;
# Run Doom Emacs inside a sandboxed nix-shell session.
xdg . menu . applications . doom-emacs = {
Name = "Doom Emacs" ;
Icon = "emacs" ;
TryExec = " ${ builtins . getEnv "HOME" } /.config/doom-runner/emacs/bin/doom" ;
Exec = " ${ pkgs . nix } /bin/nix-shell ${ builtins . toString ./. } /doom/shell.nix --command emacs" ;
StartupWMClass = "Emacs" ;
} ;
# Automatically set up an overlayfs directory in the repository.
systemd . services . overlayfs-repos = {
enable = true ;
start = true ;
restart = false ;
text = ''
[Unit]
Description=Example overlayfs service
ConditionPathIsDirectory= ${ thisDir } /repos-src
ConditionPathIsDirectory= ${ thisDir } /repos-overlay
ConditionPathIsDirectory= ${ thisDir } /.repos-work
ConditionPathIsDirectory= ${ thisDir } /repos
[Service]
Type=oneshot
ExecStart= ${ pkgs . fuse-overlayfs } /bin/fuse-overlayfs -o lowerdir= ${ thisDir } /repos-src,upperdir= ${ thisDir } /repos-overlay,workdir= ${ thisDir } /.repos-work ${ thisDir } /repos
RemainAfterExit=yes
ExecStop= ${ pkgs . fuse } /bin/fusermount -u ${ thisDir } /repos
[Install]
WantedBy=default.target
'' ;
} ;
} El archivo exporta un conjunto de atributos, y debe contener un campo name obligatorio, que se utiliza para identificar de forma única los proyectos. Se convertirá en parte de la derivación de Nix que se construirá, por lo que debe ser un nombre de archivo seguro.
xdg.menu.applications.* Defina las entradas del menú XDG. Algunos campos tienen valores predeterminados sensatos, pero debe especificar Name , Icon , Exec y StartupWMClass .
systemd.TYPE.* Definir servicios de usuarios Systemd. TYPE puede ser services , timers y otros plurales para representar los tipos de unidades compatibles con Systemd.
Debe contener un campo text que se convertirá en el contenido del archivo de la unidad.
También admite los siguientes campos opcionales:
enable (bool): habilite la unidad después de la instalación.start (Bool): inicie la unidad después de la instalación, si no es la instalación.restart (bool): si se cambia una unidad, reinicie la unidad. Las unidades sin cambios no se reiniciarán incluso con esta opción. El comando nix-desktop tiene la siguiente sinopsis:
nix-desktop [install | uninstall | build] DIRo con nix copos:
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR es un argumento requerido, y debe establecerse en un directorio que contiene desktop.nix .
El comando admite los siguientes modos de operaciones, que deben ser denotados por el primer argumento opcional prepuesto al directorio:
install , instala aplicaciones definidas en el directorio. Este modo es el valor predeterminado, por lo que puede omitir el subcomando install y especificar el directorio como el único argumento.uninstall , desinstala las aplicaciones.build es como install , pero solo construye la configuración y no instala archivos de configuración ni actualiza el sistema.Detecta conflictos con aplicaciones definidas en otros proyectos, por lo que verifique los mensajes de error.
Puede navegar por una lista de proyectos instalados:
nix-desktop list Con el indicador --verify , el comando de lista verifica si existen los directorios de origen.
nix-desktop list --verifyTambién puede actualizar todos los proyectos instalados con un solo comando:
nix-desktop update