Compare commits

..

29 Commits

Author SHA1 Message Date
528b82bdaf fix ctrl-arrow keys 2026-07-25 21:09:04 -05:00
2a3e0e2e2b add treesitter and update stuff with nvim config 2026-07-25 21:08:37 -05:00
32a8c1260a fix up a few things 2026-07-20 21:27:18 -05:00
7347b64eba add nvm lazy loading to zsh 2026-07-20 20:53:56 -05:00
53b43eda88 add desktop background 2026-07-19 16:11:49 -05:00
e28f15a0c2 fix a few formatting things 2026-07-19 16:11:35 -05:00
111b0cef32 fix calendar widget and set up taskbar layout 2026-07-19 15:19:58 -05:00
fb9570fd74 actually remove stuff 2026-07-19 14:35:25 -05:00
f94fc0aa97 install discord & vs code 2026-07-19 14:35:10 -05:00
7fec866385 clean up a few things 2026-07-19 13:00:39 -05:00
76dad1fb8a install neovim 2026-07-19 12:59:11 -05:00
a7cccf0c4a update cinnamon info & log out after script 2026-07-19 12:55:49 -05:00
1e9e5d8990 update some stuff in zshrc 2026-07-19 12:55:40 -05:00
1cf3c17094 remove useless user dirs 2026-07-16 21:05:03 -05:00
e36056c031 enabling gestures 2026-07-16 21:04:47 -05:00
7b4e0ace3e add cinnamon version info 2026-07-16 21:02:22 -05:00
550309d767 make starship non-interactive install 2026-07-12 21:18:24 -05:00
fe541acc16 fix custom apt PPAs 2026-07-12 20:19:40 -05:00
02c8d34c61 fix permissions for the millionth time 2026-07-12 19:45:40 -05:00
2f88048eaa fix shell 2026-07-12 19:45:14 -05:00
8c26a8289c fix typos in package installations 2026-07-12 09:38:41 -05:00
ee181c6b24 replace with storing current user at beginning of the script 2026-07-12 09:38:13 -05:00
ea768d3779 add confirmation flag to user programs 2026-07-12 09:29:01 -05:00
18ace74706 fix typo 2026-07-12 09:22:33 -05:00
5c059d148b add some desktop environment setup 2026-07-11 23:40:51 -05:00
e674629000 more effing permissions 2026-07-11 22:22:20 -05:00
e0e368a875 add tree 2026-07-11 22:22:04 -05:00
226ce4eec4 add zsh and starship config files 2026-07-11 19:07:08 -05:00
61ad1bb003 fix more permissions stuff 2026-07-11 19:05:41 -05:00
8 changed files with 223 additions and 55 deletions

View File

@@ -1,9 +1,51 @@
########################### ###########################
## DESKTOP ENVIRONMENT ## ## DESKTOP ENVIRONMENT ##
########################### ###########################
# Designed & tested on Cinnamon XX.x # Designed & tested on Cinnamon 6.4.8
echo "## desktop environment" | tee -a todo.md
echo "desktop-env.sh not populated"
# remap caps-lock to escape (more efficient neovim) # remap caps-lock to escape (more efficient neovim)
gsettings set org.gnome.libgnomekbd.keyboard options "['grp\tgrp:win_space_toggle', 'terminate\tterminate:ctrl_alt_bksp', 'caps\tcaps:escape']" gsettings set org.gnome.libgnomekbd.keyboard options "['grp\tgrp:win_space_toggle', 'terminate\tterminate:ctrl_alt_bksp', 'caps\tcaps:escape']"
# fix touchpad scrolling direction (the default is objectively wrong)
gsettings set org.cinnamon.desktop.peripherals.touchpad natural-scroll "false"
# enable slick touchpad gestures
gsettings set org.cinnamon.gestures enabled "true"
gsettings set org.cinnamon.gestures swipe-left-3 "WORKSPACE_NEXT::start" # these by default are x::end
gsettings set org.cinnamon.gestures swipe-right-3 "WORKSPACE_PREVIOUS::start" # now, the workspace starts to move at the start of the gesture
# replace holding <Alt> to move windows with <Super>
gsettings set org.cinnamon.desktop.wm.preferences mouse-button-modifier "'<Super>'"
# hide annoying super menu icons
echo "* hide annoying super menu icons" | tee -a todo.md
# startup programs - artha
mkdir -p "$HOME/.config/autostart"
cp ./utils/artha-autostart.desktop "$HOME/.config/autostart/artha.desktop"
chmod 755 "$HOME/.config/autostart/artha.desktop"
# disable calendar widget showing events too
# 13.json corresponds to the numerical (zero-indexed) position in the
# enabled-applets section of `dconf dump /org/cinnamon/`
FP="$HOME/.config/cinnamon/spices/calendar@cinnamon.org/13.json"
cat $FP | jq '.["show-events"].value = false' | tee tmp.json && mv tmp.json "$FP"
# set up taskbar (grouped-window-list widget)
FP="$HOME/.config/cinnamon/spices/grouped-window-list@cinnamon.org/2.json"
TASKBAR_LAYOUT='[
"nemo.desktop",
"org.gnome.Terminal.desktop",
"brave-browser.desktop",
"discord.desktop",
"code.desktop"
]'
cat $FP | jq --argjson layout "$TASKBAR_LAYOUT" '.["pinned-apps"]["value"] = $layout' | tee tmp.json && mv tmp.json "$FP"
# set desktop background image
IMAGE_NAME="smoky-mountains-background.jpg"
mkdir -p "$HOME/.local/share/backgrounds"
cp "./utils/$IMAGE_NAME" "$HOME/.local/share/backgrounds/$IMAGE_NAME"
gsettings set org.cinnamon.desktop.background picture-uri "file://$HOME/.local/share/backgrounds/$IMAGE_NAME"

117
main.sh
View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Last updated: 7/4/2026 # Last updated: 7/4/2026
# This was designed for Linux Mint XX.x; most of it should work for other distros. the desktop-environment.sh code will probably need to be different for anything that's not Cinnamon. # This was designed for Linux Mint 22.2; most of it should work for other distros. the desktop-environment.sh code will probably need to be different for anything that's not Cinnamon.
# Some things here require manual install because they aren't in apt repositories, don't have another stable installation source, and I don't want to rely on a static download location. # Some things here require manual install because they aren't in apt repositories, don't have another stable installation source, and I don't want to rely on a static download location.
# These things will all be put into a TODO.md file in the current directory along with brief notes/instructions. # These things will all be put into a TODO.md file in the current directory along with brief notes/instructions.
@@ -9,17 +9,19 @@ sudo mkdir -p /usr/local/bin
sudo chmod 755 /usr/local/bin sudo chmod 755 /usr/local/bin
sudo apt-get update sudo apt-get update
INSTALL_USER=$(whoami)
####################### #######################
## DEV/PROGRAMMING ## ## DEV/PROGRAMMING ##
## ESSENTIAL TOOLS ## ## ESSENTIAL TOOLS ##
####################### #######################
echo "## dev/programming & essential tools/programs" | tee todo.md -a echo "## dev/programming & essential tools/programs" | tee -a todo.md
echo "* install drivers & such" | tee -a todo.md
# Install some apt packages # Install some apt packages
sudo apt-get upgrade sudo apt-get upgrade -y
sudo apt-get install -y curl git jq build-essentials unzip # for development sudo apt-get install -y curl git jq build-essential unzip tree npm # for development
sudo apt-get install -y ripgrep # I honestly don't remember why I installed these sudo apt-get install -y ripgrep # I honestly don't remember why I installed these
echo "* globstar?" | tee todo.md -a
# Install Python & uv (package/version manager) # Install Python & uv (package/version manager)
curl -LsSf https://astral.sh/uv/install.sh | sh curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -28,61 +30,95 @@ source $HOME/.local/bin/env
uv python install --default uv python install --default
# Node.js 24 (with nvm - https://github.com/nvm-sh/nvm) # Node.js 24 (with nvm - https://github.com/nvm-sh/nvm)
# also required for pyright language server (neovim)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash
\. "$HOME/.nvm/nvm.sh" # in lieu of restarting the shell \. "$HOME/.nvm/nvm.sh" # in lieu of restarting the shell
nvm install 24 nvm install 24
echo "* verify nvm stuff added to correct bashrc" | tee todo.md -a
# install a nerd font (provides special symbols for zsh/starship) # install a nerd font (provides special symbols for zsh/starship)
mkdir -p /usr/share/fonts/truetype/DejaVuSansMono/ sudo mkdir -p /usr/share/fonts/truetype/DejaVuSansMono/
unzip ./utils/DejaVuSansMono.zip /usr/share/fonts/truetype/DejaVuSansMono/ sudo unzip ./utils/DejaVuSansMono.zip -d /usr/share/fonts/truetype/DejaVuSansMono/
fc-cache -f -v
# zsh (better shell) # zsh (better shell)
echo "* add zsh and starship, etc. + nerd font" | tee todo.md -a
sudo apt-get install -y zsh sudo apt-get install -y zsh
sudo chsh $INSTALL_USER -s /bin/zsh
cp ./utils/dotzshrc "$HOME/.zshrc"
# zsh nvm lazy loading (so shell doesn't take a million years to start)
git clone https://github.com/lukechilds/zsh-nvm.git "$HOME/.nvm-zsh"
# other install stuff already in .zshrc
# starship (shell prompt) # starship (shell prompt)
curl -sS https://starship.rs/install.sh | sh curl -sS https://starship.rs/install.sh | sudo sh -s -- -y
# echo 'eval "$(starship init zsh)"' | tee "#USER_DIR/.zshrc" -a # should already be in zshrc # echo 'eval "$(starship init zsh)"' | tee -a "$HOME/.zshrc" # should already be in zshrc
mkdir -p "$USER_DIR/.config" mkdir -p "$HOME/.config"
cp ./utils/starship.toml "$USER_DIR/.config/starship.toml" cp ./utils/starship.toml "$HOME/.config/starship.toml"
# Neovim # Neovim
echo "* install neovim & clone config" | tee todo.md -a curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
sudo rm -rf /opt/nvim-linux-x86_64
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
rm nvim-linux-x86_64.tar.gz
echo 'export PATH="$PATH:/opt/nvim-linux-x86_64/bin"' | tee -a "$HOME/.bashrc"
# Other editor(s) (TBD) # Neovim config
echo "* investigate and install other IDE(s)" | tee todo.md -a git clone https://gitea.jovan04.com/evan/neovim-config "$HOME/.config/nvim"
echo "* install pyright language server (and any other relevant ones)" | tee -a todo.md
# tree-sitter-cli (neovim syntax highlighting)
curl -LO https://github.com/tree-sitter/tree-sitter/releases/latest/download/tree-sitter-cli-linux-x64.zip
sudo unzip ./tree-sitter-cli-linux-x64.zip -d /opt/nvim-linux-x86_64/bin/
rm ./tree-sitter-cli-linux-x64.zip
# install VS Code
wget "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64" -O "vs-code-linux-x64.deb"
echo "code code/add-microsoft-repo boolean true" | sudo debconf-set-selections
sudo apt-get install -y ./vs-code-linux-x64.deb
rm ./vs-code-linux-x64.deb
echo "* investigate and install other IDE(s)" | tee -a todo.md
# Brave browser # Brave browser
curl -fsS https://dl.brave.com/install.sh | sh curl -fsS https://dl.brave.com/install.sh | sh
# GitHub SSH keys # GitHub SSH keys
echo "* generate new SSH key and add to GitHub?" | tee todo.md -a echo "* generate new SSH key and add to GitHub?" | tee -a todo.md
# things I'd rather not install but have to # things I'd rather not install but have to
# Discord (chat) # Discord (chat)
echo "* install Discord (chat)" | tee todo.md -a wget "https://discord.com/api/download?platform=linux&format=deb" -O "discord-linux.deb"
sudo apt-get install -y ./discord-linux.deb
rm ./discord-linux.deb
mkdir -p "$HOME/.config/discord"
echo '{ "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true }' | tee "$HOME/.config/discord/settings.json"
echo "* find discord replacement" | tee -a todo.md
# Zoom (video call) # Zoom (video call)
echo "* install Zoom (video call)" | tee todo.md -a echo "* install Zoom (video call)" | tee -a todo.md
############################ ############################
## WORKFLOW/SMALL TOOLS ## ## WORKFLOW/SMALL TOOLS ##
############################ ############################
echo "## workflow helpers, small tools, and utilities" | tee todo.md -a echo "## workflow helpers, small tools, and utilities" | tee -a todo.md
# pbcopy/pbpaste (from macOS) # pbcopy/pbpaste (from macOS)
sudo apt-get install -y xclip sudo apt-get install -y xclip
printf '#!/bin/bash \nxclip -selection clipboard' | tee /usr/local/bin/pbcopy
printf '#!/bin/bash \nxclip -selection clipboard' | sudo tee /usr/local/bin/pbcopy
sudo chown $INSTALL_USER:$INSTALL_USER /usr/local/bin/pbcopy
chmod 755 /usr/local/bin/pbcopy chmod 755 /usr/local/bin/pbcopy
printf '#!/bin/bash \nxclip -selection clipboard -o' | tee /usr/local/bin/pbpaste
printf '#!/bin/bash \nxclip -selection clipboard -o' | sudo tee /usr/local/bin/pbpaste
sudo chown $INSTALL_USER:$INSTALL_USER /usr/local/bin/pbpaste
chmod 755 /usr/local/bin/pbpaste chmod 755 /usr/local/bin/pbpaste
# WordNet & def utility # WordNet & def utility
sudo apt-get install -y wordnet sudo apt-get install -y wordnet
printf '#!/bin/bash \nwn $1 -over' | tee /usr/local/bin/def printf '#!/bin/bash \nwn $1 -over' | sudo tee /usr/local/bin/def
sudo chown $INSTALL_USER:$INSTALL_USER /usr/local/bin/def
chmod 755 /usr/local/bin/def chmod 755 /usr/local/bin/def
# Artha (WordNet dictionary) # Artha (WordNet dictionary)
@@ -93,24 +129,26 @@ sudo apt-get install -y qpdf
# rndrmarkdown markdown renderer # rndrmarkdown markdown renderer
sudo apt-get install -y pandoc sudo apt-get install -y pandoc
cp ./utils/rndrmarkdown /usr/local/bin/rndrmarkdown sudo cp ./utils/rndrmarkdown /usr/local/bin/rndrmarkdown
chmod 755 /usr/local/bin/rndrmarkdown sudo chown $INSTALL_USER:$INSTALL_USER /usr/local/bin/rndrmarkdown
echo 'alias rmd="rndrmarkdown"' | tee ~/.bashrc -a sudo chmod 755 /usr/local/bin/rndrmarkdown
echo 'alias rmd="rndrmarkdown"' | tee -a "$HOME/.bashrc"
# readline (for piping 1 line into wc) # readline (for piping 1 line into wc)
printf '#!/bin/bash \necho "$(head -n $1 $2 | tail -n 1)"' | tee /usr/local/bin/rline printf '#!/bin/bash \necho "$(head -n $1 $2 | tail -n 1)"' | sudo tee /usr/local/bin/rline
sudo chown $INSTALL_USER:$INSTALL_USER /usr/local/bin/rline
chmod 755 /usr/local/bin/rline chmod 755 /usr/local/bin/rline
echo "* verify rline formatted correctly"
# Calc (command-line calculator) # Calc (command-line calculator)
sudo apt-get install -y calc sudo apt-get install -y calc
# OpenSSH server (prob already has ssh client) # OpenSSH server
sudo apt-get install -y openssh-server sudo apt-get install -y openssh-server
echo "* verify has openSSH client" | tee todo.md -a
# Wine (run windoze apps) # Wine (run windoze apps)
sudo apt-get install -y winehq sudo add-apt-repository -y ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install -y wine
# Gpick (color picker) # Gpick (color picker)
sudo apt-get install -y gpick sudo apt-get install -y gpick
@@ -125,12 +163,21 @@ sudo apt-get install -y btop
########################## ##########################
## SPECIALTY PROGRAMS ## ## SPECIALTY PROGRAMS ##
########################## ##########################
source user-programs.sh source ./user-programs.sh
########################### ###########################
## DESKTOP ENVIRONMENT ## ## DESKTOP ENVIRONMENT ##
########################### ###########################
# designed & tested on Cinnamon XX.x # designed & tested on Cinnamon 6.4.8
source ./desktop-env.sh source ./desktop-env.sh
######################
## REMOVING STUFF ##
######################
source ./removing-stuff.sh
echo "Installation and setup finished. You must log out and log back in for all changes to take effect."
read -p "Press enter to log out."
cinnamon-session-quit --logout --no-prompt

View File

@@ -1,6 +1,12 @@
###################### ######################
## REMOVING STUFF ## ## REMOVING STUFF ##
###################### ######################
echo "## removing stuff" | tee todo.md -a echo "## removing stuff" | tee -a todo.md
rmdir $HOME/Documents/
rmdir $HOME/Music/
rmdir $HOME/Pictures/
rmdir $HOME/Public/
rmdir $HOME/Templates/
rmdir $HOME/Videos/
echo "* remove ~/Videos, etc" | tee todo.md -a

View File

@@ -1,36 +1,38 @@
########################## ##########################
## SPECIALTY PROGRAMS ## ## SPECIALTY PROGRAMS ##
########################## ##########################
echo "## special/single-use/professional programs" | tee todo.md -a echo "## special/single-use/professional programs" | tee -a todo.md
# GIMP (image manipulation) # GIMP (image manipulation)
apt-get install -y gimp sudo apt-get install -y gimp
# Audacity (audio manipulation) # Audacity (audio manipulation)
apt-get install -y audacity sudo apt-get install -y audacity
# VLC (video player) # VLC (video player)
apt-get install -y vlc sudo apt-get install -y vlc
# ffmpeg (A/V transcoding) # ffmpeg (A/V transcoding)
apt-get install -y ffmpeg sudo apt-get install -y ffmpeg ffmpeg-doc
# OBS studio (screen recording) # OBS studio (screen recording)
add-apt-repository ppa:obsproject/obs-studio sudo add-apt-repository -y ppa:obsproject/obs-studio
apt-get update sudo apt-get update
apt-get install -y obs-studio sudo apt-get install -y obs-studio
# FreeCAD (3D parametric modeling) # FreeCAD (3D parametric modeling)
apt-get install -y freecad sudo add-apt-repository -y ppa:freecad-maintainers/freecad-stable
sudo apt-get update
sudo apt-get install -y freecad freecad-doc
# 3D printing slicer # 3D printing slicer
echo "* choose and install 3D slicer" | tee todo.md -a echo "* choose and install 3D slicer" | tee -a todo.md
# ProtonVPN # ProtonVPN
echo "* install protonVPN" | tee todo.md -a echo "* install protonVPN" | tee -a todo.md
# Minecraft # Minecraft
echo "* install Minecraft" | tee todo.md -a echo "* install Minecraft" | tee -a todo.md
# unsure about right now # unsure about right now

View File

@@ -0,0 +1,6 @@
[Desktop Entry]
Type=Application
Name=Artha
GenericName=Thesaurus
Comment=Handy thesaurus based on WordNet
Exec=artha

36
utils/dotzshrc Normal file
View File

@@ -0,0 +1,36 @@
# some handy ls aliases
alias ls='ls --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# some handy grep aliases
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
export PATH="$PATH:/opt/nvim-linux-x86_64/bin"
alias open="xdg-open"
alias nv="nvim"
alias rmd="rndrmarkdown"
autoload -Uz compinit && compinit
zstyle ':completion:*' insert-tab false
zstyle ':completion:*' menu select
bindkey "^[[1;5C" forward-word # Ctrl+Right
bindkey "^[[1;5D" backward-word # Ctrl+Left
export NVM_LAZY_LOAD=true
source "$HOME/.nvm-zsh/zsh-nvm.plugin.zsh"
eval "$(starship init zsh)"

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

29
utils/starship.toml Normal file
View File

@@ -0,0 +1,29 @@
"$schema" = 'https://starship.rs/config-schema.json'
add_newline = false
# $git_branch $git_status
format = '''
$username[@](bright-green)$hostname:$directory\$ '''
[username]
show_always = true
format = '[$user]($style)'
[hostname]
ssh_only = false
trim_at = ''
style = 'bold green'
format = '[$ssh_symbol$hostname]($style)'
[directory]
truncation_length = 9999
style = 'bold blue'
format = '[$path]($style)[$read_only]($read_only_style)'
truncate_to_repo = false
[character]
success_symbol = '[\$](white)'
error_symbol = '[\$](red)'
# eval "$(starship init bash)"