NixOS system configurations + dotfiles via home-manager
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}