NixOS system configurations + dotfiles via home-manager
at main 70 lines 2.2 kB view raw
1{ lib, ... }: 2let 3 modeToggleService = lib.mergeAttrs { 4 wantedBy = [ "set-ui-mode.target" ]; 5 serviceConfig.Type = "oneshot"; 6 serviceConfig.RemainAfterExit = false; 7 }; 8 activate = mode: '' 9 systemctl --user set-environment UI_MODE=${mode} 10 systemctl --user start set-ui-mode.target 11 ''; 12in 13{ 14 flake.modules.hjem.desktop = 15 { pkgs, ... }: 16 { 17 packages = [ pkgs.darkman ]; 18 systemd.targets.set-ui-mode.unitConfig = { 19 Description = "Switch to light/dark mode based on $UI_MODE"; 20 StopWhenUnneeded = true; 21 }; 22 systemd.services.set-gtk-scheme = modeToggleService { 23 description = "Set GTK UI scheme"; 24 script = '' 25 ${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$UI_MODE'" 26 ''; 27 }; 28 systemd.services.niri-screen-transition = modeToggleService { 29 description = "Niri screen transition effect"; 30 script = '' 31 niri msg action do-screen-transition -d ''${UI_TRANSITION_MS:-250} 32 ''; 33 }; 34 35 xdg.config.files."darkman/config.yaml".text = '' 36 lat: 42.4 37 lng: -71.1 38 ''; 39 40 xdg.data.files."dark-mode.d/systemd".source = pkgs.writeShellScript "systemd-dark" ( 41 activate "dark" 42 ); 43 xdg.data.files."light-mode.d/systemd".source = pkgs.writeShellScript "systemd-light" ( 44 activate "light" 45 ); 46 47 # https://github.com/feel-co/hjem/issues/76 48 # xdg.config.files."systemd/user/darkman.service".source = 49 # "${pkgs.darkman}/share/systemd/user/darkman.service"; 50 systemd.services.darkman = { 51 unitConfig = { 52 Description = "Darkman system service"; 53 Documentation = "man:darkman(1)"; 54 PartOf = [ "graphical-session.target" ]; 55 BindsTo = [ "graphical-session.target" ]; 56 }; 57 58 serviceConfig = { 59 Type = "dbus"; 60 BusName = "nl.whynothugo.darkman"; 61 ExecStart = "${lib.getExe pkgs.darkman} run"; 62 Restart = "on-failure"; 63 TimeoutStopSec = 15; 64 Slice = "background.slice"; 65 }; 66 67 wantedBy = lib.mkDefault [ "graphical-session.target" ]; 68 }; 69 }; 70}