blob: 135fbb74c0a5eec84aacbbf76e75f1839de5d072 (
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
|
;;; Consfigurator -- Lisp declarative configuration management system
;;; Copyright (C) 2015, 2021 Sean Whitton <spwhitton@spwhitton.name>
;;; This file is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3, or (at your option)
;;; any later version.
;;; This file is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;; You should have received a copy of the GNU General Public License
;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(in-package :consfigurator.property.locale)
(named-readtables:in-readtable :consfigurator)
(defprop %available :posix (locale)
(:desc (declare (ignore locale)) "/etc/locale.gen updated")
(:apply
(assert-remote-euid-root)
(file:map-remote-file-lines
"/etc/locale.gen"
(lambda (lines)
(loop with found
for line in lines
for start = (re:scan #?/\Q${locale}\E\b/ line)
if start
collect (subseq line start) and do (setq found t)
else
collect line
finally (unless found
(failed-change
#?"${locale} not found in /etc/locale.gen")))))))
(defproplist available :posix (locale)
"Ensure that the locale LOCALE is generated and available.
Fails if a locale is not available to be generated. That is, a commented out
entry for the locale and an accompanying charset must be present in
/etc/locale.gen.
Per Debian bug #684134 we cannot ensure a locale is generated by means of
APT:RECONFIGURE. So this property edits /etc/locale.gen manually."
(:desc #?"${locale} locale available")
(apt:installed "locales")
(on-change (%available locale)
(cmd:single "locale-gen")))
(defprop selected-for :posix (locale &rest locale-variables)
"Select a locale for a list of global locale variables.
A locale variable is of the form LC_FOO, LANG or LANGUAGE. See locale(5).
One might say
(locale:selected-for \"en_GB.UTF-8\" \"LC_PAPER\" \"LC_MONETARY\")
to select the British English locale for paper size and currency conventions.
Note that reverting this property does not make a locale unavailable. That's
because it might be required for other applications of this property."
(:desc (format nil "~A locale selected for ~{~A~^ ~}"
locale locale-variables))
(:hostattrs
(declare (ignore locale locale-variables))
(os:required 'os:debianlike))
(:apply
(ignoring-hostattrs (available locale))
(with-change-if-changes-file-content ("/etc/default/locale")
(mrun "update-locale"
(mapcar (lambda (v) (strcat v "=" locale)) locale-variables))))
(:unapply
(declare (ignore locale))
(with-change-if-changes-file-content ("/etc/default/locale")
(mrun "update-locale" locale-variables))))
|