diff --git a/examples/archlinux-gnome/conf.d/basic.sh b/examples/archlinux-gnome/conf.d/basic.sh
index 380872dcc08c2a74619b95dc9322c8a591cc03d4..9342b568aae01ec554d069136d7727ac48fe1156 100644
--- a/examples/archlinux-gnome/conf.d/basic.sh
+++ b/examples/archlinux-gnome/conf.d/basic.sh
@@ -1,5 +1,24 @@
 lc_assert_user_is root
 
+desktop_related_setup () {
+    # to install & enable gnome
+    pacman -Sy --noconfirm gnome networkmanager power-profiles-daemon nextcloud-client firefox
+    systemctl enable gdm NetworkManager power-profiles-daemon
+
+    # more customization...
+    pacman -Sy --needed --noconfirm base-devel nextcloud-client firefox telegram-desktop docker shadowsocks-rust v2ray proxychains xclip adobe-source-han-sans-cn-fonts      pcsclite ccid    git inetutils wget ttf-fira-code htop tmux dos2unix nfs-utils python-pip gnome-tweaks fcitx5-im man-db man-pages  kolourpaint breeze
+    pacman -Sy --needed --noconfirm recolic-aur/gnome-terminal-transparency recolic-aur/oreo-cursors-git
+    
+    echo '
+# This file is parsed by pam_env module
+# Syntax: simple KEY=VAL pairs on separate lines
+GTK_IM_MODULE=fcitx5
+QT_IM_MODULE=fcitx5
+XMODIFIERS=@im=fcitx5' > /etc/environment
+    
+    systemctl enable bluetooth pcscd.service
+}
+
 lc_init () {
     # my favorite pkgs
     pacman -Sy --noconfirm fish dhcpcd vim sudo openssh
@@ -12,8 +31,16 @@ lc_init () {
 
     sudo -u rtest linuxconf register masterconf.sh
 
-    # more desktop pkgs
-    pacman -Sy --noconfirm gnome networkmanager power-profiles-daemon nextcloud-client firefox
-    systemctl enable gdm NetworkManager power-profiles-daemon
+    # more customization...
+    grep kernel.sysrq=1 /etc/sysctl.d/99-sysctl.conf || echo 'kernel.sysrq=1' >> /etc/sysctl.d/99-sysctl.conf
+
+    grep recolic-aur /etc/pacman.conf || echo '[recolic-aur]
+    SigLevel = Optional TrustAll
+    Server = https://drive.recolic.cc/mirrors/recolic-aur' >> /etc/pacman.conf
+    sed -i 's/^[# ]*ParallelDownloads =[ 0-9A-Za-z]*$/ParallelDownloads = 5/g' /etc/pacman.conf
+    sed -i 's/^[# ]*SystemMaxUse=[ 0-9A-Za-z]*$/SystemMaxUse=150M/g' /etc/systemd/journald.conf
+    sed -i 's/^[# ]*SystemMaxFileSize=[ 0-9A-Za-z]*$/SystemMaxFileSize=30M/g' /etc/systemd/journald.conf
+
+    desktop_related_setup
 }
 
diff --git a/examples/archlinux-gnome/conf.d/desktop.sh b/examples/archlinux-gnome/conf.d/desktop.sh
index f9eda26e7ee2e8f6cbab6febc660eeefcaf995af..5b7acdf10ab27ead4832e31b8b1669fc8df6e108 100644
--- a/examples/archlinux-gnome/conf.d/desktop.sh
+++ b/examples/archlinux-gnome/conf.d/desktop.sh
@@ -1,14 +1,54 @@
 lc_assert_user_is_not root
 
+config_gsettings () {
+    echo "## gnome desktop config"
+    gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type nothing
+    gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type nothing
+    gsettings set org.gnome.settings-daemon.plugins.power idle-dim false
+    gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
+    gsettings set org.gnome.desktop.privacy remember-recent-files false
+    gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true
+    gsettings set org.gnome.desktop.interface enable-hot-corners false
+    gsettings set org.gnome.desktop.media-handling automount false
+    gsettings set org.gnome.desktop.media-handling automount-open false
+    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-left "['<Shift><Alt>Left']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-right "['<Shift><Alt>Right']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-up "['<Shift><Alt>Up']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-down "['<Shift><Alt>Down']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-left "['<Super><Shift>Left']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-right "['<Super><Shift>Right']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-up "['<Super><Shift>Up']"
+    gsettings set org.gnome.desktop.wm.keybindings move-to-monitor-down "['<Super><Shift>Down']"
+    gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Primary>Tab']"
+    gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward "['<Primary><Shift>Tab']"
+    gsettings set org.gnome.desktop.wm.keybindings switch-applications "['<Super>Tab', '<Alt>Tab']"
+    gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "['<Shift><Super>Tab', '<Shift><Alt>Tab']"
+
+   
+}
+
 lc_init () {
     [[ -d $HOME/sh ]] || git clone https://git.recolic.net/root/daily-scripts.git $HOME/sh || return 1
 
+    # config_gpg
+    config_gsettings
 }
 
 lc_fsmap $HOME/sh/mybin /usr/mybin
 
 lc_startup () {
+    firefox_config='
+user_pref("browser.tabs.tabmanager.enabled", false);
+user_pref("services.sync.prefs.sync.browser.uiCustomization.state", true);
+user_pref("browser.tabs.hoverPreview.enabled", false);'
+    for dir in "$HOME"/.mozilla/firefox/*.default*; do
+        [[ -d "$dir" ]] && echo "$firefox_config" > "$dir/user.js"
+    done
 
+    [[ -f /usr/bin/az ]] && az config set core.login_experience_v2=off
 }
 
+lc_login () {
+    # echo _:1 | bash /usr/mybin/unlock_keyrings
+}
 
diff --git a/examples/template/masterconf.sh b/examples/template/masterconf.sh
index 20fe813813b8a8e0449b56cc3cf5f24a8263e0a0..a073090704780e08d01c862935238ff37870d36c 100644
--- a/examples/template/masterconf.sh
+++ b/examples/template/masterconf.sh
@@ -46,6 +46,8 @@ function lc_cron () {
 # Warning: watch out for unintended user
 lc_fsmap files/vimrc $LC_USER_HOME/.vimrc
 
+lc_daemon files/myservice.sh
+
 # TODO: what if lc_fsmap depends on lc_init() ?? This is not recommended usage. 
 # e.g: 'git clone xxx $HOME/sh' and lc_fsmap $HOME/sh/something /usr/bin/fancy
 # lc_fsmap should success even if $HOME/sh/something doesn't exist yet. (what if dest also not exist? let it fail...)