더 이상이 저장소를 유지하고 싶지 않으므로 보관하겠습니다.
nix-desktop 사용하면 NIX 프로젝트의 Linux 데스크톱 통합을 정의 할 수 있습니다. 이 스크립트를 사용하면 NIX를 사용하여 XDG 데스크탑 메뉴 항목 및 시스템 장치를 선언적으로 정의하고 Idempotent 방식으로 적용 할 수 있습니다.
저는 주택 관리자의 사용자입니다. 프로그램 실행 파일, 구성 파일, SystemD 서비스 및 기타 파일을 포함하여 전체 사용자 (HOME) 구성을 관리 할 수 있지만 구성 방식은 중앙 집중화됩니다. (명백히) 홈 디렉토리 당 하나의 구성 만 허용합니다. 때로는 약간 분산 된 것을 원했습니다. 예를 들어, 데이터가 포함 된 개인 GIT 저장소가 있으며 저장소와 관련된 애플리케이션을 관련 단지 기계에 설치하려고합니다. 나는 대중으로부터 그들의 존재를 숨기고 싶기 때문에 그들은 내 공개 구성에서 언급되어서는 안됩니다.
Nix Flakes를 사용하면 프로젝트 리포지토리 내에서 패키지 및 앱을 정의 할 수 있으며 편리하게 보입니다. 그러나 이러한 앱을 Linux 데스크탑과 통합하는 방법을 찾지 못했습니다. 터미널을 열지 않고 시작하기 위해 프로젝트 내에서 정의 된 해당 앱의 메뉴 항목을 설치하고 싶었습니다. 이것은 일관된 방식으로이를 구현하려는 시도입니다. 참고 : 이것은 닉스 플레이크에 의존하지 않습니다.
nix-env 사용한 구성 파일의 순진한 임시 설치와 달리 nix-desktop 시스템 상태를 업데이트합니다. 데스크탑 메뉴 항목에 대한 업데이트에 알리고 Reload/Enable/(RE) 설치된 SystemD 장치 (및 제거 및 비활성화)를 시작합니다. 이것은 일련의 데스크탑 응용 프로그램 및 서비스를 제공하기위한 편리하고 신뢰할 수있는 솔루션입니다.
Nix를 사용 하여이 저장소를 설치하십시오.
nix-env -if .또는 Nix Flakes를 이미 활성화 한 경우 설치하지 않고 프로그램을 사용할 수 있습니다.
nix run ' github:akirak/nix-desktop ' 저장소에서 desktop.nix 라는 파일을 만들어 구성을 정의 할 수 있습니다. 다음은 예입니다.
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
'' ;
} ;
} 파일은 속성 세트를 내보내고 프로젝트를 고유하게 식별하는 데 사용되는 필수 name 필드를 포함해야합니다. 닉스 파생의 일부가 될 것이므로 파일 이름 안전이어야합니다.
xdg.menu.applications.* XDG 메뉴 항목을 정의합니다. 일부 필드에는 현명한 기본값이 있지만 Name , Icon , Exec 및 StartupWMClass 지정해야합니다.
systemd.TYPE.* 사용자 SystemD 서비스 정의. TYPE SystemD에서 지원하는 단위 유형을 나타내는 services , timers 및 기타 복수 일 수 있습니다.
단위 파일의 내용이 될 text 필드가 포함되어야합니다.
또한 다음 옵션 필드도 지원합니다.
enable (bool) : 설치 후 장치를 활성화합니다.start (bool) : 설치가 아닌 경우 설치 후 장치를 시작하십시오.restart (BOOL) : 장치가 변경되면 장치를 다시 시작하십시오. 이 옵션에서도 변경되지 않은 장치가 다시 시작되지 않습니다. nix-desktop 명령은 다음과 같은 시놉시스를 가지고 있습니다.
nix-desktop [install | uninstall | build] DIR또는 닉스 플레이크로 :
nix run ' github:akirak/nix-desktop ' [install | uninstall | build] DIR DIR 은 필수 인수이며 desktop.nix 포함 된 디렉토리로 설정해야합니다.
이 명령은 다음 작업 모드를 지원하며, 이는 디렉토리에 선정 된 첫 번째 인수로 표시되어야합니다.
install 사용하면 디렉토리에 정의 된 응용 프로그램을 설치합니다. 이 모드는 기본값이므로 서브 명령을 install 하고 디렉토리를 유일한 인수로 지정할 수 있습니다.uninstall 하면 응용 프로그램이 제거됩니다.build install 와 같지만 구성 만 빌드하고 구성 파일을 설치하거나 시스템을 업데이트하지 않습니다.다른 프로젝트에 정의 된 응용 프로그램과 충돌을 감지하므로 오류 메시지를 확인하십시오.
설치된 프로젝트 목록을 찾아 볼 수 있습니다.
nix-desktop list --verify flag를 사용하면 List 명령이 소스 디렉토리가 있는지 확인합니다.
nix-desktop list --verify단일 명령으로 설치된 모든 프로젝트를 업데이트 할 수도 있습니다.
nix-desktop update