127 lines
2.7 KiB
Nix
127 lines
2.7 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
# name of the program
|
|
# -------------------
|
|
program = "slack";
|
|
|
|
tarBin = "${pkgs.gnutar}/bin/tar";
|
|
|
|
# command that will be jailed
|
|
# ---------------------------
|
|
command = "${pkgs.slack}/bin/slack";
|
|
|
|
desktopFile =
|
|
let
|
|
name = program;
|
|
comment = "Chat Programm";
|
|
in
|
|
pkgs.writeTextFile {
|
|
name = "${name}.desktop";
|
|
destination = "/share/applications/${name}.desktop";
|
|
text = ''
|
|
[Desktop Entry]
|
|
Categories=Application;Utility;
|
|
Comment=${comment}
|
|
Encoding=UTF-8
|
|
Exec=${bin}/bin/${name}
|
|
Icon=gnome-lockscreen
|
|
Name=${name}
|
|
Terminal=false
|
|
Type=Application
|
|
'';
|
|
};
|
|
|
|
# the script
|
|
# ----------
|
|
bin =
|
|
let
|
|
backupFile = "${cfg.homeBackup}.tar.lzma";
|
|
rolloutFile = "${cfg.home}.tar.lzma";
|
|
lockFile = "${cfg.home}-lock";
|
|
in
|
|
pkgs.writeShellScriptBin "${program}" ''
|
|
# set -x
|
|
if [[ ! -e ${lockFile} ]]
|
|
then
|
|
# rollout backup
|
|
if [[ -e ${backupFile} ]]
|
|
then
|
|
cp ${backupFile} ${rolloutFile}
|
|
sudo -u ${program} ${tarBin} xf ${rolloutFile} --directory ${cfg.home}
|
|
rm ${rolloutFile}
|
|
touch ${lockFile}
|
|
fi
|
|
fi
|
|
|
|
sudo -u ${program} ${command}
|
|
'';
|
|
|
|
backupScript = pkgs.writeShellScriptBin "${program}-backup" ''
|
|
sudo -u ${program} \
|
|
${tarBin} \
|
|
--exclude=.cache \
|
|
--exclude=".config/**/*Cache*" \
|
|
--exclude-cache-all \
|
|
--exclude=Downloads \
|
|
--create \
|
|
--verbos \
|
|
--lzma \
|
|
--file ${cfg.home}.tar.lzma \
|
|
--directory ${cfg.home} \
|
|
.
|
|
|
|
cp ${cfg.home}.tar.lzma ${cfg.homeBackup}.tar.lzma
|
|
'';
|
|
|
|
cfg = config.programs.custom.slack;
|
|
|
|
in
|
|
{
|
|
|
|
options.programs.custom.slack = {
|
|
enable = mkEnableOption "install slack";
|
|
|
|
homeBackup = mkOption {
|
|
type = with types; nullOr string;
|
|
description = ''
|
|
folder where to backup
|
|
'';
|
|
};
|
|
|
|
# todo : make sure the folder /home/sudoers belongs to mainUser
|
|
home = mkOption {
|
|
type = with types; string;
|
|
default = "/home/sudoers/slack";
|
|
description = ''
|
|
home folder of this
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
security.sudo.extraConfig = ''
|
|
${config.users.users.mainUser.name} ALL=(${program}) NOPASSWD: ALL
|
|
'';
|
|
|
|
# create users
|
|
users.users."${program}" = {
|
|
home = cfg.home;
|
|
createHome = true;
|
|
# initialPassword = "${program}";
|
|
shell = pkgs.bashInteractive;
|
|
isNormalUser = true;
|
|
group = "users";
|
|
# enable video usage
|
|
extraGroups = [ "video" "audio" "pipewire" ];
|
|
};
|
|
|
|
environment.systemPackages = [ bin backupScript desktopFile ];
|
|
};
|
|
}
|
|
|