diff --git a/dot_bashrc b/dot_bashrc index e857dee..f15bdfa 100644 --- a/dot_bashrc +++ b/dot_bashrc @@ -12,7 +12,7 @@ fi ## Functions # Yazi -function ya() { +function y() { local tmp="$(mktemp -t "yazi-cwd.XXXXX")" yazi "$@" --cwd-file="$tmp" if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then @@ -21,6 +21,11 @@ function ya() { rm -f -- "$tmp" } +# Chezmoi apply changes from current chezmoi DIR +function ca() { + chezmoi apply "$(chezmoi target-path "${1:-.}")" +} + ## Aliases # Replace ls with eza if [ -f /usr/bin/eza ]; then diff --git a/dot_config/fish/conf.d/executable_fish_frozen_theme.fish b/dot_config/fish/conf.d/executable_fish_frozen_theme.fish new file mode 100644 index 0000000..0caf65e --- /dev/null +++ b/dot_config/fish/conf.d/executable_fish_frozen_theme.fish @@ -0,0 +1,37 @@ +# This file was created by fish when upgrading to version 4.3, to migrate +# theme variables from universal to global scope. +# Don't edit this file, as it will be written by the web-config tool (`fish_config`). +# To customize your theme, delete this file and see +# help interactive#syntax-highlighting +# or +# man fish-interactive | less +/^SYNTAX.HIGHLIGHTING +# for appropriate commands to add to ~/.config/fish/config.fish instead. +# See also the release notes for fish 4.3.0 (run `help relnotes`). + +set --global fish_color_autosuggestion brblack +set --global fish_color_cancel -r +set --global fish_color_command blue +set --global fish_color_comment red +set --global fish_color_cwd green +set --global fish_color_cwd_root red +set --global fish_color_end green +set --global fish_color_error brred +set --global fish_color_escape brcyan +set --global fish_color_history_current --bold +set --global fish_color_host normal +set --global fish_color_host_remote yellow +set --global fish_color_normal normal +set --global fish_color_operator brcyan +set --global fish_color_param cyan +set --global fish_color_quote yellow +set --global fish_color_redirection cyan --bold +set --global fish_color_search_match white --background=brblack +set --global fish_color_selection white --bold --background=brblack +set --global fish_color_status red +set --global fish_color_user brgreen +set --global fish_color_valid_path --underline +set --global fish_pager_color_completion normal +set --global fish_pager_color_description yellow -i +set --global fish_pager_color_prefix normal --bold --underline +set --global fish_pager_color_progress brwhite --background=cyan +set --global fish_pager_color_selected_background -r diff --git a/dot_config/fish/config.fish b/dot_config/fish/config.fish index 709bfbf..faac67a 100644 --- a/dot_config/fish/config.fish +++ b/dot_config/fish/config.fish @@ -134,6 +134,16 @@ function w2o end end +# Chezmoi apply changes from current chezmoi DIR +function ca + set -l path "." + if test (count $argv) -gt 0 + set path $argv[1] + end + + chezmoi apply (chezmoi target-path $path) +end + ## Aliases # Replace ls with eza if type -q eza diff --git a/dot_config/fish/private_fish_variables b/dot_config/fish/private_fish_variables new file mode 100644 index 0000000..49d4a24 --- /dev/null +++ b/dot_config/fish/private_fish_variables @@ -0,0 +1,30 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR fish_color_autosuggestion:brblack +SETUVAR fish_color_cancel:\x2dr +SETUVAR fish_color_command:blue +SETUVAR fish_color_comment:red +SETUVAR fish_color_cwd:green +SETUVAR fish_color_cwd_root:red +SETUVAR fish_color_end:green +SETUVAR fish_color_error:brred +SETUVAR fish_color_escape:brcyan +SETUVAR fish_color_history_current:\x2d\x2dbold +SETUVAR fish_color_host:normal +SETUVAR fish_color_host_remote:yellow +SETUVAR fish_color_normal:normal +SETUVAR fish_color_operator:brcyan +SETUVAR fish_color_param:cyan +SETUVAR fish_color_quote:yellow +SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold +SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_key_bindings:fish_default_key_bindings +SETUVAR fish_pager_color_completion:normal +SETUVAR fish_pager_color_description:yellow\x1e\x2di +SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline +SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan +SETUVAR fish_pager_color_selected_background:\x2dr diff --git a/dot_config/ghostty/config b/dot_config/ghostty/config index d3c19f5..8f0cad9 100644 --- a/dot_config/ghostty/config +++ b/dot_config/ghostty/config @@ -13,7 +13,7 @@ cursor-style = block cursor-style-blink = true # Scrollback -scrollback-limit = 512000 +scrollback-limit = 10485760 # Terminal features mouse-hide-while-typing = true @@ -39,6 +39,15 @@ keybind = ctrl+plus=increase_font_size:1 keybind = ctrl+minus=decrease_font_size:1 keybind = ctrl+zero=reset_font_size keybind = ctrl+enter=unbind +keybind = ctrl+1=goto_tab:1 +keybind = ctrl+2=goto_tab:2 +keybind = ctrl+3=goto_tab:3 +keybind = ctrl+4=goto_tab:4 +keybind = ctrl+5=goto_tab:5 +keybind = ctrl+6=goto_tab:6 +keybind = ctrl+7=goto_tab:7 +keybind = ctrl+8=goto_tab:8 +keybind = ctrl+9=goto_tab:9 # GTK gtk-titlebar = false diff --git a/dot_config/vesktop/state.json b/dot_config/vesktop/state.json new file mode 100644 index 0000000..6f07bbf --- /dev/null +++ b/dot_config/vesktop/state.json @@ -0,0 +1,11 @@ +{ + "firstLaunch": false, + "windowBounds": { + "x": 0, + "y": 0, + "width": 1920, + "height": 1080 + }, + "maximized": true, + "minimized": false +} \ No newline at end of file diff --git a/dot_config/xfce4/xfconf/private_xfce-perchannel-xml/thunar.xml b/dot_config/xfce4/xfconf/private_xfce-perchannel-xml/thunar.xml index 00a150c..eed3971 100644 --- a/dot_config/xfce4/xfconf/private_xfce-perchannel-xml/thunar.xml +++ b/dot_config/xfce4/xfconf/private_xfce-perchannel-xml/thunar.xml @@ -9,4 +9,7 @@ + + + diff --git a/dot_config/yazi/keymap.toml b/dot_config/yazi/keymap.toml index aeb675a..ece6fe2 100644 --- a/dot_config/yazi/keymap.toml +++ b/dot_config/yazi/keymap.toml @@ -1,8 +1,8 @@ # Bookmarks [[mgr.prepend_keymap]] on = [ "b", "g" ] -run = "cd ~/git/" -desc = "GIT" +run = "cd ~/Projects/" +desc = "GIT/Projects" [[mgr.prepend_keymap]] on = [ "b", "D" ] diff --git a/dot_local/state/DankMaterialShell/encrypted_session.json.age b/dot_local/state/DankMaterialShell/encrypted_session.json.age new file mode 100644 index 0000000..76e88c9 --- /dev/null +++ b/dot_local/state/DankMaterialShell/encrypted_session.json.age @@ -0,0 +1,92 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IDhJU0h4b2RT +eWQ0c2RRRXRmb0hpZWhMdUw0N0oxWVZOOFpVckc2UUsrQUpMNDMrYkZXRURQMUsz +TnN1SmEyZHRtQVNycHlPQlpOSVQyTFhvTk5RK0dlcHZvYXBoUXZ2R291TGxwTHYz +WUxSRDRzWUg0bjFnU1JoOFc0ZS9La3daekdCMjZ5UnpJNHJzKytGc2c3ZDZ2TWJk +cUhqS2kxSlI5WHpMMkUyYTBZaWpucGY5QVdoZjlhK0p5amRnWjlaOXNVVGdxOXF3 +NXUyV2lrMEpVaHRITlk4emNScVhkVkRRNSt3SzdSL2FlR0c5cHpZd3Rqd2dtZ014 +cWI3MkRlVjlDcWR4L3Rhb0pTSmR6eEFpSDBHRm1nUlV1TWFHWEg1SVpGQm1oZjFD +Mjh3ZkZjWTRQRXBzSWNNRTNsRmwvUkdBSDRPR3NCcWVmb0tZZi9iZnhtcEx6SWYw +NmRLKys2TjBvbGx6RDFBdXhOSE8xS05HdWc0dkx4OWIrV251elpsSnBwY25XVmdG +ZkFiZUtyVmdsUW4vb0YvZHp1OVRLYk5zalpsNzhUdGcwTE8wSEhXTG90RUtma3hO +REtQVnU2dEJHb1hRK2xkR0pvc2pTaThpRHBuTkdRSUxISHlqUkIvMmhPM25tOCtW +ME9RMzRYVDd2WFhNMGZ0UEJJU2N6RHJPRWhRUkxnTm1IQVVHK296ZlYyVXJ2SkNU +Q3BrQVBjbkpSaEFUY3FhaUxPY0xWdmtjc25WbmQvS1JuLzJNQjVsZktxSU1jcjBO +RFp0cklDMkVKVFlZVVpQaHhoaXc2NE8wd1Npa0luKzhXYmdZYXlkZWcrUllWZ083 +UkZwR1pZTWlxYW1MTXBuenVPSlRUNTIxeEVCR3BlYWlwdVRMRHpvNDVobGlyemVK +ZFFQdFVUdm41MTNJb0VpS3FIcTd0Z0g3dWk1TytjNmg1TTd2VjZSY2xuU3c0R2Ry +QjVaUlRwZmtWTVlOSUR3Z2FVRzV6VTRvdlJzWGs1dWdFUjVMRk5PVDJEdFJLSE5q +TWJQbVdYVWFVenhJclZ6MHB6Z05qNjB5UmZIa2NRRWJVekZ3ZlR3VW5QNm05SDJ4 +QThjSHk3bVJIMzJSL09nUHR1amFPWWUrNWpQeC9sb2pHM1V6VmxwdGdRc2tiZnph +Nzhla29nVkFuMHpjMEY5U04zbnlmVlRtdWkzNFhTbUdjU1VzQS93RlNSL25BaUhH +TzlzTXV1MHBBWmVTOTlSMG9JQmJnWUV2K3JxcHlNOWZNaW5OZkg1bHcxVWx6Tktt +blY0dnA3OHRPY0pnaWFkYmdvYWJWM3VlcEs4Uzk5cUhmelUwNThIaHdpWHJ0K29q +Z0FhRlRBcVlOQ3h4UktyNXdXYWwwNWdhcUVPMjVYYmtDTjhRck51djdmL3dISlRD +L1hhcXFHL29tMUpoRTk1dFBYRE43Y0FkTnFlSzNaVDBWd3Rib3ZzM3UwYktwNEFQ +bTNmYlU2U3BmSkdrUG51OHZWWGd4RktTL3VTTUlIZGVhU21qTDFRZ0wwWEoxMDAr +WHlTVmpPU0kxa0tDTnVzWVpJdTRPNWpqVjNpdjBuRjJpRFVvd2Y0TFNuRGcvdEE1 +ZndpdFRHWE50dTZZRGFWZGpPcVpuZnBkZ3UvRGlMeFpFREFteXJYUXNocmNlQ1FB +THNQMVBJWlRhRlhTL20yUXRIODc1Y2FhVytUTzhHVzFFMzVaZnplOGNETE1kMFhp +WEtqYUFVTGxScXY0U2hjOFhNT2Z4ODJYWWRSQVBUMm9EaTgrWHJlaGNEMzUzUkIy +VHk3Y1J4WTRpVjVIQUNXd3Mzdkw0ZnZrVFdud2w0S003clYvdE5KalZtbXhHUWt0 +MnM1dzg0dUZJOUtHZVhYaXlEajZLd243SHdUckxWWG9DVkNCR1dxOTVtMERoNkc2 +RUpPUGtPZzNmOXNyTlFjaEdZUXR4WitTWmNZWXEyMXlHU0RqMFBTRlBYTENjZwpR +aWwwc2pDdVBMUzRDMmk4eWw0RkJYY25VY2xhU1NPZmo5d0VXaVVFUFVnCi0tLSBK +cWhucWNYOVAyVmRBUmRrMVdaQjNPQUgxalpvWGFVeEhGSDVONDQ5K3A0CtEhoJd4 +5lRNK2OjRusSit0FZvv8I9ftruZwYf+13qOMQ7DlGJ/yNJgu+FfTW5HXZx++SL40 +p3VSEzHpRsiEzz6yxBQ6kLwGJiI2VuLkEfXiyX8GE9NOar/DKxAXJmQG0v5MYurj +Bsqx9oB2WEpPinsDFfsL6AW5kW1f8ROIgckpA/Ved0J99Qs/Sb63HwMwJqRrOkzm +4CP91hgOSywCcjgCt35rbpeD/pHqZaoYkzLBeY6Em5Ua6QsE2v8BLIYJiak+WZbm +K9KLvI/TK6Q7Fy/ZWmiWWf8j/QNJGLdKFAzli7Ypv7lEAF7zatISN0vY7YPmQbav +2lGhxlU87WGVdy36DwtICTMGW/ZYAqEjzv8yBAzIIboUXW1Iq9APQWmtSoa+mksY +CU3Uv9CQR4EyEVuXpOQEf2jAcM8XT4+/6A9cjh+W8pVwiXdGp40/bJN+ga1TspGF +vTuY4tkXsvPqrON88Ubx7nR1o0aKtLkobUBVazpMQhQulUHA8gWjdM/sod2JXLk3 +tl8hLh0C+T3X04UTy7NUmIn8szgg+FjcTLzVDdMGf64rTwvwMDmWwv7i7N4H5HRU +G7mR4RWsL4dtC6kHHiAE9coxEnbJod16qzcBDHzBFoM3UabvWIKmSy8/Xj9+EsZi +IbqEb05d29Y4HSJbBcv7IKNgo/oXkwbHznfAq90zsnTyztFwzFajUrlJoe6cVx1j +JORRNSvxap7c/xv+/8MTnGqmFyxBVlEoKCUndkFNBfmrP47yKLiyBwQt+BH355vI +ctadylBjbCVeuYMUQxo+HEewWqIY9LXtKLBU3MrVg2YgQLiuwGIihxSdYymx6PPL +JUd2Vu7YwBxQlVP9X1MZOrTl/ZkHKf+XJj8gb7GWpAMyRgYG4e1AhdwDTWvhF+p6 +kTKS96JenVSXv22jGLPmz3XYUM4XC0O8DLW6pusp+PiTS2Dd85do+/khT3MfTOSe +tsGF3XeKZUbvUC5vG12toADO1tttUIdvyYWpn+ImS4/62HtVPKdc4bke8Mk31LUi +GJMXxKMXcs6uBGmcxGojf0BMXfeNWsbpmFdxfBhQxLU+rtjV0V4dQBeiNpb9GPuX +rlbrSaI9Z6Dkwfpcwmyr5X0M27mCq2lz6dbRvmCBk0grQZ0wV4UuDjQelJHiBtvq +Jrz877EAmpim47bhXun8ha2DIOlggTPiUqDA0FOoqCs/1/vFUrtZqljDnI8/V1ww +jWCXLf4FezbZH5dEaaOE8Aw47SDzxfkg4WTRlTf/D79iCu/ARGDHAkkAA41Ls5J/ +a58IZ8P+XC08/rw2QWFKQBHlVL6PrwZGWk5qURWcGM9rY0osc+SLR7PEonSbVT8z +5n7yY6zVBC6v9N6QbAfTHM4BkuYsRb833UAEHBU/UKATuSJ5FHLfc3FuG8DTw0MM +/3c9OJacWjsYE1rhd6LNvCbrO5lizeT8tTpaf7nRn9zb3w1xzdpfyOr8sEJS7SlE +H2FB3dSsoRTWU5KnNfngAUKolnJ+fNYjwebh2DsAAp+uvPh1NGvAsJ396I6GO7ps +0BixHwyqE76B3fhw7TgEXi8Ic3y+ccNz6ks1LXzDhE9PIElQaO/PdYsbTT6uosCF +w3XzlM4Cfz7qo9MkoO3HbmkuxDr1vuZ5zpomwQNJSA0J1+w4V7R3B2ifTZ0Y90mu +yZWVMRRRNuoTFNAOtOM7g77DAcYHpWAxRZudx64ZWB364PSiff/2Cwtmwe7bf3KR +68X00VF02RtSEyesYFXIIKPewOSzvY8xfJREoo9Z3Pl8OCTQWy6eojZexHi6MLA7 +fUsnARHPLm6Oq1/PwKDYurTMJ3dSjb78GMXiaHJSo9m6W6QTjEYnFirrl3/E41Yi +9AXqqyM1vq8LjvB8BORnm/XEA1svGj7IoV0kaGu8YHQH20a++/2vwStgA3GBugEh +2TM1ji79Mo0LDsLde5M352atS7yVWqRLnVyA57grqvKWk2l9loKFADId7ti01+lC +vaA/wcKDE5ZckLtbxxvxKbrNxVska+I7lOFJ9VnyjtK4ReqMqqzorjLmJcx/z/vp +45aXQW1IT+t5vaWVRzpXwYFNuJFNGRqRaM+wlxFXLtLTBoVt6TjrPi1atSLiLzJj +tyvu97Xw8oVkvZTGFYXr6jBu4Wk8YSxjvPReWYNMvFJ7VAKqb3CzBuNakONH+zlR +m5ybVToPVAHsKxIu+uezqybMJk72pV8fXhJOfMWg5rFkYfJtt+/oVz9Q8exTaf4F +z5XRGPKCoA+irD25cTUhAz/4dUz0k7d1zXk/Baw3sHGthX7W1ZovO7LkRO2yqUqQ +TjyDFNWyr+GvA/YPDeLr6LQbBp46FbREbLcPGOvhyYZuWoM2wD8SEsPW2t2TDx9C +o+VSlsgEe8ESlDad3AIrWqgKo9Bsi54iFgMNo9DAs1LUGzxwLnJQQnD65AfHuqyF +cTHhkSDTAIm3wRIHlvPhUirIC37XAD28ELioYrB/btYAjpYGQ9508IZJ6TRoRG9n +5osGO7605yznzdHiGcO9V9Suq7zhc1dUNZkkjwJHHOnMnBZp5ngfSFOmymZDs6Mb +cMQCrer/cswfmmLXL5kY1stUf0IZzpBd6wgFg0dK9f9YA1BAi1PuZmnw2r9aREX5 +PeHDnN8f32RQau0zmSlbJWlGJ8Gk94DZaJ7/pC5187lMrrgK5IKRBOEhGZz58aOV +CBGpPffcT3sSG8+kkWglRQ5GCvvWlwHq41s8FDq9MJn4UA6kazrZps1bl2qe9aU4 ++WYmy/q17CkoHuQiek9HZjDfapOIn9L9ai8ZCBbFa9tSWQ5CZsaJSckfUXO+GiOk +V9CbSa8kyXw8YTMdM5zhQ2o5yyAORxdWn7Bxox8VvhzlFxVIF8cTkFX1Vxqr684E +1lWOHx+cSWcnjW5hf2W5D4xf/Jz7ETROAALBiJpJdBVIrRV640De0dfbVb1+ekgS +YTFfcOUZLuGELryxBQzGcV+qUJVPeLRlmGMJWfCrmflwa8vYbFuO6jdgmHx7oGrN +zJ+SlrA2qOYcjdR0VsYqtV75VxPIS7Iasr0D46B3QUfyWPRBjYpli21056u9a3Wh +RD7VosnyM7AmvQkLL14aA8Kd7ROqjyo11z9wlOMvb1JkgOqM15KqHVjq4UlURYF4 +hNoHtJs4NGwn2ytEKHmWGXjl8Trk68Gv8FvncvmRicLxRiMNR9GGP6UkxyL6DsRz +hhQybLWo8zoVBjXBB0Snr5tqY4XU+mAiSgYkAIIBlWZ2lCVqtirNkIuryUTwBaxE +XlG8HsRbuAnfCTIuARnNqViaiVpK80HYoMoYkmDpmLThkIk+OK3JVR6ip3WtbYDB +E5rQbX40/7t4y7kxVNxy32+rAl5CGB5L04gXCdh4HJnu1jNxApOP1yhnc5plmUmu +t/QHm9/5+zhKN4TuEm49UJsINRnX/feNblLpiABopuLmnzBcscbVYZtCYEdgevPu +zlI5X2IMATRHsI3Fupf/Y2PbSNylVg+ke0HgXQuQW8CYfAopVIgC6K2pcOXt2AwV +q1by +-----END AGE ENCRYPTED FILE----- diff --git a/run_once_05-system-setup.sh.tmpl b/run_once_05-system-setup.sh.tmpl new file mode 100755 index 0000000..3ade099 --- /dev/null +++ b/run_once_05-system-setup.sh.tmpl @@ -0,0 +1,31 @@ +#!/bin/bash +# run_once_05-system-setup.sh +# Early system-level configuration that must run before package installs. + +set -euo pipefail + +SYS="{{ .system | default "desktop" }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" +SRC="{{ .chezmoi.sourceDir }}" +echo ">>> [system-setup] distro=$DISTRO_ID, system=$SYS, source=$SRC" + +case "$DISTRO_ID" in + arch) + echo ">>> [system-setup] applying pacman.conf" + sudo install -m644 "$SRC/assets/pacman.conf" /etc/pacman.conf + + echo ">>> [system-setup] tuning makepkg.conf" + sudo sed -i 's/^#MAKEFLAGS=/MAKEFLAGS="-j'"$(nproc)"'"/' /etc/makepkg.conf + ;; + + ubuntu) + echo ">>> [system-setup] ubuntu: no early system setup required" + ;; + + *) + echo ">>> [system-setup] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [system-setup] done" diff --git a/run_once_10-install-base.sh b/run_once_10-install-base.sh.tmpl similarity index 75% rename from run_once_10-install-base.sh rename to run_once_10-install-base.sh.tmpl index 24f7d78..f20aa8d 100755 --- a/run_once_10-install-base.sh +++ b/run_once_10-install-base.sh.tmpl @@ -4,8 +4,8 @@ set -euo pipefail -SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" -DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" +SYS="{{ .system | default "desktop" }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" case "$DISTRO_ID" in arch) @@ -14,12 +14,15 @@ case "$DISTRO_ID" in networkmanager-openvpn wireguard-tools base-devel \ inotify-tools libqalculate cifs-utils reflector os-prober ntfs-3g \ openssh upower expac unzip less curl wget gawk zip tar \ - btop fastfetch yazi eza bat fzf fd jq go npm python-pipx + btop fastfetch yazi eza bat fzf fd jq go npm python-pipx \ + fish zoxide starship sshfs man-db man-pages p7zip ripgrep resvg \ + lazygit exiftool if [ "$SYS" != "server" ]; then sudo pacman -Syu --noconfirm --needed \ dbeaver mariadb \ - jdk-openjdk maven rustup + jdk-openjdk maven rustup \ + dotnet-sdk docker docker-compose rustup default stable >/dev/null 2>&1 || true fi @@ -41,7 +44,9 @@ case "$DISTRO_ID" in sudo apt-get install -y \ network-manager openvpn wireguard-tools inotify-tools libqalculate \ cifs-utils os-prober ntfs-3g openssh upower unzip less curl wget \ - gawk zip tar fzf fd-find jq + gawk zip tar fzf fd-find jq \ + fish sshfs man-db manpages p7zip-full ripgrep \ + libimage-exiftool-perl tesseract-ocr tesseract-ocr-eng # fdfind → fd compatibility symlink # if command -v fdfind >/dev/null 2>&1 && ! command -v fd >/dev/null 2>&1; then @@ -50,7 +55,8 @@ case "$DISTRO_ID" in if [ "$SYS" != "server" ]; then sudo apt-get install -y \ - openjdk-17-jdk maven rustup npm golang-go + openjdk-17-jdk maven rustup npm golang-go \ + dotnet-sdk-8.0 docker-compose rustup default stable >/dev/null 2>&1 || true fi ;; diff --git a/run_once_20-install-desktop.sh b/run_once_20-install-desktop.sh.tmpl similarity index 73% rename from run_once_20-install-desktop.sh rename to run_once_20-install-desktop.sh.tmpl index 8881161..74c31ab 100755 --- a/run_once_20-install-desktop.sh +++ b/run_once_20-install-desktop.sh.tmpl @@ -4,8 +4,8 @@ set -euo pipefail -SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" -DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" +SYS="{{ .system | default "desktop" }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" if [ "$SYS" = "server" ]; then echo ">>> [gui] system=server, skipping" @@ -26,23 +26,29 @@ case "$DISTRO_ID" in cups cups-pdf cups-pk-helper \ qt5ct qt6ct \ papirus-icon-theme breeze-cursors adw-gtk-theme \ - brightnessctl playerctl libnotify mediainfo \ + ddcutil playerctl libnotify mediainfo \ fprintd kimageformats \ + kdeconnect loupe dosfstools gnome-disk-utility \ + cava guvcview tesseract tesseract-data-eng \ cliphist wl-clipboard tesseract zbar imagemagick img2pdf \ - polkit-kde-agent xdg-desktop-portal-hyprland gnome-keyring \ + xdg-desktop-portal-hyprland gnome-keyring \ hyprland greetd ghostty # Dank Shell - sed workaround to pass args to installer sudo -v && curl -fsSL https://install.danklinux.com | sed 's#\./installer$#./installer "$@"#' | sh -s -- -c hyprland -t ghostty --include-deps dms-greeter,danksearch,dankcalendar -y # Firefox theming pipx install pywalfox - pywalfox install + ~/.local/bin/pywalfox install + mkdir -p ~/.cache/wal + touch ~/.cache/wal/dank-pywalfox.json ln -sf ~/.cache/wal/dank-pywalfox.json ~/.cache/wal/colors.json ;; ubuntu) echo ">>> [gui] ubuntu, system=$SYS" - echo ">>> [gui] ubuntu, no GUI packages" + sudo apt-get install -y \ + kdeconnect dosfstools gnome-disk-utility \ + cava ddcutil guvcview ;; *) diff --git a/run_once_30-install-power-mgmt.sh b/run_once_30-install-power-mgmt.sh deleted file mode 100755 index b118e94..0000000 --- a/run_once_30-install-power-mgmt.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# run_once_30-install-power-mgmt.sh -# Laptop-only: power management stack. Skipped on desktop/server. - -set -euo pipefail - -SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" -DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" - -if [ "$SYS" != "laptop" ]; then - echo ">>> [power-mgmt] system=$SYS, skipping (not a laptop)" - exit 0 -fi - -case "$DISTRO_ID" in - arch) - echo ">>> [power-mgmt] arch" - sudo pacman -Syu --noconfirm --needed tlp auto-cpufreq power-profiles-daemon - sudo systemctl enable tlp - sudo systemctl enable auto-cpufreq - sudo systemctl enable power-profiles-daemon - ;; - - ubuntu) - echo ">>> [power-mgmt] ubuntu" - - sudo apt-get install -y tlp tlp-rdw power-profiles-daemon - sudo systemctl enable tlp - # tlp and power-profiles-daemon conflict on most hardware — mask the latter - sudo systemctl mask power-profiles-daemon || true - ;; - - *) - echo ">>> [power-mgmt] unsupported distro: ${DISTRO_ID:-unknown}, skipping" - exit 0 - ;; -esac - -echo ">>> [power-mgmt] done" diff --git a/run_once_40-install-apps.sh b/run_once_40-install-apps.sh.tmpl similarity index 80% rename from run_once_40-install-apps.sh rename to run_once_40-install-apps.sh.tmpl index b8820c5..4f08e1a 100755 --- a/run_once_40-install-apps.sh +++ b/run_once_40-install-apps.sh.tmpl @@ -4,9 +4,9 @@ set -euo pipefail -SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" -GAMING="$(chezmoi data --format=json 2>/dev/null | jq -r '.gaming // "false"')" -DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" +SYS="{{ .system | default "desktop" }}" +GAMING="{{ .gaming | default false }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" if [ "$SYS" = "server" ]; then echo ">>> [apps] system=server, skipping" @@ -20,7 +20,7 @@ case "$DISTRO_ID" in echo ">>> [apps] installing packages" sudo pacman -Syu --noconfirm --needed \ libreoffice-fresh nextcloud-client \ - gvfs gvfs-mtp gvfs-smb thunar tumbler \ + gvfs gvfs-mtp gvfs-smb thunar tumbler lshw \ mpv nvtop pavucontrol thunderbird firefox yt-dlp \ feishin @@ -33,7 +33,7 @@ case "$DISTRO_ID" in if [ "$GAMING" = "true" ]; then echo ">>> [apps] installing gaming packages" sudo pacman -Syu --noconfirm --needed \ - steam + steam yay -Sy --noconfirm --needed \ heroic-games-launcher-bin diff --git a/run_once_99-set-shell.sh b/run_once_50-configure-user.sh.tmpl similarity index 51% rename from run_once_99-set-shell.sh rename to run_once_50-configure-user.sh.tmpl index e76e21c..17327c2 100755 --- a/run_once_99-set-shell.sh +++ b/run_once_50-configure-user.sh.tmpl @@ -1,12 +1,12 @@ #!/bin/bash -# run_once_99-set-shell.sh -# Sets the user's default login shell to fish. -# TODO prompt which shell +# run_once_45-configure-user.sh +# User configuration. +# TODO prompt which shell, download ?? set -euo pipefail if ! command -v fish >/dev/null 2>&1; then - echo ">>> [set-shell] fish not installed; skipping" + echo ">>> [configure-user] fish not installed; skipping" exit 0 fi @@ -14,9 +14,9 @@ USER_NAME="${USER:-$(id -un)}" current_shell="$(getent passwd "$USER_NAME" | cut -d: -f7)" if [ "$current_shell" = "$(command -v fish)" ]; then - echo ">>> [set-shell] shell already set to fish" + echo ">>> [configure-user] shell already set to fish" exit 0 fi -echo ">>> [set-shell] changing shell for $USER_NAME to $(command -v fish)" +echo ">>> [configure-user] changing shell for $USER_NAME to $(command -v fish)" sudo chsh -s "$(command -v fish)" "$USER_NAME" || true diff --git a/run_once_50-configure-system.sh b/run_once_60-configure-system.sh.tmpl similarity index 74% rename from run_once_50-configure-system.sh rename to run_once_60-configure-system.sh.tmpl index fd2a161..9177903 100755 --- a/run_once_50-configure-system.sh +++ b/run_once_60-configure-system.sh.tmpl @@ -4,9 +4,9 @@ set -euo pipefail -SYS="$(chezmoi data --format=json 2>/dev/null | jq -r '.system // "desktop"')" -DISTRO_ID="$(chezmoi data --format=json 2>/dev/null | jq -r '.chezmoi.osRelease.id // empty')" -SRC="$(chezmoi source-path)" +SYS="{{ .system | default "desktop" }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" +SRC="{{ .chezmoi.sourceDir }}" echo ">>> [configure] distro=$DISTRO_ID, system=$SYS, source=$SRC" services=( @@ -17,12 +17,6 @@ services=( case "$DISTRO_ID" in arch) - echo ">>> [configure] applying pacman.conf" - sudo install -m644 "$SRC/assets/pacman.conf" /etc/pacman.conf - - echo ">>> [configure] applying pacman.conf" - sudo sed -i 's/^#MAKEFLAGS=/MAKEFLAGS="-j'"$(nproc)"'"/' /etc/makepkg.conf - if [ "$SYS" != "server" ]; then echo ">>> [configure] enabling services" for service in "${services[@]}"; do @@ -33,7 +27,7 @@ case "$DISTRO_ID" in fi done - echo ">>> [configure] applying grub-theme" + echo ">>> [configure] applying grub-theme" if [ -d /boot/grub/themes ]; then sudo mkdir -p /boot/grub/themes/minegrub sudo cp -r "$SRC/assets/minegrub/." /boot/grub/themes/minegrub/ diff --git a/run_once_70-configure-laptop.sh.tmpl b/run_once_70-configure-laptop.sh.tmpl new file mode 100755 index 0000000..d78b886 --- /dev/null +++ b/run_once_70-configure-laptop.sh.tmpl @@ -0,0 +1,38 @@ +#!/bin/bash +# run_once_60-configure-laptop.sh +# Laptop only configuration. + +set -euo pipefail + +SYS="{{ .system | default "desktop" }}" +DISTRO_ID="{{ .chezmoi.osRelease.id | default "" }}" + +if [ "$SYS" != "laptop" ]; then + echo ">>> [configure-laptop] system=$SYS, skipping (not a laptop)" + exit 0 +fi + +case "$DISTRO_ID" in + arch) + echo ">>> [configure-laptop] arch" + sudo pacman -Syu --noconfirm --needed tlp power-profiles-daemon + sudo systemctl enable tlp + sudo systemctl enable power-profiles-daemon + ;; + + ubuntu) + echo ">>> [configure-laptop] ubuntu" + + sudo apt-get install -y tlp tlp-rdw power-profiles-daemon + sudo systemctl enable tlp + # tlp and power-profiles-daemon conflict on most hardware — mask the latter + sudo systemctl mask power-profiles-daemon || true + ;; + + *) + echo ">>> [configure-laptop] unsupported distro: ${DISTRO_ID:-unknown}, skipping" + exit 0 + ;; +esac + +echo ">>> [configure-laptop] done"