From 3ba0f3c1fa1469d68a92795d5cebcb7834ad5265 Mon Sep 17 00:00:00 2001 From: Tyler Starr Date: Sun, 30 Apr 2023 20:47:19 -0700 Subject: [PATCH] remove submodules and add to main project --- .gitmodules | 7 - provision/fedora | 1 - provision/fedora/additional-setup.md | 188 ++++++++++++++++++ provision/fedora/ansible/hosts | 1 + provision/fedora/ansible/requirements.yml | 8 + provision/fedora/ansible/setup.yml | 13 ++ .../fedora/ansible/tasks/desktop/_main.yml | 7 + .../fedora/ansible/tasks/desktop/configs.yml | 41 ++++ .../desktop/gnome-settings/_custom-bind.yml | 17 ++ .../tasks/desktop/gnome-settings/_main.yml | 6 + .../desktop/gnome-settings/extensions.yml | 11 + .../tasks/desktop/gnome-settings/keybinds.yml | 62 ++++++ .../gnome-settings/window-management.yml | 10 + .../fedora/ansible/tasks/desktop/packages.yml | 25 +++ .../ansible/tasks/development/_main.yml | 4 + .../ansible/tasks/development/configs.yml | 5 + .../ansible/tasks/development/packages.yml | 43 ++++ .../ansible/tasks/engineering/.placeholder | 0 .../ansible/tasks/engineering/_main.yml | 2 + .../ansible/tasks/engineering/packages.yml | 9 + .../ansible/tasks/engineering/superslicer.yml | 6 + .../fedora/ansible/tasks/gaming/_main.yml | 2 + .../fedora/ansible/tasks/gaming/packages.yml | 9 + .../tasks/include/download-github-archive.yml | 16 ++ .../tasks/include/download-github-bin.yml | 16 ++ .../ansible/tasks/include/hide-desktop.yml | 18 ++ .../fedora/ansible/tasks/include/xbps-src.yml | 33 +++ .../fedora/ansible/tasks/system/_main.yml | 4 + .../fedora/ansible/tasks/system/configs.yml | 20 ++ .../fedora/ansible/tasks/system/packages.yml | 57 ++++++ .../fedora/ansible/tasks/terminal/_main.yml | 4 + .../fedora/ansible/tasks/terminal/configs.yml | 12 ++ .../ansible/tasks/terminal/packages.yml | 45 +++++ provision/fedora/checklist.md | 18 ++ provision/fedora/jumpstart.sh | 54 +++++ provision/fedora/readme.md | 33 +++ provision/void | 1 - provision/void/additional-setup.md | 103 ++++++++++ provision/void/ansible/hosts | 1 + provision/void/ansible/requirements.yml | 8 + provision/void/ansible/setup.yml | 14 ++ .../void/ansible/tasks/desktop/_main.yml | 7 + .../void/ansible/tasks/desktop/configs.yml | 19 ++ .../desktop/gnome-settings/_custom-bind.yml | 17 ++ .../tasks/desktop/gnome-settings/_main.yml | 6 + .../desktop/gnome-settings/extensions.yml | 11 + .../tasks/desktop/gnome-settings/keybinds.yml | 62 ++++++ .../gnome-settings/window-management.yml | 10 + .../void/ansible/tasks/desktop/packages.yml | 51 +++++ .../void/ansible/tasks/development/_main.yml | 4 + .../ansible/tasks/development/configs.yml | 5 + .../ansible/tasks/development/packages.yml | 25 +++ .../ansible/tasks/engineering/.placeholder | 0 .../void/ansible/tasks/engineering/_main.yml | 2 + .../ansible/tasks/engineering/packages.yml | 8 + .../ansible/tasks/engineering/superslicer.yml | 6 + provision/void/ansible/tasks/gaming/_main.yml | 2 + .../void/ansible/tasks/gaming/packages.yml | 13 ++ .../tasks/include/download-github-archive.yml | 16 ++ .../tasks/include/download-github-bin.yml | 16 ++ .../ansible/tasks/include/hide-desktop.yml | 18 ++ .../void/ansible/tasks/include/xbps-src.yml | 33 +++ provision/void/ansible/tasks/system/_main.yml | 4 + .../void/ansible/tasks/system/configs.yml | 96 +++++++++ .../void/ansible/tasks/system/packages.yml | 54 +++++ .../void/ansible/tasks/terminal/_main.yml | 4 + .../void/ansible/tasks/terminal/advcpmv.yml | 29 +++ .../void/ansible/tasks/terminal/configs.yml | 10 + provision/void/ansible/tasks/terminal/nb.yml | 6 + .../void/ansible/tasks/terminal/packages.yml | 34 ++++ .../tasks/terminal/taskwarrior-tui.yml | 6 + provision/void/jumpstart.sh | 52 +++++ provision/void/readme.md | 32 +++ 73 files changed, 1583 insertions(+), 9 deletions(-) delete mode 100644 .gitmodules delete mode 160000 provision/fedora create mode 100644 provision/fedora/additional-setup.md create mode 100644 provision/fedora/ansible/hosts create mode 100644 provision/fedora/ansible/requirements.yml create mode 100644 provision/fedora/ansible/setup.yml create mode 100644 provision/fedora/ansible/tasks/desktop/_main.yml create mode 100644 provision/fedora/ansible/tasks/desktop/configs.yml create mode 100644 provision/fedora/ansible/tasks/desktop/gnome-settings/_custom-bind.yml create mode 100644 provision/fedora/ansible/tasks/desktop/gnome-settings/_main.yml create mode 100644 provision/fedora/ansible/tasks/desktop/gnome-settings/extensions.yml create mode 100644 provision/fedora/ansible/tasks/desktop/gnome-settings/keybinds.yml create mode 100644 provision/fedora/ansible/tasks/desktop/gnome-settings/window-management.yml create mode 100644 provision/fedora/ansible/tasks/desktop/packages.yml create mode 100644 provision/fedora/ansible/tasks/development/_main.yml create mode 100644 provision/fedora/ansible/tasks/development/configs.yml create mode 100644 provision/fedora/ansible/tasks/development/packages.yml create mode 100644 provision/fedora/ansible/tasks/engineering/.placeholder create mode 100644 provision/fedora/ansible/tasks/engineering/_main.yml create mode 100644 provision/fedora/ansible/tasks/engineering/packages.yml create mode 100644 provision/fedora/ansible/tasks/engineering/superslicer.yml create mode 100644 provision/fedora/ansible/tasks/gaming/_main.yml create mode 100644 provision/fedora/ansible/tasks/gaming/packages.yml create mode 100644 provision/fedora/ansible/tasks/include/download-github-archive.yml create mode 100644 provision/fedora/ansible/tasks/include/download-github-bin.yml create mode 100644 provision/fedora/ansible/tasks/include/hide-desktop.yml create mode 100644 provision/fedora/ansible/tasks/include/xbps-src.yml create mode 100644 provision/fedora/ansible/tasks/system/_main.yml create mode 100644 provision/fedora/ansible/tasks/system/configs.yml create mode 100644 provision/fedora/ansible/tasks/system/packages.yml create mode 100644 provision/fedora/ansible/tasks/terminal/_main.yml create mode 100644 provision/fedora/ansible/tasks/terminal/configs.yml create mode 100644 provision/fedora/ansible/tasks/terminal/packages.yml create mode 100644 provision/fedora/checklist.md create mode 100755 provision/fedora/jumpstart.sh create mode 100644 provision/fedora/readme.md delete mode 160000 provision/void create mode 100644 provision/void/additional-setup.md create mode 100644 provision/void/ansible/hosts create mode 100644 provision/void/ansible/requirements.yml create mode 100644 provision/void/ansible/setup.yml create mode 100644 provision/void/ansible/tasks/desktop/_main.yml create mode 100644 provision/void/ansible/tasks/desktop/configs.yml create mode 100644 provision/void/ansible/tasks/desktop/gnome-settings/_custom-bind.yml create mode 100644 provision/void/ansible/tasks/desktop/gnome-settings/_main.yml create mode 100644 provision/void/ansible/tasks/desktop/gnome-settings/extensions.yml create mode 100644 provision/void/ansible/tasks/desktop/gnome-settings/keybinds.yml create mode 100644 provision/void/ansible/tasks/desktop/gnome-settings/window-management.yml create mode 100644 provision/void/ansible/tasks/desktop/packages.yml create mode 100644 provision/void/ansible/tasks/development/_main.yml create mode 100644 provision/void/ansible/tasks/development/configs.yml create mode 100644 provision/void/ansible/tasks/development/packages.yml create mode 100644 provision/void/ansible/tasks/engineering/.placeholder create mode 100644 provision/void/ansible/tasks/engineering/_main.yml create mode 100644 provision/void/ansible/tasks/engineering/packages.yml create mode 100644 provision/void/ansible/tasks/engineering/superslicer.yml create mode 100644 provision/void/ansible/tasks/gaming/_main.yml create mode 100644 provision/void/ansible/tasks/gaming/packages.yml create mode 100644 provision/void/ansible/tasks/include/download-github-archive.yml create mode 100644 provision/void/ansible/tasks/include/download-github-bin.yml create mode 100644 provision/void/ansible/tasks/include/hide-desktop.yml create mode 100644 provision/void/ansible/tasks/include/xbps-src.yml create mode 100644 provision/void/ansible/tasks/system/_main.yml create mode 100644 provision/void/ansible/tasks/system/configs.yml create mode 100644 provision/void/ansible/tasks/system/packages.yml create mode 100644 provision/void/ansible/tasks/terminal/_main.yml create mode 100644 provision/void/ansible/tasks/terminal/advcpmv.yml create mode 100644 provision/void/ansible/tasks/terminal/configs.yml create mode 100644 provision/void/ansible/tasks/terminal/nb.yml create mode 100644 provision/void/ansible/tasks/terminal/packages.yml create mode 100644 provision/void/ansible/tasks/terminal/taskwarrior-tui.yml create mode 100755 provision/void/jumpstart.sh create mode 100644 provision/void/readme.md diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 1c4ff202..00000000 --- a/.gitmodules +++ /dev/null @@ -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 diff --git a/provision/fedora b/provision/fedora deleted file mode 160000 index 688d5d33..00000000 --- a/provision/fedora +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 688d5d33ca6f0d0aa975d30b65900a0a357c7400 diff --git a/provision/fedora/additional-setup.md b/provision/fedora/additional-setup.md new file mode 100644 index 00000000..6807b4d9 --- /dev/null +++ b/provision/fedora/additional-setup.md @@ -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= /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= /.snapshots btrfs subvol=.snapshots,compress=zstd:1 0 0 +# 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 +``` +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- +``` + +## 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//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 +``` diff --git a/provision/fedora/ansible/hosts b/provision/fedora/ansible/hosts new file mode 100644 index 00000000..943f1a99 --- /dev/null +++ b/provision/fedora/ansible/hosts @@ -0,0 +1 @@ +local ansible_connection=local ansible_python_interpreter=/usr/bin/python3 diff --git a/provision/fedora/ansible/requirements.yml b/provision/fedora/ansible/requirements.yml new file mode 100644 index 00000000..679b1728 --- /dev/null +++ b/provision/fedora/ansible/requirements.yml @@ -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 diff --git a/provision/fedora/ansible/setup.yml b/provision/fedora/ansible/setup.yml new file mode 100644 index 00000000..7c0dbb21 --- /dev/null +++ b/provision/fedora/ansible/setup.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/desktop/_main.yml b/provision/fedora/ansible/tasks/desktop/_main.yml new file mode 100644 index 00000000..b5e1f9cc --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/_main.yml @@ -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" diff --git a/provision/fedora/ansible/tasks/desktop/configs.yml b/provision/fedora/ansible/tasks/desktop/configs.yml new file mode 100644 index 00000000..0ae33d9a --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/configs.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/desktop/gnome-settings/_custom-bind.yml b/provision/fedora/ansible/tasks/desktop/gnome-settings/_custom-bind.yml new file mode 100644 index 00000000..c978984b --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/gnome-settings/_custom-bind.yml @@ -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 \ No newline at end of file diff --git a/provision/fedora/ansible/tasks/desktop/gnome-settings/_main.yml b/provision/fedora/ansible/tasks/desktop/gnome-settings/_main.yml new file mode 100644 index 00000000..230bc368 --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/gnome-settings/_main.yml @@ -0,0 +1,6 @@ +- import_tasks: extensions.yml + tags: ["gnome-extensions"] +- import_tasks: keybinds.yml + tags: ["configs"] +- import_tasks: window-management.yml + tags: ["configs"] diff --git a/provision/fedora/ansible/tasks/desktop/gnome-settings/extensions.yml b/provision/fedora/ansible/tasks/desktop/gnome-settings/extensions.yml new file mode 100644 index 00000000..2a51427d --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/gnome-settings/extensions.yml @@ -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 }}" diff --git a/provision/fedora/ansible/tasks/desktop/gnome-settings/keybinds.yml b/provision/fedora/ansible/tasks/desktop/gnome-settings/keybinds.yml new file mode 100644 index 00000000..97bbed13 --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/gnome-settings/keybinds.yml @@ -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: ["1"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-2", value: ["2"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-3", value: ["3"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-4", value: ["4"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-5", value: ["5"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-1", value: ["1"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-2", value: ["2"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-3", value: ["3"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-4", value: ["4"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-5", value: ["5"]} + - {key: "/org/gnome/desktop/wm/keybindings/minimize", value: ["Space"]} + - {key: "/org/gnome/desktop/wm/keybindings/toggle-fullscreen", value: ["F"]} + - {key: "/org/gnome/desktop/wm/keybindings/close", value: ["Q"]} + - {key: "/org/gnome/desktop/wm/keybindings/maximize-horizontally", value: ["H"]} + - {key: "/org/gnome/desktop/wm/keybindings/maximize-vertically", value: ["V"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-center", value: ["C"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-windows", value: ["Tab"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-windows-backward", value: ["Tab"]} + - {key: "/org/gnome/settings-daemon/plugins/media-keys/screensaver", value: ["L"]} + +- name: Set custom gnome keybinds + include_tasks: _custom-bind.yml + loop: + - {command: "'gnome-terminal'", bind: "'Return'"} + - {command: "'firefox'", bind: "'B'"} + - {command: "'code'", bind: "'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/']" \ No newline at end of file diff --git a/provision/fedora/ansible/tasks/desktop/gnome-settings/window-management.yml b/provision/fedora/ansible/tasks/desktop/gnome-settings/window-management.yml new file mode 100644 index 00000000..29800bdb --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/gnome-settings/window-management.yml @@ -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" \ No newline at end of file diff --git a/provision/fedora/ansible/tasks/desktop/packages.yml b/provision/fedora/ansible/tasks/desktop/packages.yml new file mode 100644 index 00000000..f669a3fa --- /dev/null +++ b/provision/fedora/ansible/tasks/desktop/packages.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/development/_main.yml b/provision/fedora/ansible/tasks/development/_main.yml new file mode 100644 index 00000000..b527d4d1 --- /dev/null +++ b/provision/fedora/ansible/tasks/development/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: packages.yml + tags: ["packages"] +- import_tasks: configs.yml + tags: ["configs"] diff --git a/provision/fedora/ansible/tasks/development/configs.yml b/provision/fedora/ansible/tasks/development/configs.yml new file mode 100644 index 00000000..50da50e7 --- /dev/null +++ b/provision/fedora/ansible/tasks/development/configs.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/development/packages.yml b/provision/fedora/ansible/tasks/development/packages.yml new file mode 100644 index 00000000..87b3a70c --- /dev/null +++ b/provision/fedora/ansible/tasks/development/packages.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/engineering/.placeholder b/provision/fedora/ansible/tasks/engineering/.placeholder new file mode 100644 index 00000000..e69de29b diff --git a/provision/fedora/ansible/tasks/engineering/_main.yml b/provision/fedora/ansible/tasks/engineering/_main.yml new file mode 100644 index 00000000..68d12ab3 --- /dev/null +++ b/provision/fedora/ansible/tasks/engineering/_main.yml @@ -0,0 +1,2 @@ +- import_tasks: packages.yml + tags: ["packages"] diff --git a/provision/fedora/ansible/tasks/engineering/packages.yml b/provision/fedora/ansible/tasks/engineering/packages.yml new file mode 100644 index 00000000..98f6c42b --- /dev/null +++ b/provision/fedora/ansible/tasks/engineering/packages.yml @@ -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) diff --git a/provision/fedora/ansible/tasks/engineering/superslicer.yml b/provision/fedora/ansible/tasks/engineering/superslicer.yml new file mode 100644 index 00000000..583ba256 --- /dev/null +++ b/provision/fedora/ansible/tasks/engineering/superslicer.yml @@ -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]" diff --git a/provision/fedora/ansible/tasks/gaming/_main.yml b/provision/fedora/ansible/tasks/gaming/_main.yml new file mode 100644 index 00000000..9c7cb124 --- /dev/null +++ b/provision/fedora/ansible/tasks/gaming/_main.yml @@ -0,0 +1,2 @@ +- import_tasks: packages.yml + tags: ["packages"] \ No newline at end of file diff --git a/provision/fedora/ansible/tasks/gaming/packages.yml b/provision/fedora/ansible/tasks/gaming/packages.yml new file mode 100644 index 00000000..3d405cb9 --- /dev/null +++ b/provision/fedora/ansible/tasks/gaming/packages.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/include/download-github-archive.yml b/provision/fedora/ansible/tasks/include/download-github-archive.yml new file mode 100644 index 00000000..eb14e9e3 --- /dev/null +++ b/provision/fedora/ansible/tasks/include/download-github-archive.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/include/download-github-bin.yml b/provision/fedora/ansible/tasks/include/download-github-bin.yml new file mode 100644 index 00000000..cfc909c0 --- /dev/null +++ b/provision/fedora/ansible/tasks/include/download-github-bin.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/include/hide-desktop.yml b/provision/fedora/ansible/tasks/include/hide-desktop.yml new file mode 100644 index 00000000..9e7f2d9d --- /dev/null +++ b/provision/fedora/ansible/tasks/include/hide-desktop.yml @@ -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 \ No newline at end of file diff --git a/provision/fedora/ansible/tasks/include/xbps-src.yml b/provision/fedora/ansible/tasks/include/xbps-src.yml new file mode 100644 index 00000000..4892b389 --- /dev/null +++ b/provision/fedora/ansible/tasks/include/xbps-src.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/system/_main.yml b/provision/fedora/ansible/tasks/system/_main.yml new file mode 100644 index 00000000..b527d4d1 --- /dev/null +++ b/provision/fedora/ansible/tasks/system/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: packages.yml + tags: ["packages"] +- import_tasks: configs.yml + tags: ["configs"] diff --git a/provision/fedora/ansible/tasks/system/configs.yml b/provision/fedora/ansible/tasks/system/configs.yml new file mode 100644 index 00000000..773780fd --- /dev/null +++ b/provision/fedora/ansible/tasks/system/configs.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/system/packages.yml b/provision/fedora/ansible/tasks/system/packages.yml new file mode 100644 index 00000000..c749b32c --- /dev/null +++ b/provision/fedora/ansible/tasks/system/packages.yml @@ -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 diff --git a/provision/fedora/ansible/tasks/terminal/_main.yml b/provision/fedora/ansible/tasks/terminal/_main.yml new file mode 100644 index 00000000..b527d4d1 --- /dev/null +++ b/provision/fedora/ansible/tasks/terminal/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: packages.yml + tags: ["packages"] +- import_tasks: configs.yml + tags: ["configs"] diff --git a/provision/fedora/ansible/tasks/terminal/configs.yml b/provision/fedora/ansible/tasks/terminal/configs.yml new file mode 100644 index 00000000..d3de9505 --- /dev/null +++ b/provision/fedora/ansible/tasks/terminal/configs.yml @@ -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 }} + diff --git a/provision/fedora/ansible/tasks/terminal/packages.yml b/provision/fedora/ansible/tasks/terminal/packages.yml new file mode 100644 index 00000000..d4ca76d3 --- /dev/null +++ b/provision/fedora/ansible/tasks/terminal/packages.yml @@ -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 diff --git a/provision/fedora/checklist.md b/provision/fedora/checklist.md new file mode 100644 index 00000000..a9159575 --- /dev/null +++ b/provision/fedora/checklist.md @@ -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 diff --git a/provision/fedora/jumpstart.sh b/provision/fedora/jumpstart.sh new file mode 100755 index 00000000..b372a845 --- /dev/null +++ b/provision/fedora/jumpstart.sh @@ -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 diff --git a/provision/fedora/readme.md b/provision/fedora/readme.md new file mode 100644 index 00000000..812b9ba8 --- /dev/null +++ b/provision/fedora/readme.md @@ -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. diff --git a/provision/void b/provision/void deleted file mode 160000 index d9783fda..00000000 --- a/provision/void +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d9783fda8f590c18df7632fe43573a45f9121086 diff --git a/provision/void/additional-setup.md b/provision/void/additional-setup.md new file mode 100644 index 00000000..04fabf63 --- /dev/null +++ b/provision/void/additional-setup.md @@ -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 +``` +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/ +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- +``` + +## 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 https://github.com/starr-dusT/nb +``` diff --git a/provision/void/ansible/hosts b/provision/void/ansible/hosts new file mode 100644 index 00000000..943f1a99 --- /dev/null +++ b/provision/void/ansible/hosts @@ -0,0 +1 @@ +local ansible_connection=local ansible_python_interpreter=/usr/bin/python3 diff --git a/provision/void/ansible/requirements.yml b/provision/void/ansible/requirements.yml new file mode 100644 index 00000000..679b1728 --- /dev/null +++ b/provision/void/ansible/requirements.yml @@ -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 diff --git a/provision/void/ansible/setup.yml b/provision/void/ansible/setup.yml new file mode 100644 index 00000000..9fcc36d0 --- /dev/null +++ b/provision/void/ansible/setup.yml @@ -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 + diff --git a/provision/void/ansible/tasks/desktop/_main.yml b/provision/void/ansible/tasks/desktop/_main.yml new file mode 100644 index 00000000..d9219fda --- /dev/null +++ b/provision/void/ansible/tasks/desktop/_main.yml @@ -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" diff --git a/provision/void/ansible/tasks/desktop/configs.yml b/provision/void/ansible/tasks/desktop/configs.yml new file mode 100644 index 00000000..6ba2b866 --- /dev/null +++ b/provision/void/ansible/tasks/desktop/configs.yml @@ -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 diff --git a/provision/void/ansible/tasks/desktop/gnome-settings/_custom-bind.yml b/provision/void/ansible/tasks/desktop/gnome-settings/_custom-bind.yml new file mode 100644 index 00000000..c978984b --- /dev/null +++ b/provision/void/ansible/tasks/desktop/gnome-settings/_custom-bind.yml @@ -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 \ No newline at end of file diff --git a/provision/void/ansible/tasks/desktop/gnome-settings/_main.yml b/provision/void/ansible/tasks/desktop/gnome-settings/_main.yml new file mode 100644 index 00000000..230bc368 --- /dev/null +++ b/provision/void/ansible/tasks/desktop/gnome-settings/_main.yml @@ -0,0 +1,6 @@ +- import_tasks: extensions.yml + tags: ["gnome-extensions"] +- import_tasks: keybinds.yml + tags: ["configs"] +- import_tasks: window-management.yml + tags: ["configs"] diff --git a/provision/void/ansible/tasks/desktop/gnome-settings/extensions.yml b/provision/void/ansible/tasks/desktop/gnome-settings/extensions.yml new file mode 100644 index 00000000..2a51427d --- /dev/null +++ b/provision/void/ansible/tasks/desktop/gnome-settings/extensions.yml @@ -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 }}" diff --git a/provision/void/ansible/tasks/desktop/gnome-settings/keybinds.yml b/provision/void/ansible/tasks/desktop/gnome-settings/keybinds.yml new file mode 100644 index 00000000..97bbed13 --- /dev/null +++ b/provision/void/ansible/tasks/desktop/gnome-settings/keybinds.yml @@ -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: ["1"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-2", value: ["2"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-3", value: ["3"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-4", value: ["4"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-to-workspace-5", value: ["5"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-1", value: ["1"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-2", value: ["2"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-3", value: ["3"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-4", value: ["4"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-workspace-5", value: ["5"]} + - {key: "/org/gnome/desktop/wm/keybindings/minimize", value: ["Space"]} + - {key: "/org/gnome/desktop/wm/keybindings/toggle-fullscreen", value: ["F"]} + - {key: "/org/gnome/desktop/wm/keybindings/close", value: ["Q"]} + - {key: "/org/gnome/desktop/wm/keybindings/maximize-horizontally", value: ["H"]} + - {key: "/org/gnome/desktop/wm/keybindings/maximize-vertically", value: ["V"]} + - {key: "/org/gnome/desktop/wm/keybindings/move-to-center", value: ["C"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-windows", value: ["Tab"]} + - {key: "/org/gnome/desktop/wm/keybindings/switch-windows-backward", value: ["Tab"]} + - {key: "/org/gnome/settings-daemon/plugins/media-keys/screensaver", value: ["L"]} + +- name: Set custom gnome keybinds + include_tasks: _custom-bind.yml + loop: + - {command: "'gnome-terminal'", bind: "'Return'"} + - {command: "'firefox'", bind: "'B'"} + - {command: "'code'", bind: "'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/']" \ No newline at end of file diff --git a/provision/void/ansible/tasks/desktop/gnome-settings/window-management.yml b/provision/void/ansible/tasks/desktop/gnome-settings/window-management.yml new file mode 100644 index 00000000..29800bdb --- /dev/null +++ b/provision/void/ansible/tasks/desktop/gnome-settings/window-management.yml @@ -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" \ No newline at end of file diff --git a/provision/void/ansible/tasks/desktop/packages.yml b/provision/void/ansible/tasks/desktop/packages.yml new file mode 100644 index 00000000..edc0a296 --- /dev/null +++ b/provision/void/ansible/tasks/desktop/packages.yml @@ -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 diff --git a/provision/void/ansible/tasks/development/_main.yml b/provision/void/ansible/tasks/development/_main.yml new file mode 100644 index 00000000..3ee4a789 --- /dev/null +++ b/provision/void/ansible/tasks/development/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: configs.yml + tags: ["configs"] +- import_tasks: packages.yml + tags: ["packages"] \ No newline at end of file diff --git a/provision/void/ansible/tasks/development/configs.yml b/provision/void/ansible/tasks/development/configs.yml new file mode 100644 index 00000000..50da50e7 --- /dev/null +++ b/provision/void/ansible/tasks/development/configs.yml @@ -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 diff --git a/provision/void/ansible/tasks/development/packages.yml b/provision/void/ansible/tasks/development/packages.yml new file mode 100644 index 00000000..38c2ce07 --- /dev/null +++ b/provision/void/ansible/tasks/development/packages.yml @@ -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 diff --git a/provision/void/ansible/tasks/engineering/.placeholder b/provision/void/ansible/tasks/engineering/.placeholder new file mode 100644 index 00000000..e69de29b diff --git a/provision/void/ansible/tasks/engineering/_main.yml b/provision/void/ansible/tasks/engineering/_main.yml new file mode 100644 index 00000000..68d12ab3 --- /dev/null +++ b/provision/void/ansible/tasks/engineering/_main.yml @@ -0,0 +1,2 @@ +- import_tasks: packages.yml + tags: ["packages"] diff --git a/provision/void/ansible/tasks/engineering/packages.yml b/provision/void/ansible/tasks/engineering/packages.yml new file mode 100644 index 00000000..b240c5fb --- /dev/null +++ b/provision/void/ansible/tasks/engineering/packages.yml @@ -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) diff --git a/provision/void/ansible/tasks/engineering/superslicer.yml b/provision/void/ansible/tasks/engineering/superslicer.yml new file mode 100644 index 00000000..583ba256 --- /dev/null +++ b/provision/void/ansible/tasks/engineering/superslicer.yml @@ -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]" diff --git a/provision/void/ansible/tasks/gaming/_main.yml b/provision/void/ansible/tasks/gaming/_main.yml new file mode 100644 index 00000000..9c7cb124 --- /dev/null +++ b/provision/void/ansible/tasks/gaming/_main.yml @@ -0,0 +1,2 @@ +- import_tasks: packages.yml + tags: ["packages"] \ No newline at end of file diff --git a/provision/void/ansible/tasks/gaming/packages.yml b/provision/void/ansible/tasks/gaming/packages.yml new file mode 100644 index 00000000..ccbf76d2 --- /dev/null +++ b/provision/void/ansible/tasks/gaming/packages.yml @@ -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 diff --git a/provision/void/ansible/tasks/include/download-github-archive.yml b/provision/void/ansible/tasks/include/download-github-archive.yml new file mode 100644 index 00000000..eb14e9e3 --- /dev/null +++ b/provision/void/ansible/tasks/include/download-github-archive.yml @@ -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 diff --git a/provision/void/ansible/tasks/include/download-github-bin.yml b/provision/void/ansible/tasks/include/download-github-bin.yml new file mode 100644 index 00000000..cfc909c0 --- /dev/null +++ b/provision/void/ansible/tasks/include/download-github-bin.yml @@ -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 diff --git a/provision/void/ansible/tasks/include/hide-desktop.yml b/provision/void/ansible/tasks/include/hide-desktop.yml new file mode 100644 index 00000000..9e7f2d9d --- /dev/null +++ b/provision/void/ansible/tasks/include/hide-desktop.yml @@ -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 \ No newline at end of file diff --git a/provision/void/ansible/tasks/include/xbps-src.yml b/provision/void/ansible/tasks/include/xbps-src.yml new file mode 100644 index 00000000..4892b389 --- /dev/null +++ b/provision/void/ansible/tasks/include/xbps-src.yml @@ -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 diff --git a/provision/void/ansible/tasks/system/_main.yml b/provision/void/ansible/tasks/system/_main.yml new file mode 100644 index 00000000..b527d4d1 --- /dev/null +++ b/provision/void/ansible/tasks/system/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: packages.yml + tags: ["packages"] +- import_tasks: configs.yml + tags: ["configs"] diff --git a/provision/void/ansible/tasks/system/configs.yml b/provision/void/ansible/tasks/system/configs.yml new file mode 100644 index 00000000..59514a7c --- /dev/null +++ b/provision/void/ansible/tasks/system/configs.yml @@ -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 diff --git a/provision/void/ansible/tasks/system/packages.yml b/provision/void/ansible/tasks/system/packages.yml new file mode 100644 index 00000000..744a2406 --- /dev/null +++ b/provision/void/ansible/tasks/system/packages.yml @@ -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 diff --git a/provision/void/ansible/tasks/terminal/_main.yml b/provision/void/ansible/tasks/terminal/_main.yml new file mode 100644 index 00000000..b527d4d1 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/_main.yml @@ -0,0 +1,4 @@ +- import_tasks: packages.yml + tags: ["packages"] +- import_tasks: configs.yml + tags: ["configs"] diff --git a/provision/void/ansible/tasks/terminal/advcpmv.yml b/provision/void/ansible/tasks/terminal/advcpmv.yml new file mode 100644 index 00000000..b3871793 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/advcpmv.yml @@ -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 diff --git a/provision/void/ansible/tasks/terminal/configs.yml b/provision/void/ansible/tasks/terminal/configs.yml new file mode 100644 index 00000000..2bed2f40 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/configs.yml @@ -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 }} diff --git a/provision/void/ansible/tasks/terminal/nb.yml b/provision/void/ansible/tasks/terminal/nb.yml new file mode 100644 index 00000000..fd296970 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/nb.yml @@ -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 diff --git a/provision/void/ansible/tasks/terminal/packages.yml b/provision/void/ansible/tasks/terminal/packages.yml new file mode 100644 index 00000000..4e08a4f2 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/packages.yml @@ -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 note‑taking, bookmarking, archiving, and knowledge base application +- include_tasks: taskwarrior-tui.yml # Terminal User Interface (TUI) for Taskwarrior diff --git a/provision/void/ansible/tasks/terminal/taskwarrior-tui.yml b/provision/void/ansible/tasks/terminal/taskwarrior-tui.yml new file mode 100644 index 00000000..3e8a3c23 --- /dev/null +++ b/provision/void/ansible/tasks/terminal/taskwarrior-tui.yml @@ -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 diff --git a/provision/void/jumpstart.sh b/provision/void/jumpstart.sh new file mode 100755 index 00000000..7faee291 --- /dev/null +++ b/provision/void/jumpstart.sh @@ -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 + diff --git a/provision/void/readme.md b/provision/void/readme.md new file mode 100644 index 00000000..a9c18b3a --- /dev/null +++ b/provision/void/readme.md @@ -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.