diff --git a/roles/obsidian/tasks/Linux.yaml b/roles/obsidian/tasks/Linux.yaml
index e9d7a61..7a4aecc 100644
--- a/roles/obsidian/tasks/Linux.yaml
+++ b/roles/obsidian/tasks/Linux.yaml
@@ -32,7 +32,7 @@
     state: directory
   with_items:
     - '{{ansible_env.HOME}}/.local/bin'
-    - '{{ansible_env.HOME}}/.local/share/icon/hicolor/512x512/apps'
+    - '{{ansible_env.HOME}}/.local/share/icons/hicolor/512x512/apps'
 
 - name: create symlink
   file:
diff --git a/roles/webcatalog/tasks/Linux.yaml b/roles/webcatalog/tasks/Linux.yaml
index 05d2c51..0ecb524 100644
--- a/roles/webcatalog/tasks/Linux.yaml
+++ b/roles/webcatalog/tasks/Linux.yaml
@@ -16,6 +16,7 @@
     appimage: 'WebCatalog-{{releases[0].version}}.AppImage'
 - set_fact:
     filepath: '{{ansible_env.HOME}}/.local/bin/{{appimage}}'
+    iconpath: 'share/icons/hicolor/512x512/apps/webcatalog.png'
 
 - set_fact:
     needs_installed:
@@ -28,13 +29,37 @@
     dest: '{{ansible_env.HOME}}/.local/bin/{{appimage}}'
     mode: '0755'
 
+- name: create directories
+  file:
+    path: '{{item}}'
+    state: directory
+  with_items:
+    - '{{ansible_env.HOME}}/.local/bin'
+    - '{{ansible_env.HOME}}/.local/share/icons/hicolor/512x512/apps'
+
 - name: create symlink
   file:
     src: '{{filepath}}'
     dest: '{{ansible_env.HOME}}/.local/bin/WebCatalog'
     state: link
 
-# TODO: icon for desktop file
+- name: extract squashfs-root for app icon
+  when: needs_installed
+  command:
+    cmd: '{{ansible_env.HOME}}/.local/bin/WebCatalog --appimage-extract'
+    chdir: '/tmp'
+
+- name: copy icon file
+  when: needs_installed
+  copy:
+    src: '/tmp/squashfs-root/usr/{{iconpath}}'
+    dest: '{{ansible_env.HOME}}/.local/{{iconpath}}'
+
+- name: remove squashfs-root directory
+  when: needs_installed
+  file:
+    path: '/tmp/squashfs-root'
+    state: absent
 
 - name: create desktop file
   template: