blob: 3fedb87f94cfa62482c6dacc9a416d2b511b7f6b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
{
config,
}: rec {
pkgs = (import ../pkgs.nix).stable {};
pkgs2305 = (import ../pkgs.nix).stable2305 {};
pkgsEdge = (import ../pkgs.nix).edge {};
xorgInnerEnv = pkgs.buildEnv {
name = "xorg-inner-env";
paths = [
pkgs.xorg.xorgserver
pkgs.xorg.xinit
pkgs.xorg.xauth
pkgs.xorg.xset
pkgs.xorg.xf86inputlibinput
pkgs.xorg.xrandr
pkgs.xsel
(pkgs.runCommand "xorg-conf-inner" {} ''
mkdir -p "$out"/share/X11/xorg.conf.d/
cp ${./xorg.conf} "$out"/share/X11/xorg.conf.d/99-loadout.conf
'')
];
};
xorgConf = pkgs.runCommand "xorg-conf" {} ''
cat >>"$out" <<EOF
Section "Files"
ModulePath "${xorgInnerEnv}/lib/xorg/modules"
EndSection
${config.xorgConfExtra}
EOF
for f in $(ls ${xorgInnerEnv}/share/X11/xorg.conf.d | sort); do
cat ${xorgInnerEnv}/share/X11/xorg.conf.d/"$f" >> "$out"
done
'';
startx = pkgs.writeShellScriptBin "startx" ''
# TODO pass .xinitrc into here, somehow
export XORGCONFIG=${xorgConf}
export PATH=${xorgInnerEnv}/bin:$PATH
exec startx
'';
# nativeWrap is used for apps which are not installed via nix which don't play
# nicely with it.
nativeWrap = pkgs.writeScriptBin "native-wrap" ''
#!${pkgs.bash}/bin/bash
unset XDG_CONFIG_DIRS
unset XDG_DATA_DIRS
unset GDK_PIXBUF_MODULE_FILE
exec "$@"
'';
browser = pkgs.writeScriptBin "browser" ''
#!${pkgs.bash}/bin/bash
exec ${nativeWrap}/bin/native-wrap ${config.browser} "$@"
'';
env = pkgs.buildEnv {
name = "awesome-env";
paths = [
pkgs.awesome
pkgs.tela-icon-theme
nativeWrap
browser
pkgs.pavucontrol
pkgs.xdg-utils
pkgs.arandr
pkgs.i3lock
pkgs.scrot
pkgs.feh
pkgs.brightnessctl
pkgs.cbatticon
pkgs.phwmon
pkgs2305.libreoffice
pkgs.gimp
pkgs.inkscape
pkgs.vlc
pkgs.sylpheed
pkgs.calibre
pkgsEdge.lagrange
];
};
wp = ../wallpapers;
dirsLua = pkgs.writeTextDir "dirs.lua" ''
home_dir = os.getenv("HOME").."/"
bin_dir = "${./bin}/"
share_dir = "${./share}/"
wp_dir = "${wp}/"
'';
awesome = pkgs.writeScriptBin "awesome" ''
#!${pkgs.bash}/bin/bash
set -e -x
export BROWSER=${browser}/bin/browser
# Turn off powersaving (fuck the environment)
xset -dpms
xset s off
export PATH=${env}/bin:$PATH
export XDG_CONFIG_DIRS=${./config}
export XDG_DATA_DIRS=${env}/share
export XDG_DATA_DIRS=$XDG_DATA_DIRS:/home/mediocregopher/.nix-profile/share
${config.awesome.startupExtra}
# HACK: This sleep is here because phwmon actually creates a separate tray
# icon for each thing it monitors, and if the process runs at the same time
# as another process which creates a tray icon they can get interleaved.
(sleep 5 && phwmon.py) &
############################################################################
# Init awesome
data_dir="$HOME/.local/share/awesome";
mkdir -p "$data_dir"
log_dir="$data_dir"/logs
mkdir -p $log_dir
# only keep last N awesome.log files
ls "$log_dir" | sort -n | head -n -5 | while read f; do rm "$log_dir"/"$f"; done
############################################################################
# Exec
this_log=$log_dir/awesome.$(date '+%Y%m%d.%H%M%S').log
echo "New awesome session starting" > $this_log
exec awesome \
-c ${./rc.lua} \
--search ${dirsLua} \
--search ${./share} \
--search ${env}/share/awesome/themes \
2>&1 2>>$this_log
'';
}
|