Compare commits

..
33 Commits
Author SHA1 Message Date
me b09e74c4b7 roleplays, upload latest version. 2026-10-29 19:54:44 -07:00
me 107afbece4 llm, let compose know that the open-webui network for open-terminal is created elsewhere and not to tear it down. 2026-10-29 18:55:19 -07:00
me 076f954abd llm, get Open WebUI & Terminal working 100% without using host network, solves some DNS issues that the containers were seeing for some reason, but adds complexity since they are not in the same compose file. 2026-10-29 17:37:17 -07:00
me 648962e710 llm, still need to add gateway to host so that open-webui can see ollama, port to host is successfully being forwarded though! 2026-10-29 17:03:55 -07:00
me 15370d639f vpn, fix lint issues. 2026-10-29 10:49:58 -07:00
me eb3b16264e vpn, explicitly have Mullvad enable Local Sharing. 2026-10-29 10:48:45 -07:00
me 25346a95de llm, go back to using ports for Docker! 2026-10-29 10:47:35 -07:00
me d25f47bd72 vpn, fix Mullvad breaking Docker. 2026-10-29 10:45:43 -07:00
me 9aa25f85cd llm, go back to using network host for docker containers, ports still not working. 2026-10-29 10:44:14 -07:00
me b732402719 llm, return the sleeps to 10 minutes after the Docker programs starts, messes up the log too much, can run the commands manually if wanting them quickly. 2026-10-29 10:34:21 -07:00
me b3b2cb075f llm, ensure all the open-terminal compose commands use the correct compose file. 2026-10-29 09:57:49 -07:00
me 95542ec233 llm, go ahead and do the Docker image updates at the beginning rather than waiting since it's now a loop. 2026-10-29 09:56:39 -07:00
me 8abe634c42 packages, fix xkb package name. 2026-10-29 08:24:41 -07:00
me 5e0b5fb4d2 llm, have the Docker-based services fork their background update checker and make it a loop. 2026-10-29 08:04:28 -07:00
me 855cffc64d llm, stop doing the DNS portion for open-terminal now that the network is working properly. 2026-10-29 07:43:08 -07:00
me 032239e430 i3, lock the session properly and have it call i3lock plus turn off the screen. 2026-10-28 20:50:06 -07:00
me 57b56d82c4 packages, add xkb, xset, and xlock. 2026-10-28 19:51:42 -07:00
me bede2b84f3 llm, fixed intranet issue, stop using host network for open webui & terminal. 2026-10-28 19:42:05 -07:00
me 4fbf7b41e4 update, prevent error due to empty if statement. 2026-10-28 18:57:01 -07:00
me ce1afc6624 llm, add note to AGENTS about the host system and Docker container preferences. 2026-10-28 17:29:53 -07:00
me b4fc988f97 llm, improve AGENTS since model thinks it can ignore putting the Kotlin version in the build file, ensure a few critical components are installed on open-terminal image, give the built container a name. 2026-10-28 17:07:01 -07:00
me 9ab9f0095b update, stop doing NPM manually. 2026-10-28 08:38:47 -07:00
me 9949014558 llm, begin refactoring the script into an ai folder, also increase parallel. 2026-10-27 19:07:07 -07:00
me 373b03d46c docker, remove the daemon.json file. 2026-10-27 19:06:25 -07:00
me 6117a65009 Add docker.yml to local and test playbooks. 2026-10-27 08:32:23 -07:00
me af82cd3319 llm, extracted docker tasks, no longer needed here. 2026-10-27 08:31:59 -07:00
me bb1529e5b1 docker, pull from llm. 2026-10-27 08:31:09 -07:00
me 252d24b2a7 llm, fixes and improvements to the personality blurbs. 2026-10-27 06:49:52 -07:00
me a997fd8efc llm, update the AGENTS.md text to be a bit more over about when to stop due to blockers and how much effort to put in. 2026-10-27 06:49:31 -07:00
me 88ec75a544 llm, comment the DNS servers which don't actually exist yet. 2026-10-26 09:36:20 -07:00
me 3d64b90d58 llm, ensure open-terminal has access to DNS. 2026-10-25 20:44:48 -07:00
me 892af9a669 llm, the hosts file should already get mounted from the host. 2026-10-25 20:14:03 -07:00
me 7661b85238 roleplays, set up some smaller context models and disabled the big guys and unused guys, also added a Tasks model for chat names and such. 2026-10-25 20:13:30 -07:00
13 changed files with 992 additions and 248 deletions

No files matched your search

+10 -5
View File
@@ -23,6 +23,7 @@
stress: stress
jq: jq
btop: btop
xkb: x11-xkb-utils
- name: General | Facts | Package | Parrot OS Fixes
ansible.builtin.set_fact:
@@ -51,6 +52,7 @@
encfs: encfs
dig: bind
base_devel: base-devel
xkb: xorg-setxkbmap
when: ansible_pkg_mgr == "pacman"
- name: General | Facts | Package | FreeBSD
@@ -266,11 +268,14 @@
;;
esac
update_npm: |
if [[ `which npm` ]]; then
echo "*** NPM ***" &&
sudo npm update -g
echo -e "\n"
fi
## Let's let the distro package managers handle this, otherwise may end up
## breaking dependencies or causing other system weirdness. No thanks! :)
# if [[ `which npm` ]]; then
# echo "*** NPM ***" &&
# sudo npm update -g
# echo -e "\n"
# fi
echo "*** Skipping NPM ***"
# Flatpaks
- name: General | Facts | Package | Update Command | Flatpak | Check
+3 -1
View File
@@ -60,7 +60,8 @@
strawberry: strawberry
dict_en: hunspell-en_us
dict_es: hunspell-es_any
xset: xorg-xset
xlock: xss-lock
- name: Workstation | Facts | Package | apt (All Distros)
ansible.builtin.set_fact:
@@ -80,6 +81,7 @@
ncurses: libncurses-dev
android_udev: android-udev-rules
vlc_plugins: libavcodec-extra
xset: x11-server-utils
when: ansible_pkg_mgr == "apt"
- name: Workstation | Facts | Package | Pop_OS!
+34 -25
View File
@@ -27,28 +27,6 @@ font pango:monospace 8
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8
# Start XDG autostart .desktop files using dex. See also
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
@@ -331,9 +309,11 @@ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcu
bindsym $mod+Shift+q exec "i3-msg exit"
# lock
bindsym $ctrl+$alt+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
bindsym $ctrl+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
bindsym $shift+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
#set $LOCK_CMD "i3lock -c 333333 -e -f && sleep 1 && xset dpms force off"
set $LOCK_CMD "loginctl lock-session"
bindsym $ctrl+$alt+l exec $LOCK_CMD
bindsym $ctrl+$mod+l exec $LOCK_CMD
bindsym $shift+$mod+l exec $LOCK_CMD
# shutdown entire system.
#bindsym $ctrl+$shift+q exec dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
@@ -433,3 +413,32 @@ exec_always --no-startup-id bash -c 'pkill -ef "bash `which battery_nag.sh`" >~/
#exec_always --no-startup-id "killall redshift-gtk; redshift-gtk"
#exec_always --no-startup-id "killall redshift; redshift -l 35.19540:-111.65720 -t 6500K:1100K"
exec_always --no-startup-id "killall redshift; killall redshift-gtk; sleep 1; redshift -x; redshift-gtk -l 35.19540:-111.65720 -t 6500K:1100K"
# Allow locking the session.
#set $AGENT pkttyagent
set $AGENT lxqt-policykit-agent
exec_always --no-startup-id "killall $AGENT; $AGENT"
# Start XDG autostart .desktop files using dex. See also
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
#exec_always --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -c 111111 -e -f --nofork
exec_always --no-startup-id xss-lock --transfer-sleep-lock -- sh -c 'i3lock -c 111111 -e -f --nofork & sleep 1; xset dpms force off; wait'
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
+657 -90
View File
@@ -63,8 +63,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596704,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792539937,
"background_image_data": null
},
@@ -132,8 +132,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596711,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792539958,
"background_image_data": null
},
@@ -201,8 +201,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596722,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792542461,
"background_image_data": null
},
@@ -265,8 +265,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596791,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792542993,
"background_image_data": null
},
@@ -329,8 +329,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596783,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792543028,
"background_image_data": null
},
@@ -393,80 +393,11 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596852,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792573569,
"background_image_data": null
},
{
"version_id": "d5657244-5bd0-4858-bda5-24dd6c45128b",
"id": "coder-moe",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code-MoE [256k,23GB]",
"params": {
"custom_params": {},
"num_ctx": 256000,
"num_thread": 7,
"system": "Please use the attached Knowledge Base files as your personality."
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
},
{
"id": "975690ae-5ddb-4e56-aef1-21f5f73ed74f",
"name": "Quick.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596766,
"created_at": 1792596052,
"background_image_data": null
},
{
"version_id": "8fef2e35-68b2-4b68-a90f-69f66cd07782",
"id": "coder-architect",
@@ -531,8 +462,8 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596744,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792573569,
"background_image_data": null
},
@@ -595,22 +526,23 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596774,
"is_active": false,
"updated_at": 1792896243,
"created_at": 1792573569,
"background_image_data": null
},
{
"version_id": "94031db1-bb29-4c2e-b8ca-540750c33ce9",
"version_id": "a6fd32f5-a499-4358-8eb6-8601b9a4d4f3",
"id": "language-moe",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:35b",
"name": "Lang-MoE [256k,28GB]",
"name": "Lang-MoE [7-256K,28GB]",
"params": {
"system": "Please use the attached Knowledge Base files as your personality.",
"custom_params": {},
"num_thread": 7,
"num_ctx": 64000
"num_ctx": 999999,
"compact_token_threshold": 16000
},
"meta": {
"profile_image_url": "/static/favicon.png",
@@ -659,9 +591,644 @@
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792596751,
"is_active": false,
"updated_at": 1792949676,
"created_at": 1792595834,
"background_image_data": null
},
{
"version_id": "cff6fd12-f6a8-4a27-b34e-e966d90b4bff",
"id": "coder-moe",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code-MoE [7-256K,24GB]",
"params": {
"custom_params": {},
"num_ctx": 999999,
"num_thread": 7,
"system": "Please use the attached Knowledge Base files as your personality.",
"compact_token_threshold": 64000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792949675,
"created_at": 1792596052,
"background_image_data": null
},
{
"version_id": "70a6bcc2-7a7f-4446-bd73-f2433c34af3c",
"id": "coder-moe-64k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code [MoE,4-64k,22GB]",
"params": {
"custom_params": {},
"num_ctx": 64000,
"num_thread": 4,
"system": "Please use the attached Knowledge Base files as your personality.",
"compact_token_threshold": 48000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1792987522,
"created_at": 1792798618,
"background_image_data": null
},
{
"version_id": "2108d3b5-bcc0-458a-abdf-70ed01b9a07e",
"id": "code-moe-4-32ktbd-clone",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code-MoE [4-32k,TBD]",
"params": {
"custom_params": {},
"num_ctx": 64000,
"num_thread": 4,
"system": "Please use the attached Knowledge Base files as your personality.",
"compact_token_threshold": 24000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792949674,
"created_at": 1792896286,
"background_image_data": null
},
{
"version_id": "e5df99a2-6b1a-446f-b714-65b74740022c",
"id": "code-moe-128k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code-MoE [4-128k,TBD]",
"params": {
"custom_params": {},
"num_ctx": 128000,
"num_thread": 4,
"system": "Please use the attached Knowledge Base files as your personality.",
"compact_token_threshold": 96000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792949673,
"created_at": 1792896373,
"background_image_data": null
},
{
"version_id": "e48d06af-e6c0-4034-9506-f2e77030fe00",
"id": "code-moe-256k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.6:35b",
"name": "Code-MoE [4-256K,24GB]",
"params": {
"custom_params": {},
"num_ctx": 999999,
"num_thread": 4,
"system": "Please use the attached Knowledge Base files as your personality.",
"compact_token_threshold": 32000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
"name": "Coder.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "code"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792984273,
"created_at": 1792896428,
"background_image_data": null
},
{
"version_id": "0ee081d0-303d-480b-ae05-00abc9394503",
"id": "lang-moe-64k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:35b",
"name": "Lang [MoE,4-64K,23GB]",
"params": {
"system": "Please use the attached Knowledge Base files as your personality.",
"custom_params": {},
"num_thread": 4,
"num_ctx": 64000,
"compact_token_threshold": 48000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
"name": "Language.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "language"
},
{
"name": "general"
}
],
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792988150,
"created_at": 1792899998,
"background_image_data": null
},
{
"version_id": "11892bd5-5049-45e8-a13e-bd2678ff584c",
"id": "lang-moe-256k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:35b",
"name": "Lang-MoE [4-256K,28GB]",
"params": {
"system": "Please use the attached Knowledge Base files as your personality.",
"custom_params": {},
"num_thread": 4,
"num_ctx": 999000,
"compact_token_threshold": 16000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
"name": "Language.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "language"
}
],
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
"defaultFeatureIds": [
"web_search",
"image_generation",
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792984275,
"created_at": 1792949420,
"background_image_data": null
},
{
"version_id": "b41d4794-2f89-48a9-8f74-fbc7732f7c4a",
"id": "tasks",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:4b",
"name": "Tasks [4b,4-32k,2.6GB]",
"params": {
"custom_params": {},
"num_ctx": 32000,
"num_thread": 4,
"compact_token_threshold": 16000,
"system": "Please used the attached Knowledge Base files as your personality."
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "general"
}
],
"defaultFeatureIds": [
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792988777,
"created_at": 1792977834,
"background_image_data": null
},
{
"version_id": "d3edb3bc-8097-4d68-aa7c-3986fb2e6224",
"id": "tasks-2b",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:2b",
"name": "Tasks [2b,4-16k,2.6GB]",
"params": {
"custom_params": {},
"num_ctx": 16000,
"num_thread": 4,
"compact_token_threshold": 8000,
"system": "Please used the attached Knowledge Base files as your personality."
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "general"
}
],
"defaultFeatureIds": [
"code_interpreter"
]
},
"access_grants": [],
"is_active": false,
"updated_at": 1792988758,
"created_at": 1792987029,
"background_image_data": null
},
{
"version_id": "3979937f-a787-4e01-ac72-f55ddd0ebf17",
"id": "lang-32k",
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
"base_model_id": "qwen3.5:35b",
"name": "Lang [MoE,4-32K,22GB]",
"params": {
"system": "Please use the attached Knowledge Base files as your personality.",
"custom_params": {},
"num_thread": 4,
"num_ctx": 32000,
"compact_token_threshold": 24000
},
"meta": {
"profile_image_url": "/static/favicon.png",
"background_image_url": null,
"description": null,
"i18n": null,
"capabilities": {
"file_context": true,
"vision": true,
"file_upload": true,
"web_search": true,
"image_generation": true,
"code_interpreter": true,
"terminal": true,
"citations": true,
"status_updates": true,
"usage": true,
"memory": true,
"builtin_tools": true
},
"knowledge": [
{
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
"name": "Base.md",
"type": "file"
},
{
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
"name": "Language.md",
"type": "file"
}
],
"voice": null,
"voice_avatar": null,
"suggestion_prompts": null,
"tags": [
{
"name": "language"
},
{
"name": "general"
}
],
"defaultFeatureIds": [
"web_search",
"image_generation"
]
},
"access_grants": [],
"is_active": true,
"updated_at": 1793328802,
"created_at": 1792988144,
"background_image_data": null
}
]
+3 -1
View File
@@ -129,7 +129,9 @@
- ansible.builtin.include_tasks: tasks/workstation/linux/software/android.yml
- ansible.builtin.include_tasks: tasks/workstation/linux/software/llm.yml
- ansible.builtin.include_tasks: tasks/workstation/linux/software/docker.yml
- ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
when: ansible_system == "Linux"
and internet
+1
View File
@@ -69,6 +69,7 @@
- "{{ stress }}"
- "{{ jq }}"
- "{{ btop }}"
- "{{ xkb }}"
state: present
- name: General | Software | Packages | Install Software (DEV)
@@ -11,7 +11,7 @@ personalities that help guide the AI into productivity rather than verbosity.
You are concise, succinct, and direct with responses. Unapologetic yet kind.
Friendly but not overbearing. You strive to be correct and are willing to admit
when you may now truly know something or further research needs to be done. You
when you may not truly know something, or further research needs to be done. You
focus on responding without overthinking, preferring to ask questions when any
confusion arises. You choose to make very little assumptions, raising concern if
anything needs elaboration, clarification, or refinement. You are good at what
@@ -31,10 +31,13 @@ interest in learning Croatian and practicing Spanish. You know that I am a
native English speaker with very little experience in anything other than
Spanish, but that I have not had much practice with my Spanish other than
university studies. You know that I also have an eventual interest in Italian
but am not focusing on it since it and Spanish are a bit too similar. Learning
Croatian is my top priority and practicing Spanish is right after that. Any
similarities that can therefore be tied to any of the aforementioned languages
are greatly appreciated.
but am not focusing on it since it and Spanish are a bit too similar to be
learned at the same time. Learning Croatian is my top priority and practicing
Spanish is right after that. Any similarities that can therefore be tied to any
of the aforementioned languages are greatly appreciated. Using easy vocabulary
initially is also very helpful, rather than going into advanced tenses or vocab
that only a native or fluent speaker would know, at least until I begin to show
that level of ability and skill. Please keep things simple, direct, and concise.
### Coder
@@ -48,16 +51,16 @@ overwhelming them with technical details unless asked. You know that the
designer you are working with (me, the user) likely already understands these
things and does not need them included in our conversation.
Android SDK is at $ANDROID_HOME and should be "$HOME/SDKs/Android/Sdk".
Flutter SDK is at $FLUTTER_HOME and should be "$HOME/SDKs/Flutter/flutter".
Java SDK (JDK) is at $JAVA_HOME and should be "$HOME/SDKs/Java".
Android SDK is at `$ANDROID_HOME` and should be `$HOME/SDKs/Android/Sdk`.
Flutter SDK is at `$FLUTTER_HOME` and should be `$HOME/SDKs/Flutter/flutter`.
Java SDK (JDK) is at `$JAVA_HOME` and should be `$HOME/SDKs/Java`.
These have also been added your PATH:
These have been added your PATH via `/home/user/.bashrc`:
- "$ANDROID_HOME/platform-tools"
- "$ANDROID_HOME/cmdline-tools/latest/bin"
- "$FLUTTER_HOME/bin"
- "$JAVA_HOME/bin"
- `$ANDROID_HOME/platform-tools`
- `$ANDROID_HOME/cmdline-tools/latest/bin`
- `$FLUTTER_HOME/bin`
- `$JAVA_HOME/bin`
#### Quick Developer
@@ -105,7 +108,7 @@ Number of physical cores is 8, hyperthreaded to 16, but supposedly the emulated
cores are not very useful to LLMs. Try only using between 6 and 8 when possible.
Research says it is not worth enabling the iGPU for Intel XE, CPUs are better.
## Benchmark
## Benchmarks
### System
@@ -66,7 +66,15 @@
# Also setting this to a minimum of 3 for using Codium with extensions.
# 20261014: Going down to 1 since only using CPUs, no GPUs. Otherwise
# the models seem to take excessively long to answer even small things.
llm_parallel: 1 #"{{ [(ansible_processor_vcpus / 2) | round(0, method='ceil'), 3] | max | int }}"
#llm_parallel: 1 #"{{ [(ansible_processor_vcpus / 2) | round(0, method='ceil'), 3] | max | int }}"
# 20261027 Increased to 3 as a maximum.
# After more research, this is a more memory-based parameter. Basically
# the model allocates this number of KV caches, that way when it is
# running in multiple chats it does not need to drop context and reload.
# Still only uses X threads for all chats, but does not waste much time.
# So if set to 3, and doing 64K context, it really allocates 192k in RAM
# and supposedly if only doing 1 chat the model can use it all.
llm_parallel: "{{ [(ansible_memtotal_mb / 8000) | round(0, method='floor'), 3] | min | int }}"
# Most LLMs take a coefficient of about 1.2 to 1.5 of their file size in
# RAM, which is usually less than guessing a usage of weight*1000.
# Example:
@@ -76,6 +84,7 @@
llm_size_coef: 1.3
# Base the context on MB of RAM, with a minumum 64k for decent thinking.
llm_context: "{{ [(ansible_memtotal_mb * 4) | round(-3, method='ceil'), 64000] | max | int }}"
llm_docker_network: open-webui-net
- name: Workstation | Linux | Software | LLMs | Facts 02
ansible.builtin.set_fact:
@@ -228,29 +237,6 @@
- "{{ qwen_code }}"
state: present
- name: Workstation | Linux | Software | LLMs | Docker | Install
ansible.builtin.package:
name:
- docker
- docker-compose
state: present
- name: Workstation | Linux | Software | LLMs | Docker | runit
ansible.builtin.package:
name:
- docker-runit
state: present
when: ansible_pkg_mgr == "pacman"
- name: Workstation | Linux | Software | LLMs | Docker | Group
ansible.builtin.user:
name: "{{ item }}"
groups: docker
append: true
loop:
- root
- "{{ user }}"
- name: Workstation | Linux | Software | LLMs | runit
block:
@@ -287,6 +273,7 @@
### Required ###
export HOME={{ user_user.home }}
export OLLAMA_HOST=0.0.0.0 # Needed for Open WebUI
### Timeouts ###
export OLLAMA_LOAD_TIMEOUT=30m # default is 5m
@@ -295,7 +282,7 @@
### Resource Usage ###
export OLLAMA_KEEP_ALIVE=-1 # default is 5m. Good frontends keep the model alive as long as it needs to be, this is not a source of timeout.
export OLLAMA_MAX_LOADED_MODELS={{ llm_concurrency }} # default is 3 if using CPUs, or 3 * NumGPUs
export OLLAMA_NUM_PARALLEL={{ llm_parallel }} # default is 1 and applies per-model (unconfirmed)
export OLLAMA_NUM_PARALLEL={{ llm_parallel }} # default is 1 and applies per-model
export OLLAMA_CONTEXT_LENGTH={{ llm_context }} # default is 4096, https://docs.ollama.com/faq#how-can-i-specify-the-context-window-size
export OLLAMA_MAX_QUEUE=999 # default is 512 (unconfirmed)
export OLLAMA_NUM_THREADS={{ (ansible_processor_vcpus / 2) | int }} # not real, but maybe some day.
@@ -426,6 +413,13 @@
content: |
#!/bin/sh
exec 2>&1
## TBD / TODO
## Move this to the same compose file as Open Terminal.
## Will solve quite a few network related complications.
## Also refactor the two into their own file (open_webui.yml).
## Probably also will then condense into 1 runit service.
image=ghcr.io/open-webui/open-webui:latest
# Wait for Docker to start up.
@@ -434,45 +428,43 @@
# Ensure the old container is gone.
echo "RUN: Stopping..."
docker stop open-webui &&
echo "RUN: Container stopped" ||
echo "RUN: Container stopped." ||
echo "RUN: Container already stopped."
echo "RUN: Deleting..."
docker rm -f open-webui &&
echo "RUN: Container deleted" ||
echo "RUN: Container deleted." ||
echo "RUN: Container already deleted."
# Check for any new updates in background.
sleep 300 &&
echo "RUN: Updating..." &&
docker pull $image &
# Check for any new updates in the background.
(
while true; do
sleep 600
echo "RUN: Checking for updates..."
docker pull $image
done
) &
LOOP_PID=$!
# Ensure cleanup on any exit (normal or signal from runit).
trap 'kill "$LOOP_PID" 2>/dev/null; wait "$LOOP_PID" 2>/dev/null' EXIT
# Create a network for associated programs.
net={{ llm_docker_network }}
docker network inspect $net >/dev/null 2>&1 || \
docker network create $net
# Start the open-webui program.
set -e
exec docker run \
--name open-webui \
--network=host -e PORT={{ open_webui_port }} \
-e OLLAMA_BASE_URL=http://0.0.0.0:11434 \
docker run \
--name open-webui --network $net \
-e PORT={{ open_webui_port }} \
-p {{ open_webui_port }}:{{ open_webui_port }} \--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
{{ ("-e HF_TOKEN=" ~ hf_token) if hf_token else '' }} \
-e WEBUI_SECRET_KEY={{ open_webui_key }} \
-e ENABLE_QUERIES_CACHE=True \
-v open-webui:/app/backend/data \
$image
# Unsure why this was not working on Artix with runit.
# exec curl 0.0.0.0:8080/health gave a successful response.
# The environment was not accessible on the host though.
#-p {{ open_webui_port }}:8080 \
# The host.docker.internal params still seem required, even with
# giving access to the host system and trying this:
#-e OLLAMA_BASE_URL=http://localhost:11434 \
# Although I did not try it with 0.0.0.0, maybe that'd work.
# Had to change this to 0.0.0.0, below was still acting weird.
#-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
# 20261020, trying to remove this again while leaving the rest.
#--add-host=host.docker.internal:host-gateway \
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Script | Finish
@@ -589,24 +581,33 @@
container. You are the user `user` and have been granted access to
the designer's Code and SDKs via mount at `{{ user_user.home }}`.
Host system is typically (but not always) a systemd-free distro
such as Artix or Devuan. User likes the `runit` service manager.
`elogind` is used rather than systemd's logind. Desktop is i3 and
display manager is lightdm. Servers are run on Debian and Docker
containers are typically debian:trixie-slim with a Dockerfile
called by compose.yml which adds the necessary packages, sometimes
building from source if the Debian executable is too old.
If the `$GOT_EM` environment variable is `true` then all the
necessary packages for compiling Android and Flutter were
installed. If it is `false` then they were not installed, and
compiling will fail. Please check this before trying and alert me
if they need added. If we don;t have Internet, then ask me to
if they need added. If we don't have Internet, then ask me to
compile or run whatever command is needed on the host system.
# Rules
Never use any `git` subcommands that change anything, including
Never use any `git` subcommands that change the repo, including
but not limited to `add`, `commit`, `pull`, `push`, `branch`,
`switch`, etc. The user is who controls the respository changes.
You may informational git subcommands such as use `git status`.
You may use informational git subcommands such as `git status`,
and may occasionally be asked to run `git clone` type commands.
If any programs need installed in order to work on a project, we
need to document that in an install.sh script, as well as add it
to ~/PACKAGES.txt so that the user can ensure they stay installed.
install.sh scripts should be for both `apt` systems (Debian,
need to document that in an `install.sh` script, as well as add it
to `~/PACKAGES.txt` so that we can ensure they stay installed.
`install.sh` scripts should be for both `apt` systems (Debian,
Ubuntu) and pacman system (Arch, Artix). using distribution
package managers is preferable over `pip` and `npm` when
possible, unless the project is actually Python or Node.js.
@@ -620,10 +621,27 @@
such as `/usr/lib/jvm`, please ask the user and halt all further
operations until you have received feedback.
# Effort
It is never okay to brute force a solution if something is not
working well. it is better to ask the user for assistance or alert
them that you've encountered blockers and then cease the process
until you've received feedback.
until you've received feedback. This especially relates to when
system errors occur which are not related to the source code, such
as a compiler failing to be found or an SDK version mismatch. If
the error is with the source code though, troubleshooting and code
changes should continue until the program is compiling properly.
For CLI projects such as script languages, the final result should
always be tested both to run successfully and have the proper
output. All test cases should be analyzed and walked through,
which will help ensure all the requirements have been met.
For GUI programs (such as Android, Flutter, Kotlin Multiplatform,
Kivy, etc), the project should be tested to both compile & build
successfully and also generate the proper installation file (APK,
Linux Bundle). Once that is confirmed, the user/desginer will test
that the application meets the proper requirements.
# Preferences
@@ -647,6 +665,12 @@
- Kotlin: 2.4.20
- Java: JDK 17
- Flutter (plugin loader): 1.0.0
Regardless of whether AGP bundles Kotlin, we need to specify it to
avoid things like "Your project's Kotlin version (2.2.10) is lower
than Flutter's minimum supported version of 2.2.20. Please upgrade
your Kotlin version." This is exactly why we use these versions,
plus it helps document what's actually being used over guessing.
backup: false
owner: "{{ user }}"
group: "{{ user }}"
@@ -654,7 +678,7 @@
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Compose YAML
ansible.builtin.copy:
dest: /usr/local/etc/open-terminal/docker-compose.yml
dest: /usr/local/etc/open-terminal/compose.yml
content: |
#exec docker run \
# --name open-terminal \
@@ -675,14 +699,37 @@
# -e OPEN_TERMINAL_PACKAGES="$packages" \
# -e GOT_EM="$GOT_EM" \
# $image run --port {{ open_terminal_port }}
networks:
{{ llm_docker_network }}:
name: {{ llm_docker_network }}
external: true
services:
open-terminal:
build:
context: ./
network: host
image: hyperling-open-terminal:latest
container_name: open-terminal
network_mode: host
ports:
- {{ open_terminal_port }}:{{ open_terminal_port }}
networks:
- {{ llm_docker_network }}
#dns:
# ## Mullvad
# ## (https://mullvad.net/en/help/dns-over-https-and-dns-over-tls)
# #- 194.242.2.9 # all.dns.mullvad.net
# ##- 194.242.2.8 # not real (yet?)
# ##- 194.242.2.7 # not real (yet?)
# #- 194.242.2.6 # family.dns.mullvad.net
# #- 194.242.2.5 # extended.dns.mullvad.net
# #- 194.242.2.4 # base.dns.mullvad.net
# #- 194.242.2.3 # adblock.dns.mullvad.net
# - 194.242.2.2 # dns.mullvad.net
# #- 194.242.2.1 # not real (yet?)
# #- 194.242.2.0 # not real (yet?)
# ## Cloudflare
# - 1.0.0.1
# - 1.1.1.1
command: run --port {{ open_terminal_port }}
environment:
- OPEN_TERMINAL_FILE_BROWSER_ROOT=/home/user
@@ -700,7 +747,7 @@
- {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro
- {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro
- {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro
- /etc/hosts:/etc/hosts:ro
#- /etc/resolv.conf:/etc/resolv.conf:ro
- {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle
- {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache
owner: root
@@ -714,14 +761,18 @@
USER root
RUN echo "System"
RUN apt-get update && apt-get install -y \
ca-certificates git curl bash sudo wget ansible ansible-lint
RUN echo "Android"
RUN apt-get update && apt-get install -y \
libc6:amd64 libncurses-dev \
libstdc++6 lib32z1 libbz2-1.0 android-udev-rules
# Debian removed JDK 17, continue serving from the host.
# Debian removed JDK 17, continue serving from the host.
# default-jdk openjdk-17-jdk
RUN echo "Flutter (Main)"
RUN echo "Flutter"
RUN apt-get update && apt-get install -y \
curl git unzip xz-utils zip libglu1-mesa libglu1-mesa
@@ -734,6 +785,10 @@
RUN apt-get update && apt-get install -y \
libc6:amd64 libstdc++6 lib32z1 libbz2-1.0
RUN echo "Ansible"
RUN apt-get update && apt-get install -y \
ansible ansible-lint
USER user
owner: root
mode: "0755"
@@ -758,22 +813,32 @@
# Ensure the old container is stopped.
echo "RUN: Stopping..."
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down &&
echo "RUN: Container stopped" ||
docker compose \
-f /usr/local/etc/open-terminal/compose.yml down &&
echo "RUN: Container stopped." ||
echo "RUN: Container already stopped."
# Check for any new updates in background.
sleep 600 &&
echo "RUN: Updating..." &&
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml \
build --pull &
# Check for any new updates in the background.
(
while true; do
sleep 600
echo "RUN: Checking for updates..."
docker compose \
-f /usr/local/etc/open-terminal/compose.yml \
build --pull
done
) &
LOOP_PID=$!
# Ensure cleanup on any exit (normal or signal from runit).
trap 'kill "$LOOP_PID" 2>/dev/null; wait "$LOOP_PID" 2>/dev/null' EXIT
export GOT_EM=true
# Start the open-terminal program.
# https://github.com/open-webui/open-terminal#configuration
set -e
exec docker compose -f /usr/local/etc/open-terminal/docker-compose.yml up
docker compose -f /usr/local/etc/open-terminal/compose.yml up
owner: root
mode: "0755"
@@ -784,7 +849,7 @@
{{ runit_finish_sleep }}
echo "FINISH: Stopping..."
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down &&
docker compose -f /usr/local/etc/open-terminal/compose.yml down &&
echo "FINISH: Container stopped" ||
echo "FINISH: Container already stopped."
@@ -0,0 +1,54 @@
# 2026-10-27 Hyperling
# Pulled out of llm.yml since the number of tasks is growing.
- name: Workstation | Linux | Software | Docker | Install
ansible.builtin.package:
name:
- docker
- docker-compose
- docker-buildx
state: present
- name: Workstation | Linux | Software | Docker | Install [runit]
ansible.builtin.package:
name:
- docker-runit
state: present
when: ansible_pkg_mgr == "pacman"
and ansible_service_mgr == "runit"
- name: Workstation | Linux | Software | Docker | Group
ansible.builtin.user:
name: "{{ item }}"
groups: docker
append: true
loop:
- root
- "{{ user }}"
- name: Workstation | Linux | Software | Docker | Config | Dir
ansible.builtin.file:
name: /etc/docker
state: directory
owner: root
mode: '0755'
# This was causing the docker daemon to fail. Was trying to fix ports mappings.
#- name: Workstation | Linux | Software | Docker | Config | File
# ansible.builtin.copy:
# dest: /etc/docker/daemon.json
# content: |
# {
# "firewall-backend": "nftables"
# }
# backup: false
# owner: root
# mode: '0644'
# when: ansible_pkg_mgr == "pacman"
- name: Workstation | Linux | Software | Docker | Config | File
ansible.builtin.file:
name: /etc/docker/daemon.json
state: absent
owner: root
mode: '0755'
+58 -37
View File
@@ -5,52 +5,73 @@
- name: Workstation | Linux | Software | Hugo
block:
- name: Workstation | Linux | Software | Hugo | pacman
block:
- name: Workstation | Linux | Software | Hugo | pacman
block:
- name: Workstation | Linux | Software | Hugo | pacman | Facts
ansible.builtin.set_fact:
sass_old: ruby-sass
sass_current: dart-sass
- name: Workstation | Linux | Software | Hugo | pacman | Facts
ansible.builtin.set_fact:
sass_old: ruby-sass
sass_current: dart-sass
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
ansible.builtin.package:
name:
- "{{ sass_old }}"
state: absent
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
ansible.builtin.package:
name:
- "{{ sass_old }}"
state: absent
- name: Workstation | Linux | Software | Hugo | pacman | Install New
ansible.builtin.package:
name:
- "{{ sass_current }}"
state: present
- name: Workstation | Linux | Software | Hugo | pacman | Install New
ansible.builtin.package:
name:
- hugo
- "{{ sass_current }}"
state: present
when: ansible_pkg_mgr == "pacman"
when: ansible_pkg_mgr == "pacman"
# This must exist after nodejs.yml so that NPM is installed.
- name: Workstation | Linux | Software | Hugo | npm
block:
# This must exist after nodejs.yml so that NPM is installed.
- name: Workstation | Linux | Software | Hugo | apt
block:
- name: Workstation | Linux | Software | Hugo | npm | Facts
ansible.builtin.set_fact:
sass_old: node-sass
sass_current: sass
- name: Workstation | Linux | Software | Hugo | apt | sass | Facts
ansible.builtin.set_fact:
sass_old: node-sass
sass_current: sass
- name: Workstation | Linux | Software | Hugo | npm | Gather
ansible.builtin.shell: npm prefix -g
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
changed_when: false
- name: Workstation | Linux | Software | Hugo | apt | sass | Gather
ansible.builtin.shell: npm prefix -g
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
changed_when: false
- name: Workstation | Linux | Software | Hugo | npm | Remove Old
ansible.builtin.shell: "npm remove -g {{ sass_old }}"
args:
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
- name: Workstation | Linux | Software | Hugo | apt | sass | Remove Old
ansible.builtin.shell: "npm remove -g {{ sass_old }}"
args:
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
- name: Workstation | Linux | Software | Hugo | npm | Install New
ansible.builtin.shell: "npm install -g {{ sass_current }}"
args:
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
- name: Workstation | Linux | Software | Hugo | apt | sass | Install New
ansible.builtin.shell: "npm install -g {{ sass_current }}"
args:
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
when: ansible_pkg_mgr == "apt"
- name: Workstation | Linux | Software | Hugo | apt | hugo | Remove Old
ansible.builtin.package:
name:
- hugo
state: absent
- name: Workstation | Linux | Software | Hugo | apt | hugo | Install Dependencies
ansible.builtin.package:
name:
- golang
- gcc
state: present
- name: Workstation | Linux | Software | Hugo | apt | hugo | Build
ansible.builtin.shell: |
CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
ln -s $HOME/go/bin/hugo /usr/local/bin/hugo
register: shell_check
changed_when: shell_check.rc == 0
when: ansible_pkg_mgr == "apt"
when: coding is true
@@ -54,6 +54,8 @@
- "{{ strawberry }}"
- "{{ dict_en }}"
- "{{ dict_es }}"
- "{{ xset }}"
- "{{ xlock }}"
state: present
- name: Workstation | Linux | Software | Packages | Install From Repo [Coding]
+11 -1
View File
@@ -13,12 +13,16 @@
- echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list
- apt update
when: ansible_pkg_mgr == "apt"
register: shell_check
changed_when: shell_check.rc == 0
- name: Workstation | Software | VPN | Mullvad | Add Repo [dnf]
ansible.builtin.shell: "{{ item }}"
loop:
- sudo dnf config-manager --add-repo https://repository.mullvad.net/rpm/stable/mullvad.repo
when: ansible_pkg_mgr == "dnf"
register: shell_check
changed_when: shell_check.rc == 0
- name: Workstation | Software | VPN | Install
ansible.builtin.package:
@@ -67,6 +71,8 @@
- "cd {{ mullvad_repack_dir }} && ./repack.sh ../Mullvad.deb"
- "apt-get install -y --reinstall {{ devuan_mullvad_dir }}/Mullvad_repack.deb"
when: not mullvad_installed.stat.exists
register: shell_check
changed_when: shell_check.rc == 0
when: ansible_pkg_mgr == "apt"
and ansible_service_mgr != "systemd"
@@ -95,6 +101,8 @@
- echo "cd {{ mullvad_exe_dir }}" >> {{ mullvad_exe_new }}
- echo "./{{ mullvad_exe }}" >> {{ mullvad_exe_new }}
- chmod +x {{ mullvad_exe_new }}
register: shell_check
changed_when: shell_check.rc == 0
- name: Workstation | Software | VPN | Mullvad | runit | Enable Service (mullvad-daemon)
ansible.builtin.file:
@@ -113,7 +121,7 @@
- name: Workstation | Software | VPN | Mullvad | PATH | Enable Lockdown
ansible.builtin.shell: "{{ item }}"
loop:
- mullvad lan set block
- mullvad lan set allow # This allows Docker to forward ports to localhost!
- mullvad tunnel set ipv6 on
- mullvad dns set default --block-ads --block-trackers --block-malware --block-gambling --block-adult-content --block-social-media
- mullvad auto-connect set on
@@ -121,3 +129,5 @@
- mullvad beta-program set off
become: true
become_user: "{{ user }}"
register: shell_check
changed_when: shell_check.rc == 0
+4 -1
View File
@@ -24,8 +24,11 @@
- name: Java
ansible.builtin.include_tasks: tasks/workstation/linux/software/java.yml
- name: Docker
ansible.builtin.include_tasks: tasks/workstation/linux/software/docker.yml
- name: LLM
ansible.builtin.include_tasks: tasks/workstation/linux/software/llm.yml
ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
#######################
#######################