btw i use nix
1{
2 pkgs,
3 config,
4 lib,
5 ...
6}@inputs:
7
8let
9 i3-workspace-history =
10 inputs.i3-workspace-history.packages.${pkgs.stdenv.hostPlatform.system}.default;
11 replacements = {
12 wm = "i3";
13 wmmsg = "i3-msg";
14 rofi = "rofi";
15 app_id = "class";
16 bar_extra = "";
17 locked = "";
18 polkit_gnome = "${pkgs.polkit_gnome}";
19 locker = "xsecurelock";
20 enable_output = "xrandr --output $laptop_output --auto";
21 disable_output = "xrandr --output $laptop_output --off";
22 drun = "rofi -i -modi drun -show drun";
23 dmenu = "rofi -i -dmenu -p";
24 displays = "arandr";
25 notification_deamon = "dunst";
26 i3_workspace_history = "${i3-workspace-history}/bin/i3-workspace-history";
27 i3_workspace_history_args = "";
28 };
29 util = import ./util.nix { inherit pkgs lib; };
30 cfg = config.custom.gui.i3;
31in
32{
33 options.custom.gui.i3.enable = lib.mkEnableOption "i3";
34
35 config = lib.mkIf cfg.enable {
36 # TODO
37 # idling
38
39 home.packages = with pkgs; [ i3-workspace-history ];
40
41 home.pointerCursor.x11.enable = true;
42
43 home.file = {
44 ".xinitrc".text = ''
45 export XDG_SESSION_TYPE=x11
46 export GDK_BACKEND=x11
47 export DESKTOP_SESSION=plasma
48 export TMUX_TMPDIR=$XDG_RUNTIME_DIR/x-tmux
49 eval `dbus-launch`
50 export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID DBUS_SESSION_BUS_WINDOWID
51 exec i3
52 '';
53 ".zprofile".text = ''
54 # Autostart at login on TTY 2
55 if [ -z "''${DISPLAY}" ] && [ "''${XDG_VTNR}" -eq 2 ]; then
56 source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
57 exec startx
58 fi
59 '';
60 };
61
62 xdg.configFile =
63 let
64 entries = {
65 "dunst/dunstrc".source = ./dunst;
66 "i3/config".text =
67 let
68 wmFilenames = util.listFilesInDir ./wm/config.d;
69 in
70 let
71 i3Filenames = util.listFilesInDir ./wm/i3;
72 in
73 (util.concatFilesReplace ([ ./wm/config ] ++ wmFilenames ++ i3Filenames) replacements);
74 "rofi/config.rasi".source = ./rofi.rasi;
75 };
76 in
77 (util.inDirReplace ./wm/scripts "i3/scripts" replacements) // entries;
78
79 services.redshift = {
80 enable = true;
81 provider = "geoclue2";
82 };
83
84 services.picom.enable = true;
85 };
86}