Je ne souhaite plus maintenir ce référentiel, donc je vais l'archiver.
nix-desktop vous permet de définir l'intégration de bureau Linux des projets NIX. Avec ce script, vous pouvez définir des entrées de menu de bureau XDG et des unités Systemd de manière déclarative à l'aide de NIX et l'appliquer de manière idempotente.
Je suis un utilisateur de l'habitateur. Il vous permet de gérer une configuration de l'utilisateur (à domicile) entier, y compris les exécutables de programme, les fichiers de configuration, les services Systemd et d'autres fichiers, mais sa façon de configuration est centralisée. Il (apparemment) n'autorise qu'une seule configuration par répertoire domestique. Parfois, je voulais quelque chose de légèrement décentralisé. Par exemple, j'ai des référentiels GIT privés qui contiennent des données, et je souhaite installer des applications liées aux référentiels sur des machines uniquement pertinentes. Je veux cacher leur existence au public, et donc ils ne devraient pas être mentionnés dans ma configuration publique.
Nix Flakes vous permet de définir des packages et des applications dans les référentiels de projet, qui semblent pratiques. Cependant, je n'ai pas trouvé de moyen d'intégrer ces applications à Linux Desktop. Pour les démarrer sans ouvrir un terminal, je voulais installer des entrées de menu pour ces applications, définies dans les projets. Il s'agit d'une tentative de la mise en œuvre de manière cohérente. Remarque: Cela ne dépend pas des flocons Nix.
Contrairement à l'installation ad-hoc naïve des fichiers de configuration à l'aide de nix-env , nix-desktop met à jour l'état du système. Il avertit les mises à jour sur les entrées de menu de bureau et recharger / activer / (re) démarre les unités Systemd installées (et s'arrête et désactive les unités désinstallées). Il s'agit d'une solution pratique et fiable pour dépourager un ensemble d'applications et de services de bureau.
Installez ce référentiel à l'aide de NIX:
nix-env -if .Alternativement, vous pouvez utiliser le programme sans l'installer si vous avez déjà activé Nix Flakes:
nix run ' github:akirak/nix-desktop ' Vous pouvez définir la configuration en créant un fichier nommé desktop.nix dans un référentiel. Ce qui suit est un exemple:
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
'' ;
} ;
} Le fichier exporte un ensemble d'attributs, et il doit contenir un champ name obligatoire, qui est utilisé pour identifier de manière unique les projets. Il fera partie de la dérivation NIX à construire, il devrait donc être le nom de fichier sûr.
xdg.menu.applications.* Définissez les entrées de menu XDG. Certains champs ont des défauts sensibles, mais vous devez spécifier Name , Icon , Exec et StartupWMClass .
systemd.TYPE.* Définir les services SystemD utilisateur. TYPE peut être services , timers et d'autres pluriels pour représenter des types d'unités qui sont pris en charge par SystemD.
Il doit contenir un champ text qui deviendra le contenu du fichier unitaire.
Il prend également en charge les champs facultatifs suivants:
enable (bool): activer l'unité après l'installation.start (bool): Démarrez l'unité après l'installation, s'il n'est pas installé.restart (bool): Si une unité est modifiée, redémarrez l'unité. Les unités inchangées ne seront pas redémarrées même avec cette option. La commande nix-desktop a le synopsis suivant:
nix-desktop [install | uninstall | build] DIRou avec des flocons Nix:
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR est un argument requis, et il doit être défini sur un répertoire qui contient desktop.nix .
La commande prend en charge les modes d'opérations suivants, qui doivent être désignés par le premier argument facultatif admis au répertoire:
install , il installe des applications définies dans le répertoire. Ce mode est la valeur par défaut, vous pouvez donc omettre d' install la sous-commande et spécifier le répertoire comme le seul argument.uninstall , il désinstalle les applications.build est comme install , mais il ne construit que la configuration et ni d'installation de fichiers de configuration ni de mise à jour du système.Il détecte les conflits avec les applications définies dans d'autres projets, veuillez donc vérifier les messages d'erreur.
Vous pouvez parcourir une liste de projets installés:
nix-desktop list Avec --verify Flag, la commande List vérifie si les répertoires source existent.
nix-desktop list --verifyVous pouvez également mettre à jour tous les projets installés avec une seule commande:
nix-desktop update