
NixOSã®èšå®ãã¡ã€ã«å®å šè§£èª¬âïŒäžåè¶ ãã§èªãåã®ææ°æ§æ
æšæ¥ã®å€ããªãã³ã°ã®ãã¹ã¯ã§ sudo nixos-rebuild switch --flake /etc/nixos#nixos ãšæã¡èŸŒã¿ãŸãããç»é¢ãæ°åè¡ã®æåãæµããŠããã°ãããããšããã³ãããæ»ã£ãŠããŸããããã ãã§ãåã®èªäœPCã¯492åç®ã®ãäžä»£ãã«ãªããŸããã
492åãããã ãã®åæ°ãåã¯ãã®ãã·ã³ãäœãçŽããŠããŸããããããæåã«å ¥ããŠããäžåºŠãåã€ã³ã¹ããŒã«ãããŠããŸããã

ãã®èšäºã§ã¯ã2026幎8ææç¹ã®åã®NixOSæ§æããèšå®ãã¡ã€ã«493è¡ã®ã»ãŒå šé ç®ã«ããã£ãŠããªãããæžãããããã説æããŸããèšå®ã®å šæããã 貌ã£ãŠããåããŠã®äººã«ã¯åªæã«ããèŠããŸãããéã«ã1è¡ãã€ã®æå³ããåããã°ãNixOSãšããå°ãå€ãã£ãOSãäœã䟿å©ã«ããããšããŠããã®ãã¯ãããã°ã©ãã³ã°ã®ç¥èããªããŠãäŒããã¯ãã§ãã
ããªãé·ãèšäºã«ãªããŸããç®æ¬¡ããæ°ã«ãªãå±€ã ãæŸã£ãŠèªãã§ããã ããŠã倧äžå€«ãªããã«æžããŸããã
ãŸãå°å³ââ4ã€ã®ãã¡ã€ã«ãšããã®åæ
/etc/nixos ã®äžèº«ãæ°ããããåèš493è¡ã§ããã
å èš³ã¯ãããªã£ãŠããŸãã

ãã€ã³ãã¯ãåãæ¥åžžçã«æã§æžãæããŠããã®ã configuration.nix ã®37è¡ã§ã¯ãªããšããç¹ã§ãã37è¡ã¯ããããäºåºŠãšè§Šããªãå Žæãã§ãæ®æ®µã®èŠæã¯382è¡ã®åŽã«ç©ã¿äžãã£ãŠãããŸãã
ãã®åæ ãã§ãããŸã§ã«ãåã¯äœåºŠãæ§æãäœãçŽããŸããã以åã¯1ã€ã®ãã¡ã€ã«ã«å šéšæžããŠããŠããã®ããã®èšå®ã¯éå»ã®èšäºã§ãå ¬éããŠããŸããä»ã®åœ¢ã«ãã©ãçããçç±ã¯ããã®èšäºãèªã¿é²ãããã¡ã«åãã£ãŠãããããšæããŸãã
NixOSãã®ãã®ã®å ¥é㯠åãç¹ã«ãããããããLinuxãã£ã¹ããªãã¥ãŒã·ã§ã³ãNixOS ã®ã»ãã詳ããã®ã§ããããããNixOSã£ãŠäœããšããæ¹ã¯ãã¡ããå ã«ã©ããã
NixOSã®æ ¹ã£ãââãèšå®ããèšæ¶ãããããªãOS
WindowsãmacOSã§ãå»å¹Žããã£ãèšå®ãæãåºããã§ãããããåã¯ç¡çã§ãã
æ®éã®OSã§ã®ç°å¢æ§ç¯ã¯ãæé ã®ç©ã¿äžãã§ãããã©ã€ããå ¥ããŠãèšå®ç»é¢ã®ãã§ãã¯ãå€ããŠãã¿ãŒããã«ã§äœãã®ã³ãã³ããå©ããŠã1ã€ãã€ã¯èŠããŠããŠããå幎åŸã«ã¯ããªããã®PCã ã調åãããã®ããã誰ã«ã説æã§ããªããªããŸããäŒç€Ÿã®PCã人ã«ãã£ãŠåŸ®åŠã«éãã®ããã ããããããåå ã§ãã
NixOSã¯ãããéããæ»ããŸããæé ãç©ã¿äžããã®ã§ã¯ãªãã宿ããç¶æ ã1æã®èšèšæžã«æžããŠãOSã«ãã®éãäœãããã®ã§ããæçã§ããã°ãæšæ¥ã€ãã£ãã«ã¬ãŒã®äœæ¥ã®èšæ¶ãã§ã¯ãªããã¬ã·ãããæã€ããšããçºæ³ã®è»¢æã«ãªããŸãã
ç·åã®ä»äºã«çœ®ãæãããšããã£ãšãã£ããããŸããåå管çã§æ¬åœã«äŸ¡å€ãããã®ã¯ãçºæ³šå±¥æŽãã§ã¯ãªããããã¹ãååäžèŠ§è¡šãã®ã»ãã§ããäžèŠ§è¡šããæ£ãããã°ãæ£ã®äžèº«ã¯ããã«åãããã°ãããNixOSã®èšå®ãã¡ã€ã«ã¯ãPCã«ããããã®äžèŠ§è¡šã«ããããŸãã
ãäžä»£ããšããå®å šè£ 眮
ãã®äœãæ¹ããçãŸããæå€§ã®æ©æµããäžä»£ïŒgenerationïŒã§ãã
èšå®ãæžãæã㊠nixos-rebuild switch ãå©ããã³ãNixOSã¯æ°ããã·ã¹ãã ãäžžããš1ã€äœããããã492çªç®ã493çªç®âŠâŠãšçªå·ãæ¯ã£ãŠç©ãã§ãããŸããå€ãäžä»£ã¯æ¶ãããã«æ®ããŸããã ãããæ°ããèšå®ã§ç»é¢ãæ ããªããªã£ãŠãã黿ºãå ¥ãçŽããŠèµ·åã¡ãã¥ãŒãã1ã€åã®çªå·ãéžã¹ã°ãäœããšããªãã£ãããã«æ»ããŸãã
æ®éã®OSã§ããã©ã€ããå ¥ãããèµ·åããªããªã£ãããæãã®ã¯ãæ»ãéãçšæãããŠããªãããã§ããNixOSã§ã¯æ»ãéãåžžã«494æ¬ãããçšæãããŠããããšããã ãã®è©±ãªã®ã§ããããã®å·®ã¯å®éã«äœ¿ããšæ³å以äžã«å¹ããŸããå£ãåæ°ã®å€æ®µããéåžžã«å®ããªãã®ã§ãã
æã§æžã37è¡ãšãçæããã382è¡
/etc/nixos ã®äžã§ãåãèªåã®æã§æžããŠããè¡æ°ã¯37è¡ã§ãã
NixOSã®èšäºãèªããšããããŠãäœçŸè¡ãã®èšå®ãã¡ã€ã«ã貌ãããŠããŸããåèªèº«ãéå»ã«ãå šèšå®å ¬éããšããèšäºãäœåºŠãæžããŸãããã§ãä»ã®æ§æã¯ãããããæ¹åãå€ãã£ãŠããŸãã人éãèªãå Žæããæå³çã«å°ããéã蟌ããŠããã®ã§ãã
å®éã® configuration.nix ããããã§å šéšã§ãã
{ config, lib, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
./generated.nix
];
# Boot loader (UEFI).
boot.loader.systemd-boot.enable = lib.mkDefault true;
boot.loader.efi.canTouchEfiVariables = lib.mkDefault true;
networking.hostName = lib.mkDefault "nixos";
networking.networkmanager.enable = lib.mkDefault true;
users.users.takeshi = {
isNormalUser = lib.mkDefault true;
extraGroups = lib.mkDefault [ "wheel" "networkmanager" ];
};
nix.settings.experimental-features = lib.mkDefault [ "nix-command" "flakes" ];
system.stateVersion = lib.mkDefault "25.05";
}
ãã®37è¡ãå®ã£ãŠãããã®
ãã£ãŠããããšã¯4ã€ã ãã§ãã
â UEFIã§èµ·åã§ããããšãsystemd-boot ã¯èµ·åã¡ãã¥ãŒãåºããŠãããããã°ã©ã ã§ãããã»ã©ã®ã1ã€åã®äžä»£ã«æ»ããã®å ¥å£ãããã§ããcanTouchEfiVariables ã¯ããã¶ãŒããŒãåŽã®èµ·åèšå®ãNixOSãæžãæããŠããããšããèš±å¯ã«ãªããŸãã
â¡ ãããã¯ãŒã¯ã«ã€ãªããããšãnetworkmanager ã¯ç¡ç·ãæç·ã®æ¥ç¶ã管çããå®çªã®ä»çµã¿ã§ãã
⢠èªåã®ãŠãŒã¶ãŒãååšããããšãisNormalUser ã¯ç®¡çè ã§ã¯ãªãæ®éã®ãŠãŒã¶ãŒãšããæå³ã§ãextraGroups ã® wheel ã sudo ã䜿ããè³æ Œã«ããããŸãããããæ¶ãããšããã°ã€ã³ã¯ã§ããŠãäœãèšå®ã§ããªã人ã«ãªã£ãŠããŸããŸãã
⣠flakeãšããæ°ããæžãæ¹ã䜿ããããšãexperimental-features ã®2ã€ããåŸã§èª¬æãã flake.nix ãæå¹ã«ããã¹ã€ããã§ãã
æåŸã® system.stateVersion = "25.05" ã ãã¯ãå°ãæ§æ ŒãéããŸããããã¯ãã®ãã·ã³ã«æåã«NixOSãå ¥ãããšãã®çãèšé²ããŠãããã®ã§ãããŒãžã§ã³ãäžããããã®æ°åã§ã¯ãããŸãããããŒã¿ããŒã¹ã®ä¿å圢åŒã®ããã«ãäžåºŠäœã£ããåæã«åœ¢ãå€ããããŠã¯å°ããã®ãã®äºææ§ãããã®æ°åãå®ã£ãŠããŸããNixOSåå¿è ããã¡ã°ããããã¡ãªäºæ ãããããææ°ã®æ°åã«æžãæããŠããŸãããšã§ããåã®æ©äœã¯25.05ãã€ãŸã2025幎5æãªãªãŒã¹ã®çã§ã¹ã¿ãŒãããŠããŸãã
ãªã2ã€ã«åããã®ã
imports ã«äžŠãã 2ã€ã®ãã¡ã€ã«ããæ®ããæ åœããŸããhardware-configuration.nixïŒ60è¡ïŒã¯ã€ã³ã¹ããŒã«æã«PCãèªåã®ãã£ã¹ã¯ãCPUã調ã¹ãŠèªåã§æžãããã®ãgenerated.nixïŒ382è¡ïŒã¯ãåã®æ®æ®µã®èŠæãããšã«çæãããŠãããæ¥ã è²ã€åŽã®èšå®ã§ãã
ãã®ããŒã«ã§generated.nixãçæããŠããŸãã
çæã«ã¯èªäœã®ãã¡ãã®ããŒã«ã䜿çšããŠããŸãã
ãªãåããã®ããå£ãããå°ãéšåãšãããã£ã¡ã ãæžãæããéšåããåããã¡ã€ã«ã«çœ®ããããªãã£ãããã§ããååäžèŠ§è¡šãšä»æã®çºæ³šã¡ã¢ãåãçŽã«æžããªãããšããã®ãšåãçå±ã«ãªããŸãã
lib.mkDefaultââããã¡ãã¯è²ããŸãããšãã宣èš
ãã1ã€ãåå¿è ãã€ãŸãããã€ã³ãã説æãããŠãã ããã37è¡ã®ã»ãŒå šéšã«ã€ããŠãã lib.mkDefault ã§ãã
NixOSã§ã¯ãåãé ç®ã2ç®æã§éãå€ã«èšå®ãããšããšã©ãŒã«ãªã£ãŠèµ·åããŸãããäŒè°ã§2人ãå¥ã ã®æ¥çšã䞻匵ããŠã決ãŸããªããŸãŸæ¢ãŸãã®ãšåãã§ãã
lib.mkDefault ã¯ããã®å€ã¯ä»®ã§ãããã£ãšåŒ·ãæå®ãã©ããã«ããã°ããã¡ããåªå ããŠãã ããããšããå°ã§ãæåããè²ããšå®£èšããŠããæ©èœã«ããããŸãããããä»ããŠãããšã382è¡ã®åŽã§åãé ç®ãèšå®ããŠãè¡çªãããããšããæžããã»ããçŽ çŽã«åã¡ãŸãã
å®éãusers.users.takeshi.extraGroups ã¯37è¡ã®åŽã§ã¯ wheel ãš networkmanager ã®2ã€ã ãã§ããã382è¡ã®åŽã§ã¯8ã€ã«å¢ããŠããŸãã
users.users.takeshi.extraGroups = [
"networkmanager" "wheel" "video" "docker" "render" "libvirtd" "kvm" "vboxusers"
];
video ãš render ã¯GPUãçŽæ¥è§Šããããdocker ã¯ã³ã³ããã管çãããããlibvirtd ãš kvm ã¯ä»®æ³ãã·ã³ãåãããããvboxusers ã¯VirtualBoxçšã®è³æ Œã§ããææžãã®å±€ã§æäœéãä¿èšŒãã€ã€ãçæã®å±€ã§æ¬çªçšã«äžæžãããââãã®äºå±€ãå®å šã«æç«ããŠããã®ã¯ãlib.mkDefault ãããããã§ãã
flake.nixââ14è¡ããæéãæ¢ããã
å幎åã«åããŠããèšå®ãã仿¥ãã®ãŸãŸåããšã¯éããŸããããœãããŠã§ã¢ã¯æ¥ã æŽæ°ãããããã§ãã
ãã®ãæéããæ±ãã®ã flake.nix ã§ãããããå šæã§14è¡ãããããŸããã
{
description = "NixOS configuration for nixos";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
outputs = { self, nixpkgs }: {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
modules = [
{ nixpkgs.hostPlatform = "x86_64-linux"; }
./configuration.nix
];
};
};
}
倧äºãªã®ã¯4è¡ç®ã ãã§ããnixos-26.05 ãšæžããŠãããŸããããã¯ãœãããŠã§ã¢ã®å·šå€§ãªã«ã¿ãã°ïŒnixpkgsïŒã®ã©ã®çã䜿ããã®æå®ã§ãåã¯ããŸ2026幎5æãªãªãŒã¹çã®ç³»çµ±ã䜿ã£ãŠããŸããããã nixos-unstable ã«å€ããã°ææ°ã远ããããæ§æã«ãªããŸããããã®ã¶ãå£ããé »åºŠãäžãããŸãã
hostPlatform = "x86_64-linux" ã¯ããã®èšå®ãã©ã®CPUã®çš®é¡åããã®å®£èšã§ããåãèšå®ãã¡ã€ã«ããArmçãçµã¿ç«ãŠãããšãã§ããä»çµã¿ãªã®ã§ãæç€ºããŠããå¿ èŠããããŸãã
flake.lockããææã®ãããããŸã§èšé²ãã
flake.nix ã«ã¯ flake.lock ãšããçžæ£ã®ãã¡ã€ã«ãèªåã§ã€ããŸãããã¡ãã«ã¯ããã®ã«ã¿ãã°ã®ã©ã®ç¬éã®ãã®ã䜿ã£ãããåºå®ããŠèšé²ãããŸãã
ããŸåããŠããã·ã¹ãã ã®çã確èªããã 26.05.20260804 ã§ãããã€ãŸã8æ4æ¥æç¹ã®ã«ã¿ãã°ããçµã¿äžãã£ãŠããŸãã
ã¬ã·ãã®æ¯å©ã«æ»ããšãflake.nix ãããã®ã¬ã·ãæ¬ã®ç¬¬26.05çã䜿ãããšãã宣èšã§ãflake.lock ã¯ãå°éºŠç²ã¯ãã®è£œç²æã®ãã®ãããã䜿ã£ãããŸã§æžãçããè²·ãç©ã¡ã¢ã§ãããããŸã§åºå®ãããŠãããããåãèšå®ãã¡ã€ã«ãå¥ã®PCã«æã£ãŠãã£ãŠããå»å¹Žãšåããã®ã仿¥ãçŒãäžãããŸãã
çåœä¿éºã®ä»äºãããŠãããšãçŽæ¬Ÿãå¶åºŠã¯ããã€æç¹ã®çããã§æå³ãå€ããã®ãåœããåã§ããå¥çŽæžã«ççªå·ãæ¯ãã®ãšãflakeã§ã«ã¿ãã°ãåºå®ããã®ã¯ãåã®äžã§ã¯ã»ãšãã©åãåäœã«èŠããŠããŸãã
ã¡ãªã¿ã«åé ã®ã³ãã³ã nixos-rebuild switch --flake /etc/nixos#nixos ã® #nixos ã¯ãflake.nix ã®äžã® nixosConfigurations.nixos ãæããŠããŸãã1ã€ã®ãã¡ã€ã«ã«äœå°åãã®èšå®ã䞊ã¹ãŠãååã§åŒã³åãããããšããããšã§ãããã¹ã¯ããããšãµãã®ããŒãPCã1ã€ã®ãªããžããªã§ç®¡çããããªãããã®åœ¢ãå¹ããŠããŸãã
hardware-configuration.nixââPCãèªåã§æžãã60è¡
ãã®ãã¡ã€ã«ã®åé ã«ã¯ãæã§ç·šéãããªããšæžããŠãããŸãã
ã€ã³ã¹ããŒã«æã« nixos-generate-config ãæ©äœã調ã¹ãŠèªåçæãããã®ã§ããã®æ©äœã§ããæå³ãæããªãäºå®ã䞊ãã§ããŸãã
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
boot.kernelModules = [ "kvm-amd" ];
äžã®è¡ã¯ãèµ·åã®ãã¡ã°ãæåã®æ®µéã§èªã¿èŸŒãéšåã§ããnvme ã¯SSDãahci ã¯SATAãxhci_pci ã¯USBãããã«ãã£ã¹ã¯ã®çš®é¡ãå ¥ã£ãŠããªããšãOSæ¬äœãèªã¿åºãåã«è¿·åã«ãªããŸããäžã® kvm-amd ã¯ãAMDã®CPUã«èŒã£ãŠããä»®æ³åæ¯æŽæ©èœã䜿ãããã®éšåã§ãåŸåã§åºãŠããä»®æ³ãã·ã³ã®åå°ã«ãªããŸãã
ãã£ã¹ã¯ã®æå®ã¯ããã§ãã
fileSystems."/" = { device = "/dev/disk/by-uuid/62b288fa-âŠ"; fsType = "ext4"; };
fileSystems."/mnt/steam" = { device = "UUID=1d98c8b4-âŠ"; fsType = "ext4"; options = [ "rw" "nofail" ]; };
sda ã®ãããªååã§ã¯ãªãUUIDïŒãã£ã¹ã¯åºæã®èçªå·ïŒã§æå®ããŠããã®ãããœã§ããSATAã±ãŒãã«ãæ¿ãæ¿ããŠãé çªãå€ãããªãã®ã§ãèµ·åããªããªããŸãããnofail ã¯ããã®ãã£ã¹ã¯ãèŠã€ãããªããŠãèµ·åãæ¢ããªãããšããæå®ã§ãå¢èšãã£ã¹ã¯ã«ã¯å¿ é ã§ãããããç¡ããšãããŒã¿çšãã£ã¹ã¯ã1æ¬å€ããã ãã§PCãèµ·åããªããªããŸãã
åã®æ©äœã¯ã·ã¹ãã çšã®ã»ãã«ãSteamçšãšãããŒã¿çšã2æ¬ã®åèš4æ¬æ§æã«ãªã£ãŠããŸãã
ãããŠçæåŽã§ãå šãã£ã¹ã¯ã«1ã€ã ãèšå®ãè¶³ããŠããŸãã
fileSystems."/".options = [ "noatime" ];
noatime ã¯ããã¡ã€ã«ãèªãã ã ãã®æå»ãèšé²ããªãããšããæå®ã§ããæšæºã§ã¯ãã¡ã€ã«ãéããã³ã«ãæçµã¢ã¯ã»ã¹æå»ããæžã蟌ãã®ã§ãããããã¯ã»ãšãã©èª°ã䜿ããªãæ å ±ã®ããã«æžã蟌ã¿ãçºçããŸããSSDã®å¯¿åœãšé床ã®ããã«ãåã¯4æ¬ãã¹ãŠã§åã£ãŠããŸãã
æåŸã«ã¹ã¯ããã§ãã
swapDevices = [{ device = "/swapfile"; size = 16 * 1024; }];
16GBã®ã¹ã¯ãããã¡ã€ã«ãã¡ã¢ãªãè¶³ããªããªã£ããšãã®é¿é£å ã§ã16 * 1024 ãšæãç®ã®ãŸãŸæžããã®ãNixããããšããã§ããèšå®ãã¡ã€ã«ãããã°ã©ãã³ã°èšèªãªã®ã§ãèšç®åŒããã®ãŸãŸçœ®ããŠãããããã§ãã
generated.nixãŒãŒãŒæ¥ã ã®æŽæ°ãã¡ã€ã«ã§ãããOSã®èäœéšå
ããŒããŠã§ã¢ã®å±€ââãã®PCã®æ§èœãåŒãåºãèšå®
åã®ã¡ã€ã³PCã¯ãRyzen 7 5700X3DãRadeon RX 7800 XTãã¡ã¢ãª64GBã®èªäœãã¹ã¯ãããã§ãããªãã³ã°ã®ãã¹ã¯ã«çœ®ããŠã27ã€ã³ãã®ã¢ãã¿ãŒãšã¢ãã€ã«ã¢ãã¿ãŒã®2æã§äœ¿ã£ãŠããŸãã
382è¡ã®ãã¡ãããªãã®å²åããã®æ§æã®æ§èœãåŒãåºãããã®èšå®ã§ããããããã¡ã°ãããªããã®å€ãªã®ããã®èª¬æããããããå±€ã«ãªããŸãã
ã«ãŒãã«ãšèµ·åãªãã·ã§ã³
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.initrd.kernelModules = [ "amdgpu" ];
boot.kernelParams = [ "preempt=full" "amdgpu.ppfeaturemask=0xffffffff" ];
linuxPackages_latest ã¯ãLinuxã®äžæ žïŒã«ãŒãã«ïŒãææ°çã«ããæå®ã§ãã確èªããã 7.1.6 ãåããŠããŸãããNixOSã®æšæºã¯ããå°ãä¿å®çãªçãªã®ã§ãããæ°ããGPUãããŒããŠã§ã¢ã®ãµããŒãã¯ã«ãŒãã«ã®æ°ããã§æ±ºãŸãã®ã§ãRadeonãç©ãã§ãããªãäžããŠããã»ããåŸã§ãã
initrd.kernelModules ã« amdgpu ãå ¥ããŠããã®ã¯ãèµ·åã®ãã¡ã°ãæåããGPUãã©ã€ããèªãŸããããã§ããããããªããšãèµ·åéäžã§ç»é¢ã®ã¢ãŒããåãæ¿ãã£ãŠãã©ã€ããŸãã
preempt=full ã¯ãã«ãŒãã«ãåŠçã®éäžã§ãå¥ã®äœæ¥ã«å²ã蟌ã¿ãèš±ãèšå®ã§ããå šäœã®åŠçéã¯ãããã«èœã¡ãŸãããããŠã¹ããŠã£ã³ããŠã®åå¿ãè¯ããªããŸãããµãŒããŒã§ã¯ãªããã¹ã¯ããããšããŠäœ¿ãæ©äœãªã®ã§ãå¿çæ§ãåããŸããã
amdgpu.ppfeaturemask=0xffffffff ãããã®2è¡ã§ãã¡ã°ãå¹ããŸããAMDã®GPUãã©ã€ãã¯ãé»åãã¯ããã¯ã现ããå¶åŸ¡ããæ©èœãæšæºã§ã¯å°å°ããŠããŸãããã®å€ã¯å šãããã1ã§åããæå®ã§ãèŠããã«ãå°å°ãå šéšéããããšããæå³ã§ããåŸã§åºãŠããGPU調æŽããŒã«ãå®éã«å¹ãããã«ãªãã®ã¯ããã®1è¡ãããããã«ãªããŸãã
ã¡ã¢ãªãŸããã®5ã€ã®æ°å
boot.kernel.sysctl = {
"vm.dirty_background_bytes" = 67108864; # 64MB
"vm.dirty_bytes" = 268435456; # 256MB
"vm.max_map_count" = 2147483642;
"vm.swappiness" = 100;
"vm.vfs_cache_pressure" = 50;
};
åªæã«èŠããŸããã1ã€ãã€ã¯åçŽã§ãã
dirty_background_bytesïŒ64MBïŒãš dirty_bytesïŒ256MBïŒã¯ãæžã蟌ã¿ãã©ãã ãã¡ã¢ãªã«æºããŠãããã£ã¹ã¯ãžæµããã®èšå®ã§ãã64MBæºãŸã£ããè£ã§ãã£ããæžãå§ãã256MBãŸã§æºãŸã£ããã¢ããªãåŸ ãããŠã§ãæžãåãããšããäºæ®µæ§ãã«ãªããŸããåç»ã®ãããªå€§ããªãã¡ã€ã«ãæ±ããšãã«ãæžã蟌ã¿ãäžæ°ã«æŒãå¯ããŠä»ã®æäœãåºãŸãã®ãé²ãçãã§ãã
max_map_countïŒçŽ21åïŒã¯ã1ã€ã®ããã°ã©ã ãã¡ã¢ãªé åãããã€ãŸã§çްåãã«ç¢ºä¿ã§ãããã®äžéã§ããæšæºå€ã¯ãã£ãšå°ããã®ã§ãããProtonçµç±ã§Windowsã®ã²ãŒã ãåãããšããã®äžéã«åœãã£ãŠèœã¡ãã¿ã€ãã«ãå®åšããŸããäºå®äžã®äžéãŸã§éããŠããŸãã®ããLinuxã§ã²ãŒã ãããç°å¢ã®å®çªã«ãªã£ãŠããŸãã
swappinessïŒ100ïŒã¯ãã¡ã¢ãªãäœã£ãŠããŠãã©ããããç©æ¥µçã«éé¿ããããã®åºŠåãã§ããæšæºã¯60ååŸã§ããã£ã¹ã¯ã®ã¹ã¯ãããé ãã£ãæä»£ã®åæ®ããããªãã¹ã䜿ããªããæ¹åã«æ¯ãããŠããŸãããã ãæ¬¡ã«èª¬æããzramã䜿ãå Žåã¯è©±ãéã§ãéé¿å ãã¡ã¢ãªã®äžã«ãã£ãŠé«éãªã®ã§ãé æ ®ãªã䜿ãããã»ããåŸã«ãªããŸããã ããæå€§ã®100ã«ããŠããŸãã
vfs_cache_pressureïŒ50ïŒã¯ããã¡ã€ã«ã®å Žæãååã®æ å ±ãã©ãã ãé·ããã£ãã·ã¥ã«æ®ããã§ããæšæºã®100ã«å¯ŸããŠååã«ããããšã§ããã£ãã·ã¥ãé·çãããŸãã倧éã®ãã¡ã€ã«ãæ±ããšãã®äœæãå€ããéšåã§ãã
zramââã¡ã¢ãªãå§çž®ããŠäœ¿ã
zramSwap.enable = true;
zramSwap.algorithm = "zstd";
zramSwap.memoryPercent = 30;
zramSwap.priority = 100;
boot.tmp.useZram = true;
zramã¯ãã¡ã¢ãªã®äžéšãå§çž®é åãšããŠåãåºãããããéé¿å ã«ããä»çµã¿ã§ãããã£ã¹ã¯ãžæžãã«è¡ãããæ¡éãã«éãããããå§çž®ãå¹ãã®ã§å®è³ªçã«ã¡ã¢ãªãå¢ããããã«æ¯ãèããŸããzstd ã¯å§çž®ã®æ¹åŒã§ãé床ãšå§çž®çã®ãã©ã³ã¹ãè¯ãå®çªã§ããmemoryPercent = 30 ã¯ã64GBã®ãã¡æå€§ã§3å²ã»ã©ãå§çž®é åã«å ãŠããšããæå³ã«ãªããŸãã
priority = 100 ãå°å³ã«éèŠã§ããããã»ã©ã®16GBã®ã¹ã¯ãããã¡ã€ã«ãšããã®zramã®ã©ã¡ããå ã«äœ¿ããã®åªå é äœã§ãæ°åã倧ããã»ããå ã«éžã°ããŸãããã£ã¹ã¯ã®ã¹ã¯ãããã¡ã€ã«ã¯æšæºã§ -1 ãªã®ã§ããã®æå®ã§å¿ ãzramãå ããã£ã¹ã¯ã¯æåŸã®ç Šãšããé çªã«ãªããŸãã
boot.tmp.useZram ã¯ãäžæãã¡ã€ã«çœ®ãå ŽïŒ/tmpïŒãã®ãã®ãå§çž®ã¡ã¢ãªäžã«çœ®ãæå®ã§ãããã«ãã®äžéãã¡ã€ã«ããã£ã¹ã¯ãå©ããªããªããŸãã
ãã ããæ£çŽã«æžããŸãããã®èšäºãæžããŠããæç¹ã§ããã®èšå®ã¯ãŸã 1ããªãå¹ããŠããŸããã確èªãããšãããzramã®ããã€ã¹ã¯ãŸã ååšããŸããã§ãããçç±ã¯åçŽã§ãèšå®ãã¡ã€ã«ã«æžãè¶³ããããš nixos-rebuild switch ããŸã å®è¡ããŠããªãããã§ãã
ãããNixOSã®æ§æ Œããã衚ããŠããŸããèšå®ãã¡ã€ã«ãæžãã®ã¯ãçºæ³šæžãæžããããšã§ãã£ãŠããæ£ã«åç©ã䞊ã¶ãããšã§ã¯ãããŸãããæžããæç¹ã§ã¯äžçã¯äœãå€ããããrebuildãå©ããç¬éã«ãŸãšããŠå€ãããæ £ãããŸã§ã¯æžæããŸãããéã«ããã°æžãããã®ç¶æ ã§PCãå端ã«å£ããããšããªããšããå®å¿ã§ããããŸãã
GPUââRadeonããã«ã«äœ¿ã
services.xserver.videoDrivers = [ "amdgpu" ];
hardware.graphics.enable = true;
hardware.graphics.extraPackages = with pkgs; [ vulkan-tools rocmPackages.rocminfo rocmPackages.clr.icd libva ];
hardware.amdgpu.opencl.enable = true;
amdgpu ã¯AMDã®æ£åŒãªãªãŒãã³ãœãŒã¹ãã©ã€ãã§ããhardware.graphics.enable ã¯ã3Dæç»ãåç»ã®åçæ¯æŽãæå¹ã«ããåºæ¬ã®ã¹ã€ããã«ãªããŸãã
extraPackages ã®äžèº«ããããããå¥ã®åœ¹å²ãæã£ãŠããŸããvulkan-tools ã¯ã²ãŒã ã§äœ¿ãæç»APIãrocmPackages.clr.icd ã¯èšç®çšã®å ¥å£ãlibva ã¯åç»ã®ãã³ãŒããGPUã«ä»»ããããã®ä»çµã¿ã§ããæåŸã®ãããç¡ããšãYouTubeãåçããã ãã§CPUãåžããŸãã
ãããŠããã®æ§æã§åããã¡ã°ãåŒã£ããã£ãã®ãããã§ãã
environment.variables = {
HSA_OVERRIDE_GFX_VERSION = "11.0.1";
RUSTICL_ENABLE = "radeonsi";
TERMINAL = "ghostty";
};
ããŒã«ã«ã§AIãåãã話ã¯ããããŠãNVIDIAã®CUDAãåæã«èªãããŸããåã®å®æ©ã¯Radeonãªã®ã§ããã®åæã«ã¯ä¹ããŸããã代ããã«äœ¿ãã®ãAMDåŽã®ROCmãšããä»çµã¿ã§ãã
åã®RX 7800 XTã¯ãå éšçã«ã¯ gfx1101 ãšããåçªã§èªèãããŸãïŒå®æ©ã§ç¢ºèªããŸããïŒãROCmã¯å¯Ÿå¿GPUã®äžèЧãæã£ãŠããŠãããã«èŒã£ãŠããªãåçªã ãšåäœãã®ãã®ãæåŠããŸããHSA_OVERRIDE_GFX_VERSION = "11.0.1" ã¯ããã®GPUã 11.0.1 ãšããŠæ±ã£ãŠããããšããç³åã§ãèŠããã«åä»ã§éåæããããªãããã®èº«å蚌æã§ããgfx1101 ãš 11.0.1 ã察å¿ããŠããããšããèŠãæ¹ããããšåããããããšæããŸããRadeonç°å¢ã§ããŒã«ã«AIãè§ŠãããšããŠæåã«è©°ãŸãã®ããã ãããããã§ãã
RUSTICL_ENABLE = "radeonsi" ã¯ãOpenCLïŒGPUãèšç®ã«äœ¿ãä»çµã¿ïŒã®æ°ããå®è£ ãAMDåãã«æå¹åããæå®ã«ãªããŸãã
GPUãè§Šãããã®éå ·ç«ãŠ
services.lact.enable = true;
LACTã¯ãAMDã®GPUã®ã¯ããã¯ã»é»åã»ãã¡ã³ãã°ã©ãã£ã«ã«ã«èª¿æŽã§ããããŒã«ã§ããããã»ã©ã® ppfeaturemask=0xffffffff ã§å°å°ãéããŠããã®ã§ãããã§å®éã«é»åäžéãäžãããããã¡ã³ã«ãŒããæãããã§ããŸããå€å Žã«ãæ§èœã1å²èœãšããŠãéãããšæž©åºŠãåãããšãã£ã調æŽããGUIã§å®çµããŸãã
ããã±ãŒãžåŽã«ããGPUé¢é£ãåãã«å ¥ããŠããŸããamdgpu_topïŒè² è·ããªã¢ã«ã¿ã€ã ã§èŠãïŒãradeon-profileãradeontoolsãamdctlããã㊠rocmPackages äžåŒãmicrocode-amd ãš amd-ucodegen ã¯CPUã®äžå ·åä¿®æ£ãåœãŠãããã®ãã®ã§ãã
hardware.rasdaemon.enable = true;
hardware.rasdaemon.record = true;
ããã¯å°å³ã§ãããåããã£ããæ°ã«å ¥ã£ãŠããèšå®ã§ããrasdaemonã¯ãã¡ã¢ãªãCPUã§èµ·ããèšæ£å¯èœãªãšã©ãŒãèšé²ãç¶ããçªäººã«ããããŸããèªäœPCã§ãããŸã«èœã¡ããã®åå ãã¡ã¢ãªãªã®ãä»ãªã®ããåãåãããšãããã®èšé²ããããã©ããã§èª¿æ»ã®æéããŸãã§éããŸããäŒç€Ÿã§æ©åšã®æ éå ±åãåããç«å Žããã£ãŠãããšããã°ãåã£ãŠããªãæ©æ¢°ã®åå ç©¶æãã©ãã ãçµ¶æçãã¯èº«ã«æã¿ãŠããŸãã
黿ºââ3ã€ã®ç®¡çãåã£ãŠãåžžæå šéãã«åã
powerManagement.cpuFreqGovernor = "performance";
services.auto-cpufreq.enable = false;
services.power-profiles-daemon.enable = false;
ããã¯ãåãéå»ã«æžããèšäºã®çãåããã«ãªãéšåã§ãã
ä»¥å æ¯æ¥äœ¿çšããŠãã"ã¡ãã£ãš"ãã€ããŒãªLinuxã¢ããªã±ãŒã·ã§ã³4éžãGhosttyã»auto-cpufreqã»GPU Screen Recorderã»Librepods ãšããèšäºã§ãåã¯auto-cpufreqãæšããŠããŸãããCPUã®åšæ³¢æ°ãç¶æ³ã«å¿ããŠèªå調æŽããŠãããããŒã«ã§ãããšãããä»ã®æ§æã§ã¯ãæç€ºçã«ãªãã«ããŠããŸãã
çç±ã¯åçŽã§ããã®æ©äœããã¹ã¯ãããã ããã§ããããããªãŒé§åæéã1åã§ãå»¶ã°ãããããŒãPCãªãèªå調æŽã«äŸ¡å€ããããŸãããã³ã³ã»ã³ãã«æ¿ãã£ã±ãªãã®ãã¹ã¯ãããã§ã¯ãåšæ³¢æ°ãäžãäžããã倿ãã®ãã®ãé å»¶ã«ãªããŸããperformance ã¯ãåžžã«äžéã§åãããšããæå®ã§ãè¿·ãããªãã»ããéãããšããå²ãåãã§ãã
power-profiles-daemon ãåã圹ç®ã®å¥å®è£ ãªã®ã§ããã¡ããåã£ãŠãããŸãããã®æã®ããŒã«ã¯è€æ°åãããšäºãã«èšå®ãäžæžããåã£ãŠãã©ããå¹ããŠããã®ãåãããªããªãã®ãå®çªã®äºæ ã§ãã1ã€ã«çµãããšããã®ãããã§ã®æææ±ºå®ã«ãªããŸãã
ãªããæã¡åºãçšã®ããŒãPCã¯å¥ã®èšå®ã§éçšããŠããã®ã§ããã®èšäºãééã£ãŠããããã§ã¯ãããŸãããåã人éã®ç°å¢ã§ããæ©äœãéãã°æ£è§£ãå転ãããšãã話ã§ãã
åšèŸºæ©åšââLogicoolãšèªäœPCã®å®å
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
services.ratbagd.enable = true;
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = true;
services.blueman.enable = true;
åã®ããŠã¹ã¯Logicool MX MASTER 3SãããŒããŒãã¯PEBBLE KEYS 2 K380sã§ãæ°ã¥ãã°Logicoolçãããªãé«ãæºã«ãªã£ãŠããŸããhardware.logitech.wireless ã¯ãUnifyingã¬ã·ãŒããŒã§è€æ°ã®æ©åšã1ã€ã®USBããŒãã«ãŸãšããããã®å¯Ÿå¿ã§ããenableGraphical ãä»ãããšãSolaarãšãã管çç»é¢ãã黿± æ®éããã¢ãªã³ã°ãèŠãããããã«ãªããŸãã
ratbagd ãšãããã±ãŒãžåŽã® piper / libratbag ã¯ãããŠã¹ã®DPIããã¿ã³å²ãåœãŠãLinuxåŽããæžãæããããã®çµã§ããã¡ãŒã«ãŒè£œã®èšå®ãœããã¯ãããŠãWindowså°çšãªã®ã§ãLinuxã§ã¯ãã®ç³»çµ±ã«é ŒããŸãã
Bluetoothã¯ãæšæºã®ã¹ã€ããã«å ããŠ3è¡ãããã®ãŸãŸéããå°ã€ãã§å ¥ã£ãŠããŸãã
hardware.bluetooth.settings.General.Experimental = true;
hardware.bluetooth.settings.General.FastConnectable = true;
hardware.bluetooth.settings.Policy.AutoEnable = true;
Experimental ã¯é»æ± æ®éã®è¡šç€ºãªã©ã®æ°ããæ©èœãéããæå®ãFastConnectable ã¯åæ¥ç¶ãéããã代ããã«é»åãå°ãå€ã䜿ãæå®ãAutoEnable ã¯èµ·åæã«ãã¢ãªã³ã°æžã¿ã®æ©åšãžèªåã§ã€ãªãæå®ã§ããã€ã€ãã³ã¯AirPods 4ã䜿ã£ãŠããã®ã§ããã®3ã€ãæã£ãŠãããšæºã«åº§ã£ãç¬éã«ã€ãªãããŸãã
ããã±ãŒãžã«ã¯ librepods ãå ¥ããŠããŸããããã¯Linuxã§AirPodsã®ãã€ãºãã£ã³ã»ãªã³ã°åãæ¿ããªã©ãæ±ãããã®ãã®ã§ãAppleã®OS以å€ã§ã¯è«Šããã¡ãªæ©èœãåãæ»ãããŒã«ã§ãã
æ¥æ¬èªãšãããLinuxæå€§ã®é¢é
Linuxã§æ¥æ¬èªãæãŠãªããã²ãŒã ã®æåãå šéšåè§ã«ãªãããã®2ã€ã¯ãLinuxã䜿ã£ãŠãã4幎éã§åããã¡ã°ãå€ãèžãã ãã©ãã«ã§ãã
æ¥æ¬èªç°å¢ã¯ãå®ã¯3ã€ã®å¥ã ã®å±€ã§ã§ããŠããŸãããããåããŠçè§£ãããšãè©°ãŸã£ããšãã®åå ç©¶æãäžæ°ã«æ¥œã«ãªããŸãã
第1å±€ïŒãã±ãŒã«ïŒè¡šç€ºãšæžåŒïŒ
i18n.defaultLocale = "ja_JP.UTF-8";
i18n.extraLocaleSettings = {
LC_TIME = "ja_JP.UTF-8";
LC_MONETARY = "ja_JP.UTF-8";
LC_NUMERIC = "ja_JP.UTF-8";
LC_PAPER = "ja_JP.UTF-8";
# âŠã»ã5é
ç®
};
ãã±ãŒã«ã¯ãã©ã®åœã®èšèªãšæžåŒã§ãã®ã衚瀺ããããã®èšå®ã§ããã¡ãã¥ãŒãæ¥æ¬èªã«ãªãã ãã§ãªããæ¥ä»ã®äžŠã³é ãé貚èšå·ããã㊠LC_PAPER ã«è³ã£ãŠã¯å°å·ã®çšçŽãµã€ãºãA4ã«ãªãïŒã¢ã¡ãªã«ã®ã¬ã¿ãŒãµã€ãºã§ã¯ãªãïŒãšããèšå®ãŸã§å«ã¿ãŸãã9é ç®ãåå¥ã«äžŠã¹ãŠããã®ã¯ããè¡šç€ºã¯æ¥æ¬èªã ãã©æ°å€ã®åºåãã¯è±èªåŒããšãã£ãæ··åšãé¿ããããã§ãã
time.timeZone = "Asia/Tokyo";
networking.timeServers = [ "ntp.nict.jp" ];
æå»ã¯æ±äº¬ãæå»åããã®åç §å ã¯æ å ±éä¿¡ç ç©¶æ©æ§ïŒNICTïŒã®å ¬éãµãŒããŒã«ããŠããŸããæ¥æ¬åœå ãã䜿ããªããæµ·å€ã®æšæºãµãŒããŒããçŽ çŽã«è¿ããŠéãã§ãã
第2å±€ïŒå ¥åã¡ãœããïŒæ¥æ¬èªãæã€)
i18n.inputMethod.type = "fcitx5";
i18n.inputMethod.enable = true;
i18n.inputMethod.fcitx5.addons = [ pkgs.fcitx5-mozc pkgs.fcitx5-gtk ];
i18n.inputMethod.fcitx5.waylandFrontend = false;
environment.sessionVariables = {
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
};
fcitx5ãå ¥åã®ä»çµã¿ã®æ¬äœãmozcãããªæŒ¢å倿ã®ãšã³ãžã³ïŒGoogleæ¥æ¬èªå ¥åã®ãªãŒãã³ãœãŒã¹çã«ããããã®ïŒã§ãããã®2ã€ãå ¥ããã ãã§ã¯è¶³ããŸããã
äžã®3ã€ã®ç°å¢å€æ°ããã¢ããªã«å¯ŸããŠãæ¥æ¬èªãæã€ãšãã¯ãã®çªå£ã䜿ãããšæ¡å ããçæ¿ã®åœ¹å²ãããŸããGTK_IM_MODULE ã¯GTKç³»ã®ã¢ããªåããQT_IM_MODULE ã¯Qtç³»ã®ã¢ããªåããXMODIFIERS ã¯ãã以å€åããLinuxã®ã¢ããªã¯å€§ãã2ã€ã®æµæŽŸã«åãããŠããŠãããããå¥ã®çæ¿ãèŠã«è¡ãã®ã§ãäž¡æ¹ç«ãŠãå¿ èŠããããŸããããã©ãŠã¶ã§ã¯æ¥æ¬èªãæãŠãã®ã«ãç¹å®ã®ã¢ããªã ãæãŠãªãããšããçŸè±¡ã¯ãã»ãŒãã®çæ¿ã®ç«ãŠå¿ãã§ãã
waylandFrontend = false ã¯ãåã®ç°å¢ãX11ãšããåŸæ¥æ¹åŒã®ãã¹ã¯ãããã§åããŠããããšã®è¡šæã§ããæ°ããWaylandåãã®å ¥ãå£ãåã£ãŠãX11åŽã®å ¥ãå£ã䜿ãããŠããŸãã
第3å±€ïŒãã©ã³ã
fonts.fontconfig.enable = true;
fonts.fontDir.enable = true;
fonts.fontconfig.defaultFonts.monospace = [ "Migu 1M" ];
fonts.fontconfig.defaultFonts.sansSerif = [ "Noto Sans CJK JP" ];
fonts.fontconfig.defaultFonts.serif = [ "Noto Sans CJK JP" ];
fonts.packages = with pkgs; [ migu noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-color-emoji ipafont ];
ãã©ã³ãã¯ãå ¥ããããšã䜿ãããããå¥ã®äœæ¥ã§ããfonts.packages ãå ¥ããã»ããdefaultFonts ã䜿ãããã»ãã«ããããŸããæ¥æ¬èªãåè§ïŒããããè±è ïŒã«ãªãã®ã¯ããããŠãå ¥ããã®ã«æåããŠããªãããããããå ¥ã£ãŠããªããã®ã©ã¡ããã§ãã
åã¯çå¹ ã«Migu 1Mãæå®ããŠããŸããããã°ã©ãã³ã°çšã«èªã¿ããããæ¥æ¬èªãšè±æ°åã®å¹ ããããã«æãã®ãçç±ã§ããnoto-fonts-color-emoji ã¯çµµæåãipafont ã¯PDFãå€ãææžã®äºæçšã«å ¥ããŠãããŸãã
æ£çŽã«æžããšãserifïŒææäœïŒã«ããŽã·ãã¯äœã® Noto Sans ãæå®ããŠããã®ã§ãææãåºãã¹ãå Žé¢ã§ããŽã·ãã¯ãåºãŸããå®å®³ãæããŠããªãã®ã§æŸçœ®ããŠããŸããããããããææžããŠãã®ãŸãŸã®è¡ãã382è¡ã®äžã«ã¯ç¢ºå®ã«æ··ãã£ãŠããŸããèšå®ãã¡ã€ã«ãå šéšèŠããç¶æ ãšããã®ã¯ãããããæ¥ããããè¡ãäžç·ã«èŠããŠããŸããšããããšã§ããããŸãã
ããŒããŒãé å
services.xserver.xkb.layout = "jp";
services.xserver.xkb.model = "jp106";
æ¥æ¬èªããŒããŒãã®é åæå®ã§ãããããè±èªé åã®ãŸãŸã ãšãèšå·ã®äœçœ®ããã¹ãŠãºã¬ãŸãã
ãã¹ã¯ãããã®å±€ââXFCEãã©ãçµãã§ããã
黿ºãã¿ã³ãæŒããŠãããã¹ã¯ããããåºããŸã§ã®æ°ç§ã«ãããã€ã®èšå®ãåããŠããã§ããããã
æµããé çªã«è¿œã£ãŠã¿ãŸãã
services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.displayManager.autoLogin.enable = true;
services.displayManager.autoLogin.user = "takeshi";
services.displayManager.defaultSession = "xfce";
services.xserver.desktopManager.xfce.enable = true;
services.xserver.desktopManager.xterm.enable = false;
xserver ãç»é¢è¡šç€ºã®åå°ãlightdm ããã°ã€ã³ç»é¢ãautoLogin ã¯ãã®ãã°ã€ã³ç»é¢ãçŽ éãããèšå®ã§ããèªå® ã®ãªãã³ã°ã«çœ®ããå人ã®ãã¹ã¯ããããªã®ã§ã黿ºãå ¥ãããå³ãã¹ã¯ããããåºãããã«ããŠããŸããåœç¶ãªãããæã¡åºãæ©äœãä»äººãè§Šãæ©äœã§ã¯å ¥ããŠã¯ãããªãèšå®ã§ãã
xterm.enable = false ã¯ãæšæºã§ãã£ã€ããŠããå€å žçãªã¿ãŒããã«ãå€ãæå®ã«ãªããŸãããŽããæ®ããªãã®ãæ°æã¡ããããšããã ãã®çç±ã§ãã
ãã¹ã¯ãããç°å¢ã«XFCEãéžãã§ããã®ã¯ã軜ããŠãå£ãã«ãããŠãéšåã奜ãã«è¶³ããããã§ãã以åã¯COSMICãšããæ°ããç°å¢ã䜿ã£ãŠããææããããŸããã
ããã«ãšã©ã³ãã£ãŒ
XFCEã®ããã«ïŒç»é¢äžäžã®ããŒïŒã«ããã©ã°ã€ã³ãããªãè¶³ããŠããŸãã
xfce4-cpugraph-plugin # CPU䜿çšçã®ã°ã©ã
xfce4-systemload-plugin # è² è·ãšã¡ã¢ãª
xfce4-fsguard-plugin # ãã£ã¹ã¯æ®éã®èŠåŒµã
xfce4-genmon-plugin # 奜ããªã³ãã³ãã®çµæãããã«ã«åºã
xfce4-weather-plugin # 倩æ°
xfce4-pulseaudio-plugin # é³é
xfce4-xkb-plugin # ããŒããŒãé
åã®è¡šç€º
xfce4-whiskermenu-plugin # æ€çŽ¢ã§ããã¹ã¿ãŒãã¡ãã¥ãŒ
xfce4-screenshooter # ã¹ã¯ãªãŒã³ã·ã§ãã
xfce4-appfinder / xfdashboard / xfce4-dict
genmon ãå人çãªåœããã§ãä»»æã®ã³ãã³ãã®åºåãããã«ã«è¡šç€ºã§ããŸããGPU枩床ã§ããæªèªä»¶æ°ã§ããæžãããã«ãã£ãŠã¯äœã§ãåºããŸããfsguard ã¯æ®éãæžããšèŠåãåºããŠãããã®ã§ã175GBãé£ã£ãŠãããã®æ©äœã«ã¯å®å©ããããŸãã
services.xserver.displayManager.sessionCommands = pkgs.plank + "/bin/plank &\n";
ããã¯ãã°ã€ã³ãããplankïŒDockããŒïŒãèµ·åãããšããæå®ã§ããmacOSã®äžã«ãããããªã¢ã€ã³ã³ã®äžŠã³ãè¶³ããŠããŸãã& ãä»ããŠè£ã§èµ·åãããæ¹è¡ãŸã§å«ããŠæååã§æžããŠãããããããããã«ããåãã°ãããã§æžããè¡ã§ãã
copyq ã¯ã¯ãªããããŒãã®å±¥æŽç®¡çãkdePackages.ark ã¯æžåº«ã®å±éãkdePackages.discover ã¯ã¢ããªç®¡çã®ç»é¢ã§ãã
ãã¡ã€ã«ãããŒãžã£ãŸãã
programs.thunar.enable = true;
programs.thunar.plugins = [
pkgs.thunar-vcs-plugin # Gitçã®ç¶æ
衚瀺
pkgs.thunar-shares-plugin # å
±æãã©ã«ãèšå®
pkgs.thunar-archive-plugin # å³ã¯ãªãã¯ã§å§çž®ã»å±é
pkgs.thunar-dropbox-plugin # Dropbox飿º
pkgs.thunar-media-tags-plugin # 鳿¥œãã¡ã€ã«ã®ã¿ã°ç·šé
pkgs.thunar-volman # USBã¡ã¢ãªã®èªåèªè
];
services.tumbler.enable = true;
services.gvfs.enable = true;
programs.fuse.userAllowOther = true;
xdg.mime.defaultApplications = { "inode/directory" = [ "thunar.desktop" ];};
Thunaræ¬äœã ãã§ã¯ãUSBã¡ã¢ãªãæ¿ããŠãäœãèµ·ããããµã ãã€ã«ãåºãŸãããthunar-volman ãèªåèªèããtumbler ããµã ãã€ã«çæãæ åœããŸããgvfs ã¯ãããã¯ãŒã¯äžã®å ±æãã©ã«ããã¹ããããã¡ã€ã«ãããŒãžã£ããéãããã®ä»çµã¿ã§ãfuse.userAllowOther ã¯ããŠã³ããããã®ãä»ã®ããã°ã©ã ãããèŠããããã«ããèš±å¯ã§ãã
æåŸã® xdg.mime ã¯ããã©ã«ããéããšèšããããThunarã䜿ãããšããæå®ã§ããããç¡ããšå¥ã®ã¢ããªãå²ã蟌ãã§ããããšããããŸããããã±ãŒãžåŽã«ã¯ catfishïŒãã¡ã€ã«æ€çŽ¢ïŒãgigoloïŒãããã¯ãŒã¯ãã©ã€ãæ¥ç¶ïŒãmousepadïŒããã¹ãïŒãristrettoïŒç»åïŒãparoleïŒåç»ïŒãorageïŒã«ã¬ã³ããŒïŒãxfburnïŒãã£ã¹ã¯æžã蟌ã¿ïŒãšãXFCEçŽæ£ã®å°éå ·ãäžéãå ¥ããŠããŸãã
èŠãç®
kora-icon-theme # ã¢ã€ã³ã³
nordic # æãéç³»ã®ããŒã
whitesur-gtk-theme # macOS颚ã®ããŒã
ãã®ãããã¯å®å šã«è¶£å³ã§ãããã ããŒããããã±ãŒãžãšããŠå®£èšã§ãããšããç¹ã¯ãNixOSããããåºããšããã ãšæã£ãŠããŸããå¥ã®PCã«ç§»ã£ãŠããåãèŠãç®ãåãæé ã§åçŸãããŸãã
ã²ãŒã ã®å±€ââSteamãæ¥æ¬èªã§å¿«é©ã«åãã
Steamã®èšå®ã¯ã382è¡ã®äžã§ãã¡ã°ãé·ã1è¡ã«ãªã£ãŠããŸãã
programs.steam.enable = true;
programs.steam.package = pkgs.steam.override {
extraEnv = {
AMD_VULKAN_ICD = "RADV";
FONTCONFIG_PATH = "/etc/fonts";
LANG = "ja_JP.UTF-8";
LC_ALL = "ja_JP.UTF-8";
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
XCURSOR_THEME = "Adwaita";
};
extraPkgs = (pkgs: with pkgs; [
migu noto-fonts-cjk-sans gnome-themes-extra adwaita-icon-theme
mangohud gamemode gamescope fcitx5 fcitx5-gtk fcitx5-mozc kdePackages.fcitx5-qt
]);
};
ãªãSteamã«ã ããæ¥æ¬èªèšå®ãããäžåºŠæž¡ãã®ã
ããã»ã©æ¥æ¬èªå ¥åã®çæ¿ãç«ãŠãã¯ããªã®ã«ãããã§ããäžåºŠåãããšãããŠããŸããçç±ã¯ãSteamãLinuxäžã§ååç¬ç«ããç®±ã®äžã§åããŠããããã§ãã
Steamã¯ãã©ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ãåãããã«åããããèªåã®å®è¡ç°å¢ãæ±ããŠããŸãããããã§äºææ§ã¯é«ãã®ã§ããã代ããã«ã·ã¹ãã åŽã®ãã©ã³ããæ¥æ¬èªå ¥åã®èšå®ãããã®ç®±ã®äžãŸã§èªåã§ã¯å±ããŸãããã ããç®±ã®äžã«ããã©ã³ãïŒMiguãNotoïŒãå ¥ãçŽããæ¥æ¬èªå ¥åïŒfcitx5äžåŒïŒãå ¥ãçŽããç°å¢å€æ°ã§çæ¿ãç«ãŠçŽããŠããŸãã
ãSteamã®æ¥æ¬èªãå šéšè±è ã«ãªãããSteamã®ãã£ããã§æ¥æ¬èªãæãŠãªãããšããLinuxã§ã®å®çªãã©ãã«ã¯ããã®æ§é ãç¥ã£ãŠããã°åå ãäžçºã§åãããŸãã
AMD_VULKAN_ICD = "RADV" ã¯ãAMDã®2çš®é¡ããVulkanãã©ã€ãã®ãã¡ããªãŒãã³ãœãŒã¹çã®RADVã䜿ããšããæåã§ããã²ãŒã çšéã§ã¯äžè¬ã«ãã¡ããéããå®å®ããŠããŸãã
æ§èœãŸããã®éå ·
programs.steam.extraCompatPackages = [ pkgs.proton-ge-bin ];
programs.steam.protontricks.enable = true;
programs.gamescope.enable = true;
programs.gamescope.capSysNice = true;
programs.gamemode.enable = true;
programs.steam.fontPackages = [ pkgs.migu ];
hardware.steam-hardware.enable = true;
Protonã¯ãWindowsã®ã²ãŒã ãLinuxã§åããããã®äºæã¬ã€ã€ãŒã§ããproton-ge-bin ã¯ãã®æå¿æ¹é çã§ãå ¬åŒçããŸã 察å¿ããŠããªãã¿ã€ãã«ãåãããšããããŸããprotontricks ã¯ãã²ãŒã ããšã«å¿ èŠãªè¿œå éšåãå ¥ããããã®éå ·ã§ãã
gamescopeã¯ãã²ãŒã ãå°çšã®å°ããªç»é¢ç°å¢ã®äžã§åããä»çµã¿ã§ãè§£å床ã®å€æããã¬ãŒã ã¬ãŒãäžéãã²ãŒã åŽã®èšå®ã«äŸåããå¶åŸ¡ã§ããŸããcapSysNice ã¯ãgamescopeã«åŠçã®åªå 床ãäžããæš©éãäžããæå®ã§ãã
gamemodeã¯ãã²ãŒã ãèµ·åããŠããéã ãå šäœã®èšå®ãåãæ¿ããä»çµã¿ã§ã现ãã調æŽãå ¥ã£ãŠããŸãã
programs.gamemode.settings.general.renice = 10;
programs.gamemode.settings.general.ioprio = 0;
programs.gamemode.settings.general.softrealtime = "auto";
programs.gamemode.settings.general.inhibit_screensaver = 1;
programs.gamemode.settings.gpu.apply_gpu_optimisations = "accept-responsibility";
programs.gamemode.settings.gpu.gpu_device = 1;
programs.gamemode.settings.gpu.amd_performance_level = "high";
renice ã¯CPUã®åªå 床ãäžãããioprio ã¯ãã£ã¹ã¯èªã¿æžãã®åªå 床ãæäžäœã«ãããsoftrealtime ã¯æºãªã¢ã«ã¿ã€ã çãªæ±ãã«ãããinhibit_screensaver ã¯ã³ã³ãããŒã©ãŒã§éãã§ããæäžã«ç»é¢ãæ¶ããã®ãé²ãèšå®ã§ããGPUåŽã¯ãamd_performance_level = "high" ã§ã²ãŒã äžã ãã¯ããã¯ãé«ã匵ãä»ãããŠããŸãã
apply_gpu_optimisations = "accept-responsibility" ãšããå€ãé¢çœããŠãçŽèš³ãããšã責任ãåŒãåãããã§ããGPUã®åäœèšå®ãåæã«å€ããã®ã¯æ¬æ¥ãªã¹ã¯ãããã®ã§ããã®æååãèªåã§æžãããšãåæã®ä»£ããã«ãªã£ãŠããŸããèšå®ãã¡ã€ã«ãåææžãå ŒããŠããããã§ãã
hardware.steam-hardware ã¯Steamã³ã³ãããŒã©ãŒãªã©ãèªèãããããã®èšå®ãmangohud ãš goverlay ã¯ã²ãŒã ç»é¢ã«ãã¬ãŒã ã¬ãŒããæž©åºŠãéããŠè¡šç€ºããããŒã«ãšãã®èšå®ç»é¢ãlsfg-vk ã¯ãã¬ãŒã çæãåŸä»ãããä»çµã¿ãprotonup-qt ã¯Protonã®çã管çããç»é¢ãsteam-run ã¯Steamç°å¢ãåããŠä»ã®ããã°ã©ã ãåããéå ·ã§ãã
èªå® ã®å€ããããã®PCã§éã¶
services.sunshine.enable = true;
services.sunshine.autoStart = true;
services.sunshine.capSysAdmin = true;
services.sunshine.openFirewall = true;
programs.steam.remotePlay.openFirewall = true;
programs.steam.localNetworkGameTransfers.openFirewall = true;
Sunshineã¯ããã®PCã®ç»é¢ãšé³ãé ä¿¡ããæå ã®æäœãéãè¿ããŠãããããã®ãµãŒããŒã§ããåãåãåŽã®ã¢ããªãããã±ãŒãžã«ãã moonlight-qt ã«ãªããŸãã
åã¯ROG Allyã«SteamOSãå ¥ããŠäœ¿ã£ãŠããã®ã§ããã€ãã³ã°ããŒãã«ã§ãã³ããã«ãæ©ãæã¡ãªãããå®éã«åããŠããã®ã¯ãªãã³ã°ã®Radeonãšããéã³æ¹ãã§ããŸããããšããšSteam Deckã䜿ã£ãŠããã®ã§ãããã¹ããã¯ãè¶³ããã«ææŸããŠROG Allyãžä¹ãæããŸããããã®å€æããã®æ§æã§æŽ»ããŠãã圢ã§ãã
capSysAdmin ã¯Sunshineãç»é¢å šäœãåã蟌ãããã«å¿ èŠãªæš©éãopenFirewall ã¯å¿ èŠãªããŒããèªåã§éããæå®ã«ãªããŸããlocalNetworkGameTransfers ã¯ãåãå®¶ã®PCå士ã§ã²ãŒã ã®ããŒã¿ãçŽæ¥ã³ããŒããæ©èœã§ã100GBçŽã®ã¿ã€ãã«ãåããŠã³ããŒãããã«æžã¿ãŸãã
ãããã¯ãŒã¯ã®å±€ââå€ãšäžãã©ãã€ãªãã
èªå® ã®PCãå€ããè§Šããããã«ããã®ã¯ã䟿å©ããšå±ãªããçŽçµããéšåã§ãã
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [
53317 # LocalSend
2049 # NFSïŒãã¡ã€ã«å
±æïŒ
8080
config.services.tailscale.port
];
networking.firewall.trustedInterfaces = [ "tailscale0" ];
ãŸããã¡ã€ã¢ãŠã©ãŒã«ã¯æå¹ã«ããããã§ãå¿ èŠãªå ¥å£ã ããçªå·ã§éããŠããŸãã53317ã¯LocalSendïŒã¹ãããšPCã®éã§ãã¡ã€ã«ãéãåãã¢ããªïŒã䜿ãçªå·ã§ãå®éã«ç¢ºèªãããä»ãã®ç¬éããã®çªå·ã§åŸ ã¡åããŠããŸããã2049ã¯NFSãšããæãããããã¡ã€ã«å ±æã®çªå·ã§ãã
é¢çœãã®ã¯4çªç®ã§ãconfig.services.tailscale.port ãšèšå®ãã¡ã€ã«èªèº«ãåç §ããŠããŸããããŒãçªå·ãæ°åã§æžãåãã®ã§ã¯ãªãããTailscaleã䜿ãçªå·ãããã®ãšãã®èšå®ããåã£ãŠããããšæžããŠããããã§ããèšå®ãã¡ã€ã«ãããã°ã©ãã³ã°èšèªã§ããå©ç¹ãããã¡ã°ãçŽ çŽã«åºãŠããè¡ã ãšæããŸããæ°åã2ç®æã«æžããŠãºã¬ãããšããäºæ ãæ§é çã«èµ·ããŸããã
services.tailscale.enable = true;
services.tailscale.extraUpFlags = [ "--ssh" "--operator=takeshi" ];
Tailscaleã¯ãèªåã®æã¡ç©å士ã ããã€ãªãå°ããªå°çšç·ã®ãããªãµãŒãã¹ã§ããã«ãŒã¿ãŒã®ããŒããå€åãã«éããªããŠããèªå® ã®PCãšããŒãPCãšã¹ãããåããããã¯ãŒã¯ã«ãããã®ããã«éä¿¡ã§ããŸãã--ssh ã¯Tailscaleçµç±ã®SSHæ¥ç¶ãèš±å¯ããæå®ã--operator=takeshi ã¯ç®¡çè æš©éãªãã§èªåã®ãŠãŒã¶ãŒããTailscaleãæäœã§ããããã«ããæå®ã§ãã
trustedInterfaces = [ "tailscale0" ] ãå¹ããŠããŠãTailscaleçµç±ã§å ¥ã£ãŠããéä¿¡ã«ã€ããŠã¯ããã¡ã€ã¢ãŠã©ãŒã«ã®çªå·ãã§ãã¯ãå é€ããŠããŸãããå€ã®äžçã«ã¯åºãéããããèªåã®æã¡ç©å士ã¯çŽ éãããšããèšèšã§ãã
services.openssh.enable = true;
services.openssh.settings.Macs = [
"hmac-sha2-512-etm@openssh.com" "hmac-sha2-256-etm@openssh.com"
"umac-128-etm@openssh.com" "hmac-sha2-512" "hmac-sha2-256"
];
SSHã¯æå¹ã«ããããã§ãéä¿¡ã®æ¹ããæ€åºã«äœ¿ãæ¹åŒãã匷ããã®ã ãã«çµã£ãŠæç€ºããŠããŸããæšæºã®ãŸãŸã§ãåŒ±ãæ¹åŒã¯ããããå€ãããŠããŸãããããããŠæžããŠãããšäœãèš±ããŠããã®ããèšå®ãã¡ã€ã«ãèªãã ãã§åãããŸããããã¯ç·åè·ãšããŠç€Ÿå ã·ã¹ãã ã®èšå®ãçºããŠããçµéšãå¹ããŠããŠããå®å šåŽã®æ¢å®ã«é Œãããããæç€ºããŠèšé²ã«æ®ããã»ãããåŸãã人ã«èª¬æã§ãããšæã£ãŠããŸãã
programs.localsend.enable = true;
programs.localsend.openFirewall = true;
programs.kdeconnect.enable = true;
systemd.services.ModemManager.enable = false;
systemd.services.NetworkManager-wait-online.enable = true;
LocalSendã¯AirDropã®ãããªè¿è·é¢ãã¡ã€ã«éä¿¡ãKDE Connectã¯ã¹ãããšã®éç¥é£æºããªã¢ãŒãæäœã§ãããã®2ã€ããããããã§ãPixel 10aãšãã®PCã®è¡ãæ¥ã¯ããªãå¿«é©ã«ãªããŸããã
ModemManager ã¯æºåž¯åç·ã®ã¢ãã ãæ±ããµãŒãã¹ã§ããã®ãã¹ã¯ãããã«ã¯ååšããªãã®ã§æç€ºçã«åã£ãŠããŸããNetworkManager-wait-online ã¯éã«ããããã¯ãŒã¯ãã€ãªãããŸã§èµ·ååŠçãåŸ ãããæå®ã§ããèµ·åçŽåŸã«ãããã¯ãŒã¯ãå¿ èŠãšãããµãŒãã¹ã空æ¯ãããã®ãé²ããŸãã
ä»®æ³åã®å±€ââ1å°ã®äžã«å¥ã®PCãç«ãŠã
ãããã¯Windowsã§ããåããŸããããä»äºã§ãè¶£å³ã§ãã幎ã«äœåºŠããã®å£ã«ã¶ã€ãããŸãã
ãã®ãã³ã«å¥ã®PCãåŒã£åŒµãåºãã®ã¯é¢åãªã®ã§ããã®æ©äœã®äžã«ä»®æ³ã®PCãç«ãŠãããããã«ããŠãããŸãã
virtualisation.libvirtd.enable = true;
virtualisation.libvirtd.qemu.package = pkgs.qemu_kvm;
virtualisation.libvirtd.qemu.swtpm.enable = true;
virtualisation.libvirtd.qemu.vhostUserPackages = [ pkgs.virtiofsd ];
virtualisation.spiceUSBRedirection.enable = true;
programs.virt-manager.enable = true;
libvirtd ãš qemu_kvm ãä»®æ³ãã·ã³ã®æ¬äœãvirt-manager ããããæäœããç»é¢ã§ããããã»ã© hardware-configuration.nix ã«ãã£ã kvm-amd ããããã§å¹ããŠããŸãã
swtpm ãå°å³ã«éèŠã§ãããã¯TPM 2.0ãšããã»ãã¥ãªãã£ãããããœãããŠã§ã¢ã§åçŸããä»çµã¿ã§ããWindows 11ã¯TPM 2.0ãèŠæ±ããã®ã§ããããç¡ããšä»®æ³ãã·ã³ã«Windows 11ãã€ã³ã¹ããŒã«ã§ããŸãããvirtiofsd ã¯ãã¹ããšã²ã¹ãã§ãã©ã«ããé«éã«å ±æããä»çµã¿ãspiceUSBRedirection ã¯USBæ©åšãä»®æ³ãã·ã³åŽãžå·®ãèŸŒãæ©èœã§ãã
systemd.tmpfiles.rules = [
"d /usr/share/OVMF 0755 root root - -"
("L+ /usr/share/OVMF/OVMF_CODE_4M.fd - - - - " + pkgs.OVMF.firmware)
("L+ /usr/share/OVMF/OVMF_CODE.fd - - - - " + pkgs.OVMF.firmware)
];
ããã¯NixOSã®ç¹æ®ããçãå¥ãå Žé¢ãžã®å¯ŸåŠã§ãã
NixOSã§ã¯ãããããããã°ã©ã ã /nix/store ã®äžã®é·ãããã·ã¥ä»ãã®ãã¹ã«çœ®ãããŸãã/usr/share/ ã®ãããªäŒçµ±çãªå Žæã«ã¯ãåºæ¬çã«äœããããŸããããšãããä»®æ³ãã·ã³ã®ç®¡çãœããã¯ãUEFIãã¡ãŒã ãŠã§ã¢ïŒOVMFïŒã /usr/share/OVMF/ ã«ããåæã§æ¢ãã«è¡ããŸãã
ããã§ãã®3è¡ã¯ã/usr/share/OVMF ãšãããã©ã«ããäœããããããå®äœãžã®ã·ã§ãŒãã«ããã匵ã£ãŠããŸããL+ ã¯ãæ¢ã«ãã£ãŠãäžæžãããŠåŒµãçŽãããšããæå³ã§ããä»ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®åžžèãšãNixOSã®æµåã®æ©æž¡ããããŠããããã§ãããããã翻蚳ããå¿ èŠã«ãªãã®ãNixOSã䜿ãäžã§ã®çŸå®çãªã³ã¹ãã«ãªããŸãã
virtualisation.docker.enable = true;
virtualisation.docker.daemon.settings.default-address-pools = [ { base = "172.30.0.0/16"; size = 24; } ];
virtualisation.docker.daemon.settings.experimental = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
Dockerã® default-address-pools ã¯ãã³ã³ããå士ãã€ãªãå éšãããã¯ãŒã¯ã«äœ¿ãã¢ãã¬ã¹ã®ç¯å²ãæå®ãããã®ã§ããæšæºã®ç¯å²ããã®ãŸãŸäœ¿ããšãå€ãå ã®VPNãèªå® ã®ã«ãŒã¿ãŒãšçªå·ãã¶ã€ãã£ãŠãDockerãèµ·åããç¬éã«ç€Ÿå ã·ã¹ãã ãžå±ããªããªãããšããäºæ ãèµ·ããŸããããããã䜿ã£ãŠããªãç¯å²ãžå¯ããŠããããšããäºé²çã§ãã
VirtualBoxãå¥éå ¥ããŠããŠãenableExtensionPack ã§USB 3.0察å¿ãªã©ãè¶³ããŠããŸããlibvirtãšVirtualBoxãäž¡æ¹å ¥ããŠããã®ã¯ãæ±ãããä»®æ³ãã·ã³ã®ã€ã¡ãŒãžåœ¢åŒãéãå Žé¢ãããããã§ãã
programs.nix-ld ãããã®æµãã§èª¬æããŠãããŸãã
programs.nix-ld.enable = true;
ããã¯ãNixOSåãã«ãã«ããããŠããªãããã°ã©ã ãåããããã®ææžæªçœ®ã§ããVS Codeã®æ¡åŒµæ©èœãè£ã§èœãšããŠããããŒã«ãªã©ããæ®éã®Linuxããåæãšãããã€ããªã¯ãã®ãŸãŸã§ã¯åããŸãããnix-ldã¯ãããããããã°ã©ã ãæ¢ãã«è¡ãå Žæã«å¿ èŠãªéšåãçšæããŠãããŸãããããç¥ããªããšãNixOSã§ã¯åããªãããšçµè«ããŠè«Šããã¡ãªå Žé¢ããããªãæãããŸãã
é³ãšæ åã®å±€
ãLinux é³ãåºãªããã§æ€çŽ¢ããåæ°ã¯ããã¶ãæ¥æ¬èªå ¥åã®æ¬¡ã«å€ããšæããŸãã
åå ã®å€§åã¯ãåã圹ç®ã®ä»çµã¿ã2ã€åæã«åãããŠããŸã£ãŠããããšã§ããã ãããã®å±€ã¯ãæå¹ã«ããè¡ãšåãããããåãè¡ããéèŠã«ãªããŸãã
services.pipewire.enable = true;
services.pipewire.alsa.enable = true;
services.pipewire.alsa.support32Bit = true;
services.pipewire.pulse.enable = true;
services.pulseaudio.enable = false;
security.rtkit.enable = true;
PipeWireã¯ãLinuxã®é³ãšæ åã®äº€éæŽçãæ ãæ¯èŒçæ°ããä»çµã¿ã§ãåŸæ¥ã®PulseAudioã眮ãæããŸããã ãã pulseaudio.enable = false ã§å€ãã»ããæç€ºçã«åã£ãŠããŸãããã®2ã€ãåæã«æå¹ã«ãããšé³ãåºãªããªãããšããã®ãããããäºæ ã§ãã
alsa.enable ãš pulse.enable ã¯ãå€ãæ¹åŒãåæã«äœãããã¢ããªã«å¯ŸããŠããã®æ¹åŒã®ãµããããŠåãä»ããäºæã®çªå£ã«ãªããŸããsupport32Bit ã¯32ãããã®ã¢ããªåãã§ããããç¡ããšå€ãã²ãŒã ã ãé³ãåºãªããšããç¶æ ã«ãªããŸãã
security.rtkit ã¯ãPipeWireãé³ã®åŠçã«é«ãåªå 床ãåãããã®èš±å¯ã§ãããããç¡ããšãCPUãå¿ãããšãã«é³ãããããéåããŸãã
programs.obs-studio.enable = true;
environment.systemPackages = with pkgs; [
obs-studio-plugins.wlrobs
obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-vaapi
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-vkcapture
];
programs.gpu-screen-recorder.enable = true;
OBSã¯é ä¿¡ã»é²ç»ã®å®çªãœããã§ãããã©ã°ã€ã³ã§ã¯ãobs-vaapi ãé²ç»ã®ãšã³ã³ãŒããRadeonã«ä»»ãããã®ãobs-vkcapture ãã²ãŒã ç»é¢ãå¹çããåã蟌ããã®ãobs-pipewire-audio-capture ãã¢ããªããšã«é³ãåããŠé²ããã®ãobs-backgroundremoval ãèæ¯ãæ¶ããã®ã«ãªããŸãã
gpu-screen-recorder ã¯ãããã»ã©ã®èšäºã§ã玹ä»ããè² è·ã®è»œãé²ç»ããŒã«ã§ãããã®èšäºã§æãã4æ¬ã®ãã¡ãGhosttyã»GPU Screen Recorderã»Librepodsã®3æ¬ã¯ä»ãçŸåœ¹ã§ãauto-cpufreqã ããæ§æããå€ããããšããç¶æ ã«ãªã£ãŠããŸãã
æ åç·šéãŸãã㯠davinci-resolveãkdePackages.kdenliveãhandbrakeãaudacityãffmpeg-fullãvlcã3D㯠blender ãš freecad ãå ¥ããŠããŠãããã«1è¡ãããŸãã
services.blendfarm.enable = true;
services.blendfarm.blenderPackage = pkgs.blender;
BlendFarmã¯ãBlenderã®ã¬ã³ããªã³ã°ãè€æ°ã®PCã§åæ ããããã®ä»çµã¿ã§ãã1å°ã§æ°æéãããèšç®ããå®¶ã«ããæ©äœã§åããŠåãããã®ãã®ã«ãªããŸãã
AIããŒã«ã®å±€ââèšå®ãã¡ã€ã«ã«å¢ãããæ°ããäœäºº
AIé¢é£ã®ããã±ãŒãžã ãã§ã7é ç®ã䞊ãã§ããŸãã
claude-code
opencode
opencode-desktop
opencode-claude-auth
claude-monitor
lmstudio
(pkgs.callPackage ./pkgs/claude-desktop.nix { })
382è¡ãçºããŠããŠããã¡ã°ãé¡ã¶ããæ°ããã®ããã®äžè§ã§ããæ°å¹Žåã®Linuxç°å¢ã®èšäºãæžããŠããããã«ã¯ãããããååšããŠããªãã£ãçš®é¡ã®ãœããã䞊ãã§ããŸãã
claude-code ã¯ã¿ãŒããã«ã§åãAIã³ãŒãã£ã³ã°æ¯æŽãclaude-monitor ã¯äœ¿çšéãèŠãããŒã«ãopencode ç³»ã¯åçš®ã®å¥å®è£ ã«ãªããŸããlmstudio ã¯AIã¢ãã«ãèªåã®PCã®äžã ãã§åããããã®ã¢ããªã§ãããã»ã©ã®ROCmèšå®ïŒHSA_OVERRIDE_GFX_VERSIONïŒãå¹ããŠããå ãããã§ãããããã«æããããªãæç« ãæ±ããšãã«äœ¿ã£ãŠããŸãã
ãããŠãVS Codeã®æžãæ¹ãå人çã«ãæ°ã«å ¥ãã§ãã
(vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [
ms-ceintl.vscode-language-pack-ja
bbenoist.nix
anthropic.claude-code
];
})
ãšãã£ã¿æ¬äœã ãã§ãªããæ¡åŒµæ©èœãŸã§èšå®ãã¡ã€ã«ã«æžããŠãããŸããæ¥æ¬èªåããã¯ãNixã®æ§æãµããŒããAIæ¯æŽã®3ã€ãããã®äœãå¬ããããšãããšãå¥ã®PCã§åãèšå®ã䜿ãã°ãæ¡åŒµæ©èœãŸã§å«ããŠå®å šã«åããšãã£ã¿ãç«ã¡äžããããšã§ãããæ°ããPCã§äœæ¥ãå§ããããæ¡åŒµæ©èœãå ¥ãçŽããšããããããšããæéãæ¶ããŸãã
ãªããclaude-desktop ã ãã¯èªåã§å ã¿çŽããŠããŸããçç±ã¯åŸåã§èª¬æããŸãã
ã·ã§ã«ãšæ¥ã ã®éå ·
ã¿ãŒããã«ãéããŠæåã«åºãŠããã®ã¯ãbashã§ã¯ãªãfishã§ãã
programs.fish.enable = true;
users.users.takeshi.shell = pkgs.fish;
environment.variables.TERMINAL = "ghostty";
ã·ã§ã«ã«ã¯fishã䜿ã£ãŠããŸããèšå®ãªãã§è£å®ãå±¥æŽã®åè£ãåºãŠããã®ãçç±ã§ãã¹ã¯ãªããã®äºææ§ããæ¥ã ã®æã¡ããããåªå ããŸãããTERMINAL 倿°ã¯ããã¿ãŒããã«ãéãããšèšãããã¢ããªãGhosttyãéãããã«ããããã®æå®ã§ãã
programs.tmux.enable = true;
programs.tmux.keyMode = "vi";
programs.tmux.baseIndex = 1;
programs.tmux.clock24 = true;
programs.tmux.historyLimit = 10000;
programs.tmux.terminal = "tmux-256color";
programs.tmux.plugins = with pkgs.tmuxPlugins; [ sensible resurrect continuum ];
tmuxã¯ã1ã€ã®ã¿ãŒããã«ã®äžã§ç»é¢ãåå²ããããäœæ¥ãæ®ãããŸãŸé¢åžãããããããã®éå ·ã§ããbaseIndex = 1 ã¯ãç»é¢ã®çªå·ã0ã§ã¯ãªã1ããå§ããæå®ã§ãããŒããŒãã®æ°åã®äžŠã³ãšäžèŽãããããã®ãã®ã«ãªããŸãã
ãã©ã°ã€ã³ã®3ã€ãå¹ããŠããŠãresurrect ãéããŠããç»é¢ã®æ§æãä¿åã»åŸ©å ãcontinuum ããããèªåã§å®æå®è¡ããŸããã€ãŸããPCãåèµ·åããŠãäœæ¥ããŠããç»é¢ã®äžŠã³ããã®ãŸãŸæ»ã£ãŠããŸãã
programs.gnupg.agent.enable = true;
programs.gnupg.agent.enableSSHSupport = true;
programs.gnome-disks.enable = true;
services.flatpak.enable = true;
gnupg.agent ã¯æå·éµã®ç®¡çã§ãenableSSHSupport ãä»ãããšSSHã®éµããã®ãšãŒãžã§ã³ãã«é ããããŸããéµã®ç®¡çå Žæã1ã€ã«ãŸãšãŸãã®ãå©ç¹ã§ãã
flatpak ã¯ãNixOSã®ã«ã¿ãã°ã«ç¡ãã¢ããªãå¥ã«ãŒãã§å ¥ããããã®éãéãšããŠå ¥ããŠãããŸãã宣èšçãªç®¡çããã¯å€ããã®ã§å€çšã¯ããŸããããã©ãããŠãå¿ èŠãªãšãã®ä¿éºã§ãã
ãã®ã»ããneovimïŒãšãã£ã¿ïŒãgit ãš ghïŒããŒãžã§ã³ç®¡çãšGitHubæäœïŒãhtopïŒããã»ã¹ç£èŠïŒãfastfetchïŒæ§æã®è¡šç€ºïŒãgpartedïŒããŒãã£ã·ã§ã³æäœïŒãlshwïŒããŒããŠã§ã¢äžèЧïŒãpciutilsãbash-language-serverããã㊠rustc / cargo / gcc / clang / perl ãšãã£ãéçºçšã®åºæ¬ã»ããã䞊ãã§ããŸããlibinput-gestures ã¯ã¿ãããããã®ãžã§ã¹ãã£ãŒãremmina ã¯ãªã¢ãŒããã¹ã¯ããããlibreoffice ãš obsidian ãš thunderbird ã¯æ¥åžžã®ææžã»ã¡ã¢ã»ã¡ãŒã«ã§ãã
Dropboxã¯ãããã±ãŒãžãå ¥ããã ãã§ãªãåžžé§ãµãŒãã¹ãšããŠå®çŸ©ããŠããŸãã
systemd.user.services.dropbox = {
description = "Dropbox Service";
environment = { QT_QPA_PLATFORM = "xcb"; };
serviceConfig = {
ExecStart = pkgs.dropbox + "/bin/dropbox";
Restart = "on-failure";
RestartSec = "10s";
};
wantedBy = [ "graphical-session.target" ];
};
wantedBy = graphical-session.target ã¯ããã¹ã¯ãããã«ãã°ã€ã³ãããäžç·ã«èµ·åããããšããæå³ãRestart = "on-failure" ã¯èœã¡ãã10ç§åŸã«èªåã§ç«ã¡äžãçŽããšããæå®ã§ããQT_QPA_PLATFORM = "xcb" ã¯ãDropboxã®ã¢ã€ã³ã³ãX11æ¹åŒã§æãããããã®èª¿æŽã«ãªããŸãããèªåèµ·åã¢ããªãã®èšå®ç»é¢ããããããã代ããã«ãããæžããŠããããã§ãã
Spotifyã«ãå°çް工ããããŸãã
(pkgs.symlinkJoin {
name = "spotify";
paths = [ pkgs.spotify ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''wrapProgram $out/bin/spotify --add-flags "--no-sandbox"'';
})
ããã¯æ¢åã®ããã±ãŒãžãå ã¿çŽããŠãèµ·åæã®ãªãã·ã§ã³ã1ã€è¶³ããŠããã ãã®èšè¿°ã§ããããã±ãŒãžãã®ãã®ãäœãçŽããã«ãèµ·åã®ä»æ¹ã ãå€ããããããã®ãå ã¿çŽããã®èãæ¹ããæ¬¡ã®ç« ã«ã€ãªãããŸãã
æé€ãšä¿å®ââ175GBã®çŸå®
/nix/store ã®å®¹éãæž¬ã£ããã175GBãããŸããã
NixOSã¯ãåã®ç¶æ ã«æ»ãããããšã売ãã«ããŠããŸããããã®æ£äœã¯éå»ã®ããŒãžã§ã³ãæ¶ããã«å šéšåã£ãŠããããã§ãã䟿å©ãã®è£ã«ã¯ãçŽ çŽã«ãã£ã¹ã¯å®¹éãšãã代éãã€ããŠããŸãã
nix.gc.automatic = true;
nix.gc.dates = "weekly";
nix.gc.options = "--delete-older-than 30d";
nix.optimise.automatic = true;
nix.optimise.dates = [ "weekly" ];
nix.settings.auto-optimise-store = false;
gcïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒãé±ã«1åã30æ¥ããå€ãäžä»£ãæšãŠãèšå®ã§ãã492ãšããäžä»£çªå·ãèŠãŠããããªã«æ®ããŠããã®ãããšæããããããããŸããããçªå·ã¯å¢ãç¶ããŠãå®äœã¯30æ¥ã¶ãããæ®ã£ãŠããŸããã
optimise ã¯ãäžèº«ããŸã£ããåããã¡ã€ã«ã1ã€ã«ãŸãšããŠãæ®ããã·ã§ãŒãã«ããã«çœ®ãæããäœæ¥ã§ããããŒãžã§ã³éãã®ãœããå士ã§ãå ±éã®ãã¡ã€ã«ã¯å€ãã®ã§ãããããã£ããå¹ããŸãã
é¢çœãã®ãæåŸã® auto-optimise-store = false ã§ãããã¯ãä¿åãããã³ã«æ¯åãŸãšãããæ©èœããªãã«ããŠãããšããæå³ã«ãªããŸããæ¯åãããšæžã蟌ã¿ã®ãã³ã«åŸ ããããã®ã§ããŸãšããŠé±1åããã»ããéžãã ããã§ãããªã³ãšãªããäž¡æ¹æžããŠãããšæ··ä¹±ããŸããããåžžæãªã³ããããŠã宿å®è¡ã«å¯ããããšèªãã°çãéããŸãã
ã€ãŸããNixOSã¯å®¹éãé£ãOSã§ã¯ãªãããæšãŠãæç€ºãæžãå¿ãããšå®¹éãé£ãOSããšããã®ãæ£ç¢ºãªãšããã§ãã
services.journald.extraConfig = ''
SyncIntervalSec=1s
SystemMaxUse=500M
SystemMaxFileSize=50M
'';
ãã°ã®èšå®ãå ¥ããŠããŸããSyncIntervalSec=1s ã¯1ç§ããšã«ãã°ããã£ã¹ã¯ãžç¢ºå®ã«æžãæå®ã§ããããå¹ãã®ã¯ãããªãŒãºããŠåŒ·å¶é»æºæãããšããã§ããæšæºã§ã¯æžã蟌ã¿ããŸãšããã®ã§ããã¡ã°ãç¥ãããçŽåã®ãã°ãæ¶ããŠãããšããæ²ããããšãèµ·ããŸããSystemMaxUse=500M ã¯ããã°å šäœã§500MBãè¶ ãããå€ããã®ããæ¶ããšããäžéã§ãã
欲ãããã®ãç¡ããšãã¯ãèªåã§äœã
ãå ¬åŒãµããŒãã¯DebianãšUbuntuã®ã¿ããClaude Desktopã®æ¡å ã«ã¯ãããæžããŠãããŸãã
NixOSã®ã«ã¿ãã°ã¯10äžå以äžã®ãœãããæããŠããŸãããããã§ãèŒã£ãŠããªããã®ã¯ãããŸãããããããšããNixOSã§ã¯èªåã§"å ã¿çŽã"ããšãã§ããŸããåã® /etc/nixos/pkgs/ ã«ã¯ããããã£ãŠäœã£ãèªåããã±ãŒãžã2ã€ãåèš269è¡ã¶ãå ¥ã£ãŠããŸãã
claude-desktop.nixââå ¬åŒã®Debiançãå ã¿çŽã
ãã£ãŠããããšã¯ãããããæµãã§ãã
src = fetchurl {
url = "https://downloads.claude.ai/âŠ/claude-desktop_${finalAttrs.version}_amd64.deb";
hash = "sha256-mcS89eP30OxEpJ+/JNfWWfLqRuKcfsYcd8cphSL1fnY=";
};
å ¬åŒãé ã£ãŠããDebiançšã®ãã¡ã€ã«ãããã®ãŸãŸåã£ãŠãããšããããå§ãŸããŸããhash ã¯ååŸãããã¡ã€ã«ã®æçŽã§ãäžèº«ã1ãã€ãã§ãéãã°ãã«ããæ¢ãŸããŸããé åžå ãå·®ãæ¿ãã£ãããšã«æ°ã¥ããå€ãåæã§åãç¶ããããšããäºæ ãèµ·ããŸããã
åé¡ã¯ããããã§ãDebiançšã®ããã°ã©ã 㯠/usr/lib/ ã®ãããªäŒçµ±çãªå Žæã«ã©ã€ãã©ãªãããåæã§äœãããŠããŸããNixOSã«ã¯ãã®å ŽæããããŸãããããã§ãããã°ã©ã ãå¿ èŠãšããã©ã€ãã©ãªã40å以äžåæããŠã/nix/store ã®äžã®æ£ããå Žæãžã€ãªãçŽããŠããŸããåŒã£è¶ãå ã®éåãã«åãããŠãå®¶å ·ã®é ç·ãããçŽããããªäœæ¥ã§ãã
ãã¡ã€ã«ã®äžã«ã¯ãåãããã£ãè·¡ãã³ã¡ã³ããšããŠæ®ã£ãŠããŸããã©ãããŒã®çš®é¡ãå€ããªããšç°å¢å€æ°ãå±éãããªããŸãŸæž¡ã£ãŠããŸãããšããè¶£æšã®ã¡ã¢ã§ããããããããªãããæžããããããã¡ã€ã«ã®äžã«æ®ã£ãŠããã®ããèšå®ãã³ãŒãã§ç®¡çããããšã®æ¬åœã®äŸ¡å€ã ãšæã£ãŠããŸããå幎åŸã®åã¯ã確å®ã«çç±ãå¿ããŠããŸãã
æŽæ°æé ãã³ã¡ã³ãã«æžããŠãããŸããææ°çã®çªå·ãšããã·ã¥ã調ã¹ãŠã2ç®æãæžãæããã ããå®éãgit ã®å±¥æŽã«ã¯ claude-desktop: 1.24012.9 -> 1.24012.11 ãšããæŽæ°ãæ®ã£ãŠããŸãã
qtscrcpy.nixââçã£é»ãªç»é¢ã®åå ãããã€ãåäœã§è¿œã
ãã¡ãã®ã»ãããåã«ã¯æ¥œããçµéšã§ãããQtScrcpyã¯Pixel 10aã®ç»é¢ãPCã«æ ããŠæäœããããã®ãœãããªã®ã§ãããã«ã¿ãã°çãå ¥ãããšç»é¢ãçã£é»ã®ãŸãŸäœãæ ããŸããã
åå ã远ãããã«ãã¹ãããšPCã®éã§æµããŠããããŒã¿ã®å é ãå®éã«èŠããŠã¿ãŸããããã¡ã€ã«ã«ãã®å®æž¬çµæãæ®ããŠãããŸãã
server 3.3.3 (77ãã€ã):
[0] äºå / [1..64] 端æ«å / [65..68] "h264" / [69..72] å¹
/ [73..76] é«ã
server 4.0 (81ãã€ã):
[0] äºå / [1..64] 端æ«å / [65..68] "h264"
/ [69..72] 0x80000000 â 4.0ã§æ°èŠè¿œå / [73..76] å¹
/ [77..80] é«ã
æ°ããåŽã¯éäžã«4ãã€ãã®é ç®ãæ¿ã蟌ãŸããŠããŠãå€ãåŽã®ãœããã¯ãããç»é¢ã®æšªå¹ ã ãšèªã¿éããŠããããã§ããå¹ ãã0x80000000ããšããçŸå®ã«ã¯ããããªãæ°åã«ãªããæ åã®æºåã倱æããŠçã£é»ã«ãªããããŒãžã§ã³éãã®éšåãçµã¿åãããçµæã®ã寞æ³ã®èªã¿ééãã§ããã
åãã£ãŠããŸãã°å¯ŸåŠã¯ç°¡åã§ããœãããæ¬æ¥æ³å®ããŠããããŒãžã§ã³ã®çžæ¹ãå ¬åŒé åžããåã£ãŠããŠãçµã¿åãããæããèªåçãäœããŸããããããä»ãåããŠããŸãã
äžåŠãã髿 ¡ã®ãããåã¯PSPã«ã«ã¹ã¿ã ãã¡ãŒã ãŠã§ã¢ãå ¥ããŠãã¬ããã²ãŒã ã®ãšãã¥ã¬ãŒã¿ãåããã®ã«å€¢äžã§ãããã¡ãŒã«ãŒã決ããç¯å²ã®å€åŽã«æã䌞ã°ããŠãåããªãã£ããã®ãåããããã®ãšãã®æè§Šãšããã®äœæ¥ã¯ãŸã£ããåããã®ã§ããåãNixOSããé¢ããããªãçç±ã¯ããã¶ãæ©èœã®äŸ¿å©ãããããã¡ãåŽã«ãããŸãã
èšå®ããšãGitHubã«çœ®ããŠãã
/etc/nixos ã®äžã§ git log ãå©ããšã12åã®ã³ãããã䞊ã³ãŸãã
b2a1f0e Raise vm.swappiness to 100 for zram
abf6901 Raise zramSwap priority to 100
375a63e Enable zram swap and zram-backed /tmp
b637844 claude-desktop: 1.24012.9 -> 1.24012.11
âŠ
èšå®ãã¡ã€ã«ãããã¹ããªã®ã§ããã®ãŸãŸããŒãžã§ã³ç®¡çã§ããŸãããããåã¯ãããGitHubã®ãã©ã€ããŒããªããžããªã«çœ®ããŠããã®ã§ãPCã®OSèšå®ãã®ãã®ãã¯ã©ãŠãã«ããã¯ã¢ãããããŠããç¶æ ã§ãã
ãããã©ãããã匷ãããšãããšããããã®PCã仿¥å£ããŠããæ°ããæ©äœã«NixOSãæå°æ§æã§å ¥ããŠããã®ãªããžããªãæã£ãŠããŠãnixos-rebuild switch ã1åå©ãã°ãã»ãŒå éãã«ãªããŸããæ¥æ¬èªå ¥åãã²ãŒã ç°å¢ãAIããŒã«ããå šéšãã®493è¡ã®äžã«ããããã§ãïŒãã£ã¹ã¯ã®UUIDãæžãã hardware-configuration.nix ã ãã¯æ©äœããšã«äœãçŽãã«ãªããŸãïŒã
.gitignore ã«ã¯2ã€ã ãæžããŠãããŸãã
.claude/settings.local.json
result
result-*
äžã¯ãã·ã³åºæã®èš±å¯ãªã¹ããªã®ã§å ±æããªããäžã¯ nix build ãäœãäžæçãªã·ã§ãŒãã«ãããªã®ã§è¿œè·¡ããªãããšãã倿ã§ãã
ãããŠäžä»£çªå·ãšã³ãããæ°ã®å·®ãããã®éçšã®æ§æ Œããã衚ããŠããŸããäžä»£ã¯492ãã³ãããã¯12ãã€ãŸãåã¯æ®æ®µãçæãããèšå®ã§ã©ãã©ã詊ããŠããããã¯æ®ãããšæ±ºãããã®ã ããèšé²ã«æ®ããŠããããã§ãã詊è¡ã®åæ°ãšãèšé²ã«å€ãã倿Žã®åæ°ã¯ããŸã£ããå¥ã®æ°åã§ããã
æ£çŽã«æžãã5ã€ã®æ¬ ç¹
175GBãšããæ°åããããäžåºŠåºããŸãã
ãããŸã§è¯ãããšãæžããŠããã®ã§ãå®éã«å°ã£ãŠããç¹ãåãåéã§æžããŸãã
â 容éãé£ãã175GBãšããæ°åããã¹ãŠã§ããæé€ã®èšå®ãæžãå¿ãããšãããã¯ééãªãå¢ããŸãã
â¡ æžããŠããå©ããŸã§äœãèµ·ããªããzramã®è©±ããŸãã«ããã§ãããèšå®ãçŽããŠãçŽã£ãã€ããã§æ°ååéãããŠãããrebuildãå¿ããŠãããšæ°ã¥ããããŸã ã«ãããŸã«ãããŸãã
⢠æ å ±ãå°ãªãããšã©ãŒãèªã¿ã«ãããNixOSã®èšå®ã¯ç¬èªã®ããã°ã©ãã³ã°èšèªã§æžãããŠããŠãæžãééãããšæ°åè¡ã®ãšã©ãŒãåãåºãããŸããUbuntuãMintã«æ¯ã¹ãã°ãæ¥æ¬èªã®æ å ±éã¯æ¡ã§éããŸãããã£ãšãåã¯æè¿ããã®èªè§£ãçæAIã«ããªãæäŒã£ãŠããã£ãŠããŠããããLinuxãå§ãããããšã¯ãã¡ã°ãå€ãã£ããšãããããããŸããã
⣠ä»ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®åžžèãéããªããOVMFã®ã·ã§ãŒãã«ãããæã§åŒµã£ã話ããnix-ldãå ¥ããªããšåžè²©ã®ãã€ããªãåããªã話ãããã§ãããLinuxã§ã®äžè¬çãªæé ãããã®ãŸãŸäœ¿ããªãå Žé¢ã¯ã確å®ã«ãããŸãã
†èšå®ãå šéšèŠããã¶ããæŸçœ®ããè¡ãå šéšèŠãããææäœã«ãŽã·ãã¯ãæå®ãããŸãŸã®è¡ã®è©±ãããŸããããä»ã«ããããŸããããšãã° services.qemuGuest ã services.spice-vdagentd ã¯ããã®PCèªèº«ãä»®æ³ãã·ã³ãšããŠåããšãã«å¹ãèšå®ã§ããæ¯èŠãšããŠäœ¿ã£ãŠããä»ã®æ§æã§ã¯ãåºçªãããã¯ãã®ãªãè¡ã«ãªããŸãã
ããããè¡ãæ®ãã®ã¯ããã¶ãNixOSã®æ¬ ç¹ã§ã¯ãªãã382è¡ãšããèŠæš¡ã«ãªã£ãèšå®ã人éãæ£åžãããŠããªãã ãã®è©±ã§ãããã ãå°ãªããšããæ£åžããã¹ãè¡ãã©ãã«ããããããã¡ã€ã«ãéãã°åããããšããç¹ã¯æ®éã®OSããæµãŸããŠããŸããWindowsã®èšå®ç»é¢ã«ã¯ã5幎åã«ä»ãããã§ãã¯ã®äžèЧãªããŠåºãŠããŸããã
Linuxãã®ãã®ã®äžäŸ¿ãã«ã€ããŠã¯ãäžèšã«æ¬é³ãæžããŠããŸãã
åããŠãªã人ã»åããŠã人
åããŠã¡ã€ã³PCã«Linuxãå ¥ããé±ãåããã£ãããšã¯æ¥æ¬èªå ¥åãçŽãããšã ãã§ããã
ãã®çµéšãããå ã«åããŠããªãäººãæ£çŽã«æžããŸãã
PCãéå ·ãšããŠäœ¿ãããã ãã®äººãèšå®ãæžãå·¥çšãæåã«æãŸãæç¹ã§ããµã€ãã¯æã§ã
仿¥ã€ã³ã¹ããŒã«ããŠææ¥ããæ¬æ°ã§äœ¿ããã人ãæåã®1é±éã¯ããã¶ãæ¥æ¬èªå ¥åãšæ ŒéããŠçµãããŸã
æ€çŽ¢ããŠããçããåºãªããšäžå®ãªäººãUbuntuãMintã«æ¯ã¹ããšãæ¥æ¬èªã®èšäºã¯æ¡ã§éããŸã
ãã£ã¹ã¯å®¹éã«äœè£ããªã人ã100GBçšåºŠã®ç©ºãã§ã¯ãããèŠãããªããŸã
ãã®ããã§ãåããŠãã人ã§ãã
åãç°å¢ããã1å°ã«ãã®ãŸãŸäœããã人ãããŒãPCãšãã¹ã¯ããããæããã人ã«ããã以äžã®éå ·ãåã¯ç¥ããŸãã
èšå®ãããã£ãŠå£ãã®ã奜ããªäººãèµ·åã¡ãã¥ãŒããåã®äžä»£ãéžã¹ã°æ»ããã®ã§ãå£ãåæ°ã®å€æ®µããšãŠãå®ãã§ã
ããªããã®PCã¯ããåãã®ãããå šéšèª¬æã§ããç¶æ ãæ°æã¡ãã人ãåã®ç°å¢ã®çç±ã¯ãããŸèªãã§ããã ããéããå šéšãã¡ã€ã«ã«æžããŠãããŸã
AIã«èšå®ãæäŒãããã人ãèšå®ãããã¹ã1æã«éçŽãããŠããã®ã§ãããã®çç¶ãçŽãããããšçžè«ããçžæãAIã§ããè©±ãæ©ãã§ã
ãããã«
æšå€ã®492åç®ã®äžä»£ã¯ã仿ããã®ãŸãŸåããŠããŸããæžãè¶³ããzramã¯ã次ã«rebuildãå©ããç¬éã«493åç®ãšããŠäžçã«åºãŠããŸãã
492åãæ°åã ãèŠããšãããã¶ãèœã¡çããªãPCã«èŠãããããããŸãããã§ãå®éã¯éã§ããã€ã§ãäœãçŽãããšåãã£ãŠãããããåã¯ãã®PCã«å¯ŸããŠããã¶ãèœã¡çããŠããããã®ã ãšæããŸããå£ãããæ»ãã°ãããç§»ããããªã£ããã493è¡ãæã£ãŠããã°ããã
ãã®èšäºãæžãããã«ãåã¯èªåã®èšå®ã1è¡ãã€èªã¿çŽããŸãããããããããææäœã®æå®ãééãããŸãŸã®è¡ããããåºçªã®ãªãä»®æ³ãã·ã³çšã®è¡ãåºãŠããŸãããèªåã®éå ·ã®äžèº«ããä»äººã«èª¬æã§ãã圢ã§èªã¿è¿ãæ©äŒãšããã®ã¯ããªããªããããŸããã
èšå®ãã¡ã€ã«ãšããã®ã¯ãPCã®åæ±èª¬ææžã§ã¯ãªãããã®äººãéå ·ã«ã©ãåãåã£ãŠãããã®èšé²ãªã®ã ãšæããŸããããªãã®PCãä»ããåããŠããçç±ã¯ãããŸèª°ãã«èª¬æã§ããç¶æ ã§ããããã
é¢é£èšäºïŒ
ãããŸã§èªãã§ãã ãã£ãŠãããããšãããããŸããããã®èšäºãé¢çœãã£ãããã¹ããšãã©ããŒãããã ãããšã次ã®äžä»£ãäœãå±ã¿ã«ãªããŸãã
è£è¶³ïŒãã®èšäºã®æ°å€ãšåæã«ã€ããŠ
äžä»£çªå·ïŒ492ïŒã»/nix/store ã®å®¹éïŒ175GBïŒã»GPUã®èå¥åïŒgfx1101ïŒã»çšŒåäžã®ã«ãŒãã«ïŒ7.1.6ïŒã»æèŒã¡ã¢ãªïŒ62GiB衚瀺ïŒã¯ããããã2026幎8æ6æ¥æç¹ã®å®æ©ã§ç¢ºèªããå€ã§ã
äžä»£ã®æ°ã¯çŸåšã®ãã·ã³ã«NixOSãå ¥ããŠä»¥éã®çޝèšã§ãLinuxèªäœã®äœ¿çšæŽïŒ4幎ïŒãšã¯å¥ã®æ°åã§ããsystem.stateVersion = "25.05" ããããã®æ©äœã®å°å ¥ã¯2025幎5æãªãªãŒã¹ç以éã«ãªããŸã
èšå®ãã¡ã€ã«ã®è¡æ°ã¯ãconfiguration.nix 37è¡ïŒflake.nix 14è¡ïŒhardware-configuration.nix 60è¡ïŒgenerated.nix 382è¡ïŒpkgs/ 269è¡ïŒåæ¥æç¹ïŒ
zramã®èšå®ã¯åæ¥ã«è¿œèšãããã®ã§ãèšäºå·çæç¹ã§ã¯æªé©çšã§ãïŒzramctl ã«ããã€ã¹ãç¡ãããšãç¢ºèªæžã¿ãæ¬æäžã«æèšã®ãšããïŒ
8080çªããŒããéããŠããçç±ã¯ããã®èšäºã®ããã«èšå®ãèªã¿è¿ããæç¹ã§åèªèº«ãç¹å®ã§ããŸããã§ãããçšéãè£åãã§ããªãèšå®ã«ã€ããŠããããããçç±ãåŸä»ãããã®ã¯ãããŠãããŸã
Claude Desktopã®å ¬åŒãµããŒã察象ãDebianïŒUbuntuã§ããç¹ã¯ãAnthropicã®å ¬åŒããã¥ã¡ã³ãïŒDesktop for Linux ã®æ¡å ïŒã«åºã¥ããŸã
äžéšã®é ç®ã«ã¯ãçææã«ããã®çã®ãªãã·ã§ã³äžèЧã§ã¯ç¢ºèªã§ããªãã£ããããæžããããŸãŸéããããšããå°ãä»ããŠããŸãïŒnixpkgs.config.allowUnfree ãBluetoothã®è©³çްèšå®ãªã©ïŒãåããŠã¯ããŸãããå°æ¥ã®çã§æžãæ¹ãå€ããå¯èœæ§ãããè¡ãšããäœçœ®ã¥ãã§ã
èšå®ãã¡ã€ã«å šæ
flake.nix
{
description = "NixOS configuration for nixos";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
outputs = { self, nixpkgs }: {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
modules = [
{ nixpkgs.hostPlatform = "x86_64-linux"; }
./configuration.nix
];
};
};
}configuration.nix
{ config, lib, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
./generated.nix
];
# Every definition below uses lib.mkDefault, so anything you also set in
# nixgen takes precedence instead of colliding with it.
# Boot loader (UEFI).
boot.loader.systemd-boot.enable = lib.mkDefault true;
boot.loader.efi.canTouchEfiVariables = lib.mkDefault true;
networking.hostName = lib.mkDefault "nixos";
networking.networkmanager.enable = lib.mkDefault true;
users.users.takeshi = {
isNormalUser = lib.mkDefault true;
extraGroups = lib.mkDefault [ "wheel" "networkmanager" ];
};
# Needed before `nixos-rebuild --flake` will work.
nix.settings.experimental-features = lib.mkDefault [ "nix-command" "flakes" ];
# The release you first installed. Do not raise it to match a newer NixOS
# unless you have read the release notes â it exists to keep stateful data
# readable across upgrades.
system.stateVersion = lib.mkDefault "25.05";
}generated.nix
# Generated by nixgen â do not edit by hand.
# channel: nixos-26.05 generated: 2026-08-07 20:22
#
# Import it: imports = [ ./generated.nix ];
# Or use it in place of your configuration.nix.
# Either way keep it beside ./hardware-configuration.nix.
{ config, lib, pkgs, ... }:
{
boot.initrd.kernelModules = [ "amdgpu" ];
boot.kernel.sysctl = {
"vm.dirty_background_bytes" = 67108864;
"vm.dirty_bytes" = 268435456;
"vm.max_map_count" = 2147483642;
"vm.swappiness" = 100;
"vm.vfs_cache_pressure" = 50;
};
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.kernelParams = [
"preempt=full"
"amdgpu.ppfeaturemask=0xffffffff"
];
boot.loader.efi.efiSysMountPoint = "/boot";
boot.loader.systemd-boot.configurationLimit = 10;
boot.tmp.useZram = true;
environment.sessionVariables = {
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
};
environment.systemPackages = with pkgs; [
bash-language-server
neovim
wget
git
gh
firewalld
fastfetch
htop
flatpak-builder
flatpak-xdg-utils
boost
ghostty
libinput-gestures
pciutils
((vscode-with-extensions.override { vscodeExtensions = (with vscode-extensions; [ ms-ceintl.vscode-language-pack-ja vscode-extensions.bbenoist.nix anthropic.claude-code ]); }))
kora-icon-theme
nordic
whitesur-gtk-theme
ristretto
tumbler
mousepad
parole
catfish
gigolo
orage
xfburn
xfce4-appfinder
xfce4-cpugraph-plugin
xfce4-dict
xfce4-fsguard-plugin
xfce4-genmon-plugin
xfce4-panel
xfce4-pulseaudio-plugin
xfce4-systemload-plugin
xfce4-weather-plugin
xfce4-whiskermenu-plugin
xfce4-xkb-plugin
xfce4-screenshooter
xfdashboard
copyq
plank
kdePackages.ark
bazaar
firefox
google-chrome
thunderbird
discord
dropbox
((pkgs.symlinkJoin { buildInputs = [ pkgs.makeWrapper ]; name = "spotify"; paths = [ pkgs.spotify ]; postBuild = "wrapProgram $out/bin/spotify --add-flags \"--no-sandbox\"\n"; }))
remmina
libreoffice
obsidian
tradingview
freecad
wqy_zenhei
ffmpeg-full
vlc
audacity
handbrake
davinci-resolve
obs-studio-plugins.wlrobs
obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-vaapi
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-vkcapture
gimp-with-plugins
blender
kdePackages.kdenlive
steam-run
protonup-qt
lsfg-vk
lsfg-vk-ui
moonlight-qt
mangohud
goverlay
mesa
libvdpau-va-gl
xf86-video-amdgpu
amdgpu_top
amdenc
amdctl
amd-blis
amdfwtool
amd-ucodegen
microcode-amd
radeon-profile
radeontools
rocmPackages.clr
rocmPackages.rpp
rocmPackages.rocminfo
rustc
cargo
perl
gcc
clang
gparted
piper
libratbag
solaar
librepods
((pkgs.callPackage ./pkgs/qtscrcpy.nix { }))
lshw
virt-viewer
qemu_kvm
vde2
libguestfs
lmstudio
claude-code
((pkgs.callPackage ./pkgs/claude-desktop.nix { }))
claude-monitor
opencode
opencode-desktop
opencode-claude-auth
gpu-screen-recorder-gtk
networkmanagerapplet
]; # verbatim from your configuration.nix
environment.variables = {
HSA_OVERRIDE_GFX_VERSION = "11.0.1";
RUSTICL_ENABLE = "radeonsi";
TERMINAL = "ghostty";
};
fileSystems."/".options = [ "noatime" ];
fileSystems."/mnt/deta1".options = [ "noatime" ];
fileSystems."/mnt/deta2".options = [ "noatime" ];
fileSystems."/mnt/steam".options = [ "noatime" ];
fonts.fontDir.enable = true;
fonts.fontconfig.defaultFonts.monospace = [ "Migu 1M" ];
fonts.fontconfig.defaultFonts.sansSerif = [ "Noto Sans CJK JP" ];
fonts.fontconfig.defaultFonts.serif = [ "Noto Sans CJK JP" ];
fonts.fontconfig.enable = true;
fonts.packages = with pkgs; [
migu
noto-fonts-cjk-sans
noto-fonts-cjk-serif
noto-fonts-color-emoji
ipafont
]; # verbatim from your configuration.nix
hardware.amdgpu.opencl.enable = true;
hardware.bluetooth.enable = true;
hardware.bluetooth.package = pkgs.bluez;
hardware.bluetooth.powerOnBoot = true;
hardware.bluetooth.settings.General.Experimental = true; # verbatim â not an option in this release
hardware.bluetooth.settings.General.FastConnectable = true; # verbatim â not an option in this release
hardware.bluetooth.settings.Policy.AutoEnable = true; # verbatim â not an option in this release
hardware.graphics.enable = true;
hardware.graphics.extraPackages = with pkgs; [
vulkan-tools
rocmPackages.rocminfo
rocmPackages.clr.icd
libva
]; # verbatim from your configuration.nix
hardware.logitech.wireless.enable = true;
hardware.logitech.wireless.enableGraphical = true;
hardware.rasdaemon.enable = true;
hardware.rasdaemon.record = true;
hardware.steam-hardware.enable = true;
i18n.defaultLocale = "ja_JP.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "ja_JP.UTF-8";
LC_IDENTIFICATION = "ja_JP.UTF-8";
LC_MEASUREMENT = "ja_JP.UTF-8";
LC_MONETARY = "ja_JP.UTF-8";
LC_NAME = "ja_JP.UTF-8";
LC_NUMERIC = "ja_JP.UTF-8";
LC_PAPER = "ja_JP.UTF-8";
LC_TELEPHONE = "ja_JP.UTF-8";
LC_TIME = "ja_JP.UTF-8";
};
i18n.inputMethod.enable = true;
i18n.inputMethod.fcitx5.addons = [
pkgs.fcitx5-mozc
pkgs.fcitx5-gtk
];
i18n.inputMethod.fcitx5.waylandFrontend = false;
i18n.inputMethod.type = "fcitx5";
networking.firewall.allowedTCPPorts = [
53317
2049
8080
config.services.tailscale.port
]; # verbatim from your configuration.nix
networking.firewall.enable = true;
networking.firewall.trustedInterfaces = [ "tailscale0" ];
networking.timeServers = [ "ntp.nict.jp" ];
nix.gc.automatic = true;
nix.gc.dates = "weekly";
nix.gc.options = "--delete-older-than 30d";
nix.optimise.automatic = true;
nix.optimise.dates = [ "weekly" ];
nix.settings = {
experimental-features = [ "nix-command" "flakes" ];
};
nix.settings.auto-optimise-store = false;
nixpkgs.config.allowUnfree = true; # verbatim â not an option in this release
powerManagement.cpuFreqGovernor = "performance";
programs.fish.enable = true;
programs.fuse.userAllowOther = true;
programs.gamemode.enable = true;
programs.gamemode.settings.general.inhibit_screensaver = 1; # verbatim â not an option in this release
programs.gamemode.settings.general.ioprio = 0; # verbatim â not an option in this release
programs.gamemode.settings.general.renice = 10; # verbatim â not an option in this release
programs.gamemode.settings.general.softrealtime = "auto"; # verbatim â not an option in this release
programs.gamemode.settings.gpu.amd_performance_level = "high"; # verbatim â not an option in this release
programs.gamemode.settings.gpu.apply_gpu_optimisations = "accept-responsibility"; # verbatim â not an option in this release
programs.gamemode.settings.gpu.gpu_device = 1; # verbatim â not an option in this release
programs.gamescope.capSysNice = true;
programs.gamescope.enable = true;
programs.gnome-disks.enable = true;
programs.gnupg.agent.enable = true;
programs.gnupg.agent.enableSSHSupport = true;
programs.gpu-screen-recorder.enable = true;
programs.kdeconnect.enable = true;
programs.localsend.enable = true;
programs.localsend.openFirewall = true;
programs.nix-ld.enable = true;
programs.nm-applet.enable = true;
programs.nm-applet.package = pkgs.networkmanagerapplet;
programs.obs-studio.enable = true;
programs.steam.enable = true;
programs.steam.extraCompatPackages = [ pkgs.proton-ge-bin ];
programs.steam.fontPackages = [ pkgs.migu ];
programs.steam.localNetworkGameTransfers.openFirewall = true;
programs.steam.package = pkgs.steam.override { extraEnv = { AMD_VULKAN_ICD = "RADV"; FONTCONFIG_PATH = "/etc/fonts"; GTK_IM_MODULE = "fcitx"; LANG = "ja_JP.UTF-8"; LANGUAGE = "ja_JP.UTF-8"; LC_ALL = "ja_JP.UTF-8"; QT_IM_MODULE = "fcitx"; XCURSOR_THEME = "Adwaita"; XMODIFIERS = "@im=fcitx"; }; extraPkgs = (pkgs: (with pkgs; [ migu noto-fonts-cjk-sans gnome-themes-extra adwaita-icon-theme mangohud gamemode gamescope fcitx5 fcitx5-gtk fcitx5-mozc kdePackages.fcitx5-qt ])); }; # verbatim from your configuration.nix
programs.steam.protontricks.enable = true;
programs.steam.remotePlay.openFirewall = true;
programs.thunar.enable = true;
programs.thunar.plugins = [
pkgs.thunar-vcs-plugin
pkgs.thunar-shares-plugin
pkgs.thunar-archive-plugin
pkgs.thunar-dropbox-plugin
pkgs.thunar-media-tags-plugin
pkgs.thunar-volman
];
programs.tmux.baseIndex = 1;
programs.tmux.clock24 = true;
programs.tmux.enable = true;
programs.tmux.historyLimit = 10000;
programs.tmux.keyMode = "vi";
programs.tmux.plugins = with pkgs.tmuxPlugins; [ sensible resurrect continuum ]; # verbatim from your configuration.nix
programs.tmux.terminal = "tmux-256color";
programs.virt-manager.enable = true;
security.rtkit.enable = true;
services.blendfarm.blenderPackage = pkgs.blender;
services.blendfarm.enable = true;
services.blueman.enable = true;
services.displayManager.autoLogin.enable = true;
services.displayManager.autoLogin.user = "takeshi";
services.displayManager.defaultSession = "xfce";
services.flatpak.enable = true;
services.gvfs.enable = true;
services.journald.extraConfig = ''
SyncIntervalSec=1s
SystemMaxUse=500M
SystemMaxFileSize=50M
'';
services.lact.enable = true;
services.openssh.enable = true;
services.openssh.settings.Macs = [
"hmac-sha2-512-etm@openssh.com"
"hmac-sha2-256-etm@openssh.com"
"umac-128-etm@openssh.com"
"hmac-sha2-512"
"hmac-sha2-256"
];
services.pipewire.alsa.enable = true;
services.pipewire.alsa.support32Bit = true;
services.pipewire.enable = true;
services.pipewire.pulse.enable = true;
services.power-profiles-daemon.enable = false;
services.pulseaudio.enable = false;
services.ratbagd.enable = true;
services.ratbagd.package = pkgs.libratbag;
services.spice-autorandr.enable = true;
services.sunshine.autoStart = true;
services.sunshine.capSysAdmin = true;
services.sunshine.enable = true;
services.sunshine.openFirewall = true;
services.sunshine.package = pkgs.sunshine;
services.tailscale.enable = true;
services.tailscale.extraUpFlags = [ "--ssh" "--operator=takeshi" ];
services.tumbler.enable = true;
services.xserver.desktopManager.xfce.enable = true;
services.xserver.desktopManager.xterm.enable = false;
services.xserver.displayManager.lightdm.enable = true;
services.xserver.displayManager.sessionCommands = pkgs.plank + "/bin/plank &\n"; # verbatim from your configuration.nix
services.xserver.enable = true;
services.xserver.videoDrivers = [ "amdgpu" ];
services.xserver.xkb.layout = "jp";
services.xserver.xkb.model = "jp106";
systemd.services.NetworkManager-wait-online.enable = true;
systemd.tmpfiles.rules = [
"d /usr/share/OVMF 0755 root root - -"
(("L+ /usr/share/OVMF/OVMF_CODE_4M.fd - - - - " + pkgs.OVMF.firmware))
(("L+ /usr/share/OVMF/OVMF_CODE.fd - - - - " + pkgs.OVMF.firmware))
]; # verbatim from your configuration.nix
systemd.user.services.copyq.after = [
"graphical-session.target"
];
systemd.user.services.copyq.description = "CopyQ clipboard manager";
systemd.user.services.copyq.partOf = [
"graphical-session.target"
];
systemd.user.services.copyq.serviceConfig = {
ExecStart = pkgs.copyq + "/bin/copyq";
Restart = "on-failure";
RestartSec = "5s";
};
systemd.user.services.copyq.wantedBy = [
"graphical-session.target"
];
systemd.user.services.dropbox.description = "Dropbox Service";
systemd.user.services.dropbox.environment = {
QT_QPA_PLATFORM = "xcb";
};
systemd.user.services.dropbox.serviceConfig = {
ExecStart = pkgs.dropbox + "/bin/dropbox";
Restart = "on-failure";
RestartSec = "10s";
};
systemd.user.services.dropbox.wantedBy = [
"graphical-session.target"
];
time.timeZone = "Asia/Tokyo";
users.users.takeshi.description = "takeshi";
users.users.takeshi.extraGroups = [
"networkmanager"
"wheel"
"video"
"docker"
"render"
"libvirtd"
"kvm"
"vboxusers"
];
users.users.takeshi.isNormalUser = true;
users.users.takeshi.shell = pkgs.fish;
virtualisation.docker.daemon.settings.default-address-pools = [ ({ base = "172.30.0.0/16"; size = 24; }) ]; # verbatim â not an option in this release
virtualisation.docker.daemon.settings.experimental = true; # verbatim â not an option in this release
virtualisation.docker.enable = true;
virtualisation.libvirtd.enable = true;
virtualisation.libvirtd.qemu.package = pkgs.qemu_kvm;
virtualisation.libvirtd.qemu.swtpm.enable = true;
virtualisation.libvirtd.qemu.vhostUserPackages = [ pkgs.virtiofsd ];
virtualisation.spiceUSBRedirection.enable = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
xdg.mime.defaultApplications = {
"inode/directory" = [ "thunar.desktop" ];
};
zramSwap.algorithm = "zstd";
zramSwap.enable = true;
zramSwap.memoryPercent = 30;
zramSwap.priority = 100;
}
/etc/nixos/pkgs é äžã®ç¹æ®ãã¡ã€ã«
claude-desktop.nix
###############################################################################
# Claude Desktop (Linux beta) â Anthropic å
¬åŒ .deb ã NixOS åãã«åããã±ãŒãž
#
# å
¬åŒãµããŒã㯠Debian / Ubuntu ã®ã¿ (https://code.claude.com/docs/en/desktop-linux)
# ã®ãããapt ãªããžããªã§é
åžãããŠããå
¬åŒãã«ãããã®ãŸãŸååŸãã
# autoPatchelf çžåœã®åŠçã§ Nix store äžã®ã©ã€ãã©ãªãžè§£æ±ºãããŠããã
#
# æŽæ°æé :
# 1. ææ°çã確èª
# curl -s https://downloads.claude.ai/claude-desktop/apt/stable/dists/stable/main/binary-amd64/Packages \
# | grep -E '^(Version|SHA256):'
# 2. äžã® version / hash ãæžãæãã (hash 㯠nix hash convert --hash-algo sha256 --to sri <SHA256>)
###############################################################################
{
lib,
stdenv,
fetchurl,
dpkg,
makeShellWrapper,
wrapGAppsHook3,
alsa-lib,
at-spi2-atk,
at-spi2-core,
atk,
cairo,
cups,
curl,
dbus,
expat,
fontconfig,
freetype,
gdk-pixbuf,
glib,
gtk3,
libGL,
libappindicator-gtk3,
libcap_ng,
libdrm,
libgbm,
libnotify,
libpulseaudio,
libseccomp,
libsecret,
libuuid,
libxcb,
libxkbcommon,
nspr,
nss,
pango,
pipewire,
systemd,
wayland,
libx11,
libxcomposite,
libxcursor,
libxdamage,
libxext,
libxfixes,
libxi,
libxkbfile,
libxrandr,
libxrender,
libxscrnsaver,
libxshmfence,
libxtst,
# å®è¡æã« PATH ããæ¢ããããã®
xdg-utils,
qemu_kvm,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "claude-desktop";
version = "1.24012.11";
src = fetchurl {
url = "https://downloads.claude.ai/claude-desktop/apt/stable/pool/main/c/claude-desktop/claude-desktop_${finalAttrs.version}_amd64.deb";
hash = "sha256-mcS89eP30OxEpJ+/JNfWWfLqRuKcfsYcd8cphSL1fnY=";
};
nativeBuildInputs = [
dpkg
# NIXOS_OZONE_WL / WAYLAND_DISPLAY ã --add-flags å
ã§ã·ã§ã«å±éããããã
# ãã€ããªã©ãã (makeCWrapper) ã§ã¯ãªãã·ã§ã«ã©ããã䜿ãã
# wrapGAppsHook3 㯠makeBinaryWrapper ãäŒæããã®ã§äžæžãããªããš
# ãã¡ããåã£ãŠããŸãã"${NIXOS_OZONE_WL:+...}" ãæªå±éã®ãŸãŸ
# Electron ã®åŒæ°ãšããŠæž¡ãããã
makeShellWrapper
(wrapGAppsHook3.override { makeWrapper = makeShellWrapper; })
];
buildInputs = [
gtk3 # GSETTINGS_SCHEMAS_PATH ã®ãã
glib
];
# Electron 忢±ãã€ããªã¯èªåã§ patchelf ãã
dontUnpack = true;
dontBuild = true;
dontPatchELF = true;
dontWrapGApps = true; # ã©ãããŒã¯èªåã§äœããgappsWrapperArgs ã ãåãã
rpath =
lib.makeLibraryPath [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
expat
fontconfig
freetype
gdk-pixbuf
glib
gtk3
libGL
libappindicator-gtk3
libcap_ng # 忢± virtiofsd (Cowork VM) ãå¿
èŠãšãã
libdrm
libgbm
libnotify
libpulseaudio
libseccomp # åäž
libsecret
libuuid
libxcb
libxkbcommon
nspr
nss
pango
pipewire
stdenv.cc.cc
systemd
wayland
libx11
libxcomposite
libxcursor
libxdamage
libxext
libxfixes
libxi
libxkbfile
libxrandr
libxrender
libxscrnsaver
libxshmfence
libxtst
]
+ ":${lib.getLib stdenv.cc.cc}/lib64";
installPhase = ''
runHook preInstall
# .deb ã« setuid ãã€ã㪠(chrome-sandbox) ãå«ãŸãããã dpkg -x ã¯äœ¿ããªã
dpkg --fsys-tarfile $src | tar --extract
rm -rf usr/share/lintian usr/share/doc
mkdir -p $out
mv usr/* $out
chmod -R g-w $out
# 忢±ãã€ã㪠(Electron æ¬äœ / virtiofsd / cowork-linux-helper /
# chrome-native-host / *.node) ã Nix store ã®ã©ã€ãã©ãªã«åãã
for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* -o -name \*.node \) ); do
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" 2>/dev/null || true
patchelf --set-rpath "${finalAttrs.rpath}:$out/lib/claude-desktop" "$file" 2>/dev/null || true
done
# Nix store äžã§ã¯ setuid ãä»ããããªãã®ã§ SUID sandbox ãã«ãã¯äœ¿ããªãã
# åé€ã㊠Electron ã namespace sandbox ã«ãã©ãŒã«ããã¯ããã
# (NixOS ã¯éç¹æš© user namespace ãæå¹ãªã®ã§ sandbox ã¯ç¶æããã)ã
rm -f $out/lib/claude-desktop/chrome-sandbox
# /usr/bin/claude-desktop ã®å£ãã symlink ãèµ·åã©ããã§çœ®ãæãã
rm -f $out/bin/claude-desktop
makeWrapper $out/lib/claude-desktop/claude-desktop $out/bin/claude-desktop \
"''${gappsWrapperArgs[@]}" \
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
--suffix PATH : ${lib.makeBinPath [ xdg-utils qemu_kvm ]} \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
# .desktop ã® Exec ã絶察ãã¹ãž (ã¡ã€ã³ãšã³ããªãš Desktop Action ã®äž¡æ¹)
substituteInPlace $out/share/applications/com.anthropic.Claude.desktop \
--replace-fail "Exec=claude-desktop" "Exec=$out/bin/claude-desktop"
runHook postInstall
'';
meta = {
description = "Desktop application for Claude.ai (official Linux beta build)";
homepage = "https://claude.ai";
downloadPage = "https://code.claude.com/docs/en/desktop-linux";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.unfree;
platforms = [ "x86_64-linux" ];
mainProgram = "claude-desktop";
};
})
qtsqcrcpy.nix
###############################################################################
# QtScrcpy â nixpkgs çã®ãµãŒããŒéäºæãä¿®æ£ããã©ãããŒ
#
# ãåé¡ã
# nixpkgs ã® qtscrcpy 㯠scrcpy-server ã nixpkgs ã® scrcpy ããã±ãŒãžãã
# æµçšããããã« postPatch ã§ serverVersion ã scrcpy.version ãžåŒ·å¶çœ®æããã
# çŸåš scrcpy ã 4.0 ã®ãããQtScrcpy 3.3.3 ã« scrcpy-server 4.0 ã
# çµã¿åããããããäž¡è
ã¯ãããªããããŒã®åœ¢åŒãéäºæã
#
# 宿ž¬ãããããªãœã±ããã®ããã㌠(max_size=720, Pixel 10a):
# server 3.3.3 (77 bytes):
# [0] dummy / [1..64] device name / [65..68] "h264"
# / [69..72] width=320 / [73..76] height=720
# server 4.0 (81 bytes):
# [0] dummy / [1..64] device name / [65..68] "h264"
# / [69..72] 0x80000000 â 4.0 ã§æ°èŠè¿œå / [73..76] width / [77..80] height
#
# QtScrcpy 3.3.3 㯠3.x 圢åŒã§èªããã width ã 0x80000000 ãšèª€èªãã
# ãã³ãŒãã®åæåã«å€±æããŠç»é¢ãäžå衚瀺ãããªãã
#
# ã察åŠã
# QtScrcpy 3.3.3 ãæ¬æ¥å¯Ÿå¿ãã scrcpy-server v3.3.3 ãå
¬åŒãªãªãŒã¹ããååŸãã
# serverVersion ã®æžãæããè¡ããªã (äžæµã®ãŸãŸ "3.3.3" ã䜿ã)ã
#
# æŽæ°æé :
# nixpkgs ã® qtscrcpy ãäžãã£ãã version ãåããã scrcpy-server ã
# äžã® serverVersion / hash ã«èšå®ãããhash ã¯æ¬¡ã§ååŸ:
# nix-prefetch-url https://github.com/Genymobile/scrcpy/releases/download/v<VER>/scrcpy-server-v<VER>
###############################################################################
{
lib,
qtscrcpy,
fetchurl,
android-tools,
}:
let
# QtScrcpy 3.3.3 ãæ³å®ãã scrcpy-server ã®ããŒãžã§ã³
serverVersion = "3.3.3";
scrcpyServer = fetchurl {
url = "https://github.com/Genymobile/scrcpy/releases/download/v${serverVersion}/scrcpy-server-v${serverVersion}";
hash = "sha256-fnAyO6fyWWSd1KzOl6xP77roECssbZHi575hP9U1S+A=";
};
in
qtscrcpy.overrideAttrs (_: {
# äžæµã® postPatch ãã serverVersion ã®çœ®æã ããåãé€ãããã®ã
# (sndcpy åŽã®ãã¹åã蟌ã¿ã¯ nixpkgs ãšåãå
容ãç¶æ)
postPatch = ''
substituteInPlace QtScrcpy/audio/audiooutput.cpp \
--replace-fail 'sndcpy.sh' "$out/share/qtscrcpy/sndcpy.sh"
substituteInPlace QtScrcpy/sndcpy/sndcpy.sh \
--replace-fail 'ADB=./adb' "ADB=${lib.getExe' android-tools "adb"}" \
--replace-fail 'SNDCPY_APK=sndcpy.apk' "SNDCPY_APK=$out/share/qtscrcpy/sndcpy.apk"
'';
# scrcpy ããã±ãŒãžå梱㮠4.0 ã§ã¯ãªãã察å¿ããŒãžã§ã³ã®ãµãŒããŒãæã
preFixup = ''
qtWrapperArgs+=(
--set QTSCRCPY_ADB_PATH ${lib.getExe' android-tools "adb"}
--set QTSCRCPY_SERVER_PATH ${scrcpyServer}
)
'';
})