ฉันไม่ต้องการรักษาที่เก็บนี้อีกต่อไปดังนั้นฉันจะเก็บมันไว้
nix-desktop ช่วยให้คุณกำหนดการรวมเดสก์ท็อปของ Linux ของโครงการ NIX ด้วยสคริปต์นี้คุณสามารถกำหนดรายการเมนูเดสก์ท็อป XDG และหน่วย SystemD ได้อย่างเปิดเผยโดยใช้ NIX และนำไปใช้ในรูปแบบ idempotent
ฉันเป็นผู้ใช้ผู้จัดการบ้าน ช่วยให้คุณจัดการการกำหนดค่าผู้ใช้ทั้งหมด (ที่บ้าน) รวมถึงการทำงานของโปรแกรมไฟล์การกำหนดค่าบริการ SystemD และไฟล์อื่น ๆ แต่วิธีการกำหนดค่าจะถูกรวมศูนย์ มัน (เห็นได้ชัด) อนุญาตให้มีการกำหนดค่าเพียงครั้งเดียวต่อไดเรกทอรีบ้าน บางครั้งฉันต้องการบางสิ่งบางอย่างกระจายอำนาจเล็กน้อย ตัวอย่างเช่นฉันมีที่เก็บ GIT ส่วนตัวที่มีข้อมูลและฉันต้องการติดตั้งแอปพลิเคชันที่เกี่ยวข้องกับที่เก็บลงในเครื่องที่เกี่ยวข้องเท่านั้น ฉันต้องการซ่อนการดำรงอยู่ของพวกเขาจากสาธารณะและดังนั้นพวกเขาจึงไม่ควรพูดถึงในการกำหนดค่าสาธารณะของฉัน
Nix Flakes ช่วยให้คุณกำหนดแพ็คเกจและแอพภายในที่เก็บโครงการซึ่งดูสะดวก อย่างไรก็ตามฉันไม่พบวิธีที่จะรวมแอพดังกล่าวเข้ากับเดสก์ท็อป Linux ในการเริ่มต้นโดยไม่ต้องเปิดเทอร์มินัลฉันต้องการติดตั้งรายการเมนูสำหรับแอพเหล่านั้นซึ่งกำหนดไว้ในโครงการ นี่คือความพยายามที่จะนำไปใช้ในวิธีที่สอดคล้องกัน หมายเหตุ: สิ่งนี้ไม่ได้ขึ้นอยู่กับสะเก็ดของ Nix
ซึ่งแตกต่างจากการติดตั้งไฟล์การกำหนดค่าที่ไร้เดียงสาโดยใช้ nix-env , nix-desktop อัปเดตสถานะระบบ จะแจ้งการอัปเดตเกี่ยวกับรายการเมนูเดสก์ท็อปและโหลด/เปิดใช้งาน/เปิดใช้งาน/(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 บังคับซึ่งใช้เพื่อระบุโครงการที่ไม่ซ้ำกัน มันจะกลายเป็นส่วนหนึ่งของการสร้าง Nix ที่จะสร้างขึ้นดังนั้นควรเป็นชื่อไฟล์ที่ปลอดภัย
xdg.menu.applications.* กำหนดรายการเมนู XDG บางฟิลด์มีค่าเริ่มต้นที่สมเหตุสมผล แต่คุณต้องระบุ Name Icon Exec และ StartupWMClass
systemd.TYPE.* กำหนดบริการผู้ใช้ SystemD TYPE สามารถเป็น services timers และพหูพจน์อื่น ๆ สำหรับการแสดงประเภทหน่วยที่สนับสนุนโดย SystemD
จะต้องมีฟิลด์ text ซึ่งจะกลายเป็นเนื้อหาของไฟล์หน่วย
นอกจากนี้ยังรองรับฟิลด์เสริมต่อไปนี้:
enable (บูล): เปิดใช้งานหน่วยหลังจากการติดตั้งstart (บูล): เริ่มเครื่องหลังจากการติดตั้งหากไม่ได้ติดตั้งrestart (บูล): หากมีการเปลี่ยนแปลงหน่วยให้รีสตาร์ทเครื่อง หน่วยที่ไม่เปลี่ยนแปลงจะไม่เริ่มต้นใหม่แม้จะมีตัวเลือกนี้ คำสั่ง nix-desktop มีบทสรุปต่อไปนี้:
nix-desktop [install | uninstall | build] DIRหรือด้วย Nix Flakes:
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