diff --git a/merge/sys-fs/.calculate_directory b/merge/sys-fs/.calculate_directory
new file mode 100644
index 0000000..8e3df7f
--- /dev/null
+++ b/merge/sys-fs/.calculate_directory
@@ -0,0 +1 @@
+{% calculate append = 'skip' %}
diff --git a/merge/sys-fs/eudev/.calculate_directory b/merge/sys-fs/eudev/.calculate_directory
new file mode 100644
index 0000000..145311d
--- /dev/null
+++ b/merge/sys-fs/eudev/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/etc', name='modprobe.d', package='sys-fs/eudev' %}
diff --git a/merge/sys-fs/eudev/50-firmware.rules b/merge/sys-fs/eudev/50-firmware.rules
new file mode 100644
index 0000000..d13d26d
--- /dev/null
+++ b/merge/sys-fs/eudev/50-firmware.rules
@@ -0,0 +1,3 @@
+{% calculate path='/etc/udev/rules.d' %}
+
+SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1"
diff --git a/merge/sys-fs/eudev/50-firmware.rules.del b/merge/sys-fs/eudev/50-firmware.rules.del
new file mode 100644
index 0000000..0bfb735
--- /dev/null
+++ b/merge/sys-fs/eudev/50-firmware.rules.del
@@ -0,0 +1,2 @@
+{% calculate append='remove', name='50-firmware.rules' %}
+{# возможно удаление ошибочного размещения шаблона #}
diff --git a/merge/sys-fs/eudev/60-persistent-storage.rules b/merge/sys-fs/eudev/60-persistent-storage.rules
new file mode 100644
index 0000000..1187c9f
--- /dev/null
+++ b/merge/sys-fs/eudev/60-persistent-storage.rules
@@ -0,0 +1,7 @@
+{% calculate format='regex', path='/lib/udev/rules.d' %}
+(# probe filesystem metadata of disks)
+(KERNEL!="sr\*", IMPORT\{builtin\}="blkid")
+\1
+KERNEL!="sr*", ATTRS{size}=="0", ATTRS{removable}=="1", GOTO="skip_blkid"
+\2
+LABEL="skip_blkid"
diff --git a/merge/sys-fs/eudev/75-persistent-net-generator.rules b/merge/sys-fs/eudev/75-persistent-net-generator.rules
new file mode 100644
index 0000000..be7030e
--- /dev/null
+++ b/merge/sys-fs/eudev/75-persistent-net-generator.rules
@@ -0,0 +1,3 @@
+{% calculate format='regex', path='/lib/udev/rules.d' %}
+(KERNEL!=")(eth\*)
+\1en*|wl*|sl*|ww*|\2
diff --git a/merge/sys-fs/eudev/80-net-name-slot.rules b/merge/sys-fs/eudev/80-net-name-slot.rules
new file mode 100644
index 0000000..0a132a5
--- /dev/null
+++ b/merge/sys-fs/eudev/80-net-name-slot.rules
@@ -0,0 +1 @@
+{% calculate append='remove', path='/lib/udev/rules.d' %}
diff --git a/merge/sys-fs/eudev/80-net-setup-link.rules b/merge/sys-fs/eudev/80-net-setup-link.rules
new file mode 100644
index 0000000..0a132a5
--- /dev/null
+++ b/merge/sys-fs/eudev/80-net-setup-link.rules
@@ -0,0 +1 @@
+{% calculate append='remove', path='/lib/udev/rules.d' %}
diff --git a/merge/sys-fs/eudev/90-id-lxc-all.rules b/merge/sys-fs/eudev/90-id-lxc-all.rules
new file mode 100644
index 0000000..d943248
--- /dev/null
+++ b/merge/sys-fs/eudev/90-id-lxc-all.rules
@@ -0,0 +1,23 @@
+{% calculate comment='#', path='/lib/udev/rules.d', install.os.container.type == 'host' %}
+
+# VirtualBox
+ACTION=="add|remove", DEVPATH=="/devices/virtual/misc/vbox*", ENV{ID_LXC}="all"
+
+# PS/2 keyboard and mouse
+ACTION=="add|remove", DEVPATH=="/devices/platform/i8042/*", ENV{ID_LXC}="all"
+
+# USB devices
+ACTION=="add|remove", ENV{ID_BUS}=="usb", ENV{ID_LXC}="all"
+
+# Audio devices
+ACTION=="add|remove", SUBSYSTEM=="sound", ENV{ID_LXC}="all"
+# tty0 for chvt and lightdm
+ACTION=="add|remove", KERNEL=="tty0", ENV{ID_LXC}="all"
+# tty7-10 for xorg-server
+ACTION=="add|remove", KERNEL=="tty7", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty8", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty9", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty10", ENV{ID_LXC}="all"
+
+# Video devices
+ACTION=="add|remove", SUBSYSTEM=="drm", ENV{ID_LXC}="all"
diff --git a/merge/sys-fs/eudev/99-lxc-devfs.rules b/merge/sys-fs/eudev/99-lxc-devfs.rules
new file mode 100644
index 0000000..87da82b
--- /dev/null
+++ b/merge/sys-fs/eudev/99-lxc-devfs.rules
@@ -0,0 +1,8 @@
+{% calculate comment='#', path='/lib/udev/rules.d', install.os.container.type == 'host' %}
+
+ENV{ID_LXC}=="", GOTO="lxc_end"
+
+ACTION=="add", PROGRAM="/bin/bash /usr/libexec/lxc-udev-trigger add '$env{DEVNAME}' '$env{MAJOR}' '$env{MINOR}' '$env{SUBSYSTEM}' '$env{ID_LXC}'"
+ACTION=="remove", PROGRAM="/bin/bash /usr/libexec/lxc-udev-trigger remove $env{DEVNAME} $env{MAJOR} $env{MINOR} $env{SUBSYSTEM} $env{ID_LXC}"
+
+LABEL="lxc_end"
diff --git a/merge/sys-fs/eudev/blacklist-calculate.conf b/merge/sys-fs/eudev/blacklist-calculate.conf
new file mode 100644
index 0000000..356ad45
--- /dev/null
+++ b/merge/sys-fs/eudev/blacklist-calculate.conf
@@ -0,0 +1,7 @@
+{% calculate comment='#' %}
+
+# hplip and cups 1.4+ use raw USB devices, so it requires usblp not be loaded
+blacklist usblp
+
+# You probably want this to not get the console beep loud on every tab :)
+blacklist pcspkr
diff --git a/merge/sys-fs/eudev/lxc-udev-trigger b/merge/sys-fs/eudev/lxc-udev-trigger
new file mode 100644
index 0000000..e4f88d2
--- /dev/null
+++ b/merge/sys-fs/eudev/lxc-udev-trigger
@@ -0,0 +1,61 @@
+{% calculate comment='#', path='/usr/libexec', chmod='755', install.os.container.type == 'host' %}
+#!/bin/bash
+
+ACTION="$1"
+DEVNAME="$2"
+MAJOR="$3"
+MINOR="$4"
+SUBSYSTEM="$5"
+
+if [[ -z $MINOR ]] || [[ -z $DEVNAME ]]
+then
+ exit 0
+fi
+
+shift 5
+COMPS="$*"
+
+process_device() {
+ local comp=$1
+ if [[ "$ACTION" == "add" ]]
+ then
+ lxc-device -n ${comp} -- add $DEVNAME
+ lxc-attach -n ${comp} $(stat -L -c "chmod %a %n" $DEVNAME)
+ lxc-attach -n ${comp} $(stat -L -c "chown %u:%g %n" $DEVNAME)
+ udevadm trigger --action=change --name-match=$DEVNAME
+ fi
+ if [[ "$ACTION" == "remove" ]]
+ then
+ lxc-attach -n ${comp} -- rm $DEVNAME
+ if [[ -n $MAJOR ]] && [[ -n $MINOR ]]
+ then
+ if [[ $SUBSYSTEM == "block" ]]
+ then
+ lxc-cgroup -n ${comp} devices.deny "b $MAJOR:$MINOR rwm"
+ else
+ lxc-cgroup -n ${comp} devices.deny "c $MAJOR:$MINOR rwm"
+ fi
+ fi
+ udevadm trigger --action=remove --name-match=$DEVNAME
+ fi
+}
+
+if [[ $COMPS == "all" ]]
+then
+ for COMP in $(lxc-ls -1q 2>/dev/null)
+ do
+ if lxc-info -n $COMP -c lxc.environment | grep LXC_DESKTOP=1 &>/dev/null
+ then
+ process_device $COMP
+ fi
+ done
+else
+ for COMP in $COMPS
+ do
+ if [[ -n $(lxc-info -pH -n $COMP) ]]
+ then
+ process_device $COMP
+ fi
+ done
+fi
+
diff --git a/merge/sys-fs/eudev/write_net_rules b/merge/sys-fs/eudev/write_net_rules
new file mode 100644
index 0000000..72e4fd0
--- /dev/null
+++ b/merge/sys-fs/eudev/write_net_rules
@@ -0,0 +1,5 @@
+{% calculate format='regex', multiline, path='/lib/udev' %}
+^match="\$match, KERNEL==.*$\n
+
+^#write_rule
+write_rule
diff --git a/merge/sys-fs/fuse/.calculate_directory b/merge/sys-fs/fuse/.calculate_directory
new file mode 100644
index 0000000..b055e3b
--- /dev/null
+++ b/merge/sys-fs/fuse/.calculate_directory
@@ -0,0 +1 @@
+{% calculate append='skip', package='sys-fs/fuse' %}
diff --git a/merge/sys-fs/fuse/fuse b/merge/sys-fs/fuse/fuse
new file mode 100644
index 0000000..0aaad90
--- /dev/null
+++ b/merge/sys-fs/fuse/fuse
@@ -0,0 +1,2 @@
+{% calculate append="link", source="/etc/init.d/fuse", install.os.linux.system == 'desktop' and custom.runlevels.fuse != 'on' or grep('var/lib/calculate/-runlevels-fuse','/fuse') %}
+{% save.system custom.runlevels.fuse = "on" %}
diff --git a/merge/sys-fs/mtools/.calculate_directory b/merge/sys-fs/mtools/.calculate_directory
new file mode 100644
index 0000000..f2b607e
--- /dev/null
+++ b/merge/sys-fs/mtools/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/etc', package='sys-fs/mtools' %}
diff --git a/merge/sys-fs/mtools/mtools.conf b/merge/sys-fs/mtools/mtools.conf
new file mode 100644
index 0000000..63a5ce5
--- /dev/null
+++ b/merge/sys-fs/mtools/mtools.conf
@@ -0,0 +1,64 @@
+# Example mtools.conf files. Uncomment the lines which correspond to
+# your architecture and comment out the "SAMPLE FILE" line below
+#SAMPLE FILE
+
+# # Linux floppy drives
+# drive a: file="/dev/fd0" exclusive
+# drive b: file="/dev/fd1" exclusive
+
+# # First SCSI hard disk partition
+# drive c: file="/dev/sda1"
+
+# # First IDE hard disk partition
+# drive c: file="/dev/hda1"
+
+# # dosemu floppy image
+# drive m: file="/var/lib/dosemu/diskimage"
+
+# # dosemu hdimage
+# drive n: file="/var/lib/dosemu/diskimage" offset=3840
+
+# # Atari ramdisk image
+# drive o: file="/tmp/atari_rd" offset=136
+
+# # ZIP disk for Solaris:
+# Drive X is ZIP-100 at target 5
+# drive X: file="/dev/rdsk/c0t5d0s2" partition=4 scsi=1 nodelay
+
+# # ZIP disk for SunOS:
+# # Zip drive is at target 5, which default kernel calls tape st1 !!
+# drive Y: file="/dev/rsd5c" partition=4 scsi=1 nodelay
+
+# # autoselect zip drive/floppy on HP-UX 9/10
+# drive a: file="/dev/rdsk/c201d5" exclusive partition=4
+# drive a: file="/dev/rdsk/c201d5s0" exclusive partition=4
+# drive a: file="/dev/rfloppy/c201d0s0" exclusive
+
+# A/UX target 5 on 1st scsi bus jaz or zip
+# drive X: file="/dev/rdsk/c105d0s31" partition=4
+
+
+# Some examples for BeOS.
+# floppy drive. hardcoded in devices.c, so no real need to define it here
+#drive a: file="/dev/floppy_disk" exclusive
+# ZIP drive on SCSI ID 6
+#drive z: file="/dev/scsi_disk_060" offset=16384 fat_bits=16
+
+# SCO Unix 3.2v4
+# # Floppy disk drives
+#
+# drive a: file="/dev/install" exclusive
+# drive b: file="/dev/install1" exclusive
+#
+# # SCSI hard disk partitions
+#
+# drive c: file="/dev/dsk/0sC"
+# drive d: file="/dev/dsk/0sD"
+# drive e: file="/dev/dsk/0sE"
+# drive f: file="/dev/dsk/0sF"
+# drive g: file="/dev/dsk/0sG"
+# drive h: file="/dev/dsk/0sH"
+
+# # uncomment the following line to display all file names in lower
+# # case by default
+# mtools_lower_case=1
diff --git a/merge/sys-fs/udev-init-scripts/.calculate_directory b/merge/sys-fs/udev-init-scripts/.calculate_directory
new file mode 100644
index 0000000..5dd9283
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/etc', name='conf.d', package='sys-fs/udev-init-scripts' %}
diff --git a/merge/sys-fs/udev-init-scripts/conf.d.udev b/merge/sys-fs/udev-init-scripts/conf.d.udev
new file mode 100644
index 0000000..71d9df4
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/conf.d.udev
@@ -0,0 +1,3 @@
+{% calculate format='openrc', name='udev' %}
+
+rc_want="hostname"
diff --git a/merge/sys-fs/udev-init-scripts/init.d/.calculate_directory b/merge/sys-fs/udev-init-scripts/init.d/.calculate_directory
new file mode 100644
index 0000000..a9efb17
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/init.d/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/etc', install.os.container.type == 'desktop' %}
diff --git a/merge/sys-fs/udev-init-scripts/init.d/udev b/merge/sys-fs/udev-init-scripts/init.d/udev
new file mode 100644
index 0000000..3092319
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/init.d/udev
@@ -0,0 +1,11 @@
+{% calculate format='regex', dotall %}
+(start_pre\(\)
+\{).*?\n\}
+start_pre()
+{
+ get_udevd_binary || return 1
+ return 0
+}
+
+ -lxc
+
diff --git a/merge/sys-fs/udev-init-scripts/init.d/udev-trigger b/merge/sys-fs/udev-init-scripts/init.d/udev-trigger
new file mode 100644
index 0000000..6b4831f
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/init.d/udev-trigger
@@ -0,0 +1,3 @@
+{% calculate format='regex', dotall %}
+ -lxc
+
diff --git a/merge/sys-fs/udev-init-scripts/sysinit/.calculate_directory b/merge/sys-fs/udev-init-scripts/sysinit/.calculate_directory
new file mode 100644
index 0000000..3e91c01
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/sysinit/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/etc/runlevels' %}
diff --git a/merge/sys-fs/udev-init-scripts/sysinit/udev b/merge/sys-fs/udev-init-scripts/sysinit/udev
new file mode 100644
index 0000000..0cc1621
--- /dev/null
+++ b/merge/sys-fs/udev-init-scripts/sysinit/udev
@@ -0,0 +1,2 @@
+{% calculate append="link", source="/etc/init.d/udev", custom.runlevels.udev_init_scripts != 'on' or grep('var/lib/calculate/-runlevels-udev-init-scripts','/udev') %}
+{% save.system custom.runlevels.udev_init_scripts = "on" %}
diff --git a/merge/sys-fs/udev/.calculate_directory b/merge/sys-fs/udev/.calculate_directory
new file mode 100644
index 0000000..e2a0f06
--- /dev/null
+++ b/merge/sys-fs/udev/.calculate_directory
@@ -0,0 +1 @@
+{% calculate package='', path='/etc', name='modprobe.d' %}
diff --git a/merge/sys-fs/udev/75-cd-aliases-generator.rules b/merge/sys-fs/udev/75-cd-aliases-generator.rules
new file mode 100644
index 0000000..12fef0c
--- /dev/null
+++ b/merge/sys-fs/udev/75-cd-aliases-generator.rules
@@ -0,0 +1,11 @@
+{% calculate format='regex', path='/lib/udev/rules.d' %}
+(ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb\|ieee1394", ENV\{ID_CDROM\}=="\?\*", ENV\{GENERATED\}!="\?\*", \\
+ PROGRAM="write_cd_rules by-id", SYMLINK\+="%c", GOTO="persistent_cd_end")
+
+(ACTION=="add", SUBSYSTEM=="block", ENV\{ID_CDROM\}=="\?\*")
+\1
+ACTION=="add", SUBSYSTEM=="block", ENV{ID_ATA}=="1", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", \
+ PROGRAM="write_cd_rules by-id", SYMLINK+="%c", GOTO="persistent_cd_end"
+\2
+ID_ATA=="1"
+ENV{ID_ATA}=="1"
diff --git a/merge/sys-fs/udev/80-net-name-slot.rules b/merge/sys-fs/udev/80-net-name-slot.rules
new file mode 100644
index 0000000..8506c2e
--- /dev/null
+++ b/merge/sys-fs/udev/80-net-name-slot.rules
@@ -0,0 +1 @@
+{% calculate path='/etc/udev/rules.d', source='/lib/udev/rules.d/80-net-name-slot.rules', pkg() >= '197', force %}
diff --git a/merge/sys-fs/udev/80-net-setup-link.rules b/merge/sys-fs/udev/80-net-setup-link.rules
new file mode 100644
index 0000000..7d5441d
--- /dev/null
+++ b/merge/sys-fs/udev/80-net-setup-link.rules
@@ -0,0 +1 @@
+# Calculate path=/etc/udev/rules.d link=/lib/udev/rules.d/80-net-setup-link.rules pkg(sys-fs/udev)>=209 force
diff --git a/merge/sys-fs/udev/90-id-lxc-all.rules b/merge/sys-fs/udev/90-id-lxc-all.rules
new file mode 100644
index 0000000..d943248
--- /dev/null
+++ b/merge/sys-fs/udev/90-id-lxc-all.rules
@@ -0,0 +1,23 @@
+{% calculate comment='#', path='/lib/udev/rules.d', install.os.container.type == 'host' %}
+
+# VirtualBox
+ACTION=="add|remove", DEVPATH=="/devices/virtual/misc/vbox*", ENV{ID_LXC}="all"
+
+# PS/2 keyboard and mouse
+ACTION=="add|remove", DEVPATH=="/devices/platform/i8042/*", ENV{ID_LXC}="all"
+
+# USB devices
+ACTION=="add|remove", ENV{ID_BUS}=="usb", ENV{ID_LXC}="all"
+
+# Audio devices
+ACTION=="add|remove", SUBSYSTEM=="sound", ENV{ID_LXC}="all"
+# tty0 for chvt and lightdm
+ACTION=="add|remove", KERNEL=="tty0", ENV{ID_LXC}="all"
+# tty7-10 for xorg-server
+ACTION=="add|remove", KERNEL=="tty7", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty8", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty9", ENV{ID_LXC}="all"
+ACTION=="add|remove", KERNEL=="tty10", ENV{ID_LXC}="all"
+
+# Video devices
+ACTION=="add|remove", SUBSYSTEM=="drm", ENV{ID_LXC}="all"
diff --git a/merge/sys-fs/udev/99-lxc-devfs.rules b/merge/sys-fs/udev/99-lxc-devfs.rules
new file mode 100644
index 0000000..87da82b
--- /dev/null
+++ b/merge/sys-fs/udev/99-lxc-devfs.rules
@@ -0,0 +1,8 @@
+{% calculate comment='#', path='/lib/udev/rules.d', install.os.container.type == 'host' %}
+
+ENV{ID_LXC}=="", GOTO="lxc_end"
+
+ACTION=="add", PROGRAM="/bin/bash /usr/libexec/lxc-udev-trigger add '$env{DEVNAME}' '$env{MAJOR}' '$env{MINOR}' '$env{SUBSYSTEM}' '$env{ID_LXC}'"
+ACTION=="remove", PROGRAM="/bin/bash /usr/libexec/lxc-udev-trigger remove $env{DEVNAME} $env{MAJOR} $env{MINOR} $env{SUBSYSTEM} $env{ID_LXC}"
+
+LABEL="lxc_end"
diff --git a/merge/sys-fs/udev/blacklist-calculate.conf b/merge/sys-fs/udev/blacklist-calculate.conf
new file mode 100644
index 0000000..53cd37f
--- /dev/null
+++ b/merge/sys-fs/udev/blacklist-calculate.conf
@@ -0,0 +1,7 @@
+{% calcultae pkg() >= '197' %}
+
+# hplip and cups 1.4+ use raw USB devices, so it requires usblp not be loaded
+blacklist usblp
+
+# You probably want this to not get the console beep loud on every tab :)
+blacklist pcspkr
diff --git a/merge/sys-fs/udev/lxc-udev-trigger b/merge/sys-fs/udev/lxc-udev-trigger
new file mode 100644
index 0000000..e4f88d2
--- /dev/null
+++ b/merge/sys-fs/udev/lxc-udev-trigger
@@ -0,0 +1,61 @@
+{% calculate comment='#', path='/usr/libexec', chmod='755', install.os.container.type == 'host' %}
+#!/bin/bash
+
+ACTION="$1"
+DEVNAME="$2"
+MAJOR="$3"
+MINOR="$4"
+SUBSYSTEM="$5"
+
+if [[ -z $MINOR ]] || [[ -z $DEVNAME ]]
+then
+ exit 0
+fi
+
+shift 5
+COMPS="$*"
+
+process_device() {
+ local comp=$1
+ if [[ "$ACTION" == "add" ]]
+ then
+ lxc-device -n ${comp} -- add $DEVNAME
+ lxc-attach -n ${comp} $(stat -L -c "chmod %a %n" $DEVNAME)
+ lxc-attach -n ${comp} $(stat -L -c "chown %u:%g %n" $DEVNAME)
+ udevadm trigger --action=change --name-match=$DEVNAME
+ fi
+ if [[ "$ACTION" == "remove" ]]
+ then
+ lxc-attach -n ${comp} -- rm $DEVNAME
+ if [[ -n $MAJOR ]] && [[ -n $MINOR ]]
+ then
+ if [[ $SUBSYSTEM == "block" ]]
+ then
+ lxc-cgroup -n ${comp} devices.deny "b $MAJOR:$MINOR rwm"
+ else
+ lxc-cgroup -n ${comp} devices.deny "c $MAJOR:$MINOR rwm"
+ fi
+ fi
+ udevadm trigger --action=remove --name-match=$DEVNAME
+ fi
+}
+
+if [[ $COMPS == "all" ]]
+then
+ for COMP in $(lxc-ls -1q 2>/dev/null)
+ do
+ if lxc-info -n $COMP -c lxc.environment | grep LXC_DESKTOP=1 &>/dev/null
+ then
+ process_device $COMP
+ fi
+ done
+else
+ for COMP in $COMPS
+ do
+ if [[ -n $(lxc-info -pH -n $COMP) ]]
+ then
+ process_device $COMP
+ fi
+ done
+fi
+
diff --git a/merge/sys-fs/udisks/.calculate_directory b/merge/sys-fs/udisks/.calculate_directory
new file mode 100644
index 0000000..09d9df9
--- /dev/null
+++ b/merge/sys-fs/udisks/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/var/lib/polkit-1/localauthority', name='50-local.d', package='udisks' %}
diff --git a/merge/sys-fs/udisks/50-mount-disk.rules b/merge/sys-fs/udisks/50-mount-disk.rules
new file mode 100644
index 0000000..3b428d9
--- /dev/null
+++ b/merge/sys-fs/udisks/50-mount-disk.rules
@@ -0,0 +1,13 @@
+{% calculate append='replace', comment='//', path='/etc/polkit-1/rules.d' %}
+/* -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- */
+
+// Mount disk by plugdev group rules for polkit
+//
+
+polkit.addRule(function(action, subject) {
+ if ((action.id.indexOf("org.freedesktop.udisks.") == 0 ||
+ action.id.indexOf("org.freedesktop.udisks2.") == 0 ) &&
+ subject.isInGroup("plugdev")) {
+ return polkit.Result.YES;
+ }
+});
diff --git a/merge/sys-fs/udisks/actions/.calculate_directory b/merge/sys-fs/udisks/actions/.calculate_directory
new file mode 100644
index 0000000..adf2237
--- /dev/null
+++ b/merge/sys-fs/udisks/actions/.calculate_directory
@@ -0,0 +1 @@
+{% calculate path='/usr/share/polkit-1' %}
diff --git a/merge/sys-fs/udisks/actions/org.freedesktop.udisks.policy b/merge/sys-fs/udisks/actions/org.freedesktop.udisks.policy
new file mode 100644
index 0000000..73c77b3
--- /dev/null
+++ b/merge/sys-fs/udisks/actions/org.freedesktop.udisks.policy
@@ -0,0 +1,221 @@
+{% calculate pkg('sys-fs/udisks:0') %}
+
+
+
+ The udisks Project
+ http://udisks.freedesktop.org/
+ drive-removable-media
+
+
+ Mount a device
+ Authentication is required to mount the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Mount a system-internal device
+ Authentication is required to mount the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Check file system on a device
+ Authentication is required to check the file system on the device
+
+ no
+ no
+ yes
+
+
+
+
+ Check file system of a system-internal device
+ Authentication is required to check the file system on the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Unmount a device mounted by another user
+ Authentication is required to unmount devices mounted by another user
+
+ no
+ no
+ auth_admin
+
+
+
+
+ List open files
+ Authentication is required to list open files on a mounted file system
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ List open files on a system-internal device
+ Authentication is required to list open files on a mounted file system
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Eject media from a device
+ Authentication is required to eject media from the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Detach a drive
+ Authentication is required to detach the drive
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Modify a device
+ Authentication is required to modify the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Modify a system-internal device
+ Authentication is required to modify the device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Refresh ATA SMART data
+ Authentication is required to refresh ATA SMART data
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Run ATA SMART Self Tests
+ Authentication is required to run ATA SMART self tests
+
+ no
+ no
+ auth_admin
+
+
+
+
+ Retrieve historical ATA SMART data
+ Authentication is required to retrieve historical ATA SMART data
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Unlock an encrypted device
+ Authentication is required to unlock an encrypted device
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Lock an encrypted device unlocked by another user
+ Authentication is required to lock an encrypted device unlocked by another user
+
+ no
+ no
+ auth_admin
+
+
+
+
+ Configure Linux Software RAID
+ Authentication is required to configure Linux Software RAID devices
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Configure Linux LVM2
+ Authentication is required to configure Linux LVM2
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Cancel a job initiated by another user
+ Authentication is required to cancel a job initiated by another user
+
+ no
+ no
+ auth_admin
+
+
+
+
+ Inhibit media detection
+ Authentication is required to inhibit media detection
+
+ no
+ no
+ auth_admin_keep
+
+
+
+
+ Set drive spindown timeout
+ Authentication is required to configure drive spindown timeout
+
+ no
+ no
+ yes
+
+
+
+
diff --git a/merge/sys-fs/udisks/mount-usb.pkla b/merge/sys-fs/udisks/mount-usb.pkla
new file mode 100644
index 0000000..c64a5d9
--- /dev/null
+++ b/merge/sys-fs/udisks/mount-usb.pkla
@@ -0,0 +1,4 @@
+[Mounting, checking, etc. of external drives]
+Identity=unix-group:plugdev
+Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.filesystem-mount-system-internal;org.freedesktop.udisks.filesystem-check;org.freedesktop.udisks.filesystem-check-system-internal;org.freedesktop.udisks.filesystem-unmount-others;org.freedesktop.udisks.filesystem-lsof;org.freedesktop.udisks.filesystem-lsof-system-internal;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach;org.freedesktop.udisks.change;org.freedesktop.udisks.change-system-internal;org.freedesktop.udisks.drive-ata-smart-refresh;org.freedesktop.udisks.drive-ata-smart-selftest;org.freedesktop.udisks.drive-ata-smart-retrieve-historical-data;org.freedesktop.udisks.luks-unlock;org.freedesktop.udisks.luks-lock-others;org.freedesktop.udisks.linux-md;org.freedesktop.udisks.linux-lvm2;org.freedesktop.udisks.cancel-job-others;org.freedesktop.udisks.inhibit-polling;org.freedesktop.udisks.drive-set-spindown
+ResultActive=yes