remove submodules and add to main project

This commit is contained in:
Tyler Starr 2023-04-30 20:47:19 -07:00
parent ceeb2ec438
commit 3ba0f3c1fa
73 changed files with 1583 additions and 9 deletions

7
.gitmodules vendored
View File

@ -1,7 +0,0 @@
[submodule "provision/void"]
path = provision/void
url = https://github.com/starr-dusT/provision-void.git
[submodule "provision/fedora"]
path = provision/fedora
url = https://github.com/starr-dusT/provision-fedora.git
branch = master

@ -1 +0,0 @@
Subproject commit 688d5d33ca6f0d0aa975d30b65900a0a357c7400

View File

@ -0,0 +1,188 @@
# Additional Setup
The following documents some Fedora setup that wasn't automated with ansible.
## Snapper
Snapper is used to create snapshots with the BTRFS filesystem for root and home
directories. I'd like to make these snapshots available at grub with
[grub-btrfs](https://github.com/Antynea/grub-btrfs), but I've found that
akmod-nvidia breaks it. Snapper is setup with:
```bash
sudo btrfs filesystem label / *FTL ship name*
# Make /var/log subvolume
sudo mv -v /var/log /var/log-old
sudo btrfs subvolume create /var/log
sudo cp -arv /var/log-old/. /var/log/
sudo restorecon -RFv /var/log
sudo rm -rvf /var/log-old
# Add /var/log to fstab
sudo vi /etc/fstab
# UUID=<drive uuid> /var/log btrfs subvol=var/log,compress=zstd:1 0 0
sudo systemctl daemon-reload
sudo mount -va
# Create snapper configs
sudo snapper -c root create-config /
sudo snapper -c home create-config /home
# Allow users to perform snapshots
sudo snapper -c root set-config ALLOW_USERS=$USER SYNC_ACL=yes
sudo snapper -c home set-config ALLOW_USERS=$USER SYNC_ACL=yes
sudo chown -R :$USER /.snapshots
sudo chown -R :$USER /home/.snapshots
# Add / and /home to fstab
sudo vi /etc/fstab
# UUID=<drive uuid> /.snapshots btrfs subvol=.snapshots,compress=zstd:1 0 0
# UUID=<drive uuid> /home/.snapshots btrfs subvol=home/.snapshots,compress=zstd:1 0 0
sudo systemctl daemon-reload
sudo mount -va
# Show resulting subvolume structure
sudo btrfs subvolume list /
# Enable and start snapper timeline and cleanup services
sudo systemctl enable snapper-timeline.timer
sudo systemctl start snapper-timeline.timer
sudo systemctl enable snapper-cleanup.timer
sudo systemctl start snapper-cleanup.timer
```
## Wireguard Client
Wireguard is nice for a home vpn and [pivpn](https://pivpn.io/) makes it easy.
1. Create client on server and copy resulting `.conf` file to local machine
2. Import to networkmanager with:
```bash
nmcli connection import type wireguard file <conf file from pivpn>
```
3. Use `nm-connection-editor` to disable automatic connection
## Mount network drives
I find fstab messing about more troubule than it is worth. Credentials are
stored in ~/.smb. Mount network drives when needed with the following command:
```bash
linux-mount-<network drive name>
```
## Taskopen for taskwarrior
[taskopen](https://github.com/jschlatow/taskopeni) is easier to install
manually at this point since it isn't packaged and uses nim. Might get this
automated in the future.
```bash
curl https://nim-lang.org/choosenim/init.sh -sSf | sh # install nim
git clone https://github.com/jschlatow/taskopen.git
cd taskopen
make PREFIX=/usr
sudo make PREFIX=/usr install
```
## Syncthing
Syncthing is used to sync folders between various computers and android. The
ansible script should setup and run the service, but shares must be setup
via the web gui. Currently four shares exists:
- `.warrior` - `.task` and `.timewarrior` folders to sync taskwarrior tasks.
These two folders are symlinked to the home folder where taskwarrior/timewarrior
expects them.
- `warrior` - contains text files associated with taskwarrior (mostly from
taskopen).
- `phone photos` - personal photos synched from android.
- `phone screenshots` - personal screenshots synced from android.
- `ssh_keys` - contains ssh keys for git remotes (~/.ssh/keys)
- `vimwiki` - contains text files associate with my personal vimwiki.
## Lxappearance
My GTK theme is pulled down by chezmoi, but isn't active by default. This can
be fixed with the lxappearance gui (for X sessions).
## Git SSH for personal and work
- ~/.gitconfig - personal github configuration.
- ~/devel/work/.gitconfig - work gitlab configuration.
Gitconfig files for SSH git push/pull are automaitcally placed. The only
additional configuration required is the transfer of SSH keys (see Syncthing
section).
## Firefox
Transfer the `.mozilla` folder from install-to-install to maintain Firefox
settings and configurations.
## Dracula colorscheme for gnome terminal
[Dracula](https://draculatheme.com/gnome-terminal) is used for gnome-terminal.
Run the following commands to install:
```bash
git clone https://github.com/dracula/gnome-terminal
cd gnome-terminal
./install.sh
```
## Bluetooth Audio
In addition to the `pipewire-codec-aptx` package being required (installed
with ansible) you need to set `ControllerMode = bredr` in
`/etc/bluetooth/main.conf` to get bluetooth to work properly with audio devices.
## Linux-tkg kernel
The [linux-tkg](https://github.com/Frogging-Family/linux-tkg) kernel provides
a more responsive desktop. Install with the following:
```bash
git clone https://github.com/Frogging-Family/linux-tkg.git
cd linux-tkg
```
Set `CONFIG_EFI_HANDOVER_PROTOCOL` to `y` in
`linux-tkg-config/<kernel-version>/config.x86_64`.
```bash
./install.sh install
sudo dnf install akmod-nvidia
```
Reboot into new kernel.
## Single GPU Passthrough to windows
I use a windows virtual machine with gpu passthrough of the few games that
won't work on linux, Zwift, and Fusion360. [This](https://github.com/ilayna/Single-GPU-passthrough-amd-nvidia)
has scripts that make that process relatively easy and [this wiki](https://gitlab.com/risingprismtv/single-gpu-passthrough/-/wikis/home)
provides good information on setting up the virtual machine in virt-manager.
The `patch.rom` required for my GPU is included in my repo. The virt-manager
setup should usually be avoided by transfering the VM between machines:
1. Copy the VM's disks from `/var/lib/libvirt/images` on src host to the same dir on destination host
2. On the source host run `virsh dumpxml VMNAME > domxml.xml` and copy this xml to the destination host
3. On the destination host run `virsh define domxml.xml`
## Google earth pro
[Google earth](https://www.google.com/earth/versions/) is nice for visualizing
my hikes and checking out snow levels. Download the RPM and install with yum.
## Emacs
```bash
git clone git://git.sv.gnu.org/emacs.git
sudo dnf install autoconf texinfo gtk3-devel libgccjit-devel gnutls-devel ncurses-devel jansson jansson-devel
cd emacs
./autogen.sh
./configure --with-native-compilation --with-json --with-pgtk
make -j16
sudo make install
```

View File

@ -0,0 +1 @@
local ansible_connection=local ansible_python_interpreter=/usr/bin/python3

View File

@ -0,0 +1,8 @@
# Ansible Galaxy Roles
roles:
- src: https://github.com/starr-dusT/ansible-role-customize-gnome
- src: https://github.com/starr-dusT/ansible-rustup
collections:
- name: community.general
version: 6.0.1
source: https://galaxy.ansible.com

View File

@ -0,0 +1,13 @@
- name: Ansible playbook to setup fedora linux
hosts: all
vars_files:
- ../../../home/.chezmoidata.yaml
tasks:
- import_tasks: tasks/system/_main.yml
- import_tasks: tasks/terminal/_main.yml
- import_tasks: tasks/development/_main.yml
- import_tasks: tasks/gaming/_main.yml
- import_tasks: tasks/engineering/_main.yml
- import_tasks: tasks/desktop/_main.yml

View File

@ -0,0 +1,7 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]
- import_tasks: gnome-settings/_main.yml
tags: ["configs"]
when: desktop == "gnome"

View File

@ -0,0 +1,41 @@
- name: Set desktop files to hide
include_tasks: ../include/hide-desktop.yml
loop:
- /usr/share/applications/wine-winhelp.desktop
- /usr/share/applications/wine-mime-msi.desktop
- /usr/share/applications/wine-notepad.desktop
- /usr/share/applications/wine-oleview.desktop
- /usr/share/applications/wine-regedit.desktop
- /usr/share/applications/wine-uninstaller.desktop
- /usr/share/applications/wine-wineboot.desktop
- /usr/share/applications/wine-winecfg.desktop
- /usr/share/applications/wine-winefile.desktop
- /usr/share/applications/wine-winemine.desktop
- /usr/share/applications/wine-wordpad.desktop
- /usr/share/applications/vifm.desktop
- /usr/share/applications/dosbox-staging.desktop
- /usr/share/applications/nvim.desktop
- /usr/share/applications/syncthing-start.desktop
- /usr/share/applications/syncthing-ui.desktop
- /usr/share/applications/cgnscalc.desktop
- /usr/share/applications/cgnsnodes.desktop
- /usr/share/applications/cgnsplot.desktop
- /usr/share/applications/cgnsview.desktop
- /usr/share/applications/qt5-assistant.desktop
- /usr/share/applications/opencascade-draw.desktop
- /usr/share/applications/unitconv.desktop
- name: Uninstall desktop bloat
dnf:
name:
- yelp
- gnome-boxes
- rhythmbox
- gnome-photos
- totem
- gnome-text-editor
- cheese
- gnome-tour
- gnome-maps
state: absent
become: true

View File

@ -0,0 +1,17 @@
- name: Set custom gnome binding {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/binding"
value: "{{ item.bind }}"
state: present
- name: Set custom gnome command {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/command"
value: "{{ item.command }}"
state: present
- name: Set custom gnome name {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/name"
value: "{{ index }}"
state: present

View File

@ -0,0 +1,6 @@
- import_tasks: extensions.yml
tags: ["gnome-extensions"]
- import_tasks: keybinds.yml
tags: ["configs"]
- import_tasks: window-management.yml
tags: ["configs"]

View File

@ -0,0 +1,11 @@
- name: Install gnome extensions
include_role:
name: ansible-role-customize-gnome
vars:
# For now extensions aren't enabled (https://github.com/PeterMosmans/ansible-role-customize-gnome/issues/25)
gnome_extensions:
- id: 779 # https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator
- id: 4362 # https://github.com/Noobsai/fullscreen-avoider
- id: 1460 # https://github.com/corecoding/Vitals
- id: 7 # https://gitlab.gnome.org/GNOME/gnome-shell-extensions
gnome_user: "{{ user }}"

View File

@ -0,0 +1,62 @@
- name: Unset particular default gnome keybinds
dconf:
key: "{{ item }}"
value: [""]
state: present
loop:
- "/org/gnome/shell/keybindings/switch-to-application-1"
- "/org/gnome/shell/keybindings/switch-to-application-2"
- "/org/gnome/shell/keybindings/switch-to-application-3"
- "/org/gnome/shell/keybindings/switch-to-application-4"
- "/org/gnome/shell/keybindings/switch-to-application-5"
- "/org/gnome/desktop/wm/keybindings/switch-input-source"
- "/org/gnome/desktop/wm/keybindings/switch-input-source-backwards"
- "/org/gnome/settings-daemon/plugins/media-keys/screensaver"
- "/org/gnome/desktop/wm/keybindings/switch-applications"
- "/org/gnome/desktop/wm/keybindings/switch-applications-backward"
- "/org/gnome/desktop/wm/keybindings/switch-windows"
- "/org/gnome/desktop/wm/keybindings/switch-windows-backward"
- name: Change existing gnome keybinds
dconf:
key: "{{ item.key }}"
value: "{{ item.value }}"
state: present
loop:
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-1", value: ["<Super>1"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-2", value: ["<Super>2"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-3", value: ["<Super>3"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-4", value: ["<Super>4"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-5", value: ["<Super>5"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-1", value: ["<Super><Shift>1"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-2", value: ["<Super><Shift>2"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-3", value: ["<Super><Shift>3"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-4", value: ["<Super><Shift>4"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-5", value: ["<Super><Shift>5"]}
- {key: "/org/gnome/desktop/wm/keybindings/minimize", value: ["<Super>Space"]}
- {key: "/org/gnome/desktop/wm/keybindings/toggle-fullscreen", value: ["<Super>F"]}
- {key: "/org/gnome/desktop/wm/keybindings/close", value: ["<Super>Q"]}
- {key: "/org/gnome/desktop/wm/keybindings/maximize-horizontally", value: ["<Super><Shift>H"]}
- {key: "/org/gnome/desktop/wm/keybindings/maximize-vertically", value: ["<Super><Shift>V"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-center", value: ["<Super>C"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-windows", value: ["<Super>Tab"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-windows-backward", value: ["<Super><Shift>Tab"]}
- {key: "/org/gnome/settings-daemon/plugins/media-keys/screensaver", value: ["<Super><Shift>L"]}
- name: Set custom gnome keybinds
include_tasks: _custom-bind.yml
loop:
- {command: "'gnome-terminal'", bind: "'<Super>Return'"}
- {command: "'firefox'", bind: "'<Super><Shift>B'"}
- {command: "'code'", bind: "'<Super><Shift>V'"}
loop_control:
index_var: index
# Gnome requires an array of strings with the custom keybinds
# this must match the number of keybinds defined above...
- name: Set custom-keybinds array
dconf:
key: /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings
value: "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/',
'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/',
'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/']"

View File

@ -0,0 +1,10 @@
- name: Set Static workspaces
dconf:
key: "/org/gnome/mutter/dynamic-workspaces"
value: "false"
- name: Set Number of workspaces
dconf:
key: "/org/gnome/desktop/wm/preferences/num-workspaces"
value: "5"

View File

@ -0,0 +1,25 @@
- name: Install desktop fedora packages
dnf:
name:
- mpv # Video player based on MPlayer/mplayer2
- ffmpeg # Decoding, encoding and streaming software
- akmod-nvidia # NVIDIA drivers for linux - Libraries and Utilities
- firefox # Mozilla Firefox web browser
#- nerd-fonts # Iconic font aggregator, collection and patcher
- gnome-tweaks
- evolution
state: present
become: true
- name: Install desktop flatpaks
flatpak:
name:
- com.discordapp.Discord # VoIP and instant messaging social platform
- org.gimp.GIMP # Create images and edit photographs
- org.inkscape.Inkscape # Vector Graphics Editor
- com.github.tchx84.Flatseal # Manage Flatpak permissions
- com.mattjakeman.ExtensionManager # A utility for browsing and installing GNOME Shell Extensions
- org.kde.kdenlive
- com.bitwarden.desktop
state: present
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]

View File

@ -0,0 +1,5 @@
- name: Setup nvm
tags: ["once"]
shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
creates=/home/{{ user }}/.nvm/nvm.sh

View File

@ -0,0 +1,43 @@
- name: Enable lazygit copr repo
tags: ["once"]
community.general.copr:
name: atim/lazygit
state: enabled
become: true
- name: Install development void packages
dnf:
name:
- python3 # Python programming language (3.11 series)
- python3.9
- python3-pip # A tool for installing and managing Python3 packages
- python3-ipython
- ripgrep # Fast search tool inspired by ag and grep
- fd-find # Simple, fast and user-friendly alternative to find
- lazygit # Simple terminal UI for git commands
- pipenv # Python Development Workflow for Humans
- python3-devel # Python programming language (3.11 series) - development files
- rubygems
- perl
- cloc
state: present
become: true
- name: Install tmuxinator gem package
gem:
name: tmuxinator # Create and manage complex tmux sessions easily
state: latest
- name: Install development python packages
ansible.builtin.pip:
name:
- ansible-lint # Command-line tool for linting playbooks, roles and collections
- pyright
- name: Install development flatpaks
flatpak:
name:
- com.vscodium.codium # Free/Libre Open Source Software Binaries of VS Code
- com.github.GradienceTeam.Gradience
state: present
become: true

View File

@ -0,0 +1,2 @@
- import_tasks: packages.yml
tags: ["packages"]

View File

@ -0,0 +1,9 @@
- name: Install engineering fedora packages
dnf:
name:
- freecad # General purpose 3D CAD modeler
- gqrx
state: present
become: true
- include_tasks: superslicer.yml # PrusaSlicer fork (which is a slic3r fork)

View File

@ -0,0 +1,6 @@
- name: Install SuperSlicer
include_tasks: ../include/download-github-bin.yml
loop:
- user: supermerill
repo: SuperSlicer
regex: "SuperSlicer-ubuntu_18.04-[0-9]"

View File

@ -0,0 +1,2 @@
- import_tasks: packages.yml
tags: ["packages"]

View File

@ -0,0 +1,9 @@
- name: Install gaming fedora packages
dnf:
name:
- steam # Launcher for the Steam software distribution service
- lutris # Video game preservation platform
- gamemode # Optimize system performance for games on demand
- wine # A compatibility layer for windows applications
state: present
become: true

View File

@ -0,0 +1,16 @@
- name: Get {{ item.repo }} release information
uri:
url: https://api.github.com/repos/{{ item.user }}/{{ item.repo }}/releases/latest
return_content: true
register: repo_latest
- name: Install archived {{ item.repo }} - {{ repo_latest.json.tag_name }}
loop: "{{ repo_latest.json.assets }}"
when: "asset.name is regex(item.regex)"
unarchive:
src: "{{ asset.browser_download_url }}"
dest: /usr/local/bin
remote_src: true
loop_control:
loop_var: asset
become: true

View File

@ -0,0 +1,16 @@
- name: Get {{ item.repo }} release information
uri:
url: https://api.github.com/repos/{{ item.user }}/{{ item.repo }}/releases/latest
return_content: true
register: repo_latest
- name: Install un-archived {{ item.repo }} - {{ repo_latest.json.tag_name }}
loop: "{{ repo_latest.json.assets }}"
when: "asset.name is regex(item.regex)"
get_url:
url: "{{ asset.browser_download_url }}"
dest: /usr/local/bin/{{ item.repo }}
mode: 0775
loop_control:
loop_var: asset
become: true

View File

@ -0,0 +1,18 @@
- name: Check desktop file exists
ansible.builtin.stat:
path: "{{ item }}"
register: p
- name: Edit desktop file
ansible.builtin.lineinfile:
path: "{{ item }}"
insertafter: '^Type'
line: 'NoDisplay=true'
firstmatch: true
state: present
become: true
when: p.stat.exists
- debug:
msg: "Warning - {{ item }} does not exist"
when: p.stat.exists == False

View File

@ -0,0 +1,33 @@
- name: Clone or pull void-packages
ansible.builtin.git:
repo: 'https://github.com/starr-dusT/void-packages.git'
dest: /home/{{ user }}/git/void-packages
update: yes
register: git_return
- name: Bootstrap if newly cloned
ansible.builtin.command: ./xbps-src binary-bootstrap
args:
chdir: /home/{{ user }}/git/void-packages
when: not git_return.before
- name: Enable restricted if newly cloned
copy:
dest: /home/{{ user }}/git/void-packages/etc/conf
content: |
XBPS_ALLOW_RESTRICTED=yes
when: not git_return.before
- name: Package {{ item.package }} with xbps-src
ansible.builtin.command: ./xbps-src pkg {{ item.package }}
args:
chdir: /home/{{ user }}/git/void-packages
- name: Install packaged {{ item.package }}
expect:
command: xbps-install --repository {{ item.repository }} {{ item.package }}
responses:
continue: y
args:
chdir: /home/{{ user }}/git/void-packages
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]

View File

@ -0,0 +1,20 @@
- name: Start and enable syncthing
tags: ["once"]
systemd:
name: syncthing@{{ user }}
enabled: true
state: started
become: true
- name: Set hostname for linux
tags: ["once"]
shell: >
hostnamectl set-hostname {{ hostname }}
become: true
- name: Change sudo settings
lineinfile:
path: /etc/sudoers
regexp: ^Defaults env_reset
line: Defaults env_reset,timestamp_timeout=60,!tty_tickets
become: yes

View File

@ -0,0 +1,57 @@
- name: Install rpm-fusion
tags: ["once"]
block:
- name: Importing (free) key
ansible.builtin.rpm_key:
state: present
key: https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-free-fedora-2020
- name: Importing (non-free) key
ansible.builtin.rpm_key:
state: present
key: https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-nonfree-fedora-2020
- name: install the rpmfusion repo packages
dnf:
name:
- http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-{{ ansible_distribution_major_version }}.noarch.rpm
- http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-{{ ansible_distribution_major_version }}.noarch.rpm
state: present
become: true
- name: Enable iosevka font copr repo
community.general.copr:
name: peterwu/iosevka
state: enabled
become: true
- name: Install system fedora packages
dnf:
name:
- git # Fast Version Control System
- git-lfs # Git extension for versioning large files
- syncthing # Continuous File Synchronization
- flatpak # Application deployment framework for desktop apps
- wireguard-tools # Fast, modern, secure vpn tunnel
- pipewire-codec-aptx # PipeWire Bluetooth aptX codec plugin
- ansible # Simple deployment, configuration management and execution framework
- '@Development tools' # Development tools for Fedora
- '@virtualization' # Virtualization tools for Fedora
- trash-cli # Command line interface to the freedesktop.org trashcan
- android-tools # Android platform tools(adb, fastboot)
- snapper
- python3-dnf-plugin-snapper
- cargo
- iosevka-fonts
- borgbackup
state: present
become: true
- name: Install chezmoi
ansible.builtin.shell: sh -c "$(curl -fsLS get.chezmoi.io)" -- -b $HOME/.local/bin # Manage your dotfiles across multiple machines, securely
- name: Add the flathub flatpak repository remote
tags: ["once"]
shell: |
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]

View File

@ -0,0 +1,12 @@
- name: change {{ user }} shell to zsh
tags: ["once"]
user:
name: "{{ user }}"
shell: /bin/zsh
become: true
- name: Set rbw email
tags: ["once"]
shell: |
rbw config set email {{ bitwarden_email }}

View File

@ -0,0 +1,45 @@
- name: Enable lf copr repo
tags: ["once"]
community.general.copr:
state: enabled
name: pennbauman/ports
become: true
- name: Install terminal fedora packages
dnf:
name:
- neovim # Vim-fork focused on extensibility and agility
- task # Command-line TODO list manager
- timew # Timewarrior tracks and reports time
- python3-tasklib # Library for interacting with taskwarrior databases (Python3)
- vifm # Ncurses-based file manager with vi-like keybindings
- zsh # Z SHell
- tmux # Terminal Multiplexer
- nmap # Utility for network discovery and security auditing
- w3m # Text-based Web browser and pager (with Debian patches)
- lf # Terminal file manager
- khal # Command-line calendar build around CalDAV
- khard # Command-line addressbook built around CardDAV
- vdirsyncer # Synchronize calendars and addressbooks
- neofetch # Simple system information script
state: present
become: true
- name: Install terminal python packages
ansible.builtin.pip:
name:
- pynvim
- name: Install terminal cargo packages
community.general.cargo:
name: rbw # This is an unofficial command line client for Bitwarden
- name: Install github release binaries
include_tasks: ../include/download-github-archive.yml
loop:
- user: kdheepak
repo: taskwarrior-tui
regex: unknown-linux-gnu.tar.gz
- user: mickael-menu
repo: zk
regex: linux-amd64.tar.gz

View File

@ -0,0 +1,18 @@
# Checklist
I can be forgetful so this document tracks what [additional setup](./additional-setup.md)
has been done :)
- [ ] Snapper
- [ ] Wireguard Client
- [ ] Mount network drives
- [ X ] Taskopen for taskwarrior
- [ ] Syncthing
- [ ] Lxappearance
- [ ] Git SSH for personal and work
- [ X ] Firefox
- [ X ] Dracula colorscheme for gnome terminal
- [ X ] Bluetooth Audio
- [ X ] Linux-tkg kernel
- [ X ] Single GPU Passthrough to windows
- [ ] Google earth pro

54
provision/fedora/jumpstart.sh Executable file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env bash
echo -e "Starting initial setup for Fedora..."
CHEZDIR="$HOME/.local/share/chezmoi"
echo "Input email for bitwarden:"
read bitemail
# Install ansible python dependencies
sudo dnf update -y
sudo dnf install python3 python3-pip ansible cargo -y
pip install pexpect
cargo install rbw
# Add things to path for this script
export PATH="$PATH:/usr/local/bin"
export PATH="$PATH:$HOME/.cargo/bin"
export PATH="$PATH:$CHEZDIR/temp_bin"
# Install ansible extensions
ansible-galaxy install -r "$CHEZDIR/provision/fedora/ansible/requirements.yml"
# Run setup playbook
ansible-playbook "$CHEZDIR/provision/fedora/ansible/setup.yml" -i "$CHEZDIR/provision/fedora/ansible/hosts" --ask-become-pass
# Copy jumpstart scripts to temp bin dir and add to path
mkdir -p "$CHEZDIR/temp_bin"
cp "$CHEZDIR/home/bin/executable_rbw-get" "$CHEZDIR/temp_bin/rbw-get"
chmod +x "$CHEZDIR/temp_bin/rbw-get"
# Set bitwarden email
rbw config set email "$bitemail"
# Make temporary i3 gen file
mkdir -p "$CHEZDIR/home/.gen"
echo "{
\"disp_pri\": \"HDMI-0\",
\"disp_sec\": \"HDMI-0\"
}" > "$CHEZDIR/home/.gen/i3.json"
# initialize chezmoi
chezmoi init
# first chezmoi apply
chezmoi apply
# reboot!
read -p "You should reboot, but I won't make you. Reboot? " -n 1 -r
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
sudo reboot

View File

@ -0,0 +1,33 @@
# Provision Fedora
> \*Tips Fedora\*
Jumpstart scripts to install Fedora with packages and configs I use.
## Usage
Install Fedora Workstation with BTRFS and partition:
```
1. 512Mb EFI partition at /boot/EFI
2. BTRFS volume "root" at / that fills rest of drive
3. BTFS subvolume "home" at /home
```
Run the following commands:
```bash
sudo dnf install vim git -y
git clone --recurse-submodules https://github.com/starr-dusT/dotfiles ~/.local/share/chezmoi
```
Copy `.chezmoidata.yaml.example` to `.chezmoidata.yaml` and edit with desired settings then run the following commands:
```bash
~/.local/share/chezmoi/provision/fedora/jumpstart.sh
```
Perform additional setup found in [additional-setup](additional-setup.md)
## Update Setup
`linux-update --fedora` command updates the system with ansible. Run `linux-update -h` for information on usage.

@ -1 +0,0 @@
Subproject commit d9783fda8f590c18df7632fe43573a45f9121086

View File

@ -0,0 +1,103 @@
# Additional Setup
The following documents Void setup that wasn't automated with ansible.
## Radicale and vdirsyncer for contacts/calendar
[Radicale](https://radicale.org/v3.html) is hosted on my home server to provide
DAV synced calendars and contacts. [Vdirsyncer](https://github.com/pimutils/vdirsyncer)
allows for the files to be synced to the linux filesystem for desktop usage
with [khard](https://github.com/lucc/khard) and [khal](https://github.com/pimutils/khal).
The config files are auto-populated by chezmoi with credentials from bitwarden
run the following commands to setup vdirsyncer files:
```bash
vdirsyncer -c ~/.config/vdirsyncer/config_calendar discover
vdirsyncer -c ~/.config/vdirsyncer/config_contacts discover
```
Files can be later synced with the following commands:
```bash
vdirsyncer -c ~/.config/vdirsyncer/config_calendar sync
vdirsyncer -c ~/.config/vdirsyncer/config_contacts sync
```
## Wireguard Client
Wireguard is nice for a home vpn and [pivpn](https://pivpn.io/) makes it easy.
1. Create client on server and copy resulting `.conf` file to local machine
2. Import to networkmanager with:
```bash
nmcli connection import type wireguard file <conf file from pivpn>
```
3. Turn on/off from nm-applet
## BTRFS back-ups with btrbk
[btrbk](https://github.com/digint/btrbk) is used to create snapshots of the
root and user volumes. User volumes are backed-up to my home server (Torus),
but root is only stored locally.
```bash
sudo btrbk -c ~/.config/btrbk/home_btrbk.conf -v run # snapshot /home/<user>
sudo btrbk -c ~/.config/btrbk/root_btrbk.conf -v run # snapshot /
```
SSH keypair is used for password-less root ssh for remote back-up. See
[ssh setup](https://github.com/digint/btrbk#setting-up-ssh) from the btrbk
readme.
anacron is used for daily backups. Copy `home_backup.sh` from the config folder
to `/etc/cron.daily`.
## Mount network drives
I find fstab messing about more troubule than it is worth. Mount network drives
when needed with the following command:
```bash
linux-mount-<network drive name>
```
## Taskopen for taskwarrior
[taskopen](https://github.com/jschlatow/taskopeni) is easier to install
manually at this point since it isn't packaged and uses nim. Might get this
automated in the future.
```bash
curl https://nim-lang.org/choosenim/init.sh -sSf | sh # install nim
git clone https://github.com/jschlatow/taskopen.git
cd taskopen
make PREFIX=/usr
sudo make PREFIX=/usr install
```
## Syncthing
Syncthing is used to sync folders between various computers and android. The
ansible script should setup and run the service, but shares must be setup
via the web gui. Currently four shares exists:
- `.warrior` - `.task` and `.timewarrior` folders to sync taskwarrior tasks.
These two folders are symlinked to the home folder where taskwarrior/timewarrior
expects them.
- `warrior` - contains text files associated with taskwarrior (mostly from
taskopen).
- `phone photos` - personal photos synched from android.
- `phone screenshots` - personal screenshots synced from android.
- `keys` - contains ssh keys for git remotes (~/.ssh/keys)
## Lxappearance
My GTK theme is pulled down by chezmoi, but isn't active by default. This can
be fixed with the lxappearance gui.
## nb notebooks
Remote nb notebooks are added with the following command:
```bash
nb notebooks add <notebook name> https://github.com/starr-dusT/nb <branch>
```

View File

@ -0,0 +1 @@
local ansible_connection=local ansible_python_interpreter=/usr/bin/python3

View File

@ -0,0 +1,8 @@
# Ansible Galaxy Roles
roles:
- src: https://github.com/starr-dusT/ansible-role-customize-gnome
- src: https://github.com/starr-dusT/ansible-rustup
collections:
- name: community.general
version: 6.0.1
source: https://galaxy.ansible.com

View File

@ -0,0 +1,14 @@
- name: Ansible playbook to setup void linux
hosts: all
vars_files:
- ../home/.chezmoidata.yaml
tasks:
- import_tasks: tasks/system/_main.yml
- import_tasks: tasks/terminal/_main.yml
- import_tasks: tasks/development/_main.yml
- import_tasks: tasks/desktop/_main.yml
- import_tasks: tasks/gaming/_main.yml
- import_tasks: tasks/engineering/_main.yml

View File

@ -0,0 +1,7 @@
- import_tasks: configs.yml
tags: ["configs"]
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: gnome-settings/_main.yml
tags: ["configs"]
when: desktop == "gnome"

View File

@ -0,0 +1,19 @@
- name: Set desktop files to hide
include_tasks: ../include/hide-desktop.yml
loop:
- /usr/share/applications/wine-winhelp.desktop
- /usr/share/applications/wine-mime-msi.desktop
- /usr/share/applications/wine-notepad.desktop
- /usr/share/applications/wine-oleview.desktop
- /usr/share/applications/wine-regedit.desktop
- /usr/share/applications/wine-uninstaller.desktop
- /usr/share/applications/wine-wineboot.desktop
- /usr/share/applications/wine-winecfg.desktop
- /usr/share/applications/wine-winefile.desktop
- /usr/share/applications/wine-winemine.desktop
- /usr/share/applications/wine-wordpad.desktop
- /usr/share/applications/vifm.desktop
- /usr/share/applications/dosbox-staging.desktop
- /usr/share/applications/nvim.desktop
- /usr/share/applications/syncthing-start.desktop
- /usr/share/applications/syncthing-ui.desktop

View File

@ -0,0 +1,17 @@
- name: Set custom gnome binding {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/binding"
value: "{{ item.bind }}"
state: present
- name: Set custom gnome command {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/command"
value: "{{ item.command }}"
state: present
- name: Set custom gnome name {{ index }}
dconf:
key: "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom{{ index }}/name"
value: "{{ index }}"
state: present

View File

@ -0,0 +1,6 @@
- import_tasks: extensions.yml
tags: ["gnome-extensions"]
- import_tasks: keybinds.yml
tags: ["configs"]
- import_tasks: window-management.yml
tags: ["configs"]

View File

@ -0,0 +1,11 @@
- name: Install gnome extensions
include_role:
name: ansible-role-customize-gnome
vars:
# For now extensions aren't enabled (https://github.com/PeterMosmans/ansible-role-customize-gnome/issues/25)
gnome_extensions:
- id: 779 # https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator
- id: 4362 # https://github.com/Noobsai/fullscreen-avoider
- id: 1460 # https://github.com/corecoding/Vitals
- id: 7 # https://gitlab.gnome.org/GNOME/gnome-shell-extensions
gnome_user: "{{ user }}"

View File

@ -0,0 +1,62 @@
- name: Unset particular default gnome keybinds
dconf:
key: "{{ item }}"
value: [""]
state: present
loop:
- "/org/gnome/shell/keybindings/switch-to-application-1"
- "/org/gnome/shell/keybindings/switch-to-application-2"
- "/org/gnome/shell/keybindings/switch-to-application-3"
- "/org/gnome/shell/keybindings/switch-to-application-4"
- "/org/gnome/shell/keybindings/switch-to-application-5"
- "/org/gnome/desktop/wm/keybindings/switch-input-source"
- "/org/gnome/desktop/wm/keybindings/switch-input-source-backwards"
- "/org/gnome/settings-daemon/plugins/media-keys/screensaver"
- "/org/gnome/desktop/wm/keybindings/switch-applications"
- "/org/gnome/desktop/wm/keybindings/switch-applications-backward"
- "/org/gnome/desktop/wm/keybindings/switch-windows"
- "/org/gnome/desktop/wm/keybindings/switch-windows-backward"
- name: Change existing gnome keybinds
dconf:
key: "{{ item.key }}"
value: "{{ item.value }}"
state: present
loop:
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-1", value: ["<Super>1"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-2", value: ["<Super>2"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-3", value: ["<Super>3"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-4", value: ["<Super>4"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-5", value: ["<Super>5"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-1", value: ["<Super><Shift>1"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-2", value: ["<Super><Shift>2"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-3", value: ["<Super><Shift>3"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-4", value: ["<Super><Shift>4"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-5", value: ["<Super><Shift>5"]}
- {key: "/org/gnome/desktop/wm/keybindings/minimize", value: ["<Super>Space"]}
- {key: "/org/gnome/desktop/wm/keybindings/toggle-fullscreen", value: ["<Super>F"]}
- {key: "/org/gnome/desktop/wm/keybindings/close", value: ["<Super>Q"]}
- {key: "/org/gnome/desktop/wm/keybindings/maximize-horizontally", value: ["<Super><Shift>H"]}
- {key: "/org/gnome/desktop/wm/keybindings/maximize-vertically", value: ["<Super><Shift>V"]}
- {key: "/org/gnome/desktop/wm/keybindings/move-to-center", value: ["<Super>C"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-windows", value: ["<Super>Tab"]}
- {key: "/org/gnome/desktop/wm/keybindings/switch-windows-backward", value: ["<Super><Shift>Tab"]}
- {key: "/org/gnome/settings-daemon/plugins/media-keys/screensaver", value: ["<Super><Shift>L"]}
- name: Set custom gnome keybinds
include_tasks: _custom-bind.yml
loop:
- {command: "'gnome-terminal'", bind: "'<Super>Return'"}
- {command: "'firefox'", bind: "'<Super><Shift>B'"}
- {command: "'code'", bind: "'<Super><Shift>V'"}
loop_control:
index_var: index
# Gnome requires an array of strings with the custom keybinds
# this must match the number of keybinds defined above...
- name: Set custom-keybinds array
dconf:
key: /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings
value: "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/',
'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/',
'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/']"

View File

@ -0,0 +1,10 @@
- name: Set Static workspaces
dconf:
key: "/org/gnome/mutter/dynamic-workspaces"
value: "false"
- name: Set Number of workspaces
dconf:
key: "/org/gnome/desktop/wm/preferences/num-workspaces"
value: "5"

View File

@ -0,0 +1,51 @@
- name: Install desktop void packages
xbps:
name:
- xorg # X.org meta-package
- xterm # X Terminal Emulator
- alacritty # Cross-platform, GPU-accelerated terminal emulator
- mpv # Video player based on MPlayer/mplayer2
- python3-i3ipc # Improved Python library to control i3wm and sway
- xprop # Property displayer for X
- lxappearance # LXDE Theme Switcher
- blueman # GTK+ Bluetooth Manager
- xrandr # Primitive command line interface to RandR extension
- dunst # Lightweight and customizable notification daemon
- ffmpeg # Decoding, encoding and streaming software
- i3 # Improved tiling window manager
- i3status # Status bar generator for i3bar, dzen2, xmobar or similar programs
- nitrogen # Background browser and setter for X with support for Xinerama
- nvidia # NVIDIA drivers for linux - Libraries and Utilities
- nvidia-libs-32bit # NVIDIA drivers for linux - common libraries (32bit)
- pavucontrol # PulseAudio Volume Control
- polybar # Fast and easy-to-use status bar
- rofi # Window switcher, run dialog and dmenu replacement
- pcmanfm # LXDE file manager
- xclip # Command line interface to the X11 clipboard
- autorandr # Automatically select a display configuration based on connected devices
- xsel # Command-line getting and setting the contents of the X selection
- clipmenu # Clipboard management using dmenu
- nerd-fonts # Iconic font aggregator, collection and patcher
- xdotool # Command-line X11 automation tool
- flameshot # Powerful yet simple to use screenshot software for GNU/Linux
- system-config-printer # CUPS printer configuration tool and status applet
state: present
become: true
- name: Install desktop xbps-src packages
tags: ["src"]
include_tasks: ../include/xbps-src.yml
loop:
- package: rofi-rbw # Simplistic password typer/copier using rofi and wofi
repository: hostdir/binpkgs
- name: Install desktop flatpaks
flatpak:
name:
- org.mozilla.firefox # Mozilla Firefox web browser
- com.discordapp.Discord # VoIP and instant messaging social platform
- org.gimp.GIMP # Create images and edit photographs
- org.inkscape.Inkscape # Vector Graphics Editor
- com.github.tchx84.Flatseal # Manage Flatpak permissions
state: present
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: configs.yml
tags: ["configs"]
- import_tasks: packages.yml
tags: ["packages"]

View File

@ -0,0 +1,5 @@
- name: Setup nvm
tags: ["once"]
shell: >
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
creates=/home/{{ user }}/.nvm/nvm.sh

View File

@ -0,0 +1,25 @@
- name: Install development void packages
xbps:
name:
- python3 # Python programming language (3.11 series)
- python3-pip # A tool for installing and managing Python3 packages
- ripgrep # Fast search tool inspired by ag and grep
- fd # Simple, fast and user-friendly alternative to find
- lazygit # Simple terminal UI for git commands
- ruby-tmuxinator # Create and manage complex tmux sessions easily
- python3-pipenv # Python Development Workflow for Humans
- python3-devel # Python programming language (3.11 series) - development files
state: present
become: true
- name: Install development python packages
ansible.builtin.pip:
name:
- ansible-lint # Command-line tool for linting playbooks, roles and collections
- name: Install development flatpaks
flatpak:
name:
- com.vscodium.codium # Free/Libre Open Source Software Binaries of VS Code
state: present
become: true

View File

@ -0,0 +1,2 @@
- import_tasks: packages.yml
tags: ["packages"]

View File

@ -0,0 +1,8 @@
- name: Install engineering void packages
xbps:
name:
- freecad # General purpose 3D CAD modeler
state: present
become: true
- include_tasks: superslicer.yml # PrusaSlicer fork (which is a slic3r fork)

View File

@ -0,0 +1,6 @@
- name: Install SuperSlicer
include_tasks: ../include/download-github-bin.yml
loop:
- user: supermerill
repo: SuperSlicer
regex: "SuperSlicer-ubuntu_18.04-[0-9]"

View File

@ -0,0 +1,2 @@
- import_tasks: packages.yml
tags: ["packages"]

View File

@ -0,0 +1,13 @@
- name: Install gaming void packages
xbps:
name:
- libdrm-32bit # Userspace interface to kernel DRM services (32bit)
- libgcc-32bit # GNU Compiler Collection - GCC library (32bit)
- libstdc++-32bit # GNU Compiler Collection - Standard C++ Library (32bit)
- mesa-dri-32bit # Mesa DRI drivers (32bit)
- steam # Launcher for the Steam software distribution service
- lutris # Video game preservation platform
- gamemode # Optimize system performance for games on demand
- wine # A compatibility layer for windows applications
state: present
become: true

View File

@ -0,0 +1,16 @@
- name: Get {{ item.repo }} release information
uri:
url: https://api.github.com/repos/{{ item.user }}/{{ item.repo }}/releases/latest
return_content: true
register: repo_latest
- name: Install archived {{ item.repo }} - {{ repo_latest.json.tag_name }}
loop: "{{ repo_latest.json.assets }}"
when: "asset.name is regex(item.regex)"
unarchive:
src: "{{ asset.browser_download_url }}"
dest: /usr/local/bin
remote_src: true
loop_control:
loop_var: asset
become: true

View File

@ -0,0 +1,16 @@
- name: Get {{ item.repo }} release information
uri:
url: https://api.github.com/repos/{{ item.user }}/{{ item.repo }}/releases/latest
return_content: true
register: repo_latest
- name: Install un-archived {{ item.repo }} - {{ repo_latest.json.tag_name }}
loop: "{{ repo_latest.json.assets }}"
when: "asset.name is regex(item.regex)"
get_url:
url: "{{ asset.browser_download_url }}"
dest: /usr/local/bin/{{ item.repo }}
mode: 0775
loop_control:
loop_var: asset
become: true

View File

@ -0,0 +1,18 @@
- name: Check desktop file exists
ansible.builtin.stat:
path: "{{ item }}"
register: p
- name: Edit desktop file
ansible.builtin.lineinfile:
path: "{{ item }}"
insertafter: '^Type'
line: 'NoDisplay=true'
firstmatch: true
state: present
become: true
when: p.stat.exists
- debug:
msg: "Warning - {{ item }} does not exist"
when: p.stat.exists == False

View File

@ -0,0 +1,33 @@
- name: Clone or pull void-packages
ansible.builtin.git:
repo: 'https://github.com/starr-dusT/void-packages.git'
dest: /home/{{ user }}/git/void-packages
update: yes
register: git_return
- name: Bootstrap if newly cloned
ansible.builtin.command: ./xbps-src binary-bootstrap
args:
chdir: /home/{{ user }}/git/void-packages
when: not git_return.before
- name: Enable restricted if newly cloned
copy:
dest: /home/{{ user }}/git/void-packages/etc/conf
content: |
XBPS_ALLOW_RESTRICTED=yes
when: not git_return.before
- name: Package {{ item.package }} with xbps-src
ansible.builtin.command: ./xbps-src pkg {{ item.package }}
args:
chdir: /home/{{ user }}/git/void-packages
- name: Install packaged {{ item.package }}
expect:
command: xbps-install --repository {{ item.repository }} {{ item.package }}
responses:
continue: y
args:
chdir: /home/{{ user }}/git/void-packages
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]

View File

@ -0,0 +1,96 @@
- name: Create btrbk snapshot directories
block:
- file:
path: /.snapshots
state: directory
owner: root
group: root
mode: 0775
- file:
path: /home/.snapshots
state: directory
owner: root
group: root
mode: 0775
become: true
- name: Set git username and email
shell: |
git config --global user.email {{ git_email }}
git config --global user.name {{ git_user }}
- name: Stop system services
shell: |
rm -R /var/service/dhcpcd
ignore_errors: true
become: true
- name: Start system services
shell: |
ln -s /etc/sv/dbus /var/service
ln -s /etc/sv/polkitd /var/service
ln -s /etc/sv/elogind /var/service
ln -s /etc/sv/bluetoothd /var/service
ln -s /etc/sv/sshd /var/service
ln -s /etc/sv/libvirtd /var/service
ln -s /etc/sv/virtlockd /var/service
ln -s /etc/sv/virtlogd /var/service
ln -s /etc/sv/NetworkManager /var/service
ln -s /etc/sv/cupsd /var/service
ln -s /etc/sv/cups-browsed /var/service
ignore_errors: true
become: true
- name: Add {{ user }} to libvirt group
shell: |
gpasswd -a {{ user }} libvirt
become: true
- name: Setup user services
block:
- name: Create user folder
file:
path: /etc/sv/{{ user }}
state: directory
- name: Create user service file
copy:
dest: /etc/sv/{{ user }}/run
content: |
#!/bin/sh
USER="{{ user }}"
GROUPS="$(id -Gn "$USER" | tr ' ' ':')"
SVDIR="/home/${USER}/.service"
if [ -d ${SVDIR} ]; then
chpst -u"${USER}:${GROUPS}" runsvdir ${SVDIR}
fi
mode: 0755
- name: Enable user services
shell: |
ln -s /etc/sv/{{ user }} /var/service
ignore_errors: true
become: true
- name: Ensure user services folder exists
file:
path: /home/{{ user }}/.service
state: directory
mode: 0755
- name: Start syncthing as {{ user }}
block:
- name: Create syncthing folder
file:
path: /home/{{ user }}/.service/syncthing
state: directory
mode: 0755
- name: Create synthing run file
copy:
dest: /home/{{ user }}/.service/syncthing/run
content: |
#!/bin/sh
export HOME=/home/{{ user }}/
exec /usr/bin/syncthing > /dev/null 2>&1
mode: 0755

View File

@ -0,0 +1,54 @@
- name: Install system void repos
xbps:
name:
- void-repo-multilib # Void Linux drop-in file for the multilib repository
- void-repo-multilib-nonfree # Void Linux drop-in file for the multilib/nonfree repository
- void-repo-nonfree # Void Linux drop-in file for the nonfree repository
state: present
become: true
- name: Install system void packages
xbps:
name:
- git # Fast Version Control System
- git-lfs # Git extension for versioning large files
- syncthing # Continuous File Synchronization
- flatpak # Application deployment framework for desktop apps
- wireguard # Fast, modern, secure vpn tunnel
- wireguard-tools # Tool for wireguard
- cronie # Runs specified programs at scheduled times
- pipewire # Server and user space API to deal with multimedia pipelines
- libspa-bluetooth # Server and user space API to deal with multimedia pipelines - bluetooth plugins
- cifs-utils # CIFS filesystem user-space tools
- ansible # Simple deployment, configuration management and execution framework
- btrbk # Backup tool for btrfs subvolumes
- chezmoi # Manage your dotfiles across multiple machines, securely
- elogind # Standalone logind fork
- rsync # Remote fast incremental file transfer tool
- unzip # List, test and extract compressed files in a ZIP archive
- mimeo # Open files by MIME-type or file name using regular expressions
- busybox # Swiss Army Knife of Embedded Linux
- qemu # Open Source Processor Emulator
- libvirt # Virtualization API for controlling virtualization engines
- virt-manager # User interface for managing virtual machines
- bridge-utils # Layer2 ethernet bridging for Linux
- trash-cli # Command line interface to the freedesktop.org trashcan
- udiskie # Removable disk automounter using udisks
- curl # Client that groks URLs
- wget # GNU wget download utility
- NetworkManager # Network Management daemon
- network-manager-applet # NetworkManager panel applet for GNOME
- psensor # Graphical hardware temperature monitor for Linux
- upower # Abstraction for enumerating power devices
- android-udev-rules # Android udev rules list aimed to be the most comprehensive on the net
- cups # Common Unix Printing System
- hplip # HP Linux Imaging and Printing
state: present
become: true
- name: Add the flathub flatpak repository remote
flatpak_remote:
name: flathub
state: present
flatpakrepo_url: https://flathub.org/repo/flathub.flatpakrepo
become: true

View File

@ -0,0 +1,4 @@
- import_tasks: packages.yml
tags: ["packages"]
- import_tasks: configs.yml
tags: ["configs"]

View File

@ -0,0 +1,29 @@
- name: Make advcpmv directory
file:
path: /home/{{ user }}/tmp/advcpmv
state: directory
- name: Download advcpmv file
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/jarun/advcpmv/master/install.sh
dest: /home/{{ user }}/tmp/advcpmv/install.sh
- name: Compile advcp and advmv
command:
cmd: sh /home/{{ user }}/tmp/advcpmv/install.sh
creates: /home/{{ user }}/tmp/advcpmv/advcp
chdir: /home/{{ user }}/tmp/advcpmv
- name: Move advcp
copy:
src: /home/{{ user }}/tmp/advcpmv/advcp
dest: /usr/local/bin/cpg
mode: preserve
become: true
- name: Move advmv
copy:
src: /home/{{ user }}/tmp/advcpmv/advmv
dest: /usr/local/bin/mvg
mode: preserve
become: true

View File

@ -0,0 +1,10 @@
- name: change {{ user }} shell to zsh
user:
name: "{{ user }}"
shell: /bin/zsh
become: true
- name: Set rbw email
shell: |
rbw config set email {{ bitwarden_email }}

View File

@ -0,0 +1,6 @@
- name: Install nb
ansible.builtin.get_url:
url: https://raw.github.com/xwmx/nb/master/nb
dest: /usr/local/bin/nb
mode: 0755
become: true

View File

@ -0,0 +1,34 @@
- name: Install terminal void packages
xbps:
name:
- neovim # Vim-fork focused on extensibility and agility
- task # Command-line TODO list manager
- timewarrior # Timewarrior tracks and reports time
- python3-tasklib # Library for interacting with taskwarrior databases (Python3)
- vifm # Ncurses-based file manager with vi-like keybindings
- zsh # Z SHell
- tmux # Terminal Multiplexer
- nmap # Utility for network discovery and security auditing
- w3m # Text-based Web browser and pager (with Debian patches)
- lf # Terminal file manager
- khal # Command-line calendar build around CalDAV
- khard # Command-line addressbook built around CardDAV
- vdirsyncer # Synchronize calendars and addressbooks
- neofetch # Simple system information script
state: present
become: true
- name: Install terminal python packages
ansible.builtin.pip:
name:
- pynvim
- name: Install terminal xbps-src packages
tags: ["src"]
include_tasks: ../include/xbps-src.yml
loop:
- package: rbw # Unofficial command line client for bitwarden
repository: hostdir/binpkgs
- include_tasks: nb.yml # Command line and local web notetaking, bookmarking, archiving, and knowledge base application
- include_tasks: taskwarrior-tui.yml # Terminal User Interface (TUI) for Taskwarrior

View File

@ -0,0 +1,6 @@
- name: Install taskwarrior-tui
include_tasks: ../include/download-github-archive.yml
loop:
- user: kdheepak
repo: taskwarrior-tui
regex: unknown-linux-gnu.tar.gz

52
provision/void/jumpstart.sh Executable file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env bash
echo -e "Starting initial setup..."
CHEZDIR="/home/test/.local/share/chezmoi"
echo "Input email for bitwarden:"
read bitemail
# Install ansible python dependencies
sudo xbps-install -Syu -y
sudo xbps-install python3 python3-pip ansible -y
sudo pip install pexpect
# Install ansible extensions
ansible-galaxy install -r "$CHEZDIR/provision/requirements.yml"
# Run setup playbook
ansible-playbook "$CHEZDIR/provision/setup.yml" -i "$CHEZDIR/provision/hosts" --ask-become-pass
export PATH="$PATH:/usr/local/bin"
# Copy jumpstart scripts to temp bin dir and add to path
mkdir -p "$CHEZDIR/temp_bin"
cp "$CHEZDIR/home/bin/executable_rbw-get" "$CHEZDIR/temp_bin/rbw-get"
chmod +x "$CHEZDIR/temp_bin/rbw-get"
export PATH="$PATH:$CHEZDIR/temp_bin"
# Set bitwarden email
rbw config set email "$bitemail"
# Make temporary i3 gen file
mkdir -p "$CHEZDIR/home/.gen"
echo "{
\"disp_pri\": \"HDMI-0\",
\"disp_sec\": \"HDMI-0\"
}" > "$CHEZDIR/home/.gen/i3.json"
# initialize chezmoi
chezmoi init
# first chezmoi apply
chezmoi apply
# reboot!
read -p "You should reboot, but I won't make you. Reboot? " -n 1 -r
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
sudo reboot

32
provision/void/readme.md Normal file
View File

@ -0,0 +1,32 @@
# Dotfiles
> My dotfiles... What do you want?
My personal dotfiles repo. Documentation is pretty spotty. Maybe I'll fix that someday, but I probably won't.
## Usage
Dotfiles are managed with chezmoi and Ansible (built for Void) is used for the bulk of configuration.
## Initial Setup
Install Void with BTRFS and run the following commands:
```bash
sudo xbps-install -Syu -y
sudo xbps-install -S vim git chezmoi -y
git clone https://github.com/starr-dusT/dotfiles ~/.local/share/chezmoi
```
Copy `.chezmoidata.yaml.example` to `.chezmoidata.yaml` and edit with desired settings then run the following commands:
```bash
~/.local/share/chezmoi/jumpstart.sh
```
After reboot log into window manager and run `linux-monitor`, follow the prompts, reapply chezmoi config, and restart the window manager.
Perform additional setup found in [additional-setup](additional-setup.md)
## Update Setup
`void-update` command updates the system with ansible. Run `void-update -h` for information on usage.