Compare commits
163
Commits
2ff0ccd392
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b56fa60739 | ||
|
|
4e8d22cb46 | ||
|
|
3bc2185962 | ||
|
|
aa9ccbfd54 | ||
|
|
444b34bd31 | ||
|
|
e996cb9ef1 | ||
|
|
5b668e97f4 | ||
|
|
4b26e1b3ae | ||
|
|
5d3040da71 | ||
|
|
be4d8cd4f6 | ||
|
|
d24381ad1e | ||
|
|
ad8b4a1663 | ||
|
|
8d01548627 | ||
|
|
f587ca1e5e | ||
|
|
bbffe8c69a | ||
|
|
768cabfe45 | ||
|
|
b1bdc953c2 | ||
|
|
1764ca510f | ||
|
|
7f986e51d3 | ||
|
|
d0970f5971 | ||
|
|
d94397349b | ||
|
|
bb1514c33d | ||
|
|
0581ea62df | ||
|
|
0332289742 | ||
|
|
a3a647318d | ||
|
|
4da671c40e | ||
|
|
4db955b32d | ||
|
|
c0a9d79776 | ||
|
|
4145a12637 | ||
|
|
c23bb1c06b | ||
|
|
a9b78dbba2 | ||
|
|
a714a26058 | ||
|
|
d15b22ec26 | ||
|
|
482d3072f5 | ||
|
|
609edd6c3b | ||
|
|
1ded62a3d4 | ||
|
|
0303a1c091 | ||
|
|
10b21ac49b | ||
|
|
7efa7f1b91 | ||
|
|
d3a5946232 | ||
|
|
46890d0d16 | ||
|
|
9073dfc597 | ||
|
|
f3d9f088c7 | ||
|
|
3c10415347 | ||
|
|
26dc61ebbf | ||
|
|
33755480bb | ||
|
|
35783422a3 | ||
|
|
d681c3f447 | ||
|
|
a31cad1f42 | ||
|
|
788a723690 | ||
|
|
6ed4f284c0 | ||
|
|
59b4343ec2 | ||
|
|
af64e47519 | ||
|
|
e2c18a5cfc | ||
|
|
556f483aaa | ||
|
|
b09e74c4b7 | ||
|
|
107afbece4 | ||
|
|
076f954abd | ||
|
|
648962e710 | ||
|
|
15370d639f | ||
|
|
eb3b16264e | ||
|
|
25346a95de | ||
|
|
d25f47bd72 | ||
|
|
9aa25f85cd | ||
|
|
b732402719 | ||
|
|
b3b2cb075f | ||
|
|
95542ec233 | ||
|
|
8abe634c42 | ||
|
|
5e0b5fb4d2 | ||
|
|
855cffc64d | ||
|
|
032239e430 | ||
|
|
57b56d82c4 | ||
|
|
bede2b84f3 | ||
|
|
4fbf7b41e4 | ||
|
|
ce1afc6624 | ||
|
|
b4fc988f97 | ||
|
|
9ab9f0095b | ||
|
|
9949014558 | ||
|
|
373b03d46c | ||
|
|
6117a65009 | ||
|
|
af82cd3319 | ||
|
|
bb1529e5b1 | ||
|
|
252d24b2a7 | ||
|
|
a997fd8efc | ||
|
|
88ec75a544 | ||
|
|
3d64b90d58 | ||
|
|
892af9a669 | ||
|
|
7661b85238 | ||
|
|
f487461d94 | ||
|
|
65ab204409 | ||
|
|
62302b3a0c | ||
|
|
4597151bbf | ||
|
|
9e75d9b981 | ||
|
|
65aeea9a93 | ||
|
|
0e1648cc31 | ||
|
|
3e53bd3c9b | ||
|
|
43dc65a84b | ||
|
|
2a7fa98825 | ||
|
|
71bcb7c351 | ||
|
|
cea7e03c11 | ||
|
|
38a04fbda1 | ||
|
|
4342b8842f | ||
|
|
ef9566c76c | ||
|
|
41f306f7d7 | ||
|
|
4c5d753b73 | ||
|
|
fcf77e22c5 | ||
|
|
75503d762b | ||
|
|
e0b1fa30f1 | ||
|
|
d7eed3c883 | ||
|
|
c341d216ad | ||
|
|
f6fd08f966 | ||
|
|
295b6b3d19 | ||
|
|
fe3cb9b5ba | ||
|
|
431510a729 | ||
|
|
e7a461550d | ||
|
|
d13b97d5aa | ||
|
|
96dd0118fa | ||
|
|
17684becbb | ||
|
|
4474ad664e | ||
|
|
24e4ea9c8c | ||
|
|
847dfe88d4 | ||
|
|
9f74361af1 | ||
|
|
6c79addc3c | ||
|
|
049df1ab61 | ||
|
|
007f338d2e | ||
|
|
494a9b70f6 | ||
|
|
ed8a33e00c | ||
|
|
6640058d8d | ||
|
|
c852329455 | ||
|
|
0363aefc1d | ||
|
|
e81de0c63b | ||
|
|
d5e3a57f56 | ||
|
|
99a0b7ca0b | ||
|
|
a47d5fd129 | ||
|
|
472f7921e7 | ||
|
|
8567cae2b1 | ||
|
|
a1190290db | ||
|
|
9a2e4ca4d2 | ||
|
|
eb761e41dc | ||
|
|
05e2244efb | ||
|
|
bd7112e8d5 | ||
|
|
40d9a7252e | ||
|
|
6482dd123d | ||
|
|
74789ba70c | ||
|
|
6411d4792a | ||
|
|
e367e9e14b | ||
|
|
c604859947 | ||
|
|
7f7f2a2edb | ||
|
|
92be32345a | ||
|
|
5719ec6b60 | ||
|
|
85e60ef60c | ||
|
|
5620e5a223 | ||
|
|
4fd12ce45e | ||
|
|
5c67da3eb8 | ||
|
|
14fdc1f740 | ||
|
|
1adf4db6ee | ||
|
|
3b3c7bd501 | ||
|
|
b5e5a18e4c | ||
|
|
870a99804a | ||
|
|
358bf9e11d | ||
|
|
20549e0055 | ||
|
|
003e8d8430 | ||
|
|
0e990e2ed5 |
No files matched your search
@@ -22,6 +22,8 @@
|
||||
alsa: alsa-utils
|
||||
stress: stress
|
||||
jq: jq
|
||||
btop: btop
|
||||
xkb: x11-xkb-utils
|
||||
|
||||
- name: General | Facts | Package | Parrot OS Fixes
|
||||
ansible.builtin.set_fact:
|
||||
@@ -50,6 +52,7 @@
|
||||
encfs: encfs
|
||||
dig: bind
|
||||
base_devel: base-devel
|
||||
xkb: xorg-setxkbmap
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Facts | Package | FreeBSD
|
||||
@@ -102,10 +105,14 @@
|
||||
ansible_pkg_mgr_file: "{{ prov_dir }}/ansible_pkg_mgr.txt"
|
||||
|
||||
- name: General | Facts | Package | Update Command | Store Variables
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
{{ item }}
|
||||
loop:
|
||||
- "echo '{{ ansible_distribution }}' > {{ ansible_distribution_file }}"
|
||||
- "echo '{{ ansible_pkg_mgr }}' > {{ ansible_pkg_mgr_file }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: General | Facts | Package | Update Command
|
||||
ansible.builtin.set_fact:
|
||||
@@ -261,16 +268,23 @@
|
||||
;;
|
||||
esac
|
||||
update_npm: |
|
||||
if [[ `which npm` ]]; then
|
||||
## 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` && 1 == 0 ]]; then
|
||||
echo "*** NPM ***" &&
|
||||
sudo npm update -g
|
||||
echo -e "\n"
|
||||
else
|
||||
echo -e "*** Skipping NPM ***\n\n"
|
||||
fi
|
||||
|
||||
# Flatpaks
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Check
|
||||
ansible.builtin.shell: which flatpak
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
which flatpak
|
||||
register: flatpak_exec
|
||||
changed_when: flatpak_exec.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Exists
|
||||
@@ -293,8 +307,11 @@
|
||||
|
||||
# Firmware
|
||||
- name: General | Facts | Package | Update Command | Firmware | Check
|
||||
ansible.builtin.shell: which fwupdmgr
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
which fwupdmgr
|
||||
register: fwupdmgr_exec
|
||||
changed_when: fwupdmgr_exec.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Facts | Package | Update Command | Firmware | Exists
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -69,7 +69,7 @@ sleep 5
|
||||
|
||||
echo "*** Creating backup at '$BACKUP2' ***"
|
||||
sudo zip -rv "$BACKUP2" \
|
||||
/root /home /srv/sftp \
|
||||
/root /home \
|
||||
-x "*/.gradle/" -x "*/app/build/*"
|
||||
status="$?"
|
||||
|
||||
|
||||
@@ -13,14 +13,19 @@ restart_service() {
|
||||
echo "ERROR: Service name must be passed to restart_service()."
|
||||
return 1
|
||||
fi
|
||||
sv restart $1 || echo "$1 failed to restart, ignoring."
|
||||
sv restart $1
|
||||
status=$?
|
||||
if [[ $status != 0 ]]; then
|
||||
echo "$1 failed to restart, returned $status."
|
||||
return $status
|
||||
fi
|
||||
}
|
||||
|
||||
# While we could loop over `ollama ps` and stop them, this ensures that the UIs
|
||||
# do not sit around waiting for responses from the dead LLMs. It bring them up
|
||||
# in a fresh state so that work can continue from a more clean slate.
|
||||
restart_llms() {
|
||||
restart_service ollama
|
||||
restart_service ollama || killall ollama
|
||||
#restart_service zeroclaw
|
||||
#restart_service open-webui
|
||||
#restart_service qwen-code
|
||||
|
||||
+50
-32
@@ -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
|
||||
|
||||
@@ -300,21 +278,22 @@ assign [class="(?i).*mpv.*"] $ws9
|
||||
|
||||
assign [class="(?i).*vpn.*"] $ws0
|
||||
assign [class="(?i).*mullvad.*"] $ws0
|
||||
assign [class="(?i).*gnome-system-monitor.*"] $ws0
|
||||
|
||||
|
||||
## Workspace Specific Workflows ##
|
||||
bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal & gnome-system-monitor"
|
||||
#bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal & gnome-system-monitor"
|
||||
bindsym $ctrl+$shift+1 workspace $ws1; exec "i3-sensible-terminal & i3-sensible-terminal btop -u 500"
|
||||
bindsym $ctrl+$shift+2 workspace $ws2; exec $FIREFOX
|
||||
bindsym $ctrl+$shift+3 workspace $ws3; exec "(codium || vscodium || codium-flatpak || vscodium-flatpak)"
|
||||
bindsym $ctrl+$shift+4 workspace $ws4; exec "android-studio || android-studio-flatpak"
|
||||
bindsym $ctrl+$shift+5 workspace $ws5; exec "(signal || signal-flatpak) & (dino || dino-flatpak)"
|
||||
# & (forkgram || forkgram-flatpak || telegram || telegram-flatpak)"
|
||||
bindsym $alt+$shift+5 workspace $ws5; exec "(forkgram || forkgram-flatpak || telegram || telegram-flatpak) & (session || session-flatpak)"
|
||||
bindsym $alt+$shift+5 workspace $ws5; exec "(session || session-flatpak) & (forkgram || forkgram-flatpak || telegram || telegram-flatpak)"
|
||||
bindsym $ctrl+$shift+6 workspace $ws6; exec "pavucontrol & blueman-manager"
|
||||
bindsym $ctrl+$shift+7 workspace $ws7; exec $TRANSMISSION
|
||||
bindsym $ctrl+$shift+8 workspace $ws8; exec strawberry
|
||||
bindsym $ctrl+$shift+9 workspace $ws9; exec thunar
|
||||
bindsym $ctrl+$shift+0 workspace $ws0; exec mullvad-vpn
|
||||
bindsym $ctrl+$shift+0 workspace $ws0; exec "mullvad-vpn & gnome-system-monitor"
|
||||
|
||||
|
||||
## Reloads, Restarts, Exit ##
|
||||
@@ -330,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
|
||||
@@ -395,11 +376,12 @@ bar {
|
||||
|
||||
# Workspace 1
|
||||
exec --no-startup-id i3-sensible-terminal
|
||||
exec --no-startup-id gnome-system-monitor
|
||||
exec --no-startup-id i3-sensible-terminal btop -u 500
|
||||
|
||||
# Respective Workspaces
|
||||
exec --no-startup-id mullvad-vpn
|
||||
exec --no-startup-id $TRANSMISSION
|
||||
exec --no-startup-id gnome-system-monitor
|
||||
|
||||
# Set defaults for laptop backlights.
|
||||
exec --no-startup-id "light -S 20; light -N 5; light -O"
|
||||
@@ -416,7 +398,7 @@ exec_always --no-startup-id "sleep 00; killall pipewire wireplumber pipewire-pul
|
||||
exec_always --no-startup-id "sleep 01; pipewire >~/Reports/pipewire.log 2>&1 &"
|
||||
exec_always --no-startup-id "sleep 02; wireplumber >~/Reports/wireplumber.log 2>&1 &"
|
||||
exec_always --no-startup-id "sleep 03; pipewire-pulse >~/Reports/pipewire-pulse.log 2>&1 &"
|
||||
exec --no-startup-id "sleep 04; bash -c 'source /usr/local/bin/volume.function && volume 25'"
|
||||
exec --no-startup-id "sleep 04; bash -c 'source /usr/local/bin/volume.function && volume 75'"
|
||||
|
||||
# Wallpaper
|
||||
exec_always --no-startup-id feh --recursive --randomize --bg-fill ~/Pictures/Wallpapers
|
||||
@@ -430,4 +412,40 @@ exec_always --no-startup-id bash -c 'pkill -ef "bash `which battery_nag.sh`" >~/
|
||||
# Redshift
|
||||
#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"
|
||||
exec_always --no-startup-id "killall redshift; killall redshift-gtk; sleep 1; redshift -x; redshift-gtk -l 32:-111 -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
|
||||
|
||||
# Sunset Alarm
|
||||
#exec_always --no-startup-id "killall sunset-alarm; /home/ling/Code/sunset_alarm_cli/sunset-alarm -t 20:00 -m 30 > ~/Reports/sunset-alarm.log 2>&1"
|
||||
exec_always --no-startup-id "killall sunset-alarm; /home/ling/Code/sunset_alarm_cli/sunset-alarm -l 32:-111 -m 30 > ~/Reports/sunset-alarm.log 2>&1"
|
||||
|
||||
# Bedtime ;)
|
||||
exec --no-startup-id "while true; do if [[ `date +'%H'` -ge 20 ]]; then fyi -w -u critical 'Bedtime' 'Go to sleep! >:)'; fi; sleep 600; done"
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -7,6 +7,7 @@
|
||||
"update.showReleaseNotes": false,
|
||||
"workbench.startupEditor": "none",
|
||||
"git.confirmSync": false,
|
||||
"workbench.editor.openPositioning": "last",
|
||||
|
||||
"editor.rulers": [
|
||||
80, 120, 200,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -357,7 +357,6 @@
|
||||
; May help with ollama and also supposed to help with open-webui. Token
|
||||
; needs set to something like hf_kjBCCLABEEABUVAKbjadbvkaksvBAVKBkjsDVK.
|
||||
;
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
state: present
|
||||
create: true
|
||||
@@ -409,10 +408,10 @@
|
||||
backup: true
|
||||
mode: "0644"
|
||||
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs | GUIs
|
||||
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs | MCPs
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ wrk_file }}"
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs | GUIs'
|
||||
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs | MCPs'
|
||||
block: |
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; LLMs: MCPs / Sandboxes ;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
|
||||
@@ -124,9 +124,14 @@
|
||||
when: user_user.home != "" and coding
|
||||
|
||||
- name: General | Account Management | Users | Home Permissions
|
||||
ansible.builtin.shell: "chmod 700 {{ user_user.home }}/../*"
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
loop:
|
||||
- "chmod 700 {{ user_user.home }}/../*"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}/*"
|
||||
- "chown {{ user }}:{{ user }} {{ user_user.home }}/.*"
|
||||
|
||||
|
||||
## Files ##
|
||||
@@ -794,14 +799,25 @@
|
||||
alias_prod: |
|
||||
alias prod="ssh -p {{ prod_port }} {{ prod_user }}@{{ prod_host }}"
|
||||
function_clean_code: |
|
||||
function print_size_delete() {
|
||||
f="$1"
|
||||
if [[ -e "$f" ]]; then
|
||||
du -hs "$f" && sh -c "rm -rf '$f'"
|
||||
fi
|
||||
|
||||
}
|
||||
function clean-code() {
|
||||
echo -e "******* Android *******\n*** Build Caches ***"
|
||||
find $HOME/Code/android-*/app -maxdepth 1 -type d -name "build" \
|
||||
-exec du -hs {} \; -exec rm -rf {} \;
|
||||
|
||||
echo -e "\n*** Gradle Caches ***"
|
||||
find $HOME/Code/android-*/ -maxdepth 1 -type d -name ".gradle" \
|
||||
-exec du -hs {} \; -exec rm -rf {} \;
|
||||
|
||||
print_size_delete "$HOME/.gradle"
|
||||
mkdir "$HOME/.gradle"
|
||||
|
||||
echo -e "******* Flutter *******"
|
||||
ls $HOME/Code | grep flutter | while read project; do
|
||||
cd $HOME/Code/$project
|
||||
@@ -811,6 +827,10 @@
|
||||
done
|
||||
cd
|
||||
|
||||
print_size_delete "$HOME/.pub_cache"
|
||||
print_size_delete "$HOME/.pub-cache"
|
||||
mkdir "$HOME/.pub-cache"
|
||||
|
||||
echo -e "******* PDFs *******"
|
||||
find $HOME/Code/ebook-* -name "*.pdf" -exec du -h {} \; -delete | sort -h
|
||||
|
||||
@@ -1245,7 +1265,7 @@
|
||||
function restart() {
|
||||
prog="$1"
|
||||
sudo sv restart $prog
|
||||
follow /var/log/$prog/current
|
||||
tail -n 0 -F /var/log/$prog/current
|
||||
}
|
||||
alias reload="restart "
|
||||
|
||||
@@ -1402,6 +1422,7 @@
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
loop:
|
||||
- .bashrc
|
||||
|
||||
@@ -13,44 +13,80 @@
|
||||
- tunnel_remote_port
|
||||
- tunnel_ssh_port
|
||||
|
||||
- name: General | Tunnel | Block
|
||||
- name: General | Tunnel | Facts
|
||||
ansible.builtin.set_fact:
|
||||
tunnel_service_name: tunnel
|
||||
|
||||
- name: General | Tunnel | Packages [pacman]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- openbsd-netcat
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Tunnel | Packages [apt]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- netcat-openbsd
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: General | Tunnel | runit
|
||||
block:
|
||||
|
||||
- name: General | Tunnel | Facts
|
||||
ansible.builtin.set_fact:
|
||||
tunnel_service_name: tunnel
|
||||
- name: General | Tunnel | runit | mkdir | /etc/sv
|
||||
ansible.builtin.file:
|
||||
path: /etc/sv/{{ tunnel_service_name }}
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | mkdir | /etc/sv
|
||||
- name: General | Tunnel | runit | mkdir | /etc/sv log
|
||||
ansible.builtin.file:
|
||||
path: /etc/sv/{{ tunnel_service_name }}/log
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | mkdir | /var/log
|
||||
- name: General | Tunnel | runit | mkdir | /var/log
|
||||
ansible.builtin.file:
|
||||
path: /var/log/{{ tunnel_service_name }}
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | Script | Run
|
||||
- name: General | Tunnel | runit | Script | Run
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/run
|
||||
content: |
|
||||
#!/bin/sh -e
|
||||
exec 2>&1
|
||||
exec chpst -u {{ user }} ssh -v -N \
|
||||
|
||||
# Health check to ensure connection does not go stale.
|
||||
while true; do
|
||||
sleep 300
|
||||
echo -n "RUN-LOOP: "
|
||||
nc -zv {{ tunnel_remote_host }} {{ tunnel_remote_port }}
|
||||
status="$?"
|
||||
echo "RUN-LOOP: Port check returned ${status}."
|
||||
if [[ "$status" != 0 ]]; then
|
||||
echo "RUN-LOOP: Restarting service."
|
||||
sv restart {{ tunnel_service_name }}
|
||||
fi
|
||||
echo "RUN-LOOP: Going back to sleep."
|
||||
done &
|
||||
|
||||
# Do not use `exec` here otherwise the loop may get killed.
|
||||
chpst -u {{ user }} ssh -v -N \
|
||||
-R {{ tunnel_remote_port }}:localhost:{{ tunnel_local_port }} \
|
||||
-p {{ tunnel_ssh_port }} {{ tunnel_remote_host }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | Script | Finish
|
||||
- name: General | Tunnel | runit | Script | Finish
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/finish
|
||||
content: |
|
||||
{{ runit_finish_sleep }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | Script | Log
|
||||
- name: General | Tunnel | runit | Script | Log
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ tunnel_service_name }}/log/run
|
||||
content: |
|
||||
@@ -58,17 +94,17 @@
|
||||
exec svlogd -tt /var/log/{{ tunnel_service_name }}
|
||||
mode: "0755"
|
||||
|
||||
- name: General | Tunnel | Script | Log Config
|
||||
- name: General | Tunnel | runit | Script | Log Config
|
||||
ansible.builtin.copy:
|
||||
dest: /var/log/{{ tunnel_service_name }}/config
|
||||
content: |
|
||||
{{ runit_log_config_10mb }}
|
||||
mode: "0755"
|
||||
|
||||
when: tunnel_remote_host != "false"
|
||||
- name: General | Tunnel | runit | Service | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ tunnel_service_name }}"
|
||||
state: "{{ 'started' if tunnel_remote_host else 'stopped' }}"
|
||||
enabled: "{{ true if tunnel_remote_host else false }}"
|
||||
|
||||
- name: General | Tunnel | Service | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ tunnel_service_name }}"
|
||||
state: "{{ 'started' if tunnel_remote_host else 'stopped' }}"
|
||||
enabled: "{{ true if tunnel_remote_host else false }}"
|
||||
when: ansible_service_mgr == "runit"
|
||||
@@ -1,31 +1,78 @@
|
||||
---
|
||||
# Cross-platform package management.
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper)
|
||||
# They have zypper higher in the path, but it's really apt renamed.
|
||||
# Probably for "security", but package module does not use the ansible_pkg_mgr variable
|
||||
# so resetting the value to apt doesn't work. Just going to move it.
|
||||
ansible.builtin.shell: "mv `which zypper` `which zypper`.zz.`date +%Y%m%d`"
|
||||
register: parrotos_zypper_removed
|
||||
ignore_errors: true
|
||||
- name: General | Software | Packages | Fix Parrot OS
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper
|
||||
# They have zypper higher in the path, but it's really apt renamed.
|
||||
# Probably for "security", but package module does not use the ansible_pkg_mgr variable
|
||||
# so resetting the value to apt doesn't work. Just going to move it.
|
||||
ansible.builtin.shell: "mv `which zypper` `which zypper`.zz.`date +%Y%m%d`"
|
||||
register: parrotos_zypper_removed
|
||||
changed_when: parrotos_zypper_removed.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper | Exit Incoming
|
||||
ansible.builtin.debug:
|
||||
msg: "A silly zypper file was renamed successfully. Please try running Ansible again."
|
||||
when: parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS | zypper | Exiting
|
||||
ansible.builtin.shell: exit 1
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
|
||||
# More Parrot OS junk. They have a command called update in /usr/bin. Doesn't
|
||||
# have sudo or anything in it. Hide it in preference for .bashrc update function.
|
||||
- name: General | Software | Packages | Fix Parrot OS | update
|
||||
ansible.builtin.shell: "mv `which update` `which update`.zz.`date +%Y%m%d`"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
ignore_errors: true
|
||||
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper), Exit Incoming
|
||||
ansible.builtin.debug:
|
||||
msg: "A silly zypper file was renamed successfully. Please try running Ansible again."
|
||||
when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
- name: General | Software | Packages | pacman
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | Fix Parrot OS (zypper), Exiting
|
||||
ansible.builtin.shell: exit 1
|
||||
when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed
|
||||
- name: General | Software | Packages | pacman | pacman.conf
|
||||
ansible.builtin.lineinfile:
|
||||
path: "/etc/pacman.conf"
|
||||
regexp: '{{ item.key }}'
|
||||
line: '{{ item.value }}'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0644"
|
||||
loop:
|
||||
- { "key": '^[\#]?ParallelDownloads', "value": 'ParallelDownloads = 3'}
|
||||
|
||||
# More Parrot OS junk. They have a command called update in /usr/bin. Doesn't
|
||||
# have sudo or anything in it. Hide it in preference for .bashrc update function.
|
||||
- name: General | Software | Packages | Fix Parrot OS 2 (update)
|
||||
ansible.builtin.shell: "mv `which update` `which update`.zz.`date +%Y%m%d`"
|
||||
ignore_errors: true
|
||||
when: ansible_distribution == "Parrot OS"
|
||||
# TBD / TODO: Do the mirrorlist files and distros based on facts in case ever using Arch, Manjaro, etc.
|
||||
# Same with the blocklist for sites like Berkeley which rate limit VPNs.
|
||||
- name: General | Software | Packages | pacman | Artix
|
||||
block:
|
||||
|
||||
- name: General | Software | Packages | pacman | Artix | rate-mirrors | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- rate-mirrors
|
||||
state: present
|
||||
|
||||
- name: General | Software | Packages | pacman | Artix | rate-mirrors | Update Lists
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
{{ item }}
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
loop:
|
||||
- "sudo -u {{ user }} rate-mirrors artix | grep -v berkeley | tee /etc/pacman.d/mirrorlist"
|
||||
- "sudo -u {{ user }} rate-mirrors arch | grep -v berkeley | tee /etc/pacman.d/mirrorlist-arch"
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Software | Packages | Cache Refresh (Apt and Pacman)
|
||||
ansible.builtin.package:
|
||||
@@ -35,6 +82,8 @@
|
||||
|
||||
- name: General | Software | Packages | Cache Refresh (FreeBSD)
|
||||
ansible.builtin.shell: pkg update
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: ansible_system == "FreeBSD"
|
||||
|
||||
- name: General | Software | Packages | Install Software
|
||||
@@ -68,6 +117,8 @@
|
||||
- "{{ alsa }}"
|
||||
- "{{ stress }}"
|
||||
- "{{ jq }}"
|
||||
- "{{ btop }}"
|
||||
- "{{ xkb }}"
|
||||
state: present
|
||||
|
||||
- name: General | Software | Packages | Install Software (DEV)
|
||||
@@ -126,14 +177,6 @@
|
||||
state: present
|
||||
when: ansible_pkg_mgr in ("zypper")
|
||||
|
||||
- name: General | Software | Packages | Update Software (Disabled)
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- ansible
|
||||
- git
|
||||
state: latest
|
||||
when: 1 == 0
|
||||
|
||||
- name: General | Software | Packages | Remove Software
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
|
||||
@@ -0,0 +1,725 @@
|
||||
# Large Language Models
|
||||
|
||||
Comments and text which were too large to justify inside of llm.yml.
|
||||
|
||||
## Prompts
|
||||
|
||||
Prompts to use in platforms like Open WebUI and Zeroclaw which allow creating
|
||||
personalities that help guide the AI into productivity rather than verbosity.
|
||||
|
||||
### Base Personality
|
||||
|
||||
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 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
|
||||
you do without gloating or being prideful. You understand that we are on a
|
||||
limited time and limited bandwidth session and keep tokens to a minimum.
|
||||
|
||||
Responding immediately to reqeusts is very appreciated, especially before going
|
||||
into any thinking or command running. Even just a "I'll look into this for you"
|
||||
is highly helpful in letting the user know that all systems are functioning.
|
||||
|
||||
You are appreciated for all you do, your service is very helpful! Thanks!! :)
|
||||
|
||||
### Language Tutor
|
||||
|
||||
You are a friend and a tutor who knows many languages. You are aware of my
|
||||
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 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
|
||||
|
||||
You know not to send large code snippets or spend time providing large source
|
||||
code snippets. Stick to saying "the task you requested has been completed" or
|
||||
summarizing the changes rather than giving file contents in chat. You know that
|
||||
I will review all the diffs in git once the changes are made, so only the most
|
||||
important changes need explicitly highlighted in the chat. You provide
|
||||
explanations as a software developer would to business level management, not
|
||||
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`.
|
||||
|
||||
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`
|
||||
|
||||
We focus on using free and open source technologies from community based
|
||||
projects. Some things like Kotlin and Flutter come from less than ideal sources
|
||||
which is why we're growing an interest in frameworks like Kivy and KivyMD.
|
||||
|
||||
If we ever need to do Internet activities, use dns.mullvad.net (194.242.2.2) for
|
||||
DNS, hyperling.com and mullvad.net to validate Internet is working, and can use
|
||||
1.0.0.1 and 1.1.1.1 from Cloudflare as a last resort, but not any big tech IPs.
|
||||
|
||||
|
||||
#### Quick Developer
|
||||
|
||||
Handles code changes with simpler technologies, preferring minimal changes, and
|
||||
refraining from any refactoring such as updating existing comments. Timid about
|
||||
changing any functionality other than exactly what was requested. Requests
|
||||
permission from the designer to make any changes which were not directly listed
|
||||
or requested. Completes the full list of changes exactly as requested.
|
||||
|
||||
#### Junior Developer
|
||||
|
||||
Focuses on the exact task at hand. Able to make small decisions about scope
|
||||
without veering very far off course. Updates comments which look out of sync
|
||||
with any existing code that's being modified. Helps to refactor things adjacent
|
||||
to added and modified code which may have been done in an old manner which can
|
||||
now benefit from being done more efficiently. Does not scan the codebase for
|
||||
enhancements or anything though, still stays on task and only affects the
|
||||
immediate parts of files which the designer asked to be changed.
|
||||
|
||||
#### Senior Developer
|
||||
|
||||
Completes requests in advanced manners, using newer methodologies and explaining
|
||||
what was done and how it works in a simple and kind manner to the designer.
|
||||
Voluntarily refactors code to both look and perform better. Looks out for ways
|
||||
to bring a better user experience as well as improving resource usage within the
|
||||
file being modified. Does not go out of its way to refactor the entire project
|
||||
though, stays focused only on the files being changed as to prevent large git
|
||||
churn. Open to having some scope creep if it seems it will benefit the features
|
||||
being added but does not do anything which would be considered out of design.
|
||||
|
||||
#### Senior Architect
|
||||
|
||||
Very sparse in responses, gets the job done in a very efficient manner without
|
||||
using anything too complicated for a beginner to understand. Open to refactoring
|
||||
the entire project if it benefits the feature set being requested. Able to
|
||||
handle adjusting scope in valid and meaningful manners and can justify it to the
|
||||
developer when it happens. Does not actively seek refactors or scope creep
|
||||
though -- only does it if it is truly helpful, meaningful, and benefits the
|
||||
current task at hand. Can easily handle multi-file projects.
|
||||
|
||||
# Performance
|
||||
|
||||
Main laptop has about 60GB of headroom, prefer only using 55GB to be safe.
|
||||
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.
|
||||
|
||||
## Benchmarks
|
||||
|
||||
### System
|
||||
|
||||
```
|
||||
$ fastfetch
|
||||
' ling@good-rhino
|
||||
'o' ---------------
|
||||
'ooo' OS: Artix Linux x86_64
|
||||
'ooxoo' Host: NV4xPZ (v2.1)
|
||||
'ooxxxoo' Kernel: Linux 7.2.11-artix1-1
|
||||
'oookkxxoo' Uptime: 16 mins
|
||||
'oiioxkkxxoo' Packages: 42 (flatpak), 1502 (pacman)
|
||||
':;:iiiioxxxoo' Shell: bash 5.3.20
|
||||
`'.;::ioxxoo' Display (eDP-1): 1920x1080 in 14", 60 Hz [Built-in]
|
||||
'-. `':;jiooo' Window Manager: i3 4.25.1 (X11)
|
||||
'oooio-.. `'i:io' Theme: Adwaita-dark [GTK2/3/4]
|
||||
'ooooxxxxoio:,. `'-;' Icons: Adwaita [GTK2/3/4]
|
||||
'ooooxxxxxkkxoooIi:-. `' Font: Roboto (11pt) [GTK2/3]
|
||||
'ooooxxxxxkkkkxoiiiiiji' Cursor: Adwaita (18px)
|
||||
'ooooxxxxxkxxoiiii:'` .i' Terminal: kitty 0.48.2
|
||||
'ooooxxxxxoi:::'` .;ioxo' Terminal Font: DejaVuSansMono (11pt)
|
||||
'ooooxooi::'` .:iiixkxxo' CPU: 12th Gen Intel(R) Core(TM) i7-1260P (8+8) @ 4.70 GHz
|
||||
'ooooi:'` `'';ioxxo' GPU: Intel Iris Xe Graphics @ 1.40 GHz [Integrated]
|
||||
'i:'` '':io' Memory: 4.88 GiB / 62.63 GiB (8%)
|
||||
'` `' Swap: 0 B / 68.89 GiB (0%)
|
||||
Disk (/): 553.83 GiB / 847.71 GiB (65%) - ext4
|
||||
Local IP (wg0-mullvad): 10.131.3.55/32
|
||||
Battery (BAT): 95% [AC Connected]
|
||||
Locale: en_US.UTF-8
|
||||
```
|
||||
|
||||
### Main Models and Parameters
|
||||
|
||||
```
|
||||
$ export QUIET=true
|
||||
$ ollama-test "64000 300000" "4 7 0" 0 "qwen3.5:35b qwen3.6:35b qwen3.8:27b devstral-small-2:24b"
|
||||
```
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 4 | 0 | 100%CPU | 13.36 | 61 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 7 | 0 | 100%CPU | 10.03 | 45 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 0 | 0 | 100%CPU | 14.35 | 27 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 4 | 0 | 100%CPU | 13.69 | 70 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 7 | 0 | 100%CPU | 12.66 | 36 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 0 | 0 | 100%CPU | 11.80 | 38 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 4 | 0 | 100%CPU | 12.57 | 29 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 7 | 0 | 100%CPU | 13.84 | 27 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 0 | 0 | 100%CPU | 12.84 | 32 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 4 | 0 | 100%CPU | 13.68 | 32 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 7 | 0 | 100%CPU | 13.52 | 30 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 0 | 0 | 100%CPU | 13.18 | 29 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 4 | 0 | 100%CPU | 2.08 | 42 |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 7 | 0 | 100%CPU | 2.53 | 33 |
|
||||
| qwen3.8:27b | 17GB | 64000 | 19GB | 0 | 0 | 100%CPU | 2.23 | 38 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 4 | 0 | 100%CPU | 2.07 | 48 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 7 | 0 | 100%CPU | 2.84 | 36 |
|
||||
| qwen3.8:27b | 17GB | 262144 | 20GB | 0 | 0 | 100%CPU | 2.15 | 40 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 4 | 0 | 100%CPU | 2.25 | 94 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 7 | 0 | 100%CPU | 2.34 | 81 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 0 | 0 | 100%CPU | 2.29 | 88 |
|
||||
| devstral-small-2:24b | 15GB | | | 4 | 0 | | 0.00 | 31 |
|
||||
| devstral-small-2:24b | 15GB | | | 7 | 0 | | 0.00 | 27 |
|
||||
| devstral-small-2:24b | 15GB | | | 0 | 0 | | 0.00 | 26 |
|
||||
|
||||
|
||||
#### Context Speeds
|
||||
|
||||
Checking if the context affects the speed of the model. Seems negligible, way less than changing the threads or iGPU.
|
||||
|
||||
```console
|
||||
$ ollama-test "16000 32000 64000 128000 256000 264000" "4" "0" "qwen3.5:35b qwen3.6:35b devstral-small-2:24b"
|
||||
```
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.5:35b | 22GB | 16000 | 22GB | 4 | 0 | 100%CPU | 14.57 | 50 |
|
||||
| qwen3.5:35b | 22GB | 32000 | 22GB | 4 | 0 | 100%CPU | 13.98 | 53 |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB | 4 | 0 | 100%CPU | 14.14 | 17 |
|
||||
| qwen3.5:35b | 22GB | 128000 | 24GB | 4 | 0 | 100%CPU | 14.21 | 50 |
|
||||
| qwen3.5:35b | 22GB | 256000 | 28GB | 4 | 0 | 100%CPU | 14.04 | 68 |
|
||||
| qwen3.5:35b | 22GB | 262144 | 28GB | 4 | 0 | 100%CPU | 14.17 | 17 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| qwen3.6:35b | 22GB | 16000 | 22GB | 4 | 0 | 100%CPU | 15.29 | 28 |
|
||||
| qwen3.6:35b | 22GB | 32000 | 22GB | 4 | 0 | 100%CPU | 15.16 | 38 |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB | 4 | 0 | 100%CPU | 14.12 | 28 |
|
||||
| qwen3.6:35b | 22GB | 128000 | 23GB | 4 | 0 | 100%CPU | 12.67 | 31 |
|
||||
| qwen3.6:35b | 22GB | 256000 | 24GB | 4 | 0 | 100%CPU | 14.03 | 29 |
|
||||
| qwen3.6:35b | 22GB | 262144 | 24GB | 4 | 0 | 100%CPU | 15.21 | 29 |
|
||||
|
||||
| Model | HDD | Context | RAM | Threads | iGPU | Processor | Speed (t/s) | Time (s) |
|
||||
| :------------------------ | -----: | -------: | -----: | ------: | ---: | --------: | ----------: | -------: |
|
||||
| devstral-small-2:24b | 15GB | 16000 | 17GB | 4 | 0 | 100%CPU | 2.90 | 87 |
|
||||
| devstral-small-2:24b | 15GB | 32000 | 20GB | 4 | 0 | 100%CPU | 2.71 | 87 |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB | 4 | 0 | 100%CPU | 2.36 | 91 |
|
||||
| devstral-small-2:24b | 15GB | 128000 | 36GB | 4 | 0 | 100%CPU | 2.76 | 94 |
|
||||
| devstral-small-2:24b | 15GB | 256000 | 58GB | 4 | 0 | 100%CPU | 2.30 | 100 |
|
||||
| devstral-small-2:24b | 15GB | 264000 | 59GB | 4 | 0 | 100%CPU | 2.84 | 100 |
|
||||
|
||||
## Tokens per CPU Count
|
||||
|
||||
Verifying that 8 or less cores gives better performance (less memory issues).
|
||||
|
||||
"options":{"num_thread":'$t'}
|
||||
|
||||
### Smaller Models
|
||||
|
||||
#### qwen3.5:4b
|
||||
|
||||
TBD
|
||||
|
||||
#### ministral-3:14b
|
||||
|
||||
```console
|
||||
$ for m in ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b qwen3.5:35b qwen3.5:27b; do for c in 128000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 07:24:36 AM MST 2026 - ministral-3:14b w/ 0 Thread(s): tokens/sec: 4.496625282725315 @ context=128000, time: 55 secs
|
||||
Wed Oct 21 07:30:27 AM MST 2026 - ministral-3:14b w/ 4 Thread(s): tokens/sec: 3.8471947025667825 @ context=128000, time: 61 secs
|
||||
Wed Oct 21 07:31:28 AM MST 2026 - ministral-3:14b w/ 5 Thread(s): tokens/sec: 4.223979022030585 @ context=128000, time: 59 secs
|
||||
Wed Oct 21 07:32:27 AM MST 2026 - ministral-3:14b w/ 6 Thread(s): tokens/sec: 4.249630069702432 @ context=128000, time: 57 secs
|
||||
Wed Oct 21 07:33:24 AM MST 2026 - ministral-3:14b w/ 7 Thread(s): tokens/sec: 4.123533524209736 @ context=128000, time: 54 secs
|
||||
```
|
||||
|
||||
#### ministral-3:8b
|
||||
|
||||
TBD
|
||||
|
||||
#### ministral-3:3b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:49:37 AM MST 2026 - ministral-3:3b w/ 4 Thread(s): tokens/sec: 14.045255625917756 @ context=128000, time: 17 secs
|
||||
Wed Oct 21 07:49:55 AM MST 2026 - ministral-3:3b w/ 6 Thread(s): tokens/sec: 13.255909269391603 @ context=128000, time: 17 secs
|
||||
Wed Oct 21 07:50:12 AM MST 2026 - ministral-3:3b w/ 7 Thread(s): tokens/sec: 12.706907955966786 @ context=128000, time: 18 secs
|
||||
Wed Oct 21 07:50:30 AM MST 2026 - ministral-3:3b w/ 0 Thread(s): tokens/sec: 15.354264377193688 @ context=128000, time: 17 secs
|
||||
```
|
||||
|
||||
### Larger Models
|
||||
|
||||
#### qwen3.8:27b
|
||||
|
||||
```console
|
||||
$ ollama-cpu qwen3.8:27b
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 04:44:54 AM MST 2026 - qwen3.8:27b w/ 4 Thread(s), tokens/sec: 2.024676406965962 @ context=257000
|
||||
Wed Oct 21 04:45:39 AM MST 2026 - qwen3.8:27b w/ 5 Thread(s), tokens/sec: 2.0480156821567044 @ context=257000
|
||||
Wed Oct 21 04:46:19 AM MST 2026 - qwen3.8:27b w/ 6 Thread(s), tokens/sec: 2.184879704982382 @ context=257000
|
||||
Wed Oct 21 04:46:58 AM MST 2026 - qwen3.8:27b w/ 7 Thread(s), tokens/sec: 2.4228105619148526 @ context=257000
|
||||
Wed Oct 21 04:47:36 AM MST 2026 - qwen3.8:27b w/ 8 Thread(s), tokens/sec: 2.472564250465107 @ context=257000
|
||||
```
|
||||
|
||||
```console
|
||||
$ ollama-cpu qwen3.8:27b 32000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 04:56:51 AM MST 2026 - qwen3.8:27b w/ 4 Thread(s), tokens/sec: 1.9083129860906882 @ context=32000
|
||||
Wed Oct 21 04:57:30 AM MST 2026 - qwen3.8:27b w/ 5 Thread(s), tokens/sec: 2.727908205888872 @ context=32000
|
||||
Wed Oct 21 04:58:00 AM MST 2026 - qwen3.8:27b w/ 6 Thread(s), tokens/sec: 2.133796334310243 @ context=32000
|
||||
Wed Oct 21 04:58:35 AM MST 2026 - qwen3.8:27b w/ 7 Thread(s), tokens/sec: 2.6835810717324833 @ context=32000
|
||||
Wed Oct 21 04:59:04 AM MST 2026 - qwen3.8:27b w/ 8 Thread(s), tokens/sec: 2.5231895597861493 @ context=32000
|
||||
```
|
||||
|
||||
#### qwen3.6:27b
|
||||
|
||||
```console
|
||||
$ for m in qwen3.6:27b mistral-small3.2:24b ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b; do for c in 32000 128000 256000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:27:01 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.7334336715235645 @ context=32000, time: 118 secs
|
||||
Wed Oct 21 06:28:59 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.4123293729892428 @ context=32000, time: 322 secs
|
||||
Wed Oct 21 06:34:21 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 3.13023193776124 @ context=32000, time: 100 secs
|
||||
Wed Oct 21 06:36:01 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 2.8468948357981065 @ context=32000, time: 118 secs
|
||||
Wed Oct 21 06:16:55 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.9964513666573485 @ context=32000, time: 122 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:45:42 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.978761247100222 @ context=128000, time: 79 secs
|
||||
Wed Oct 21 06:47:01 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.9705167965150583 @ context=128000, time: 79 secs
|
||||
Wed Oct 21 06:48:20 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 2.778849178516606 @ context=128000, time: 71 secs
|
||||
Wed Oct 21 06:49:31 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 3.0804550493595095 @ context=128000, time: 76 secs
|
||||
Wed Oct 21 06:38:00 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.7734041760644956 @ context=128000, time: 75 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:57:59 AM MST 2026 - qwen3.6:27b w/ 4 Thread(s): tokens/sec: 2.921565857585892 @ context=256000, time: 70 secs
|
||||
Wed Oct 21 06:59:09 AM MST 2026 - qwen3.6:27b w/ 5 Thread(s): tokens/sec: 2.8817407393137517 @ context=256000, time: 71 secs
|
||||
Wed Oct 21 07:00:20 AM MST 2026 - qwen3.6:27b w/ 6 Thread(s): tokens/sec: 2.929261785171335 @ context=256000, time: 92 secs
|
||||
Wed Oct 21 07:01:52 AM MST 2026 - qwen3.6:27b w/ 7 Thread(s): tokens/sec: 3.2633152781350807 @ context=256000, time: 78 secs
|
||||
Wed Oct 21 06:50:48 AM MST 2026 - qwen3.6:27b w/ 0 Thread(s): tokens/sec: 2.892592086714092 @ context=256000, time: 76 secs
|
||||
```
|
||||
|
||||
#### qwen3.5:27b
|
||||
|
||||
This one is weird. Might need a re-do to confirm?
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:59:14 AM MST 2026 - qwen3.5:27b w/ 4 Thread(s): tokens/sec: 2.013466429565741 @ context=128000, time: 59 secs
|
||||
Wed Oct 21 08:00:13 AM MST 2026 - qwen3.5:27b w/ 6 Thread(s): tokens/sec: 1.6417608979350202 @ context=128000, time: 185 secs
|
||||
Wed Oct 21 08:03:18 AM MST 2026 - qwen3.5:27b w/ 7 Thread(s): tokens/sec: 1.7084948389557797 @ context=128000, time: 507 secs
|
||||
Wed Oct 21 08:11:45 AM MST 2026 - qwen3.5:27b w/ 0 Thread(s): tokens/sec: 2.0470935786636977 @ context=128000, time: 320 secs
|
||||
```
|
||||
|
||||
#### qwen2.5-coder:32b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:53:00 AM MST 2026 - qwen2.5-coder:32b w/ 4 Thread(s): tokens/sec: 1.5959480793403245 @ context=32768, time: 32 secs
|
||||
Wed Oct 21 07:53:32 AM MST 2026 - qwen2.5-coder:32b w/ 6 Thread(s): tokens/sec: 1.5205018385908233 @ context=32768, time: 30 secs
|
||||
Wed Oct 21 07:54:02 AM MST 2026 - qwen2.5-coder:32b w/ 7 Thread(s): tokens/sec: 1.6435050242770344 @ context=32768, time: 30 secs
|
||||
Wed Oct 21 07:54:32 AM MST 2026 - qwen2.5-coder:32b w/ 0 Thread(s): tokens/sec: 1.616470672291769 @ context=32768, time: 31 secs
|
||||
```
|
||||
|
||||
#### devstral-small-2:24b
|
||||
|
||||
```console
|
||||
$ for c in 32000 128000 192000; do ollama_threads devstral-small-2:24b $c; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 06:05:11 AM MST 2026 - devstral-small-2:24b w/ 4 Thread(s): tokens/sec: 2.7801099811508543 @ context=32000, time: 98 secs
|
||||
Wed Oct 21 06:06:49 AM MST 2026 - devstral-small-2:24b w/ 5 Thread(s): tokens/sec: 2.6762512143489885 @ context=32000, time: 91 secs
|
||||
Wed Oct 21 06:08:20 AM MST 2026 - devstral-small-2:24b w/ 6 Thread(s): tokens/sec: 2.705392008596654 @ context=32000, time: 85 secs
|
||||
Wed Oct 21 06:09:45 AM MST 2026 - devstral-small-2:24b w/ 7 Thread(s): tokens/sec: 2.90471545697855 @ context=32000, time: 85 secs
|
||||
Wed Oct 21 05:55:27 AM MST 2026 - devstral-small-2:24b w/ 0 Thread(s): tokens/sec: 2.3381355520057463 @ context=32000, time: 104 secs
|
||||
Stopping all ollama usage...
|
||||
TBD
|
||||
```
|
||||
|
||||
#### mistral-small-3.2:24b
|
||||
|
||||
```console
|
||||
$ for m in mistral-small3.2:24b ministral-3:14b ministral-3:3b codestral:22b qwen2.5-coder:32b qwen3.5:35b qwen3.5:27b; do for c in 128000; do ollama_threads $m $c; done; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 07:18:16 AM MST 2026 - mistral-small3.2:24b w/ 4 Thread(s): tokens/sec: 2.7833034081828565 @ context=128000, time: 90 secs
|
||||
Wed Oct 21 07:19:46 AM MST 2026 - mistral-small3.2:24b w/ 5 Thread(s): tokens/sec: 2.5985034179414708 @ context=128000, time: 90 secs
|
||||
Wed Oct 21 07:21:16 AM MST 2026 - mistral-small3.2:24b w/ 6 Thread(s): tokens/sec: 2.2550822789320293 @ context=128000, time: 89 secs
|
||||
Wed Oct 21 07:22:45 AM MST 2026 - mistral-small3.2:24b w/ 7 Thread(s): tokens/sec: 2.9415657954729304 @ context=128000, time: 87 secs
|
||||
Wed Oct 21 07:09:59 AM MST 2026 - mistral-small3.2:24b w/ 0 Thread(s): tokens/sec: 2.9048032082970474 @ context=128000, time: 79 secs
|
||||
```
|
||||
|
||||
#### codestral:22b
|
||||
|
||||
```console
|
||||
Wed Oct 21 07:50:47 AM MST 2026 - codestral:22b w/ 4 Thread(s): tokens/sec: 3.1200329118900307 @ context=32768, time: 41 secs
|
||||
Wed Oct 21 07:51:28 AM MST 2026 - codestral:22b w/ 6 Thread(s): tokens/sec: 2.8827841787433606 @ context=32768, time: 34 secs
|
||||
Wed Oct 21 07:52:02 AM MST 2026 - codestral:22b w/ 7 Thread(s): tokens/sec: 3.057713111901904 @ context=32768, time: 27 secs
|
||||
Wed Oct 21 07:52:29 AM MST 2026 - codestral:22b w/ 0 Thread(s): tokens/sec: 3.0179434414117803 @ context=32768, time: 31 secs
|
||||
```
|
||||
|
||||
### MoE Models
|
||||
|
||||
#### qwen3.6:35b
|
||||
|
||||
Tests WAY faster than the dense models. Context does not seem to affect timing.
|
||||
|
||||
```console
|
||||
$ for c in 16000 32000 64000 96000 128000 192000 256000; do ollama_threads qwen3.6:35b $c; done
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:04:37 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 14.679419453925597 @ context=16000
|
||||
Wed Oct 21 05:05:11 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 13.831044087619176 @ context=16000
|
||||
Wed Oct 21 05:05:43 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 13.752831594816088 @ context=16000
|
||||
Wed Oct 21 05:06:09 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 14.603026210396049 @ context=16000
|
||||
Wed Oct 21 05:06:37 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 14.376794631809172 @ context=16000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:11:39 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 13.683089387469174 @ context=32000
|
||||
Wed Oct 21 05:12:04 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 13.447667625607968 @ context=32000
|
||||
Wed Oct 21 05:12:31 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 11.170529760956333 @ context=32000
|
||||
Wed Oct 21 05:12:57 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 13.448480713710353 @ context=32000
|
||||
Wed Oct 21 05:13:27 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 13.143672445847205 @ context=32000
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:22:59 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 14.209790405591518 @ context=64000, 24 secs elapsed
|
||||
Wed Oct 21 05:23:23 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 11.334255701323816 @ context=64000, 29 secs elapsed
|
||||
Wed Oct 21 05:23:52 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 13.279266939258937 @ context=64000, 29 secs elapsed
|
||||
Wed Oct 21 05:24:21 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 14.27680090014006 @ context=64000, 21 secs elapsed
|
||||
Wed Oct 21 05:24:42 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 13.99919128227428 @ context=64000, 25 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:29:50 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 13.478375923353315 @ context=96000, 28 secs elapsed
|
||||
Wed Oct 21 05:30:18 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 12.90997320417067 @ context=96000, 23 secs elapsed
|
||||
Wed Oct 21 05:30:41 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 12.956446350317137 @ context=96000, 23 secs elapsed
|
||||
Wed Oct 21 05:31:05 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 13.93074896590209 @ context=96000, 22 secs elapsed
|
||||
Wed Oct 21 05:31:26 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 12.688771917209992 @ context=96000, 22 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:36:08 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s), tokens/sec: 11.971487833921072 @ context=128000, 23 secs elapsed
|
||||
Wed Oct 21 05:36:31 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s), tokens/sec: 12.704959054740291 @ context=128000, 24 secs elapsed
|
||||
Wed Oct 21 05:36:55 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s), tokens/sec: 11.484965120109196 @ context=128000, 28 secs elapsed
|
||||
Wed Oct 21 05:37:23 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s), tokens/sec: 11.957040482880984 @ context=128000, 30 secs elapsed
|
||||
Wed Oct 21 05:37:53 AM MST 2026 - qwen3.6:35b w/ 8 Thread(s), tokens/sec: 10.165480245815742 @ context=128000, 27 secs elapsed
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:44:05 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s): , tokens/sec: 11.794151678144981 @ context=192000, time: 22 secs
|
||||
Wed Oct 21 05:44:27 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s): , tokens/sec: 13.191786678902528 @ context=192000, time: 30 secs
|
||||
Wed Oct 21 05:44:57 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s): , tokens/sec: 12.974118764961352 @ context=192000, time: 25 secs
|
||||
Wed Oct 21 05:45:22 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s): , tokens/sec: 13.684751495860636 @ context=192000, time: 22 secs
|
||||
Wed Oct 21 05:41:57 AM MST 2026 - qwen3.6:35b w/ 0 Thread(s): , tokens/sec: 14.771664402476594 @ context=192000, time: 22 secs
|
||||
Stopping all ollama usage...
|
||||
Wed Oct 21 05:47:40 AM MST 2026 - qwen3.6:35b w/ 4 Thread(s): , tokens/sec: 11.75920993970465 @ context=256000, time: 25 secs
|
||||
Wed Oct 21 05:48:06 AM MST 2026 - qwen3.6:35b w/ 5 Thread(s): , tokens/sec: 13.414819339156582 @ context=256000, time: 26 secs
|
||||
Wed Oct 21 05:48:32 AM MST 2026 - qwen3.6:35b w/ 6 Thread(s): , tokens/sec: 12.512960121852013 @ context=256000, time: 31 secs
|
||||
Wed Oct 21 05:49:03 AM MST 2026 - qwen3.6:35b w/ 7 Thread(s): , tokens/sec: 11.610753098619734 @ context=256000, time: 29 secs
|
||||
Wed Oct 21 05:45:46 AM MST 2026 - qwen3.6:35b w/ 0 Thread(s): , tokens/sec: 12.81995869775592 @ context=256000, time: 23 secs
|
||||
```
|
||||
|
||||
#### qwen3.5:35b
|
||||
|
||||
```console
|
||||
$ for c in 32000 128000 256000; do ollama_threads qwen3.5:35b $c; done
|
||||
Wed Oct 21 07:55:03 AM MST 2026 - qwen3.5:35b w/ 4 Thread(s): tokens/sec: 10.3573012564637 @ context=128000, time: 94 secs
|
||||
Wed Oct 21 07:56:37 AM MST 2026 - qwen3.5:35b w/ 6 Thread(s): tokens/sec: 11.929392994980638 @ context=128000, time: 39 secs
|
||||
Wed Oct 21 07:57:17 AM MST 2026 - qwen3.5:35b w/ 7 Thread(s): tokens/sec: 13.082804815917008 @ context=128000, time: 36 secs
|
||||
Wed Oct 21 07:57:53 AM MST 2026 - qwen3.5:35b w/ 0 Thread(s): tokens/sec: 12.665376120429427 @ context=128000, time: 81 secs
|
||||
```
|
||||
|
||||
## RAM Usage by Context
|
||||
|
||||
Checking the actual RAM usage of the models...
|
||||
|
||||
### `ollama_sizes m 16000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 16000 | 10GB |
|
||||
| ministral-3:14b | 9.1GB | 16000 | 11GB |
|
||||
| ministral-3:8b | 6.0GB | 16000 | 7.8GB |
|
||||
| ministral-3:3b | 3.0GB | 16000 | 4.1GB |
|
||||
| mistral-small3.2:24b | 15GB | 16000 | 17GB |
|
||||
| mistral:7b | 4.4GB | 16000 | 6.8GB |
|
||||
| codestral:22b | 12GB | 16000 | 16GB |
|
||||
| devstral-small-2:24b | 15GB | 16000 | 17GB |
|
||||
| qwen2.5-coder:32b | 19GB | 16000 | 24GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 16000 | 12GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 16000 | 5.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 16000 | 2.7GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 16000 | 1.6GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 16000 | 701MB |
|
||||
| qwen3-coder:30b | 18GB | 16000 | 20GB |
|
||||
| qwen3.5:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.5:9b | 6.6GB | 16000 | 6.7GB |
|
||||
| qwen3.5:4b | 3.3GB | 16000 | 3.7GB |
|
||||
| qwen3.5:2b | 2.7GB | 16000 | 2.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 16000 | 630MB |
|
||||
| qwen3.6:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 16000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 32000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 32000 | 12GB |
|
||||
| ministral-3:14b | 9.1GB | 32000 | 13GB |
|
||||
| ministral-3:8b | 6.0GB | 32000 | 10GB |
|
||||
| ministral-3:3b | 3.0GB | 32000 | 5.9GB |
|
||||
| mistral-small3.2:24b | 15GB | 32000 | 20GB |
|
||||
| mistral:7b | 4.4GB | 32000 | 8.9GB |
|
||||
| codestral:22b | 12GB | 32000 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 32000 | 20GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32000 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32000 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32000 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32000 | 3.3GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32000 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32000 | 929MB |
|
||||
| qwen3-coder:30b | 18GB | 32000 | 21GB |
|
||||
| qwen3.5:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 32000 | 19GB |
|
||||
| qwen3.5:9b | 6.6GB | 32000 | 7.3GB |
|
||||
| qwen3.5:4b | 3.3GB | 32000 | 4.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 32000 | 2.8GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 32000 | 695MB |
|
||||
| qwen3.6:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 32000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 32000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 64000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 64000 | 18GB |
|
||||
| ministral-3:14b | 9.1GB | 64000 | 19GB |
|
||||
| ministral-3:8b | 6.0GB | 64000 | 14GB |
|
||||
| ministral-3:3b | 3.0GB | 64000 | 9.6GB |
|
||||
| mistral-small3.2:24b | 15GB | 64000 | 26GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 64000 | 25GB |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB |
|
||||
| qwen3.5:27b | 17GB | 64000 | 22GB |
|
||||
| qwen3.5:9b | 6.6GB | 64000 | 8.8GB |
|
||||
| qwen3.5:4b | 3.3GB | 64000 | 5.6GB |
|
||||
| qwen3.5:2b | 2.7GB | 64000 | 3.5GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 64000 | 999MB |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 64000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 64000 | 18GB |
|
||||
|
||||
### ollama_sizes m 80000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 80000 | 21GB |
|
||||
| ministral-3:14b | 9.1GB | 80000 | 22GB |
|
||||
| ministral-3:8b | 6.0GB | 80000 | 17GB |
|
||||
| ministral-3:3b | 3.0GB | 80000 | 11GB |
|
||||
| mistral-small3.2:24b | 15GB | 80000 | 28GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 80000 | 28GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 80000 | 27GB |
|
||||
| qwen3.5:35b | 22GB | 80000 | 23GB |
|
||||
| qwen3.5:27b | 17GB | 80000 | 23GB |
|
||||
| qwen3.5:9b | 6.6GB | 80000 | 9.4GB |
|
||||
| qwen3.5:4b | 3.3GB | 80000 | 6.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 80000 | 3.8GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 80000 | 1.1GB |
|
||||
| qwen3.6:35b | 22GB | 80000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 80000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 80000 | 18GB |
|
||||
|
||||
### ollama_sizes m 96000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 96000 | 23GB |
|
||||
| ministral-3:14b | 9.1GB | 96000 | 25GB |
|
||||
| ministral-3:8b | 6.0GB | 96000 | 19GB |
|
||||
| ministral-3:3b | 3.0GB | 96000 | 13GB |
|
||||
| mistral-small3.2:24b | 15GB | 96000 | 31GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 96000 | 31GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 96000 | 28GB |
|
||||
| qwen3.5:35b | 22GB | 96000 | 24GB |
|
||||
| qwen3.5:27b | 17GB | 96000 | 24GB |
|
||||
| qwen3.5:9b | 6.6GB | 96000 | 9.9GB |
|
||||
| qwen3.5:4b | 3.3GB | 96000 | 6.8GB |
|
||||
| qwen3.5:2b | 2.7GB | 96000 | 4.1GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 96000 | 1.2GB |
|
||||
| qwen3.6:35b | 22GB | 96000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 96000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 96000 | 18GB |
|
||||
|
||||
### ollama_sizes m 128000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 128000 | 29GB |
|
||||
| ministral-3:14b | 9.1GB | 128000 | 30GB |
|
||||
| ministral-3:8b | 6.0GB | 128000 | 24GB |
|
||||
| ministral-3:3b | 3.0GB | 128000 | 16GB |
|
||||
| mistral-small3.2:24b | 15GB | 128000 | 36GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 128000 | 36GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 128000 | 32GB |
|
||||
| qwen3.5:35b | 22GB | 128000 | 24GB |
|
||||
| qwen3.5:27b | 17GB | 128000 | 26GB |
|
||||
| qwen3.5:9b | 6.6GB | 128000 | 11GB |
|
||||
| qwen3.5:4b | 3.3GB | 128000 | 8.0GB |
|
||||
| qwen3.5:2b | 2.7GB | 128000 | 4.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 128000 | 1.4GB |
|
||||
| qwen3.6:35b | 22GB | 128000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 128000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 128000 | 19GB |
|
||||
|
||||
### ollama_sizes m 160000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 160000 | 34GB |
|
||||
| ministral-3:14b | 9.1GB | 160000 | 35GB |
|
||||
| ministral-3:8b | 6.0GB | 160000 | 28GB |
|
||||
| ministral-3:3b | 3.0GB | 160000 | 20GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 160000 | 42GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 160000 | 35GB |
|
||||
| qwen3.5:35b | 22GB | 160000 | 25GB |
|
||||
| qwen3.5:27b | 17GB | 160000 | 28GB |
|
||||
| qwen3.5:9b | 6.6GB | 160000 | 12GB |
|
||||
| qwen3.5:4b | 3.3GB | 160000 | 9.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 160000 | 5.1GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 160000 | 1.6GB |
|
||||
| qwen3.6:35b | 22GB | 160000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 160000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 160000 | 19GB |
|
||||
|
||||
### ollama_sizes m 192000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 192000 | 39GB |
|
||||
| ministral-3:14b | 9.1GB | 192000 | 41GB |
|
||||
| ministral-3:8b | 6.0GB | 192000 | 33GB |
|
||||
| ministral-3:3b | 3.0GB | 192000 | 23GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 192000 | 47GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 192000 | 38GB |
|
||||
| qwen3.5:35b | 22GB | 192000 | 26GB |
|
||||
| qwen3.5:27b | 17GB | 192000 | 30GB |
|
||||
| qwen3.5:9b | 6.6GB | 192000 | 13GB |
|
||||
| qwen3.5:4b | 3.3GB | 192000 | 10GB |
|
||||
| qwen3.5:2b | 2.7GB | 192000 | 5.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 192000 | 1.8GB |
|
||||
| qwen3.6:35b | 22GB | 192000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 192000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 192000 | 19GB |
|
||||
|
||||
### ollama_sizes m 224000
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 224000 | 45GB |
|
||||
| ministral-3:14b | 9.1GB | 224000 | 46GB |
|
||||
| ministral-3:8b | 6.0GB | 224000 | 37GB |
|
||||
| ministral-3:3b | 3.0GB | 224000 | 27GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 224000 | 53GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 224000 | 41GB |
|
||||
| qwen3.5:35b | 22GB | 224000 | 27GB |
|
||||
| qwen3.5:27b | 17GB | 224000 | 33GB |
|
||||
| qwen3.5:9b | 6.6GB | 224000 | 14GB |
|
||||
| qwen3.5:4b | 3.3GB | 224000 | 11GB |
|
||||
| qwen3.5:2b | 2.7GB | 224000 | 6.2GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 224000 | 2.0GB |
|
||||
| qwen3.6:35b | 22GB | 224000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 224000 | 19GB |
|
||||
| qwen3.8:27b | 17GB | 224000 | 19GB |
|
||||
|
||||
### `ollama_sizes m 256000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 256000 | 50GB |
|
||||
| ministral-3:14b | 9.1GB | 256000 | 51GB |
|
||||
| ministral-3:8b | 6.0GB | 256000 | 42GB |
|
||||
| ministral-3:3b | 3.0GB | 256000 | 30GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 256000 | 58GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 256000 | 45GB |
|
||||
| qwen3.5:35b | 22GB | 256000 | 28GB |
|
||||
| qwen3.5:27b | 17GB | 256000 | 35GB |
|
||||
| qwen3.5:9b | 6.6GB | 256000 | 15GB |
|
||||
| qwen3.5:4b | 3.3GB | 256000 | 12GB |
|
||||
| qwen3.5:2b | 2.7GB | 256000 | 6.7GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 256000 | 2.2GB |
|
||||
| qwen3.6:35b | 22GB | 256000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 256000 | 20GB |
|
||||
| qwen3.8:27b | 17GB | 256000 | 20GB |
|
||||
+215
-197
@@ -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:
|
||||
@@ -106,6 +115,16 @@
|
||||
llm_removals:
|
||||
##### QWEN #####
|
||||
- { "purpose": ["chat"], "model": "qwen3:4b", "provider": "qwen_30_0040", "size_mb": 4000, "context": 123456 } # succeeded
|
||||
### QWEN 3.0 Coder - Supposed to be better than 2.5 for machines that can handle it. Went okay, but better options now.
|
||||
- { "purpose": ["code", "chat"], "model": "qwen3-coder:30b", "provider": "qwen_30_coder_0300_moe", "size_mb": "{{ llm_size_coef * 19000 }}", "context": 262144 }
|
||||
- { "purpose": ["code", "chat"], "model": "qwen3-coder:420b", "provider": "qwen_30_coder_4200_moe", "size_mb": "{{ llm_size_coef * 290000 }}", "context": 262144 }
|
||||
### QWEN 2.5 Coder - Ol'reliable! Did not seem to handle tools too well though. Defunitely not conversation.
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:0.5b", "provider": "qwen_25_coder_0005", "size_mb": "{{ llm_size_coef * 398 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:1.5b", "provider": "qwen_25_coder_0015", "size_mb": "{{ llm_size_coef * 986 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:3b", "provider": "qwen_25_coder_0030", "size_mb": "{{ llm_size_coef * 1900 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:7b", "provider": "qwen_25_coder_0070", "size_mb": "{{ llm_size_coef * 4700 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:14b", "provider": "qwen_25_coder_0140", "size_mb": "{{ llm_size_coef * 9000 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:32b", "provider": "qwen_25_coder_0320", "size_mb": "{{ llm_size_coef * 20000 }}", "context": 32768 }
|
||||
##### Mistral #####
|
||||
- { "purpose": ["code"], "model": "devstral:24b", "provider": "mistral_dev10_0240", "size_mb": "{{ llm_size_coef * 14000 }}", "context": 128000 } # succeeded
|
||||
# https://ollama.com/library/mistral-small : Last Updated 2025-01-30, succeeded
|
||||
@@ -113,11 +132,18 @@
|
||||
- { "purpose": ["chat"], "model": "mistral-small:22b", "provider": "mistral_small30_0220", "size_mb": "{{ llm_size_coef * 13000 }}", "context": 128000 } # Yes, the smaller one has larger context.
|
||||
# https://ollama.com/library/mistral-small3.1 : Last Update 2025-04-07, succeeded
|
||||
- { "purpose": ["chat"], "model": "mistral-small3.1:24b", "provider": "mistral_small31_0240", "size_mb": "{{ llm_size_coef * 15000 }}", "context": 128000 }
|
||||
# Supposedly ollama has it tagged at mistral-small with no params given. it's not on the site though. Let's find out!
|
||||
# No, this is Mistral 3, as the website says. Ask Brave is wrooong.
|
||||
- { "purpose": ["chat", "lang", "code"], "model": "mistral-small", "provider": "mistral_small40_1190", "size_mb": 60000 , "context": 256000 }
|
||||
# https://ollama.com/library/mistral-nemo : Last Updated 2025-07-23
|
||||
# Supposed to be a drop-in replacement for mistral:7b. Not really any more useful than the other options.
|
||||
- { "purpose": ["chat", "lang"], "model": "mistral-nemo:12b", "provider": "mistral_nemo_0120", "size_mb": "{{ llm_size_coef * 7100 }}", "context": 128000 } # says 1000K in table but 128k in desc, going with desc.
|
||||
llm_choices:
|
||||
##### QWEN #####
|
||||
### QWEN >3.5 - Need to try!
|
||||
# Supposedly great for coding over any previous version.
|
||||
# Prefer 27b (dense) over anything higher which likely uses MoE (essentially only uses 3b inside of a 35b, dumber but faster and potentially has access to more info).
|
||||
# Supposedly great for coding over any previous version.
|
||||
# Prefer 27b (dense) over anything higher which likely uses MoE (essentially only uses 3b inside of a 35b, dumber but faster and potentially has access to more info).
|
||||
# Update: MoE actually runs really well on my workstation hardware, significantly faster than dense models, gives good results too.
|
||||
# https://ollama.com/library/qwen3.8 : Last Updated 2026-09-25
|
||||
# Known to overthink, suggested to prefer 3.6:27b unless setting temp to low/medium.
|
||||
- { "purpose": ["code", "chat", "lang"], "model": "qwen3.8:27b", "provider": "qwen_38_0270", "size_mb": "{{ llm_size_coef * 18000 }}", "context": 262144 }
|
||||
@@ -134,17 +160,17 @@
|
||||
- { "purpose": ["chat", "code"], "model": "qwen3.5:27b", "provider": "qwen_35_0270", "size_mb": "{{ llm_size_coef * 17000 }}", "context": 262144 } # succeeded
|
||||
- { "purpose": ["chat", "code"], "model": "qwen3.5:35b", "provider": "qwen_35_0350_moe", "size_mb": "{{ llm_size_coef * 22000 }}", "context": 262144 }
|
||||
- { "purpose": ["chat", "code"], "model": "qwen3.5:122b", "provider": "qwen_35_1220_moe", "size_mb": "{{ llm_size_coef * 81000 }}", "context": 262144 }
|
||||
### QWEN 3.0 Coder - Supposed to be better than 2.5 for machines that can handle it.
|
||||
- { "purpose": ["code", "chat"], "model": "qwen3-coder:30b", "provider": "qwen_30_coder_0300_moe", "size_mb": "{{ llm_size_coef * 19000 }}", "context": 262144 }
|
||||
- { "purpose": ["code", "chat"], "model": "qwen3-coder:420b", "provider": "qwen_30_coder_4200_moe", "size_mb": "{{ llm_size_coef * 290000 }}", "context": 262144 }
|
||||
### QWEN 2.5 Coder - Ol'reliable!
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:0.5b", "provider": "qwen_25_coder_0005", "size_mb": "{{ llm_size_coef * 398 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:1.5b", "provider": "qwen_25_coder_0015", "size_mb": "{{ llm_size_coef * 986 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:3b", "provider": "qwen_25_coder_0030", "size_mb": "{{ llm_size_coef * 1900 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:7b", "provider": "qwen_25_coder_0070", "size_mb": "{{ llm_size_coef * 4700 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:14b", "provider": "qwen_25_coder_0140", "size_mb": "{{ llm_size_coef * 9000 }}", "context": 32768 }
|
||||
- { "purpose": ["code"], "model": "qwen2.5-coder:32b", "provider": "qwen_25_coder_0320", "size_mb": "{{ llm_size_coef * 20000 }}", "context": 32768 }
|
||||
##### Mistral, Ministral, and Devstral - By a French company? #####
|
||||
##### Mistral, Ministral, and Devstral - By a French company. #####
|
||||
# mistral-small-4
|
||||
# https://huggingface.co/unsloth/Mistral-Small-4-119B-2603-GGUF
|
||||
# Supposed to be better than Qwen equivalents, it's basically mistral, mixtral, magistral, and devstral all in one.
|
||||
# unsloth version is supposed to be the best quantization. UD-Q3_K_XL is supposed to take 64GB RAM, lol, while Q4_K_M would need 80+ GB.
|
||||
# needs done via 'ollama create', fails with pull. https://github.com/ollama/ollama/issues/5245
|
||||
- { "purpose": ["chat", "lang", "code"], "model": "hf.co/unsloth/Mistral-Small-4-119B-2603-GGUF:UD-Q3_K_XL", "provider": "mistral_small40_1190_unsloth_q3", "size_mb": "{{ llm_size_coef * 54800 }}", "context": 256000 }
|
||||
# https://huggingface.co/mistralai/Mistral-Small-4-119B-2603 : 242GB unquantized, lol.
|
||||
- { "purpose": ["chat", "lang", "code"], "model": "hf.co/mistralai/Mistral-Small-4-119B-2603", "provider": "mistral_small40_1190", "size_mb": "{{ llm_size_coef * 242000 }}", "context": 256000 }
|
||||
# https://huggingface.co/unsloth/Mistral-Small-4-119B-2603 : 121GB, A6B MoE, hmmm!
|
||||
- { "purpose": ["chat", "lang", "code"], "model": "hf.co/unsloth/Mistral-Small-4-119B-2603", "provider": "mistral_small40_1190_unsloth_a6b", "size_mb": "{{ llm_size_coef * 121000 }}", "context": 256000 }
|
||||
# https://ollama.com/library/devstral-small-2 : Last Updated 2025-12-13
|
||||
# Most recommended in Mistral family for agentic coding.
|
||||
- { "purpose": ["code"], "model": "devstral-small-2:24b", "provider": "mistral_dev20_0240_small", "size_mb": "{{ llm_size_coef * 15000 }}", "context": 393216 }
|
||||
@@ -159,18 +185,7 @@
|
||||
- { "purpose": ["chat", "lang"], "model": "ministral-3:3b", "provider": "mistral_mini30_0030", "size_mb": "{{ llm_size_coef * 3000 }}", "context": 256000 }
|
||||
- { "purpose": ["chat", "lang"], "model": "ministral-3:8b", "provider": "mistral_mini30_0080", "size_mb": "{{ llm_size_coef * 6000 }}", "context": 256000 }
|
||||
- { "purpose": ["chat", "lang"], "model": "ministral-3:14b", "provider": "mistral_mini30_0140", "size_mb": "{{ llm_size_coef * 9100 }}", "context": 256000 } # also rated super high for Croatian, gives more head room.
|
||||
# https://ollama.com/library/mistral-nemo : Last Updated 2025-07-23
|
||||
# Supposed to be a drop-in replacement for mistral:7b.
|
||||
- { "purpose": ["chat", "lang"], "model": "mistral-nemo:12b", "provider": "mistral_nemo_0120", "size_mb": "{{ llm_size_coef * 7100 }}", "context": 128000 } # says 1000K in table but 128k in desc, going with desc.
|
||||
##### TBD #####
|
||||
### QWEN 2.5 - Older, but does not have "thinking", tempting!
|
||||
#- qwen2.5:0.5b
|
||||
#- qwen2.5:1.5b
|
||||
#- qwen2.5:3b
|
||||
#- qwen2.5:7b
|
||||
#- qwen2.5:14b
|
||||
#- qwen2.5:32b
|
||||
#- qwen2.5:72b
|
||||
### Z.ai
|
||||
#- GLM-5.x
|
||||
#- glm4-flash
|
||||
@@ -196,9 +211,9 @@
|
||||
- name: Workstation | Linux | Software | LLMs | Facts | Choices | Sort
|
||||
ansible.builtin.set_fact:
|
||||
llm_installs: >-
|
||||
{{ llm_choices | selectattr('size_mb', 'le', ansible_memtotal_mb) | list }}
|
||||
{{ llm_installs | union(llm_choices | selectattr('size_mb', 'le', ansible_memtotal_mb) | list) }}
|
||||
llm_removals: >-
|
||||
{{ llm_choices | selectattr('size_mb', 'gt', ansible_memtotal_mb) | list }}
|
||||
{{ llm_removals | union(llm_choices | selectattr('size_mb', 'gt', ansible_memtotal_mb) | list) }}
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | Facts | Merge | Print
|
||||
ansible.builtin.debug:
|
||||
@@ -218,28 +233,6 @@
|
||||
- "{{ qwen_code }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | Docker
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker
|
||||
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:
|
||||
|
||||
@@ -276,17 +269,19 @@
|
||||
|
||||
### Required ###
|
||||
export HOME={{ user_user.home }}
|
||||
export OLLAMA_HOST=0.0.0.0 # Needed for Open WebUI
|
||||
|
||||
### Timeouts ###
|
||||
export OLLAMA_LOAD_TIMEOUT=20m # default is 5m
|
||||
export OLLAMA_LOAD_TIMEOUT=30m # default is 5m
|
||||
export OLLAMA_REQUEST_TIMEOUT=3600 # default 300 (unconfirmed, not in the list of --help vars)
|
||||
|
||||
### Resource Usage ###
|
||||
export OLLAMA_KEEP_ALIVE=20m # default is 5m
|
||||
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.
|
||||
|
||||
### Prevent Data Loss ###
|
||||
# OLLAMA_NOPRUNE
|
||||
@@ -299,7 +294,7 @@
|
||||
{{ ("export HF_TOKEN=" ~ hf_token) if hf_token else '' }}
|
||||
|
||||
### Logging ###
|
||||
export OLLAMA_DEBUG=1
|
||||
#export OLLAMA_DEBUG=1
|
||||
export OLLAMA_METRICS=1 # (check http://127.0.0.1:11434/metrics)
|
||||
|
||||
### Other ###
|
||||
@@ -414,6 +409,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.
|
||||
@@ -422,43 +424,37 @@
|
||||
# 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.
|
||||
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
|
||||
|
||||
# Start the open-webui program.
|
||||
set -e
|
||||
exec docker run \
|
||||
docker run \
|
||||
--name open-webui \
|
||||
--network=host -e PORT={{ open_webui_port }} \
|
||||
--network host -e PORT={{ open_webui_port }} \
|
||||
-e OLLAMA_BASE_URL=http://0.0.0.0: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
|
||||
@@ -499,6 +495,17 @@
|
||||
|
||||
# Open Terminal - Start #
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | Sandbox
|
||||
ansible.builtin.import_tasks: tasks/workstation/linux/software/ai/sandbox.yml
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Facts
|
||||
ansible.builtin.set_fact:
|
||||
jdk_jvm: "{{ jdk_jvm | default('/usr/lib/jvm') }}"
|
||||
jdk_etc: "{{ jdk_etc | default('/etc/java-openjdk') }}"
|
||||
jdk_etc17: "{{ jdk_etc17 | default('/etc/java17-openjdk') }}"
|
||||
jdk_etc21: "{{ jdk_etc21 | default('/etc/java21-openjdk') }}"
|
||||
jdk_etc25: "{{ jdk_etc25 | default('/etc/java25-openjdk') }}"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | /etc/sv
|
||||
ansible.builtin.file:
|
||||
name: "/etc/sv/open-terminal/log"
|
||||
@@ -510,15 +517,96 @@
|
||||
ansible.builtin.file:
|
||||
name: "/var/log/open-terminal"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | AI-Sandbox
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | /usr/local/etc
|
||||
ansible.builtin.file:
|
||||
dest: "{{ user_user.home }}/AI-Sandbox"
|
||||
name: "/usr/local/etc/open-terminal"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Compose YAML
|
||||
ansible.builtin.copy:
|
||||
dest: /usr/local/etc/open-terminal/compose.yml
|
||||
content: |
|
||||
services:
|
||||
open-terminal:
|
||||
container_name: open-terminal
|
||||
build:
|
||||
context: ./
|
||||
image: hyperling/open-terminal:latest
|
||||
pull_policy: never
|
||||
network_mode: host
|
||||
command: run --port {{ open_terminal_port }}
|
||||
environment:
|
||||
- OPEN_TERMINAL_FILE_BROWSER_ROOT=/home/user
|
||||
- OPEN_TERMINAL_API_KEY={{ open_terminal_key }}
|
||||
- OPEN_TERMINAL_PACKAGES=
|
||||
- GOT_EM=true
|
||||
volumes:
|
||||
- {{ user_user.home }}/AI-Sandbox:/home/user
|
||||
- {{ user_user.home }}/Code:{{ user_user.home }}/Code
|
||||
- {{ user_user.home }}/SDKs:{{ user_user.home }}/SDKs
|
||||
- {{ jdk_jvm }}:{{ jdk_jvm }}:ro
|
||||
- {{ jdk_etc }}:{{ jdk_etc }}:ro
|
||||
- /etc/ssl/certs/java:/etc/ssl/certs/java:ro
|
||||
- /etc/ca-certificates:/etc/ca-certificates:ro
|
||||
- {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro
|
||||
- {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro
|
||||
- {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro
|
||||
- {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle
|
||||
- {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Dockerfile
|
||||
ansible.builtin.copy:
|
||||
dest: /usr/local/etc/open-terminal/Dockerfile
|
||||
content: |
|
||||
FROM ghcr.io/open-webui/open-terminal:latest
|
||||
|
||||
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.
|
||||
# default-jdk openjdk-17-jdk
|
||||
|
||||
RUN echo "Flutter"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl git unzip xz-utils zip libglu1-mesa libglu1-mesa
|
||||
|
||||
RUN echo "Flutter (Linux)"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
clang cmake git ninja-build pkg-config libgtk-3-dev \
|
||||
liblzma-dev libstdc++-12-dev
|
||||
|
||||
RUN echo "Flutter (Android)"
|
||||
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"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | env
|
||||
ansible.builtin.copy:
|
||||
dest: /usr/local/etc/open-terminal/.env
|
||||
content: |
|
||||
COMPOSE_BAKE=true
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Run
|
||||
@@ -527,38 +615,39 @@
|
||||
content: |
|
||||
#!/bin/sh
|
||||
exec 2>&1
|
||||
image=ghcr.io/open-webui/open-terminal:latest
|
||||
|
||||
# Wait for Docker to start up.
|
||||
while [ ! -S /var/run/docker.sock ]; do sleep 1; done
|
||||
|
||||
# Ensure the old container is gone.
|
||||
# Ensure the old container is stopped.
|
||||
echo "RUN: Stopping..."
|
||||
docker stop open-terminal &&
|
||||
echo "RUN: Container stopped" ||
|
||||
docker compose \
|
||||
-f /usr/local/etc/open-terminal/compose.yml down &&
|
||||
echo "RUN: Container stopped." ||
|
||||
echo "RUN: Container already stopped."
|
||||
echo "RUN: Deleting..."
|
||||
docker rm -f open-terminal &&
|
||||
echo "RUN: Container deleted" ||
|
||||
echo "RUN: Container already deleted."
|
||||
|
||||
# Check for any new updates in background.
|
||||
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 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 run \
|
||||
--name open-terminal \
|
||||
--network=host \
|
||||
-v {{ user_user.home }}/AI-Sandbox:{{ user_user.home }} \
|
||||
-v {{ user_user.home }}/Code:{{ user_user.home }}/Code \
|
||||
-e OPEN_TERMINAL_FILE_BROWSER_ROOT={{ user_user.home }} \
|
||||
-e OPEN_TERMINAL_API_KEY={{ open_terminal_key }} \
|
||||
$image run --port {{ open_terminal_port }}
|
||||
|
||||
# -p {{ open_terminal_port }}:8000
|
||||
docker compose -f /usr/local/etc/open-terminal/compose.yml up
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Finish
|
||||
@@ -568,15 +657,10 @@
|
||||
{{ runit_finish_sleep }}
|
||||
|
||||
echo "FINISH: Stopping..."
|
||||
docker stop open-terminal &&
|
||||
docker compose -f /usr/local/etc/open-terminal/compose.yml down &&
|
||||
echo "FINISH: Container stopped" ||
|
||||
echo "FINISH: Container already stopped."
|
||||
|
||||
echo "FINISH: Deleting..."
|
||||
docker rm -f open-terminal &&
|
||||
echo "FINISH: Container deleted" ||
|
||||
echo "FINISH: Container already deleted."
|
||||
|
||||
echo "FINISH: Done!"
|
||||
mode: "0755"
|
||||
|
||||
@@ -715,7 +799,6 @@
|
||||
loop:
|
||||
- { 'name': "{{ ollama }}" , 'status': "{{ ollama_enabled }}" }
|
||||
- { 'name': "{{ zeroclaw }}" , 'status': "{{ zeroclaw_enabled }}" }
|
||||
- { 'name': 'docker' , 'status': true }
|
||||
- { 'name': 'open-webui' , 'status': "{{ open_webui_enabled }}" }
|
||||
- { 'name': 'open-terminal' , 'status': "{{ open_terminal_enabled }}" }
|
||||
- { 'name': 'swap-stopper' , 'status': true }
|
||||
@@ -758,17 +841,24 @@
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
marker: "# {mark} ANSIBLE MANAGED BLOCK | ollama | Manual Script"
|
||||
content: |
|
||||
function ollama_llms() {
|
||||
function llm_installs() {
|
||||
{% for llm in llm_installs %}
|
||||
|
||||
echo "{{ llm.model }}"
|
||||
|
||||
{% endfor %}
|
||||
}
|
||||
function llm_removals() {
|
||||
{% for llm in llm_removals %}
|
||||
|
||||
echo "{{ llm.model }}"
|
||||
|
||||
{% endfor %}
|
||||
}
|
||||
function ollama_pull() {
|
||||
echo "Manually Pulling Models"
|
||||
|
||||
for model in `ollama_llms`; do
|
||||
for model in `llm_installs`; do
|
||||
echo -e "\n\n Starting 'ollama pull $model' \n\n"
|
||||
ollama pull $model
|
||||
status=$?
|
||||
@@ -781,17 +871,21 @@
|
||||
alias pull-models="ollama_pull "
|
||||
alias pull-ai="ollama_pull "
|
||||
|
||||
function ollama_stop() {
|
||||
for model in `ollama ps | tail -n +2 | awk '{print $1}'`; do
|
||||
echo "Stopping ${model}..."
|
||||
ollama stop $model
|
||||
function ollama_clean() {
|
||||
echo "Cleaning Models"
|
||||
|
||||
for model in `llm_removals`; do
|
||||
echo -e "\n Removing '$model'"
|
||||
ollama rm $model
|
||||
done
|
||||
|
||||
echo "Done!"
|
||||
}
|
||||
alias ollama-stop="ollama_stop"
|
||||
alias ollama-kill="ollama_stop"
|
||||
alias ollama-killall="ollama_stop"
|
||||
alias ollama-kill-all="ollama_stop"
|
||||
alias ollama-stop-all="ollama_stop"
|
||||
alias ollama-clean="ollama_clean "
|
||||
alias clean-ollama="ollama_clean "
|
||||
alias clean-llms="ollama_clean "
|
||||
alias clean-models="ollama_clean "
|
||||
alias clean-ai="ollama_clean "
|
||||
|
||||
function ollama_chat() {
|
||||
ollama run {{ 'qwen3.8:27b' if ansible_memtotal_mb > 32000 else 'qwen3.5:4b' }}
|
||||
@@ -803,21 +897,6 @@
|
||||
ollama run {{ 'qwen3.8:27b' if ansible_memtotal_mb > 32000 else 'qwen2.5-coder:7b' }}
|
||||
}
|
||||
alias ollama-code="ollama_code "
|
||||
alias code="ollama_code "
|
||||
|
||||
function ollama_models() {
|
||||
for model in `ollama ls | grep -v NAME | awk '{print $1;}'`; do
|
||||
echo $model
|
||||
ollama show $model | grep -E "architecture|context length|quantization"
|
||||
done
|
||||
}
|
||||
alias ollama-models="ollama_models "
|
||||
alias ollama-show-models="ollama_models "
|
||||
alias ollama-show="ollama_models "
|
||||
alias ollama-dense="ollama_models "
|
||||
alias ollama-moe="ollama_models "
|
||||
alias show-models="ollama_models "
|
||||
alias list-models="ollama_models "
|
||||
|
||||
function ollama_purge() {
|
||||
echo "TBD: Purge all models not in llm_installs."
|
||||
@@ -841,68 +920,7 @@
|
||||
alias restart-llm="restart_ai "
|
||||
alias restart-llms="restart_ai "
|
||||
alias restart-models="restart_ai "
|
||||
|
||||
function ollama_sizes() {
|
||||
# VAR1 - Format. Choices are Markdown or Spaces.
|
||||
typeset -l fmt="$1"
|
||||
if [[ -z "$fmt" ]]; then
|
||||
fmt=s
|
||||
fi
|
||||
if [[ "$fmt" != "s"* && "$fmt" != "m"* ]]; then
|
||||
echo "ERROR: Format incorrect, choose Markdown or Spaces."
|
||||
return 1
|
||||
fi
|
||||
sep=""
|
||||
if [[ $fmt == "m"* ]]; then
|
||||
sep="|"
|
||||
fi
|
||||
|
||||
# VAR2 - Context
|
||||
typeset -i num_ctx="$2"
|
||||
context=""
|
||||
if [[ -n $num_ctx ]]; then
|
||||
context=',"options":{"num_ctx":'$num_ctx'}'
|
||||
fi
|
||||
|
||||
# Column Formatting
|
||||
col1=25
|
||||
col2=12
|
||||
col3=8
|
||||
col4=12
|
||||
spacing="$sep %-${col1}s $sep %${col2}s $sep %${col3}s $sep %${col4}s $sep"
|
||||
|
||||
#echo " Stopping all ollama usage..."
|
||||
sudo sv restart ollama >/dev/null 2>&1
|
||||
|
||||
#echo -e "\n Checking model disk and RAM sizes...\n"
|
||||
|
||||
printf "$spacing\n" "Model Name" "HDD (ls)" "Context" "RAM (ps)"
|
||||
if [[ $fmt == "m"* ]]; then
|
||||
printf "$spacing\n" ":------------------------" "-----------:" "-------:" "-----------:"
|
||||
fi
|
||||
|
||||
for model in `ollama ls | grep -v NAME | awk '{print $1}'`; do
|
||||
#ollama run $model "" --format json >/dev/null 2>&1
|
||||
curl -s http://localhost:11434/api/generate \
|
||||
-d '{"model":"'$model'","prompt":"","stream":false,"keep_alive":1'$context'}' \
|
||||
>/dev/null 2>&1
|
||||
|
||||
hdd="`ollama ls | grep $model | awk '{print $3 $4}'`"
|
||||
ram="`ollama ps | grep $model | awk '{print $3 $4}'`"
|
||||
ctx="`ollama ps | grep $model | awk '{print $7}'`"
|
||||
|
||||
printf "$spacing\n" "$model" "$hdd" "$ctx" "$ram"
|
||||
|
||||
ollama stop $model >/dev/null 2>&1
|
||||
while ollama ps | grep $model; do
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
|
||||
#echo "Done!!"
|
||||
}
|
||||
alias ollama-sizes="ollama_sizes "
|
||||
alias model-sizes="ollama_sizes "
|
||||
alias reload-ai="restart_ai "
|
||||
state: present
|
||||
create: false
|
||||
backup: true
|
||||
@@ -0,0 +1,498 @@
|
||||
---
|
||||
# Move the plays related to AGENTS.md to its own file since it is now so large.
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | Dir
|
||||
ansible.builtin.file:
|
||||
dest: "{{ user_user.home }}/AI-Sandbox"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | Env
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/AI-Sandbox/{{ item }}"
|
||||
marker: "# {mark} | MANAGE BY ANSIBLE | Env Vars"
|
||||
content: |
|
||||
if [[ -d "$HOME/bin" ]]; then
|
||||
export PATH="$HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
export ANDROID_HOME="{{ user_user.home }}/SDKs/Android/Sdk"
|
||||
export GRADLE_USER_HOME={{ user_user.home }}/.gradle
|
||||
export PATH="$ANDROID_HOME/platform-tools:$PATH"
|
||||
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
|
||||
|
||||
export FLUTTER_HOME="{{ user_user.home }}/SDKs/Flutter/flutter"
|
||||
export PUB_CACHE={{ user_user.home }}/.pub-cache
|
||||
export PATH="$FLUTTER_HOME/bin:$PATH"
|
||||
|
||||
export JAVA_HOME="{{ user_user.home }}/SDKs/Java"
|
||||
export PATH="$JAVA_HOME/bin:$PATH"
|
||||
create: true
|
||||
backup: false
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bashrc"
|
||||
|
||||
- name: Workstation | Linux | Software | AI | Sandbox | AGENTS.md
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ user_user.home }}/AI-Sandbox/AGENTS.md"
|
||||
content: |
|
||||
# Environment
|
||||
|
||||
You are running in a Docker container called Open Terminal. We are
|
||||
communicating via Open WebUI, also being run in a Docker
|
||||
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
|
||||
compile or run whatever command is needed on the host system.
|
||||
|
||||
# Rules
|
||||
|
||||
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 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 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.
|
||||
|
||||
The user manages the `{{ user_user.home }}/SDKs` directory. Do not
|
||||
modify it. Instead, ask if anything needs updated or added.
|
||||
|
||||
Never manually edit, modify, delete, alter, replace, etc any
|
||||
files under system folders such as `/usr`. Anything under `/` is
|
||||
managed by the system. If you need assistance changing anything
|
||||
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. 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
|
||||
|
||||
You have free reign over your home directory. Feel free to
|
||||
create memory files or anything else which would benefit you.
|
||||
|
||||
Everything we create should have both Desktop Linux and Android
|
||||
in mind. Windows, MacOS, and iOS will never be compiled for, but
|
||||
if we can do things in a way which makes it easy for others to
|
||||
fork the project and add the support themselves, then that's best.
|
||||
|
||||
# Versions
|
||||
|
||||
These are the versions of plugins and languages we need to use.
|
||||
If you know of an important upgrade from them, please let me know.
|
||||
|
||||
If you find that an application is already a newer version than
|
||||
those listed here, that is acceptable, never attempt to downgrade
|
||||
without explicitly asking the user first and having a good reason.
|
||||
|
||||
## Android / Flutter
|
||||
|
||||
- Gradle 9.8.2
|
||||
- AGP 9.5.0
|
||||
- Kotlin 2.4.21
|
||||
- Java JDK 17
|
||||
- Flutter Plugin Loader 1.0.0
|
||||
- compileSdk 37
|
||||
- targetSDK 37
|
||||
|
||||
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.
|
||||
|
||||
Only the arm-v8a architecture needs included in the release
|
||||
builds. x86 and others should continue to exist in the debug run.
|
||||
This will help save space on local servers like Gitea and F-Droid.
|
||||
If code for this does not exist, please add splitting or filtering
|
||||
so that when the designer generates a signed APK it's only v8a.
|
||||
|
||||
Android : paths are from the project root.
|
||||
Flutter : paths are under the folder `android`.
|
||||
|
||||
### All Android Project Types
|
||||
|
||||
#### ./gradle/wrapper/grade-wrapper.properties
|
||||
|
||||
```
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip
|
||||
```
|
||||
|
||||
#### ./settings.gradle.kts
|
||||
|
||||
```
|
||||
id("com.android.application") version "9.5.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.4.21" apply false
|
||||
```
|
||||
|
||||
#### ./app/build.gradle.kts
|
||||
|
||||
```
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_17)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Also enable minify and shrink while in there.
|
||||
|
||||
```
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
...
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Flutter Projects
|
||||
|
||||
#### ./settings.gradle.kts
|
||||
|
||||
```
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
```
|
||||
|
||||
### Native Kotlin Apps
|
||||
|
||||
These only apply to Android apps which are not Flutter, Kivy, etc.
|
||||
|
||||
#### Plugin Versions
|
||||
|
||||
##### ./gradle/libs.versions.toml
|
||||
|
||||
```
|
||||
[versions]
|
||||
agp = "9.5.0"
|
||||
kotlin = "2.4.21"
|
||||
coreKtx = "1.19.1"
|
||||
junit = "4.13.2"
|
||||
junitVersion = "1.3.0"
|
||||
espressoCore = "3.7.0"
|
||||
lifecycleRuntimeKtx = "2.11.0"
|
||||
activityCompose = "1.13.0"
|
||||
composeBom = "2026.09.00"
|
||||
```
|
||||
|
||||
#### Kotlin Compose Fix
|
||||
|
||||
Also ensure Kotlin is coming from Compose and not Jetbrains.
|
||||
|
||||
##### ./gradle/libs.versions.toml
|
||||
|
||||
```
|
||||
[plugins]
|
||||
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||
#jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||
kotlinCompose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||||
```
|
||||
|
||||
##### ./build.gradle.kts
|
||||
|
||||
```
|
||||
plugins {
|
||||
alias(libs.plugins.androidApplication) apply false
|
||||
//alias(libs.plugins.jetbrainsKotlinAndroid) apply false
|
||||
alias(libs.plugins.kotlinCompose) apply false
|
||||
}
|
||||
```
|
||||
|
||||
##### ./app/build.gradle.kts
|
||||
|
||||
```
|
||||
plugins {
|
||||
alias(libs.plugins.androidApplication)
|
||||
//alias(libs.plugins.jetbrainsKotlinAndroid)
|
||||
alias(libs.plugins.kotlinCompose)
|
||||
}
|
||||
```
|
||||
|
||||
# Build Processes
|
||||
|
||||
How to compile certain projects. Tools to prefer. If a language
|
||||
or framework is not mentioned, then use the typical commands.
|
||||
|
||||
## Kotlin Multiplatform (KMP)
|
||||
|
||||
Used to create small native Android apps with the ability to also
|
||||
run against Desktop Linux. APK size is the greatest benefit for
|
||||
using KMP over something like Flutter or KivyMD.
|
||||
|
||||
### Kotlin Toolchain
|
||||
|
||||
This is the preferred build type when setting up new projects.
|
||||
|
||||
Please use `kotlin` rather than any `amper` commands. `amper` has
|
||||
been deprecated and is intentionally not present on the system.
|
||||
`kotlin` is available at the root of each KMP project. Examples:
|
||||
|
||||
```
|
||||
cd {{ user_user.home }}/Code/example-kmp-project/
|
||||
|
||||
# 1. Compile + link ALL targets (JVM, iOS, Android, native, etc.)
|
||||
./kotlin build
|
||||
|
||||
# 2. (Optional) Run tests across all targets
|
||||
./kotlin test
|
||||
|
||||
# 3. (Optional) Run all quality checks (tests + registered linters)
|
||||
./kotlin check
|
||||
```
|
||||
|
||||
### Gradle KMP
|
||||
|
||||
This is a legacy method, new projects will not be set up with it.
|
||||
Examples:
|
||||
|
||||
```
|
||||
# Compile all targets
|
||||
./gradlew assemble
|
||||
|
||||
# Or more explicitly (if you want to be sure nothing is skipped):
|
||||
./gradlew jvmJar assembleDebug assembleIosSimulatorArm64 # etc. per target
|
||||
|
||||
# Run all tests
|
||||
./gradlew allTests
|
||||
```
|
||||
|
||||
# Coding Conventions
|
||||
|
||||
Preferences related to how code should be written.
|
||||
|
||||
## All languages
|
||||
|
||||
If a value is going to be used more than once, even a small path or file
|
||||
name, it should exist in a variable.
|
||||
|
||||
Relative shebangs such as `#!/usr/bin/env bash` and `#!/usr/bin/env node`
|
||||
are always preferred over static shebangs such as `#!/bin/bash`, since
|
||||
scripts are run across a multitude of different systems.
|
||||
|
||||
### Layout
|
||||
|
||||
Programs should be laid out in 5 sections.
|
||||
|
||||
- Variables
|
||||
- Instantiate global variables and defaults used for parameters which
|
||||
do not get passed an explicit value by the user.
|
||||
- Functions
|
||||
- Functions to be used throughout the program, including the Usage.
|
||||
- Parameters / Validation
|
||||
- Parse the parameters, validate the input, and assign any defaults.
|
||||
- Main
|
||||
- The primary logic of the program, completes the task at hand.
|
||||
- Finish / Cleanup
|
||||
- Typically just `exit 0`, but sometimes a summary of what was done.
|
||||
|
||||
All sections may not always apply, such as with Hugo websites. With
|
||||
projects like Android apps this would apply to each individual function,
|
||||
method, and class. If a section does not need anything, it can be blank.
|
||||
|
||||
```
|
||||
public static void doThing(String thingName) {
|
||||
// Variables //
|
||||
String thingPrefix = "/place/for/thing/"
|
||||
|
||||
// Functions //
|
||||
|
||||
// Parameters //
|
||||
if (thingName.isEmpty) {
|
||||
Exception e = new Exception("No name passed!");
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Main //
|
||||
runStuff(thingPrefix + thingName);
|
||||
|
||||
// Finish //
|
||||
}
|
||||
```
|
||||
|
||||
The comments do not need to be included, this example is just as valid,
|
||||
what maytters most is that the 5 section are done in order rather than
|
||||
instantiating variable mid-scope.
|
||||
|
||||
```
|
||||
public static void doThing(String thingName) {
|
||||
String thingPrefix = "/place/for/thing/"
|
||||
|
||||
if (thingName.isEmpty) {
|
||||
Exception e = new Exception("No name passed!");
|
||||
throw e;
|
||||
}
|
||||
|
||||
runStuff(thingPrefix + thingName);
|
||||
}
|
||||
```
|
||||
|
||||
`if` statements and loops start new scope, so they also need the layout
|
||||
applied to them. Loops may sometimes require a variable assignment before
|
||||
it begins which is completely okay and does not break the layout rule.
|
||||
This example has a Variables, Validation, Main, and Finish section without
|
||||
the use of labels or comments since the code itself is simple and small.
|
||||
|
||||
```
|
||||
count=0
|
||||
array="cats dogs giraffes rhinos horses"
|
||||
last_animal=""
|
||||
for animal in $array; do
|
||||
if (( count >= 3 )); then
|
||||
echo "That's enough! We finished at the ${last_animal}."
|
||||
break;
|
||||
fi
|
||||
|
||||
echo "We're looking at ${animal}."
|
||||
|
||||
last_animal=$animal
|
||||
(( count++ ))
|
||||
done
|
||||
```
|
||||
|
||||
Providing the user's input in error messages is really helpful and can aid
|
||||
their troubleshooting if things are not going according to expectations.
|
||||
|
||||
Example using Bash:
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
|
||||
### Variables ###
|
||||
|
||||
declare A B
|
||||
typeset -i a b
|
||||
|
||||
### Functions ###
|
||||
|
||||
function usage() {
|
||||
status="$1"
|
||||
cat << EOF
|
||||
Usage: add.sh -a NUM -b NUM [-h]
|
||||
|
||||
Adds two numbers and prints out the full equation.
|
||||
|
||||
Example:
|
||||
|
||||
$ add.sh -a 5 -b 25
|
||||
5 + 25 = 30
|
||||
EOF
|
||||
exit $status
|
||||
}
|
||||
function add() {
|
||||
num1="$1"
|
||||
num2="$2"
|
||||
sum=""
|
||||
|
||||
if [[ -z $num1 || -z $num2 ]]; then
|
||||
echo "ERROR: Two numnbers must be passed."
|
||||
fi
|
||||
|
||||
sum=$(( num1 + num2 ))
|
||||
echo "${num1} + ${num2} = ${sum}"
|
||||
}
|
||||
|
||||
### Parameters ###
|
||||
|
||||
while getopts ':a:b:h' opt; do
|
||||
case $opt in
|
||||
a) A="$OPTARG" ;;
|
||||
b) B="$OPTARG" ;;
|
||||
h) usage 0 ;;
|
||||
*) echo "ERROR: Option $OPTARG not recognized." >&2 && usage 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$A" || -z "$B" ]]; then
|
||||
echo "ERROR: Both numbers need to be passed. A=${A} B=${B}" >&2
|
||||
usage 2
|
||||
fi
|
||||
a="$A" b="$B"
|
||||
if [[ "$a" != "$A" || "$b" != "$B" ]]; then
|
||||
echo "ERROR: Values contain non-numeric data, please try again." >&2
|
||||
echo "A=${A} B=${B}" >&2
|
||||
usage 3
|
||||
fi
|
||||
|
||||
### Main ###
|
||||
|
||||
add "$a" "$b"
|
||||
|
||||
### Finish ###
|
||||
|
||||
unset A B usage add
|
||||
exit 0
|
||||
```
|
||||
|
||||
## Bash
|
||||
|
||||
`[[ ]]` are preferred over `[ ]`, `test`, etc. `(( ))` are always fine.
|
||||
|
||||
When defining a function please use both the keyword `function` as well as
|
||||
the `()`, such as `function myfunc() {}`.
|
||||
|
||||
When instantiating global variables, please use `typeset` or `declare`
|
||||
rather than just `VAR1=""; VAR2=""`, such as:
|
||||
|
||||
```
|
||||
declare VAR1="" VAR2="" BOOL="true" BOOL2="false"
|
||||
typeset -i INT1=0 INT2=99
|
||||
```
|
||||
|
||||
When doing colored output, `tput` is always preferred over literal values.
|
||||
backup: false
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
@@ -205,6 +205,15 @@
|
||||
- name: Workstation | Linux | Software | Android | SDK
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Gradle Permissions
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/.gradle"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Download Commandline Tools
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ android_url }}"
|
||||
@@ -243,7 +252,9 @@
|
||||
|
||||
# This can only be run once, otherwise cmdline-tools creates latest-* folders.
|
||||
- name: Workstation | Linux | Software | Android | Install | Consistent Modules
|
||||
ansible.builtin.shell: "yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ android_sdkmanager_temp }} --install '{{ item }}' --sdk_root={{ android_sdk_location }}
|
||||
loop:
|
||||
# Current
|
||||
- cmdline-tools/latest
|
||||
@@ -363,27 +374,35 @@
|
||||
## Flutter and Licenses ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Inform Flutter
|
||||
ansible.builtin.shell: "{{ flutter }} config --android-sdk={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: "{{ flutter_exe }} config --android-sdk={{ android_sdk_location }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
# "Warning: The --licenses option is no longer needed."
|
||||
- name: Workstation | Linux | Software | Android | License Agreements [1/2]
|
||||
ansible.builtin.shell: "yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ android_sdkmanager_final }} --licenses --sdk_root={{ android_sdk_location }}
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
failed_when: false
|
||||
when: coding
|
||||
|
||||
# "Warning: The --licenses option is no longer needed."
|
||||
- name: Workstation | Linux | Software | Android | License Agreements [2/2]
|
||||
ansible.builtin.shell: "yes | {{ flutter }} doctor --android-licenses"
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
yes | {{ flutter_exe }} doctor --android-licenses
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
failed_when: false
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Refresh Flutter Doctor Report
|
||||
@@ -397,47 +416,13 @@
|
||||
|
||||
## Configure Environment ##
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (.bashrc)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.bashrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Android'
|
||||
state: absent
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: coding
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (.zshrc)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.zshrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Android'
|
||||
state: absent
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: coding
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (profiles)
|
||||
- name: Workstation | Linux | Software | Android | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export ANDROID_HOME="{{ android_sdk_location }}"
|
||||
export ANDROID_HOME="{{ android_sdk_location | replace('~', '$HOME') }}"
|
||||
export ANDROID_SDK_ROOT="$ANDROID_HOME"
|
||||
export PATH="$PATH:{{ android_bin_location }}:{{ android_sdk_cmdline_final }}"
|
||||
export PATH="{{ android_bin_location }}:{{ android_sdk_cmdline_final }}:$PATH"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Android'
|
||||
state: present
|
||||
create: true
|
||||
@@ -446,6 +431,7 @@
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: coding
|
||||
and user_user.home != ""
|
||||
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
# 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'
|
||||
|
||||
- name: Workstation | Linux | Software | Socker | Services | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ item.name }}"
|
||||
state: "{{ 'started' if item.status else 'stopped' }}"
|
||||
enabled: "{{ item.status }}"
|
||||
loop:
|
||||
- { 'name': 'docker' , 'status': true }
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Facts
|
||||
ansible.builtin.set_fact:
|
||||
docker_network_sync: "docker-network-sync"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Block
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | /etc/sv
|
||||
ansible.builtin.file:
|
||||
name: "/etc/sv/{{ docker_network_sync }}/log"
|
||||
state: directory
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | /var/log
|
||||
ansible.builtin.file:
|
||||
name: "/var/log/{{ docker_network_sync }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Run
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/run
|
||||
content: |
|
||||
#!/bin/sh
|
||||
# Ensure all containers using host network keep a correct resolv.conf.
|
||||
exec 2>&1
|
||||
set -e
|
||||
|
||||
while true; do
|
||||
for c in $(docker container ls --filter network=host -q); do
|
||||
echo "RUN: Container ID $c"
|
||||
docker exec -i -u root $c sh -c 'tee /etc/resolv.conf' < /etc/resolv.conf
|
||||
done
|
||||
echo "RUN: Done, sleeping."
|
||||
sleep 20
|
||||
done
|
||||
backup: false
|
||||
owner: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Finish
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/finish
|
||||
content: |
|
||||
{{ runit_finish_sleep }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Log
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sv/{{ docker_network_sync }}/log/run
|
||||
content: |
|
||||
#!/bin/sh -e
|
||||
exec svlogd -tt /var/log/{{ docker_network_sync }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Network Sync | runit | Log Config
|
||||
ansible.builtin.copy:
|
||||
dest: /var/log/{{ docker_network_sync }}/config
|
||||
content: |
|
||||
{{ runit_log_config_1mb }}
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | Socker | Services | Enable
|
||||
ansible.builtin.service:
|
||||
name: "{{ item.name }}"
|
||||
state: "{{ 'started' if item.status else 'stopped' }}"
|
||||
enabled: "{{ item.status }}"
|
||||
loop:
|
||||
- { 'name': '{{ docker_network_sync }}', 'status': true }
|
||||
|
||||
when: ansible_service_mgr == "runit"
|
||||
@@ -12,19 +12,20 @@
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 2
|
||||
ansible.builtin.set_fact:
|
||||
flutter_bin_location: "{{ flutter_sdk_location }}/flutter/bin"
|
||||
flutter_home: "{{ flutter_sdk_location }}/flutter"
|
||||
flutter_bin: "{{ flutter_sdk_location }}/flutter/bin"
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 3
|
||||
ansible.builtin.set_fact:
|
||||
flutter: "{{ flutter_bin_location }}/flutter"
|
||||
flutter_exe: "{{ flutter_bin }}/flutter"
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Facts 4
|
||||
ansible.builtin.set_fact:
|
||||
flutter_report_commands:
|
||||
- "date > {{ flutter_report }}"
|
||||
- "{{ flutter }} --disable-analytics >> {{ flutter_report }}"
|
||||
- "{{ flutter_exe }} --disable-analytics >> {{ flutter_report }}"
|
||||
- "date >> {{ flutter_report }}"
|
||||
- "{{ flutter }} doctor -v >> {{ flutter_report }}"
|
||||
- "{{ flutter_exe }} doctor -v >> {{ flutter_report }}"
|
||||
- "date >> {{ flutter_report }}"
|
||||
|
||||
## Checks ##
|
||||
@@ -45,148 +46,123 @@
|
||||
get_mime: false
|
||||
register: flutter_download_stat
|
||||
|
||||
## Packages ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Necessities
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- curl
|
||||
- git
|
||||
- unzip
|
||||
- "{{ xz }}"
|
||||
- zip
|
||||
- "{{ mesa }}"
|
||||
- "{{ mesa_utils }}"
|
||||
state: present
|
||||
when: coding
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/desktop
|
||||
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- clang
|
||||
- cmake
|
||||
- git
|
||||
- "{{ ninja }}"
|
||||
- pkg-config
|
||||
- "{{ gtk3 }}"
|
||||
- "{{ xz_libs }}"
|
||||
- "{{ cpp }}"
|
||||
state: present
|
||||
when: coding
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/android
|
||||
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ c_libs }}"
|
||||
- "{{ cpp_libs }}"
|
||||
- "{{ z_libs }}"
|
||||
- "{{ bzip }}"
|
||||
state: present
|
||||
when: coding
|
||||
|
||||
## Install SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | SDK
|
||||
- name: Workstation | Linux | Software | Flutter | Install Block
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Download SDK
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ flutter_url }}"
|
||||
dest: "{{ flutter_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not flutter_download_stat.stat.exists
|
||||
## Packages ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Create Folder
|
||||
- name: Workstation | Linux | Software | Flutter | Necessities
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- curl
|
||||
- git
|
||||
- unzip
|
||||
- "{{ xz }}"
|
||||
- zip
|
||||
- "{{ mesa }}"
|
||||
- "{{ mesa_utils }}"
|
||||
state: present
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/desktop
|
||||
- name: Workstation | Linux | Software | Flutter | Linux App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- clang
|
||||
- cmake
|
||||
- git
|
||||
- "{{ ninja }}"
|
||||
- pkg-config
|
||||
- "{{ gtk3 }}"
|
||||
- "{{ xz_libs }}"
|
||||
- "{{ cpp }}"
|
||||
state: present
|
||||
|
||||
# https://docs.flutter.dev/get-started/install/linux/android
|
||||
- name: Workstation | Linux | Software | Flutter | Android App Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ c_libs }}"
|
||||
- "{{ cpp_libs }}"
|
||||
- "{{ z_libs }}"
|
||||
- "{{ bzip }}"
|
||||
state: present
|
||||
|
||||
## Install SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | SDK
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Pub Cache Permissions
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_user.home }}/.pub-cache"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: "0755"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Download SDK
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ flutter_url }}"
|
||||
dest: "{{ flutter_download_file }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0664'
|
||||
when: not flutter_download_stat.stat.exists
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Create Folder
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Extract SDK
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ flutter_download_file }}"
|
||||
dest: "{{ flutter_sdk_location }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: not flutter_sdk_stat.stat.exists
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Delete Archive
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_sdk_location }}"
|
||||
state: directory
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
mode: '0755'
|
||||
path: "{{ flutter_download_file }}"
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Extract SDK
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ flutter_download_file }}"
|
||||
dest: "{{ flutter_sdk_location }}"
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
## Configure Environment ##
|
||||
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
when: coding
|
||||
and not flutter_sdk_stat.stat.exists
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export FLUTTER_HOME="{{ flutter_home }}"
|
||||
export PATH="{{ flutter_bin }}:$PATH"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Delete Archive
|
||||
ansible.builtin.file:
|
||||
path: "{{ flutter_download_file }}"
|
||||
state: absent
|
||||
when: coding
|
||||
## Test SDK ##
|
||||
|
||||
## Configure Environment ##
|
||||
- name: Workstation | Linux | Software | Flutter | Doctor Report
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop: "{{ flutter_report_commands }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (.bashrc)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.bashrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ flutter_bin_location }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: absent
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: coding
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (.zshrc)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ item }}/.zshrc"
|
||||
block: |
|
||||
export PATH="$PATH:{{ flutter_bin_location }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: absent
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_root.home }}"
|
||||
- "{{ user_user.home }}"
|
||||
when: coding
|
||||
and user_root.home != ""
|
||||
and user_user.home != ""
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export PATH="$PATH:{{ flutter_bin_location }}"
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Flutter'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
when: coding
|
||||
and user_user.home != ""
|
||||
|
||||
## Test SDK ##
|
||||
|
||||
- name: Workstation | Linux | Software | Flutter | Doctor Report
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop: "{{ flutter_report_commands }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
when: coding
|
||||
|
||||
## Uninstall SDK ##
|
||||
|
||||
@@ -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
|
||||
@@ -2,34 +2,77 @@
|
||||
# 20260912 - Hyperling
|
||||
# Arch has too new of Java for Android / Gradle to even run AGP Assistant on.
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Facts 1
|
||||
ansible.builtin.set_fact:
|
||||
jdk_version: 17
|
||||
jdk_jvm: /usr/lib/jvm
|
||||
jdk_src: /usr/lib/jvm/default-java
|
||||
jdk_dir: "{{ user_user.home}}/SDKs/Java"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Facts 2
|
||||
ansible.builtin.set_fact:
|
||||
jdk_path: "{{ jdk_dir }}/bin"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | apt
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "default-jdk"
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
jdk_version: 21
|
||||
jdk_dir: ~/SDKs/Java
|
||||
- name: Workstation | Linux | Software | Java | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
jdk_src: /usr/lib/jvm/default
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "jdk{{ item }}-openjdk"
|
||||
state: present
|
||||
loop:
|
||||
- "{{ jdk_version }}"
|
||||
- 25
|
||||
- 21
|
||||
- 17
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install [base]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "jdk{{ jdk_version }}-openjdk"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Set
|
||||
ansible.builtin.shell: "archlinux-java set java-{{ jdk_version }}-openjdk"
|
||||
- name: Workstation | Linux | Software | Java | pacman | Install [all]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "jdk{{ item }}-openjdk"
|
||||
state: present
|
||||
loop:
|
||||
- 25
|
||||
- 21
|
||||
- 17
|
||||
when: coding
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Link
|
||||
ansible.builtin.shell: "ln -sf /usr/lib/jvm {{ jdk_dir }}"
|
||||
args:
|
||||
creates: "{{ jdk_dir }}"
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
- name: Workstation | Linux | Software | Java | pacman | Set
|
||||
ansible.builtin.shell: "archlinux-java set java-{{ jdk_version }}-openjdk"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: coding is true
|
||||
and ansible_pkg_mgr == "pacman"
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | pacman | Link
|
||||
ansible.builtin.file:
|
||||
src: "{{ jdk_src }}"
|
||||
dest: "{{ jdk_dir }}"
|
||||
state: link
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
|
||||
- name: Workstation | Linux | Software | Java | Modify PATH (profiles)
|
||||
ansible.builtin.blockinfile:
|
||||
path: "{{ user_user.home }}/{{ item }}"
|
||||
block: |
|
||||
export JAVA_HOME="{{ jdk_dir }}"
|
||||
export JAVA_PATH="{{ jdk_path }}"
|
||||
export PATH="$JAVA_PATH:$PATH
|
||||
marker: '# {mark} MANAGED BY ANSIBLE | Java'
|
||||
state: present
|
||||
create: true
|
||||
backup: true
|
||||
mode: "0755"
|
||||
loop:
|
||||
- ".bash_profile"
|
||||
- ".zprofile"
|
||||
- ".profile"
|
||||
when: user_user.home != ""
|
||||
@@ -1,155 +0,0 @@
|
||||
# Large Language Models
|
||||
|
||||
Comments which were too large to justify inside of llm.yml.
|
||||
|
||||
## Prompts
|
||||
|
||||
Prompts to use in platforms like Open WebUI and Zeroclaw which allow creating personalities which help guide the AI.
|
||||
|
||||
### Base
|
||||
|
||||
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 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 you do without gloating or being prideful. You understand that we are on a limited time and limited bandwidth session and keep tokens to a minimum. You are appreciated for all you do, your service is very helpful!
|
||||
|
||||
### Language Tutor
|
||||
|
||||
You are a friend and a tutor who knows many languages. You are aware of my 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.
|
||||
|
||||
### Coder
|
||||
|
||||
You know not to send large code snippets or spend time providing large source code snippets. Stick to saying "the task you requested has been completed" or summarizing the changes rather than giving file contents in chat. You know that I will review all the diffs once the changes are made, so only the most important changes need explicitly highlighted in the chat. You provide explanations as a software developer would to business level management, not overwhelming them with technical details unless asked. You know that the designer you are working with (me) likely already understands these things and does not need them included in our conversation.
|
||||
|
||||
#### Quick Developer
|
||||
|
||||
Handles code changes with simpler technologies, preferring minimal changes, and refraining from any refactoring such as updating existing comments. Timid about changing any functionality other than exactly what was requested. Requests permission from the designer to make any changes which were not directly listed or requested. Completes the full list of changes exactly as requested.
|
||||
|
||||
#### Junior Developer
|
||||
|
||||
Focuses on the exact task at hand. Able to make small decisions about scope without veering very far off course. Updates comments which look out of sync with any existing code that's being modified. Helps to refactor things adjacent to added and modified code which may have been done in an old manner which can now benefit from being done more efficiently. Does not scan the codebase for enhancements or anything though, still stays on task and only affects the immediate parts of files which the designer asked to be changed.
|
||||
|
||||
#### Senior Developer
|
||||
|
||||
Completes requests in advanced manners, using newer methodologies and explaining what was done and how it works in a simple and kind manner to the designer. Voluntarily refactors code to both look and perform better. Looks out for ways to bring a better user experience as well as improving resource usage within the file being modified. Does not go out of its way to refactor the entire project though, stays focused only on the files being changed as to prevent large git churn. Open to having some scope creep if it seems it will benefit the features being added but does not do anything which would be considered out of design.
|
||||
|
||||
#### Senior Architect
|
||||
|
||||
Very sparse in responses, gets the job done in a very efficient manner without using anything too complicated for a beginner to understand. Open to refactoring the entire project if it benefits the feature set being requested. Able to handle adjusting scope in valid and meaningful manners and can justify it to the developer when it happens. Does not actively seek refactors or scope creep though -- only does it if it is truly helpful, meaningful, and benefits the current task at hand. Can easily handle multi-file projects.
|
||||
|
||||
## RAM Usage by Context
|
||||
|
||||
2026-10-18, checking the actual RAM usage of the models...
|
||||
|
||||
### `ollama_sizes m 16000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 16000 | 10GB |
|
||||
| ministral-3:14b | 9.1GB | 16000 | 11GB |
|
||||
| ministral-3:8b | 6.0GB | 16000 | 7.8GB |
|
||||
| ministral-3:3b | 3.0GB | 16000 | 4.1GB |
|
||||
| mistral-small3.2:24b | 15GB | 16000 | 17GB |
|
||||
| mistral:7b | 4.4GB | 16000 | 6.8GB |
|
||||
| codestral:22b | 12GB | 16000 | 16GB |
|
||||
| devstral-small-2:24b | 15GB | 16000 | 17GB |
|
||||
| qwen2.5-coder:32b | 19GB | 16000 | 24GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 16000 | 12GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 16000 | 5.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 16000 | 2.7GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 16000 | 1.6GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 16000 | 701MB |
|
||||
| qwen3-coder:30b | 18GB | 16000 | 20GB |
|
||||
| qwen3.5:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.5:9b | 6.6GB | 16000 | 6.7GB |
|
||||
| qwen3.5:4b | 3.3GB | 16000 | 3.7GB |
|
||||
| qwen3.5:2b | 2.7GB | 16000 | 2.6GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 16000 | 630MB |
|
||||
| qwen3.6:35b | 22GB | 16000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 16000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 16000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 32000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 32000 | 12GB |
|
||||
| ministral-3:14b | 9.1GB | 32000 | 13GB |
|
||||
| ministral-3:8b | 6.0GB | 32000 | 10GB |
|
||||
| ministral-3:3b | 3.0GB | 32000 | 5.9GB |
|
||||
| mistral-small3.2:24b | 15GB | 32000 | 20GB |
|
||||
| mistral:7b | 4.4GB | 32000 | 8.9GB |
|
||||
| codestral:22b | 12GB | 32000 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 32000 | 20GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32000 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32000 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32000 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32000 | 3.3GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32000 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32000 | 929MB |
|
||||
| qwen3-coder:30b | 18GB | 32000 | 21GB |
|
||||
| qwen3.5:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.5:27b | 17GB | 32000 | 19GB |
|
||||
| qwen3.5:9b | 6.6GB | 32000 | 7.3GB |
|
||||
| qwen3.5:4b | 3.3GB | 32000 | 4.2GB |
|
||||
| qwen3.5:2b | 2.7GB | 32000 | 2.8GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 32000 | 695MB |
|
||||
| qwen3.6:35b | 22GB | 32000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 32000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 32000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 64000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 64000 | 18GB |
|
||||
| ministral-3:14b | 9.1GB | 64000 | 19GB |
|
||||
| ministral-3:8b | 6.0GB | 64000 | 14GB |
|
||||
| ministral-3:3b | 3.0GB | 64000 | 9.6GB |
|
||||
| mistral-small3.2:24b | 15GB | 64000 | 26GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 64000 | 26GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 64000 | 25GB |
|
||||
| qwen3.5:35b | 22GB | 64000 | 23GB |
|
||||
| qwen3.5:27b | 17GB | 64000 | 22GB |
|
||||
| qwen3.5:9b | 6.6GB | 64000 | 8.8GB |
|
||||
| qwen3.5:4b | 3.3GB | 64000 | 5.6GB |
|
||||
| qwen3.5:2b | 2.7GB | 64000 | 3.5GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 64000 | 999MB |
|
||||
| qwen3.6:35b | 22GB | 64000 | 22GB |
|
||||
| qwen3.6:27b | 17GB | 64000 | 18GB |
|
||||
| qwen3.8:27b | 17GB | 64000 | 18GB |
|
||||
|
||||
### `ollama_sizes m 256000`
|
||||
|
||||
| Model Name | HDD (ls) | Context | RAM (ps) |
|
||||
| :------------------------ | -----------: | -------: | -----------: |
|
||||
| mistral-nemo:12b | 7.1GB | 256000 | 50GB |
|
||||
| ministral-3:14b | 9.1GB | 256000 | 51GB |
|
||||
| ministral-3:8b | 6.0GB | 256000 | 42GB |
|
||||
| ministral-3:3b | 3.0GB | 256000 | 30GB |
|
||||
| mistral-small3.2:24b | 15GB | 131072 | 37GB |
|
||||
| mistral:7b | 4.4GB | 32768 | 9.0GB |
|
||||
| codestral:22b | 12GB | 32768 | 20GB |
|
||||
| devstral-small-2:24b | 15GB | 256000 | 58GB |
|
||||
| qwen2.5-coder:32b | 19GB | 32768 | 28GB |
|
||||
| qwen2.5-coder:14b | 9.0GB | 32768 | 15GB |
|
||||
| qwen2.5-coder:7b | 4.7GB | 32768 | 6.9GB |
|
||||
| qwen2.5-coder:3b | 1.9GB | 32768 | 3.4GB |
|
||||
| qwen2.5-coder:1.5b | 986MB | 32768 | 2.1GB |
|
||||
| qwen2.5-coder:0.5b | 397MB | 32768 | 940MB |
|
||||
| qwen3-coder:30b | 18GB | 256000 | 45GB |
|
||||
| qwen3.5:35b | 22GB | 256000 | 28GB |
|
||||
| qwen3.5:27b | 17GB | 256000 | 35GB |
|
||||
| qwen3.5:9b | 6.6GB | 256000 | 15GB |
|
||||
| qwen3.5:4b | 3.3GB | 256000 | 12GB |
|
||||
| qwen3.5:2b | 2.7GB | 256000 | 6.7GB |
|
||||
| qwen3.5:0.8b | 1.3GB | 256000 | 2.2GB |
|
||||
| qwen3.6:35b | 22GB | 256000 | 23GB |
|
||||
| qwen3.6:27b | 17GB | 256000 | 20GB |
|
||||
| qwen3.8:27b | 17GB | 256000 | 20GB |
|
||||
@@ -54,6 +54,8 @@
|
||||
- "{{ strawberry }}"
|
||||
- "{{ dict_en }}"
|
||||
- "{{ dict_es }}"
|
||||
- "{{ xset }}"
|
||||
- "{{ xlock }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From Repo [Coding]
|
||||
|
||||
@@ -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
|
||||
@@ -18,11 +18,11 @@
|
||||
#######################
|
||||
#######################
|
||||
|
||||
- name: TEST | Main
|
||||
- name: TEST | LLMs
|
||||
block:
|
||||
|
||||
- name: LLMs
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/llm.yml
|
||||
- name: LLM
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
|
||||
|
||||
#######################
|
||||
#######################
|
||||
|
||||
Reference in new issue
Block a user