Compare commits

..

224 Commits

Author SHA1 Message Date
f7d448f63b vim: Add TOML config 2021-11-18 12:18:13 +01:00
2a9a66fb06 Add personal repository configuration 2021-11-18 12:18:13 +01:00
a29940a65a Add GRM 2021-11-16 18:45:38 +01:00
d283bcddcd Add function to build crates directly from git 2021-11-16 18:45:31 +01:00
efb3e54dcb Always use rustup instead of rust 2021-11-01 13:12:46 +01:00
872c9314e9 Fix package list 2021-11-01 13:10:59 +01:00
84c738ce64 Update packages for ubuntu 2021-11-01 10:01:34 +01:00
d814a13602 Fix duplicated changed_when 2021-10-31 13:55:17 +01:00
35b7ff0567 Make inlcude_ tasks less spammy 2021-10-31 13:55:17 +01:00
ee10eb8779 Update kubectl to v1.22.3 2021-10-31 13:26:46 +01:00
cc69e21613 Improve idempotency 2021-10-31 13:26:46 +01:00
0c6ffc6dbd Read variables from separate file 2021-10-31 13:26:46 +01:00
c21a76907c Fix building rust crates via separate user 2021-10-31 13:09:00 +01:00
36dcdad8b7 Add ~/.cargo/bin to PATH 2021-10-31 12:52:37 +01:00
3215c88ee1 Install rustup on ubuntu 2021-10-31 12:52:37 +01:00
d2509eb0aa Cooler exa options! 2021-10-29 17:58:14 +02:00
d7305dc070 Fix laptop lid service 2021-10-29 17:45:05 +02:00
95a87d5112 Always restart services 2021-10-29 17:44:58 +02:00
9c11f4b357 Remove discord 2021-10-29 17:44:44 +02:00
05b7b53677 Do not keep binaries inside rust_build user home 2021-10-29 16:31:00 +02:00
9170f6af1d Use rustup properly to build rust binaries 2021-10-29 16:30:23 +02:00
14270d4217 Add some fancy rust cmdline programs 2021-10-29 15:50:50 +02:00
214de1d2a2 Fix font size for machines without scaling 2021-10-29 15:46:26 +02:00
8e22012b23 Configure i3 workspaces on ares 2021-10-29 15:39:54 +02:00
bf44b943ac Remove old urxvt config 2021-10-29 15:38:05 +02:00
fef4fd5ce1 Add dmideocde, required by libvirt on arch 2021-10-29 14:06:04 +02:00
2aa6073b5e Standardize capitalization of ansible task names 2021-10-29 14:06:04 +02:00
f722d06a28 Set GOROOT correctly 2021-10-29 14:06:04 +02:00
ec32037212 Fix some arch-specific "becomes" 2021-10-29 14:06:04 +02:00
375935205e Remove vim in favour of nvim 2021-10-29 14:06:03 +02:00
6b29f628db Remove signal 2021-10-25 19:44:09 +02:00
5890dd13d6 vim: Add shortcut to close buffer without closing window 2021-10-25 19:29:25 +02:00
58dd4470fa firefox: Install floccus 2021-10-25 19:10:45 +02:00
680762b999 Add ansible firefox role version 2021-10-22 23:00:25 +02:00
96ba4fd0b3 i3status: Do not report remaining battery time 2021-10-22 22:57:18 +02:00
b0b5833502 Remove unneeded scripts 2021-10-22 22:54:39 +02:00
18c73ef8f1 Try to standardize font size 2021-10-22 22:42:13 +02:00
9385652e8b Add imv alias on ubuntu 2021-10-22 22:39:02 +02:00
5198256bf7 rofi: Disable Desktop entries 2021-10-22 22:38:48 +02:00
67ac6797df Fix firefox list in autostart.target 2021-10-17 09:58:36 +02:00
7703621506 Use better vim monokai color scheme 2021-10-17 09:39:25 +02:00
0e125af3f7 Unify the "update" target 2021-10-13 08:10:36 +02:00
a9850d527c Drop dryrun target 2021-10-13 08:10:36 +02:00
cc6f4cb102 Use dotfiles group for dotfiles user 2021-10-13 08:10:36 +02:00
Hannes Körber
8d59331de5 zsh: Add docker aliases 2021-10-13 08:10:36 +02:00
Hannes Körber
066308e9ae Update alacritty default title 2021-10-13 08:10:36 +02:00
Hannes Körber
6159d33cd6 Drop terminal variable, always use alacritty 2021-10-13 08:10:36 +02:00
c70c39f28f Create a ~/tmp directory 2021-10-10 17:06:10 +02:00
468f1ee9c0 Configure firefox extensions & settings 2021-10-10 17:06:10 +02:00
bad23c0796 Set python interpreter to python3 2021-10-10 17:04:24 +02:00
d1b302a234 Add ansible firefox role 2021-10-10 17:04:19 +02:00
6fa75cad60 vim: Add vim-svelte 2021-10-06 21:02:08 +02:00
f24e48d5cd Use rustup instead of rust on arch 2021-10-06 21:02:08 +02:00
579e97a3be Remove discord from autostart 2021-10-06 21:02:08 +02:00
ba7153ce4a Add gothic install scripts 2021-10-06 21:02:08 +02:00
48d4788e55 pacman: Enable parallel downloads 2021-10-06 20:37:53 +02:00
b9b12d07a3 pulse: Install libpulse on arch 2021-10-06 20:37:53 +02:00
4c998c4a21 vim: Disable broken plugin elm-format 2021-10-03 23:22:31 +02:00
7e119171dd Use npm instead of yarn for vim plugin install 2021-10-03 23:22:31 +02:00
2f339474e8 Remove go binary install during vim plugin install 2021-10-03 23:22:31 +02:00
7d100dbbe5 Fix nvim plugin install 2021-10-03 23:22:31 +02:00
d03d13975f Move vim-plug directory creation into correct tagged block 2021-10-03 23:18:25 +02:00
cd0f9ab719 Fix setting of PATH for yubikey-touch-detector build 2021-10-03 22:57:46 +02:00
c791055d7f Remove all wallpaper-related stuff 2021-10-03 22:50:36 +02:00
9ac0a9895c Use /etc/profile for PATH 2021-10-03 22:33:28 +02:00
7aea9806ad Set PATH/GOPATH for go explicitly 2021-10-03 22:33:15 +02:00
a3e3c88204 Install go before building stuff with it 2021-10-03 22:32:52 +02:00
5cbbf5e777 Add go directory to PATH 2021-10-03 21:51:22 +02:00
4b442be5ac Remove unused path from PATH 2021-10-03 21:40:25 +02:00
87d8a43119 Install go manually 2021-10-03 21:40:25 +02:00
3f9dd1a39a Get rid of snap 2021-10-03 21:38:29 +02:00
91a3099822 Drop "--sync" from nvim plugin commands 2021-10-03 18:48:03 +02:00
78ec2715bd Remove duplicate manpage package definition 2021-10-03 18:32:14 +02:00
cd937acc60 Update portfolioperformance to v0.55.0 2021-10-03 15:51:14 +02:00
c0b9631ecf Use ~/.go as GOPATH 2021-10-03 15:48:38 +02:00
06e2e847e9 Install spotify via paru on arch 2021-10-03 15:44:59 +02:00
a14e884302 Add separate paru user for installs 2021-10-03 15:44:48 +02:00
d719481f4d Fix running mkinitcpio in docker 2021-10-03 15:25:35 +02:00
3bb8f8bd56 Install signal on arch 2021-10-03 15:13:42 +02:00
a71f9b7bc5 Update vim plugin installations 2021-10-03 14:41:35 +02:00
3cf49371e1 Install kernel in ares testing container 2021-10-03 13:29:08 +02:00
69f6ba29fc Install pass wrapper in .optbin 2021-10-03 12:55:22 +02:00
52525ba8ce Add test scripts for mars 2021-10-03 12:55:12 +02:00
19ca3f7980 Add vim plugin update 2021-10-03 12:30:09 +02:00
cf12e48c41 Add pass wrapper to check out store 2021-10-03 12:24:11 +02:00
b2b80a7ba4 Make kubectl executable after download 2021-10-03 12:09:09 +02:00
903f6975fc alacritty: Fix config 2021-10-03 11:48:45 +02:00
Hannes Körber
284387581e Fix youcompleteme output file path 2021-10-03 11:34:53 +02:00
1e05fe61f0 Add new machine "mars" 2021-10-03 11:07:44 +02:00
9f4cebde56 Only use iptables hack on arch 2021-10-03 11:07:35 +02:00
296f3e9f76 bin: Add time tracking entrypoint 2021-10-03 09:55:05 +02:00
bd7c4d270d vim: configure go module 2021-10-03 09:55:05 +02:00
617f63ed17 vim: Add autoformat shortcut 2021-10-03 09:55:05 +02:00
5ba2bda934 vim: Add clipboard commands 2021-10-03 09:55:05 +02:00
73c18fa7b7 vim: Add JS/JSX plugins 2021-10-03 09:55:04 +02:00
546c08a28e vim: Add editorconfig plugin 2021-10-03 09:55:04 +02:00
40f08b3783 i3: Add pim_toggle with switchback 2021-10-03 09:55:04 +02:00
90fd75b2ba Cleanup tempdir AFTER it is no longer used 2021-10-02 13:07:29 +02:00
442e6e0986 Decommission tb-hak machine 2021-10-02 13:05:51 +02:00
be07205cbb Fix syntax error in temp file cleanup 2021-10-02 13:04:10 +02:00
0c1ddd96c3 Remove sambashare group on ubuntu 2021-10-02 13:00:20 +02:00
abd7b450c9 Remove lpadmin group on ubuntu 2021-10-02 12:59:29 +02:00
7b92000dde testing: Enable selecting of host 2021-10-02 12:56:11 +02:00
7f5e51651a Skip waiting for input during testing 2021-10-02 12:55:56 +02:00
f9cbe9fbea Create cache directory on arch 2021-10-02 12:54:59 +02:00
ab75df4095 Do no install neovim PPA 2021-10-02 12:54:39 +02:00
2668f4ffad packages: Remove anki 2021-10-02 12:54:24 +02:00
1e706c8ed9 Fix iptables install on arch 2021-10-02 12:54:11 +02:00
4f0f775a5d Update apt package lists during bootstrap 2021-10-02 12:28:37 +02:00
c737c3a0f4 Only checkout submodules if in git 2021-10-02 12:20:19 +02:00
fd3c106b29 Add testing for neptune 2021-10-02 12:12:48 +02:00
1405b0621d Update ansible to v4.6.0 2021-10-02 12:10:37 +02:00
75af2aba0f Do initial passwordstore checkout 2021-10-02 12:02:36 +02:00
65455aff68 Add personal gpg key configuration 2021-10-02 12:02:24 +02:00
da77ab91c7 Add dedicated dotfiles user 2021-10-02 11:32:47 +02:00
03fbae33e4 zsh: Use python3 for aliases 2021-10-02 11:32:47 +02:00
f844c3cc48 Add new machine "neptune" 2021-10-02 11:32:47 +02:00
f88cbf2a32 Specify alacritty config file explicilty 2021-10-02 11:26:52 +02:00
adb32321a3 Fix typo for feature file 2021-10-02 11:26:52 +02:00
18b32adfc9 vim: Remove elm-vim 2021-10-02 11:26:52 +02:00
8f850ec2c8 Manage terraform binary 2021-10-02 11:26:52 +02:00
73fe37e50f Update warning on outdated kubectl 2021-10-02 11:26:52 +02:00
5e8820da53 Update kubectl 2021-10-02 11:26:52 +02:00
7e0a937516 PP: Remove temporary directory after download 2021-10-02 11:26:52 +02:00
ea1b3ecc3d YCM: Update compiled *.so path 2021-10-02 11:26:52 +02:00
b4f502e964 Update gpg-agent service blacklist 2021-10-02 11:07:33 +02:00
f84ed5f28d Install signal via third-party repo on ubuntu 2021-10-02 11:07:19 +02:00
89799c2ccd Install spotify via third-party repo on ubuntu 2021-10-02 11:07:14 +02:00
c51a326278 Build yubikey-touch-detector on ubuntu 2021-10-02 11:06:49 +02:00
cedecc54b9 Build alacritty on ubuntu 2021-10-02 11:06:08 +02:00
0b01fd236e ansible: Use correct "state" for package module 2021-10-02 11:04:22 +02:00
6e518966e0 gpg: Run agent conditionally 2021-10-02 11:03:45 +02:00
e8f2888ead packages: Add ncdu 2021-10-02 11:02:42 +02:00
d9bb925581 packages: Install synaptics packages 2021-10-02 11:02:27 +02:00
eac0c05a56 packages: Do not install terraform on ubuntu 2021-10-02 11:01:53 +02:00
ea512bb92d packages: Install maim on ubuntu 2021-10-02 11:01:37 +02:00
06bdbb608c packages: Install playerctl on ubuntu 2021-10-02 11:01:31 +02:00
d5c8aaa6d8 packages: Install stress on ubuntu 2021-10-02 11:01:22 +02:00
60667c81a2 packages: Install nextcloud on ubuntu 2021-10-02 11:01:14 +02:00
c194f06137 packages: Install man on ubuntu 2021-10-02 11:01:04 +02:00
f93ce57d11 packages: Install imv on ubuntu 2021-10-02 11:00:47 +02:00
cc3dcb9979 packages: Update musescore package name on ubuntu 2021-10-02 11:00:37 +02:00
d0c39c4dc6 packages: Install ssh on ubuntu 2021-10-02 11:00:06 +02:00
42b8685182 packages: Install virtualbox on arch 2021-10-02 10:59:54 +02:00
e369cf1917 packages: Add package required for openconnect on ubuntu 2021-10-02 10:59:35 +02:00
10dd7a588e packages: Add required packages for yubikey on ubuntu 2021-10-02 10:59:10 +02:00
b733b560b8 packages: Remove shutter 2021-10-02 10:58:47 +02:00
55b494a045 packages: Remove chrome & chromium 2021-10-02 10:58:37 +02:00
db7e251b94 packages: Add libvirt on ubuntu 2021-10-02 10:58:02 +02:00
76de35c9a0 packages: Add pdf tooling for ubuntu 2021-10-02 10:57:51 +02:00
73a26bb372 packages: Add fonts for ubuntu 2021-10-02 10:57:30 +02:00
7eefa3c800 packages: Add docker-compose for ubuntu 2021-10-02 10:57:21 +02:00
959dc9dd80 packages: Install cmake on ubuntu 2021-10-02 10:56:59 +02:00
614e3434e8 Bootstrap required venv python module 2021-10-02 10:56:14 +02:00
c9d1fa8b0f Bootstrap submodules 2021-10-02 10:55:53 +02:00
fa756766e5 py3status: Disable manual click events
The modules already support the click events natively.
2021-10-02 10:55:26 +02:00
4f4a9b919f i3: Remove scratchpad bindings 2021-10-02 10:55:10 +02:00
d086928ecc i3: Move screenshot hotkey 2021-10-02 10:55:01 +02:00
6008fb53db firefox: Enable multiple instances 2021-10-02 10:54:42 +02:00
3fceca6d87 alacritty: Set TERM 2021-10-02 10:53:54 +02:00
aea05be674 Enable yubikey-touch-detector conditionally 2021-10-02 10:53:46 +02:00
b9a9097f95 autostart: Template the autostart target unit file 2021-10-02 10:52:59 +02:00
d9dd1e7acf Bootstrap venv via Makefile 2021-10-02 10:52:00 +02:00
2018e47525 zsh: Remove GO* env variables 2021-09-25 19:11:59 +02:00
d946aa4b4c vim: Fix YCM compilation 2021-09-25 19:11:59 +02:00
408595d7e1 ansible: Fix systemd user unit masking 2021-09-25 19:11:59 +02:00
b924e780c3 i3: Move spotify to the very left of i3bar 2021-09-25 19:11:59 +02:00
e3158e02e4 i3: Add mic toggle mapping 2021-09-25 19:11:59 +02:00
a706259322 i3: Remap floating toggle 2021-09-25 19:11:59 +02:00
20f7fe43d2 git: ff-only on pull 2021-09-25 19:11:59 +02:00
b678d929ff dunst: Move window to bottom 2021-09-25 19:11:59 +02:00
9e5d3c5262 alacritty: Enable dynamic titles 2021-09-25 19:11:59 +02:00
cad6720173 Merge pull request #5 from hakoerber/dependabot/pip/cryptography-3.3.2
build(deps): bump cryptography from 3.2.1 to 3.3.2
2021-06-02 12:54:03 +02:00
0866a310cc Merge pull request #8 from hakoerber/dependabot/pip/ansible-2.10.7
build(deps): bump ansible from 2.10.4 to 2.10.7
2021-06-02 12:53:59 +02:00
dependabot[bot]
a35d7d78e1 build(deps): bump ansible from 2.10.4 to 2.10.7
Bumps [ansible](https://github.com/ansible/ansible) from 2.10.4 to 2.10.7.
- [Release notes](https://github.com/ansible/ansible/releases)
- [Commits](https://github.com/ansible/ansible/compare/v2.10.4...v2.10.7)

---
updated-dependencies:
- dependency-name: ansible
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-01 21:55:57 +00:00
2128028113 packages: Add terraform 2021-04-20 20:19:41 +02:00
cc6a0673b9 packages: Add some python modules 2021-04-20 20:19:41 +02:00
c859f7f76c Install mkinitcpio in arch 2021-04-20 20:19:41 +02:00
1907fb2547 Limit memory usage of nextcloud 2021-04-20 20:19:41 +02:00
7b20ee2875 Fix libvirt setup on arch 2021-04-20 20:19:41 +02:00
513e401099 Optimize pacman caching in docker test script 2021-04-20 20:19:41 +02:00
1b22fe6116 testscript: Clean up tmpdir 2021-04-20 20:19:41 +02:00
c6a056b77c Deprecate fedora 2021-04-20 20:19:41 +02:00
236954d557 Add script to detect missing packages in list 2021-04-20 20:19:41 +02:00
f1c9e4a6f3 zsh: Use yaml.safe_load for yaml2json 2021-04-20 20:19:41 +02:00
c12185af79 Refactor docker testing script 2021-04-20 20:19:41 +02:00
57d3c570c0 i3: Remove deprecated wallchanger hotkeys 2021-04-20 20:19:41 +02:00
8d3a4ff778 i3: Add screenshot config 2021-04-20 20:19:41 +02:00
ffb295d858 Install maim 2021-04-20 20:19:41 +02:00
fb3c3d8c19 Fix screencfg for ares 2021-04-20 20:19:41 +02:00
41abaf2533 zsh: Suppress warnings in "embiggen" 2021-04-20 20:19:41 +02:00
b83ced88a5 zsh: Remove duplicate "embiggen" function 2021-04-20 20:19:41 +02:00
9723753b5b Install pdf packages 2021-04-20 20:19:41 +02:00
d2d2ddace4 gtk: Update font size calculation 2021-04-20 20:19:41 +02:00
dependabot[bot]
eb31b393e9 build(deps): bump cryptography from 3.2.1 to 3.3.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 3.2.1 to 3.3.2.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/3.2.1...3.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-08 16:06:49 +00:00
d74d7866ff Merge pull request #6 from hakoerber/dependabot/pip/jinja2-2.11.3
build(deps): bump jinja2 from 2.11.2 to 2.11.3
2021-04-08 18:06:03 +02:00
75fdf52586 Merge pull request #7 from hakoerber/dependabot/pip/pyyaml-5.4
build(deps): bump pyyaml from 5.3.1 to 5.4
2021-04-05 13:35:05 +02:00
dependabot[bot]
bdb0fd00bd build(deps): bump pyyaml from 5.3.1 to 5.4
Bumps [pyyaml](https://github.com/yaml/pyyaml) from 5.3.1 to 5.4.
- [Release notes](https://github.com/yaml/pyyaml/releases)
- [Changelog](https://github.com/yaml/pyyaml/blob/master/CHANGES)
- [Commits](https://github.com/yaml/pyyaml/compare/5.3.1...5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-25 21:39:37 +00:00
dependabot[bot]
2ae40edccc build(deps): bump jinja2 from 2.11.2 to 2.11.3
Bumps [jinja2](https://github.com/pallets/jinja) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/master/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/2.11.2...2.11.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-19 21:55:59 +00:00
825ff4e770 Add signal autostart 2021-02-01 20:40:14 +01:00
2b9d974659 Add element autostart 2021-02-01 20:40:14 +01:00
2895c33fbc i3: Force steam to workspace 5 2021-01-31 16:08:42 +01:00
5c3cf1b887 Disable restic on private account on tb-hak 2021-01-30 21:28:18 +01:00
a0968ba34a x: Import the environment on startup
This is required to set the DISPLAY variable correctly.
2021-01-30 21:25:28 +01:00
71a0886d46 autostart: Update "Type" of i3 service
"exec" is not available on Ubuntu 18.04, and it does not help to resolve
the ordering problem anyway.
2021-01-30 21:23:52 +01:00
Hannes Körber
83c9d72afe Make gpg ssh support configurable 2021-01-30 21:06:53 +01:00
Hannes Körber
39b45df38e autostart: Remove hardcoded DISPLAY 2021-01-30 21:06:53 +01:00
Hannes Körber
55477c5919 Install pydbus on ubuntu 2021-01-30 21:06:53 +01:00
Hannes Körber
fd2a274668 Add workaround for old ubuntu systemd 2021-01-30 21:06:53 +01:00
Hannes Körber
613f249f64 Remove old screencfg config 2021-01-27 16:45:33 +01:00
Hannes Körber
9ac25a152d i3: Add shortcuts for screenconfigs 2021-01-27 16:45:33 +01:00
Hannes Körber
735568adfa Update screenconfigs 2021-01-27 16:45:33 +01:00
Hannes Körber
5a803a578b screencfg: Support additional --set parameters 2021-01-27 16:45:33 +01:00
Hannes Körber
818ac7ef8c screencfg: Use yaml.safe_load() 2021-01-27 15:50:57 +01:00
Hannes Körber
c22d769ab5 zsh: Do not export TERMBIN, not needed 2021-01-27 15:18:57 +01:00
Hannes Körber
96765dbf76 tmux: Use generic default-terminal 2021-01-27 15:18:41 +01:00
Hannes Körber
6f2e7d20b4 qt: Remove unneeded options 2021-01-27 15:18:32 +01:00
Hannes Körber
b742d63193 ubuntu: Add more theming packages 2021-01-27 15:18:24 +01:00
Hannes Körber
d78ba65063 tb-hak: Switch to alacritty 2021-01-27 15:18:16 +01:00
Hannes Körber
7231b614fa gtk: Use font_size 2021-01-27 15:18:03 +01:00
Hannes Körber
f174a4e558 Make autostart ubuntu-compatible 2021-01-27 15:17:45 +01:00
Hannes Körber
8c18407688 restic: Do backups only once per day 2021-01-27 15:16:32 +01:00
Hannes Körber
a396c0c739 Fix failure during check run 2021-01-27 14:21:58 +01:00
Hannes Körber
d6ecdeb796 Add more packages for ubuntu 2021-01-22 08:43:29 +01:00
186 changed files with 5386 additions and 8040 deletions

2
.gitignore vendored
View File

@@ -1 +1 @@
/*.bundle
/venv/

66
.gitmodules vendored
View File

@@ -1,60 +1,6 @@
[submodule "pkgbuilds/spotify"]
path = pkgbuilds/spotify
url = https://aur.archlinux.org/spotify.git
[submodule "pkgbuilds/nodejs-intelephense"]
path = pkgbuilds/nodejs-intelephense
url = https://aur.archlinux.org/nodejs-intelephense.git
[submodule "pkgbuilds/portfolio-performance-bin"]
path = pkgbuilds/portfolio-performance-bin
url = https://aur.archlinux.org/portfolio-performance-bin.git
[submodule "pkgbuilds/terraform-ls-bin"]
path = pkgbuilds/terraform-ls-bin
url = https://aur.archlinux.org/terraform-ls-bin.git
[submodule "pkgbuilds/grm-git"]
path = pkgbuilds/grm-git
url = https://aur.archlinux.org/grm-git.git
[submodule "pkgbuilds/screencfg-git"]
path = pkgbuilds/screencfg-git
url = https://aur.archlinux.org/screencfg-git.git
[submodule "pkgbuilds/google-earth-pro"]
path = pkgbuilds/google-earth-pro
url = https://aur.archlinux.org/google-earth-pro.git
[submodule "pkgbuilds/aws-sam-cli"]
path = pkgbuilds/aws-sam-cli
url = https://aur.archlinux.org/aws-sam-cli.git
[submodule "pkgbuilds/python-boto3-stubs"]
path = pkgbuilds/python-boto3-stubs
url = https://aur.archlinux.org/python-boto3-stubs.git
[submodule "pkgbuilds/python-botocore-stubs"]
path = pkgbuilds/python-botocore-stubs
url = https://aur.archlinux.org/python-botocore-stubs.git
[submodule "pkgbuilds/python-chevron"]
path = pkgbuilds/python-chevron
url = https://aur.archlinux.org/python-chevron.git
[submodule "pkgbuilds/python-aws-lambda-builders"]
path = pkgbuilds/python-aws-lambda-builders
url = https://aur.archlinux.org/python-aws-lambda-builders.git
[submodule "pkgbuilds/python-vdf"]
path = pkgbuilds/python-vdf
url = https://aur.archlinux.org/python-vdf.git
[submodule "pkgbuilds/protontricks"]
path = pkgbuilds/protontricks
url = https://aur.archlinux.org/protontricks.git
[submodule "pkgbuilds/slack-desktop"]
path = pkgbuilds/slack-desktop
url = https://aur.archlinux.org/slack-desktop.git
[submodule "pkgbuilds/backblaze-b2"]
path = pkgbuilds/backblaze-b2
url = https://aur.archlinux.org/backblaze-b2.git
[submodule "pkgbuilds/python-class-registry"]
path = pkgbuilds/python-class-registry
url = https://aur.archlinux.org/python-class-registry.git
[submodule "pkgbuilds/python-rst2ansi"]
path = pkgbuilds/python-rst2ansi
url = https://aur.archlinux.org/python-rst2ansi.git
[submodule "pkgbuilds/claude-code"]
path = pkgbuilds/claude-code
url = https://aur.archlinux.org/claude-code.git
[submodule "pkgbuilds/aws-session-manager-plugin"]
path = pkgbuilds/aws-session-manager-plugin
url = https://aur.archlinux.org/aws-session-manager-plugin.git
[submodule "contrib/vim-plug"]
path = contrib/vim-plug
url = https://github.com/junegunn/vim-plug
[submodule "ansible_roles/firefox"]
path = ansible_roles/firefox
url = https://github.com/staticdev/ansible-role-firefox

View File

@@ -1,24 +1,51 @@
# Make sure to standardize locale, regardless of the machine config
#
# Having a different locale broke "yes | pacman -S" to force-install
# iptables, for example
export LC_ALL = en_US.UTF-8
venv = ./venv
requirements = requirements.txt
activate = . $(venv)/bin/activate
pip = pip
ansible = venv/bin/ansible-playbook
ansible_run = $(activate) && ansible-playbook -e ansible_python_interpreter=/usr/bin/python3 --inventory localhost, --diff --verbose ./playbook.yml ${ANSIBLE_EXTRA_ARGS}
ansible_run = ansible-playbook --inventory localhost, --diff ./playbook.yml ${ANSIBLE_EXTRA_ARGS}
.PHONY: config
config:
.PHONY: all
all: | venv $(ansible)
$(ansible_run)
.PHONY: maintenance
maintenance:
./maintenance.sh
.PHONY: update
update: $(ansible)
$(ansible_run) --tags update
.PHONY: reboot
reboot:
sudo reboot
.PHONY: poweroff
poweroff:
sudo poweroff
.PHONY: weekend
weekend: | update poweroff
.PHONY: packages
packages: $(ansible)
$(ansible_run) --tags packages
.PHONY: dotfiles
dotfiles: $(ansible)
$(ansible_run) --tags dotfiles
.PHONY: clean
clean:
rm -rf venv
.PHONY: test
test:
./test-in-docker.sh
.PHONY: fmt
fmt:
git ls-files -z '*.md' | xargs -0 prettier --print-width 80 --prose-wrap always --write
git ls-files -z '*.toml' | xargs -0 taplo format
$(ansible): venv
venv:
python3 -m venv $(venv)
$(activate) && $(pip) install -r $(requirements)
.PHONY: freeze
freeze:
$(activate) && $(pip) freeze > $(requirements)

View File

@@ -1,45 +1,27 @@
# dotfiles
My configuration files for my systems. Uses Ansible for local configuration.
My configuration files.
## Supported OS
Only Arch Linux is supported
## Bootstrapping
Bootstrapping is specific to the exact machine that is installed. See
`_machines/` for machine-specific configuration, and `install_scripts/` for the
machine install scripts.
They are keyed by hostname.
For easier installation, the install scripts are available via shortlinks. To
(re)install a new machine from a Arch live environment:
```
curl --proto '=https' -O -sSfL https://s.hkoerber.de/i/bootstrap.sh && bash bootstrap.sh {host}
```
## Manual Installation
# Installation
Because it manages multiple users on the system, the directory is supposed to be
at `/var/lib/dotfiles`.
To set up the dotfiles:
To setup the dotfiles:
1. `git clone https://github.com/hakoerber/dotfiles.git ~/dotfiles`
2. `cd ~/dotfiles && ./install.sh`
## Partial application
# Partial application
To apply only a subset of the changes, use ansible tags that are available via
the Makefile:
| Command | Description |
| --------------- | -------------------------------------------------- |
| Command | Description |
| --- | --- |
| `make update` | Updates the system with the latest packages |
| `make packages` | Installs all defined packages (see `packages.yml`) |
| `make dotfiles` | Manages the users' dotfiles |
| `make dotfiles` | Manages the users' dotfiles |
Note that these are not supported on a first bootstrap run. Only use them after
the bootstrap to update existing configuration.

View File

@@ -1,8 +1,6 @@
font_size: 11
font_size: 12
gpu: amd
cpu: amd
encrypted_root: true
users:
- name: hannes
@@ -12,20 +10,25 @@ users:
extensions:
- ublock-origin
- passff
- privacy-badger17
- tree-style-tab
- i-dont-care-about-cookies
- floccus
manage_css: true
mail: hannes@hkoerber.de
ssh_agent: false
git_gpg_sign: false
gpg_agent: true
gpg_agent_for_ssh: true
gpg_key:
email: hannes@hkoerber.de
id: "0xB5C002530C6A2053"
fingerprint: "973AE48D71B76735C4712B5BB5C002530C6A2053"
enable_passwordstore: true
environment:
MACHINE_HAS_NEXTCLOUD: "true"
has_yubikey: true
repositories:
- personal_projects
screen:
1: DisplayPort-0
@@ -39,15 +42,19 @@ screen:
9: DisplayPort-0
0: DisplayPort-0
screencfgs: []
workspace:
1: ""
9: ""
10: ""
1: www
9: comm
10: music
environment:
MACHINE_TYPE: "workstation"
MACHINE_HAS_KEEPASSXC: "false"
MACHINE_HAS_KEEPASSX: "false"
MACHINE_HAS_NEXTCLOUD: "true"
MACHINE_HAS_STEAM: "true"
MACHINE_HAS_RESTIC_BACKUP: "false"
MACHINE_HAS_ELEMENT: "true"
MACHINE_RESOLUTION_X: "2560"
MACHINE_RESOLUTION_Y: "1440"

View File

@@ -1,61 +0,0 @@
font_size: 11
gpu: intel
cpu: intel
encrypted_root: true
users:
- name: hannes
vt: 1
firefox_profiles:
default:
extensions:
- ublock-origin
- passff
- tree-style-tab
- i-dont-care-about-cookies
- floccus
manage_css: true
media:
extensions:
- ublock-origin
- passff
- tree-style-tab
- i-dont-care-about-cookies
manage_css: true
bigger_font: true
mail: hannes@hkoerber.de
ssh_agent: false
gpg_agent: true
gpg_agent_for_ssh: true
gpg_key:
email: hannes@hkoerber.de
id: "0xB5C002530C6A2053"
fingerprint: "973AE48D71B76735C4712B5BB5C002530C6A2053"
environment:
MACHINE_HAS_NEXTCLOUD: "true"
screen:
1: HDMI-1
2: HDMI-1
3: HDMI-1
4: HDMI-1
5: HDMI-1
6: HDMI-1
7: HDMI-1
8: HDMI-1
9: HDMI-1
0: HDMI-1
workspace:
1: ""
2: ""
3: ""
environment:
MACHINE_TYPE: "tv"
MACHINE_HAS_KEEPASSXC: "false"
MACHINE_HAS_NEXTCLOUD: "true"
MACHINE_HAS_STEAM: "false"
MACHINE_RESOLUTION_X: "1920"
MACHINE_RESOLUTION_Y: "1080"

View File

@@ -1,265 +0,0 @@
---
- name: Autoupdate
block:
- name: Deploy autoupdate script
copy:
owner: root
group: root
mode: "0755"
dest: /usr/local/bin/pacman-autoupdate
content: |
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
# Prevent failures when not battery present
shopt -s nullglob
for battery in /sys/class/power_supply/*/capacity ; do
capacity="$(< "$battery")"
if (( "${capacity}" < 40 )) ; then
printf "Battery at %s%%, exiting\n" "${capacity}" >&2
exit 0
fi
done
if nmcli --terse --fields GENERAL.METERED dev show 2>/dev/null | grep -q "yes" ; then
printf "Detected metered connection, exiting\n" >&2
exit 0
fi
# Make sure that keys are up to date, otherwise sig checks may fail
pacman --sync --noprogressbar --noconfirm --refresh --needed archlinux-keyring
pacman --noprogressbar --noconfirm --sysupgrade
- name: Install pacman autoupdate service
ansible.builtin.copy:
dest: /etc/systemd/system/pacman-autoupdate.service
owner: root
group: root
mode: "0644"
content: |
[Service]
Type=oneshot
ExecStart=/usr/local/bin/pacman-autoupdate
become: true
- name: Install pacman autoupdate timer
ansible.builtin.copy:
dest: /etc/systemd/system/pacman-autoupdate.timer
owner: root
group: root
mode: "0644"
content: |
[Timer]
OnCalendar=daily
OnBootSec=5min
OnUnitInactiveSec=120min
[Install]
WantedBy=multi-user.target
- name: Enable pacman autoupdate timer
ansible.builtin.systemd:
name: pacman-autoupdate.timer
enabled: true
state: started
daemon_reload: true
become: true
become: true
- name: User configuration
block:
- name: Create user group
ansible.builtin.group:
name: "herta"
state: present
become: true
- name: Create user
ansible.builtin.user:
name: "herta"
state: present
home: "/home/herta"
create_home: true
groups:
- dotfiles
- libvirt
- wheel
- wireshark
- docker
- sudonopw
- games
- kvm
- video
shell: /usr/bin/zsh
skeleton: /dev/null
become: true
- name: Display Manager
block:
- name: Enable sddm
ansible.builtin.systemd:
name: sddm.service
enabled: true
daemon_reload: true
become: true
- name: Create sddm config folder
ansible.builtin.file:
state: directory
path: /etc/sddm.conf.d/
owner: root
group: root
mode: "0755"
- name: Enable autologin
ansible.builtin.copy:
dest: /etc/sddm.conf.d/autologin.conf
owner: root
group: root
mode: "0644"
content: |
[Autologin]
User=herta
Session=plasma
- name: Lock on startup
ansible.builtin.copy:
dest: /etc/xdg/kscreenlockerrc
owner: root
group: root
mode: "0644"
content: |
[Daemon]
LockOnStart=true
- name: Backup
block:
- name: create restic config directory
file:
path: /etc/restic
state: directory
owner: root
group: root
mode: "0755"
become: true
- name: create restic exclude file
copy:
dest: /etc/restic/exclude.lst
content: |
/home/*/.cache/**
/home/*/.mozilla/firefox/*/Cache/**
owner: root
group: root
mode: "0755"
become: true
- name: create restic cache directory
file:
path: /var/cache/restic
state: directory
owner: root
group: root
mode: "0700"
become: true
- name: create restic wrapper script
copy:
owner: root
group: root
mode: "0700"
dest: /usr/local/bin/restic-cmd
content: |
#!/usr/bin/env bash
source /etc/restic/env
set -o nounset
set -o errexit
set -o pipefail
export B2_ACCOUNT_ID
export B2_ACCOUNT_KEY
export RESTIC_PASSWORD_FILE=/etc/restic/repopassword
restic \
--cache-dir=/var/cache/restic/ \
--repo="b2:${BUCKET_NAME}:hera" \
--password-file=/etc/restic/repopassword \
--verbose \
"${@}"
become: true
- name: add backup script
copy:
owner: root
group: root
mode: "0700"
dest: /usr/local/bin/restic-backup
content: |
#!/usr/bin/env bash
set -o nounset
set -o errexit
set -o pipefail
run() {
name="${1}" ; shift
printf '[%s] %s - start\n' "${name}" "$(date --utc --iso-8601=seconds)"
"${@}"
printf '[%s] %s - end\n' "${name}" "$(date --utc --iso-8601=seconds)"
}
run backup restic-cmd \
backup \
--exclude-file /etc/restic/exclude.lst \
/home/
run forget restic-cmd \
forget \
--prune \
--keep-daily 30 \
--keep-monthly 12 \
--keep-yearly 3
become: true
- name: Install restic backup service
ansible.builtin.copy:
dest: /etc/systemd/system/restic-backup.service
owner: root
group: root
mode: "0644"
content: |
[Service]
Type=oneshot
ExecStart=systemd-inhibit /usr/local/bin/restic-backup
become: true
- name: Install restic backup timer
ansible.builtin.copy:
dest: /etc/systemd/system/restic-backup.timer
owner: root
group: root
mode: "0644"
content: |
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=multi-user.target
become: true
- name: Enable restic backup timer
ansible.builtin.systemd:
name: restic-backup.timer
enabled: true
state: started
daemon_reload: true
become: true

View File

@@ -1,81 +0,0 @@
font_size: 11
gpu: intel
cpu: intel
encrypted_root: false
# make sure that display manager works
system_default_target: "graphical.target"
additional_packages:
- plasma-desktop
- konsole
- dolphin
- kdeplasma-addons
- plasma-nm
- plasma-pa
- plasma-systemmonitor
- sddm
- sddm-kcm
- thunderbird
# kde archive manager
- ark
# kde image viewer
- gwenview
# german language packs
- hunspell-de
- thunderbird-i18n-de
- firefox-i18n-de
users:
- name: hannes
vt: 1
firefox_profiles:
default:
extensions:
- ublock-origin
- passff
- tree-style-tab
- i-dont-care-about-cookies
- floccus
manage_css: true
media:
extensions:
- ublock-origin
- passff
- tree-style-tab
- i-dont-care-about-cookies
manage_css: true
bigger_font: true
mail: hannes@hkoerber.de
autologin: false
ssh_agent: false
gpg_agent: true
gpg_agent_for_ssh: true
gpg_key:
email: hannes@hkoerber.de
id: "0xB5C002530C6A2053"
fingerprint: "973AE48D71B76735C4712B5BB5C002530C6A2053"
environment: {}
screen:
1: HDMI-1
2: HDMI-1
3: HDMI-1
4: HDMI-1
5: HDMI-1
6: HDMI-1
7: HDMI-1
8: HDMI-1
9: HDMI-1
0: HDMI-1
workspace: []
environment:
MACHINE_TYPE: "workstation"
MACHINE_HAS_KEEPASSXC: "false"
MACHINE_HAS_NEXTCLOUD: "false"
MACHINE_HAS_STEAM: "false"
MACHINE_RESOLUTION_X: "1920"
MACHINE_RESOLUTION_Y: "1080"

90
_machines/mars.yml Normal file
View File

@@ -0,0 +1,90 @@
font_size: 12
users:
- name: hannes-work
group: hannes-work
vt: 1
firefox_profiles:
default:
extensions:
- ublock-origin
- privacy-badger17
- tree-style-tab
- i-dont-care-about-cookies
manage_css: true
meet:
extensions:
- ublock-origin
manage_css: false
mail: hannes.koerber@tradebyte.com
git_gpg_sign: false
gpg_agent: false
gpg_agent_for_ssh: false
environment:
MACHINE_HAS_NEXTCLOUD: "false"
MACHINE_HAS_RESTIC_BACKUP: "true"
MACHINE_HAS_ELEMENT: "false"
MACHINE_HAS_KEEPASSX: "true"
has_yubikey: false
repositories: []
- name: hannes-private
group: hannes-private
vt: 2
firefox_profiles:
default:
extensions:
- ublock-origin
- passff
- privacy-badger17
- tree-style-tab
- i-dont-care-about-cookies
- floccus
manage_css: true
mail: hannes@hkoerber.de
git_gpg_sign: false
gpg_agent: true
gpg_agent_for_ssh: true
gpg_key:
email: hannes@hkoerber.de
id: "0xB5C002530C6A2053"
fingerprint: "973AE48D71B76735C4712B5BB5C002530C6A2053"
enable_passwordstore: true
environment:
MACHINE_HAS_NEXTCLOUD: "true"
MACHINE_HAS_RESTIC_BACKUP: "false"
MACHINE_HAS_ELEMENT: "true"
MACHINE_HAS_KEEPASSX: "false"
has_yubikey: true
repositories:
- personal_projects
screen:
1: DP-1-1
2: DP-1-1
3: DP-1-2
4: DP-1-2
5: DP-1-2
6: DP-1-2
7: eDP-1
8: eDP-1
9: eDP-1
0: eDP-1
workspace:
1: www
2: www
3: term-local
4: term-remote
7: comm
8: pass
9: music
10: pim
screencfgs:
- name: three-screens
key: F3
environment:
MACHINE_TYPE: "laptop"
MACHINE_RESOLUTION_X: "1920"
MACHINE_RESOLUTION_Y: "1080"

View File

@@ -1,16 +1,14 @@
font_size: 11
gpu: nvidia
cpu: intel
encrypted_root: true
font_size: 12
users:
- name: hannes-work
group: hannes-work
vt: 1
firefox_profiles:
default:
extensions:
- ublock-origin
- privacy-badger17
- tree-style-tab
- i-dont-care-about-cookies
manage_css: true
@@ -18,60 +16,75 @@ users:
extensions:
- ublock-origin
manage_css: false
mail: h.koerber@clipmyhorse.tv
ssh_agent: true
mail: hannes.koerber@tradebyte.com
git_gpg_sign: false
gpg_agent: false
gpg_agent_for_ssh: false
environment:
MACHINE_HAS_NEXTCLOUD: "false"
MACHINE_HAS_KEEPASSXC: "true"
MACHINE_HAS_RESTIC_BACKUP: "true"
MACHINE_HAS_ELEMENT: "false"
MACHINE_HAS_KEEPASSX: "true"
has_yubikey: false
repositories: []
- name: hannes-private
group: hannes-private
vt: 2
firefox_profiles:
default:
extensions:
- ublock-origin
- passff
- privacy-badger17
- tree-style-tab
- i-dont-care-about-cookies
- floccus
manage_css: true
mail: hannes@hkoerber.de
ssh_agent: false
git_gpg_sign: false
gpg_agent: true
gpg_agent_for_ssh: true
gpg_key:
email: hannes@hkoerber.de
id: "0xB5C002530C6A2053"
fingerprint: "973AE48D71B76735C4712B5BB5C002530C6A2053"
enable_passwordstore: true
environment:
MACHINE_HAS_NEXTCLOUD: "true"
MACHINE_HAS_KEEPASSXC: "false"
MACHINE_HAS_RESTIC_BACKUP: "false"
MACHINE_HAS_ELEMENT: "true"
MACHINE_HAS_KEEPASSX: "false"
has_yubikey: true
repositories:
- personal_projects
screen:
1: DP-4-1-6
2: DP-4-1-6
3: DP-4-1-6
4: DP-4-1-6
5: DP-4-1-6
6: DP-4-1-6
1: DP-1-1
2: DP-1-1
3: DP-1-2
4: DP-1-2
5: DP-1-2
6: DP-1-2
7: eDP-1
8: eDP-1
9: eDP-1
0: eDP-1
workspace:
1: ""
2: ""
3: ""
4: ""
7: ""
8: ""
9: ""
10: ""
1: www
2: www
3: term-local
4: term-remote
7: comm
8: pass
9: music
10: pim
screencfgs:
- name: three-screens
key: F3
environment:
MACHINE_TYPE: "laptop"
MACHINE_RESOLUTION_X: "1920"
MACHINE_RESOLUTION_Y: "1200"
MACHINE_RESOLUTION_Y: "1080"

View File

@@ -1,40 +0,0 @@
[general]
live_config_reload = true
import = [
"~/.config/alacritty/themes/monokai.toml"
]
[env]
TERM = "alacritty"
WINIT_X11_SCALE_FACTOR = "1"
[font]
size = {{ machine.font_size }}
[font.bold]
family = "JetBrainsMono"
style = "Bold"
[font.bold_italic]
family = "JetBrainsMono"
style = "Bold Italic"
[font.italic]
family = "JetBrainsMono"
style = "Italic"
[font.normal]
family = "JetBrainsMono"
style = "Regular"
[selection]
save_to_clipboard = true
[window]
dynamic_title = true
title = "[terminal]"
[window.padding]
x = 3
y = 3

702
alacritty/alacritty.yml.j2 Normal file
View File

@@ -0,0 +1,702 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# Import additional configuration files
#
# Imports are loaded in order, skipping all missing files, with the importing
# file being loaded last. If a field is already present in a previous import, it
# will be replaced.
#
# All imports must either be absolute paths starting with `/`, or paths relative
# to the user's home directory starting with `~/`.
#import:
# - /path/to/alacritty.yml
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
TERM: xterm-256color
window:
# Window dimensions (changes require restart)
#
# Number of lines/columns (not pixels) in the terminal. The number of columns
# must be at least `2`, while using a value of `0` for columns and lines will
# fall back to the window manager's recommended size.
#dimensions:
# columns: 0
# lines: 0
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This padding is scaled
# by DPI and the specified value is always added at both opposing sides.
padding:
x: 3
y: 3
# Spread additional padding evenly around the terminal content.
#dynamic_padding: false
# Window decorations
#
# Values for `decorations`:
# - full: Borders and title bar
# - none: Neither borders nor title bar
#
# Values for `decorations` (macOS only):
# - transparent: Title bar, transparent background and title bar buttons
# - buttonless: Title bar, transparent background and no title bar buttons
#decorations: full
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
#startup_mode: Windowed
# Window title
title: "[terminal]"
# Allow terminal applications to change Alacritty's window title.
dynamic_title: true
# Window class (Linux/BSD only):
#class:
# Application instance name
#instance: Alacritty
# General application class
#general: Alacritty
# GTK theme variant (Linux/BSD only)
#
# Override the variant of the GTK theme. Commonly supported values are `dark`
# and `light`. Set this to `None` to use the default theme variant.
#gtk_theme_variant: None
#scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
#history: 10000
# Scrolling distance multiplier.
#multiplier: 3
# Font configuration
font:
# Normal (roman) font face
normal:
# Font family
#
# Default:
# - (macOS) Menlo
# - (Linux/BSD) monospace
# - (Windows) Consolas
family: Inconsolata
# The `style` can be specified to pick a specific face.
style: Regular
# Bold font face
bold:
# Font family
#
# If the bold family is not specified, it will fall back to the
# value specified for the normal font.
family: Inconsolata
# The `style` can be specified to pick a specific face.
style: Bold
# Italic font face
italic:
# Font family
#
# If the italic family is not specified, it will fall back to the
# value specified for the normal font.
family: Inconsolata
# The `style` can be specified to pick a specific face.
style: Italic
# Bold italic font face
bold_italic:
# Font family
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
family: Inconsolata
# The `style` can be specified to pick a specific face.
style: Bold Italic
# Point size
size: {{ machine.font_size }}
# Offset is the extra space around each character. `offset.y` can be thought
# of as modifying the line spacing, and `offset.x` as modifying the letter
# spacing.
#offset:
# x: 0
# y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the
# right, increasing `y` moves the glyph upward.
#glyph_offset:
# x: 0
# y: 0
# Thin stroke font rendering (macOS only)
#
# Thin strokes are suitable for retina displays, but for non-retina screens
# it is recommended to set `use_thin_strokes` to `false`.
#use_thin_strokes: true
# If `true`, bold text is drawn using the bright color variants.
#draw_bold_text_with_bright_colors: false
# Colors (Monokai Dark)
colors:
# Default colors
primary:
background: '#272822'
foreground: '#F8F8F2'
# Normal colors
normal:
black: '#272822'
red: '#F92672'
green: '#A6E22E'
yellow: '#F4BF75'
blue: '#66D9EF'
magenta: '#AE81FF'
cyan: '#A1EFE4'
white: '#F8F8F2'
# Bright colors
bright:
black: '#75715E'
red: '#F92672'
green: '#A6E22E'
yellow: '#F4BF75'
blue: '#66D9EF'
magenta: '#AE81FF'
cyan: '#A1EFE4'
white: '#F9F8F5'
# Bell
#
# The bell is rung every time the BEL control character is received.
#bell:
# Visual Bell Animation
#
# Animation effect for flashing the screen when the visual bell is rung.
#
# Values for `animation`:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
#animation: EaseOutExpo
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
# disable the visual bell animation.
#duration: 0
# Visual bell animation color.
#color: '#ffffff'
# Bell Command
#
# This program is executed whenever the bell is rung.
#
# When set to `command: None`, no command will be executed.
#
# Example:
# command:
# program: notify-send
# args: ["Hello, World!"]
#
#command: None
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
#background_opacity: 1.0
selection:
# This string contains all characters that are used as separators for
# "semantic words" in Alacritty.
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
# When set to `true`, selected text will be copied to the primary clipboard.
save_to_clipboard: true
#cursor:
# Cursor style
#style:
# Cursor shape
#
# Values for `shape`:
# - ▇ Block
# - _ Underline
# - | Beam
#shape: Block
# Cursor blinking state
#
# Values for `blinking`:
# - Never: Prevent the cursor from ever blinking
# - Off: Disable blinking by default
# - On: Enable blinking by default
# - Always: Force the cursor to always blink
#blinking: Off
# Vi mode cursor style
#
# If the vi mode cursor style is `None` or not specified, it will fall back to
# the style of the active value of the normal cursor.
#
# See `cursor.style` for available options.
#vi_mode_style: None
# Cursor blinking interval in milliseconds.
#blink_interval: 750
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
#unfocused_hollow: true
# Thickness of the cursor relative to the cell width as floating point number
# from `0.0` to `1.0`.
#thickness: 0.15
# Live config reload (changes require restart)
live_config_reload: false
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g.
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
# shell.
#
# Default:
# - (macOS) /bin/bash --login
# - (Linux/BSD) user login shell
# - (Windows) powershell
#shell:
# program: /bin/bash
# args:
# - --login
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
#working_directory: None
# WinPTY backend (Windows only)
#
# Alacritty defaults to using the newer ConPTY backend if it is available,
# since it resolves a lot of bugs and is quite a bit faster. If it is not
# available, the WinPTY backend will be used instead.
#
# Setting this option to `true` makes Alacritty use the legacy WinPTY backend,
# even if the ConPTY backend is available.
#winpty_backend: false
# Send ESC (\x1b) before characters when alt is pressed.
#alt_send_esc: true
#mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
#double_click: { threshold: 300 }
#triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
#hide_when_typing: false
#url:
# URL launcher
#
# This program is executed when clicking on a text which is recognized as a
# URL. The URL is always added to the command as the last parameter.
#
# When set to `launcher: None`, URL launching will be disabled completely.
#
# Default:
# - (macOS) open
# - (Linux/BSD) xdg-open
# - (Windows) explorer
#launcher:
# program: xdg-open
# args: []
# URL modifiers
#
# These are the modifiers that need to be held down for opening URLs when
# clicking on them. The available modifiers are documented in the key
# binding section.
#modifiers: None
# Mouse bindings
#
# Mouse bindings are specified as a list of objects, much like the key
# bindings further below.
#
# To trigger mouse bindings when an application running within Alacritty
# captures the mouse, the `Shift` modifier is automatically added as a
# requirement.
#
# Each mouse binding will specify a:
#
# - `mouse`:
#
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# - `action` (see key bindings)
#
# And optionally:
#
# - `mods` (see key bindings)
#mouse_bindings:
# - { mouse: Middle, action: PasteSelection }
# Key bindings
#
# Key bindings are specified as a list of objects. For example, this is the
# default paste binding:
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: Identifier of the key pressed
#
# - A-Z
# - F1-F24
# - Key0-Key9
#
# A full list with available key codes can be found here:
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number. This command will allow you to display the hex scancodes
# for certain keys:
#
# `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: Send a byte sequence to the running application
#
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences. To find escape codes for bindings
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
# of tmux. Note that applications use terminfo to map escape sequences back
# to keys. It is therefore required to update the terminfo when changing an
# escape sequence.
#
# - `action`: Execute a predefined action
#
# - ToggleViMode
# - SearchForward
# Start searching toward the right of the search origin.
# - SearchBackward
# Start searching toward the left of the search origin.
# - Copy
# - Paste
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollHalfPageUp
# - ScrollHalfPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# Remove the terminal's scrollback history.
# - Hide
# Hide the Alacritty window.
# - Minimize
# Minimize the Alacritty window.
# - Quit
# Quit Alacritty.
# - ToggleFullscreen
# - SpawnNewInstance
# Spawn a new instance of Alacritty.
# - ClearLogNotice
# Clear Alacritty's UI warning and error notice.
# - ClearSelection
# Remove the active selection.
# - ReceiveChar
# - None
#
# - Vi mode exclusive actions:
#
# - Open
# Open URLs at the cursor location with the launcher configured in
# `url.launcher`.
# - ToggleNormalSelection
# - ToggleLineSelection
# - ToggleBlockSelection
# - ToggleSemanticSelection
# Toggle semantic selection based on `selection.semantic_escape_chars`.
#
# - Vi mode exclusive cursor motion actions:
#
# - Up
# One line up.
# - Down
# One line down.
# - Left
# One character left.
# - Right
# One character right.
# - First
# First column, or beginning of the line when already at the first column.
# - Last
# Last column, or beginning of the line when already at the last column.
# - FirstOccupied
# First non-empty cell in this terminal row, or first non-empty cell of
# the line when already at the first cell of the row.
# - High
# Top of the screen.
# - Middle
# Center of the screen.
# - Low
# Bottom of the screen.
# - SemanticLeft
# Start of the previous semantically separated word.
# - SemanticRight
# Start of the next semantically separated word.
# - SemanticLeftEnd
# End of the previous semantically separated word.
# - SemanticRightEnd
# End of the next semantically separated word.
# - WordLeft
# Start of the previous whitespace separated word.
# - WordRight
# Start of the next whitespace separated word.
# - WordLeftEnd
# End of the previous whitespace separated word.
# - WordRightEnd
# End of the next whitespace separated word.
# - Bracket
# Character matching the bracket at the cursor's location.
# - SearchNext
# Beginning of the next match.
# - SearchPrevious
# Beginning of the previous match.
# - SearchStart
# Start of the match to the left of the vi mode cursor.
# - SearchEnd
# End of the match to the right of the vi mode cursor.
#
# - macOS exclusive actions:
# - ToggleSimpleFullscreen
# Enter fullscreen without occupying another space.
#
# - Linux/BSD exclusive actions:
#
# - CopySelection
# Copy from the selection buffer.
# - PasteSelection
# Paste from the selection buffer.
#
# - `command`: Fork and execute a specified command plus arguments
#
# The `command` field must be a map containing a `program` string and an
# `args` array of command line parameter strings. For example:
# `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# And optionally:
#
# - `mods`: Key modifiers to filter binding actions
#
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this:
# `mods: Control|Shift`.
# Whitespace and capitalization are relevant and must match the example.
#
# - `mode`: Indicate a binding for only specific terminal reported modes
#
# This is mainly used to send applications the correct escape sequences
# when in different modes.
#
# - AppCursor
# - AppKeypad
# - Alt
# - Vi
#
# A `~` operator can be used before a mode to apply the binding whenever
# the mode is *not* active, e.g. `~Alt`.
#
# Bindings are always filled by default, but will be replaced when a new
# binding with the same triggers is defined. To unset a default binding, it can
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
# a no-op if you do not wish to receive input characters for that binding.
#
# If the same trigger is assigned to multiple actions, all of them are executed
# in the order they were defined in.
#key_bindings:
#- { key: Paste, action: Paste }
#- { key: Copy, action: Copy }
#- { key: L, mods: Control, action: ClearLogNotice }
#- { key: L, mods: Control, mode: ~Vi, chars: "\x0c" }
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, }
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, }
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
# Vi Mode
#- { key: Space, mods: Shift|Control, mode: Vi, action: ScrollToBottom }
#- { key: Space, mods: Shift|Control, action: ToggleViMode }
#- { key: Escape, mode: Vi, action: ClearSelection }
#- { key: I, mode: Vi, action: ScrollToBottom }
#- { key: I, mode: Vi, action: ToggleViMode }
#- { key: C, mods: Control, mode: Vi, action: ToggleViMode }
#- { key: Y, mods: Control, mode: Vi, action: ScrollLineUp }
#- { key: E, mods: Control, mode: Vi, action: ScrollLineDown }
#- { key: G, mode: Vi, action: ScrollToTop }
#- { key: G, mods: Shift, mode: Vi, action: ScrollToBottom }
#- { key: B, mods: Control, mode: Vi, action: ScrollPageUp }
#- { key: F, mods: Control, mode: Vi, action: ScrollPageDown }
#- { key: U, mods: Control, mode: Vi, action: ScrollHalfPageUp }
#- { key: D, mods: Control, mode: Vi, action: ScrollHalfPageDown }
#- { key: Y, mode: Vi, action: Copy }
#- { key: Y, mode: Vi, action: ClearSelection }
#- { key: Copy, mode: Vi, action: ClearSelection }
#- { key: V, mode: Vi, action: ToggleNormalSelection }
#- { key: V, mods: Shift, mode: Vi, action: ToggleLineSelection }
#- { key: V, mods: Control, mode: Vi, action: ToggleBlockSelection }
#- { key: V, mods: Alt, mode: Vi, action: ToggleSemanticSelection }
#- { key: Return, mode: Vi, action: Open }
#- { key: K, mode: Vi, action: Up }
#- { key: J, mode: Vi, action: Down }
#- { key: H, mode: Vi, action: Left }
#- { key: L, mode: Vi, action: Right }
#- { key: Up, mode: Vi, action: Up }
#- { key: Down, mode: Vi, action: Down }
#- { key: Left, mode: Vi, action: Left }
#- { key: Right, mode: Vi, action: Right }
#- { key: Key0, mode: Vi, action: First }
#- { key: Key4, mods: Shift, mode: Vi, action: Last }
#- { key: Key6, mods: Shift, mode: Vi, action: FirstOccupied }
#- { key: H, mods: Shift, mode: Vi, action: High }
#- { key: M, mods: Shift, mode: Vi, action: Middle }
#- { key: L, mods: Shift, mode: Vi, action: Low }
#- { key: B, mode: Vi, action: SemanticLeft }
#- { key: W, mode: Vi, action: SemanticRight }
#- { key: E, mode: Vi, action: SemanticRightEnd }
#- { key: B, mods: Shift, mode: Vi, action: WordLeft }
#- { key: W, mods: Shift, mode: Vi, action: WordRight }
#- { key: E, mods: Shift, mode: Vi, action: WordRightEnd }
#- { key: Key5, mods: Shift, mode: Vi, action: Bracket }
#- { key: Slash, mode: Vi, action: SearchForward }
#- { key: Slash, mods: Shift, mode: Vi, action: SearchBackward }
#- { key: N, mode: Vi, action: SearchNext }
#- { key: N, mods: Shift, mode: Vi, action: SearchPrevious }
# (Windows, Linux, and BSD only)
#- { key: V, mods: Control|Shift, action: Paste }
#- { key: C, mods: Control|Shift, action: Copy }
#- { key: F, mods: Control|Shift, action: SearchForward }
#- { key: B, mods: Control|Shift, action: SearchBackward }
#- { key: C, mods: Control|Shift, mode: Vi, action: ClearSelection }
#- { key: Insert, mods: Shift, action: PasteSelection }
#- { key: Key0, mods: Control, action: ResetFontSize }
#- { key: Equals, mods: Control, action: IncreaseFontSize }
#- { key: Plus, mods: Control, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
#- { key: Minus, mods: Control, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
# (Windows only)
#- { key: Return, mods: Alt, action: ToggleFullscreen }
# (macOS only)
#- { key: K, mods: Command, mode: ~Vi, chars: "\x0c" }
#- { key: Key0, mods: Command, action: ResetFontSize }
#- { key: Equals, mods: Command, action: IncreaseFontSize }
#- { key: Plus, mods: Command, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
#- { key: Minus, mods: Command, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
#- { key: K, mods: Command, action: ClearHistory }
#- { key: V, mods: Command, action: Paste }
#- { key: C, mods: Command, action: Copy }
#- { key: C, mods: Command, mode: Vi, action: ClearSelection }
#- { key: H, mods: Command, action: Hide }
#- { key: M, mods: Command, action: Minimize }
#- { key: Q, mods: Command, action: Quit }
#- { key: W, mods: Command, action: Quit }
#- { key: N, mods: Command, action: SpawnNewInstance }
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
#- { key: F, mods: Command, action: SearchForward }
#- { key: B, mods: Command, action: SearchBackward }
#debug:
# Display the time it takes to redraw each frame.
#render_timer: false
# Keep the log file after quitting Alacritty.
#persistent_logging: false
# Log level
#
# Values for `log_level`:
# - None
# - Error
# - Warn
# - Info
# - Debug
# - Trace
#log_level: Warn
# Print all received window events.
#print_events: false

View File

@@ -1,36 +0,0 @@
# github Alacritty Colors
# Default colors
[colors.primary]
background = '#ffffff'
foreground = '#24292f'
# Normal colors
[colors.normal]
black = '#24292e'
red = '#d73a49'
green = '#28a745'
yellow = '#dbab09'
blue = '#0366d6'
magenta = '#5a32a3'
cyan = '#0598bc'
white = '#6a737d'
# Bright colors
[colors.bright]
black = '#959da5'
red = '#cb2431'
green = '#22863a'
yellow = '#b08800'
blue = '#005cc5'
magenta = '#5a32a3'
cyan = '#3192aa'
white = '#d1d5da'
[[colors.indexed_colors]]
index = 16
color = '#d18616'
[[colors.indexed_colors]]
index = 17
color = '#cb2431'

View File

@@ -1,23 +0,0 @@
[colors.primary]
background = "#272822"
foreground = "#f8f8f2"
[colors.normal]
black = "#272822"
red = "#f92672"
green = "#a6e22e"
yellow = "#f4bf75"
blue = "#66d9ef"
magenta = "#ae81ff"
cyan = "#a1efe4"
white = "#f8f8f2"
[colors.bright]
black = "#75715e"
red = "#f92672"
green = "#a6e22e"
yellow = "#f4bf75"
blue = "#66d9ef"
magenta = "#ae81ff"
cyan = "#a1efe4"
white = "#f9f8f5"

View File

@@ -2,4 +2,4 @@
retry_files_enabled = False
nocows = 1
roles_path = ./ansible_roles
interpreter_python = "auto_silent"
library = ./ansible_roles/firefox/library

1
ansible_roles/firefox Submodule

Submodule ansible_roles/firefox added at fe50549acc

View File

@@ -1,4 +0,0 @@
[Desktop Entry]
Type=Application
Name=Firefox
Exec=firefox-default --new-tab %u

View File

@@ -2,33 +2,27 @@
BindsTo=windowmanager.target
After=windowmanager.target
Wants=blueman.service
Wants=dpms.service
Wants=dunst.service
{% for profile, config in (user.firefox_profiles|default({})).items() %}
{% if config.bigger_font|default(false) is sameas false %}
Wants=element.service
{% for profile in (user.firefox_profiles|default({})).keys() %}
Wants=firefox@{{ profile }}.service
{% endif %}
{% endfor %}
{% for profile, config in (user.firefox_profiles|default({})).items() %}
{% if config.bigger_font|default(false) is sameas true %}
Wants=firefox-gtk-override-bigger-font@{{ profile }}.service
{% endif %}
{% endfor %}
Wants=gpg-agent.service
Wants=gnome-keyring.service
Wants=keepassxc.service
Wants=keepassx.service
Wants=keyboard.service
Wants=laptop-lid.service
Wants=nextcloud.service
Wants=nm-applet.service
Wants=pasystray.service
Wants=redshift.service
Wants=restic.timer
Wants=screencfg.service
Wants=spotify.service
Wants=steam.service
Wants=touchpad.service
Wants=xresources.service
Wants=yubikey-touch-detector.service
Wants=kdeconnect.service
Wants=color-theme-dark.service
Wants=workstation-mgr.service
Wants=screencfg.service

View File

@@ -3,6 +3,6 @@ BindsTo=autostart.target
After=windowmanager.target
[Service]
ExecStart=/usr/bin/env kdeconnect-indicator
ExecStart=/usr/bin/env blueman-applet
PassEnvironment=DISPLAY
Restart=always

View File

@@ -5,5 +5,6 @@ After=windowmanager.target
[Service]
Type=oneshot
ExecStart=/usr/bin/env xset s off
ExecStart=/usr/bin/env xset dpms 0 0 0
ExecStart=/usr/bin/env xset dpms 0 0 300
PassEnvironment=DISPLAY
Restart=always

View File

@@ -0,0 +1,11 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
After=i3.service
ConditionPathExists=%h/.var/run/features/element
[Service]
ExecStart=/usr/bin/env element-desktop
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,9 +0,0 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
[Service]
ExecStart=/usr/bin/env firefox --profile %h/.mozilla/firefox/profile-%i
PassEnvironment=DISPLAY
Environment=XDG_CONFIG_HOME=%h/.config/gtk-3.0-overrides/bigger-font/
Restart=always

View File

@@ -3,6 +3,6 @@ BindsTo=autostart.target
After=windowmanager.target
[Service]
ExecStart=/usr/bin/env firefox --profile %h/.mozilla/firefox/profile-%i
ExecStart=/usr/bin/env firefox --setDefaultBrowser -P %i
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,11 +1,10 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
ConditionPathExists=%t/features/gpg_agent
ConditionPathExists=%h/.var/run/features/gpg_agent
[Service]
Type=forking
ExecStart=/usr/bin/env gpg-agent --daemon
PassEnvironment=DISPLAY GNUPGHOME
ExecStart=/usr/bin/env gpg-agent --homedir %h/.gnupg --no-detach --daemon
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,6 +1,6 @@
[Service]
Type=simple
ExecStart=/usr/bin/env i3 --config %h/.config/i3/config
ExecStart=/usr/bin/env i3 --config %h/.i3/config
PassEnvironment=DISPLAY
Restart=no

View File

@@ -0,0 +1,9 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
ConditionPathExists=%h/.var/run/features/keepassx
[Service]
ExecStart=/usr/bin/env keepassx --keyfile %h/.secret/main.key %h/.secret/main.kdbx
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,9 +0,0 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
ConditionPathExists=%t/features/keepassxc
[Service]
ExecStart=/usr/bin/env keepassxc --keyfile %h/.secrets/main.keyx %h/.secrets/main.kdbx
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,10 +1,10 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
ConditionPathExists=%t/features/machine_is_laptop
ConditionPathExists=%h/.var/run/features/machine_is_laptop
[Service]
Type=oneshot
ExecStart=/usr/bin/env bash -c 'grep "^LID.*enabled" /proc/acpi/wakeup && echo " LID" | sudo tee /proc/acpi/wakeup || true'
ExecStart=/usr/bin/env bash -c 'grep "^${ACPI_LID_NAME}.*enabled" /proc/acpi/wakeup && echo " ${ACPI_LID_NAME}" | sudo tee /proc/acpi/wakeup'
RemainAfterExit=true
PassEnvironment=DISPLAY

View File

@@ -1,5 +0,0 @@
[Service]
Type=simple
ExecStart=%h/bin/mousespam
RemainAfterExit=True
PassEnvironment=DISPLAY

View File

@@ -3,7 +3,7 @@ BindsTo=autostart.target
After=windowmanager.target
After=gnome-keyring.service
ConditionPathExists=%t/features/nextcloud
ConditionPathExists=%h/.var/run/features/nextcloud
[Service]
ExecStart=/usr/bin/env nextcloud --background

View File

@@ -3,7 +3,6 @@ BindsTo=autostart.target
After=windowmanager.target
[Service]
ExecStartPre=/usr/bin/env redshift-gtk -x
ExecStart=/usr/bin/env redshift-gtk -c %h/.config/redshift.conf
PassEnvironment=DISPLAY
Restart=always

View File

@@ -0,0 +1,8 @@
[Unit]
ConditionPathExists=%h/.var/run/features/restic_backup
[Service]
Type=oneshot
ExecStart=%h/bin/restic-backup
RemainAfterExit=true
PassEnvironment=DISPLAY

View File

@@ -0,0 +1,6 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
[Timer]
OnCalendar=Mon..Fri 12:00:00

View File

@@ -3,6 +3,11 @@ BindsTo=autostart.target
After=windowmanager.target
[Service]
Type=simple
ExecStart=/usr/bin/screencfg watch --best
Restart=always
Type=oneshot
# systemd.service(5):
# > The command to execute may contain spaces, but control characters are not
# > allowed.
ExecStart=/usr/bin/env screencfg "%h/.screencfg/%H/default.yml"
RemainAfterExit=true
PassEnvironment=DISPLAY

View File

@@ -3,10 +3,9 @@ BindsTo=autostart.target
After=windowmanager.target
After=i3.service
ConditionPathExists=%t/features/steam
ConditionPathExists=%h/.var/run/features/steam
[Service]
# `-system-composer`: https://github.com/ValveSoftware/steam-for-linux/issues/10806
ExecStart=/usr/bin/env steam -system-composer
ExecStart=/usr/bin/env steam
PassEnvironment=DISPLAY
Restart=always

View File

@@ -1,7 +1,7 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
ConditionPathExists=%t/features/machine_is_laptop
ConditionPathExists=%h/.var/run/features/machine_is_laptop
[Service]
Type=oneshot

View File

@@ -1,8 +0,0 @@
[Unit]
BindsTo=autostart.target
After=windowmanager.target
[Service]
Type=simple
ExecStart=/usr/bin/workstation-mgr serve
Restart=always

View File

@@ -4,6 +4,6 @@ After=windowmanager.target
[Service]
Type=oneshot
ExecStart=/usr/bin/env xrdb -merge -I%h %h/.config/Xresources
ExecStart=/usr/bin/env xrdb -merge -I%h %h/.Xresources
RemainAfterExit=true
PassEnvironment=DISPLAY

View File

@@ -1,9 +1,6 @@
[Unit]
BindsTo=autostart.target
PartOf=gpg-agent.service
After=windowmanager.target
After=gpg-agent.service
ConditionPathExists=%t/features/gpg_agent
[Service]
ExecStart=/usr/bin/env yubikey-touch-detector -libnotify

9
bin/check Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -o errexit
cd ~/projects/personal/time-tracking/
source venv/bin/activate
source ~/.attendance_env
./call.py "${@}"

25
bin/dunstctl Executable file
View File

@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -o nounset
_logfile="$LOGDIR/dunstctl.log"
log() {
printf '[%s] %s\n' "$(date -uIseconds)" "$*" >> "$_logfile"
}
case "$1" in
enable)
log "Enabling dunst"
systemctl --user --no-block kill --signal SIGUSR2 dunst
;;
disable)
log "Disabling dunst"
systemctl --user --no-block kill --signal SIGUSR1 dunst
;;
*)
>&2 printf 'Unknown command\n'
exit 1
esac

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
exec /usr/bin/firefox --profile "$HOME/.mozilla/firefox/profile-default" "${@}"

23
bin/fuck-lxc Executable file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
set -x
vagrant destroy -f
killall vagrant
killall -9 vagrant
pgrep -fa lxc | grep -v fuck-lxc | awk '{print $1}' | xargs sudo kill -9
sudo lxc-ls -1 | xargs -l1 sudo lxc-stop --kill --name ; sudo lxc-ls -1 | xargs -l1 sudo lxc-destroy --name
pgrep -fa lxc | grep -v fuck-lxc | awk '{print $1}' | xargs sudo kill -9
rm -rf .vagrant
sudo systemctl restart nfs-kernel-server
sudo systemctl restart lxc\*
sudo apt-get install --reinstall lxc
sudo systemctl restart nfs-kernel-server
sudo systemctl restart lxc\*

15
bin/git-sm-commit Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -o nounset
submodule_count=$(git diff --staged --submodule=log | grep -c '^Submodule')
if (( $submodule_count == 1 )) ; then
msg="Update submodule $(git diff --staged --submodule=log | grep '^Submodule' | cut -d ' ' -f 2)"
else
msg="Update submodules"
fi
git commit --edit --no-status \
--message="$msg" \
--message "$(git diff --staged --color=never --submodule=log | sed 's/^S/\nS/' | sed 's/^Submodule /* /' | sed 's/ >/ */')"

8
bin/git-worktree-rm Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -o nounset
rm -r "${1}"
cd ./.gitdir
git worktree remove "${1}"
git branch -D "${1}"

View File

@@ -43,7 +43,7 @@ pandoc \
--variable papersize=a4 \
--variable date=$(date --iso-8601=date) \
--variable fontsize=12pt \
--variable fontfamily=libertinus \
--variable fontfamily=libertine \
--variable familydefault=sfdefault \
--variable documentclass=scrartcl \
--variable fontfamilyoptions= \

View File

@@ -1,2 +0,0 @@
#!/usr/bin/env bash
systemctl --no-pager --user status mousespam && systemctl --no-pager --user stop mousespam || systemctl --no-pager --user start mousespam

94
bin/mypass Executable file
View File

@@ -0,0 +1,94 @@
#!/usr/bin/env python3
import sys
import subprocess
import yaml
PASS = '/usr/bin/pass'
def run(args):
return(subprocess.run(
args,
stdin=sys.stdin,
stdout=sys.stdout,
stderr=sys.stderr).returncode)
def get_stdout(args):
return(subprocess.run(
args,
stdout=subprocess.PIPE).stdout)
def extract_from_dict(d, k, last=None):
if '.' in k:
k1, k2 = k.split('.', 1)
try:
d1 = d[k1]
return extract_from_dict(d1, k2, last=k1)
except KeyError:
print("\"{}\" was not found in the data".format(k))
sys.exit(3)
else:
if not isinstance(d, dict):
print("element \"{}\" is not a dictionary".format(last))
sys.exit(3)
try:
return d[k]
except KeyError:
print("\"{}\" was not found in the data".format(k))
sys.exit(3)
def cmd_get(*args):
if len(args) == 1:
print(get_stdout(['pass', 'show', args[0]]).split(b'\n')[0].decode())
return 0
if len(args) < 2:
print("what do you want to get?")
return 1
# get the pass output
out = get_stdout(['pass', 'show', args[0]])
try:
data = list(yaml.safe_load_all(out))[-1]
except yaml.scanner.ScannerError as e:
print("invalid YAML data: {}".format(str(e)))
return 2
except IndexError:
print("invalid YAML data: no YAML document found")
return 2
if not isinstance(data, dict):
print("invalid YAML data, not a dict")
return 2
for element in args[1:]:
keydata = extract_from_dict(data, element)
if isinstance(keydata, list) or isinstance(keydata, dict):
print(yaml.safe_dump(keydata, default_flow_style=False).strip())
else:
print(keydata)
cmds = ['get']
git_push_commands = ['insert', 'edit', 'generate', 'rm', 'mv', 'cp']
def run_pass(argv):
return run([PASS] + argv[1:])
def just_call_pass(argv):
sys.exit(run_pass(argv))
if len(sys.argv) == 1:
just_call_pass(sys.argv)
elif sys.argv[1] not in cmds:
if sys.argv[1] not in git_push_commands:
just_call_pass(sys.argv)
else:
e = run_pass(sys.argv)
if e == 0:
print("Pushing to remote repository...")
run([PASS, 'git', 'push'])
print("Done")
sys.exit(e)
else:
sys.exit(globals()['cmd_' + sys.argv[1]](*sys.argv[2:]))

View File

@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import sys
import os.path
hash = {
'A': 'Alpha',
@@ -44,45 +43,6 @@ hash = {
'.': 'Stop',
}
de = {
'A': 'Anton',
'Ä': 'Ärger',
'B': 'Berta',
'C': 'Cäsar',
'D': 'Dora',
'E': 'Emil',
'F': 'Friedrich',
'G': 'Gustav',
'H': 'Heinrich',
'I': 'Ida',
'J': 'Julius',
'K': 'Kaufmann',
'L': 'Ludwig',
'M': 'Martha',
'N': 'Nordpol',
'O': 'Otto',
'Ö': 'Ökonom',
'P': 'Paula',
'Q': 'Quelle',
'R': 'Richard',
'S': 'Samuel',
'ß': 'Eszett',
'T': 'Theodor',
'U': 'Ulrich',
'Ü': 'Übermut',
'V': 'Viktor',
'W': 'Wilhelm',
'X': 'Xanthippe',
'Y': 'Ypsilon',
'Z': 'Zacharias',
'-': 'Strich',
'.': 'Punkt',
}
if os.path.basename(sys.argv[0]) == 'natode':
hash = de
if len(sys.argv) < 2 or sys.argv[1] == '-':
text = [line.strip() for line in sys.stdin.readlines()]
else:

View File

@@ -1 +0,0 @@
nato

View File

@@ -1,2 +0,0 @@
#!/usr/bin/env sh
pacman -Qtdq | xargs --open-tty --no-run-if-empty sudo pacman -Rns

View File

@@ -1,14 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
if [[ ! -e "${PASSWORD_STORE_DIR}" ]] ; then
printf '%s\n' 'This is the first time running pass, initializting repository ...'
git clone ssh://git@code.hkoerber.de:2222/hannes/passwordstore.git "${PASSWORD_STORE_DIR}"
printf '%s\n' 'Done'
fi
command -p pass "${@}"

14
bin/pf
View File

@@ -1,14 +0,0 @@
#!/usr/bin/env python3
import sys
import json
import yaml
import subprocess
jqexpression = sys.argv[1]
jqprocess = subprocess.Popen(["jq", "-r", jqexpression], stdin=subprocess.PIPE, text=True)
document = [d for d in yaml.safe_load_all(sys.stdin)][-1]
json.dump(document, jqprocess.stdin)

3
bin/qr
View File

@@ -1,3 +0,0 @@
#!/usr/bin/env bash
qrencode "$*" -o - | imv -

62
bin/screencfg Executable file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env python3
import sys
import subprocess
import time
import argparse
import yaml
XRANDR = 'xrandr'
def run(cmd):
print('>>> ' + ' '.join(cmd))
start = time.time()
ret = subprocess.run(
cmd,
stdout=sys.stdout,
stderr=sys.stderr)
end = time.time()
print("exit code: {}".format(ret.returncode))
print("exec time: {}".format(end - start))
def fail(msg, code=1):
print(msg)
sys.exit(code)
parser = argparse.ArgumentParser()
parser.add_argument('config')
args = parser.parse_args()
config_path = args.config
try:
config = yaml.safe_load(open(config_path))
except FileNotFoundError:
fail("File {0} not found".format(config_path))
# reset
for output in config['outputs']:
if config.get('reset') and output.get('reset'):
run([XRANDR, '--output', output['name'], '--off'])
run([XRANDR, '--delmode', output['name'], output['opts']['mode']])
run([XRANDR, '--addmode', output['name'], output['opts']['mode']])
run([XRANDR, '--output', output['name'], '--mode', output['opts']['mode']])
cmd = [XRANDR]
for output in config['outputs']:
cmd.extend(['--output', output['name']])
if output.get('disable'):
cmd.append('--off')
else:
if output.get('primary', False):
cmd.append("--primary")
# cmd.append('--auto')
for k, v in output['opts'].items():
cmd.extend(['--{}'.format(k), str(v)])
for k,v in output.get('set', {}).items():
cmd.extend(['--set', k, v])
run(cmd)
run(['i3-msg', 'restart'])
run(['systemctl', '--user', 'restart', 'keyboard'])

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -x
apply() {
local mode="${1}"
case "${mode}" in
dark)
theme=monokai
;;
light)
theme=github_light
;;
esac
sed -i "s#themes/.*\.toml#themes/${theme}.toml#" "${XDG_CONFIG_HOME}/alacritty/config.toml"
sed -i "s#theme = .*\$#theme = \"${theme}\"#" "${XDG_CONFIG_HOME}/helix/config.toml"
pkill -SIGUSR1 helix
printf '%s' "${mode}" > "${XDG_RUNTIME_DIR}"/color_mode
}
case "${1:-}" in
dark)
apply dark
;;
light)
apply light
;;
*)
exit 1
;;
esac

View File

@@ -1,24 +1,24 @@
#!/usr/bin/env bash
# Stolen from https://devops.stackexchange.com/a/8984 and adapted to my use case
if (( $# == 0 )) ; then
if [[ -z "$@" ]]; then
echo "Missing file input arguments"
exit 1
fi
for FILE in "$@"
do
RESOURCE=$(sed -n 's/^resource "\([^"]*\)" "\([^"]*\)".*/-target=\1.\2 /gp' "$FILE")
MODULE=$(sed -n 's/^module "\([^"]*\)".*/-target=module.\1 /gp' "$FILE")
RESOURCE=$(sed -n 's/^resource "\([^"]*\)" "\([^"]*\)".*/-target=\1.\2 /gp' $FILE)
MODULE=$(sed -n 's/^module "\([^"]*\)".*/-target=module.\1 /gp' $FILE)
if [[ -z "$RESOURCE" ]] && [[ -z "$MODULE" ]]; then
echo "Cannot detect terraform resource and module in $FILE" >&2
echo "Cannot detect terraform resource and module in $FILE"
exit 1
fi
if [[ -n "$RESOURCE" ]]; then
if [[ ! -z "$RESOURCE" ]]; then
echo -e $"$RESOURCE"
fi
if [[ -n "$MODULE" ]]; then
if [[ ! -z "$MODULE" ]]; then
echo -e $"$MODULE"
fi
done

View File

@@ -1,4 +0,0 @@
#!/usr/bin/env python3
import sys, yaml, json
json.dump([d for d in yaml.safe_load_all(sys.stdin)][-1], sys.stdout, indent=4)

View File

@@ -1,6 +0,0 @@
[build]
rustc-wrapper = "sccache"
[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/clang"
rustflags = ["-Clink-arg=--ld-path=/usr/bin/wild"]

1
contrib/vim-plug Submodule

Submodule contrib/vim-plug added at c3b6b7c297

View File

@@ -9,12 +9,11 @@ apps = yaml.safe_load(open(package_file, 'r'))
missing_config = {}
for appname, appconfig in apps.items():
for appname, appconfig in apps['packages']['list'].items():
for distro, packagelist in appconfig.items():
if len(packagelist) == 0:
if distro not in missing_config.keys():
missing_config[distro] = []
missing_config[distro].append(appname)
if missing_config:
print(yaml.dump(missing_config), end="")
print(yaml.dump(missing_config))

View File

@@ -1,117 +1,73 @@
empty_directories:
- name: .i3
- name: .gnupg
mode: '0700'
- name: .config/nvim
- name: .config/rofi
- name: .config/gtk-3.0
- name: .config/gtk-3.0-overrides
- name: .config/gtk-3.0-overrides/bigger-font/
- name: .config/gtk-3.0-overrides/bigger-font/gtk-3.0
- name: .config/qt5ct
- name: .config/i3status-rust
- name: .config/i3status-rust/icons
- name: .config/i3status-rust/themes
- name: .config/helix
- name: .config/git
- name: .config/tmux
- name: .config/i3
- name: .config/zsh
- name: .config/alacritty
- name: .local/state/gnupg/
mode: '0700'
- name: .local/state/cargo/
dotfiles:
- from: git/gitconfig
to: .config/git/config
to: .gitconfig
template: true
- from: gnupg/dirmngr.conf
to: .local/state/gnupg/dirmngr.conf
- from: gnupg/scdaemon.conf
to: .local/state/gnupg/scdaemon.conf
to: .gnupg/dirmngr.conf
- from: gnupg/gpg-agent.conf
to: .local/state/gnupg/gpg-agent.conf
to: .gnupg/gpg-agent.conf
template: true
- from: gnupg/gpg.conf
to: .local/state/gnupg/gpg.conf
to: .gnupg/gpg.conf
template: true
- from: i3/config
to: .config/i3/config
to: .i3/config
template: true
- from: i3/i3status-rust/config.toml
to: .config/i3status-rust/config.toml
- from: i3/i3status.conf
to: .i3/i3status.conf
template: true
- from: i3/i3status-rust/themes/native.toml
to: .config/i3status-rust/themes/native.toml
- from: i3/i3status-rust/icons/awesome.toml
to: .config/i3status-rust/icons/awesome.toml
- from: i3/scripts
to: .config/i3/scripts
dir: true
to: .i3/scripts
- from: tmux/tmux.conf
to: .config/tmux/tmux.conf
to: .tmux.conf
- from: vim/vimrc
to: .config/nvim/init.vim
- from: vim/vimrc
to: .vimrc
- from: x/Xresources
to: .config/Xresources
to: .Xresources
template: true
- from: x/xinitrc
to: .config/xinitrc
to: .xinitrc
- from: zsh/zprofile
to: .config/zsh/.zprofile
to: .zprofile
template: true
- from: zsh/zshrc
to: .config/zsh/.zshrc
to: .zshrc
template: true
- from: zsh/zshenv
to: .zshenv
- from: zsh/zshrc.d
to: .zshrc.d
- from: dunst/dunstrc
to: .config/dunstrc
template: true
- from: redshift/redshift.conf
to: .config/redshift.conf
- from: vscodium/product.json
to: .config/VSCodium/product.json
- from: vscodium/settings.json
to: .config/VSCodium/User/settings.json
- from: vscodium/keybindings.json
to: .config/VSCodium/User/keybindings.json
- from: alacritty/alacritty.toml
to: .config/alacritty/config.toml
- from: vscode/settings.json
to: .config/Code/User/settings.json
- from: vscode/keybindings.json
to: .config/Code/User/keybindings.json
- from: alacritty/alacritty.yml
to: .config/alacritty.yml
template: true
- from: alacritty/themes
to: .config/alacritty/themes
dir: true
- from: rofi/config
to: .config/rofi/config
- from: gtk/gtk-3.0.ini
to: .config/gtk-3.0/settings.ini
template: true
- from: gtk/gtk-3.0-bigger-font.ini
to: .config/gtk-3.0-overrides/bigger-font/gtk-3.0/settings.ini
template: true
- from: gtk/gtkrc-2.0
to: .config/gtkrc-2.0
to: .gtkrc-2.0
template: true
- from: qt/qt5ct.conf
to: .config/qt5ct/qt5ct.conf
- from: screencfg
to: .screencfg
- from: scripts
to: scripts
dir: true
- from: helix/config.toml
to: .config/helix/config.toml
- from: helix/languages.toml
to: .config/helix/languages.toml
- from: screencfg/screencfg.toml
to: .config/screencfg.toml
- from: cargo/config.toml
to: .local/state/cargo/config.toml
- from: applications
to: .local/share/applications
dir: true
dotfiles_remove:
- .gitconfig
- .vimrc
- .config/nvim/init.vim
- .tmux.conf
- .i3
- .gtkrc-2.0
- .opt
- .optbin
- .usr
- .var
- .screenrc
- .zshrc.d

View File

@@ -1,34 +0,0 @@
cpu:
amd:
- amd-ucode
intel:
- intel-ucode
gpu:
amd:
- mesa
- mesa-utils
- lib32-mesa
- xf86-video-amdgpu
- vulkan-radeon
- lib32-vulkan-radeon
- libva-mesa-driver
- lib32-libva-mesa-driver
- mesa-vdpau
- lib32-mesa-vdpau
- vulkan-headers
- vulkan-tools
nvidia:
- mesa
- mesa-utils
- lib32-mesa
- vulkan-nouveau
- lib32-vulkan-nouveau
- vulkan-headers
- vulkan-tools
intel:
- mesa
- mesa-utils
- lib32-mesa
- vulkan-intel
- lib32-vulkan-intel

View File

@@ -64,7 +64,7 @@
frame_width = 2
# Defines color of the frame around the notification window.
frame_color = "#ff964f"
frame_color = "#e16b40"
# Define a color for the separator.
# possible values are:
@@ -84,7 +84,7 @@
### Text ###
font = JetBrainsMono, Fontawesome {{ machine.font_size }}
font = DejaVu Sans {{ machine.font_size }}
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.

View File

@@ -2,6 +2,9 @@
name = Hannes Körber
email = {{ user.mail }}
useConfigOnly = true
{% if user.git_gpg_sign|bool %}
signingkey = {{ user.gpg_key.id }}
{% endif %}
[github]
user = hakoerber
[alias]
@@ -33,7 +36,7 @@
k = "!gitk --all"
serve = !git daemon --reuseaddr --verbose --base-path=. --export-all ./.git
serve = !git daemon --reuseaddr --verbose --base-path=. --export-all ./.git
last = "log -1 HEAD"
@@ -41,7 +44,7 @@
pushall = "!bash -c 'for r in $(git remote) ; do [[ "$r" != "upstream" ]] && { echo \"--- [$r] ---\" ; git push $r \"$@\" ; } ; done' -"
branch-clean = "!sh -c 'git branch --merged | grep -v -e master -e develop -e main -e '^*' | xargs --no-run-if-empty git branch -d'"
branch-clean = "!sh -c 'git branch --merged | grep -v -e master -e develop -e '^*' | xargs --no-run-if-empty git branch -d'"
brc = "!git branch-clean"
graph = log --graph --pretty=format:'%C(yellow)%h%Creset%C(bold red)% D%Creset %C(green)(%cr) %C(blue)%an<%ae>%Creset%n %C(bold white)%s%Creset' --all
@@ -68,18 +71,14 @@
fileMode = true
whitespace = "blank-at-eol,space-before-tab,blank-at-eof"
abbrev = 8
pager = delta
[interactive]
diffFilter = delta --color-only
[color]
ui = true
[column]
ui = auto
[push]
default = simple
autoSetupRemote = true
[merge]
conflictstyle = diff3
tool = vimdiff
[gc]
auto = 0
[advice]
@@ -89,7 +88,7 @@
commitBeforeMerge = false
detachedHead = false
[commit]
gpgSign = false
gpgSign = {{ user.git_gpg_sign|bool }}
cleanup = strip
status = true
[status]
@@ -106,6 +105,7 @@
autoStash = true
[diff]
submodule = log
mnemonicPrefix = true
renameLimit = 1199
[branch]
autoSetupMerge = true
@@ -118,25 +118,5 @@
[url "ssh://git@code.hkoerber.de:2222/"]
insteadOf = https://code.hkoerber.de/
# https://stackoverflow.com/a/71971739
[url "https://github.com/"]
insteadOf = "git@github.com:"
[url "git@github.com:"]
pushInsteadOf = "https://github.com/"
pushInsteadOf = "git@github.com:"
[init]
defaultBranch = main
[safe]
directory = /var/lib/dotfiles
directory = /var/lib/dotfiles/*
[includeIf "gitdir:/var/lib/dotfiles/.git"]
path = /var/lib/dotfiles/gitcfg
[delta]
navigate = true # use n and N to move between diff sections
# delta detects terminal colors automatically; set one of these to disable auto-detection
# dark = true
# light = true
[rerere]
enabled = true
defaultBranch = master

3
gitcfg
View File

@@ -1,3 +0,0 @@
[user]
email = hannes@hkoerber.de
name = Hannes Körber

View File

@@ -9,6 +9,3 @@ enable-ssh-support
{% endif %}
pinentry-program /usr/bin/pinentry-qt
extra-socket none
browser-socket none

View File

@@ -34,7 +34,12 @@ fixed-list-mode
no-mangle-dos-filenames
require-cross-certification
{% if not (distro == 'ubuntu' and ansible_distribution_version == '18.04') -%}
{# looks like the gpg version in that ubuntu release it too old and does not
{# contain the setting #}
# do not cache keys for symmetric encryption
no-symkey-cache
{% endif -%}
keyserver-options no-honor-keyserver-url no-auto-key-retrieve include-revoked

View File

@@ -1,2 +0,0 @@
# makes yubikey work more reliably
disable-ccid

View File

@@ -1,8 +0,0 @@
provider = "github"
token_command = "pass show github | ~/bin/yaml2json | jq -r '.personal_access_token.grm.value'"
root = "~/code/github.com"
worktree = true
force_ssh = true
[filters]
owner = true

317
grm/personal_projects.toml Normal file
View File

@@ -0,0 +1,317 @@
[[trees]]
root = "~/projects"
[[trees.repos]]
name = "misc/rbackupd"
[[trees.repos.remotes]]
name = "github"
url = "git@github.com:hakoerber/rbackupd.git"
type = "ssh"
[[trees.repos]]
name = "misc/cobbler-kickstart"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/cobbler-kickstart.git"
type = "ssh"
[[trees.repos]]
name = "misc/postfix-grok-patterns"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/postfix-grok-patterns.git"
type = "ssh"
[[trees.repos.remotes]]
name = "upstream"
url = "https://github.com/whyscream/postfix-grok-patterns.git"
type = "https"
[[trees.repos]]
name = "misc/syncrepo"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/syncrepo.git"
type = "ssh"
[[trees.repos]]
name = "misc/pkgbuilds"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/pkgbuilds.git"
type = "ssh"
[[trees.repos]]
name = "misc/openvpn-helper"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/openvpn-helper.git"
type = "ssh"
[[trees.repos]]
name = "misc/wifiqr"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/wifi-qr.git"
type = "ssh"
[[trees.repos]]
name = "misc/checkconn"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/checkconn.git"
type = "ssh"
[[trees.repos]]
name = "misc/xftwidth"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/xftwidth.git"
type = "ssh"
[[trees.repos.remotes]]
name = "upstream"
url = "https://github.com/vixus0/xftwidth"
type = "https"
[[trees.repos]]
name = "x-hidecursor"
remotes = []
[[trees.repos]]
name = "git-repo-manager"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/git-repo-manager.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/git-repo-manager.git"
type = "ssh"
[[trees.repos]]
name = "talks"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/talks.git"
type = "ssh"
[[trees.repos]]
name = "container/openresty-oidc"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/container/openresty-oidc.git"
type = "ssh"
[[trees.repos]]
name = "container/acimaker"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/acimaker.git"
type = "ssh"
[[trees.repos.remotes]]
name = "private"
url = "git@code.sys.haktec.de:container/acimaker.git"
type = "ssh"
[[trees.repos]]
name = "container/drone-kaniko"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/container/drone-kaniko.git"
type = "ssh"
[[trees.repos.remotes]]
name = "upstream"
url = "https://github.com/banzaicloud/drone-kaniko"
type = "https"
[[trees.repos]]
name = "container/roundcube"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/container/roundcube.git"
type = "ssh"
[[trees.repos]]
name = "container/mycloud-homer"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/container/mycloud-homer.git"
type = "ssh"
[[trees.repos]]
name = "projects/misc/cobbler-kickstart"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/cobbler-kickstart.git"
type = "ssh"
[[trees.repos]]
name = "finance-auto-import"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/finance-auto-import.git"
type = "ssh"
[[trees.repos]]
name = "guitar_practice"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com/hakoerber/guitar-practice.git"
type = "ssh"
[[trees.repos]]
name = "picture-cleaner"
remotes = []
[[trees.repos]]
name = "mycloud"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/mycloud.git"
type = "ssh"
[[trees.repos]]
name = "resume"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/resume.git"
type = "ssh"
[[trees.repos]]
name = "lea-michael-hochzeit"
remotes = []
[[trees.repos]]
name = "builddoc"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/builddoc.git"
type = "ssh"
[[trees.repos]]
name = "blog"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/blog.hkoerber.de.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/blog.git"
type = "ssh"
[[trees.repos]]
name = "fizzbuzz"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/fizzbuzz.git"
type = "ssh"
[[trees.repos]]
name = "ggj/2018/the-lost-son"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com:niklas-heer/the-lost-son.git"
type = "ssh"
[[trees.repos]]
name = "ggj/2019-claim-your-world"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@github.com:theintroverts/claim-your-world.git"
type = "ssh"
[[trees.repos]]
name = "prometheus-restic-backblaze"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/prometheus-restic-backblaze.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/container/prometheus-restic-backblaze.git"
type = "ssh"
[[trees.repos]]
name = "dotfiles"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/dotfiles.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/dotfiles.git"
type = "ssh"
[[trees.repos]]
name = "packager"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/packager.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/packager.git"
type = "ssh"
[[trees.repos]]
name = "time-tracking"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/time-tracking.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hannes/time-tracking.git"
type = "ssh"
[[trees.repos]]
name = "aws-glacier-backup"
[[trees.repos.remotes]]
name = "github"
url = "ssh://git@github.com/hakoerber/aws-glacier-backup.git"
type = "ssh"
[[trees.repos.remotes]]
name = "origin"
url = "ssh://git@code.hkoerber.de:2222/hakoerber/aws-glacier-backup.git"
type = "ssh"

View File

@@ -1,15 +0,0 @@
[Settings]
gtk-theme-name=Breeze
gtk-icon-theme-name=breeze
gtk-font-name=DejaVu Sans {{ ((machine.font_size|int - 2)|float * 2.0) | round(0, 'floor') | int }}
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=0
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=1
gtk-menu-images=1
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintfull

View File

@@ -1,6 +1,6 @@
[Settings]
gtk-theme-name=Breeze
gtk-icon-theme-name=breeze
gtk-icon-theme-name=breeze-dark
gtk-font-name=DejaVu Sans {{ machine.font_size|int - 2 }}
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=0

View File

@@ -2,7 +2,7 @@
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
gtk-theme-name="Breeze"
gtk-icon-theme-name="breeze"
gtk-icon-theme-name="breeze-dark"
gtk-font-name="DejaVu Sans {{ machine.font_size| int - 2 }}"
gtk-cursor-theme-name="breeze_cursors"
gtk-cursor-theme-size=0

View File

@@ -1,39 +0,0 @@
theme = "monokai"
[editor]
idle-timeout = 0
completion-trigger-len = 2
[editor.statusline]
left = ["mode", "separator", "file-name", "file-modification-indicator"]
right = [
"spinner",
"spacer",
"diagnostics",
"separator",
"selections",
"separator",
"position",
"position-percentage",
"file-type",
]
mode.normal = "N"
mode.insert = "I"
mode.select = "S"
[editor.lsp]
display-inlay-hints = true
[editor.cursor-shape]
insert = "bar"
[editor.file-picker]
hidden = false
[editor.indent-guides]
render = true
[editor.soft-wrap]
enable = true

View File

@@ -1,15 +0,0 @@
[[language]]
name = "bash"
indent = { unit = " ", tab-width = 4 }
[language-server.pylsp.config.pylsp.plugins]
flake8 = { enabled = false }
[[language]]
name = "python"
indent = { unit = " ", tab-width = 4 }
[[language]]
name = "dockerfile"
indent = { unit = " ", tab-width = 4 }

View File

@@ -17,10 +17,10 @@
set $mod Mod4
# The default terminal
set $terminal "alacritty --config-file ~/.config/alacritty/config.toml"
set $calc "alacritty --config-file ~/.config/alacritty/config.toml -e $SHELL -i -c calc"
set $terminal "alacritty --config-file ~/.config/alacritty.yml"
set $calc "alacritty --config-file ~/.config/alacritty.yml -e $SHELL -i -c calc"
set $scriptdir ~/.config/i3/scripts
set $scriptdir ~/.i3/scripts
# Keys for the exit mode
set $key_lock l
@@ -64,8 +64,8 @@
set $up k
set $right l
set $splith v
set $splitv c
set $splith v
set $splitv c
set $split_toggle x
set $fullscreen f
@@ -95,6 +95,7 @@
set $screenshot o
################################################################################
### WORKSPACE ASSIGNMENTS ######################################################
################################################################################
@@ -110,7 +111,8 @@ workspace $workspace8 output {{ machine.screen.8 }}
workspace $workspace9 output {{ machine.screen.9 }}
workspace $workspace10 output {{ machine.screen.0 }}
assign [class="^KeePassXC$"] $workspace8
assign [class="^Keepassx$"] $workspace8
# See https://github.com/i3/i3/issues/2060
for_window [class="^Spotify$"] move to workspace $workspace9
@@ -118,8 +120,8 @@ assign [class="^Spotify$"] $workspace9
assign [class="^Google-chrome$"] $workspace7
assign [class="^Chromium$"] $workspace7
assign [class="^[Ss]team$"] $workspace5
for_window [class="^[Ss]team$"] move to workspace $workspace5
assign [class="^Steam"] $workspace5
for_window [class="^Steam$"] move to workspace $workspace5
assign [class="^dota2$"] $workspace10
assign [class="^Wine$"] $workspace10
@@ -204,19 +206,47 @@ assign [class="^Wine$"] $workspace10
### START APPLICATIONS #####################################################
bindsym $mod+d exec --no-startup-id rofi -show combi -combi-modi run -display-combi "run"
bindsym $mod+Return exec $terminal
bindsym $mod+d exec --no-startup-id ~/.i3/scripts/appmenu
bindsym $mod+Return exec $terminal
bindsym $mod+Shift+Return exec $calc
bindsym F1 exec --no-startup-id workstation-client power menu
bindsym F1 exec --no-startup-id ~/.i3/scripts/shutdown-menu
bindsym F2 exec --no-startup-id ~/.i3/scripts/screenmenu
bindsym $mod+F1 exec --no-startup-id workstation-client power lock
bindsym $mod+F1 exec --no-startup-id ~/.i3/scripts/i3exit lock
bindsym $mod+F2 exec --no-startup-id screencfg ~/.screencfg/{{ ansible_hostname }}/default.yml ; exec systemctl --user restart keyboard.service
{% for screencfg in machine.screencfgs -%}
bindsym $mod+{{ screencfg.key }} exec --no-startup-id screencfg ~/.screencfg/{{ ansible_hostname }}/{{ screencfg.name }}.yml ; exec systemctl --user restart keyboard.service
{% endfor -%}
bindsym $mod+F4 exec --no-startup-id ~/.i3/scripts/i3exit suspend
bindsym $mod+Home exec --no-startup-id ~/.i3/scripts/shutdown-menu
bindsym $mod+$screenshot exec --no-startup-id sh -c 'maim | xclip -selection clipboard -t image/png'
bindsym $mod+Shift+$screenshot exec --no-startup-id sh -c 'maim --select | xclip -selection clipboard -t image/png'
bindsym $mod+$pim_toggle exec --no-startup-id $scriptdir/swap-from-workspace $workspace10
bindsym $mod+Shift+v exec --no-startup-id redshift-toggle
# bindsym $mod+$pim_toggle \
# mark --add _source; \
# focus output eDP-1; \
# mark --add _origin; \
# workspace $workspace10; \
# mark --add _destination; \
# [con_mark="^_destination$"] swap container with mark "_source"; \
# [con_mark="^_source$"] focus; unmark _source; \
# [con_mark="^_origin$"] focus; unmark _origin; \
# [con_mark="^_destination$"] focus; unmark _destination; \
bindsym $mod+$pim_toggle \
unmark _destination; \
mark _source; \
workspace $workspace10; \
mark --add _destination; \
[con_mark="^_destination$"] swap container with mark "_source"; \
[con_mark="^_source$"] focus; \
unmark _source; \
[con_mark="^_destination$"] focus; \
unmark _destination;
################################################################################
### MODES ######################################################################
@@ -282,17 +312,17 @@ assign [class="^Wine$"] $workspace10
floating_minimum_size 0 x 0
floating_maximum_size 0 x 0
font pango:JetBrainsMono {{ machine.font_size }}
font pango:Inconsolata {{ machine.font_size }}
################################################################################
### COLOR SETTINGS #############################################################
################################################################################
# class border backgr. text indicator
client.focused #e5b567 #e5b567 #000000 #FF0000
client.focused_inactive #272822 #5f676a #ffffff #484e50
client.unfocused #1C1C1C #272822 #cccccc #292d2e
client.urgent #272822 #ff7777 #000000 #900000
client.focused #E16B40 #E16B40 #000000 #FF0000
client.focused_inactive #333333 #5f676a #ffffff #484e50
client.unfocused #333333 #202020 #cccccc #292d2e
client.urgent #2f343a #900000 #ffffff #900000
################################################################################
### APPLICATION SPECIFIC SETTINGS ##############################################
@@ -308,31 +338,33 @@ bindsym $mod+F9 exec --no-startup-id evolution
### SPECIAL KEYBINDS ###########################################################
################################################################################
bindsym XF86Sleep exec --no-startup-id workstation-client power lock
bindsym XF86Sleep exec --no-startup-id $scriptdir/i3exit suspend
bindsym XF86AudioMute exec --no-startup-id $scriptdir/pa-volume mute-toggle
bindsym XF86AudioRaiseVolume exec --no-startup-id $scriptdir/pa-volume set-vol +3
bindsym XF86AudioLowerVolume exec --no-startup-id $scriptdir/pa-volume set-vol -3
bindsym XF86AudioMute exec --no-startup-id workstation-client pulseaudio output toggle
bindsym XF86AudioRaiseVolume exec --no-startup-id workstation-client pulseaudio output inc
bindsym XF86AudioLowerVolume exec --no-startup-id workstation-client pulseaudio output dec
bindsym XF86AudioPlay exec $scriptdir/spotify-control toggle
bindsym XF86AudioNext exec $scriptdir/spotify-control next
bindsym XF86AudioPrev exec $scriptdir/spotify-control previous
bindsym XF86AudioPlay exec --no-startup-id workstation-client spotify toggle
bindsym XF86AudioNext exec --no-startup-id workstation-client spotify next
bindsym XF86AudioPrev exec --no-startup-id workstation-client spotify previous
# keys seemingly switched
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 8 ; exec --no-startup-id $scriptdir/update-status
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 8 ; exec --no-startup-id $scriptdir/update-status
bindsym XF86MonBrightnessUp exec --no-startup-id workstation-client brightness inc
bindsym XF86MonBrightnessDown exec --no-startup-id workstation-client brightness dec
bindsym $mod+m exec --no-startup-id workstation-client pulseaudio input toggle
bindsym $mod+space exec --no-startup-id workstation-client pulseaudio input toggle
bindsym KP_Enter exec --no-startup-id workstation-client pulseaudio input toggle
bindsym $mod+m exec --no-startup-id $scriptdir/pa-volume mute-toggle-mic
bindsym $mod+space exec --no-startup-id $scriptdir/pa-volume mute-toggle-mic
##############################################################################
### BARS #######################################################################
################################################################################
#
bar {
mode dock
position bottom
#tray_output HDMI3
tray_output primary
tray_padding 2
strip_workspace_numbers no
@@ -343,23 +375,24 @@ bar {
id bar-0
font pango:JetBrainsMono, FontAwesome {{ machine.font_size }}
font pango:Inconsolata, FontAwesome {{ machine.font_size }}
colors {
background #272822
statusline #ffffff
separator #555555
separator #444444
# separator #e16b40
focused_separator #e5b567
focused_background #272822
# focused_background #303030
# focused_separator #272822
# border bg text
focused_workspace #e5b567 #4f676a #ffffff
active_workspace #272822 #4f676a #ffffff
focused_workspace #e16b40 #272822 #ffffff
active_workspace #272822 #5f676a #ffffff
inactive_workspace #272822 #272822 #dddddd
urgent_workspace #272822 #ff7777 #272822
binding_mode #272822 #e5b567 #272822
urgent_workspace #D00000 #D00000 #272822
binding_mode #272822 #e16b40 #272822
}
status_command i3status-rs ~/.config/i3status-rust/config.toml
i3bar_command i3bar
status_command py3status --standalone --dbus-notify -c ~/.i3/i3status.conf
}

View File

@@ -1,112 +0,0 @@
icons_format = "{icon}"
[icons]
icons = "awesome"
[icons.overrides]
microphone = ""
volume = ""
bat = "\uf240"
music = "\uf1bc"
[theme]
theme = "native"
[theme.overrides]
warning_fg = "#000000"
warning_bg = "#F4Bf75"
critical_fg = "#000000"
critical_bg = "#F92672"
end_separator = ""
[[block]]
block = "music"
player = "spotify"
separator = " — "
format = " $icon {$combo $prev $play $next|-} "
[[block]]
block = "sound"
driver = "pulseaudio"
max_vol = 100
format = " $icon{ $volume.eng(w:2)|} "
[[block.click]]
button = "left"
cmd = "workstation-client pulseaudio output toggle"
update = true
[[block]]
block = "sound"
driver = "pulseaudio"
device_kind = "source"
format = " $icon "
[block.theme_overrides]
warning_fg = { link = "idle_fg" }
warning_bg = { link = "idle_bg" }
idle_fg = { link = "warning_fg" }
idle_bg = { link = "warning_bg" }
[[block.click]]
button = "left"
cmd = "workstation-client pulseaudio input toggle"
update = true
[[block]]
block = "net"
format = " $icon{ $signal_strength|}{ $ssid.str(max_width:10) | }"
[[block]]
block = "battery"
interval = 10
format = " $icon $percentage $time "
charging_format = " $icon $percentage "
missing_format = ""
[[block]]
block = "toggle"
format = "  $icon "
signal = 1
command_on = "workstation-client present toggle ; pkill -SIGRTMIN+1 i3status-rs"
command_off = "workstation-client present toggle ; pkill -SIGRTMIN+1 i3status-rs"
command_state = "[[ $(workstation-client present status) == on ]] && echo active"
[[block]]
block = "toggle"
format = "  $icon "
command_on = "workstation-client theme light"
command_off = "workstation-client theme dark"
command_state = "[[ $(workstation-client theme status) == light ]] && echo 1"
[[block]]
block = "toggle"
format = "  $icon "
command_on = "workstation-client redshift start"
command_off = "workstation-client redshift stop"
command_state = "[[ $(workstation-client redshift status) == active ]] && echo 1"
signal = 0
[[block]]
block = "toggle"
format = "  $icon "
command_on = "workstation-client spotify start"
command_off = "workstation-client spotify stop"
command_state = "[[ $(workstation-client spotify status) == active ]] && echo 1"
signal = 0
[[block]]
block = "custom"
json = true
command = "ping -n -q -w 2 -c 1 8.8.8.8 >/dev/null 2>/dev/null && printf '{\"text\":\"\",\"state\":\"Info\"}' || printf '{\"text\":\"\",\"state\":\"Critical\"}'"
[[block]]
block = "custom"
command = "workstation-client weather get"
# caching is handled by the workstation daemon
interval = 60
[[block]]
block = "time"
interval = 1
format = " $timestamp.datetime(f:'[CW %V] %a %d.%m.%Y %H:%M:%S', l:de_DE) "

View File

@@ -1,94 +0,0 @@
# FontAwesome 4: https://fontawesome.com/v4.7.0/cheatsheet/
backlight_empty = "\U0001f315"
backlight_full = "\U0001f311"
backlight_1 = "\U0001f314"
backlight_2 = "\U0001f314"
backlight_3 = "\U0001f314"
backlight_4 = "\U0001f314"
backlight_5 = "\U0001f313"
backlight_6 = "\U0001f313"
backlight_7 = "\U0001f313"
backlight_8 = "\U0001f313"
backlight_9 = "\U0001f313"
backlight_10 = "\U0001f312"
backlight_11 = "\U0001f312"
backlight_12 = "\U0001f312"
backlight_13 = "\U0001f312"
bat_charging = "\uf1e6" # fa-plug
bat_discharging = "\uf242" # fa-battery-half
bat_10 = "\uf244" # fa-battery-empty
bat_20 = "\uf243" # fa-battery-quarter
bat_30 = "\uf243" # fa-battery-quarter
bat_40 = "\uf243" # fa-battery-quarter
bat_50 = "\uf242" # fa-battery-half
bat_60 = "\uf242" # fa-battery-half
bat_70 = "\uf241" # fa-battery-three-quarters
bat_80 = "\uf241" # fa-battery-three-quarters
bat_90 = "\uf241" # fa-battery-three-quarters
bat_full = "\uf240" # fa-battery-full
bat_not_available = "\uf244" # fa-battery-empty
bell = "\uf0f3" # fa-bell
bell-slash = "\uf1f7" # fa-bell-slash-o
bluetooth = "\uf294" # fa-bluetooth-b
calendar = "\uf073" # fa-calendar
cogs = "\uf085" # fa-cogs
cpu = "\uf0e4" # fa-dashboard
cpu_boost_off = "\uf204" # fa-toggle-off
cpu_boost_on = "\uf205" # fa-toggle-on
disk_drive = "\uf0a0" # fa-hdd-o
docker = "\uf21a" # fa-ship
github = "\uf09b" # fa-github
gpu = "\uf26c" # fa-television
headphones = "\uf025" # fa-headphones
joystick = "\uf11b" # fa-gamepad
keyboard = "\uf11c" # fa-keyboard-o
mail = "\uf0e0" # fa-envelope
memory_mem = "\uf2db" # fa-microchip
memory_swap = "\uf0a0" # fa-hdd-o
mouse = "\uf245" # fa-mouse-pointer
music = "\uf001" # fa-music
music_next = "\uf061" # fa-arrow-right
music_pause = "\uf04c" # fa-pause
music_play = "\uf04b" # fa-play
music_prev = "\uf060" # fa-arrow-left
net_bridge = "\uf0e8" # fa-sitemap
net_down = "\u2b07"
net_loopback = "LO"
net_modem = "\uf095" # fa-phone
net_up = "\u2b06"
net_vpn = "\uf023" # fa-lock
net_wired = "\uf0ac" # fa-globe
net_wireless = "\uf1eb" # fa-wifi
notification = "\uf0a2" # fa-bell-o
phone = "\uf10b" # fa-mobile
phone_disconnected = "\U0001f4f5" # https://unicode-table.com/en/1F4F5/
ping = "\u21ba"
pomodoro = "\U0001f345"
pomodoro_break = "\uf0f4" # fa-coffee
pomodoro_paused = "\uf04c" # fa-pause
pomodoro_started = "\uf04b" # fa-play
pomodoro_stopped = "\uf04d" # fa-stop
resolution = "\uf096" # fa-square-o
tasks = "\uf0ae" # fa-tasks
thermometer = "\uf2c8" # fa-thermometer-3
time = "\uf017" # fa-clock-o
toggle_off = "\uf204" # fa-toggle-off
toggle_on = "\uf205" # fa-toggle-on
unknown = "\uf128" # fa-question
update = "\uf062" # fa-arrow-up
uptime = "\uf017" # fa-clock-o
volume_empty = "\uf026" # fa-volume-off
volume_full = "\uf028" # fa-volume-up
volume_half = "\uf027" # fa-volume-down
volume_muted = "\uf026 \uf00d"
microphone_empty = "\uf130" # fa-microphone
microphone_full = "\uf130" # fa-microphone
microphone_half = "\uf130" # fa-microphone
microphone_muted = "\uf131" # fa-microphone-slash
weather_clouds = "\uf0c2" # fa-cloud
weather_default = "\uf0c2" # fa-cloud
weather_rain = "\uf043" # fa-tint
weather_snow = "\uf2dc" # fa-snowflake-o
weather_sun = "\uf185" # fa-sun-o
weather_thunder = "\uf0e7" # fa-bolt
xrandr = "\uf26c" # fa-television

View File

@@ -1 +0,0 @@

123
i3/i3status.conf.j2 Normal file
View File

@@ -0,0 +1,123 @@
# i3status configuration file.
# see "man i3status" for documentation.
# It is important that this file is edited as UTF-8.
# The following line should contain a sharp s:
# ß
# If the above line is not correctly displayed, fix your editor first!
general {
interval = 1
# color = '#FFFFFF'
# color_good = '#00FF00'
# color_bad = '#FF0000'
# color_degraded = '#FFFF00'
color = '#FFFFFF'
color_good = '#FFFFFF'
color_bad = '#F92672'
color_degraded = '#F4Bf75'
}
order += spotify
{% if user.has_yubikey %}
order += "yubikey"
{% endif %}
order += "volume_status output"
order += "volume_status input"
order += "wifi"
order += "external_script presentation_mode"
order += "systemd redshift"
order += "systemd spotify"
order += online_status
order += "battery_level all"
order += "clock"
battery_level all {
battery_id = "all"
format = " {icon} {percent}% "
measurement_mode = "sys"
charging_character = ""
blocks = ""
notification = true
hide_when_full = false
hide_seconds = true
notify_low_level = true
threshold_full = 95
}
systemd redshift {
unit = "redshift.service"
user = true
format = "  "
on_click 1 = "exec $HOME/.i3/scripts/toggle-app redshift"
color_bad = '#F4Bf75'
color_degraded = '#F4Bf75'
}
systemd spotify {
unit = "spotify.service"
user = true
format = "  "
color_bad = '#F4Bf75'
color_degraded = '#F4Bf75'
}
yubikey {
format = '[  YubiKey[\?if=is_gpg ][\?if=is_u2f ] ]'
}
clock {
format = ["{DE}", "{NZ}", "{Cuba}", "{MX}", "{CZ}", "{NL}", "{VN}"]
format_time = "  {name} \[KW %V\] %a %d.%m.%Y %H:%M:%S "
}
wifi {
bitrate_bad = 0
bitrate_degraded = 0
format = "  {signal_percent} {ssid} |  down "
down_color = "good"
}
spotify {
format = "  {title} - {artist} "
format_down = "  off "
format_stopped = "  stopped "
cache_timeout = 1
color_offline = '#FFFFFF'
on_click 1 = "exec $HOME/.i3/scripts/spotify-control toggle"
on_click 3 = "exec $HOME/.i3/scripts/spotify-control next"
}
external_script presentation_mode {
format = " Present: {output} "
script_path = "$HOME/.i3/scripts/presentation-mode status"
strip_output = True
on_click 1 = "exec $HOME/.i3/scripts/presentation-mode toggle"
}
online_status {
icon_on = ""
icon_off = ""
format = " {icon} "
}
volume_status output {
cache_timeout = 10
format = "  {percentage}% "
format_muted = "  mute "
thresholds = []
command = "pactl"
color_muted = '#FFFFFF'
}
volume_status input {
cache_timeout = 10
format = "  active "
format_muted = "  mute "
thresholds = [(0, 'good'), (1, 'bad')]
command = "pactl"
color_muted = '#FFFFFF'
is_input = True
}

2
i3/scripts/appmenu Executable file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
rofi -show combi -combi-modi run -display-combi "run"

9
i3/scripts/bar-update Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
if [[ "$1" ]] ; then
modules="$1"
else
modules=all
fi
py3-cmd refresh "$modules"

103
i3/scripts/i3exit Executable file
View File

@@ -0,0 +1,103 @@
#!/bin/bash
### From http://www.archlinux.org/index.php/i3
_logfile="$LOGDIR/i3/i3exit.log"
LOCKSCREEN="$LIBDIR/lockscreen"
_fallback_color="000000"
touch "$_logfile"
log()
{
echo "$*"
echo "[$(date +%FT%T)] $*" >> "$_logfile"
}
lock()
{
set -x
playing=0
if [[ "$(playerctl -p spotify status)" == "Playing" ]] ; then
playing=1
fi
if (( $playing )) ; then
playerctl -p spotify pause
fi
if [[ -f "$LOCKSCREEN" ]] ; then
resized_lockscreen=$(mktemp)
convert "${LOCKSCREEN}" -resize "${MACHINE_RESOLUTION_X}x${MACHINE_RESOLUTION_Y}" "${resized_lockscreen}"
i3lock --nofork --show-failed-attempts --ignore-empty-password \
--image "${resized_lockscreen}"
rm "${resized_lockscreen}"
else
i3lock --nofork --show-failed-attempts --ignore-empty-password \
--color "$_fallback_color"
fi
if (( $playing )) ; then
playerctl -p spotify play
fi
}
screen_off() {
xset dpms force off
}
reset_screen() {
systemctl --user restart dpms.service
}
lock_and_screen_off() {
lock &
_pid=$!
dunstctl disable
screen_off
wait $_pid
dunstctl enable
reset_screen
}
signal="$1"
log "[I] Received signal \"$signal\"."
case "$signal" in
lock)
log "[I] Locking session."
lock_and_screen_off
;;
logout)
log "[I] Exiting i3."
i3-msg exit
;;
suspend)
log "[I] Suspending."
lock &
sleep 0.1
systemctl suspend
;;
hibernate)
log "[I] Hibernating."
sudo systemctl hibernate
;;
reboot)
log "[I] Rebooting."
systemctl reboot
;;
shutdown)
log "[I] Shutting down."
systemctl poweroff
;;
screen-off)
log "[I] Turning screen off."
screen_off
;;
*)
echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
log "[E] Signal \"$signal\" unknown. Aborting."
exit 2
esac
log "[I] Done."
exit 0

137
i3/scripts/pa-volume Executable file
View File

@@ -0,0 +1,137 @@
#!/bin/bash
# name of the sink. execute pactl list sinks to get a list
SINKNAME="$(pactl info | grep '^Default Sink:' | cut -d ' ' -f 3-)"
# name of the sink. execute pactl list sinks to get a list
SOURCENAME="$(pactl info | grep '^Default Source:' | cut -d ' ' -f 3-)"
#SINKNAME="alsa_output.usb-Logitech_Logitech_Wireless_Headset_88C626354D45-00.analog-stereo"
# this is the worst
SINK=$(( $(pactl list sinks | grep "Name: " | grep -n "${SINKNAME}"$ | grep -o "^[[:digit:]]*") -1))
SOURCE=$(( $(pactl list sources | grep "Name: " | grep -n "${SOURCENAME}"$ | grep -o "^[[:digit:]]*") -1))
getvol() {
echo $(pactl list sinks | grep "^[[:space:]]*Volume" | head -n $(( $SINK + 1 )) | tail -n 1 | grep -o "[[:digit:]]*%" | head -n 1 | cut -d "%" -f 1)
}
setvol() {
if [[ $1 =~ [+-][0-9]+ ]] ; then
oldvol="$(getvol)"
echo "oldvol $oldvol"
delta="$(echo "$1" | cut -c 2-)"
echo "delta $delta"
if [[ "$(echo "$1" | cut -c 1)" == "+" ]] ; then
echo "+"
newvol=$(( $oldvol + $delta ))
else
echo "-"
newvol=$(( $oldvol - $delta ))
echo $newvol
fi
if [[ $newvol -gt 100 ]]; then
echo "capping at 100 percent"
newvol=100
fi
if [[ $newvol -lt 0 ]]; then
echo "capping at 0 percent"
newvol=0
fi
echo "newvol $newvol"
else
newvol="$1"
fi
pactl set-sink-volume $SINKNAME $(( $newvol * 65536 / 100 ))
}
ismuted() {
muted=$(pactl list sinks | grep "^[[:space:]]*Mute" | head -n $(( $SINK + 1 )) | tail -n 1 | cut -d " " -f 2)
if [[ $muted == "no" ]]; then
echo 0
else
echo 1
fi
}
mute() {
pactl set-sink-mute $SINKNAME 1
}
unmute() {
pactl set-sink-mute $SINKNAME 0
}
mute-toggle() {
pactl set-sink-mute $SINKNAME toggle
}
mute-toggle-mic() {
pactl set-source-mute $SOURCENAME toggle
}
status() {
if [[ $(ismuted) == "1" ]] ; then
echo "mute"
return
fi
echo "$(getvol)%"
}
usage() {
echo "Usage:"
echo
echo "$0 get-vol"
echo "$0 set-vol VOL_PERC"
}
update_status_bar_sink() {
~/.i3/scripts/bar-update "volume_status output"
}
update_status_bar_source() {
~/.i3/scripts/bar-update "volume_status input"
}
case "$1" in
"sink")
echo $SINKNAME
echo $SINK
;;
"get-vol")
echo $(getvol)
;;
"set-vol")
if [[ -z "$2" ]] ; then
usage
else
setvol "$2"
fi
update_status_bar_sink
;;
"mute")
mute
update_status_bar_sink
;;
"unmute")
unmute
update_status_bar_sink
;;
"mute-toggle")
mute-toggle
update_status_bar_sink
;;
"mute-toggle-mic")
mute-toggle-mic
update_status_bar_source
;;
"is-muted")
echo $(ismuted)
;;
"status")
echo $(status)
;;
*)
usage
esac

56
i3/scripts/presentation-mode Executable file
View File

@@ -0,0 +1,56 @@
#!/usr/bin/env bash
_status_file="${XDG_RUNTIME_DIR}/presentation-mode-on"
_autostart="$HOME/.autostart.sh"
is_on() {
[[ -e "${_status_file}" ]]
}
switch_on() {
touch "${_status_file}"
dunstctl disable &
systemctl --user --no-block stop redshift.service
systemctl --user --no-block stop spotify.service
~/.i3/scripts/bar-update "external_script presentation_mode"
~/.i3/scripts/bar-update "systemd redshift"
~/.i3/scripts/bar-update "systemd spotify"
}
switch_off() {
rm -f "${_status_file}"
dunstctl enable &
systemctl --user --no-block start redshift.service
systemctl --user --no-block start spotify.service
~/.i3/scripts/bar-update "external_script presentation_mode"
~/.i3/scripts/bar-update "systemd redshift"
~/.i3/scripts/bar-update "systemd spotify"
}
case "$1" in
status)
if is_on ; then
printf "on\n"
printf '#F4BF75'
else
printf "off\n"
# printf '#F4BF75'
fi
;;
toggle)
if is_on ; then
switch_off
else
switch_on
fi
;;
off)
switch_off
;;
on)
switch_on
;;
esac

19
i3/scripts/shutdown-menu Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
options=(
"lock"
"logout"
"suspend"
"hibernate"
"reboot"
"shutdown"
"screen-off")
i=1
output=$(
for option in "${options[@]}"; do
echo "($i) $option"
(( i++ ))
done | rofi -dmenu -p "action" -no-custom)
[[ "$output" ]] && "$(dirname "$0")"/i3exit "${output#(*) }"

20
i3/scripts/spotify-control Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
case "$1" in
toggle)
cmd="play-pause"
;;
next)
cmd="next"
;;
previous)
cmd="previous"
;;
*)
echo "wrong argument $1"
exit 1
;;
esac
playerctl -p spotify "${cmd}"
~/.i3/scripts/bar-update spotify

20
i3/scripts/spotify-current Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env python3
import dbus
session_bus = dbus.SessionBus()
spotify_bus = session_bus.get_object("org.mpris.MediaPlayer2.spotify",
"/org/mpris/MediaPlayer2")
spotify_properties = dbus.Interface(spotify_bus,
"org.freedesktop.DBus.Properties")
metadata = spotify_properties.Get("org.mpris.MediaPlayer2.Player", "Metadata")
# The property Metadata behaves like a python dict
# for key, value in metadata.items():
# print(key, value)
# To just print the title
print("{}: {} - [{}]".format(
metadata['xesam:artist'][0],
metadata['xesam:title'],
metadata['xesam:album']
))

View File

@@ -1,59 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
set -o pipefail
set -o xtrace
cmds=()
workspacescratch="${1}"
i3msgworkspaces="$(i3-msg -t get_workspaces)"
output_of_pim=$(printf '%s' "${i3msgworkspaces}" | jq -r 'map(select(.name == "'"${workspacescratch}"'")) | .[0].output')
active_workspace_on_target_output=$(printf '%s' "${i3msgworkspaces}" | jq -r 'map(select(.output == "'"${output_of_pim}"'" and .visible)) | .[0].name')
focused_workspace_name=$(printf '%s' "${i3msgworkspaces}" | jq -r 'map(select(.focused)) | .[0].name')
focused_workspace_output=$(printf '%s' "${i3msgworkspaces}" | jq -r 'map(select(.focused)) | .[0].output')
if [[ "${focused_workspace_name}" == "${workspacescratch}" ]]; then
exit 0
fi
cmds+=('unmark _destination')
cmds+=('mark _source')
if [[ "${active_workspace_on_target_output}" != "${workspacescratch}" ]] && [[ "${output_of_pim}" != "${focused_workspace_output}" ]]; then
need_output_reset=1
else
need_output_reset=0
fi
if ((need_output_reset)); then
cmds+=('workspace "'"${active_workspace_on_target_output}"'"')
cmds+=("mark --add _origin")
fi
cmds+=('workspace "'"${workspacescratch}"'"')
cmds+=('mark --add _destination')
cmds+=('[con_mark="^_destination$"] swap container with mark "_source"')
cmds+=('[con_mark="^_source$"] focus')
cmds+=('unmark _source')
if ((need_output_reset)); then
cmds+=('[con_mark="^_origin$"] focus')
cmds+=('unmark _origin')
fi
cmds+=('[con_mark="^_destination$"] focus')
cmds+=('unmark _destination')
i3msgcmd=""
for cmd in "${cmds[@]}"; do
i3msgcmd="${i3msgcmd}${cmd};"
done
i3-msg "${i3msgcmd}"

17
i3/scripts/toggle-app Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env bash
app="${1:?app missing}"
unitname="${app}.service"
running() {
systemctl --user --quiet status "${unitname}" >/dev/null
}
if running ; then
systemctl --user stop "${unitname}"
else
systemctl --user start "${unitname}"
fi
py3-cmd refresh "systemd $app"

View File

@@ -8,25 +8,39 @@
set -o errexit
set -o nounset
# Make sure to standardize locale, regardless of the machine config
#
# Having a different locale broke "yes | pacman -S" to force-install
# iptables, for example
export LC_ALL="en_US.UTF-8"
DOTDIR="/var/lib/dotfiles"
_SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
[[ -e './.git' ]] && git submodule update --init
if [[ "$(readlink "${_SCRIPT_DIR}")" != "${DOTDIR}" ]] && [[ "${_SCRIPT_DIR}" != "${DOTDIR}" ]] ; then
if [[ -e "${DOTDIR}" ]] ; then
2>&1 printf "${DOTDIR} already exists. This seems unsafe.\n"
exit 1
fi
printf "Moving directory to $DOTDIR ...\n"
sudo=""
if (( $(id -u ) != 0 )) ; then
sudo=sudo
fi
$sudo mv --no-target-directory "${_SCRIPT_DIR}" "${DOTDIR}"
printf "Done\n"
else
printf "Already working in ${DOTDIR}, nothing to do\n"
fi
cd "${DOTDIR}"
os_release_file=/etc/os-release
if [[ ! -e "${os_release_file}" ]] ; then
2>&1 printf 'Could not find %, exiting\n' "${os_release_file}"
2>&1 printf "Could not find ${os_release_file}, exiting"
exit 1
fi
# shellcheck source=/etc/os-release
source "${os_release_file}"
source /etc/os-release
sudowrap() {
if (( $(id -u) != 0 )) ; then
if (( $(id -u ) != 0 )) ; then
sudo "${@}"
else
"${@}"
@@ -34,22 +48,51 @@ sudowrap() {
}
cache_updated=0
install() {
local package="$1" ; shift
if [[ $NAME == "Arch Linux" ]] ; then
if (( ! cache_updated )) ; then
sudowrap pacman -Sy
_install() {
_package="$1" ; shift
if [[ $NAME == "Ubuntu" ]] ; then
if ! (( cache_updated )) ; then
apt-get update
cache_updated=1
fi
sudowrap pacman -S --needed --noconfirm "${package}"
sudowrap apt-get install --assume-yes "${_package}"
elif [[ $NAME == "Arch Linux" ]] ; then
sudowrap pacman -S --noconfirm "${_package}"
else
2>&1 printf 'Unsupported distro %s, exiting\n' "$NAME"
2>&1 printf "Unsupported distro $NAME, exiting"
exit 1
fi
}
command -v make >/dev/null || install "make"
command -v ansible >/dev/null || install "ansible"
cd "${DOTDIR}" && make
if ! command -v python3 >/dev/null ; then
printf 'Python3 not installed, installing ...\n'
_install "python3"
_install "python3-venv"
printf 'Done\n'
fi
if ! command -v make >/dev/null ; then
printf 'Make not installed, installing ...\n'
_install "make"
printf 'Done\n'
fi
# Required for compiling modules in venv.
if ! command -v gcc >/dev/null ; then
printf 'gcc not installed, installing ...\n'
_install "gcc"
printf 'Done\n'
fi
if ! python3 -c 'import venv' 2>/dev/null ; then
printf 'Python3 venv module not installed, installing ...\n'
_install python3-venv
printf 'Done\n'
fi
cd "$DOTDIR" && make
# fix permissions of the directory
sudowrap chgrp -R dotfiles "${DOTDIR}"
sudowrap chmod g+wX "${DOTDIR}"

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
pacman -Sy --noconfirm git # yes its a partial upgrade, but thats just the live cd
cd /root
git clone --recursive https://code.hkoerber.de/hannes/dotfiles.git
./dotfiles/install_scripts/ares.sh /dev/sda
mv /root/dotfiles /mnt/root/dotfiles
cat << EOF > /mnt/root/.bash_profile
if /root/dotfiles/install.sh ; then
rm -f /root/.bash_profile
reboot
fi
EOF
umount -R /mnt
read -p "> Ready for reboot. Press enter for shutdown, then remove the installation media and boot again "
poweroff

View File

@@ -1,18 +1,22 @@
#!/usr/bin/env bash
# Parameters:
#
# $1: Device
set -o xtrace
set -o nounset
set -o errexit
DEVICE="/dev/sda"
DEVICE="${1:?}"
if [[ ! -b "${DEVICE}" ]] ; then
printf '%s does not look like a device\n' "${DEVICE}"
printf '%s does not look like a device' "${DEVICE}"
exit 1
fi
if [[ ! -d /sys/firmware/efi/efivars ]] ; then
printf 'efivars does not exist, looks like the system is not booted in EFI mode\n'
printf 'efivars does not exist, looks like the system is not booted in EFI mode'
exit 1
fi
@@ -25,17 +29,15 @@ sed -e 's/\s*\([^#]*\).*/\1/' << EOF | sfdisk ${DEVICE}
device: ${DEVICE}
${DEVICE}1 : name=uefi , size=512M , type=uefi
${DEVICE}2 : name=boot , size=1G , type=linux
${DEVICE}2 : name=boot , size=512M , type=linux
${DEVICE}3 : name=cryptpart , type=linux
EOF
# might take a bit for the new partion table to be updated in-kernel
sleep 1
while : ; do
cryptsetup --batch-mode luksFormat --iter-time 1000 ${DEVICE}3
cryptsetup --batch-mode open --tries 1 ${DEVICE}3 cryptpart && break
done
cryptsetup --batch-mode luksFormat --iter-time 1000 ${DEVICE}3
cryptsetup --batch-mode open ${DEVICE}3 cryptpart
pvcreate /dev/mapper/cryptpart
vgcreate vgbase /dev/mapper/cryptpart
@@ -89,7 +91,7 @@ cat <<EOF > /etc/hosts
127.0.1.1 ares
EOF
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems resume fsck)/' /etc/mkinitcpio.conf
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems resume fsck)/' /etc/mkinitcpio.conf
mkinitcpio -P
@@ -104,32 +106,6 @@ grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable NetworkManager
passwd
# enable root autologin on first boot
mkdir /etc/systemd/system/getty@tty1.service.d/
cat << EOF > /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM
EOF
# ExecStartPost=/bin/rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
# ExecStartPost=/bin/rmdir /etc/systemd/system/getty@tty1.service.d/
# Run
cat << 'EOF' > /root/.bash_profile
if [[ "\$(tty)" == "/dev/tty1" ]] ; then
while ! ping -w 3 -c 3 8.8.8.8 ; do
nmtui
sleep 5
done
rm -rf /etc/systemd/system/getty@tty1.service.d/
if /var/lib/dotfiles/install.sh ; then
rm -f /root/.bash_profile
reboot
fi
fi
EOF
CHROOTSCRIPT
chmod +x /mnt/chroot-script.sh

View File

@@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
host="${1}" ; shift
pacman -Sy --noconfirm git # yes its a partial upgrade, but thats just the live cd
cd /root
git clone --recursive https://code.hkoerber.de/hannes/dotfiles.git
./dotfiles/install_scripts/"${host}".sh
mv /root/dotfiles /mnt/var/lib/dotfiles
read -rp "> Ready for reboot. Press enter for shutdown, then remove the installation media and boot again "
poweroff

View File

@@ -1,137 +0,0 @@
#!/usr/bin/env bash
set -o xtrace
set -o nounset
set -o errexit
DEVICE="/dev/nvme0n1"
if [[ ! -b "${DEVICE}" ]] ; then
printf '%s does not look like a device\n' "${DEVICE}"
exit 1
fi
if [[ ! -d /sys/firmware/efi/efivars ]] ; then
printf 'efivars does not exist, looks like the system is not booted in EFI mode\n'
exit 1
fi
loadkeys de-latin1
timedatectl set-ntp true
sed -e 's/\s*\([^#]*\).*/\1/' << EOF | sfdisk ${DEVICE}
label: gpt
device: ${DEVICE}
${DEVICE}p1 : name=uefi , size=512M , type=uefi
${DEVICE}p2 : name=boot , size=1G , type=linux
${DEVICE}p3 : name=cryptpart , type=linux
EOF
# might take a bit for the new partion table to be updated in-kernel
sleep 1
while : ; do
cryptsetup --batch-mode luksFormat --iter-time 1000 ${DEVICE}p3
cryptsetup --batch-mode open --tries 1 ${DEVICE}p3 cryptpart && break
done
pvcreate /dev/mapper/cryptpart
vgcreate vgbase /dev/mapper/cryptpart
lvcreate -L 16G vgbase -n swap
lvcreate -l 100%FREE vgbase -n root
yes | mkfs.fat -F32 ${DEVICE}p1
yes | mkfs.ext4 ${DEVICE}p2
yes | mkfs.ext4 /dev/vgbase/swap
yes | mkfs.ext4 /dev/vgbase/root
mount /dev/vgbase/root /mnt
mkdir /mnt/efi
mount ${DEVICE}p1 /mnt/efi
mkdir /mnt/boot
mount ${DEVICE}p2 /mnt/boot
mkswap /dev/vgbase/swap
swapon /dev/vgbase/swap
pacstrap /mnt base linux-zen linux-firmware networkmanager intel-ucode lvm2 grub efibootmgr
genfstab -U /mnt >> /mnt/etc/fstab
cat << CHROOTSCRIPT > /mnt/chroot-script.sh
set -o xtrace
set -o errexit
set -o nounset
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
hwclock --systohc
sed -i 's/^#de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
printf 'LANG=en_US.UTF-8\n' > /etc/locale.conf
printf 'KEYMAP=de-latin1\nFONT=lat2-16\n' > /etc/vconsole.conf
printf 'dionysus\n' > /etc/hostname
cat <<EOF > /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 dionysus
EOF
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems resume fsck)/' /etc/mkinitcpio.conf
mkinitcpio -P
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
sed -i "s/^GRUB_CMDLINE_LINUX=.*$/GRUB_CMDLINE_LINUX=\"cryptdevice=UUID=\$(blkid -s UUID -o value ${DEVICE}p3):cryptpart root=UUID=\$(blkid -s UUID -o value /dev/vgbase/root)\"/" /etc/default/grub
sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*$/GRUB_CMDLINE_LINUX_DEFAULT=\"resume=UUID=\$(blkid -s UUID -o value /dev/vgbase/swap)\"/" /etc/default/grub
sed -i 's/^GRUB_DISABLE_RECOVERY=.*$/GRUB_DISABLE_RECOVERY=/' /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable NetworkManager
passwd
# enable root autologin on first boot
mkdir /etc/systemd/system/getty@tty1.service.d/
cat << EOF > /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM
EOF
# ExecStartPost=/bin/rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
# ExecStartPost=/bin/rmdir /etc/systemd/system/getty@tty1.service.d/
# Run
cat << 'EOF' > /root/.bash_profile
if [[ "\$(tty)" == "/dev/tty1" ]] ; then
while ! ping -w 3 -c 3 8.8.8.8 ; do
nmtui
sleep 5
done
rm -rf /etc/systemd/system/getty@tty1.service.d/
if /var/lib/dotfiles/install.sh ; then
rm -f /root/.bash_profile
reboot
fi
fi
EOF
CHROOTSCRIPT
chmod +x /mnt/chroot-script.sh
arch-chroot /mnt /chroot-script.sh
rm -f /mnt/chroot-script.sh

View File

@@ -1,130 +0,0 @@
#!/usr/bin/env bash
set -o xtrace
set -o nounset
set -o errexit
DEVICE="/dev/nvme0n1"
if [[ ! -b "${DEVICE}" ]] ; then
printf '%s does not look like a device\n' "${DEVICE}"
exit 1
fi
if [[ ! -d /sys/firmware/efi/efivars ]] ; then
printf 'efivars does not exist, looks like the system is not booted in EFI mode\n'
exit 1
fi
loadkeys de-latin1
timedatectl set-ntp true
sed -e 's/\s*\([^#]*\).*/\1/' << EOF | sfdisk ${DEVICE}
label: gpt
device: ${DEVICE}
${DEVICE}p1 : name=uefi, size=512M , type=uefi
${DEVICE}p2 : name=boot, size=1G , type=linux
${DEVICE}p3 : name=swap, size=16G , type=linux
${DEVICE}p4 : name=root, size=60G , type=linux
${DEVICE}p5 : name=home, type=linux
EOF
# might take a bit for the new partion table to be updated in-kernel
sleep 1
yes | mkfs.fat -F32 /dev/disk/by-partlabel/uefi
yes | mkfs.ext4 /dev/disk/by-partlabel/boot
yes | mkfs.ext4 /dev/disk/by-partlabel/root
yes | mkfs.ext4 /dev/disk/by-partlabel/home
mkswap /dev/disk/by-partlabel/swap
swapon /dev/disk/by-partlabel/swap
mount /dev/disk/by-partlabel/root /mnt
mkdir /mnt/efi
mount /dev/disk/by-partlabel/uefi /mnt/efi
mkdir /mnt/boot
mount /dev/disk/by-partlabel/boot /mnt/boot
mkdir /mnt/home
mount /dev/disk/by-partlabel/home /mnt/home
pacstrap /mnt base linux-zen linux-firmware networkmanager intel-ucode grub efibootmgr
genfstab -U /mnt >> /mnt/etc/fstab
cat << CHROOTSCRIPT > /mnt/chroot-script.sh
set -o xtrace
set -o errexit
set -o nounset
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
hwclock --systohc
sed -i 's/^#de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
printf 'LANG=de_DE.UTF-8\n' > /etc/locale.conf
printf 'KEYMAP=de-latin1\nFONT=lat2-16\n' > /etc/vconsole.conf
printf 'hera\n' > /etc/hostname
cat <<EOF > /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 hera
EOF
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems resume fsck)/' /etc/mkinitcpio.conf
mkinitcpio -P
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
sed -i 's/^GRUB_DISABLE_RECOVERY=.*$/GRUB_DISABLE_RECOVERY=/' /etc/default/grub
sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*$/GRUB_CMDLINE_LINUX_DEFAULT=\"resume=UUID=\$(blkid -s UUID -o value /dev/disk/by-partlabel/swap)\"/" /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable NetworkManager
passwd
# enable root autologin on first boot
mkdir /etc/systemd/system/getty@tty1.service.d/
cat << EOF > /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM
EOF
# ExecStartPost=/bin/rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
# ExecStartPost=/bin/rmdir /etc/systemd/system/getty@tty1.service.d/
# Run
cat << 'EOF' > /root/.bash_profile
if [[ "\$(tty)" == "/dev/tty1" ]] ; then
while ! ping -w 3 -c 3 8.8.8.8 ; do
nmtui
sleep 5
done
rm -rf /etc/systemd/system/getty@tty1.service.d/
if /var/lib/dotfiles/install.sh ; then
rm -f /root/.bash_profile
reboot
fi
fi
EOF
CHROOTSCRIPT
chmod +x /mnt/chroot-script.sh
arch-chroot /mnt /chroot-script.sh
rm -f /mnt/chroot-script.sh

View File

@@ -1,137 +0,0 @@
#!/usr/bin/env bash
set -o xtrace
set -o nounset
set -o errexit
DEVICE="/dev/nvme0n1"
if [[ ! -b "${DEVICE}" ]] ; then
printf '%s does not look like a device\n' "${DEVICE}"
exit 1
fi
if [[ ! -d /sys/firmware/efi/efivars ]] ; then
printf 'efivars does not exist, looks like the system is not booted in EFI mode\n'
exit 1
fi
loadkeys de-latin1
timedatectl set-ntp true
sed -e 's/\s*\([^#]*\).*/\1/' << EOF | sfdisk ${DEVICE}
label: gpt
device: ${DEVICE}
${DEVICE}p1 : name=uefi , size=512M , type=uefi
${DEVICE}p2 : name=boot , size=1G , type=linux
${DEVICE}p3 : name=cryptpart , type=linux
EOF
# might take a bit for the new partion table to be updated in-kernel
sleep 1
while : ; do
cryptsetup --batch-mode luksFormat --iter-time 1000 ${DEVICE}p3
cryptsetup --batch-mode open --tries 1 ${DEVICE}p3 cryptpart && break
done
pvcreate /dev/mapper/cryptpart
vgcreate vgbase /dev/mapper/cryptpart
lvcreate -L 32G vgbase -n swap
lvcreate -l 100%FREE vgbase -n root
yes | mkfs.fat -F32 ${DEVICE}p1
yes | mkfs.ext4 ${DEVICE}p2
yes | mkfs.ext4 /dev/vgbase/swap
yes | mkfs.ext4 /dev/vgbase/root
mount /dev/vgbase/root /mnt
mkdir /mnt/efi
mount ${DEVICE}p1 /mnt/efi
mkdir /mnt/boot
mount ${DEVICE}p2 /mnt/boot
mkswap /dev/vgbase/swap
swapon /dev/vgbase/swap
pacstrap /mnt base linux-zen linux-firmware networkmanager intel-ucode lvm2 grub efibootmgr
genfstab -U /mnt >> /mnt/etc/fstab
cat << CHROOTSCRIPT > /mnt/chroot-script.sh
set -o xtrace
set -o errexit
set -o nounset
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
hwclock --systohc
sed -i 's/^#de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
printf 'LANG=en_US.UTF-8\n' > /etc/locale.conf
printf 'KEYMAP=de-latin1\nFONT=lat2-16\n' > /etc/vconsole.conf
printf 'neptune\n' > /etc/hostname
cat <<EOF > /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 neptune
EOF
sed -i 's/^HOOKS=.*$/HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems resume fsck)/' /etc/mkinitcpio.conf
mkinitcpio -P
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
sed -i "s/^GRUB_CMDLINE_LINUX=.*$/GRUB_CMDLINE_LINUX=\"cryptdevice=UUID=\$(blkid -s UUID -o value ${DEVICE}p3):cryptpart root=UUID=\$(blkid -s UUID -o value /dev/vgbase/root)\"/" /etc/default/grub
sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*$/GRUB_CMDLINE_LINUX_DEFAULT=\"resume=UUID=\$(blkid -s UUID -o value /dev/vgbase/swap)\"/" /etc/default/grub
sed -i 's/^GRUB_DISABLE_RECOVERY=.*$/GRUB_DISABLE_RECOVERY=/' /etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
systemctl enable NetworkManager
passwd
# enable root autologin on first boot
mkdir /etc/systemd/system/getty@tty1.service.d/
cat << EOF > /etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM
EOF
# ExecStartPost=/bin/rm /etc/systemd/system/getty@tty1.service.d/autologin.conf
# ExecStartPost=/bin/rmdir /etc/systemd/system/getty@tty1.service.d/
# Run
cat << 'EOF' > /root/.bash_profile
if [[ "\$(tty)" == "/dev/tty1" ]] ; then
while ! ping -w 3 -c 3 8.8.8.8 ; do
nmtui
sleep 5
done
rm -rf /etc/systemd/system/getty@tty1.service.d/
if /var/lib/dotfiles/install.sh ; then
rm -f /root/.bash_profile
reboot
fi
fi
EOF
CHROOTSCRIPT
chmod +x /mnt/chroot-script.sh
arch-chroot /mnt /chroot-script.sh
rm -f /mnt/chroot-script.sh

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env bash
set -o nounset
set -o errexit
sudo bash -c "pacman -Sy --needed --noconfirm archlinux-keyring && pacman -Su"
./update-aur-pkgs.sh
ANSIBLE_DISPLAY_OK_HOSTS=false \
ANSIBLE_DISPLAY_SKIPPED_HOSTS=false \
ANSIBLE_EXTRA_ARGS='' \
make

1
mgr/.gitignore vendored
View File

@@ -1 +0,0 @@
/target

Some files were not shown because too many files have changed in this diff Show More