summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
l---------config.hs2
-rwxr-xr-xdebian/rules2
-rw-r--r--doc/coding_style.mdwn2
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging.mdwn27
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment12
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment8
-rw-r--r--doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment13
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn13
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment16
-rw-r--r--doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment7
-rw-r--r--doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn41
-rw-r--r--doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment9
-rw-r--r--doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment12
-rw-r--r--doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment7
-rw-r--r--doc/forum/howto_mapM_RevertableProperty.mdwn52
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment22
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment23
-rw-r--r--doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment11
-rw-r--r--doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn20
-rw-r--r--doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment9
-rw-r--r--doc/news/version_2.10.0.mdwn4
-rw-r--r--doc/news/version_2.12.0.mdwn18
-rw-r--r--doc/news/version_2.13.0.mdwn27
-rw-r--r--doc/news/version_2.14.0.mdwn14
-rw-r--r--doc/news/version_2.15.0.mdwn29
-rw-r--r--doc/news/version_2.15.1.mdwn11
-rw-r--r--doc/news/version_2.15.2.mdwn9
-rw-r--r--doc/news/version_2.15.3.mdwn5
-rw-r--r--doc/news/version_2.8.1.mdwn13
-rw-r--r--doc/news/version_2.9.0.mdwn35
-rw-r--r--doc/todo/Fix___40__-__62__-__41___signature_in_Propellor.Types.Container.mdwn4
-rw-r--r--doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn10
-rw-r--r--doc/todo/concurrency.mdwn3
-rw-r--r--doc/todo/concurrency/comment_1_0c428752e38798f0e8c8a72457c0a670._comment8
-rw-r--r--doc/todo/concurrency/comment_2_d259eb0ff27327cc94542c9374d3da90._comment8
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn17
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment27
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment9
-rw-r--r--doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment9
-rw-r--r--doc/todo/pull_request:_Git.bareRepoDefaultBranch_property.mdwn7
-rw-r--r--doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn1
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn15
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment17
-rw-r--r--doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn6
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment32
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment17
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment14
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment10
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment20
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment7
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment21
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment9
-rw-r--r--doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment17
-rw-r--r--doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git.mdwn9
-rw-r--r--doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git/comment_1_d1ed8af3172ada81d166063f0b38e23a._comment11
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files.mdwn1
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment20
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files/comment_2_2e37e89b8f108f027d2d8c5962a24536._comment9
-rw-r--r--doc/todo/should_not_overwrite_unchanged_private_files/comment_3_5e7127049c1798dfc830d33da0fd78d7._comment8
-rw-r--r--doc/todo/silence_xargs_when_hothasktags_not_installed.mdwn9
-rw-r--r--privdata.joey/keyring.gpgbin113014 -> 0 bytes
-rw-r--r--privdata.joey/privdata.gpg1343
-rw-r--r--src/Propellor/PrivData/Paths.hs2
68 files changed, 769 insertions, 1443 deletions
diff --git a/config.hs b/config.hs
index 07959a0a..ec313725 120000
--- a/config.hs
+++ b/config.hs
@@ -1 +1 @@
-config-joey.hs \ No newline at end of file
+config-simple.hs \ No newline at end of file
diff --git a/debian/rules b/debian/rules
index c88cc004..a71212db 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,4 +1,4 @@
-#!/bin/false
+#!/usr/bin/make -f
# Avoid using cabal, as it writes to $HOME
export CABAL=./Setup
diff --git a/doc/coding_style.mdwn b/doc/coding_style.mdwn
index 219b367c..92553d76 100644
--- a/doc/coding_style.mdwn
+++ b/doc/coding_style.mdwn
@@ -107,3 +107,5 @@ Note for emacs users: You can put the following snippet into a file called
(fill-column . 80)))
;; Warn about spaces used for indentation:
(haskell-mode . ((eval . (highlight-regexp "^ *")))))
+
+Also consider [haskell-tab-indent-mode](https://spwhitton.name/tech/code/haskell-tab-indent/). The standard indentation modes that come with haskell-mode do not work well with tabs for indentation. This mode works well for hacking on Propellor.
diff --git a/doc/forum/Fail_to_push_changes_when_merging.mdwn b/doc/forum/Fail_to_push_changes_when_merging.mdwn
new file mode 100644
index 00000000..62bb314d
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging.mdwn
@@ -0,0 +1,27 @@
+I use a single propellor configuration repository shared across multiple hosts, but we don't have a central repository, e.g. we don't set origin on master branch so propellor do not push/pull from central repository when updating. That works fine as long as we do not merge branches. When we do we encounter the following error:
+
+ remote: Counting objects: 108, done.
+ remote: Compressing objects: 100% (105/105), done.
+ remote: Total 108 (delta 53), reused 0 (delta 0) s
+ Receiving objects: 100% (108/108), 41.16 KiB | 22.00 KiB/s, done.
+ Resolving deltas: 100% (53/53), completed with 19 local objects.
+ From .
+ * branch HEAD -> FETCH_HEAD
+
+ *** Please tell me who you are.
+
+ Run
+
+ git config --global user.email "you@example.com"
+ git config --global user.name "Your Name"
+
+ to set your account's default identity.
+ Omit --global to set the identity only in this repository.
+
+ fatal: unable to auto-detect email address (got 'root@lending-test.(none)')
+ propellor: <stdout>: hIsTerminalDevice: illegal operation (handle is closed)
+
+I do not understand properly how propellor does propagate changes in this case so I am unable to fix this issue in a sane way. What we currently do is simply log in in the server and wipe out propellor repo there, which works but kind of defeat the whole purpose of automated configuration management.
+
+Could you please advise on how we can fix this issue? Simply having a central repository would do the trick I guess, but is there another solution?
+
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment
new file mode 100644
index 00000000..751d701a
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_1_a44e03cbce4c996e136f917d8e06a7bb._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 1"
+ date="2015-12-08T01:20:26Z"
+ content="""
+It looks like git is failing because it can't autodetect an e-mail address for root on the target machine. This might be because the target machine does not have a FQDN, but I'm not sure. Try logging into the target machine as root and running
+
+ git config --global user.email root@lending-test.local
+ git config --global user.name root
+
+as it suggests.
+"""]]
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment
new file mode 100644
index 00000000..47eb9f6a
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_2_4c8e1d9409b8ecfc465550fbbf5c0708._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="arnaud@30aba4d9f1742050874551d3ddc55ca8694809f8"
+ nickname="arnaud"
+ subject="comment 2"
+ date="2015-12-08T07:04:21Z"
+ content="""
+Thanks, I will try that. But why does it not happen when updating with fast-forward?
+"""]]
diff --git a/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment b/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment
new file mode 100644
index 00000000..a59296a0
--- /dev/null
+++ b/doc/forum/Fail_to_push_changes_when_merging/comment_3_bdf54ac096c994c33d661b454d89c770._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-12-08T15:53:27Z"
+ content="""
+Looks like a lacking FQDN indeed. There's a property to fix that! ;)
+
+Git is also picky about the user having a name.
+
+AFAIK, git does not make commits for fast-forward merges, but it does for
+non-fast-forward merges. I suspect that it's making such a merge in your
+case.
+"""]]
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn
new file mode 100644
index 00000000..45f85767
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring.mdwn
@@ -0,0 +1,13 @@
+ Obnam.backupEncrypted "/" (Cron.Times "44 2 * * *") [] Obnam.OnlyClient (Gpg.GpgKeyId "XXXXXX")
+
+ $ propellor --spin myhost
+ myhost apt installed obnam ... ok
+ gpg: key XXXXXX: already in secret keyring
+ gpg: Total number processed: 1
+ gpg: secret keys read: 1
+ gpg: secret keys unchanged: 1
+ ** warning: user error (su ["-c","gpg --import","root"] exited 2)
+ myhost / backed up by obnam ... failed
+ myhost overall ... failed
+ Shared connection to myhost closed.
+ propellor: remote propellor failed
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment
new file mode 100644
index 00000000..c65cc5cd
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_1_c9a24f6022fbe9063356df3ddbd767d6._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-11T16:41:30Z"
+ content="""
+More accurately, it's Gpg.keyImported that's failing, and this is because
+it's implemented using a flagFile to remember if it's imported the gpg key
+before. So the fix would be to implement:
+
+ hasPrivKey :: GpgKeyId -> User -> IO Bool
+
+ hasPubKey :: GpgKeyId -> User -> IO Bool
+
+And then Gpg.keyImported could use those with `check` to avoid redundant
+import.
+"""]]
diff --git a/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment
new file mode 100644
index 00000000..8592e7e1
--- /dev/null
+++ b/doc/forum/Obnam.backupEncrypted_fails_if_gpg_key_is_already_in_keyring/comment_2_2300ca8616f5bd229bf7b72a6fb96980._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2015-12-13T20:45:06Z"
+ content="""
+OK, I'll try to implement something this way :).
+"""]]
diff --git a/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn
new file mode 100644
index 00000000..c9f5ec8b
--- /dev/null
+++ b/doc/forum/Script_to_convert_config_files_for_inclusion_in_Propellor_config.mdwn
@@ -0,0 +1,41 @@
+This script turns
+
+ Section "Monitor"
+ Identifier "Configured Monitor"
+ EndSection
+
+into this:
+
+ [ "Section \"Monitor\""
+ , "\tIdentifier \"Configured Monitor\""
+ , "EndSection"
+ ]
+
+for the inclusion of short config files in your Propellor config using `File.hasContent`.
+
+[[!format haskell """
+#!/usr/bin/runhaskell
+
+main = interact $ unlines . propellorLines . lines
+
+propellorLines :: [String] -> [String]
+propellorLines (x:xs) = ("[ " ++ wrapEscapeLine x) : propellorLines' xs
+
+propellorLines' :: [String] -> [String]
+propellorLines' = foldr step ["]"]
+ where
+ step x xs = (", " ++ wrapEscapeLine x) : xs
+
+wrapEscapeLine :: String -> String
+wrapEscapeLine line = "\"" ++ (foldr step "" line) ++ "\""
+ where
+ step x xs
+ | x == '\t' = "\\t" ++ xs
+ | x == '\\' = x : x : xs
+ | x == '"' = '\\' : x : xs
+ | otherwise = x : xs
+"""]]
+
+Usage: `cat config_file | propellor_lines` (or in Emacs, dump the config file into your propellor config, select the region and use `C-u M-|` to pipe it through).
+
+-- [[spwhitton|https://spwhitton.name]]
diff --git a/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment b/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment
new file mode 100644
index 00000000..d7fe1dd5
--- /dev/null
+++ b/doc/forum/Systemd.container_produces_non-standard_systemd_container/comment_4_5dc1c3ee7f111fcc36c72487b7713854._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="jerryjacobs1989@d19093c366dfb2959c549ed1aff6175ddc7a7a5b"
+ nickname="jerryjacobs1989"
+ subject="Thank you"
+ date="2015-11-29T13:04:56Z"
+ content="""
+I was bitten also by this weird error message and have submitted it upstream:
+https://github.com/systemd/systemd/issues/2060
+"""]]
diff --git a/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment b/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment
new file mode 100644
index 00000000..d8233cee
--- /dev/null
+++ b/doc/forum/gnupg2/comment_2_9070abc82d8aa259aca187ed5d6638cc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-12-30T19:02:30Z"
+ content="""
+I've merged a patch that adds a GNUPGBIN environment variable.
+
+It might make sense for propellor to look at git's gpg.program
+configuration and use it if set. Probably a propellor user wants to use the
+same gpg program for both signing and verifying their git commit and for
+propellor's privdata.
+"""]]
diff --git a/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment b/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment
new file mode 100644
index 00000000..ead20fb6
--- /dev/null
+++ b/doc/forum/gnupg2/comment_3_996fe5791c175d709217875b5e751c4f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-01-03T20:57:42Z"
+ content="""
+gpg.program is also honored now
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty.mdwn b/doc/forum/howto_mapM_RevertableProperty.mdwn
new file mode 100644
index 00000000..7ebcbd47
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty.mdwn
@@ -0,0 +1,52 @@
+Hello
+
+I have this kind of property
+
+ myProperty :: Conf -> RevertableProperty NoInfo
+
+
+now I have a [Conf] and I want to create also a RevertableProperty NoInfo which apply myProperty for each Conf
+
+I tried to find an equivalent of mapM for properties but I found nothing which works as expected.
+
+I tried with combineProperties but it failed also with a "cryptic message"
+mpoints is the [Conf]
+
+
+ src/config.hs:250:17:
+ Couldn't match type `CInfo
+ (PropertyListType (Property [NoInfo]))
+ (PropertyListType (Property [NoInfo]))'
+ with `NoInfo'
+ Expected type: RevertableProperty NoInfo
+ Actual type: RevertableProperty
+ (CInfo
+ (PropertyListType (Property [NoInfo]))
+ (PropertyListType (Property [NoInfo])))
+ In the expression: mount <!> umount
+ In an equation for `mountExp':
+ mountExp b
+ = mount <!> umount
+ where
+ mount
+ = combineProperties
+ "mount nfs files" (mapM mount'' mpoints)
+ umount
+ = combineProperties
+ "umount nfs files" (mapM umount'' mpoints)
+ mpoints
+ = [MountConf
+ "nfs"
+ ("ruche-"
+ ++
+ beamline ++ ".mydomain.org:/" ++ beamline ++ "-users")
+ ("/nfs/ruche-" ++ beamline ++ "/" ++ beamline ++ "-users"),
+ ....]
+ beamline = show b
+
+What is the right way to create a RevertableProperty from a list of RevertableProperty
+
+thanks
+
+Frederic
+
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment b/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment
new file mode 100644
index 00000000..66ac9a4f
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_1_c2800340a5361add82f5e9e30b56b18c._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-02-08T15:00:26Z"
+ content="""
+combineProperties takes a list of PropertyListType, which is a type family
+consisting of [Property NoInfo] and [Property HasInfo]. So, you need to get
+from RevertableProperty NoInfo to one of those. `toProp` can do that.
+
+ combineProperties "desc" (map (toProp . myProperty) confs)
+
+But! I had a look and it was easy to make [RevertableProperty i] an
+instance of PropertyListType, which makes what you already tried type check
+too. I've done so in git.
+
+It would perhaps be nice to make lists of various sorts of properties
+instances of Traversable, so that mapM etc could be used over them. That
+would need some kind of monad for combining properties though, which does
+not currently exist. Might make more sense to make an instance of Foldable
+or just Monoid for properties. Any improvements in this area would be
+appreciated!
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment b/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment
new file mode 100644
index 00000000..20f6e640
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_2_1327f1f218433ce262f871771c43452c._comment
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="picca"
+ subject="comment 2"
+ date="2016-02-10T06:41:49Z"
+ content="""
+Thanks a lot joey :)
+
+I am learning haskell for now and I am not very confortable yet with the haskell Monoid, functor, applicative and monad.
+
+So what you are saying is that it would be great to do something like
+
+ instance monoid Property where
+ mempty = doNothing
+ mappend p1 p2 = combineProperty [p1, p2]
+ mconcat ps = combineProperty ps
+
+in order to combine properties.
+my question is why did you choose to create combineProperty instead of a Monoid at first ?
+
+thanks
+
+Frederic
+"""]]
diff --git a/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment b/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment
new file mode 100644
index 00000000..79ca2d93
--- /dev/null
+++ b/doc/forum/howto_mapM_RevertableProperty/comment_3_7e519cc5f1c07b66561ec31866ddbc8a._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-02-10T16:09:08Z"
+ content="""
+Would probably be better to use `before`, since `combineProperties`
+needs a description of the combined properties.
+
+Using `doNothing` is kind of a hack, it would make propellor say it was
+running "noop property". Perhaps better to use a SemiGroup than a Monoid.
+"""]]
diff --git a/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn b/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn
new file mode 100644
index 00000000..7676a8a3
--- /dev/null
+++ b/doc/forum/propellor_2.15.2_does_not_work_on_jessie.mdwn
@@ -0,0 +1,20 @@
+Hello, I am trying to use propellor 2.15.2 on jessie.
+
+but when I do
+
+runhaskell config.hs, I get this error message
+
+
+ Propellor/Git.hs:10:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:14:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:18:9 Not in scope: `<$>'
+
+ Propellor/Git.hs:22:21 Not in scope: `<$>'
+
+maybe an import is missing with ghc 7.6.3
+
+Cheers
+
+Frederic
diff --git a/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment b/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment
new file mode 100644
index 00000000..f3af56ee
--- /dev/null
+++ b/doc/forum/propellor_2.15.2_does_not_work_on_jessie/comment_1_eafe3affdad32bc9f4493a938f71d83f._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-01-12T16:39:26Z"
+ content="""
+Yes, unfortuntely by importing Control.Applicative by default, newer
+versions of ghc make it rather harder to produce code that will build on
+older versions too. I've added these imports.
+"""]]
diff --git a/doc/news/version_2.10.0.mdwn b/doc/news/version_2.10.0.mdwn
deleted file mode 100644
index 67d08c88..00000000
--- a/doc/news/version_2.10.0.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-propellor 2.10.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * The Propellor.Property.Spin added in the last release is replaced
- with a very different Propellor.Property.ControlHeir."""]] \ No newline at end of file
diff --git a/doc/news/version_2.12.0.mdwn b/doc/news/version_2.12.0.mdwn
deleted file mode 100644
index 58a7193c..00000000
--- a/doc/news/version_2.12.0.mdwn
+++ /dev/null
@@ -1,18 +0,0 @@
-propellor 2.12.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * The DiskImage module can now make bootable images using grub.
- * Add a ChrootTarball chroot type, for using pre-built tarballs
- as chroots. Thanks, Ben Boeckel.
- * HostName: Improve domain extraction code.
- * Added Mount.fstabbed property to generate /etc/fstab to replicate
- current mounts.
- * HostName: Improve domain extraction code.
- * Add File.basedOn. Thanks, Per Olofsson.
- * Changed how the operating system is provided to Chroot (API change).
- Where before debootstrapped and bootstrapped took a System parameter,
- the os property should now be added to the Chroot.
- * Follow-on change to Systemd.container, which now takes a System parameter.
- * Generalized Property.check so it can be used with Propellor actions as
- well as IO actions.
- * Hostname.sane and Hostname.setTo can now safely be used as a property
- of a chroot, and won't affect the hostname of the host system."""]] \ No newline at end of file
diff --git a/doc/news/version_2.13.0.mdwn b/doc/news/version_2.13.0.mdwn
deleted file mode 100644
index c3cb8828..00000000
--- a/doc/news/version_2.13.0.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-propellor 2.13.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * RevertableProperty used to be assumed to contain info, but this is
- now made explicit, with RevertableProperty HasInfo or
- RevertableProperty NoInfo. (API change)
- Transition guide:
- - If you define a RevertableProperty, expect some type check
- failures like: "Expecting one more argument to ‘RevertableProperty’".
- - Change it to "RevertableProperty NoInfo"
- - The compiler will then tell you if it needs "HasInfo" instead.
- - If you have code that uses the RevertableProperty constructor
- that fails to type check, use the more powerful &lt;!&gt; operator
- instead to create the RevertableProperty.
- * Various property combinators that combined a RevertableProperty
- with a non-revertable property used to yield a RevertableProperty.
- This was a bug, because the combined property could not be fully
- reverted in many cases, and the result is now a non-revertable property.
- * combineWith now takes an additional parameter to control how revert
- actions are combined (API change).
- * Added Propellor.Property.Concurrent for concurrent properties.
- * Made the execProcess exported by propellor, and everything built on it,
- avoid scrambled output when run concurrently.
- * Propellor now depends on STM and text.
- * The cabal file now builds propellor with -O. While -O0 makes ghc
- take less memory while building propellor, it can lead to bad memory
- usage at runtime due to eg, disabled stream fusion.
- * Add File.isCopyOf. Thanks, Per Olofsson."""]] \ No newline at end of file
diff --git a/doc/news/version_2.14.0.mdwn b/doc/news/version_2.14.0.mdwn
new file mode 100644
index 00000000..2a6e7bda
--- /dev/null
+++ b/doc/news/version_2.14.0.mdwn
@@ -0,0 +1,14 @@
+propellor 2.14.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Add Propellor.Property.PropellorRepo.hasOriginUrl, an explicit way to
+ set the git repository url normally implicitly set when using --spin.
+ * Added Chroot.noServices property.
+ * DiskImage creation automatically uses Chroot.noServices.
+ * Removed the (unused) dependency on quickcheck.
+ * DebianMirror: Added a DebianMirror type for configuration (API change)
+ Thanks, Félix Sipma.
+ * DebianMirror: Add RsyncExtra to configuration.
+ Thanks, Félix Sipma.
+ * Added Git.repoConfigured and Git.repoAcceptsNonFFs properties.
+ Thanks, Sean Whitton
+ * Added User.hasDesktopGroups property."""]] \ No newline at end of file
diff --git a/doc/news/version_2.15.0.mdwn b/doc/news/version_2.15.0.mdwn
new file mode 100644
index 00000000..ebd847e2
--- /dev/null
+++ b/doc/news/version_2.15.0.mdwn
@@ -0,0 +1,29 @@
+propellor 2.15.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added UncheckedProperty type, along with unchecked to indicate a
+ Property needs its result checked, and checkResult and changesFile
+ to check for changes.
+ * Properties that run an arbitrary command, such as cmdProperty
+ and scriptProperty are converted to use UncheckedProperty, since
+ they cannot tell on their own if the command truely made a change or not.
+ (API Change)
+ Transition guide:
+ - When GHC complains about an UncheckedProperty, add:
+ `assume` MadeChange
+ (Since these properties used to always return MadeChange, that
+ change is always safe to make.)
+ - Or, if you know that the command should modifiy a file, use:
+ `changesFile` filename
+ * The `trivial` combinator has been removed. (API change)
+ Instead, use:
+ `assume` NoChange
+ Or, better, use changesFile or checkResult to accurately report
+ when a property makes a change.
+ * A few properties have had their Result improved, for example
+ Apt.buldDep and Apt.autoRemove now check if a change was made or not.
+ * User.hasDesktopGroups changed to avoid trying to add the user to
+ groups that don't exist.
+ * Added Postfix.saslPasswdSet.
+ * Added Propellor.Property.Locale.
+ Thanks, Sean Whitton.
+ * Added Propellor.Property.Fail2Ban."""]] \ No newline at end of file
diff --git a/doc/news/version_2.15.1.mdwn b/doc/news/version_2.15.1.mdwn
new file mode 100644
index 00000000..ea750b6a
--- /dev/null
+++ b/doc/news/version_2.15.1.mdwn
@@ -0,0 +1,11 @@
+propellor 2.15.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added git configs propellor.spin-branch and propellor.forbid-dirty-spin.
+ Thanks, Sean Whitton.
+ * Added User.systemAccountFor and User.systemAccountFor' properties.
+ Thanks, Félix Sipma.
+ * Gpg.keyImported converted to not use a flag file and instead check
+ if gpg has the provided key already.
+ Thanks, Félix Sipma.
+ * Merged Utility changes from git-annex.
+ * Clean build with ghc 7.10."""]] \ No newline at end of file
diff --git a/doc/news/version_2.15.2.mdwn b/doc/news/version_2.15.2.mdwn
new file mode 100644
index 00000000..b1a3bf80
--- /dev/null
+++ b/doc/news/version_2.15.2.mdwn
@@ -0,0 +1,9 @@
+propellor 2.15.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added GNUPGBIN environment variable or git.program git config
+ to control the command run for gpg. Allows eg, GNUPGBIN=gpg2
+ Thanks, Félix Sipma.
+ * Bootstrap apt-get installs run with deconf noninteractive frontend.
+ * spin --via: Avoid committing on relay host.
+ * Postfix: Add service property to enable/disable services in master.cf.
+ * Added Munin module, contributed by Jelmer Vernooij."""]] \ No newline at end of file
diff --git a/doc/news/version_2.15.3.mdwn b/doc/news/version_2.15.3.mdwn
new file mode 100644
index 00000000..a8a2a53e
--- /dev/null
+++ b/doc/news/version_2.15.3.mdwn
@@ -0,0 +1,5 @@
+propellor 2.15.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added Git.bareRepoDefaultBranch property
+ Thanks, Sean Whitton.
+ * Add missing Control.Applicative imports needed by older versions of ghc."""]] \ No newline at end of file
diff --git a/doc/news/version_2.8.1.mdwn b/doc/news/version_2.8.1.mdwn
deleted file mode 100644
index fafde5e4..00000000
--- a/doc/news/version_2.8.1.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-propellor 2.8.1 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Guard against power loss etc when building propellor, by updating
- the executable atomically.
- * Added Logcheck module, contributed by Jelmer Vernooij.
- * Added Kerberos module, contributed by Jelmer Vernooij.
- * Privdata that uses HostContext inside a container will now have the
- name of the container as its context, rather than the name of
- the host(s) where the container is used. This allows eg, having different
- passwords for a user in different containers. Note that previously,
- propellor would prompt using the container name as the context, but
- not actually use privdata using that context; so this is a bug fix.
- * Fix --add-key to not fail committing when no privdata file exists yet."""]] \ No newline at end of file
diff --git a/doc/news/version_2.9.0.mdwn b/doc/news/version_2.9.0.mdwn
deleted file mode 100644
index ef445452..00000000
--- a/doc/news/version_2.9.0.mdwn
+++ /dev/null
@@ -1,35 +0,0 @@
-propellor 2.9.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Added basic Uwsgi module, maintained by Félix Sipma.
- * Add Apt.hasForeignArch. Thanks, Per Olofsson.
- * Improved documentation, particularly of the Propellor module.
- * The Propellor module no longer exports many of the things it used to,
- being now focused on only what's needed to write config.hs.
- Use Propellor.Base to get all the things exported by Propellor before.
- (API change)
- * Some renaming of instance methods, and moving of functions to more
- appropriate modules. (API change)
- * Added File.isSymlinkedTo. Thanks, Per Olofsson.
- * fileProperty, and properties derived from it now write the new
- file content via origfile.propellor-new~, instead of to a randomly named
- temp file. This allows them to clean up any temp file that may have
- been left by an interrupted run of propellor.
- * Added Propellor.Property.Spin, which can be used to make a host be a
- controller of other hosts, which will automatically spin them each time
- propellor is run.
- * Ssh.keyImported is replaced with Ssh.userKeys. (API change)
- The new property only gets the private key from the privdata; the
- public key is provided as a parameter, and so is available as
- Info that other properties can use.
- * Ssh.keyImported' is renamed to Ssh.userKeyAt, and also changed
- to only import the private key from the privdata. (API change)
- * While Ssh.keyImported and Ssh.keyImported' avoided updating existing
- keys, the new Ssh.userKeys and Ssh.userKeyAt properties will
- always update out of date key files.
- * Ssh.pubKey renamed to Ssh.hostPubKey. (API change)
- * Added --unset-unused
- * Fix typo: propigate → propagate. Thanks, Felix Gruber.
- (A minor API change)
- * Chroot: Converted to use a ChrootBootstrapper type class, so
- other ways to bootstrap chroots can easily be added in separate
- modules. (API change)"""]] \ No newline at end of file
diff --git a/doc/todo/Fix___40__-__62__-__41___signature_in_Propellor.Types.Container.mdwn b/doc/todo/Fix___40__-__62__-__41___signature_in_Propellor.Types.Container.mdwn
new file mode 100644
index 00000000..58c9b5ca
--- /dev/null
+++ b/doc/todo/Fix___40__-__62__-__41___signature_in_Propellor.Types.Container.mdwn
@@ -0,0 +1,4 @@
+Please merge this commit
+https://github.com/miniBill/propellor/commit/0d9cd127c3448998aa4e4d20a8ce4083ee4b4362
+
+> [[done]], thanks --[[Joey]]
diff --git a/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn b/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn
new file mode 100644
index 00000000..b6e1ec20
--- /dev/null
+++ b/doc/todo/User.hasDesktopGroups:_debian-tor_group_doesn__39__t_necessarily_exist.mdwn
@@ -0,0 +1,10 @@
+The new `User.hasDesktopGroups` tries to add a user to the group `debian-tor` which fails if this group does not exist.
+
+What package creates this group? If someone could let me know that, I will patch `User.hasDesktopGroups` to only try to add a user to `debian-tor` if `Apt.isInstalled "blah"` is true.
+
+Or perhaps Joey added this group because this group exists by default on Debian Unstable. If so then a check can be inserted for that.
+
+--[[spwhitton|https://spwhitton.name/]]
+
+> Noticed that too and made it only add the user to existant groups, which
+> is the same approach user-setup uses. [[done]] --[[Joey]]
diff --git a/doc/todo/concurrency.mdwn b/doc/todo/concurrency.mdwn
index fa0e22ea..0d1dc847 100644
--- a/doc/todo/concurrency.mdwn
+++ b/doc/todo/concurrency.mdwn
@@ -109,3 +109,6 @@ responsible for such output, but it could be printed out, with appropriate
warnings, at the end.
[[!tag user/joey]]
+
+> [[done]]; use Propellor.Property.Concurrent to make properties run
+> concurrently. --[[Joey]]
diff --git a/doc/todo/concurrency/comment_1_0c428752e38798f0e8c8a72457c0a670._comment b/doc/todo/concurrency/comment_1_0c428752e38798f0e8c8a72457c0a670._comment
new file mode 100644
index 00000000..f5505140
--- /dev/null
+++ b/doc/todo/concurrency/comment_1_0c428752e38798f0e8c8a72457c0a670._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="cmt.miniBill@1ee673129c276f72c8d7c2974091af7618a22c2a"
+ nickname="cmt.miniBill"
+ subject="Output"
+ date="2016-02-01T23:09:49Z"
+ content="""
+Didn't you solve the output problem for git-annex?
+"""]]
diff --git a/doc/todo/concurrency/comment_2_d259eb0ff27327cc94542c9374d3da90._comment b/doc/todo/concurrency/comment_2_d259eb0ff27327cc94542c9374d3da90._comment
new file mode 100644
index 00000000..b2f2e192
--- /dev/null
+++ b/doc/todo/concurrency/comment_2_d259eb0ff27327cc94542c9374d3da90._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2016-02-02T16:04:31Z"
+ content="""
+Oh I forgot to close this. Propellor has had Propellor.Property.Concurrent
+for a while.
+"""]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn
new file mode 100644
index 00000000..fad2a1e0
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN.mdwn
@@ -0,0 +1,17 @@
+I'd like to patch the `/usr/bin/propellor` wrapper to check for two environment variables. I'm posting my proposal here to see whether Joey would be willing to merge such a patch before starting to write it.
+
+# Proposal
+
+- if the branch currently checked out in the `~/.propellor` repository does not match `PROPELLOR_SPIN_BRANCH`, Propellor would refuse to spin
+
+- if the `PROPELLOR_DIRTY_NOSPIN` variable is set, Propellor would refuse to spin if the `~/.propellor` repository contains uncommitted changes
+
+# Rationale
+
+`PROPELLOR_SPIN_BRANCH` is to prevent foot-shooting. When working on a feature branch one might forget to check out one's usual config branch before spinning. If the host that is spun is configured with `Cron.runPropellor`, it will be set to pull from the feature branch. If the user doesn't realise that this has happened, they might make further commits to their usual config branch and expect them to have propagated to the host by means of its `Cron.runPropellor` cronjob, but they won't reach the host until the next manual spin from the correct branch. Of course there are other possible foot-shootings available in this area that this environment variable would prevent.
+
+`PROPELLOR_DIRTY_NOSPIN` is to prevent configuration changes ending up in commits made with the undescriptive commit message "propellor spin". I understand that it doesn't bother Joey, but I want all configuration changes to be recorded with a descriptive commit message because it makes using `git revert` and `git cherry-pick` easier. So for users like me this environment variable is a useful check.
+
+--[[spwhitton|https://spwhitton.name]]
+
+> nice work! [[merged|done]] --[[Joey]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment
new file mode 100644
index 00000000..9b9ea864
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_1_432c6009fbe2309af81a47658173f753._comment
@@ -0,0 +1,27 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-06T21:14:36Z"
+ content="""
+I'd use `PROPELLOR_SPIN_BRANCH`. No objections to `PROPELLOR_DIRTY_NOSPIN`
+as long as it's not default.
+
+Note that Cron.runPropellor does not use /usr/bin/propellor, and there are
+other ways of running propellor that don't use that wrapper. So I don't
+think the wrapper is the place to implement this kind of thing.
+
+Why use environment variables for configuration? That makes it hard to make
+sure propellor gets the same configuration every way it can be run. And,
+propellor has a config file. :)
+
+Implementation could be something like, add a `configuredMain` that takes a
+monoidial configuration value for such global config settings.
+(so `defaultMain = configuredMain mempty`)
+
+Hmm, I suppose the issue with `PROPELLOR_SPIN_BRANCH` is that when a
+different branch is checked out, that branch's config.hs would not have that
+configured, or would perhaps set it to use that branch. So, that's why
+you were thinking environment variables?
+
+Maybe use git-config?
+"""]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment
new file mode 100644
index 00000000..045cd927
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_2_3ddaec3927b4a4aefad45a02e83476dc._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 2"
+ date="2015-12-06T22:24:06Z"
+ content="""
+I was thinking environment variables because I saw both of these as just safety checks for the user, spinning hosts from their xterm on their laptop. I'll implement both as `git-config` variables; that's a good idea as it covers more cases.
+
+I don't think that this patch need touch the propellor executable run by `Cron.runPropellor`, because if the check has already ensured that the correct branch got pushed to the host during the most recent spin, then `propellor_cronjob` is guaranteed to pull the correct branch.
+"""]]
diff --git a/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment
new file mode 100644
index 00000000..ca22b1d3
--- /dev/null
+++ b/doc/todo/proposal:_env_vars_PROPELLOR__95__SPIN__95__BRANCH___38___PROPELLOR__95__DIRTY__95__NOSPIN/comment_3_cf7b9d698c67e7a12d07a53667241092._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 3"
+ date="2015-12-06T23:58:51Z"
+ content="""
+I've implemented these in the `safetychecks` branch of `https://git.spwhitton.name/propellor`.
+
+A nice side effect of my implementation is that the spin only errors out after there's been an attempt to compile Propellor. So you can run `propellor --spin` in order to have GHC typecheck your code on a feature branch.
+"""]]
diff --git a/doc/todo/pull_request:_Git.bareRepoDefaultBranch_property.mdwn b/doc/todo/pull_request:_Git.bareRepoDefaultBranch_property.mdwn
new file mode 100644
index 00000000..038ab876
--- /dev/null
+++ b/doc/todo/pull_request:_Git.bareRepoDefaultBranch_property.mdwn
@@ -0,0 +1,7 @@
+Please consider merging branch `defaultbranch` of repo `https://git.spwhitton.name/propellor`.
+
+This branch adds a new property `Git.bareRepoDefaultBranch` which sets the default branch of a bare repository. This is useful when hosting git repositories that don't have a master branch, so that something gets checked out when someone clones them.
+
+I limited this property to bare repositories since the notion of a default branch for a non-bare repository doesn't really make sense.
+
+> [[merged|done]] --[[Joey]]
diff --git a/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn b/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
index 6bdd0b42..c1df5461 100644
--- a/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
+++ b/doc/todo/pull_request:_Git.repoConfigured_and_Git.repoAcceptsNonFFs_properties.mdwn
@@ -10,3 +10,4 @@ This branch adds
Note that `Git.repoConfigured` uses a tuple instead of just two function arguments in order that it can be used infix in `config.hs` when connected to other properties with `&`, as `ConfFile.containsIniSetting`.
> [[done]], thank you (had to fix some indents) --[[Joey]]
+>> Sorry about that! Thought I had Emacs set up for your style guide. --spwhitton
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn
new file mode 100644
index 00000000..b34118f0
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties.mdwn
@@ -0,0 +1,15 @@
+Please consider merging branch `locale` of repo `https://git.spwhitton.name/propellor`
+
+It adds the following properties:
+
+- `Locale.selectedFor` to choose a locale for a locale variable
+- `Locale.available`, used by `Locale.selectedFor` to ensure a locale is generated
+
+Example usage (I'm British but I live in the US):
+
+ & "en_GB.UTF-8" `Locale.selectedFor` ["LANG", "LANGUAGE"]
+ & "en_US.UTF-8" `Locale.selectedFor` ["LC_PAPER"]
+
+Pretty sure I've got the indentation right this time too ;)
+
+> merged, thanks! [[done]] --[[Joey]]
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment
new file mode 100644
index 00000000..4d413c84
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_1_3c528827f40420e3f4001f69127a0c51._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-11-25T15:24:10Z"
+ content="""
+The types here don't tell me much about what values it expects.
+
+`selectedFor :: String -> [String] -> Property NoInfo`
+
+Function needs either some examples in its haddock, or better types.
+
+Also, the `available` property incorrectly succeeds if the locale passed to
+it is not listed in locale.gen.
+
+(It would be nice for these properties to be revertable but that's just a
+thought.)
+"""]]
diff --git a/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment
new file mode 100644
index 00000000..e8801aba
--- /dev/null
+++ b/doc/todo/pull_request:_Locale.selectedFor_and_Locale.available_properties/comment_2_981a305c50d699fd3d06c39ca66107ea._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 2"
+ date="2015-11-26T02:51:22Z"
+ content="""
+Thanks for the feedback. I've implemented your suggestions. Please take a look.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn
new file mode 100644
index 00000000..275ea9f5
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable.mdwn
@@ -0,0 +1,6 @@
+Please consider merging branch `builddepfix` of repo `https://git.spwhitton.name/propellor`
+
+Patches `Apt.buildDep` to check whether the build deps are installable, so that it no longer registers a change every spin.
+
+> Apt.buildDep now checks if the dpkg status file has changed, so [[done]]
+> --[[Joey]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment
new file mode 100644
index 00000000..3799a012
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_10_eb58216ef1172ee5b882090dab7219ce._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 10"""
+ date="2015-12-03T15:05:21Z"
+ content="""
+
+ trivial (trivial p `changesFile` f) `changesFile` f'
+
+The parenthesized property here is all marked trivial, so a change to f
+won't result in MadeChange, though a change to f' will.
+
+The only way propellor might intercept the output of a program is if you're
+using the new Concurrent module. In that case it should buffer program output
+and display it all at once. There could potentially be a bug there that
+hid program output. I certianly can't reproduce changesFile hiding the output
+of a program:
+
+ *Propellor.Property.Apt> runPropellor (Host "localhost" [] mempty) $ ensureProperty $ trivial (buildDep ["git-annex"]) `changesFile` "/var/lib/dpkg/status"
+ Reading package lists... Done
+ Building dependency tree
+ Reading state information... Done
+ 0 upgraded, 0 newly installed, 0 to remove and 707 not upgraded.
+ NoChange
+
+ *Propellor.Property.Apt Propellor.Property.Concurrent> withConcurrentOutput $ runPropellor (Host "localhost" [] mempty) $ ensureProperty $ (trivial (buildDep ["git-annex"]) `changesFile` "/var/lib/dpkg/status") `concurrently` cmdProperty "echo" ["hi"]
+ hi
+ Reading package lists...
+ Building dependency tree...
+ Reading state information...
+ 0 upgraded, 0 newly installed, 0 to remove and 707 not upgraded.
+ MadeChange
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment
new file mode 100644
index 00000000..f4df5527
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_11_bee4b2397dfb28a3791081a83d725daf._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 11"
+ date="2015-12-03T23:29:57Z"
+ content="""
+Thank you for your feedback. I'll think about how I might rewrite `changeIfChanges` to avoid that problem with `trivial`, and I'll try to pin down the hiding of apt's output.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment
new file mode 100644
index 00000000..3db6fd1b
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_12_1e09f5a3f4565a9392d7b50b703a8a69._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 12"""
+ date="2015-12-05T22:52:42Z"
+ content="""
+I had a thought about this;
+[[trivial is a code smell|type-level_trivial_avoidance]] and adding
+UncheckedProperty type avoids needing to use trivial.
+
+So, now cmdProperty, runApt, and other things that make a Property but
+can't really detect when it MadeChange can instead make an
+UncheckedProperty, and changesFile is one of the ways to convert that into
+a Property.
+
+My implementation also allows applying changesFile multiple times, to
+detect a change to multiple files.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment
new file mode 100644
index 00000000..72f6bf40
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_13_54de6d1c5351e9303c190edda7e7a33f._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 13"
+ date="2015-12-06T17:17:34Z"
+ content="""
+Very nice. Thank you for writing it up in full so Haskell beginners like me can learn about the flexibilities and limitations of programming with Haskell types.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment
new file mode 100644
index 00000000..209b62a3
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_1_88f5d79b8cd6064d1a65dec445819afe._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-11-26T11:14:37Z"
+ content="""
+Looks like Build-Depends-Index is not handled, nor are 'a | b' build deps,
+or arch-specific build deps. Since versions are skipped, if a build dep
+needed a newer version, the property also wouldn't try to upgrade to it
+after this change.
+
+I feel that parsing build deps is too complex for propellor.
+
+It might work to somehow detect if apt has made any changes.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment
new file mode 100644
index 00000000..ace80098
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_2_23cb35130719bf1657652b76c0791947._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2015-11-26T12:48:25Z"
+ content="""
+How about simply checking if /var/lib/dpkg/status is changed?
+
+I added a `changesFile` property combinator which should be helpful for
+that.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment
new file mode 100644
index 00000000..86f4d1de
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_3_5759b4fddf360e8a777c0339c5426b40._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 3"
+ date="2015-11-26T14:39:31Z"
+ content="""
+I was hoping your deep knowledge of Apt would be able to help with this!
+
+Before I proceed, how would you feel about catching the output of apt and only printing it if apt did make changes? Although that would make the output weirdly appear all at once when the build deps are actually installed, on the other hand it would mean no output if they're not, when we detect no changes to /var/lib/dpkg/status.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment
new file mode 100644
index 00000000..30149a4c
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_4_cd49645ff94d9ccec74ff72a836cd1f7._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2015-11-30T16:57:45Z"
+ content="""
+I think it would probably depend on the user when that makes sense to do.
+If I'm installing build deps over a slow network connection, I'd like to
+see the output.
+
+It would be awesome if this transformation could be applied to any
+arbitrary Property. I don't immediately know how to do that, although it
+seems useful that all process spawning already goes through
+concurrent-output, which can buffer the output and display it only when the
+command finishes.
+
+Perhaps an extension to concurrent-ouput could let it buffer the output
+of all commands run by a property and then discard the buffer if the
+property finished with NoChange. But I don't see a way to make this work
+when multiple properties are being run concurrently.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment
new file mode 100644
index 00000000..b0283161
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_5_33744064a8b224d6e44e2cf8081f6a56._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 5"
+ date="2015-12-02T04:46:14Z"
+ content="""
+I've made a property combinator `noChangeIfUnchanged` and applied it to Apt.buildDep in my `builddepfix` branch. Please take a look.
+
+In my testing of this, Propellor hides the output if the build deps are already installed i.e. if the property returns NoChange. So it looks like you've already implemented your awesome at some point :)
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment
new file mode 100644
index 00000000..85c91d65
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_6_db48a08bc6eece590aebd41691623665._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 6"
+ date="2015-12-02T04:57:57Z"
+ content="""
+Seems I blanked on your `changesFile` combinator when I sat down to write mine. Taking a look now, my approach is much more direct for cases like `Apt.buildDep` when the problem is registering a change when there should be NoChange, whereas I think the intention of your changesFile is the opposite case. Though it might be nice to combine them. Let me know what you think.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment
new file mode 100644
index 00000000..e2611fd5
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_7_9c45f473cbc432a32bd64bbbf048fae4._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2015-12-02T16:10:34Z"
+ content="""
+The two combinators are indeed very similar. The reason I wrote
+changesFile the way I did is that that allows it to be applied repeatedly
+when a property can change any of several files.
+
+ trivial someprop
+ `changesFile` "foo"
+ `changesFile` "bar"
+
+That seems fairly likely to come up, while it would be unusual for a
+property to have to change multiple files at once to be considered
+to make a change at all, which is what multiple applications of
+`noChangeIfUnchanged` leads to.
+
+But neither combinator causes apt's output to not be displayed,
+which is what I thought we were talking about.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment
new file mode 100644
index 00000000..c05d6255
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_8_7069f68888663fef109b82a044aeb5e1._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 8"
+ date="2015-12-02T21:44:37Z"
+ content="""
+My original goal was to have `Apt.buildDep` return NoChange if the build deps are already installed. As a welcome but unexplained side-effect, on my system `noChangeIfUnchanged` *does* cause apt's output not to be displayed.
+
+I'll think about ways to combine our two combinators.
+"""]]
diff --git a/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment
new file mode 100644
index 00000000..5783dd7b
--- /dev/null
+++ b/doc/todo/pull_request:_patch_Apt.buildDep_to_only_proceed_if_installable/comment_9_5694c0bec217d3513aa8e80f55482d75._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="spwhitton"
+ subject="comment 9"
+ date="2015-12-03T02:08:58Z"
+ content="""
+I can get what I want if I use `trivial` and `changesFile` in the way you described. So please consider adding your method as a combinator:
+
+ p `changeIfChanges` f = (trivial p) `changesFile` f
+
+which is okay because `trivial` is idempotent so `changeIfChanges` may be applied more than once (I've got this in my branch with a decent docstring and I've applied it to `Apt.buildDep`).
+
+I think that this ought to be its own combinator, rather than just a recommendation to use `trivial` and `changesFile` in such cases, because this doesn't follow the semantics of `trivial`: it's not necessarily the case that it is the same amount of work to check if the property needs to be ensured as it is to ensure it.
+
+(In this language, my `noChangeIfUnchanged` could be called `changeOnlyIfChanges`. I agree that it's very unlikely to useful.)
+
+(Again, on my machine, applying `changeIfChanges` to `Apt.buildDep` magically hides apt's output if the build-deps are already installed.)
+"""]]
diff --git a/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git.mdwn b/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git.mdwn
new file mode 100644
index 00000000..0e122ddc
--- /dev/null
+++ b/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git.mdwn
@@ -0,0 +1,9 @@
+Please consider merging branch `reproducible` of repository `https://git.spwhitton.name/propellor`.
+
+This makes the generated `/usr/src/propellor/propellor.git` reproducible, so that the whole Debian package can be built reproducibly.
+
+So far as I can tell, this is the only part of the propellor build that is not reproducible at present. It's also the only issue listed on the [[reproducible builds team website|https://reproducible.debian.net/rb-pkg/unstable/amd64/propellor.html]].
+
+--spwhitton
+
+> merged; [[done]] --[[Joey]]
diff --git a/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git/comment_1_d1ed8af3172ada81d166063f0b38e23a._comment b/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git/comment_1_d1ed8af3172ada81d166063f0b38e23a._comment
new file mode 100644
index 00000000..1af7a9e6
--- /dev/null
+++ b/doc/todo/pull_request:_reproducible___47__usr__47__src__47__propellor__47__propellor.git/comment_1_d1ed8af3172ada81d166063f0b38e23a._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2016-01-18T17:17:55Z"
+ content="""
+I've merged that, thanks.
+
+IIRC, ghc only produces reproducible output when not doing any parallel
+building. If that is currently avoided, it's probably only by accident.
+It might be worth forcing -j1 when building the debian package.
+"""]]
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files.mdwn b/doc/todo/should_not_overwrite_unchanged_private_files.mdwn
new file mode 100644
index 00000000..090849f1
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files.mdwn
@@ -0,0 +1 @@
+A private file is overwritten by propellor at each run. It is not optimal when the host runs an integrity checker (like samhain). It would be great to have a file modified only if necessary.
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment b/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment
new file mode 100644
index 00000000..6e44dde6
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files/comment_1_d65fd2ebfca6b9994db9512232ce78ff._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-12-11T16:35:43Z"
+ content="""
+Doesn't rebuilding propellor overwrite lots of files too? Is the
+privdata.local file somehow a particular problem, perhaps becuase
+of its permissions?
+
+You should find it easy enough to make propellor read any existing
+file and only update the file when there are changes. But it seems to me
+your integrity checker would still go off whenever a new version
+of the file is legitimately reveiced. Perhaps it would be better to
+write a property to configure your integrity checker to not fire on
+this file?
+
+(I've thought from time to time about having rsync update the privdata.local
+file. Since it's unchanged in most spins, that would probably save network
+bandwidth.)
+"""]]
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files/comment_2_2e37e89b8f108f027d2d8c5962a24536._comment b/doc/todo/should_not_overwrite_unchanged_private_files/comment_2_2e37e89b8f108f027d2d8c5962a24536._comment
new file mode 100644
index 00000000..dbf7ac3b
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files/comment_2_2e37e89b8f108f027d2d8c5962a24536._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="gueux"
+ subject="comment 2"
+ date="2015-12-13T20:44:20Z"
+ content="""
+The integrity checker should shout everytime it finds a new version of a file (and if a new version of the file is legitimately received, I can then run \"samhain -t update -m none --interactive\"). As the private files are very often sensitive information, the integrity should shout on them too. To me, it sounds like it should be the default (it may also be useful for backup systems that check when a file was last modified?), but I dont see exactly what should be changed to enable that. What do you think?
+
+Having privdata uploaded only if it is updated would certainly be cool for slow internet connections.
+"""]]
diff --git a/doc/todo/should_not_overwrite_unchanged_private_files/comment_3_5e7127049c1798dfc830d33da0fd78d7._comment b/doc/todo/should_not_overwrite_unchanged_private_files/comment_3_5e7127049c1798dfc830d33da0fd78d7._comment
new file mode 100644
index 00000000..b2de7f4a
--- /dev/null
+++ b/doc/todo/should_not_overwrite_unchanged_private_files/comment_3_5e7127049c1798dfc830d33da0fd78d7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2015-12-14T02:03:40Z"
+ content="""
+The place the privdata file gets saved is Spin.hs, when `update`
+calls "writeFileProtected privfile"
+"""]]
diff --git a/doc/todo/silence_xargs_when_hothasktags_not_installed.mdwn b/doc/todo/silence_xargs_when_hothasktags_not_installed.mdwn
new file mode 100644
index 00000000..efa17987
--- /dev/null
+++ b/doc/todo/silence_xargs_when_hothasktags_not_installed.mdwn
@@ -0,0 +1,9 @@
+Please consider merging branch `hothasktags` of my repo `https://git.spwhitton.name/propellor`
+
+Moves the `2>/dev/null` redirection in the Makefile rule for `tags` in order to silence xargs if hothasktags is not installed (avoids `xargs: hothasktags: No such file or directory`).
+
+I assume that your originally intention was not to cause an error if hothasktags is not installed, since you have `|| true` at the end of the line. However, someone trying to build propellor's Debian package saw the error output from xargs and thought it meant hothasktags should be a build-dep. This patch prevents someone thinking that.
+
+-- [[spwhitton|https://spwhitton.name]]
+
+> [[merged|done]] --[[Joey]]
diff --git a/privdata.joey/keyring.gpg b/privdata.joey/keyring.gpg
deleted file mode 100644
index 01dd24e7..00000000
--- a/privdata.joey/keyring.gpg
+++ /dev/null
Binary files differ
diff --git a/privdata.joey/privdata.gpg b/privdata.joey/privdata.gpg
deleted file mode 100644
index 027c5972..00000000
--- a/privdata.joey/privdata.gpg
+++ /dev/null
@@ -1,1343 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1
-
-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
-ORZeguMW+UacpPF6l5ComwlujbjXFS8td7djavWcrncNumXwbavLYoJucKXUQvFa
-w/rWtBlOPbrv1j150RH38koqPjYKlhlFiIvX8PtBRjDD+pw7/8mA+Jl2IAwoYGXz
-M2WGGp/eOtMgrCuq+IMllNCaGmr63xttXe1nvWLabgUtN5OObNiJzM4tpLaZzXuK
-T98KflcwbUDo4jXNaa3Gav85aZpeRgn8o4UWsOXjIocxt8yqXdScXHXbkV2IKw2+
-TDTfHZYws7HvbBoNAaDXYlKX1bjHesZVEJOJv+UNKWItgv63x+nhUVj1OODImsKE
-mx1/JNpxTblKBxZTCcid3IQhywo7B7RSx6PXeyvQ+V4kSOUAHbvtI2gcHODLRJUR
-wHR/5t1YZFKDuNUwXxVFUeSy5BoGDlIFKBieTydfDV5OFXg3onqEbbKDWAwAjHok
-OF5g2h3K3Nfi2kr6ApyH0w3iAbhIpnyX7LjNwuwZ9w60i4oHeLKzzDb/cZI59ekK
-X9GI6ZzelJ3JH4MLQIqdmWLMGuMtiqnfCmuvrZcubEZWKXKBOIELzrhX1u55DIE1
-4wmhza4wI+7TjvvmsEj24XGfYmtucuI0+np3o5g8me+Qcc6yk+u0r0HBw8jQXrIJ
-FLNpu+iRfsBGZkVvpEeM6s6EQMm6ydGees3VA1Raf9hZAE9ZMF7zZYVRQp+VOOGF
-3V2xfPL+0exOIeZUFZ2i73gsNKDuz1zhW1Z9/Sl43jwzBRAx9tB2cK+Y3om8SUty
-Ta7HADf/Swr/gxUO7XjOe5nZglW6HfxhpILZj8s1RVEvcXQ3lEqXOOIkpcdGRmmu
-AdtiEPUiAgWgHIQOXfRCD+Lqn1a7VOiA5vCUdh/cJ/9ABzRnmem0r2QAWc6w0OD3
-8gCjOMeTgUnSiUMjOdZXw4WAyLGU6e41P719tXZLn8nk5q3VkwK1dOu7o9rbQ312
-HVM81d0ai8JF23+5v+crs5PVM9azHOEsuUm5VlPlqtAWXR9fUGipXDxVA8GbJUUm
-o09BZMTAg/d//jO+Sflq7eVWdjdVbagdVHqxvsIdQ/naMBCMNHySnFrpWzl41HqI
-gDrB86F3ZZV4Bps+zG1UkZgNagXgeNBt/hMw1jg1MoT0QahQ6m2nsp+h2manO+Td
-HsYLPveP70n+HODi0tp9FDbpUJw8DlMXfaxKAZjAfX2OfkVbwG64Q5mJR9ztEEQV
-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
-ubOkOhz16QwK6genWgucQA69F2pmTuu4FWUGqClGsrL2cjP1Ht3xQYfvz1m9tlJ+
-BXXo2bDjke9sbvccURqBD4m2odjsSNyZ7wWqp59OXCJ6Yl6oxbQz1j0FR4iY7/8W
-GyCf/FF8LyRqgQPJwd1joqz7zYiKxEPieiwJPudaaP1CMzDxlNo/Vs1rfT4xqRbw
-ZwETjSaZYhlNqQMrXHYpP9lFCHsFA6EwwZo63G9ENyYbo+bNzIvPmPG4Vavm+C4O
-XKYtGQcQevq4iYniAxEIYUi/HHDyrUW7pjJDJr39gmGqbLP/wDYDycDEAeCi/nqX
-JBwH3lveS3n4MGOUCqRtT5oyepSquDBUWlGGgWtQbX7npv/Qyh+9/rsLUXLfd5A4
-n7JQTtpnV7kE7xNe88lzZN0BZ5AlIBtUEZeye0CmN7Omj56jN4L4HKoDPaZrYWTa
-1fPgMcVvWSEi674eGMOQYeeMN3Y8sQPT6xfHX+5uUg7A8UgF1mUNjwCakoW4J3xk
-dLwE9+eOmo0NpJhWQ+0ug47L/Sqk/lVvec4+72wYnS4EZWrnhHcU7TcCGEyJFWDL
-ejqsOH88o3w2tinDBlVmNHb96KO6sFBXZUyiIGcq60jZdN8uirufIeW6t7jvl6su
-3L7+LgP0r2Y6JedIpvdMNNM6ZEMK28mg09US643ZYpO9iMl3dUTKKrKHs7+fJrOQ
-NxEKJtxRbIwjeK68RkmjktPmNAxYKX2H5MOuzFx3+Z5TZKcNd4eCNrp2vj49xEL3
-WR+ZzwjsvM47aOFeb3glK5D/k8fcvhZIzEunAiGUvZtUIrI2VEpf2EuIF+bkK9UD
-LJO0x7nU48PEzwrlZ4p4IkvIeEYz6u83cTx891QO+XaZ/ZimDiOlKkV7r1o32CF7
-aV9Ywm1ln/+8x74DKc58+GsL3KMIe/ncQ4g6tg3DDbxulEpVupVS6C70yzwW4lHb
-EvN/5PZkGyvIFYR3w2aqxs6enbPTfAm6q+VL/Szp9u613n8DSIH8Wj5HcDGp94PQ
-703ME4O5CZQu4q6x1vveDIvJacB5SIf/4ZuRLjEnQ7NSnrAk03jixiwSvngy0IB2
-HGp7bRZ3vFmr/Qesyc1TbxQ1u3kqwYjP5LiCuFz7xvrUEVEmHhhtnJjrK6pDu4XL
-/VXTX7jLXE4Lp9HoEF7FI/xxefUs/qBC2vBjuUioitJdphUj+NMC9Z63mOCqGLCn
-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
-NYznbDF8Vjod4+ux9h+bDKQ4JhZr+ZirQg==
-=XxLG
------END PGP MESSAGE-----
diff --git a/src/Propellor/PrivData/Paths.hs b/src/Propellor/PrivData/Paths.hs
index 9f791b76..3d0d8a58 100644
--- a/src/Propellor/PrivData/Paths.hs
+++ b/src/Propellor/PrivData/Paths.hs
@@ -3,7 +3,7 @@ module Propellor.PrivData.Paths where
import System.FilePath
privDataDir :: FilePath
-privDataDir = "privdata.joey"
+privDataDir = "privdata"
privDataFile :: FilePath
privDataFile = privDataDir </> "privdata.gpg"