···156156 def xdg_config_path(app_name, filename) do
157157 case System.get_env("USER") do
158158 user when user != "root" ->
159159- System.get_env("XDG_CONFIG_HOME", Path.join(System.fetch_env!("HOME"), ".config"))
160160- |> Path.join(app_name)
161161- |> Path.join(filename)
159159+ xdg_path_file(:config, app_name, filename)
162160163161 _ ->
164162 Path.join(["/etc", app_name, filename])
···168166 def xdg_state_path(app_name) do
169167 case System.get_env("USER") do
170168 user when user != "root" ->
171171- System.get_env("XDG_STATE_HOME", Path.join(System.fetch_env!("HOME"), ".local/state"))
172172- |> Path.join(app_name)
169169+ case System.get_env("STATE_DIRECTORY") do
170170+ nil ->
171171+ xdg_path_file(:state, app_name, nil)
172172+173173+ state ->
174174+ state
175175+ end
173176174177 _ ->
175178 Path.join("/var/lib", app_name)
179179+ end
180180+ end
181181+182182+ defp xdg_path_file(:config, app_name, filename) do
183183+ case System.get_env("XDG_CONFIG_HOME", home_default(".config")) do
184184+ nil ->
185185+ nil
186186+187187+ path ->
188188+ path
189189+ |> Path.join(app_name)
190190+ |> Path.join(filename)
191191+ end
192192+ end
193193+194194+ defp xdg_path_file(:state, app_name, _filename) do
195195+ case System.get_env("XDG_STATE_HOME", home_default(".local/state")) do
196196+ nil ->
197197+ nil
198198+199199+ path ->
200200+ path
201201+ |> Path.join(app_name)
202202+ end
203203+ end
204204+205205+ defp home_default(subdir) do
206206+ case System.get_env("HOME") do
207207+ nil -> nil
208208+ home -> Path.join(home, subdir)
176209 end
177210 end
178211