Não desejo mais manter esse repositório, então o arquivei.
nix-desktop permite definir a integração do Linux Desktop de projetos NIX. Com este script, você pode definir entradas de menu do XDG Desktop e unidades SystemD declarativamente usando o NIX e aplicá -lo de uma maneira idempotente.
Eu sou um usuário de gerente de casa. Ele permite gerenciar uma configuração inteira do usuário (HOME), incluindo executáveis do programa, arquivos de configuração, serviços do Systemd e outros arquivos, mas sua maneira de configuração é centralizada. (Aparentemente) permite apenas uma configuração por diretório inicial. Às vezes, eu queria algo um pouco descentralizado. Por exemplo, tenho alguns repositórios particulares do GIT que contêm dados e quero instalar aplicativos relacionados aos repositórios em máquinas que são relevantes apenas. Quero esconder a existência deles do público e, portanto, eles não devem ser mencionados em minha configuração pública.
O NIX Flakes permite definir pacotes e aplicativos nos repositórios do projeto, que parecem convenientes. No entanto, não encontrei uma maneira de integrar esses aplicativos com o Linux Desktop. Para iniciá -los sem abrir um terminal, eu queria instalar entradas de menu para esses aplicativos, definidos nos projetos. Esta é uma tentativa de implementá -lo de maneira consistente. NOTA: Isso não depende dos flocos nix.
Diferentemente da instalação ad-hoc ingênua de arquivos de configuração usando nix-env , nix-desktop atualiza o estado do sistema. Ele notifica as atualizações nas entradas do menu da área de trabalho e recarregue/enable/(re) inicia as unidades Systemd instaladas (e param e desativa as unidades desinstaladas). Esta é uma solução conveniente e confiável para devolver um conjunto de aplicativos e serviços de desktop.
Instale este repositório usando o nix:
nix-env -if .Como alternativa, você pode usar o programa sem instalá -lo se já ativou os flocos do NIX:
nix run ' github:akirak/nix-desktop ' Você pode definir a configuração criando um arquivo chamado desktop.nix em um repositório. O seguinte é um exemplo:
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
'' ;
} ;
} O arquivo exporta um conjunto de atributos e deve conter um campo name obrigatório, usado para identificar exclusivamente projetos. Ele se tornará parte da derivação do NIX a ser construída, por isso deve ser o nome do arquivo seguro.
xdg.menu.applications.* Defina entradas de menu XDG. Alguns campos têm padrões sensatos, mas você deve especificar Name , Icon , Exec e StartupWMClass .
systemd.TYPE.* Defina o Systemd Services do usuário. TYPE pode ser services , timers e outros plurais para representar tipos de unidades suportados pelo SystemD.
Ele deve conter o campo text que se tornará o conteúdo do arquivo da unidade.
Ele também suporta os seguintes campos opcionais:
enable (BOOL): Ative a unidade após a instalação.start (BOOL): Inicie a unidade após a instalação, se não for instalação.restart (bool): se uma unidade for alterada, reinicie a unidade. As unidades inalteradas não serão reiniciadas, mesmo com essa opção. O comando nix-desktop tem a seguinte sinopse:
nix-desktop [install | uninstall | build] DIRou com nix flocos:
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR é um argumento necessário e deve ser definido como um diretório que contém desktop.nix .
O comando suporta os seguintes modos de operações, que devem ser indicados pelo primeiro argumento opcional preso ao diretório:
install , ele instala aplicativos definidos no diretório. Este modo é o padrão, para que você possa omitir o subcomando install e especificar o diretório como o único argumento.uninstall , desinstala os aplicativos.build é como install , mas só cria a configuração e não instala arquivos de configuração nem atualiza o sistema.Ele detecta conflitos com aplicativos definidos em outros projetos; portanto, verifique as mensagens de erro.
Você pode navegar em uma lista de projetos instalados:
nix-desktop list Com o sinalizador --verify , o comando da lista verifica se os diretórios de origem existem.
nix-desktop list --verifyVocê também pode atualizar todos os projetos instalados com um único comando:
nix-desktop update