Compare commits
176 Commits
6c7265d1d3
...
pixelbook
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06de3fb0ac | ||
|
|
eaa05e13d0 | ||
|
|
98f6ca10ff | ||
|
|
675652044f | ||
|
|
c901defbf3 | ||
|
|
8bf7b7d489 | ||
|
|
6e772f1137 | ||
|
|
d7f99659f1 | ||
|
|
023e362896 | ||
|
|
c66327a31f | ||
|
|
423d057abd | ||
|
|
6061f61c16 | ||
|
|
f6bc39a7fb | ||
|
|
68e84fdd77 | ||
|
|
48bdb12e77 | ||
|
|
ec72d20455 | ||
|
|
7f47b1ca1b | ||
|
|
5fcb37591c | ||
|
|
3f0b8162b8 | ||
|
|
b90ec542de | ||
|
|
16b7a200de | ||
|
|
e3e7de8eb1 | ||
|
|
51e5917e43 | ||
|
|
2d260dec90 | ||
|
|
72a8d6f615 | ||
|
|
34ffd5c100 | ||
|
|
da36f1b3d8 | ||
|
|
1c922c2234 | ||
|
|
d56132618a | ||
|
|
575d4360f1 | ||
|
|
e7328f2865 | ||
|
|
6be5ad6b3d | ||
|
|
44d3cc61f5 | ||
|
|
d20ce1e4d4 | ||
|
|
ae43050061 | ||
|
|
7ecf2ef1b1 | ||
|
|
05c3b0c1dc | ||
|
|
fccb2312da | ||
|
|
47c36a82bf | ||
|
|
112cba2b8c | ||
|
|
1a017cfac7 | ||
|
|
eae6737d76 | ||
|
|
c652e60619 | ||
|
|
b94e13d63e | ||
|
|
68139849f6 | ||
|
|
8975324e7c | ||
|
|
e5fd4bf9e6 | ||
|
|
a0666e6904 | ||
|
|
a97378654e | ||
|
|
f28f542d4d | ||
|
|
9d118078ae | ||
|
|
c2a0f90b4f | ||
|
|
6f3c5ca025 | ||
|
|
49fa0eb9cc | ||
|
|
e4b10e7260 | ||
|
|
a536defe9a | ||
|
|
c7b8b4c510 | ||
|
|
34cd3b7aa4 | ||
|
|
1f18074e29 | ||
|
|
971ed7e75d | ||
|
|
35709eb06a | ||
|
|
25c2f2753b | ||
|
|
fa1ed38678 | ||
|
|
beb8781b5c | ||
|
|
deb977de09 | ||
|
|
21c664d2c0 | ||
|
|
754c84ad89 | ||
|
|
a54c966ad0 | ||
|
|
babf3bb971 | ||
|
|
2fc923837f | ||
|
|
84e370bd94 | ||
|
|
ef59593ef3 | ||
|
|
db30ae976a | ||
|
|
b86d7813a9 | ||
|
|
db5b400408 | ||
|
|
d229447149 | ||
|
|
8707a7941a | ||
|
|
01c5571da0 | ||
|
|
e0b5e893d8 | ||
|
|
993e773414 | ||
|
|
ed25cd6d31 | ||
|
|
c9617dd3cc | ||
|
|
61bc98578b | ||
|
|
7f0af6f41c | ||
|
|
8744f8f547 | ||
|
|
955f3cd329 | ||
|
|
a6af4eee2f | ||
|
|
5e81006208 | ||
|
|
0f054f819f | ||
|
|
383894bd3f | ||
|
|
767b925705 | ||
|
|
87ff51a517 | ||
|
|
1378d56924 | ||
|
|
d0ba7ac54b | ||
|
|
7b512256ec | ||
|
|
51fb2ce364 | ||
|
|
623ae1f55f | ||
|
|
82777c2265 | ||
|
|
762831b4ec | ||
|
|
c1e3b8fc4e | ||
|
|
cb84d7d810 | ||
|
|
cfdbb50de0 | ||
|
|
e3a1e69fb5 | ||
|
|
3f1c45ac0a | ||
|
|
8e76c38f23 | ||
|
|
ac95e4b889 | ||
|
|
6559f212c0 | ||
|
|
4b21ed49f1 | ||
|
|
e0768d1460 | ||
|
|
3bd6af7427 | ||
|
|
45903fda14 | ||
|
|
04b70049c4 | ||
|
|
f5e84d6dcc | ||
|
|
10e63f2a94 | ||
|
|
87589748c2 | ||
|
|
d7326706a3 | ||
|
|
063b0a0d92 | ||
|
|
cd02a14792 | ||
|
|
1bed94b1b1 | ||
|
|
cfc1a81a49 | ||
|
|
57ddfaad6f | ||
|
|
5096449cf5 | ||
|
|
64b8a3258b | ||
|
|
c5cc2a36e1 | ||
|
|
df75bf53e6 | ||
|
|
0eb5a8cc2b | ||
|
|
68bd5818ae | ||
|
|
7761267bb4 | ||
|
|
6c1adbef04 | ||
|
|
cb63ab4b1f | ||
|
|
ba21ec24b8 | ||
|
|
990add4ddf | ||
|
|
ec44eb5960 | ||
|
|
cb383ead75 | ||
|
|
e478ca56aa | ||
|
|
221e91a56a | ||
|
|
e1e95fa205 | ||
|
|
be5a5018c0 | ||
|
|
fcf32657c3 | ||
|
|
3f734cbfcc | ||
|
|
10758b0f2f | ||
|
|
f7ff982098 | ||
|
|
c0250ac00d | ||
|
|
bfee369ad8 | ||
|
|
e7b4bb9a4b | ||
|
|
3751629166 | ||
|
|
6c9e458278 | ||
|
|
e84fd15cf2 | ||
|
|
40437bec04 | ||
|
|
8bad10eace | ||
|
|
8a3855fddd | ||
|
|
fb9d5e2043 | ||
|
|
ff02354107 | ||
|
|
8bdae45e6c | ||
|
|
7960699636 | ||
|
|
1badd8049e | ||
|
|
8424abdfa9 | ||
|
|
b9a199c5f5 | ||
|
|
0c23b46426 | ||
|
|
67d8dc3f5c | ||
|
|
808b087a82 | ||
|
|
bdff61d8e9 | ||
|
|
a025770fe7 | ||
|
|
6bde027c48 | ||
|
|
cd6d8f3f69 | ||
|
|
fb759470f5 | ||
|
|
c61d4bdc75 | ||
|
|
41397cb7d5 | ||
|
|
9bbc5591c1 | ||
|
|
63b8827725 | ||
|
|
16eb703f68 | ||
|
|
c34f7c0912 | ||
|
|
625babddc4 | ||
|
|
759fece687 | ||
|
|
55fec03445 | ||
|
|
1d97921e7b |
5
TODO.org
Normal file
5
TODO.org
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
* to-do
|
||||||
|
** Switch to overlay driver when zfs 2.2 is released
|
||||||
|
This might fix some stability issues (like a container getting stuck in a terminating state), may improve performance (since the zfs driver is noticably slower than overlay on ext4 on a zvol), and will avoid a lot of noise in my zfs dataset lists
|
||||||
|
|
||||||
|
ref: https://github.com/moby/moby/issues/40132
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
os_flavor: "freebsd"
|
os_flavor: "freebsd"
|
||||||
zfs_snapshot_datasets:
|
zfs_snapshot_datasets:
|
||||||
- zroot/freebsd/main/be
|
- path: zroot/freebsd/main/be
|
||||||
|
- path: zdata/vm
|
||||||
|
- path: zdata/vm/poudriere/disk0
|
||||||
|
include: false
|
||||||
|
- path: zdata/k8spersistent
|
||||||
sshd_enabled: true
|
sshd_enabled: true
|
||||||
loader_conf: "mrmanager_loader.conf"
|
loader_conf: "mrmanager_loader.conf"
|
||||||
rc_conf: "mrmanager_rc.conf"
|
rc_conf: "mrmanager_rc.conf"
|
||||||
@@ -35,3 +39,18 @@ bhyve_dataset: zdata/vm
|
|||||||
bhyve_canmount: "on"
|
bhyve_canmount: "on"
|
||||||
# efi_dev: /dev/gpt/EFI
|
# efi_dev: /dev/gpt/EFI
|
||||||
devfs_rules: "mrmanager_devfs.rules"
|
devfs_rules: "mrmanager_devfs.rules"
|
||||||
|
users:
|
||||||
|
talexander:
|
||||||
|
initialize: true
|
||||||
|
uid: 11235
|
||||||
|
gid: 11235
|
||||||
|
groups:
|
||||||
|
- name: wheel
|
||||||
|
authorized_keys:
|
||||||
|
- yubikey
|
||||||
|
- main_fido
|
||||||
|
- backup_fido
|
||||||
|
mole:
|
||||||
|
initialize: true
|
||||||
|
authorized_keys:
|
||||||
|
- mole
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
os_flavor: "freebsd"
|
os_flavor: "freebsd"
|
||||||
zfs_snapshot_datasets:
|
zfs_snapshot_datasets:
|
||||||
- zroot/freebsd/computer/be/default
|
- path: zroot/freebsd/computer/be
|
||||||
|
- path: zmass/encrypted/vm
|
||||||
sshd_enabled: true
|
sshd_enabled: true
|
||||||
sshd_conf: "sshd_config"
|
sshd_conf: "sshd_config"
|
||||||
pf_config: "homeserver_pf.conf"
|
pf_config: "homeserver_pf.conf"
|
||||||
@@ -17,6 +18,7 @@ hwpstate: false
|
|||||||
build_user:
|
build_user:
|
||||||
name: talexander
|
name: talexander
|
||||||
group: talexander
|
group: talexander
|
||||||
|
devfs_rules: "homeserver_devfs.rules"
|
||||||
jail_zfs_dataset: zmass/encrypted/jails
|
jail_zfs_dataset: zmass/encrypted/jails
|
||||||
jail_zfs_dataset_mountpoint: /jail/main
|
jail_zfs_dataset_mountpoint: /jail/main
|
||||||
jail_canmount: "on"
|
jail_canmount: "on"
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
timezone: "America/New_York"
|
timezone: "America/New_York"
|
||||||
install_bluetooth: true
|
install_bluetooth: true
|
||||||
|
emacs_flavor: "full"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
os_flavor: "freebsd"
|
os_flavor: "freebsd"
|
||||||
custom_repo: 13amd64-default-framework
|
custom_repo: 13amd64-default-framework
|
||||||
zfs_snapshot_datasets:
|
zfs_snapshot_datasets:
|
||||||
- zroot/freebsd/release/be/default
|
- path: zroot/freebsd/release/be/default
|
||||||
sshd_enabled: true
|
sshd_enabled: true
|
||||||
sshd_conf: "sshd_config"
|
sshd_conf: "sshd_config"
|
||||||
pf_config: "odofreebsd_pf.conf"
|
pf_config: "odofreebsd_pf.conf"
|
||||||
@@ -14,9 +14,9 @@ loader_conf: "odofreebsd_loader.conf"
|
|||||||
install_graphics: true
|
install_graphics: true
|
||||||
graphics_driver: "intel"
|
graphics_driver: "intel"
|
||||||
cputype: "intel"
|
cputype: "intel"
|
||||||
cpu_opt: tigerlake
|
cpu_opt: skylake
|
||||||
hwpstate: true
|
hwpstate: true
|
||||||
cores: 8
|
cores: 4
|
||||||
build_user:
|
build_user:
|
||||||
name: talexander
|
name: talexander
|
||||||
group: talexander
|
group: talexander
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ users:
|
|||||||
gitconfig: "gitconfig_home"
|
gitconfig: "gitconfig_home"
|
||||||
zfs_snapshot_datasets:
|
zfs_snapshot_datasets:
|
||||||
# - zroot/linux/archmain/home
|
# - zroot/linux/archmain/home
|
||||||
- zroot/linux/archmain/be
|
- path: zroot/linux/archmain/be
|
||||||
- zroot/data/bridge/family_disks
|
- path: zroot/data/bridge/family_disks
|
||||||
install_graphics: true
|
install_graphics: true
|
||||||
graphics_driver: "intel"
|
graphics_driver: "intel"
|
||||||
build_user:
|
build_user:
|
||||||
@@ -32,8 +32,8 @@ enabled_wireguard:
|
|||||||
- colo
|
- colo
|
||||||
cputype: "intel"
|
cputype: "intel"
|
||||||
hwpstate: true
|
hwpstate: true
|
||||||
cores: 8
|
cores: 4
|
||||||
sway_conf_files:
|
sway_conf_files:
|
||||||
- rofimoji
|
- rofimoji
|
||||||
docker_storage_driver: zfs # alternatively overlay2
|
docker_storage_driver: overlay2 # alternatively zfs
|
||||||
docker_zfs_dataset: zroot/linux/archmain/docker
|
docker_zfs_dataset: zroot/linux/archmain/docker
|
||||||
|
|||||||
35
ansible/environments/laptop/host_vars/pixellinux
Normal file
35
ansible/environments/laptop/host_vars/pixellinux
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
os_flavor: "linux"
|
||||||
|
users:
|
||||||
|
talexander:
|
||||||
|
initialize: true
|
||||||
|
uid: 11235
|
||||||
|
gid: 1000
|
||||||
|
groups:
|
||||||
|
- name: wheel
|
||||||
|
- name: users
|
||||||
|
- name: docker
|
||||||
|
- name: libvirt
|
||||||
|
- name: uucp
|
||||||
|
authorized_keys:
|
||||||
|
- yubikey
|
||||||
|
- main_fido
|
||||||
|
- backup_fido
|
||||||
|
- homeassistant
|
||||||
|
gitconfig: "gitconfig_home"
|
||||||
|
zfs_snapshot_datasets:
|
||||||
|
- path: zroot/linux/archmain/be
|
||||||
|
install_graphics: true
|
||||||
|
graphics_driver: "intel"
|
||||||
|
build_user:
|
||||||
|
name: talexander
|
||||||
|
group: talexander
|
||||||
|
wireguard_directory: pixel
|
||||||
|
enabled_wireguard:
|
||||||
|
- wgh
|
||||||
|
cputype: "intel"
|
||||||
|
hwpstate: true
|
||||||
|
cores: 4
|
||||||
|
sway_conf_files:
|
||||||
|
- rofimoji
|
||||||
|
docker_storage_driver: overlay2 # alternatively zfs
|
||||||
|
docker_zfs_dataset: zroot/linux/archmain/docker
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
[gui]
|
[gui]
|
||||||
odolinux ansible_connection=local ansible_host=127.0.0.1
|
odolinux ansible_connection=local ansible_host=127.0.0.1
|
||||||
odofreebsd ansible_connection=local ansible_host=127.0.0.1
|
odofreebsd ansible_connection=local ansible_host=127.0.0.1
|
||||||
|
pixellinux ansible_connection=local ansible_host=127.0.0.1
|
||||||
|
|||||||
5
ansible/environments/vm/host_vars/freebsdupdatemrmanager
Normal file
5
ansible/environments/vm/host_vars/freebsdupdatemrmanager
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
os_flavor: "freebsd"
|
||||||
|
cpu_opt: skylake
|
||||||
|
build_user:
|
||||||
|
name: root
|
||||||
|
group: wheel
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
[vm]
|
[vm]
|
||||||
poudriereodo ansible_user=builder ansible_host=10.213.177.12
|
poudriereodo ansible_user=builder ansible_host=10.213.177.12
|
||||||
poudrieremrmanager ansible_user=root ansible_host=poudriere
|
poudrieremrmanager ansible_user=root ansible_host=poudriere
|
||||||
|
freebsdupdatemrmanager ansible_user=root ansible_host=freebsdupdate
|
||||||
#
|
#
|
||||||
# Put in ~/.ssh/config
|
# Put in ~/.ssh/config
|
||||||
# Host poudriere
|
# Host poudriere
|
||||||
# ProxyJump talexander@mrmanager
|
# ProxyJump talexander@mrmanager
|
||||||
# HostName 10.215.1.203
|
# HostName 10.215.1.203
|
||||||
#
|
#
|
||||||
|
# Host freebsdupdate
|
||||||
|
# ProxyJump talexander@mrmanager
|
||||||
|
# HostName 10.215.1.213
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
- build
|
- build
|
||||||
- sound
|
- sound
|
||||||
- graphics
|
- graphics
|
||||||
|
- power_management
|
||||||
- gpg
|
- gpg
|
||||||
- fonts
|
- fonts
|
||||||
- alacritty
|
- alacritty
|
||||||
@@ -49,6 +50,9 @@
|
|||||||
- docker
|
- docker
|
||||||
- vscode
|
- vscode
|
||||||
- javascript
|
- javascript
|
||||||
|
- launch_keyboard
|
||||||
|
- lvfs
|
||||||
|
- restaurant_health_rating
|
||||||
|
|
||||||
- hosts: nat_dhcp:homeserver_nat_dhcp:mrmanager_nat_dhcp
|
- hosts: nat_dhcp:homeserver_nat_dhcp:mrmanager_nat_dhcp
|
||||||
vars:
|
vars:
|
||||||
@@ -65,6 +69,7 @@
|
|||||||
- portshaker
|
- portshaker
|
||||||
- poudriere
|
- poudriere
|
||||||
- poudrierenginx
|
- poudrierenginx
|
||||||
|
- freebsd_update_server
|
||||||
|
|
||||||
- hosts: mrmanager
|
- hosts: mrmanager
|
||||||
vars:
|
vars:
|
||||||
@@ -90,7 +95,7 @@
|
|||||||
- jail
|
- jail
|
||||||
- bhyve
|
- bhyve
|
||||||
- wireguard
|
- wireguard
|
||||||
- plainmacs
|
- emacs
|
||||||
- mrmanager
|
- mrmanager
|
||||||
|
|
||||||
- hosts: admin_git:public_dns
|
- hosts: admin_git:public_dns
|
||||||
@@ -109,3 +114,37 @@
|
|||||||
- doas
|
- doas
|
||||||
- users
|
- users
|
||||||
- public_dns
|
- public_dns
|
||||||
|
|
||||||
|
- hosts: odolinux:odofreebsd
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- framework_laptop
|
||||||
|
|
||||||
|
- hosts: pixellinux
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- pixelbook
|
||||||
|
|
||||||
|
- hosts: odofreebsd
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- freebsd_update_server
|
||||||
|
|
||||||
|
- hosts: freebsdupdatemrmanager
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- sudo # for poudboot script
|
||||||
|
- doas
|
||||||
|
- fstab
|
||||||
|
- build
|
||||||
|
- freebsd_update_server
|
||||||
|
|
||||||
|
- hosts: homeserver
|
||||||
|
vars:
|
||||||
|
ansible_become: True
|
||||||
|
roles:
|
||||||
|
- homeserver
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# $FreeBSD$
|
|
||||||
#
|
#
|
||||||
# Automounter master map, see auto_master(5) for details.
|
# Automounter master map, see auto_master(5) for details.
|
||||||
#
|
#
|
||||||
|
|||||||
22
ansible/roles/base/files/git_fix_author.bash
Normal file
22
ansible/roles/base/files/git_fix_author.bash
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
git filter-branch --env-filter '
|
||||||
|
WRONG_EMAIL="old@email.foo"
|
||||||
|
NEW_NAME="New Name"
|
||||||
|
NEW_EMAIL="new@email.buzz"
|
||||||
|
|
||||||
|
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
|
||||||
|
then
|
||||||
|
export GIT_COMMITTER_NAME="$NEW_NAME"
|
||||||
|
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
|
||||||
|
fi
|
||||||
|
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
|
||||||
|
then
|
||||||
|
export GIT_AUTHOR_NAME="$NEW_NAME"
|
||||||
|
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
|
||||||
|
fi
|
||||||
|
' --tag-name-filter cat --commit-filter 'git commit-tree -S "$@";' -- --branches --tags
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
[alias]
|
[alias]
|
||||||
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
||||||
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
bh = log --oneline --branches=* --remotes=* --graph --decorate
|
||||||
|
amend = commit --amend --no-edit
|
||||||
[core]
|
[core]
|
||||||
excludesfile = ~/.gitignore_global
|
excludesfile = ~/.gitignore_global
|
||||||
[commit]
|
[commit]
|
||||||
@@ -15,3 +16,5 @@
|
|||||||
rebase = true
|
rebase = true
|
||||||
[log]
|
[log]
|
||||||
date = local
|
date = local
|
||||||
|
[init]
|
||||||
|
defaultBranch = main
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
.idea
|
.idea
|
||||||
.python-version
|
.python-version
|
||||||
|
.dir-locals.el
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
# This file controls resource limits, accounting limits and
|
# This file controls resource limits, accounting limits and
|
||||||
# default user environment settings.
|
# default user environment settings.
|
||||||
#
|
#
|
||||||
# $FreeBSD$
|
|
||||||
#
|
#
|
||||||
|
|
||||||
# Default settings effectively disable resource limits, see the
|
# Default settings effectively disable resource limits, see the
|
||||||
|
|||||||
40
ansible/roles/base/files/watch_freebsd
Normal file
40
ansible/roles/base/files/watch_freebsd
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Imitate watch from linux
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
############## Setup #########################
|
||||||
|
|
||||||
|
function cleanup {
|
||||||
|
switch_to_main_screen
|
||||||
|
}
|
||||||
|
for sig in EXIT INT QUIT HUP TERM; do
|
||||||
|
trap "set +e; cleanup; exit" "$sig"
|
||||||
|
done
|
||||||
|
|
||||||
|
############## Program #########################
|
||||||
|
|
||||||
|
function main {
|
||||||
|
switch_to_alt_screen
|
||||||
|
while true; do
|
||||||
|
local output=$("$@")
|
||||||
|
clear
|
||||||
|
cat <<<"$output"
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function switch_to_alt_screen {
|
||||||
|
# tput smcup
|
||||||
|
echo -e "\e[?1049h"
|
||||||
|
clear
|
||||||
|
}
|
||||||
|
|
||||||
|
function switch_to_main_screen {
|
||||||
|
# tput rmcup
|
||||||
|
echo -e "\e[?1049l"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
8
ansible/roles/base/files/watch_linux
Normal file
8
ansible/roles/base/files/watch_linux
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Invoke watch
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
exec watch "$@"
|
||||||
@@ -47,6 +47,8 @@
|
|||||||
dest: /usr/local/bin/git_find_merged_branches
|
dest: /usr/local/bin/git_find_merged_branches
|
||||||
- src: cleanup_temporary_files
|
- src: cleanup_temporary_files
|
||||||
dest: /usr/local/bin/cleanup_temporary_files
|
dest: /usr/local/bin/cleanup_temporary_files
|
||||||
|
- src: git_fix_author.bash
|
||||||
|
dest: /usr/local/bin/git_fix_author
|
||||||
|
|
||||||
- import_tasks: tasks/freebsd.yaml
|
- import_tasks: tasks/freebsd.yaml
|
||||||
when: 'os_flavor == "freebsd"'
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|||||||
@@ -94,6 +94,8 @@
|
|||||||
loop:
|
loop:
|
||||||
- src: bemount.bash
|
- src: bemount.bash
|
||||||
dest: /usr/local/bin/bemount
|
dest: /usr/local/bin/bemount
|
||||||
|
- src: watch_freebsd
|
||||||
|
dest: /usr/local/bin/ww
|
||||||
|
|
||||||
- name: Install rc script
|
- name: Install rc script
|
||||||
copy:
|
copy:
|
||||||
@@ -121,4 +123,3 @@
|
|||||||
group: wheel
|
group: wheel
|
||||||
loop:
|
loop:
|
||||||
- disk_labels
|
- disk_labels
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
- bind # dig
|
- bind # dig
|
||||||
- man-db
|
- man-db
|
||||||
- uutils-coreutils
|
- uutils-coreutils
|
||||||
|
- usbutils # for lsusb
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Start pkgfile update service
|
- name: Start pkgfile update service
|
||||||
@@ -37,3 +38,5 @@
|
|||||||
loop:
|
loop:
|
||||||
- src: mount_disk_image
|
- src: mount_disk_image
|
||||||
dest: /usr/local/bin/mount_disk_image
|
dest: /usr/local/bin/mount_disk_image
|
||||||
|
- src: watch_linux
|
||||||
|
dest: /usr/local/bin/ww
|
||||||
|
|||||||
@@ -35,6 +35,33 @@ if [ "$VERBOSE" = "YES" ]; then
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
############## Setup #########################
|
||||||
|
|
||||||
|
function cleanup {
|
||||||
|
for vm in "${vms[@]}"; do
|
||||||
|
log "Destroying bhyve vm $vm"
|
||||||
|
bhyvectl "--vm=$vm" --destroy
|
||||||
|
log "Destroyed bhyve vm $vm"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
vms=()
|
||||||
|
for sig in EXIT INT QUIT HUP TERM; do
|
||||||
|
trap "set +e; sleep 10; cleanup" "$sig"
|
||||||
|
done
|
||||||
|
|
||||||
|
function die {
|
||||||
|
local status_code="$1"
|
||||||
|
shift
|
||||||
|
(>&2 echo "${@}")
|
||||||
|
exit "$status_code"
|
||||||
|
}
|
||||||
|
|
||||||
|
function log {
|
||||||
|
(>&2 echo "${@}")
|
||||||
|
}
|
||||||
|
|
||||||
|
############## Program #########################
|
||||||
|
|
||||||
function main {
|
function main {
|
||||||
local cmd="$1"
|
local cmd="$1"
|
||||||
shift 1
|
shift 1
|
||||||
@@ -117,11 +144,12 @@ function start_vm {
|
|||||||
|
|
||||||
# TODO: Look into using nmdm instead of stdio for serial console
|
# TODO: Look into using nmdm instead of stdio for serial console
|
||||||
if [ -n "$mount_cd" ]; then
|
if [ -n "$mount_cd" ]; then
|
||||||
additional_args+=("-s" "3,ahci-cd,$mount_cd")
|
additional_args+=("-s" "5,ahci-cd,$mount_cd")
|
||||||
fi
|
fi
|
||||||
if [ "$VNC_ENABLE" = "YES" ]; then
|
if [ "$VNC_ENABLE" = "YES" ]; then
|
||||||
additional_args+=("-s" "29,fbuf,tcp=$VNC_LISTEN,w=1920,h=1080")
|
additional_args+=("-s" "29,fbuf,tcp=$VNC_LISTEN,w=1920,h=1080")
|
||||||
fi
|
fi
|
||||||
|
vms+=("$name")
|
||||||
while true; do
|
while true; do
|
||||||
set -x
|
set -x
|
||||||
set +e
|
set +e
|
||||||
@@ -142,6 +170,7 @@ function start_vm {
|
|||||||
set +x
|
set +x
|
||||||
if [ $exit_code -eq 0 ]; then
|
if [ $exit_code -eq 0 ]; then
|
||||||
echo "Rebooting."
|
echo "Rebooting."
|
||||||
|
sleep 5
|
||||||
elif [ $exit_code -eq 1 ]; then
|
elif [ $exit_code -eq 1 ]; then
|
||||||
echo "Powered off."
|
echo "Powered off."
|
||||||
break
|
break
|
||||||
@@ -156,9 +185,6 @@ function start_vm {
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
bhyvectl "--vm=$name" --destroy
|
|
||||||
echo "Destroyed bhyve vm."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function detect_available_link {
|
function detect_available_link {
|
||||||
|
|||||||
@@ -1,3 +1,43 @@
|
|||||||
|
# - name: Create directories
|
||||||
|
# file:
|
||||||
|
# name: "{{ item }}"
|
||||||
|
# state: directory
|
||||||
|
# mode: 0755
|
||||||
|
# owner: root
|
||||||
|
# group: wheel
|
||||||
|
# loop:
|
||||||
|
# - /foo/bar
|
||||||
|
|
||||||
|
# - name: Install scripts
|
||||||
|
# copy:
|
||||||
|
# src: "files/{{ item.src }}"
|
||||||
|
# dest: "{{ item.dest }}"
|
||||||
|
# mode: 0755
|
||||||
|
# owner: root
|
||||||
|
# group: wheel
|
||||||
|
# loop:
|
||||||
|
# - src: foo.bash
|
||||||
|
# dest: /usr/local/bin/foo
|
||||||
|
|
||||||
|
# - name: Install Configuration
|
||||||
|
# copy:
|
||||||
|
# src: "files/{{ item.src }}"
|
||||||
|
# dest: "{{ item.dest }}"
|
||||||
|
# mode: 0600
|
||||||
|
# owner: root
|
||||||
|
# group: wheel
|
||||||
|
# loop:
|
||||||
|
# - src: foo.conf
|
||||||
|
# dest: /usr/local/etc/foo.conf
|
||||||
|
|
||||||
|
# - name: Clone Source
|
||||||
|
# git:
|
||||||
|
# repo: "https://foo.bar/baz.git"
|
||||||
|
# dest: /foo/bar
|
||||||
|
# version: "v1.0.2"
|
||||||
|
# force: true
|
||||||
|
# diff: false
|
||||||
|
|
||||||
- import_tasks: tasks/freebsd.yaml
|
- import_tasks: tasks/freebsd.yaml
|
||||||
when: 'os_flavor == "freebsd"'
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
# name: []
|
# name: []
|
||||||
# state: present
|
# state: present
|
||||||
# update_cache: true
|
# update_cache: true
|
||||||
|
|
||||||
# - name: Install packages
|
# - name: Install packages
|
||||||
# package:
|
# package:
|
||||||
# name:
|
# name:
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
freebsd_version: "releng/13.2"
|
# freebsd_version: "releng/13.2"
|
||||||
|
freebsd_version: "9c80d66ec1b4c5b9ac7aaf5b0fdbb1628d49c181"
|
||||||
|
|||||||
10
ansible/roles/build/files/aurutils-update-devel-packages
Normal file
10
ansible/roles/build/files/aurutils-update-devel-packages
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Update packages in aurutils with -git suffix.
|
||||||
|
#
|
||||||
|
# This has to be done manually because aurutils does not check for new git commits every time we run an update.
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
pacman -Slq custom | grep -E -- '-git$' | xargs aurutils-sync --no-ver --reset "$@"
|
||||||
26
ansible/roles/build/files/find_packages_that_installed_kernel_modules.bash
Executable file
26
ansible/roles/build/files/find_packages_that_installed_kernel_modules.bash
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# List installed packages that install a kernel module.
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
: ${PORTSDIR:="/usr/ports"}
|
||||||
|
|
||||||
|
function main {
|
||||||
|
if [ "$#" -ne 0 ]; then
|
||||||
|
(>&2 echo "This script takes no positional parameters.")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
local module
|
||||||
|
doas find / -type f -name '*.ko' | sort | while read module; do
|
||||||
|
local provides=$(pkg provides "$module")
|
||||||
|
if [ -n "$provides" ]; then
|
||||||
|
package_name=$(grep 'Name : ' <<<"$provides" | sed 's/Name : //g')
|
||||||
|
# module_file=$(grep 'Filename: ' <<<"$provides" | sed 's/Filename: //g')
|
||||||
|
echo "$package_name"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main "${@}"
|
||||||
36
ansible/roles/build/files/find_popular_ports_options.bash
Executable file
36
ansible/roles/build/files/find_popular_ports_options.bash
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Find which port options appear the most in ports.
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
: ${PORTSDIR:="/usr/ports"}
|
||||||
|
|
||||||
|
function main {
|
||||||
|
if [ "$#" -ne 0 ]; then
|
||||||
|
(>&2 echo "This script takes no positional parameters.")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
local folder
|
||||||
|
find_port_folders | while read folder; do
|
||||||
|
set +e
|
||||||
|
dump_port_options "$folder"
|
||||||
|
set -e
|
||||||
|
done | sort | uniq -c | sort -nr
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_port_folders {
|
||||||
|
local mf
|
||||||
|
find "$PORTSDIR" -type f -name Makefile -mindepth 3 -maxdepth 3 | sort | while read mf; do
|
||||||
|
dirname "$mf"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_port_options {
|
||||||
|
local folder="$1"
|
||||||
|
local portopts=$(make -C "$folder" -V OPTIONS_DEFINE)
|
||||||
|
echo "$portopts" | grep -oE --line-buffered '[^ ]*'
|
||||||
|
}
|
||||||
|
|
||||||
|
main "${@}"
|
||||||
41
ansible/roles/build/files/find_ports_containing_option.bash
Executable file
41
ansible/roles/build/files/find_ports_containing_option.bash
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# List ports containing an option matching the first parameter to the script.
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
: ${PORTSDIR:="/usr/ports"}
|
||||||
|
|
||||||
|
function main {
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
(>&2 echo "Pass exactly 1 option name to this script.")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
local find_option_name=$1
|
||||||
|
local folder
|
||||||
|
find_port_folders | while read folder; do
|
||||||
|
set +e
|
||||||
|
dump_port_options "$folder" | grep -qE "^${find_option_name}$"
|
||||||
|
has_opt=$?;
|
||||||
|
set -e
|
||||||
|
if [ $has_opt -eq 0 ]; then
|
||||||
|
echo "$folder"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_port_folders {
|
||||||
|
local mf
|
||||||
|
find "$PORTSDIR" -type f -name Makefile -mindepth 3 -maxdepth 3 | sort | while read mf; do
|
||||||
|
dirname "$mf"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_port_options {
|
||||||
|
local folder="$1"
|
||||||
|
local portopts=$(make -C "$folder" -V OPTIONS_DEFINE)
|
||||||
|
echo "$portopts" | grep -oE --line-buffered '[^ ]*'
|
||||||
|
}
|
||||||
|
|
||||||
|
main "${@}"
|
||||||
@@ -1,34 +1,27 @@
|
|||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
mDMEXZwWGhYJKwYBBAHaRw8BAQdAfv7qozKkmf4D+5PDzADsMm4aAKDGLha7+Cu0
|
mDMEXZwWGhYJKwYBBAHaRw8BAQdAfv7qozKkmf4D+5PDzADsMm4aAKDGLha7+Cu0
|
||||||
0H+RsWG0HVRvbSBBbGV4YW5kZXIgPHRvbUBmaXp6LmJ1eno+iJAEExYIADgWIQS4
|
0H+RsWG0HlRvbSBBbGV4YW5kZXIgPHdvcmtAZml6ei5idXp6PoiQBBMWCAA4FiEE
|
||||||
SBWTY8KHeReVS+En3kDZuEVcGwUCXZwWGgIbAwULCQgHAgYVCAkKCwIEFgIDAQIe
|
uEgVk2PCh3kXlUvhJ95A2bhFXBsFAl+w+R0CGwMFCwkIBwIGFQoJCAsCBBYCAwEC
|
||||||
AQIXgAAKCRAn3kDZuEVcG9glAQDX3Bzaz9sQpycc40LeLxSKQsWplfJigfr8wWOg
|
HgECF4AACgkQJ95A2bhFXBt6fgD+NOYnw9gz5K/q3H5LE/JvqzCSHezJmeGgif0C
|
||||||
C15TywEAqkTtCrTNsltdZERLMre7qnv/6RSo54OW0C4pdN7UUAa0HlRvbSBBbGV4
|
uU4m1/MA+gPDKME7syEtJsTpELEMrxWWpDW0tD/W1iJE7roGYPQPtB1Ub20gQWxl
|
||||||
YW5kZXIgPHdvcmtAZml6ei5idXp6PoiQBBMWCAA4FiEEuEgVk2PCh3kXlUvhJ95A
|
eGFuZGVyIDx0b21AZml6ei5idXp6PoiQBBMWCAA4FiEEuEgVk2PCh3kXlUvhJ95A
|
||||||
2bhFXBsFAl+w+R0CGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQJ95A2bhF
|
2bhFXBsFAl2cFhoCGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQJ95A2bhF
|
||||||
XBt6fgD+NOYnw9gz5K/q3H5LE/JvqzCSHezJmeGgif0CuU4m1/MA+gPDKME7syEt
|
XBvYJQEA19wc2s/bEKcnHONC3i8UikLFqZXyYoH6/MFjoAteU8sBAKpE7Qq0zbJb
|
||||||
JsTpELEMrxWWpDW0tD/W1iJE7roGYPQPtB9Ub20gQWxleGFuZGVyIDx0b21AaGFy
|
XWRESzK3u6p7/+kUqOeDltAuKXTe1FAGuDMEXZwWyhYJKwYBBAHaRw8BAQdAPyIL
|
||||||
bW9uaWMuYWk+iJAEExYIADgWIQS4SBWTY8KHeReVS+En3kDZuEVcGwUCX7D5RAIb
|
4EGg4T5JO9q2kpVDy2WjMiXz3nZXwYW4GLoTYkiI9QQYFggAJgIbAhYhBLhIFZNj
|
||||||
AwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAn3kDZuEVcGzjDAP9pM1ScstOk
|
wod5F5VL4SfeQNm4RVwbBQJlC4ZhBQkLMdaXAIF2IAQZFggAHRYhBIHmRDmWdVAu
|
||||||
ti+oRAsNSk8qsjIsCT9O5voDS0Q7plWlcwD/btKVFO9tPLsXhyvdB+NSwueVs7TA
|
sSUWutOhecmlPA7eBQJdnBbKAAoJENOhecmlPA7ejJ4A/iq7N2mMhx+ovOXm1REo
|
||||||
kRVjlW3hktpefg24OARdnBYaEgorBgEEAZdVAQUBAQdArbTYQgDBMG7EBFTKA6+f
|
ASPF3l4YAAjOHsXqcPtFHKGJAQCiuA71d6CQ+qNZLuka/KVB/etkkJvDzvaTtiQQ
|
||||||
4CWgwl26Lf2b6cyCGfUw2j4DAQgHiHgEGBYIACAWIQS4SBWTY8KHeReVS+En3kDZ
|
QG+gAwkQJ95A2bhFXBtRDgEAqymMavroD5c/4+M/EZ3/d8wxfA9E3Fb/1mt4c2Zr
|
||||||
uEVcGwUCXZwWGgIbDAAKCRAn3kDZuEVcG03MAQCrkjrE+MhtvbfGaHGHlwz9QnF0
|
NnkBAKYOM+pz/pncFnV+kF7h7TQEEYuGw1JhJVT/duA4lwsLuDMEXZwXARYJKwYB
|
||||||
Z519YzK8Xr8m0O+09QEA9BFCfkAzBM4D4JKeWJh/tmN9U6UexzLrRdY+W9cugAm4
|
BAHaRw8BAQdAa76TmWuKuiR1bnNV1FUE6oQ4C8A+UiQb8x0k1z2DmTKIfgQYFggA
|
||||||
MwRdnBbKFgkrBgEEAdpHDwEBB0A/IgvgQaDhPkk72raSlUPLZaMyJfPedlfBhbgY
|
JgIbIBYhBLhIFZNjwod5F5VL4SfeQNm4RVwbBQJlC4ZwBQkLMdZgAAoJECfeQNm4
|
||||||
uhNiSIj1BBgWCAAmAhsCFiEEuEgVk2PCh3kXlUvhJ95A2bhFXBsFAl+w+hYFCQe4
|
RVwb8TkA/RkBu9Ev8iDE5nvn8YF8FRiY56Z5d+SBPG4VvrCzXrmlAP46wUjIRpkM
|
||||||
fcwAgXYgBBkWCAAdFiEEgeZEOZZ1UC6xJRa606F5yaU8Dt4FAl2cFsoACgkQ06F5
|
rTbb1GMbvYnkeOrBs/qiWjEtHHc3ZLMWD7g4BF2cFygSCisGAQQBl1UBBQEBB0AO
|
||||||
yaU8Dt6MngD+Krs3aYyHH6i85ebVESgBI8XeXhgACM4exepw+0UcoYkBAKK4DvV3
|
0t3BUxLuokTqKVcheFAZd4UKxAGznPQlvsVyhWWIEgMBCAeIfgQYFggAJgIbDBYh
|
||||||
oJD6o1ku6Rr8pUH962SQm8PO9pO2JBBAb6ADCRAn3kDZuEVcG9uAAP43vUsbe24/
|
BLhIFZNjwod5F5VL4SfeQNm4RVwbBQJlC4ZwBQkLMdY5AAoJECfeQNm4RVwbXscA
|
||||||
6tjEezAW0a4L2E1u4HNU8t53lolngs1kswEAy1HBdYEMR9TovX/kMeBHLcz1J2pM
|
/A8zRRTCwQKxJ8iz5jmTcVFAhl2vD781Dtv8NvcWd5t8APwIwcuFVZZA3yayhIxi
|
||||||
VRSV0JnJhj5eZwa4MwRdnBcBFgkrBgEEAdpHDwEBB0BrvpOZa4q6JHVuc1XUVQTq
|
3aqYpMRxpn2t6Nswax1MIM8DBQ==
|
||||||
hDgLwD5SJBvzHSTXPYOZMoh+BBgWCAAmAhsgFiEEuEgVk2PCh3kXlUvhJ95A2bhF
|
=dzEV
|
||||||
XBsFAl+w+hYFCQe4fZUACgkQJ95A2bhFXBs3NgEA3SFYTgRVstidfoEpEZV4DdSL
|
|
||||||
kXaOwN3Eyba4UniClyMA/2CCxQt24vu19TyvUtOXWCp9Zi8SyIqoeiXQ4ZmhhnQO
|
|
||||||
uDgEXZwXKBIKKwYBBAGXVQEFAQEHQA7S3cFTEu6iROopVyF4UBl3hQrEAbOc9CW+
|
|
||||||
xXKFZYgSAwEIB4h+BBgWCAAmAhsMFiEEuEgVk2PCh3kXlUvhJ95A2bhFXBsFAl+w
|
|
||||||
+hcFCQe4fW4ACgkQJ95A2bhFXBtUXAEAyEJCUNVSJ7qvQv5IXuwbYTX2Mh7JU3+F
|
|
||||||
GJHO7AWBXCQA/2aLAi9kYmz9ba770XYwTeBZIv9Y6UIwIwVmFdYHC/EM
|
|
||||||
=a/z4
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
KERNCONF=CUSTOM
|
|
||||||
|
|
||||||
BUILD_STATIC=YES
|
|
||||||
|
|||||||
@@ -31,10 +31,11 @@ Architecture = auto
|
|||||||
# Misc options
|
# Misc options
|
||||||
#UseSyslog
|
#UseSyslog
|
||||||
#Color
|
#Color
|
||||||
#TotalDownload
|
NoProgressBar
|
||||||
# We cannot check disk space from within a chroot environment
|
# We cannot check disk space from within a chroot environment
|
||||||
#CheckSpace
|
#CheckSpace
|
||||||
#VerbosePkgLists
|
VerbosePkgLists
|
||||||
|
ParallelDownloads = 5
|
||||||
|
|
||||||
# By default, pacman accepts packages signed by keys that its local keyring
|
# By default, pacman accepts packages signed by keys that its local keyring
|
||||||
# trusts (see pacman-key and its man page), as well as unsigned packages.
|
# trusts (see pacman-key and its man page), as well as unsigned packages.
|
||||||
@@ -69,32 +70,24 @@ LocalFileSigLevel = Optional
|
|||||||
# repo name header and Include lines. You can add preferred servers immediately
|
# repo name header and Include lines. You can add preferred servers immediately
|
||||||
# after the header, and they will be used before the default mirrors.
|
# after the header, and they will be used before the default mirrors.
|
||||||
|
|
||||||
#[testing]
|
#[core-testing]
|
||||||
#Include = /etc/pacman.d/mirrorlist
|
#Include = /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
[core]
|
[core]
|
||||||
Include = /etc/pacman.d/mirrorlist
|
Include = /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
|
#[extra-testing]
|
||||||
|
#Include = /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
[extra]
|
[extra]
|
||||||
Include = /etc/pacman.d/mirrorlist
|
Include = /etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
#[community-testing]
|
|
||||||
#Include = /etc/pacman.d/mirrorlist
|
|
||||||
|
|
||||||
[community]
|
|
||||||
Include = /etc/pacman.d/mirrorlist
|
|
||||||
|
|
||||||
# If you want to run 32 bit applications on your x86_64 system,
|
|
||||||
# enable the multilib repositories as required here.
|
|
||||||
|
|
||||||
#[multilib-testing]
|
|
||||||
#Include = /etc/pacman.d/mirrorlist
|
|
||||||
|
|
||||||
[multilib]
|
|
||||||
Include = /etc/pacman.d/mirrorlist
|
|
||||||
|
|
||||||
# An example of a custom package repository. See the pacman manpage for
|
# An example of a custom package repository. See the pacman manpage for
|
||||||
# tips on creating your own repositories.
|
# tips on creating your own repositories.
|
||||||
#[custom]
|
#[custom]
|
||||||
#SigLevel = Optional TrustAll
|
#SigLevel = Optional TrustAll
|
||||||
#Server = file:///home/custompkgs
|
#Server = file:///home/custompkgs
|
||||||
|
|
||||||
|
[custom]
|
||||||
|
SigLevel = Required
|
||||||
|
Server = file:///var/cache/pacman/custom
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
- users
|
- role: users
|
||||||
- gpg
|
when: 'os_flavor == "linux"'
|
||||||
|
- role: gpg
|
||||||
|
when: 'os_flavor == "linux"'
|
||||||
|
|||||||
@@ -3,12 +3,3 @@
|
|||||||
|
|
||||||
- import_tasks: tasks/linux.yaml
|
- import_tasks: tasks/linux.yaml
|
||||||
when: 'os_flavor == "linux"'
|
when: 'os_flavor == "linux"'
|
||||||
|
|
||||||
- include_tasks:
|
|
||||||
file: tasks/peruser.yaml
|
|
||||||
apply:
|
|
||||||
become: yes
|
|
||||||
become_user: "{{ initialize_user }}"
|
|
||||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
|
||||||
loop_control:
|
|
||||||
loop_var: initialize_user
|
|
||||||
|
|||||||
@@ -92,3 +92,9 @@
|
|||||||
dest: /usr/local/bin/freebsd_update_step1
|
dest: /usr/local/bin/freebsd_update_step1
|
||||||
- src: freebsd_update_step2
|
- src: freebsd_update_step2
|
||||||
dest: /usr/local/bin/freebsd_update_step2
|
dest: /usr/local/bin/freebsd_update_step2
|
||||||
|
- src: find_popular_ports_options.bash
|
||||||
|
dest: /usr/local/bin/find_popular_ports_options
|
||||||
|
- src: find_ports_containing_option.bash
|
||||||
|
dest: /usr/local/bin/find_ports_containing_option
|
||||||
|
- src: find_packages_that_installed_kernel_modules.bash
|
||||||
|
dest: /usr/local/bin/find_packages_that_installed_kernel_modules
|
||||||
|
|||||||
@@ -99,7 +99,7 @@
|
|||||||
become: true
|
become: true
|
||||||
become_user: "{{ build_user.name }}"
|
become_user: "{{ build_user.name }}"
|
||||||
args:
|
args:
|
||||||
creates: /var/cache/pacman/custom/custom.db.tar
|
creates: /var/cache/pacman/custom/custom.db.tar.sig
|
||||||
|
|
||||||
- name: Install scripts
|
- name: Install scripts
|
||||||
copy:
|
copy:
|
||||||
@@ -113,6 +113,8 @@
|
|||||||
dest: /usr/local/bin/aurutils-purge
|
dest: /usr/local/bin/aurutils-purge
|
||||||
- src: aurutils-sync
|
- src: aurutils-sync
|
||||||
dest: /usr/local/bin/aurutils-sync
|
dest: /usr/local/bin/aurutils-sync
|
||||||
|
- src: aurutils-update-devel-packages
|
||||||
|
dest: /usr/local/bin/
|
||||||
|
|
||||||
- name: build aurutils inside aurutils
|
- name: build aurutils inside aurutils
|
||||||
become_user: "{{ build_user.name }}"
|
become_user: "{{ build_user.name }}"
|
||||||
|
|||||||
@@ -1,15 +1,29 @@
|
|||||||
{% if cpu_opt is defined and cpu_opt %}
|
{% if cpu_opt is defined and cpu_opt %}
|
||||||
CPUTYPE?={{ cpu_opt }}
|
CPUTYPE?={{ cpu_opt }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
OPTIMIZED_CFLAGS=YES
|
KERNCONF=CUSTOM
|
||||||
BUILD_OPTIMIZED=YES
|
|
||||||
WITH_CPUFLAGS=YES
|
|
||||||
WITH_MALLOC_PRODUCTION=YES
|
WITH_MALLOC_PRODUCTION=YES
|
||||||
WITHOUT_LLVM_ASSERTIONS=YES
|
WITHOUT_LLVM_ASSERTIONS=YES
|
||||||
WITH_REPRODUCIBLE_BUILD=YES
|
WITH_REPRODUCIBLE_BUILD=YES
|
||||||
|
PORTS_MODULES+=graphics/drm-kmod
|
||||||
|
PORTS_MODULES+=graphics/gpu-firmware-intel-kmod
|
||||||
|
PORTS_MODULES+=net/wireguard-kmod
|
||||||
|
|
||||||
# Would be fun to experiment with:
|
# Would be fun to experiment with:
|
||||||
# WITHOUT_SOURCELESS=YES
|
# WITHOUT_SOURCELESS=YES
|
||||||
|
# WITHOUT_GAMES=YES
|
||||||
|
# WITHOUT_KERBEROS=YES
|
||||||
|
# WITHOUT_LEGACY_CONSOLE=YES
|
||||||
|
# WITHOUT_LIB32=YES
|
||||||
|
# WITHOUT_LOADER_GELI=YES
|
||||||
|
# WITHOUT_MLX5TOOL=YES
|
||||||
|
# WITHOUT_NDIS=YES
|
||||||
|
# WITHOUT_OFED=YES
|
||||||
|
# WITHOUT_PPP=YES
|
||||||
|
# WITH_SORT_THREADS=YES
|
||||||
|
# WITHOUT_TALK=YES
|
||||||
|
# WITHOUT_TCSH=YES
|
||||||
|
|
||||||
|
|
||||||
# Questionable Optimizations
|
# Questionable Optimizations
|
||||||
WITHOUT_FLOPPY=YES
|
WITHOUT_FLOPPY=YES
|
||||||
@@ -19,4 +33,3 @@ WITHOUT_IPFILTER=YES
|
|||||||
WITHOUT_LLVM_TARGET_ALL=YES
|
WITHOUT_LLVM_TARGET_ALL=YES
|
||||||
# Commented out because maybe I want email alerts for failing disks
|
# Commented out because maybe I want email alerts for failing disks
|
||||||
# WITHOUT_MAIL=YES
|
# WITHOUT_MAIL=YES
|
||||||
# WITHOUT_SENDMAIL=YES
|
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ IFS=$'\n\t'
|
|||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
perc=$1
|
perc=$1
|
||||||
|
if [ "$perc" -gt 100 ]; then
|
||||||
|
perc=100
|
||||||
|
fi
|
||||||
|
if [ "$perc" -lt 0 ]; then
|
||||||
|
perc=0
|
||||||
|
fi
|
||||||
epp=$((100 - perc))
|
epp=$((100 - perc))
|
||||||
|
|
||||||
sysctl -N dev.hwpstate_intel | grep -E 'dev.hwpstate_intel.[0-9]+.epp' | while read var; do
|
sysctl -N dev.hwpstate_intel | grep -E 'dev.hwpstate_intel.[0-9]+.epp' | while read var; do
|
||||||
|
|||||||
@@ -1,15 +1,27 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Tell speedshift whether to maximize CPU performance (100) or energy
|
# Tell speedshift whether to maximize CPU performance (100) or energy
|
||||||
# efficiency (0).
|
# efficiency (0). If set to 101 this will enable turboboost.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
IFS=$'\n\t'
|
IFS=$'\n\t'
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
perc=$1
|
perc=$1
|
||||||
|
|
||||||
if [ $perc -lt 50 ]; then
|
if [ "$perc" -gt 100 ]; then
|
||||||
echo "power" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
echo 0 | tee /sys/devices/system/cpu/intel_pstate/no_turbo
|
||||||
else
|
else
|
||||||
echo "performance" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
echo 1 | tee /sys/devices/system/cpu/intel_pstate/no_turbo
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$perc" -ge 80 ]; then
|
||||||
|
echo "performance" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
||||||
|
elif [ "$perc" -ge 60 ]; then
|
||||||
|
echo "balance_performance" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
||||||
|
elif [ "$perc" -ge 40 ]; then
|
||||||
|
echo "default" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
||||||
|
elif [ "$perc" -ge 20 ]; then
|
||||||
|
echo "balance_power" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
||||||
|
else
|
||||||
|
echo "power" | tee /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference
|
||||||
fi
|
fi
|
||||||
|
|||||||
6
ansible/roles/cpu/files/intel_microcode_loader.conf
Normal file
6
ansible/roles/cpu/files/intel_microcode_loader.conf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Load Intel microcode at boot before the kernel does feature detection.
|
||||||
|
#
|
||||||
|
# The alternative would have been /etc/rc.conf with:
|
||||||
|
# microcode_update_enable="YES"
|
||||||
|
cpu_microcode_load="YES"
|
||||||
|
cpu_microcode_name="/boot/firmware/intel-ucode.bin"
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
name:
|
name:
|
||||||
- lscpu # need to kldload cpuctl
|
- lscpu # need to kldload cpuctl
|
||||||
- powermon # need to kldload cpuctl
|
- powermon # need to kldload cpuctl
|
||||||
|
- cpu-microcode-intel
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Install loader.conf
|
- name: Install loader.conf
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
- coretemp
|
- coretemp
|
||||||
- cpuctl
|
- cpuctl
|
||||||
- aesni
|
- aesni
|
||||||
|
- intel_microcode
|
||||||
|
|
||||||
- name: Install service configuration
|
- name: Install service configuration
|
||||||
copy:
|
copy:
|
||||||
|
|||||||
@@ -4,27 +4,27 @@
|
|||||||
- powertop
|
- powertop
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Install tmpfiles.d configuration
|
# - name: Install tmpfiles.d configuration
|
||||||
copy:
|
# copy:
|
||||||
src: "files/{{ item }}_tmpfiles.conf"
|
# src: "files/{{ item }}_tmpfiles.conf"
|
||||||
dest: "/etc/tmpfiles.d/{{ item }}.conf"
|
# dest: "/etc/tmpfiles.d/{{ item }}.conf"
|
||||||
mode: 0644
|
# mode: 0644
|
||||||
owner: root
|
# owner: root
|
||||||
group: wheel
|
# group: wheel
|
||||||
loop:
|
# loop:
|
||||||
- disable_turboboost
|
# - disable_turboboost
|
||||||
|
|
||||||
- name: Favor energy efficiency for Speed Shift
|
# - name: Favor energy efficiency for Speed Shift
|
||||||
when: hwpstate is defined and hwpstate and cores is defined
|
# when: hwpstate is defined and hwpstate and cores is defined
|
||||||
template:
|
# template:
|
||||||
src: "templates/{{ item.src }}.j2"
|
# src: "templates/{{ item.src }}.j2"
|
||||||
dest: "{{ item.dest }}"
|
# dest: "{{ item.dest }}"
|
||||||
mode: 0755
|
# mode: 0755
|
||||||
owner: root
|
# owner: root
|
||||||
group: wheel
|
# group: wheel
|
||||||
loop:
|
# loop:
|
||||||
- src: energy_performance_preference.conf
|
# - src: energy_performance_preference.conf
|
||||||
dest: /etc/tmpfiles.d/energy_performance_preference.conf
|
# dest: /etc/tmpfiles.d/energy_performance_preference.conf
|
||||||
|
|
||||||
- name: Install scripts
|
- name: Install scripts
|
||||||
when: hwpstate is defined and hwpstate
|
when: hwpstate is defined and hwpstate
|
||||||
|
|||||||
19
ansible/roles/devfs/files/homeserver_devfs.rules
Normal file
19
ansible/roles/devfs/files/homeserver_devfs.rules
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# [localrules=10]
|
||||||
|
# add path 'input/*' mode 0660 group video
|
||||||
|
# add path 'usb/*' mode 0660 group usb
|
||||||
|
|
||||||
|
[tajailwg=13]
|
||||||
|
add include $devfsrules_hide_all
|
||||||
|
add include $devfsrules_unhide_basic
|
||||||
|
add include $devfsrules_unhide_login
|
||||||
|
add path 'bpf*' unhide
|
||||||
|
add path pf unhide
|
||||||
|
add path pflog unhide
|
||||||
|
add path pfsynv unhide
|
||||||
|
add path 'tun*' unhide
|
||||||
|
|
||||||
|
[tajaildhcp=14]
|
||||||
|
add include $devfsrules_hide_all
|
||||||
|
add include $devfsrules_unhide_basic
|
||||||
|
add include $devfsrules_unhide_login
|
||||||
|
add path 'bpf*' unhide
|
||||||
1
ansible/roles/emacs/defaults/main.yaml
Normal file
1
ansible/roles/emacs/defaults/main.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
emacs_flavor: "plain" # or full for systems where I do real development.
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
(package-initialize)
|
|
||||||
(add-to-list 'package-archives
|
|
||||||
'("melpa" . "https://melpa.org/packages/")
|
|
||||||
)
|
|
||||||
|
|
||||||
(when (not package-archive-contents)
|
|
||||||
(package-refresh-contents))
|
|
||||||
|
|
||||||
(unless (package-installed-p 'use-package)
|
|
||||||
(package-install 'use-package))
|
|
||||||
|
|
||||||
(use-package auto-package-update
|
|
||||||
:ensure t
|
|
||||||
:config
|
|
||||||
(setq auto-package-update-delete-old-versions t
|
|
||||||
auto-package-update-interval 14)
|
|
||||||
(auto-package-update-maybe))
|
|
||||||
|
|
||||||
(defconst private-dir (expand-file-name "private" user-emacs-directory))
|
|
||||||
(defconst temp-dir (format "%s/cache" private-dir)
|
|
||||||
"Hostname-based elisp temp directories")
|
|
||||||
|
|
||||||
;; Emacs customizations
|
|
||||||
(setq-default
|
|
||||||
inhibit-startup-screen t
|
|
||||||
initial-scratch-message nil
|
|
||||||
;; Send prompts to mini-buffer not the GUI
|
|
||||||
use-dialog-box nil
|
|
||||||
confirm-nonexistent-file-or-buffer t
|
|
||||||
save-interprogram-paste-before-kill t
|
|
||||||
mouse-yank-at-point t
|
|
||||||
require-final-newline t
|
|
||||||
visible-bell nil
|
|
||||||
ring-bell-function 'ignore
|
|
||||||
custom-file "~/.emacs.d/.custom.el"
|
|
||||||
;; http://ergoemacs.org/emacs/emacs_stop_cursor_enter_prompt.html
|
|
||||||
minibuffer-prompt-properties
|
|
||||||
'(read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt)
|
|
||||||
|
|
||||||
;; Disable non selected window highlight
|
|
||||||
cursor-in-non-selected-windows nil
|
|
||||||
highlight-nonselected-windows nil
|
|
||||||
;; PATH
|
|
||||||
exec-path (append exec-path '("/usr/local/bin/"))
|
|
||||||
indent-tabs-mode nil
|
|
||||||
tab-width 4
|
|
||||||
inhibit-startup-message t
|
|
||||||
fringes-outside-margins t
|
|
||||||
x-select-enable-clipboard t
|
|
||||||
use-package-always-ensure t
|
|
||||||
ispell-program-name "aspell"
|
|
||||||
browse-url-browser-function 'browse-url-generic
|
|
||||||
browse-url-generic-program "firefox-developer-edition"
|
|
||||||
frame-title-format '("" invocation-name ": "(:eval (if (buffer-file-name)
|
|
||||||
(abbreviate-file-name (buffer-file-name))
|
|
||||||
"%b")))
|
|
||||||
;; mouse-wheel-progressive-speed nil ;; Don't accelerate mouse wheel
|
|
||||||
;; mouse-wheel-scroll-amount '(5 ((shift) . 3))
|
|
||||||
use-short-answers t
|
|
||||||
package-native-compile t
|
|
||||||
delete-selection-mode t
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun assert-directory (p)
|
|
||||||
(unless (file-exists-p p) (make-directory p t))
|
|
||||||
p
|
|
||||||
)
|
|
||||||
(assert-directory (concat temp-dir "/auto-save-list/"))
|
|
||||||
(setq autoload-directory (concat user-emacs-directory (file-name-as-directory "elisp") (file-name-as-directory "autoload")))
|
|
||||||
(add-to-list 'load-path (assert-directory autoload-directory))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;; Bookmarks
|
|
||||||
(setq
|
|
||||||
;; persistent bookmarks
|
|
||||||
bookmark-save-flag t
|
|
||||||
bookmark-default-file (concat temp-dir "/bookmarks"))
|
|
||||||
|
|
||||||
;; Backups enabled, use nil to disable
|
|
||||||
(setq
|
|
||||||
history-length 1000
|
|
||||||
backup-inhibited nil
|
|
||||||
make-backup-files nil
|
|
||||||
auto-save-default nil
|
|
||||||
auto-save-list-file-name (concat temp-dir "/autosave")
|
|
||||||
create-lockfiles nil
|
|
||||||
backup-directory-alist `((".*" . ,(concat temp-dir "/backup/")))
|
|
||||||
auto-save-file-name-transforms `((".*" ,(concat temp-dir "/auto-save-list/") t)))
|
|
||||||
|
|
||||||
;; Disable toolbar & menubar
|
|
||||||
(menu-bar-mode -1)
|
|
||||||
(when (fboundp 'tool-bar-mode)
|
|
||||||
(tool-bar-mode -1))
|
|
||||||
(when ( fboundp 'scroll-bar-mode)
|
|
||||||
(scroll-bar-mode -1))
|
|
||||||
|
|
||||||
(context-menu-mode +1)
|
|
||||||
|
|
||||||
;; Delete trailing whitespace before save
|
|
||||||
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
|
||||||
|
|
||||||
(use-package diminish)
|
|
||||||
|
|
||||||
(provide 'base)
|
|
||||||
;;; base ends here
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
(use-package eglot
|
|
||||||
:commands (eglot eglot-ensure)
|
|
||||||
:bind (:map eglot-mode-map
|
|
||||||
;; M-.
|
|
||||||
;; ([remap xref-find-definitions] . lsp-ui-peek-find-definitions)
|
|
||||||
;; M-?
|
|
||||||
;; ([remap xref-find-references] . lsp-ui-peek-find-references)
|
|
||||||
("C-c C-a" . eglot-code-actions)
|
|
||||||
)
|
|
||||||
:hook (
|
|
||||||
(eglot-managed-mode . (lambda ()
|
|
||||||
(when (eglot-managed-p)
|
|
||||||
(corfu-mode +1)
|
|
||||||
)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
:config
|
|
||||||
;; Increase garbage collection threshold for performance (default 800000)
|
|
||||||
(setq gc-cons-threshold 100000000)
|
|
||||||
|
|
||||||
;; Increase amount of data read from processes, default 4k
|
|
||||||
(when (>= emacs-major-version 27)
|
|
||||||
(setq read-process-output-max (* 1024 1024)) ;; 1mb
|
|
||||||
)
|
|
||||||
|
|
||||||
(set-face-attribute 'eglot-highlight-symbol-face nil :background "#0291a1" :foreground "black")
|
|
||||||
(set-face-attribute 'eglot-mode-line nil :inherit 'mode-line :bold nil)
|
|
||||||
|
|
||||||
(use-package consult-eglot
|
|
||||||
:bind (
|
|
||||||
:map eglot-mode-map
|
|
||||||
;; C-M-.
|
|
||||||
([remap xref-find-apropos] . #'consult-eglot-symbols)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
:custom
|
|
||||||
(eglot-autoshutdown t "Shut down server when last buffer is killed.")
|
|
||||||
(eglot-sync-connect 0 "Don't block on language server starting.")
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'common-lsp)
|
|
||||||
25
ansible/roles/emacs/files/early-init.el
Normal file
25
ansible/roles/emacs/files/early-init.el
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
(setq gc-cons-threshold 100000000) ;; Increase garbage collection threshold for performance (default 800000)
|
||||||
|
;; Increase amount of data read from processes, default 4k
|
||||||
|
(when (>= emacs-major-version 27)
|
||||||
|
(setq read-process-output-max (* 1024 1024)) ;; 1mb
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Suppress warnings
|
||||||
|
(setq byte-compile-warnings '(not obsolete))
|
||||||
|
(setq warning-suppress-log-types '((comp) (bytecomp)))
|
||||||
|
(setq native-comp-async-report-warnings-errors 'silent)
|
||||||
|
|
||||||
|
;; Set up default visual settings
|
||||||
|
(setq frame-resize-pixelwise t)
|
||||||
|
;; Disable toolbar & menubar
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(when (fboundp 'tool-bar-mode)
|
||||||
|
(tool-bar-mode -1))
|
||||||
|
(when (display-graphic-p)
|
||||||
|
(context-menu-mode +1))
|
||||||
|
|
||||||
|
(setq default-frame-alist '((fullscreen . maximized)
|
||||||
|
(vertical-scroll-bars . nil)
|
||||||
|
(horizontal-scroll-bars . nil)
|
||||||
|
;; Set dark colors in early-init to prevent flashes of white.
|
||||||
|
(background-color . "#000000")))
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
|
(use-package diminish)
|
||||||
|
|
||||||
;; Eglot recommends pulling the latest of the standard libraries it
|
;; Eglot recommends pulling the latest of the standard libraries it
|
||||||
;; uses from ELPA if you're not tracking the current emacs development
|
;; uses from ELPA if you're not tracking the current.config/emacsevelopment
|
||||||
;; branch.
|
;; branch.
|
||||||
(use-package xref
|
(use-package xref
|
||||||
:pin gnu
|
:pin gnu
|
||||||
@@ -27,24 +29,23 @@
|
|||||||
:config
|
:config
|
||||||
(dashboard-setup-startup-hook))
|
(dashboard-setup-startup-hook))
|
||||||
|
|
||||||
(use-package ediff
|
|
||||||
:config
|
|
||||||
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
|
|
||||||
(setq-default ediff-highlight-all-diffs 'nil)
|
|
||||||
(setq ediff-diff-options "-w"))
|
|
||||||
|
|
||||||
(when (version<= "26.0.50" emacs-version )
|
(when (version<= "26.0.50" emacs-version )
|
||||||
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
||||||
(add-hook 'prog-mode-hook 'column-number-mode)
|
(add-hook 'prog-mode-hook 'column-number-mode)
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package page-break-lines)
|
;; Display a horizontal line instead of ^L for page break characters
|
||||||
|
(use-package page-break-lines
|
||||||
|
:diminish
|
||||||
|
:config
|
||||||
|
(global-page-break-lines-mode +1)
|
||||||
|
)
|
||||||
|
|
||||||
(use-package recentf
|
(use-package recentf
|
||||||
;; This is an emacs built-in but we're pulling the latest version
|
;; This is an emacs built-in but we're pulling the latest version
|
||||||
:config
|
:config
|
||||||
(setq recentf-max-saved-items 100)
|
(setq recentf-max-saved-items 100)
|
||||||
(setq recentf-save-file (recentf-expand-file-name "~/.emacs.d/private/cache/recentf"))
|
(setq recentf-save-file (recentf-expand-file-name "~/.config/emacs/private/cache/recentf"))
|
||||||
(recentf-mode 1))
|
(recentf-mode 1))
|
||||||
|
|
||||||
;; Persist history over Emacs restarts. Vertico sorts by history position.
|
;; Persist history over Emacs restarts. Vertico sorts by history position.
|
||||||
@@ -64,9 +65,10 @@
|
|||||||
|
|
||||||
(setq tramp-default-method "ssh")
|
(setq tramp-default-method "ssh")
|
||||||
|
|
||||||
(use-package dockerfile-mode)
|
|
||||||
|
|
||||||
(use-package nginx-mode
|
(use-package nginx-mode
|
||||||
|
:mode (
|
||||||
|
("headers\\.include\\'" . nginx-mode)
|
||||||
|
)
|
||||||
:config
|
:config
|
||||||
(setq nginx-indent-level 4))
|
(setq nginx-indent-level 4))
|
||||||
|
|
||||||
@@ -53,7 +53,15 @@
|
|||||||
(let ((load-it (lambda (f)
|
(let ((load-it (lambda (f)
|
||||||
(load-file (concat (file-name-as-directory dir) f)))
|
(load-file (concat (file-name-as-directory dir) f)))
|
||||||
))
|
))
|
||||||
(mapc load-it (directory-files dir nil "\\.el$"))))
|
(mapc load-it (directory-files dir nil "\\.el$"))))
|
||||||
|
|
||||||
|
(defun generate-vc-link ()
|
||||||
|
(interactive)
|
||||||
|
(or
|
||||||
|
(generate-github-link)
|
||||||
|
(generate-source-hut-link)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(defun generate-github-link ()
|
(defun generate-github-link ()
|
||||||
"Generate a permalink to the current line."
|
"Generate a permalink to the current line."
|
||||||
@@ -69,10 +77,37 @@
|
|||||||
(let* (
|
(let* (
|
||||||
(gh-org (match-string 2 repository-url))
|
(gh-org (match-string 2 repository-url))
|
||||||
(gh-repo (match-string 3 repository-url))
|
(gh-repo (match-string 3 repository-url))
|
||||||
(full-url (format "https://github.com/%s/%s/blob/%s/%s#L%s" gh-org gh-repo current-rev relative-path line-number))
|
(full-url (format "https://github.com/%s/%s/blob/%s/%s?plain=1#L%s" gh-org gh-repo current-rev relative-path line-number))
|
||||||
)
|
)
|
||||||
(message "%s" full-url)
|
(message "%s" full-url)
|
||||||
(kill-new full-url)
|
(kill-new full-url)
|
||||||
|
t
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun generate-source-hut-link ()
|
||||||
|
"Generate a permalink to the current line."
|
||||||
|
(interactive)
|
||||||
|
(let (
|
||||||
|
(current-rev (vc-working-revision buffer-file-name))
|
||||||
|
(line-number (line-number-at-pos))
|
||||||
|
(repository-url (vc-git-repository-url buffer-file-name))
|
||||||
|
(relative-path (file-relative-name buffer-file-name (vc-root-dir)))
|
||||||
|
)
|
||||||
|
(message "Using repo url %s" repository-url)
|
||||||
|
(save-match-data
|
||||||
|
(and (string-match "https://git.sr.ht/\\([^/]+\\)/\\([^/]+\\)" repository-url)
|
||||||
|
(let* (
|
||||||
|
(sh-org (match-string 1 repository-url))
|
||||||
|
(sh-repo (match-string 2 repository-url))
|
||||||
|
(full-url (format "https://git.sr.ht/%s/%s/tree/%s/%s#L%s" sh-org sh-repo current-rev relative-path line-number))
|
||||||
|
)
|
||||||
|
(message "%s" full-url)
|
||||||
|
(kill-new full-url)
|
||||||
|
t
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -7,6 +7,6 @@
|
|||||||
;; dabbrev-expand. Seems to be some sort of dumb-expand. Accidentally hitting it when trying to use M-?
|
;; dabbrev-expand. Seems to be some sort of dumb-expand. Accidentally hitting it when trying to use M-?
|
||||||
(global-unset-key (kbd "M-/"))
|
(global-unset-key (kbd "M-/"))
|
||||||
|
|
||||||
(global-set-key (kbd "C-x g l") 'generate-github-link)
|
(global-set-key (kbd "C-x g l") 'generate-vc-link)
|
||||||
|
|
||||||
(provide 'base-global-keys)
|
(provide 'base-global-keys)
|
||||||
78
ansible/roles/emacs/files/elisp/base.el
Normal file
78
ansible/roles/emacs/files/elisp/base.el
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
(package-initialize)
|
||||||
|
(use-package use-package)
|
||||||
|
|
||||||
|
(add-to-list 'package-archives
|
||||||
|
'("melpa" . "https://melpa.org/packages/")
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package auto-package-update
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(setq auto-package-update-delete-old-versions t
|
||||||
|
auto-package-update-interval 14)
|
||||||
|
(auto-package-update-maybe))
|
||||||
|
|
||||||
|
(defun assert-directory (p)
|
||||||
|
(unless (file-exists-p p) (make-directory p t))
|
||||||
|
p
|
||||||
|
)
|
||||||
|
|
||||||
|
(defconst private-dir (expand-file-name "private" user-emacs-directory))
|
||||||
|
(defconst temp-dir (format "%s/cache" private-dir)
|
||||||
|
"Hostname-based elisp temp directories")
|
||||||
|
(assert-directory (concat temp-dir "/auto-save-list/"))
|
||||||
|
(setq autoload-directory (concat user-emacs-directory (file-name-as-directory "elisp") (file-name-as-directory "autoload")))
|
||||||
|
(add-to-list 'load-path (assert-directory autoload-directory))
|
||||||
|
|
||||||
|
(setq-default
|
||||||
|
;; Disable backup files and lockfiles
|
||||||
|
make-backup-files nil
|
||||||
|
auto-save-default nil
|
||||||
|
create-lockfiles nil
|
||||||
|
;; Unless otherwise specified, always install packages if they are absent.
|
||||||
|
use-package-always-ensure t
|
||||||
|
;; Point custom-file at /dev/null so emacs does not write any settings to my dotfiles.
|
||||||
|
custom-file "/dev/null"
|
||||||
|
;; Don't pop up a small window at the bottom of emacs at launch.
|
||||||
|
inhibit-startup-screen t
|
||||||
|
inhibit-startup-message t
|
||||||
|
;; Give the scratch buffer a clean slate.
|
||||||
|
initial-major-mode 'fundamental-mode
|
||||||
|
initial-scratch-message nil
|
||||||
|
;; Send prompts to mini-buffer not the GUI
|
||||||
|
use-dialog-box nil
|
||||||
|
;; End files with line break
|
||||||
|
require-final-newline t
|
||||||
|
;; Use spaces, not tabs
|
||||||
|
indent-tabs-mode nil
|
||||||
|
;; Use a better frame title
|
||||||
|
frame-title-format '("" invocation-name ": "(:eval (if (buffer-file-name)
|
||||||
|
(abbreviate-file-name (buffer-file-name))
|
||||||
|
"%b")))
|
||||||
|
;; Use 'y' or 'n' instead of 'yes' or 'no'
|
||||||
|
use-short-answers t
|
||||||
|
;; Natively compile packages
|
||||||
|
package-native-compile t
|
||||||
|
;; Confirm when opening a file that does not exist
|
||||||
|
confirm-nonexistent-file-or-buffer t
|
||||||
|
;; Do not require double space to end a sentence.
|
||||||
|
sentence-end-double-space nil
|
||||||
|
;; Show trailing whitespace
|
||||||
|
show-trailing-whitespace t
|
||||||
|
;; Remove the line when killing it with ctrl-k
|
||||||
|
kill-whole-line t
|
||||||
|
)
|
||||||
|
|
||||||
|
;; (setq-default fringes-outside-margins t)
|
||||||
|
|
||||||
|
;; Per-pixel scrolling instead of per-line
|
||||||
|
(pixel-scroll-precision-mode)
|
||||||
|
|
||||||
|
;; Typed text replaces selection
|
||||||
|
(delete-selection-mode)
|
||||||
|
|
||||||
|
|
||||||
|
;; Delete trailing whitespace before save
|
||||||
|
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
||||||
|
|
||||||
|
(provide 'base)
|
||||||
46
ansible/roles/emacs/files/elisp/common-lsp.el
Normal file
46
ansible/roles/emacs/files/elisp/common-lsp.el
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
(use-package eglot
|
||||||
|
:pin gnu
|
||||||
|
:commands (eglot eglot-ensure)
|
||||||
|
:bind (:map eglot-mode-map
|
||||||
|
;; M-.
|
||||||
|
;; ([remap xref-find-definitions] . lsp-ui-peek-find-definitions)
|
||||||
|
;; M-?
|
||||||
|
;; ([remap xref-find-references] . lsp-ui-peek-find-references)
|
||||||
|
("C-c C-a" . eglot-code-actions)
|
||||||
|
;; C-M-.
|
||||||
|
([remap xref-find-apropos] . #'consult-eglot-symbols)
|
||||||
|
)
|
||||||
|
;; :hook (
|
||||||
|
;; (eglot-managed-mode . (lambda ()
|
||||||
|
;; (when (eglot-managed-p)
|
||||||
|
;; (corfu-mode +1)
|
||||||
|
;; )
|
||||||
|
;; ))
|
||||||
|
;; )
|
||||||
|
:config
|
||||||
|
(fset #'jsonrpc--log-event #'ignore) ;; Disable logging LSP traffic for performance boost
|
||||||
|
(set-face-attribute 'eglot-highlight-symbol-face nil :background "#0291a1" :foreground "black")
|
||||||
|
(set-face-attribute 'eglot-mode-line nil :inherit 'mode-line :bold nil)
|
||||||
|
|
||||||
|
|
||||||
|
:custom
|
||||||
|
(eglot-autoshutdown t "Shut down server when last buffer is killed.")
|
||||||
|
(eglot-sync-connect 0 "Don't block on language server starting.")
|
||||||
|
(eglot-send-changes-idle-time 0.1)
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package consult-eglot
|
||||||
|
:commands (consult-eglot-symbols)
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package company
|
||||||
|
:after eglot
|
||||||
|
:hook (eglot-managed-mode . company-mode)
|
||||||
|
:config
|
||||||
|
(setq company-backends '((company-capf)))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; (use-package company-box
|
||||||
|
;; :hook (company-mode . company-box-mode))
|
||||||
|
|
||||||
|
(provide 'common-lsp)
|
||||||
16
ansible/roles/emacs/files/elisp/lang-bash.el
Normal file
16
ansible/roles/emacs/files/elisp/lang-bash.el
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
(require 'util-tree-sitter)
|
||||||
|
|
||||||
|
(use-package bash-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:commands (bash-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(bash-ts-mode . (lambda ()
|
||||||
|
(flymake-mode +1)
|
||||||
|
)))
|
||||||
|
:init
|
||||||
|
(add-to-list 'major-mode-remap-alist '(sh-mode . bash-ts-mode))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(bash "https://github.com/tree-sitter/tree-sitter-bash"))
|
||||||
|
(unless (treesit-ready-p 'bash) (treesit-install-language-grammar 'bash))
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'lang-bash)
|
||||||
13
ansible/roles/emacs/files/elisp/lang-dockerfile.el
Normal file
13
ansible/roles/emacs/files/elisp/lang-dockerfile.el
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
(use-package dockerfile-ts-mode
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("Dockerfile\\'" . dockerfile-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (dockerfile-mode dockerfile-ts-mode)
|
||||||
|
:init
|
||||||
|
(add-to-list 'major-mode-remap-alist '(dockerfile-mode . dockerfile-ts-mode))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile"))
|
||||||
|
(unless (treesit-ready-p 'dockerfile) (treesit-install-language-grammar 'dockerfile))
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'lang-dockerfile)
|
||||||
33
ansible/roles/emacs/files/elisp/lang-go.el
Normal file
33
ansible/roles/emacs/files/elisp/lang-go.el
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
(require 'common-lsp)
|
||||||
|
(require 'util-tree-sitter)
|
||||||
|
|
||||||
|
(use-package go-ts-mode
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.go\\'" . go-ts-mode)
|
||||||
|
("/go\\.mod\\'" . go-mod-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (go-ts-mode go-mod-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(go-ts-mode . (lambda ()
|
||||||
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|
||||||
|
(go-mod-ts-mode . (lambda ()
|
||||||
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|
||||||
|
;; (before-save . lsp-format-buffer)
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(go "https://github.com/tree-sitter/tree-sitter-go"))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(gomod "https://github.com/camdencheek/tree-sitter-go-mod"))
|
||||||
|
(unless (treesit-ready-p 'go) (treesit-install-language-grammar 'go))
|
||||||
|
(unless (treesit-ready-p 'gomod) (treesit-install-language-grammar 'gomod))
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'lang-go)
|
||||||
113
ansible/roles/emacs/files/elisp/lang-javascript.el
Normal file
113
ansible/roles/emacs/files/elisp/lang-javascript.el
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
(require 'common-lsp)
|
||||||
|
(require 'util-tree-sitter)
|
||||||
|
|
||||||
|
(use-package json-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.json\\'" . json-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (json-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(json-ts-mode . (lambda ()
|
||||||
|
(add-hook 'before-save-hook 'json-fmt-jq nil 'local)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(json "https://github.com/tree-sitter/tree-sitter-json"))
|
||||||
|
(unless (treesit-ready-p 'json) (treesit-install-language-grammar 'json))
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun json-fmt-jq ()
|
||||||
|
"Run jq."
|
||||||
|
(run-command-on-buffer "jq" "--monochrome-output" ".")
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package tsx-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.tsx\\'" . tsx-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (tsx-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(tsx-ts-mode . (lambda ()
|
||||||
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")))
|
||||||
|
(unless (treesit-ready-p 'tsx) (treesit-install-language-grammar 'tsx))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(use-package typescript-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.ts\\'" . typescript-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (typescript-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(typescript-ts-mode . (lambda ()
|
||||||
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(typescript . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")))
|
||||||
|
(unless (treesit-ready-p 'typescript) (treesit-install-language-grammar 'typescript))
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package js-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.js\\'" . js-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (js-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(js-ts-mode . (lambda ()
|
||||||
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")))
|
||||||
|
(unless (treesit-ready-p 'javascript) (treesit-install-language-grammar 'javascript))
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package css-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.css\\'" . css-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (css-ts-mode)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(css "https://github.com/tree-sitter/tree-sitter-css"))
|
||||||
|
(unless (treesit-ready-p 'css) (treesit-install-language-grammar 'css))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(use-package web-mode
|
||||||
|
:mode (("\\.dust\\'" . dust-mode)
|
||||||
|
)
|
||||||
|
:config
|
||||||
|
(setq web-mode-markup-indent-offset 2)
|
||||||
|
(setq web-mode-enable-current-element-highlight t)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Define a custom mode for dust so that org-mode handle #+BEGIN_SRC dust blocks
|
||||||
|
(define-derived-mode dust-mode web-mode "WebDust"
|
||||||
|
"Major mode for editing dust templates in web-mode."
|
||||||
|
(web-mode)
|
||||||
|
(web-mode-set-engine "dust")
|
||||||
|
;; (setq web-mode-content-type "html")
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'lang-javascript)
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
:init (setq markdown-command "multimarkdown"))
|
:init (setq markdown-command "multimarkdown"))
|
||||||
|
|
||||||
;; For code block editing
|
;; For code block editing
|
||||||
(use-package edit-indirect)
|
(use-package edit-indirect
|
||||||
|
:commands (edit-indirect-region edit-indirect-save edit-indirect-abort edit-indirect-commit edit-indirect-display-active-buffer)
|
||||||
|
)
|
||||||
|
|
||||||
(provide 'lang-markdown)
|
(provide 'lang-markdown)
|
||||||
@@ -20,6 +20,9 @@
|
|||||||
org-confirm-babel-evaluate nil
|
org-confirm-babel-evaluate nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;; Show the full source of org-mode links instead of condensing them. I.E. render "[[foo]]" instead of "foo"
|
||||||
|
(setq org-descriptive-links nil)
|
||||||
|
|
||||||
;; Only interpret _ and ^ and sub and superscripts if they're of the form _{subscript} and ^{superscript}
|
;; Only interpret _ and ^ and sub and superscripts if they're of the form _{subscript} and ^{superscript}
|
||||||
(setq org-export-with-sub-superscripts '{})
|
(setq org-export-with-sub-superscripts '{})
|
||||||
;; Don't include a "validate" link at the bottom of html export
|
;; Don't include a "validate" link at the bottom of html export
|
||||||
@@ -67,7 +70,6 @@
|
|||||||
(use-package org-bullets
|
(use-package org-bullets
|
||||||
:commands org-bullets-mode
|
:commands org-bullets-mode
|
||||||
:hook (org-mode . org-bullets-mode)
|
:hook (org-mode . org-bullets-mode)
|
||||||
:bind ((:map org-mode-map ([remap fill-paragraph] . unfill-toggle)))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package gnuplot-mode)
|
(use-package gnuplot-mode)
|
||||||
@@ -52,11 +52,11 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
(use-package python
|
(use-package python
|
||||||
:mode ("\\.py\\'" . python-mode)
|
:mode ("\\.py\\'" . python-ts-mode)
|
||||||
:commands python-mode
|
:commands (python-mode python-ts-mode)
|
||||||
:pin manual
|
:pin manual
|
||||||
:hook (
|
:hook (
|
||||||
(python-mode . (lambda ()
|
(python-ts-mode . (lambda ()
|
||||||
(when (executable-find "poetry")
|
(when (executable-find "poetry")
|
||||||
(add-poetry-venv-to-path)
|
(add-poetry-venv-to-path)
|
||||||
(let ((venv (locate-venv-poetry))) (when venv
|
(let ((venv (locate-venv-poetry))) (when venv
|
||||||
@@ -64,14 +64,19 @@
|
|||||||
(list (cons ':python (list ':venvPath venv ':pythonPath (concat venv "/bin/python")))))
|
(list (cons ':python (list ':venvPath venv ':pythonPath (concat venv "/bin/python")))))
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
(eglot-ensure)
|
(when-linux
|
||||||
|
(eglot-ensure)
|
||||||
|
)
|
||||||
|
|
||||||
(add-hook 'before-save-hook 'python-fmt nil 'local)
|
(add-hook 'before-save-hook 'python-fmt nil 'local)
|
||||||
(tree-sitter-hl-mode +1)
|
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
:bind ((:map python-mode-map ([backspace] . python-backspace))
|
:bind ((:map python-ts-mode-map ([backspace] . python-backspace))
|
||||||
)
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'major-mode-remap-alist '(python-mode . python-ts-mode))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(python "https://github.com/tree-sitter/tree-sitter-python"))
|
||||||
|
(unless (treesit-ready-p 'python) (treesit-install-language-grammar 'python))
|
||||||
)
|
)
|
||||||
|
|
||||||
(provide 'lang-python)
|
(provide 'lang-python)
|
||||||
92
ansible/roles/emacs/files/elisp/lang-rust.el
Normal file
92
ansible/roles/emacs/files/elisp/lang-rust.el
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
(require 'common-lsp)
|
||||||
|
(require 'util-tree-sitter)
|
||||||
|
|
||||||
|
(defun locate-rust-analyzer ()
|
||||||
|
"Find rust-analyzer."
|
||||||
|
(let ((rust-analyzer-paths (list (locate-rust-analyzer-rustup) (locate-rust-analyzer-ansible-built) (locate-rust-analyzer-in-path))))
|
||||||
|
(let ((first-non-nil-path (seq-find (lambda (elt) elt) rust-analyzer-paths)))
|
||||||
|
first-non-nil-path
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun locate-rust-analyzer-rustup ()
|
||||||
|
"Find rust-analyzer through rustup."
|
||||||
|
(run-command-in-directory nil "rustup" "which" "rust-analyzer")
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun locate-rust-analyzer-ansible-built ()
|
||||||
|
"Find rust-analyzer where the ansible playbook built it."
|
||||||
|
(let ((rust-analyzer-path "/opt/rust-analyzer/target/release/rust-analyzer"))
|
||||||
|
(when (file-exists-p rust-analyzer-path)
|
||||||
|
rust-analyzer-path
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun locate-rust-analyzer-in-path ()
|
||||||
|
"Find rust-analyzer in $PATH."
|
||||||
|
(executable-find "rust-analyzer")
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package rust-ts-mode
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.rs\\'" . rust-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (rust-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(rust-ts-mode . (lambda ()
|
||||||
|
(eglot-ensure)
|
||||||
|
;; Disable on-type formatting which was incorrectly injecting parenthesis into my code.
|
||||||
|
(make-local-variable 'eglot-ignored-server-capabilities)
|
||||||
|
(add-to-list 'eglot-ignored-server-capabilities :documentOnTypeFormattingProvider)
|
||||||
|
;; Configure initialization options
|
||||||
|
(let ((rust-analyzer-command (locate-rust-analyzer)))
|
||||||
|
(when rust-analyzer-command
|
||||||
|
;; (add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command)))
|
||||||
|
(add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command :initializationOptions (:imports (:granularity (:enforce t :group "item")
|
||||||
|
:merge (:glob nil)
|
||||||
|
:prefix "self")
|
||||||
|
))))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(add-hook 'before-save-hook 'eglot-format-buffer nil 'local)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'major-mode-remap-alist '(rust-mode . rust-ts-mode))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(rust "https://github.com/tree-sitter/tree-sitter-rust"))
|
||||||
|
(unless (treesit-ready-p 'yaml) (treesit-install-language-grammar 'rust))
|
||||||
|
:config
|
||||||
|
;; Add keybindings for interacting with Cargo
|
||||||
|
(use-package cargo
|
||||||
|
:hook (rust-ts-mode . cargo-minor-mode))
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package toml-ts-mode
|
||||||
|
:ensure nil
|
||||||
|
:pin manual
|
||||||
|
:mode (
|
||||||
|
("\\.toml\\'" . toml-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (toml-ts-mode)
|
||||||
|
:init
|
||||||
|
(add-to-list 'treesit-language-source-alist '(toml "https://github.com/tree-sitter/tree-sitter-toml"))
|
||||||
|
(unless (treesit-ready-p 'toml) (treesit-install-language-grammar 'toml))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Set additional rust-analyzer settings:
|
||||||
|
;;
|
||||||
|
;; (add-to-list 'eglot-server-programs `(rust-ts-mode . (,rust-analyzer-command :initializationOptions (:cargo (:features "all")))))
|
||||||
|
;;
|
||||||
|
;; In addition to the above, directory-specific settings can be written to a .dir-locals.el with the contents:
|
||||||
|
;;
|
||||||
|
;; (
|
||||||
|
;; (rust-ts-mode . ((eglot-workspace-configuration
|
||||||
|
;; . (:rust-analyzer (:cargo (:noDefaultFeatures t :features ["compare" "tracing"]))))
|
||||||
|
;; ))
|
||||||
|
;; )
|
||||||
|
|
||||||
|
|
||||||
|
(provide 'lang-rust)
|
||||||
@@ -13,7 +13,6 @@
|
|||||||
:custom (hcl-indent-level 2)
|
:custom (hcl-indent-level 2)
|
||||||
:hook (
|
:hook (
|
||||||
(hcl-mode . (lambda () (unless (derived-mode-p 'terraform-mode) (add-hook 'before-save-hook 'terraform-fmt nil 'local))))
|
(hcl-mode . (lambda () (unless (derived-mode-p 'terraform-mode) (add-hook 'before-save-hook 'terraform-fmt nil 'local))))
|
||||||
(hcl-mode . tree-sitter-hl-mode)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
27
ansible/roles/emacs/files/elisp/lang-yaml.el
Normal file
27
ansible/roles/emacs/files/elisp/lang-yaml.el
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
(defun yaml-format-buffer ()
|
||||||
|
"Run prettier."
|
||||||
|
(interactive)
|
||||||
|
(run-command-on-buffer "prettier" "--stdin-filepath" buffer-file-name)
|
||||||
|
)
|
||||||
|
|
||||||
|
(use-package yaml-ts-mode
|
||||||
|
:mode
|
||||||
|
(
|
||||||
|
("\\.y[a]?ml\\'" . yaml-ts-mode)
|
||||||
|
("playbook\\.tmp\\'" . yaml-ts-mode)
|
||||||
|
("environments/[^/]*/group_vars/[^/]*\\'" . yaml-ts-mode)
|
||||||
|
("environments/[^/]*/host_vars/[^/]*\\'" . yaml-ts-mode)
|
||||||
|
)
|
||||||
|
:commands (yaml-ts-mode)
|
||||||
|
:hook (
|
||||||
|
(yaml-ts-mode . (lambda ()
|
||||||
|
(add-hook 'before-save-hook 'yaml-format-buffer nil 'local)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
:init
|
||||||
|
(add-to-list 'major-mode-remap-alist '(yaml-mode . yaml-ts-mode))
|
||||||
|
(add-to-list 'treesit-language-source-alist '(yaml "https://github.com/ikatyang/tree-sitter-yaml"))
|
||||||
|
(unless (treesit-ready-p 'yaml) (treesit-install-language-grammar 'yaml))
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'lang-yaml)
|
||||||
10
ansible/roles/emacs/files/elisp/util-flymake.el
Normal file
10
ansible/roles/emacs/files/elisp/util-flymake.el
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
(use-package flymake
|
||||||
|
:pin manual
|
||||||
|
:ensure nil
|
||||||
|
:commands (flymake-mode)
|
||||||
|
:config
|
||||||
|
;; Set the text before the brackets for flymake's modeline output to an empty string to make it less verbose.
|
||||||
|
(setq flymake-mode-line-lighter "")
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'util-flymake)
|
||||||
16
ansible/roles/emacs/files/elisp/util-tree-sitter.el
Normal file
16
ansible/roles/emacs/files/elisp/util-tree-sitter.el
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
(use-package treesit
|
||||||
|
:pin manual
|
||||||
|
:ensure nil
|
||||||
|
:commands (treesit-install-language-grammar treesit-ready-p)
|
||||||
|
:init
|
||||||
|
(setq treesit-language-source-alist '())
|
||||||
|
:config
|
||||||
|
;; Default to the max level of detail in treesitter highlighting. This
|
||||||
|
;; can be overridden in each language's use-package call with:
|
||||||
|
;;
|
||||||
|
;; :custom
|
||||||
|
;; (treesit-font-lock-level 3)
|
||||||
|
(setq treesit-font-lock-level 4)
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'util-tree-sitter)
|
||||||
@@ -46,11 +46,11 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package corfu
|
;; (use-package corfu
|
||||||
:commands (corfu-mode global-corfu-mode)
|
;; :commands (corfu-mode global-corfu-mode)
|
||||||
:custom
|
;; :custom
|
||||||
(corfu-auto t)
|
;; (corfu-auto t)
|
||||||
)
|
;; )
|
||||||
|
|
||||||
(use-package marginalia
|
(use-package marginalia
|
||||||
:config (marginalia-mode))
|
:config (marginalia-mode))
|
||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
(require 'util-vertico)
|
(require 'util-vertico)
|
||||||
|
|
||||||
|
(require 'util-flymake)
|
||||||
|
|
||||||
(require 'lang-python)
|
(require 'lang-python)
|
||||||
|
|
||||||
(require 'lang-javascript)
|
(require 'lang-javascript)
|
||||||
@@ -28,6 +30,6 @@
|
|||||||
|
|
||||||
(require 'lang-go)
|
(require 'lang-go)
|
||||||
|
|
||||||
(require 'lang-c)
|
(require 'lang-dockerfile)
|
||||||
|
|
||||||
(load-directory autoload-directory)
|
(load-directory autoload-directory)
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
(require 'common-lsp)
|
|
||||||
(require 'util-tree-sitter)
|
|
||||||
|
|
||||||
(use-package sh-mode
|
|
||||||
:ensure nil
|
|
||||||
:commands sh-mode
|
|
||||||
:hook ((sh-mode . flycheck-mode)
|
|
||||||
(sh-mode . tree-sitter-hl-mode)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-bash)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
(require 'common-lsp)
|
|
||||||
(require 'util-tree-sitter)
|
|
||||||
|
|
||||||
;; To generate a compilation database for the language server, run:
|
|
||||||
;; intercept-build13 --append make
|
|
||||||
;;
|
|
||||||
;; Output: compile_commands.json
|
|
||||||
|
|
||||||
(defun use-clangd ()
|
|
||||||
"Configure eglot to use clangd."
|
|
||||||
(eglot-ensure)
|
|
||||||
(defclass my/eglot-c (eglot-lsp-server) ()
|
|
||||||
:documentation
|
|
||||||
"Own eglot server class.")
|
|
||||||
|
|
||||||
(add-to-list 'eglot-server-programs
|
|
||||||
'(cc-mode . (my/eglot-c "clangd13")))
|
|
||||||
|
|
||||||
(tree-sitter-hl-mode)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package cc-mode
|
|
||||||
;; c-mode c++-mode objc-mode java-mode idl-mode pike-mode awk-mode
|
|
||||||
:commands (c-mode c++-mode)
|
|
||||||
:pin manual
|
|
||||||
:hook (
|
|
||||||
(c-mode . use-clangd)
|
|
||||||
(c++-mode . use-clangd)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-c)
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
(require 'common-lsp)
|
|
||||||
(require 'util-tree-sitter)
|
|
||||||
|
|
||||||
(use-package go-mode
|
|
||||||
:commands go-mode
|
|
||||||
:hook (
|
|
||||||
(go-mode . (lambda ()
|
|
||||||
(eglot-ensure)
|
|
||||||
(tree-sitter-hl-mode +1)
|
|
||||||
))
|
|
||||||
;; (before-save . lsp-format-buffer)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-go)
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
(require 'common-lsp)
|
|
||||||
(require 'util-tree-sitter)
|
|
||||||
|
|
||||||
(use-package js
|
|
||||||
:mode (
|
|
||||||
("\\.js\\'" . js-mode)
|
|
||||||
("\\.json\\'" . js-mode)
|
|
||||||
)
|
|
||||||
:commands js-mode
|
|
||||||
:pin manual
|
|
||||||
:hook (
|
|
||||||
(find-file . (lambda () (when (string= (file-name-extension buffer-file-name) "json") (add-hook 'before-save-hook 'json-fmt-jq nil 'local))))
|
|
||||||
(js-mode . (lambda ()
|
|
||||||
(tree-sitter-hl-mode +1)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
:config
|
|
||||||
(setq js-indent-level 2)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package typescript-mode
|
|
||||||
:mode (
|
|
||||||
("\\.ts\\'" . typescript-mode)
|
|
||||||
("\\.tsx\\'" . typescript-mode)
|
|
||||||
)
|
|
||||||
:hook (
|
|
||||||
(typescript-mode . (lambda ()
|
|
||||||
;; (lsp-register-client
|
|
||||||
;; (make-lsp-client :new-connection (lsp-stdio-connection '("deno" "lsp" --compat --unstable --allow-read))
|
|
||||||
;; :major-modes '(typescript-mode)
|
|
||||||
;; :server-id 'typescript-ls))
|
|
||||||
(eglot-ensure)
|
|
||||||
(tree-sitter-hl-mode +1)
|
|
||||||
))
|
|
||||||
;; (before-save . lsp-format-buffer)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun json-fmt-jq ()
|
|
||||||
"Run jq."
|
|
||||||
(run-command-on-buffer "jq" "--monochrome-output" ".")
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package web-mode
|
|
||||||
:mode (("\\.dust\\'" . web-mode)
|
|
||||||
)
|
|
||||||
:config
|
|
||||||
(setq web-mode-markup-indent-offset 2)
|
|
||||||
(setq web-mode-enable-current-element-highlight t)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; Define a custom mode for dust so that org-mode handle #+BEGIN_SRC dust blocks
|
|
||||||
(define-derived-mode dust-mode web-mode "WebDust"
|
|
||||||
"Major mode for editing dust templates in web-mode."
|
|
||||||
(web-mode)
|
|
||||||
(web-mode-set-engine "dust")
|
|
||||||
;; (setq web-mode-content-type "html")
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-javascript)
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
(require 'common-lsp)
|
|
||||||
(require 'util-tree-sitter)
|
|
||||||
|
|
||||||
(defun locate-rust-analyzer ()
|
|
||||||
"Find rust-analyzer."
|
|
||||||
(let ((rust-analyzer-paths (list (locate-rust-analyzer-rustup) (locate-rust-analyzer-ansible-built))))
|
|
||||||
(let ((first-non-nill-path (seq-find (lambda (elt) elt) rust-analyzer-paths)))
|
|
||||||
first-non-nill-path
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun locate-rust-analyzer-rustup ()
|
|
||||||
"Find rust-analyzer through rustup."
|
|
||||||
(run-command-in-directory nil "rustup" "which" "rust-analyzer")
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun locate-rust-analyzer-ansible-built ()
|
|
||||||
"Find rust-analyzer where the ansible playbook built it."
|
|
||||||
(let ((rust-analyzer-path "/opt/rust-analyzer/target/release/rust-analyzer"))
|
|
||||||
(when (file-exists-p rust-analyzer-path)
|
|
||||||
rust-analyzer-path
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package rust-mode
|
|
||||||
:mode "\\.rs\\'"
|
|
||||||
:hook (
|
|
||||||
(rust-mode . (lambda ()
|
|
||||||
(eglot-ensure)
|
|
||||||
(let ((rust-analyzer-command (locate-rust-analyzer)))
|
|
||||||
(when rust-analyzer-command
|
|
||||||
(add-to-list 'eglot-server-programs (cons 'rust-mode (list rust-analyzer-command)))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(when-linux
|
|
||||||
(tree-sitter-hl-mode +1)
|
|
||||||
)
|
|
||||||
(add-hook 'before-save-hook 'eglot-format-buffer nil 'local)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
:config
|
|
||||||
;; Add keybindings for interacting with Cargo
|
|
||||||
(use-package cargo
|
|
||||||
:hook (rust-mode . cargo-minor-mode))
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-rust)
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
(defun yaml-backspace (arg)
|
|
||||||
"Special handling of yaml backspace."
|
|
||||||
(interactive "*p")
|
|
||||||
(if mark-active
|
|
||||||
(backward-delete-char-untabify arg)
|
|
||||||
(yaml-electric-backspace arg)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(defun yaml-format-buffer ()
|
|
||||||
"Run prettier."
|
|
||||||
(interactive)
|
|
||||||
(run-command-on-buffer "prettier" "--stdin-filepath" buffer-file-name)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package yaml-mode
|
|
||||||
:mode
|
|
||||||
(("playbook\\.tmp\\'" . yaml-mode)
|
|
||||||
("environments/[^/]*/group_vars/[^/]*\\'" . yaml-mode)
|
|
||||||
("environments/[^/]*/host_vars/[^/]*\\'" . yaml-mode)
|
|
||||||
)
|
|
||||||
:hook (
|
|
||||||
(yaml-mode . (lambda ()
|
|
||||||
(setq eglot-workspace-configuration
|
|
||||||
(list (cons ':yaml (list ':hover :json-false :validate :json-false :completion t))))
|
|
||||||
(eglot-ensure)
|
|
||||||
(add-hook 'before-save-hook 'yaml-format-buffer nil 'local)
|
|
||||||
))
|
|
||||||
)
|
|
||||||
:bind (
|
|
||||||
(:map yaml-mode-map ([backspace] . yaml-backspace))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'lang-yaml)
|
|
||||||
30
ansible/roles/emacs/files/plainmacs
Executable file
30
ansible/roles/emacs/files/plainmacs
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
|
||||||
|
INIT_SCRIPT=$(cat <<EOF
|
||||||
|
(progn
|
||||||
|
(setq make-backup-files nil auto-save-default nil create-lockfiles nil)
|
||||||
|
(load-theme 'tango-dark t)
|
||||||
|
(set-face-attribute 'default nil :background "black")
|
||||||
|
;; Bright yellow highlighting for selected region
|
||||||
|
(set-face-attribute 'region nil :background "#ffff50" :foreground "black")
|
||||||
|
;; Bright green cursor to distinguish from yellow region
|
||||||
|
(set-cursor-color "#ccff66")
|
||||||
|
;; Hightlight the current line
|
||||||
|
(set-face-attribute 'line-number-current-line nil :foreground "white")
|
||||||
|
;; Set default font
|
||||||
|
(set-face-attribute 'default nil :height 100 :width 'regular :weight 'regular :family "Cascadia Mono")
|
||||||
|
;; Set fallback font for unicode glyphs
|
||||||
|
(set-fontset-font "fontset-default" nil (font-spec :name "Noto Color Emoji"))
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(when (fboundp 'tool-bar-mode)
|
||||||
|
(tool-bar-mode -1))
|
||||||
|
(when ( fboundp 'scroll-bar-mode)
|
||||||
|
(scroll-bar-mode -1))
|
||||||
|
(pixel-scroll-precision-mode)
|
||||||
|
(setq frame-resize-pixelwise t)
|
||||||
|
)
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
exec emacs -q --eval "$INIT_SCRIPT" "${@}"
|
||||||
12
ansible/roles/emacs/files/plainmacs.desktop
Normal file
12
ansible/roles/emacs/files/plainmacs.desktop
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Plainmacs
|
||||||
|
GenericName=Text Editor
|
||||||
|
Comment=Edit text
|
||||||
|
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
|
||||||
|
Exec=plainmacs %F
|
||||||
|
Icon=emacs
|
||||||
|
Type=Application
|
||||||
|
Terminal=false
|
||||||
|
Categories=Development;TextEditor;
|
||||||
|
StartupNotify=true
|
||||||
|
StartupWMClass=Emacs
|
||||||
22
ansible/roles/emacs/files/plainmacs_init.el
Normal file
22
ansible/roles/emacs/files/plainmacs_init.el
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
(progn
|
||||||
|
(setq make-backup-files nil auto-save-default nil create-lockfiles nil)
|
||||||
|
(load-theme 'tango-dark t)
|
||||||
|
(set-face-attribute 'default nil :background "black")
|
||||||
|
;; Bright yellow highlighting for selected region
|
||||||
|
(set-face-attribute 'region nil :background "#ffff50" :foreground "black")
|
||||||
|
;; Bright green cursor to distinguish from yellow region
|
||||||
|
(set-cursor-color "#ccff66")
|
||||||
|
;; Hightlight the current line
|
||||||
|
(set-face-attribute 'line-number-current-line nil :foreground "white")
|
||||||
|
;; Set default font
|
||||||
|
(set-face-attribute 'default nil :height 100 :width 'regular :weight 'regular :family "Cascadia Mono")
|
||||||
|
;; Set fallback font for unicode glyphs
|
||||||
|
(set-fontset-font "fontset-default" nil (font-spec :name "Noto Color Emoji"))
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(when (fboundp 'tool-bar-mode)
|
||||||
|
(tool-bar-mode -1))
|
||||||
|
(when ( fboundp 'scroll-bar-mode)
|
||||||
|
(scroll-bar-mode -1))
|
||||||
|
(pixel-scroll-precision-mode)
|
||||||
|
(setq frame-resize-pixelwise t)
|
||||||
|
)
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
(use-package tree-sitter
|
|
||||||
:commands (tree-sitter-hl-mode)
|
|
||||||
:config
|
|
||||||
(use-package tree-sitter-langs)
|
|
||||||
)
|
|
||||||
|
|
||||||
(provide 'util-tree-sitter)
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
- users
|
- users
|
||||||
- fonts
|
- fonts
|
||||||
- rust
|
- role: rust
|
||||||
- plainmacs
|
when: 'emacs_flavor == "full"'
|
||||||
|
|||||||
@@ -1,9 +1,21 @@
|
|||||||
- name: Install packages
|
- name: Install packages
|
||||||
|
when: 'emacs_flavor == "full"'
|
||||||
package:
|
package:
|
||||||
name:
|
name:
|
||||||
- aspell
|
- aspell
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
|
- name: Install scripts
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- src: plainmacs
|
||||||
|
dest: /usr/local/bin/plainmacs
|
||||||
|
|
||||||
- import_tasks: tasks/freebsd.yaml
|
- import_tasks: tasks/freebsd.yaml
|
||||||
when: 'os_flavor == "freebsd"'
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,12 @@
|
|||||||
package:
|
package:
|
||||||
name:
|
name:
|
||||||
- emacs
|
- emacs
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
when: 'emacs_flavor == "full"'
|
||||||
|
package:
|
||||||
|
name:
|
||||||
- py39-pygments
|
- py39-pygments
|
||||||
- inkscape # to support SVGs in LaTeX
|
- inkscape # to support SVGs in LaTeX
|
||||||
# - prettier # typescript formatting
|
# - prettier # typescript formatting
|
||||||
|
|||||||
@@ -2,4 +2,39 @@
|
|||||||
package:
|
package:
|
||||||
name:
|
name:
|
||||||
- aspell-en
|
- aspell-en
|
||||||
|
- emacs-wayland
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
when: 'emacs_flavor == "full"'
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- prettier # typescript+yaml formatting
|
||||||
|
- pyright
|
||||||
|
- gopls
|
||||||
|
- typescript-language-server
|
||||||
|
- shellcheck
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root # Using root group to match /usr/share/applications
|
||||||
|
loop:
|
||||||
|
- /usr/local/share/applications
|
||||||
|
|
||||||
|
- name: Install Configuration
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: 0644
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
# Can't use validate because it complains about the file extension for the temporary file.
|
||||||
|
# validate: "desktop-file-validate %s"
|
||||||
|
loop:
|
||||||
|
- src: plainmacs.desktop
|
||||||
|
dest: /usr/local/share/applications/
|
||||||
|
|||||||
@@ -9,9 +9,10 @@
|
|||||||
owner: "{{ account_name.stdout }}"
|
owner: "{{ account_name.stdout }}"
|
||||||
group: "{{ group_name.stdout }}"
|
group: "{{ group_name.stdout }}"
|
||||||
loop:
|
loop:
|
||||||
- ".emacs.d/elisp"
|
- ".config/emacs/elisp"
|
||||||
|
|
||||||
- name: Configure dotfiles
|
- name: Configure dotfiles
|
||||||
|
when: 'emacs_flavor == "full"'
|
||||||
copy:
|
copy:
|
||||||
src: "files/{{ item.src }}"
|
src: "files/{{ item.src }}"
|
||||||
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||||
@@ -20,35 +21,32 @@
|
|||||||
group: "{{ group_name.stdout }}"
|
group: "{{ group_name.stdout }}"
|
||||||
loop:
|
loop:
|
||||||
- src: init.el
|
- src: init.el
|
||||||
dest: .emacs.d/init.el
|
dest: .config/emacs/init.el
|
||||||
|
- src: early-init.el
|
||||||
|
dest: .config/emacs/early-init.el
|
||||||
|
|
||||||
- name: Configure elisp files
|
- name: Configure dotfiles
|
||||||
|
when: 'emacs_flavor == "plain"'
|
||||||
copy:
|
copy:
|
||||||
src: "files/{{ item }}"
|
src: "files/{{ item.src }}"
|
||||||
dest: "{{ account_homedir.stdout }}/.emacs.d/elisp/{{ item }}"
|
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||||
mode: 0600
|
mode: 0600
|
||||||
owner: "{{ account_name.stdout }}"
|
owner: "{{ account_name.stdout }}"
|
||||||
group: "{{ group_name.stdout }}"
|
group: "{{ group_name.stdout }}"
|
||||||
loop:
|
loop:
|
||||||
- base-extensions.el
|
- src: plainmacs_init.el
|
||||||
- base-functions.el
|
dest: .config/emacs/init.el
|
||||||
- base-global-keys.el
|
|
||||||
- base-theme.el
|
- name: Configure elisp files
|
||||||
- base.el
|
when: 'emacs_flavor == "full"'
|
||||||
- common-lsp.el
|
copy:
|
||||||
- lang-bash.el
|
src: "files/{{ item.src }}"
|
||||||
- lang-c.el
|
dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
|
||||||
- lang-go.el
|
owner: "{{ account_name.stdout }}"
|
||||||
- lang-javascript.el
|
group: "{{ group_name.stdout }}"
|
||||||
- lang-lua.el
|
loop:
|
||||||
- lang-markdown.el
|
- src: elisp
|
||||||
- lang-org.el
|
dest: .config/emacs/
|
||||||
- lang-python.el
|
|
||||||
- lang-rust.el
|
|
||||||
- lang-terraform.el
|
|
||||||
- lang-yaml.el
|
|
||||||
- util-vertico.el
|
|
||||||
- util-tree-sitter.el
|
|
||||||
|
|
||||||
- name: Configure zshrc additional imports
|
- name: Configure zshrc additional imports
|
||||||
copy:
|
copy:
|
||||||
@@ -58,7 +56,8 @@
|
|||||||
owner: "{{ account_name.stdout }}"
|
owner: "{{ account_name.stdout }}"
|
||||||
group: "{{ group_name.stdout }}"
|
group: "{{ group_name.stdout }}"
|
||||||
loop:
|
loop:
|
||||||
- emacs_e
|
- emacs_e # Create an alias 'e' which launches emacs
|
||||||
|
- plainmacs # Set the EDITOR to plainmacs
|
||||||
|
|
||||||
- import_tasks: tasks/peruser_freebsd.yaml
|
- import_tasks: tasks/peruser_freebsd.yaml
|
||||||
when: 'os_flavor == "freebsd"'
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|||||||
@@ -14,29 +14,52 @@ udp_pass_in = "{ 53 51820 51821 51822 }"
|
|||||||
|
|
||||||
# options
|
# options
|
||||||
set skip on lo
|
set skip on lo
|
||||||
|
set optimization conservative
|
||||||
|
set block-policy return
|
||||||
|
set fail-policy drop
|
||||||
|
|
||||||
|
# normalization
|
||||||
|
scrub in on $ext_if all fragment reassemble
|
||||||
|
|
||||||
|
# translation
|
||||||
|
|
||||||
|
# Evaluation order of the translation rules is dependent on the type
|
||||||
|
# of the translation rules and of the direction of a packet. binat
|
||||||
|
# rules are always evaluated first. Then either the rdr rules are
|
||||||
|
# evaluated on an inbound packet or the nat rules on an outbound
|
||||||
|
# packet. Rules of the same type are evaluated in the same order in
|
||||||
|
# which they appear in the ruleset. The first matching rule decides
|
||||||
|
# what action is taken.
|
||||||
|
|
||||||
# redirections
|
# redirections
|
||||||
nat pass on lagg0 inet from $jail_nat_v4 to $not_jail_nat_v4 -> (lagg0)
|
nat on $ext_if inet from ! ($ext_if) to ! ($ext_if) -> ($ext_if)
|
||||||
nat pass on $not_ext_if inet from $jail_nat_v4 to 10.215.1.1 port 53 -> ($ext_if)
|
rdr pass proto {tcp, udp} from any to 10.215.1.1 port 53 tag REDIREXTERNAL -> 1.1.1.1 port 53
|
||||||
rdr pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.1 port 53 -> 1.1.1.1 port 53
|
|
||||||
|
|
||||||
rdr pass on $ext_if inet proto tcp from $not_jail_nat_v4 to any port 6443 -> 10.215.1.204 port 6443
|
rdr pass on $ext_if proto {tcp, udp} to ($ext_if) port 6443 -> 10.215.1.204 port 6443
|
||||||
rdr pass on jail_nat inet proto tcp from $jail_nat_v4 to any port 6443 -> 10.215.1.204 port 6443
|
rdr pass on jail_nat proto {tcp, udp} to ($ext_if) port 6443 tag REDIRINTERNAL -> 10.215.1.204 port 6443
|
||||||
nat pass on $not_ext_if proto {tcp, udp} from $not_jail_nat_v4 to 10.215.1.204 port 6443 -> (jail_nat)
|
|
||||||
nat pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.204 port 6443 -> (jail_nat)
|
|
||||||
|
|
||||||
rdr pass on $ext_if inet proto tcp from $not_jail_nat_v4 to $not_jail_nat_v4 port 65099 -> 10.215.1.210 port 22
|
rdr pass on $ext_if proto {tcp, udp} to ($ext_if) port 19993 -> 10.215.1.204 port 19993
|
||||||
rdr pass on jail_nat inet proto tcp from $jail_nat_v4 to $not_jail_nat_v4 port 65099 -> 10.215.1.210 port 22
|
rdr pass on jail_nat proto {tcp, udp} to ($ext_if) port 19993 tag REDIRINTERNAL -> 10.215.1.204 port 19993
|
||||||
# nat pass on $not_ext_if proto {tcp, udp} from $not_jail_nat_v4 to 10.215.1.210 port 65099 -> (jail_nat)
|
|
||||||
# nat pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.210 port 65099 -> (lagg0)
|
rdr pass proto {tcp, udp} from $not_jail_nat_v4 to ($ext_if) port 65099 -> 10.215.1.210 port 22
|
||||||
|
rdr pass proto {tcp, udp} from $jail_nat_v4 to ($ext_if) port 65099 tag REDIRINTERNAL -> 10.215.1.210 port 22
|
||||||
|
|
||||||
rdr pass proto {tcp, udp} from $not_jail_nat_v4 to ($ext_if) port 53 -> 10.215.1.211 port 53
|
rdr pass proto {tcp, udp} from $not_jail_nat_v4 to ($ext_if) port 53 -> 10.215.1.211 port 53
|
||||||
rdr pass proto {tcp, udp} from $jail_nat_v4 to ($ext_if) port 53 tag REDIRINTERNAL -> 10.215.1.211 port 53
|
rdr pass proto {tcp, udp} from $jail_nat_v4 to ($ext_if) port 53 tag REDIRINTERNAL -> 10.215.1.211 port 53
|
||||||
nat pass proto {tcp, udp} tagged REDIRINTERNAL -> (jail_nat)
|
|
||||||
|
nat pass tagged REDIRINTERNAL -> (jail_nat)
|
||||||
|
nat pass tagged REDIREXTERNAL -> ($ext_if)
|
||||||
|
|
||||||
# filtering
|
# filtering
|
||||||
block log all
|
block log all
|
||||||
pass out on $ext_if
|
pass quick proto {icmp, icmp6} all
|
||||||
|
pass out quick on $ext_if
|
||||||
|
# We pass on the interfaces listed in allow rather than skipping on
|
||||||
|
# them because changes to pass rules will update when running a
|
||||||
|
# `service pf reload` but interfaces that we `skip` will not update (I
|
||||||
|
# forget if its from adding, removing, or both. TODO: test to figure
|
||||||
|
# it out). Also skipped interfaces are not subject to nat/rdr rules.
|
||||||
|
pass quick on $allow
|
||||||
|
|
||||||
# Single interface kubernetes cluster is working with the following run on mrmanager:
|
# Single interface kubernetes cluster is working with the following run on mrmanager:
|
||||||
# doas route add -host 74.80.180.139 -interface jail_nat
|
# doas route add -host 74.80.180.139 -interface jail_nat
|
||||||
@@ -47,17 +70,8 @@ pass quick from any to $pub_k8s
|
|||||||
|
|
||||||
pass in on jail_nat
|
pass in on jail_nat
|
||||||
# Allow traffic from my machine to the jails/virtual machines
|
# Allow traffic from my machine to the jails/virtual machines
|
||||||
pass out on jail_nat from $jail_nat_v4
|
pass out on jail_nat from (jail_nat:network)
|
||||||
|
|
||||||
# We pass on the interfaces listed in allow rather than skipping on
|
|
||||||
# them because changes to pass rules will update when running a
|
|
||||||
# `service pf reload` but interfaces that we `skip` will not update (I
|
|
||||||
# forget if its from adding, removing, or both. TODO: test to figure
|
|
||||||
# it out). Also skipped interfaces are not subject to nat/rdr rules.
|
|
||||||
pass quick on $allow
|
|
||||||
|
|
||||||
pass on $ext_if proto icmp all
|
|
||||||
pass on $ext_if proto icmp6 all
|
|
||||||
|
|
||||||
pass in on $ext_if proto tcp to any port $tcp_pass_in
|
pass in on $ext_if proto tcp to any port $tcp_pass_in
|
||||||
pass in on $ext_if proto udp to any port $udp_pass_in
|
pass in on $ext_if proto udp to any port $udp_pass_in
|
||||||
|
|||||||
@@ -1,14 +1,3 @@
|
|||||||
- name: Install scripts
|
|
||||||
copy:
|
|
||||||
src: "files/{{ item.src }}"
|
|
||||||
dest: "{{ item.dest }}"
|
|
||||||
mode: 0755
|
|
||||||
owner: root
|
|
||||||
group: wheel
|
|
||||||
loop:
|
|
||||||
- src: plainmacs
|
|
||||||
dest: /usr/local/bin/plainmacs
|
|
||||||
|
|
||||||
- import_tasks: tasks/freebsd.yaml
|
- import_tasks: tasks/freebsd.yaml
|
||||||
when: 'os_flavor == "freebsd"'
|
when: 'os_flavor == "freebsd"'
|
||||||
|
|
||||||
@@ -20,6 +9,7 @@
|
|||||||
apply:
|
apply:
|
||||||
become: yes
|
become: yes
|
||||||
become_user: "{{ initialize_user }}"
|
become_user: "{{ initialize_user }}"
|
||||||
|
when: users is defined
|
||||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: initialize_user
|
loop_var: initialize_user
|
||||||
5
ansible/roles/framework_laptop/tasks/freebsd.yaml
Normal file
5
ansible/roles/framework_laptop/tasks/freebsd.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# - name: Install packages
|
||||||
|
# package:
|
||||||
|
# name:
|
||||||
|
# - foo
|
||||||
|
# state: present
|
||||||
9
ansible/roles/framework_laptop/tasks/linux.yaml
Normal file
9
ansible/roles/framework_laptop/tasks/linux.yaml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# This will prevent pools from being imported, but since my laptop has a single pool with a single disk which is mounted during boot, disabling this service saves me 10 seconds at boot. Reference: https://github.com/openzfs/zfs/issues/10891
|
||||||
|
- name: Disable services
|
||||||
|
systemd:
|
||||||
|
enabled: no
|
||||||
|
masked: true
|
||||||
|
name: "{{ item }}"
|
||||||
|
daemon_reload: yes
|
||||||
|
loop:
|
||||||
|
- systemd-udev-settle.service
|
||||||
2
ansible/roles/framework_laptop/tasks/main.yaml
Normal file
2
ansible/roles/framework_laptop/tasks/main.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
- import_tasks: tasks/common.yaml
|
||||||
|
# when: foo is defined
|
||||||
130
ansible/roles/freebsd_update_server/files/build_release.bash
Normal file
130
ansible/roles/freebsd_update_server/files/build_release.bash
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
: ${DATA_DIRECTORY:="/usr/local/share/freebsdupdate"}
|
||||||
|
: ${STAGE_FILE:="${DATA_DIRECTORY}/stage"}
|
||||||
|
: ${RELEASE_DIRECTORY:="${DATA_DIRECTORY}/release"}
|
||||||
|
: ${LOG_DIRECTORY:="${DATA_DIRECTORY}/logs"}
|
||||||
|
: ${PORTS_TREE:="/usr/ports"}
|
||||||
|
: ${PORTS_REPO:="https://git.FreeBSD.org/ports.git"}
|
||||||
|
|
||||||
|
############## Setup #########################
|
||||||
|
|
||||||
|
function die {
|
||||||
|
local status_code="$1"
|
||||||
|
shift
|
||||||
|
(>&2 echo "${@}")
|
||||||
|
exit "$status_code"
|
||||||
|
}
|
||||||
|
|
||||||
|
function log {
|
||||||
|
(>&2 echo "${@}")
|
||||||
|
}
|
||||||
|
|
||||||
|
############## Program #########################
|
||||||
|
|
||||||
|
function main {
|
||||||
|
assert_directories
|
||||||
|
|
||||||
|
local stage=""
|
||||||
|
if [ -e "$STAGE_FILE" ]; then
|
||||||
|
local stage=$(cat "$STAGE_FILE")
|
||||||
|
fi
|
||||||
|
if [ "$stage" = "selfbuild" ]; then
|
||||||
|
log_cmd stage_selfbuild
|
||||||
|
elif [ "$stage" = "selfinstallworld" ]; then
|
||||||
|
log_cmd stage_selfinstallworld
|
||||||
|
elif [ "$stage" = "selfconflictcheck" ]; then
|
||||||
|
log_cmd stage_selfconflictcheck
|
||||||
|
elif [ "$stage" = "releasebuild" ]; then
|
||||||
|
log_cmd stage_releasebuild
|
||||||
|
elif [ "$stage" = "done" ]; then
|
||||||
|
log_cmd stage_done
|
||||||
|
else
|
||||||
|
die 1 "Unhandled stage: \"$stage\"."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function log_cmd {
|
||||||
|
"${@}" |& tee "$LOG_DIRECTORY/$(date +%Y%m%d-%s).log"
|
||||||
|
}
|
||||||
|
|
||||||
|
function self_conflict_check {
|
||||||
|
if etcupdate status | grep -qE '^ C '; then
|
||||||
|
die 1 'Conflicts remain in etcupdate. Run `etcupdate resolve` to fix them first.'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_directories {
|
||||||
|
for d in "$DATA_DIRECTORY" "$RELEASE_DIRECTORY" "$LOG_DIRECTORY"; do
|
||||||
|
if [ ! -e "$d" ]; then
|
||||||
|
mkdir -p "$d"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_ports_tree {
|
||||||
|
if [ ! -e "$PORTS_TREE" ]; then
|
||||||
|
mkdir -p $PORTS_TREE
|
||||||
|
git -C $PORTS_TREE init --initial-branch=main
|
||||||
|
git -C $PORTS_TREE remote add origin $PORTS_REPO
|
||||||
|
fi
|
||||||
|
git -C $PORTS_TREE fetch origin main # 'refs/heads/main'
|
||||||
|
git -C $PORTS_TREE checkout FETCH_HEAD
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_stage {
|
||||||
|
echo "${@}" > "$STAGE_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
function stage_selfbuild {
|
||||||
|
self_conflict_check
|
||||||
|
assert_directories
|
||||||
|
update_ports_tree
|
||||||
|
|
||||||
|
SRCCONF=/dev/null __MAKE_CONF=/dev/null make -C /usr/src clean
|
||||||
|
SRCCONF=/dev/null __MAKE_CONF=/dev/null make -C /usr/src buildworld buildkernel
|
||||||
|
SRCCONF=/dev/null __MAKE_CONF=/dev/null make -C /usr/src installkernel
|
||||||
|
|
||||||
|
set_stage "selfinstallworld"
|
||||||
|
/sbin/shutdown -r now
|
||||||
|
}
|
||||||
|
|
||||||
|
function stage_selfinstallworld {
|
||||||
|
etcupdate -p
|
||||||
|
SRCCONF=/dev/null __MAKE_CONF=/dev/null make -C /usr/src installworld
|
||||||
|
etcupdate -B
|
||||||
|
|
||||||
|
set_stage "selfconflictcheck"
|
||||||
|
stage_selfconflictcheck
|
||||||
|
}
|
||||||
|
|
||||||
|
function stage_selfconflictcheck {
|
||||||
|
self_conflict_check
|
||||||
|
set_stage "releasebuild"
|
||||||
|
/sbin/shutdown -r now
|
||||||
|
}
|
||||||
|
|
||||||
|
function stage_releasebuild {
|
||||||
|
local today=$(date +%Y%m%d)
|
||||||
|
local target_directory="${RELEASE_DIRECTORY}/${today}"
|
||||||
|
if [ -e "$target_directory" ]; then
|
||||||
|
die 1 "The release directory $target_directory already exists. Exiting."
|
||||||
|
fi
|
||||||
|
SRCCONF=/dev/null __MAKE_CONF=/dev/null make -C /usr/src clean
|
||||||
|
make -C /usr/src buildworld buildkernel
|
||||||
|
make -C /usr/src/release obj
|
||||||
|
make -C /usr/src/release release
|
||||||
|
mkdir -p "$target_directory"
|
||||||
|
make -C /usr/src/release install DESTDIR="$target_directory"
|
||||||
|
set_stage "done"
|
||||||
|
}
|
||||||
|
|
||||||
|
function stage_done {
|
||||||
|
log "Everything is done."
|
||||||
|
}
|
||||||
|
|
||||||
|
main "${@}"
|
||||||
120
ansible/roles/freebsd_update_server/files/release.conf
Normal file
120
ansible/roles/freebsd_update_server/files/release.conf
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
|
||||||
|
## Redefine environment variables here to override prototypes
|
||||||
|
## defined in release.sh.
|
||||||
|
#load_chroot_env() { }
|
||||||
|
#load_target_env() { }
|
||||||
|
#buildenv_setup() { }
|
||||||
|
|
||||||
|
## Set the directory within which the release will be built.
|
||||||
|
CHROOTDIR="/scratch"
|
||||||
|
|
||||||
|
## Do not explicitly require the devel/git port to be installed.
|
||||||
|
#NOGIT=1
|
||||||
|
## Set the version control system host.
|
||||||
|
GITROOT="https://git.freebsd.org/"
|
||||||
|
GITSRC="src.git"
|
||||||
|
GITPORTS="ports.git"
|
||||||
|
|
||||||
|
## Set the src/, ports/, and doc/ branches or tags.
|
||||||
|
#SRCBRANCH="stable/13"
|
||||||
|
SRCBRANCH="main"
|
||||||
|
PORTBRANCH="main"
|
||||||
|
|
||||||
|
## Sample configuration for using git from ports.
|
||||||
|
#GITCMD="/usr/local/bin/git clone -q --branch main"
|
||||||
|
|
||||||
|
## Set to override the default target architecture.
|
||||||
|
#TARGET="amd64"
|
||||||
|
#TARGET_ARCH="amd64"
|
||||||
|
#KERNEL="GENERIC"
|
||||||
|
KERNEL="GENERIC-NODEBUG"
|
||||||
|
## Multiple kernels may be set.
|
||||||
|
#KERNEL="GENERIC XENHVM"
|
||||||
|
|
||||||
|
## Set to specify a custom make.conf and/or src.conf
|
||||||
|
#MAKE_CONF="/etc/local/make.conf"
|
||||||
|
MAKE_CONF="/etc/make.conf"
|
||||||
|
#SRC_CONF="/etc/local/src.conf"
|
||||||
|
SRC_CONF="/etc/src.conf"
|
||||||
|
|
||||||
|
## Set to use make(1) flags.
|
||||||
|
#MAKE_FLAGS="-s"
|
||||||
|
|
||||||
|
## Set to use world- and kernel-specific make(1) flags.
|
||||||
|
#WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
|
||||||
|
#KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
|
||||||
|
|
||||||
|
## Set miscellaneous 'make release' settings.
|
||||||
|
#NOPORTS=
|
||||||
|
#NOSRC=
|
||||||
|
#WITH_DVD=
|
||||||
|
#WITH_COMPRESSED_IMAGES=
|
||||||
|
|
||||||
|
## Set to '1' to disable multi-threaded xz(1) compression.
|
||||||
|
#XZ_THREADS=0
|
||||||
|
|
||||||
|
## Set when building embedded images.
|
||||||
|
#EMBEDDEDBUILD=
|
||||||
|
|
||||||
|
## Set to a list of ports required to build embedded system-on-chip
|
||||||
|
## images, such as sysutils/u-boot-rpi.
|
||||||
|
#EMBEDDEDPORTS=
|
||||||
|
|
||||||
|
## Set to the hardware platform of the target userland. This value
|
||||||
|
## is passed to make(1) to set the TARGET (value of uname -m) to cross
|
||||||
|
## build.
|
||||||
|
#EMBEDDED_TARGET=
|
||||||
|
|
||||||
|
## Set to the machine processor architecture of the target userland.
|
||||||
|
## This value is passed to make(1) to set the TARGET_ARCH (value of uname -p)
|
||||||
|
## to cross build.
|
||||||
|
#EMBEDDED_TARGET_ARCH=
|
||||||
|
|
||||||
|
## Set to skip the chroot environment buildworld/installworld/distribution
|
||||||
|
## step if it is expected the build environment will exist via alternate
|
||||||
|
## means.
|
||||||
|
#CHROOTBUILD_SKIP=
|
||||||
|
|
||||||
|
## Set to a non-empty value skip checkout or update of /usr/src in
|
||||||
|
## the chroot. This is intended for use when /usr/src already exists.
|
||||||
|
#SRC_UPDATE_SKIP=
|
||||||
|
|
||||||
|
## Set to a non-empty value skip checkout or update of /usr/ports in
|
||||||
|
## the chroot. This is intended for use when /usr/ports already exists.
|
||||||
|
#PORTS_UPDATE_SKIP=
|
||||||
|
|
||||||
|
## Set to pass additional flags to make(1) for the build chroot setup, such
|
||||||
|
## as TARGET/TARGET_ARCH.
|
||||||
|
#CHROOT_MAKEENV=
|
||||||
|
|
||||||
|
## Set to a non-empty value to build virtual machine images as part of the
|
||||||
|
## release build.
|
||||||
|
#WITH_VMIMAGES=
|
||||||
|
|
||||||
|
## Set to a non-empty value to compress virtual machine images with xz(1)
|
||||||
|
## as part of the release build.
|
||||||
|
#WITH_COMPRESSED_VMIMAGES=
|
||||||
|
|
||||||
|
## If WITH_VMIMAGES is set to a non-empty value, this is the name of the
|
||||||
|
## file to use for the installed userland/kernel.
|
||||||
|
#VMBASE="vm"
|
||||||
|
|
||||||
|
## If WITH_VMIMAGES is set to a non-empty value, this is the size of the
|
||||||
|
## virtual machine disk filesystem. Valid size values are described in
|
||||||
|
## the makefs(8) manual page.
|
||||||
|
#VMSIZE="20g"
|
||||||
|
|
||||||
|
## If WITH_VMIMAGES is set to a non-empty value, this is a list of disk
|
||||||
|
## image formats to create. Valid values are listed in the mkimg(1)
|
||||||
|
## manual page, as well as 'mkimg --formats' output.
|
||||||
|
#VMFORMATS="vhdf vmdk qcow2 raw"
|
||||||
|
|
||||||
|
## Set to a non-empty value to build virtual machine images for various
|
||||||
|
## cloud providers as part of the release build.
|
||||||
|
#WITH_CLOUDWARE=
|
||||||
|
|
||||||
|
## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers
|
||||||
|
## to create disk images.
|
||||||
|
#CLOUDWARE="EC2 GCE VAGRANT-VIRTUALBOX VAGRANT-VMWARE"
|
||||||
5
ansible/roles/freebsd_update_server/tasks/common.yaml
Normal file
5
ansible/roles/freebsd_update_server/tasks/common.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
- import_tasks: tasks/freebsd.yaml
|
||||||
|
when: 'os_flavor == "freebsd" and build_user is defined'
|
||||||
|
|
||||||
|
- import_tasks: tasks/linux.yaml
|
||||||
|
when: 'os_flavor == "linux"'
|
||||||
50
ansible/roles/freebsd_update_server/tasks/freebsd.yaml
Normal file
50
ansible/roles/freebsd_update_server/tasks/freebsd.yaml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
- name: Install packages
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- git
|
||||||
|
- tmux # For convenience
|
||||||
|
- htop # For convenience
|
||||||
|
- bash
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create directories
|
||||||
|
file:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: 0755
|
||||||
|
owner: "{{ build_user.name }}"
|
||||||
|
group: "{{ build_user.group }}"
|
||||||
|
loop:
|
||||||
|
- /opt/freebsd_update_server
|
||||||
|
|
||||||
|
- name: Clone freebsd-update-build
|
||||||
|
git:
|
||||||
|
repo: "https://github.com/freebsd/freebsd-update-build.git"
|
||||||
|
dest: /opt/freebsd_update_server/freebsd-update-build
|
||||||
|
version: "28bb3ae7de9c1332fe8a366fb154a5b9faf37f49"
|
||||||
|
force: true
|
||||||
|
become: true
|
||||||
|
become_user: "{{ build_user.name }}"
|
||||||
|
diff: false
|
||||||
|
|
||||||
|
- name: Install Configuration
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: 0600
|
||||||
|
owner: "{{ build_user.name }}"
|
||||||
|
group: "{{ build_user.group }}"
|
||||||
|
loop:
|
||||||
|
- src: release.conf
|
||||||
|
dest: /opt/freebsd_update_server/release.conf
|
||||||
|
|
||||||
|
- name: Install scripts
|
||||||
|
copy:
|
||||||
|
src: "files/{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: wheel
|
||||||
|
loop:
|
||||||
|
- src: build_release.bash
|
||||||
|
dest: /usr/local/bin/build_release
|
||||||
29
ansible/roles/freebsd_update_server/tasks/linux.yaml
Normal file
29
ansible/roles/freebsd_update_server/tasks/linux.yaml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# - name: Build aur packages
|
||||||
|
# register: buildaur
|
||||||
|
# become_user: "{{ build_user.name }}"
|
||||||
|
# command: "aurutils-sync --no-view {{ item }}"
|
||||||
|
# args:
|
||||||
|
# creates: "/var/cache/pacman/custom/{{ item }}-*.pkg.tar.*"
|
||||||
|
# loop:
|
||||||
|
# - foo
|
||||||
|
|
||||||
|
# - name: Update cache
|
||||||
|
# when: buildaur.changed
|
||||||
|
# pacman:
|
||||||
|
# name: []
|
||||||
|
# state: present
|
||||||
|
# update_cache: true
|
||||||
|
|
||||||
|
# - name: Install packages
|
||||||
|
# package:
|
||||||
|
# name:
|
||||||
|
# - foo
|
||||||
|
# state: present
|
||||||
|
|
||||||
|
# - name: Enable services
|
||||||
|
# systemd:
|
||||||
|
# enabled: yes
|
||||||
|
# name: "{{ item }}"
|
||||||
|
# daemon_reload: yes
|
||||||
|
# loop:
|
||||||
|
# - foo.service
|
||||||
2
ansible/roles/freebsd_update_server/tasks/main.yaml
Normal file
2
ansible/roles/freebsd_update_server/tasks/main.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
- import_tasks: tasks/common.yaml
|
||||||
|
# when: foo is defined
|
||||||
@@ -3,13 +3,3 @@
|
|||||||
|
|
||||||
- import_tasks: tasks/linux.yaml
|
- import_tasks: tasks/linux.yaml
|
||||||
when: 'os_flavor == "linux"'
|
when: 'os_flavor == "linux"'
|
||||||
|
|
||||||
- include_tasks:
|
|
||||||
file: tasks/peruser.yaml
|
|
||||||
apply:
|
|
||||||
become: yes
|
|
||||||
become_user: "{{ initialize_user }}"
|
|
||||||
when: users is defined
|
|
||||||
loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}"
|
|
||||||
loop_control:
|
|
||||||
loop_var: initialize_user
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
args:
|
args:
|
||||||
creates: "/var/cache/pacman/custom/{{ item }}-*.pkg.tar.*"
|
creates: "/var/cache/pacman/custom/{{ item }}-*.pkg.tar.*"
|
||||||
loop:
|
loop:
|
||||||
- google-cloud-sdk
|
- google-cloud-cli
|
||||||
|
|
||||||
- name: Update cache
|
- name: Update cache
|
||||||
when: buildaur.changed
|
when: buildaur.changed
|
||||||
@@ -13,9 +13,9 @@
|
|||||||
name: []
|
name: []
|
||||||
state: present
|
state: present
|
||||||
update_cache: true
|
update_cache: true
|
||||||
|
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
package:
|
package:
|
||||||
name:
|
name:
|
||||||
- google-cloud-sdk
|
- google-cloud-cli
|
||||||
state: present
|
state: present
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user