Compare commits

..
83 Commits
Author SHA1 Message Date
hektor 5c587dc5a7 feat(reference-manager): replace 'Zotero' with 'papis'
check / lint (push) Successful in 6s
2026-11-08 22:55:01 +01:00
hektor fce7a277a7 feat(lynis): declare 'lynis' module (with profile + skips) 2026-11-08 22:55:01 +01:00
hektor 21e5b62dfa feat(hecuba): switch to UEFI (and modularize)
check / lint (push) Successful in 9s
2026-11-08 13:41:38 +01:00
hektor e794e6c0e2 feat(hardening): declare hardening module using 'nix-mineral' 2026-11-08 13:41:38 +01:00
hektor 209ab8ba30 feat(reference-manager): nixify Zotero Better BibTeX
check / lint (push) Successful in 17s
2026-11-06 21:04:16 +01:00
hektor be62f224a6 refactor(git-hooks): simplify git hooks
check / lint (push) Successful in 18s
2026-11-06 21:00:20 +01:00
hektor 9110789527 refactor: nixify / clean remaining dots scripts 2026-11-06 21:00:20 +01:00
hektor 9030f33842 refactor: nixify / clean dots config 2026-11-06 21:00:20 +01:00
hektor c2bb81ec7c refactor(secrets): simplify home manager secrets
check / lint (push) Successful in 15s
2026-11-06 16:43:26 +01:00
hektor 6fa74fead8 refactor: rename utils to lib'
check / lint (push) Successful in 15s
2026-11-06 14:35:01 +01:00
hektor 1947ee0c9f feat(nvim): set up 'atlas.nvim' for Gitlab
check / lint (push) Successful in 15s
2026-11-06 12:21:25 +01:00
hektor 00769b0251 feat(nvim): add 'editorconfig-checker'
check / lint (push) Successful in 15s
2026-11-06 12:12:29 +01:00
hektor 089b221276 fix(nvim): correct auto-session 'enabled' option 2026-11-06 12:11:43 +01:00
hektor 7337257740 fix(nvim): drop 'eslint' formatter 2026-11-06 12:07:56 +01:00
hektor 126dacc3e3 fix(nvim): use 'openscad-lsp' instead of 'openscad-ls'
check / lint (push) Successful in 15s
2026-11-06 10:36:56 +01:00
hektor 8871280ee5 fix(nvim): resolve lspconfig nesting errors 2026-11-06 10:26:33 +01:00
hektor 13b45c45a1 feat(nvim): add 'biome' to 'conform.nvim'
check / lint (push) Successful in 14s
2026-11-06 10:05:49 +01:00
hektor 8c6f0c7a32 fix(nvim): remove duplicate 'indentexpr' 2026-11-06 10:01:42 +01:00
hektor cdaac61c37 chore(nvim): drop redundant plugins
check / lint (push) Successful in 15s
2026-11-06 10:01:42 +01:00
hektor 323de0b2e9 fix(nvim): use 'typescriptreact' in tailwind-fold 2026-11-06 10:01:42 +01:00
hektor 79fea669c0 refactor(keyboard): nixify 'vortex-core' directory
check / lint (push) Successful in 15s
2026-11-05 23:15:05 +01:00
hektor 7bcfa68a6b chore(flake): move nix-secrets and hecuba-services to hektor-org
check / lint (push) Successful in 17s
2026-11-05 22:55:26 +01:00
hektor 627a7b463e fix(nvim): don't try to load VSCode snippets
check / lint (push) Successful in 15s
2026-11-05 22:45:53 +01:00
hektor e9002ac727 fix(nvim): use buffer keymaps for LSP 2026-11-05 22:45:52 +01:00
hektor 3e377ce637 feat(nvim): add nixCats-backed language options
check / lint (push) Successful in 16s
2026-11-04 23:51:07 +01:00
hektor 0d5027edb7 feat(nvim): add inotify-tools
check / lint (push) Successful in 16s
2026-11-04 13:09:07 +01:00
hektor 23b0462dc1 fix(nvim): only use 'helm_ls' for helm charts and values
check / lint (push) Successful in 16s
2026-11-03 23:26:26 +01:00
hektor f45dd680f9 feat(nvim): make TypeScript language server configurable 2026-11-03 23:26:26 +01:00
hektor 49f66cb9fa chore(nvim): drop 'nvimkit-nvim' plugin 2026-11-03 23:17:31 +01:00
hektor 9c84aeb3ab fix(nvim): actually load the 'skeleton' plugin 2026-11-03 22:37:54 +01:00
hektor f365957d3d feat(nvim): substitute atlas.nvim for diffview.nvim
check / lint (push) Successful in 30s
2026-11-03 21:27:42 +01:00
hektor 84e0866c19 feat(xdg): declare 'xdg' module
check / lint (push) Successful in 15s
2026-11-01 18:17:20 +01:00
hektor f55d5a8149 fix(backups): scope restic password per host 2026-11-01 18:17:20 +01:00
hecuba-services-bot 0c992880b7 chore(hecuba): update services lock to 18d0202
check / lint (push) Successful in 15s
2026-10-31 15:37:11 +01:00
hektor ea5309eff1 feat(k8s): declare 'talos' modules 2026-10-31 15:37:11 +01:00
hektor 48360e49c4 feat(k8s): declare 'crossplane' module 2026-10-31 15:35:49 +01:00
hektor e92c98fa04 fix(nvim): load snippets from nixCats config dir 2026-10-31 15:35:48 +01:00
hektor 2d2776f119 fix(taskwarrior): drop unused 'taskopen' 2026-10-31 15:35:47 +01:00
hecuba-services-bot 7bd37a79ab chore(hecuba): update services lock to 6ff8795 2026-10-29 14:47:49 +01:00
hektor e16c519414 fix(nvim): replace deprecated 'vim.diagnostic.goto_*' with 'vim.diagnostic.jump' 2026-10-29 14:26:59 +01:00
hektor 93f2952611 chore(nvim): drop wiki index mapping
check / lint (push) Successful in 15s
2026-10-28 20:39:31 +01:00
hecuba-services-bot da8cf08ed2 chore(hecuba): update services lock to 0c66ef7
check / lint (push) Successful in 15s
2026-10-27 21:51:31 +00:00
hecuba-services-bot b2898ddf20 chore(hecuba): update services lock to 0d86d36
check / lint (push) Successful in 17s
2026-10-27 21:50:43 +00:00
hecuba-services-bot 95da1174c6 chore(hecuba): update services lock to 0a5fd6b
check / lint (push) Successful in 30s
2026-10-26 20:59:12 +00:00
hektor 3893fb6078 fix(wol): generalize 'wol-*' scripts
check / lint (push) Successful in 15s
2026-10-25 17:37:20 +01:00
hektor 715bf6140f fix(browser): use 'browser' group for KeePassXC browser credentials 2026-10-25 17:37:20 +01:00
hektor 96d838db75 fix(3d): modularize 3D module 2026-10-25 17:37:20 +01:00
hektor 445bdde2dc fix(ssh): further harden SSH 2026-10-25 17:37:20 +01:00
hektor 432a4c107a fix(backups): improve reliability 2026-10-25 17:37:20 +01:00
hektor 4498e8303c fix(ai-tools): bump 'ccline' 2026-10-25 17:37:20 +01:00
hektor ddee912f51 fix(ai-tools): use 'rtk' from 'nixpkgs' 2026-10-25 17:37:19 +01:00
hektor bb2f0dcd29 feat(memory): declare 'memory' module
check / lint (push) Successful in 15s
2026-10-24 13:22:38 +02:00
hektor f3876cdf87 feat(tmp): declare 'tmp' module 2026-10-24 13:09:19 +02:00
hektor fc373a60ef feat(zfs): declare ZFS module 2026-10-24 13:09:14 +02:00
hecuba-services-bot e12e2b17ae chore(hecuba): update services lock to e94b134
check / lint (push) Successful in 15s
2026-10-22 22:07:55 +00:00
hecuba-services-bot 26458c8728 chore(hecuba): update services lock to 7a887ec
check / lint (push) Successful in 19s
2026-10-22 21:58:09 +00:00
hecuba-services-bot e462c1b0b9 chore(hecuba): update services lock to a8acbad
check / lint (push) Successful in 16s
2026-10-22 20:39:19 +00:00
hecuba-services-bot 677cd30224 chore(hecuba): update services lock to 3194d87
check / lint (push) Successful in 15s
2026-10-22 19:44:21 +00:00
hecuba-services-bot 5d5db2314d chore(hecuba): update services lock to f4b9c22
check / lint (push) Successful in 15s
2026-10-22 19:42:13 +00:00
hecuba-services-bot ba0e9e77d4 chore(hecuba): update services lock to a89518a
check / lint (push) Successful in 16s
2026-10-22 19:11:32 +00:00
hecuba-services-bot 88a9e8e63f chore(hecuba): update services lock to 9abf40d
check / lint (push) Successful in 15s
2026-10-22 18:58:31 +00:00
hecuba-services-bot 9df77eee42 chore(hecuba): update services lock to 900f298
check / lint (push) Successful in 17s
2026-10-22 18:38:15 +00:00
hecuba-services-bot 18901f16cd chore(hecuba): update services lock to 5f49f34
check / lint (push) Successful in 15s
2026-10-22 18:35:34 +00:00
hecuba-services-bot 408ee2eec1 chore(hecuba): update services lock to 94b9e7a
check / lint (push) Successful in 17s
2026-10-22 18:20:33 +00:00
hecuba-services-bot 362beb72ca chore(hecuba): update services lock to b75d5ff
check / lint (push) Successful in 17s
2026-10-22 17:44:09 +00:00
hecuba-services-bot 8a49bb8015 chore(hecuba): update services lock to 8dd1006
check / lint (push) Successful in 15s
2026-10-22 16:34:20 +00:00
hecuba-services-bot 186ab438b8 chore(hecuba): update services lock to 2f04dc5
check / lint (push) Successful in 15s
2026-10-22 16:11:28 +00:00
hecuba-services-bot c32c8a0ace chore(hecuba): update services lock to c42fa08
check / lint (push) Successful in 15s
2026-10-22 16:09:50 +00:00
hecuba-services-bot fbb04d1192 chore(hecuba): update services lock to c57be1a
check / lint (push) Successful in 15s
2026-10-22 16:09:06 +00:00
hecuba-services-bot 233cdd4bbe chore(hecuba): update services lock to 6b19a4d
check / lint (push) Successful in 19s
2026-10-22 16:08:11 +00:00
hecuba-services-bot 5153bd0883 chore(hecuba): update services lock to 63277d7
check / lint (push) Successful in 15s
2026-10-22 03:03:11 +00:00
hecuba-services-bot b112c7eda3 chore(hecuba): update services lock to f8a7b68
check / lint (push) Successful in 18s
2026-10-21 14:06:50 +00:00
hektor d7508ddad7 feat(newsboat): nixify 'newsboat'
check / lint (push) Successful in 1m6s
2026-10-20 20:45:04 +02:00
hektor 83d863b856 chore: update lockfile 2026-10-20 20:45:04 +02:00
hektor d317aa39a6 feat(sandboxing): declare sandboxing module
check / lint (push) Successful in 15s
2026-10-12 23:51:54 +02:00
hektor 3bbc5e83fc fix(hecuba): resolve arion check related build error 2026-10-12 23:50:15 +02:00
hektor 0ab7dc5d80 feat(ai-tools): declare Codex submodule
check / lint (push) Successful in 15s
2026-10-12 23:44:18 +02:00
hektor 622a2ae3da fix(ai-tools): adopt 'taskwarrior' home manager secrets approach 2026-10-12 23:44:18 +02:00
hektor 034a010547 feat(scripts): declare scripts module
check / lint (push) Successful in 47s
2026-10-12 23:28:53 +02:00
hektor 14f8c83cf3 refactor: simplify repo paths
check / lint (push) Successful in 14s
2026-10-11 17:45:55 +02:00
hektor 7f5d7914c4 refactor(common): modularize common host module
check / lint (push) Successful in 14s
2026-10-11 17:34:29 +02:00
hektor deeffb8b8b fix(eetion): configure 'hardware.deviceTree' 2026-10-11 17:34:29 +02:00
hektor 14c6a27b21 fix(git): degrade gracefully without 'nvim' 2026-10-11 17:34:29 +02:00
187 changed files with 2675 additions and 6173 deletions

No files matched your search

+5 -7
View File
@@ -5,20 +5,20 @@
let
inherit (inputs.nixpkgs) lib;
utils = import ../utils { inherit lib; };
lib' = import ../lib { inherit lib; };
# exclude hosts that need auto rollback (until `colmena` supports it) for
# now, we use `deploy-rs` (which has magic rollback) for those (also see ./deploy-rs.nix)
#
# see <https://github.com/nix-community/colmena/issues/38>
# <https://github.com/nix-community/colmena/issues/344>
hostnames = lib.filter (
hostname: !((utils.hostMeta ../hosts/${hostname}).deploy.autoRollback or false)
) (utils.dirNames ../hosts);
hostname: !((lib'.hostMeta hostname).deploy.autoRollback or false)
) lib'.nixosHosts;
mkNode =
hostname:
let
meta = utils.hostMeta ../hosts/${hostname};
meta = lib'.hostMeta hostname;
isArm = meta.system == "aarch64-linux";
in
{
@@ -40,10 +40,8 @@ inputs.colmena.lib.makeHive (
meta = {
nixpkgs = import inputs.nixpkgs { localSystem = "x86_64-linux"; };
specialArgs = {
inherit inputs;
inherit inputs lib';
outputs = self;
dotsPath = ../dots;
myUtils = utils;
};
};
}
+4 -4
View File
@@ -5,18 +5,18 @@
let
inherit (inputs.nixpkgs) lib;
utils = import ../utils { inherit lib; };
lib' = import ../lib { inherit lib; };
# only include hosts that need auto rollback (until `colmena` supports it)
# `colmena` is used for other hosts (see ./colmena.nix)
hostnames = lib.filter (
hostname: (utils.hostMeta ../hosts/${hostname}).deploy.autoRollback or false
) (utils.dirNames ../hosts);
hostname: (lib'.hostMeta hostname).deploy.autoRollback or false
) lib'.nixosHosts;
mkNode =
hostname:
let
meta = utils.hostMeta ../hosts/${hostname};
meta = lib'.hostMeta hostname;
in
{
inherit hostname;
-26
View File
@@ -1,26 +0,0 @@
# Scripts
Mostly tiny helper scripts \& experiments, some more useful than others.
## Setup
Make sure the scripts are in your `$PATH` and executable.
To add the complete directory of scripts to your `$PATH`:
```bash
export PATH=~/.bin:$PATH
```
To make a any script `<script>` executable:
```bash
chmod +x <script>
```
## Notes
Statusbar scripts are prefixed with `sb` under the assumption you're using
`polybar` (scripts my need changes to be used with different statusbars).
Some scripts have dependencies (e.g. `fzf`, `jq`, `xclip`, ...), make sure you
have them installed.
-6
View File
@@ -1,6 +0,0 @@
#!/usr/bin/env bash
# Tiny AUR clone helper
# aurpac <package-name>
git clone "https://aur.archlinux.org/$1.git"
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
ipython -i /home/h/.bin/calc.py
-5
View File
@@ -1,5 +0,0 @@
#!/usr/bin/env bash
# Open webcam window
ffplay -f v4l2 -x 640 -y 480 -i /dev/video0 >/dev/null 2>&1 & disown
-7
View File
@@ -1,7 +0,0 @@
#!/usr/bin/env node
const fs = require('fs')
const objLength = obj => Object.keys(obj).length
fs.readFile(process.argv[2], (err, data) => (err ? console.error(err) : console.log(objLength(JSON.parse(data)))))
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
xdg-open https://devdocs.io/offline
-10
View File
@@ -1,10 +0,0 @@
#!/usr/bin/env bash
options="Mouse\nHeadphones"
selected="$(echo -e "$options" | fzf)"
case "$selected" in
"Mouse") toggle-bt-device E4:19:21:56:C8:70;;
"Headphones") toggle-bt-device 38:18:4C:D4:74:42;;
esac
-2
View File
@@ -1,2 +0,0 @@
pactl load-module module-jack-source connect=0
pactl load-module module-loopback source=jack_in
-5
View File
@@ -1,5 +0,0 @@
#!/usr/bin/env python
import yaml, json, sys
print(yaml.dump(json.load(open(sys.argv[1])), allow_unicode=True), end='')
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
sudo pacman -Qtdq | sudo pacman -Rns -
-9
View File
@@ -1,9 +0,0 @@
#!/usr/bin/env bash
session="r5rs"
tmux attach-session -t "$session" || tmux new-session -s "$session" \; \
split-window -h -t $session \; \
send-keys -t 1 "nvim -c \"set ft=scheme\"" C-m \; \
send-keys -t 2 "plt-r5rs --no-prim" C-m \; \
select-pane -t 1
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
sed -i -r 's/\[*\]\(\.\/([A-z-]*.md)/\]\(\1/g' *.md
-19
View File
@@ -1,19 +0,0 @@
#!/usr/bin/env bash
# Backup existing password databases and
# database keys (using date in filename date -u
# +%Y-%m-%d_%H-%M-%S)
RCLONE_REMOTE="proton-drive"
for f in "$HOME/doc"/*.{kdbx,kdbx.key}; do
[ -e "$f" ] || continue
echo "Backing up $f to $f-$(date -u +%Y-%m-%d_%H-%M-%S)"
cp "$f" "$f-$(date -u +%Y-%m-%d_%H-%M-%S)"
done
echo "Restoring KeePassXC databases and database keys"
rclone copyto \
"$RCLONE_REMOTE:doc"/ "$HOME/doc/" \
--progress \
--include "/*.{kdbx,kdbx.key}"
-23
View File
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
function start() {
adb start-server
nohup gnirehtet autorun &> /dev/null &
printf "Started reverse tethering \n"
}
function stop() {
adb kill-server
gnirehtet stop
pkill gnirehtet
printf "Stopped reverse tethering \n"
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; start ;;
*) printf "start | stop | restart \n" >&2
exit 1
;;
esac
-75
View File
@@ -1,75 +0,0 @@
#!/usr/bin/env bash
# Save (encrypted) password database to cloud storage
#
# Usage:
# save-passwddb - Save databases to cloud
# save-passwddb init - Restore databases from cloud (with single backup archive)
RCLONE_REMOTE="proton"
SOURCE_DIR="$HOME/doc"
TARGET_DIR="$RCLONE_REMOTE:doc"
BACKUP_DIR="$HOME/doc/bak"
function save_databases() {
if [ 0 -lt "$(ls $SOURCE_DIR/*.kdbx 2>/dev/null | wc -w)" ]; then
echo "[save] Saving KeePassXC databases and database keys"
rclone copy "$SOURCE_DIR" "$TARGET_DIR" \
--include "/*.{kdbx,kdbx.key}" \
--progress
echo "[save] Done"
else
echo "[save] No password database found, restore with:"
echo ""
echo " $0 init"
exit 1
fi
}
function backup_existing() {
mkdir -p "$BACKUP_DIR"
local timestamp=$(date +%Y%m%d-%H%M%S)
local backup_file="$BACKUP_DIR/passwddb_backup_${timestamp}.tar.gz"
echo "[backup] Creating backup archive: ${backup_file}"
tar -czf "$backup_file" -C "$SOURCE_DIR" $(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -printf "%f ")
echo "[backup] Backup complete"
}
function restore_databases() {
echo "[init] Checking for existing files..."
local existing_files=$(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -print)
if [ -n "$existing_files" ]; then
echo "[init] Found existing database files:"
echo "$existing_files" | while read -r file; do
echo " - $file"
done
read -p "[init] Create backup archive of existing files? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
backup_existing
fi
fi
echo "[init] Restoring KeePassXC databases and database keys"
mkdir -p "$SOURCE_DIR"
rclone copy "$TARGET_DIR" "$SOURCE_DIR" \
--include "*.{kdbx,kdbx.key}" \
--progress
echo "[init] Done"
}
case "$1" in
""|save)
save_databases
;;
init)
restore_databases
;;
*)
echo "Usage: $0 [init|save]"
exit 1
;;
esac
-22
View File
@@ -1,22 +0,0 @@
#!/usr/bin/env bash
# Anki review percentage for statusbar
num_to_review=200
# Get current card count from Anki
count=$(curl -s 127.0.0.1:8765 -X POST -d '{"action": "getNumCardsReviewedToday", "version": 6}' | jq '.result')
if [ -z "$count" ]
then
if [ -s /tmp/anki-reviews ]; then
true
else
echo "-1" > /tmp/anki-reviews
fi
else
echo "$count" > /tmp/anki-reviews
fi
num_reviews=$(cat /tmp/anki-reviews)
echo -n -e " Reviews: $(python3 -c "print('{:.2%}'.format($num_reviews/$num_to_review))") "
-13
View File
@@ -1,13 +0,0 @@
#!/usr/bin/env bash
cap="$(cat /sys/class/power_supply/BAT0/capacity)"
if [ "$cap" -ge 33 ];then
color="\x01"
elif [ "$cap" -ge 10 ]; then
color="\x03"
else
color="\x04"
fi
echo -n -e "$color $cap% \x01"
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
echo -n -e "Week $(date '+%V') $(date '+%a %d %b %H:%M') "
-7
View File
@@ -1,7 +0,0 @@
#!/bin/sh
if grep -xq 'up' /sys/class/net/w*/operstate 2>/dev/null ; then
wifiicon="$(awk '/^\s*w/ { print "WiFi", int($3 * 100 / 70) "% " }' /proc/net/wireless)"
fi
printf " %s%s%s" "$wifiicon" "$(sed "s/down//;s/up/Ethernet/" /sys/class/net/e*/operstate 2>/dev/null)"
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
[ -f "/home/h/.local/share/pomo" ] && cat /home/h/.local/share/pomo || echo ""
-4
View File
@@ -1,4 +0,0 @@
#!/usr/bin/env bash
# Render contents of $HOME/.project if present
[ -f "$HOME/.project" ] && cat "$HOME/.project" || echo ""
-7
View File
@@ -1,7 +0,0 @@
#!/usr/bin/env bash
num_done="$(task end.after:today status:completed count)"
num_pending="$(($(task count status:pending) + $num_done))"
num_waiting="$(($(task count status:waiting)))"
echo -e "Tasks: $num_done/$num_pending+$num_waiting"
-12
View File
@@ -1,12 +0,0 @@
#!/usr/bin/env sh
# Reference: https://github.com/mil-ad/polybar-wireguard
connected_interfaces=$(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)
if [ -n "$connected_interfaces" ];
then
for interface in $connected_interfaces; do echo "$interface"; done
else
exit 1
fi
-25
View File
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Script to create script
if [ -z "$1" ]; then
echo "Usage: script <scriptname>"
exit
fi
path="$HOME/.bin/$1"
# Prevent overwriting existing script
set -o noclobber
# Create script
cat > "$path" << EOF
#!/usr/bin/env bash
EOF
chmod +x "$path"
# Open script in editor on line 3
"$EDITOR" +3 "$path"
-208
View File
@@ -1,208 +0,0 @@
#!/bin/bash
pac_list=(
at
automake
autopep8
base
base-devel
bash-completion
bash-language-server
bc
brightnessctl
chromium
dmidecode
entr
eslint_d
feh
firefox-developer-edition
firefox-tridactyl
firefox-tridactyl-native
firefox-tridactyl-native-debug
fzf
gcc
git
haskell-language-server
haskell-ormolu
hsetroot
htop
httpie
jq
keepassxc
kitty
lua-language-server
make
man-db
man-pages
neovim
nmap
nodejs-lts-jod
pacman-contrib
pandoc-cli
pandoc-crossref
parallel
pass
pkgbuild-language-server
pnpm
ripgrep
sshfs
stylelint
svelte-language-server
tailwindcss-language-server
task
tldr
tmux
tmuxp
tree
tree-sitter-cli
ts-node
typescript-language-server
unzip
vim-language-server
wget
xclip
yaml-language-server
)
aurpac_list=(
hadolint-bin
nvm
nvimpager
paru
tmux-bash-completion-git
ttf-iosevka-term-ss08
vim-plug
vtsls
xbanish
)
install() {
local package="$1"
if pacman -Qi "$package" &> /dev/null; then
echo "$package is already installed"
else
echo "Installing " "$package"
sudo pacman -S --noconfirm --needed "$package"
fi
}
aurpac() {
git clone "https://aur.archlinux.org/$1.git" "$HOME/.build/$1"
}
install_packages() {
announce "Installing packages"
local count
for pac in "${pac_list[@]}" ; do
count=$((count+1))
install "$pac";
done
echo "$count packages installed"
}
install_dotfiles() {
announce "Installing dotfiles"
origin="https://git.hektormisplon.xyz/hektor/dots"
git clone "$origin" "$HOME/dots"
cp -r "$HOME/dots/.git" "$HOME/.git"
git --git-dir="$HOME/.git" config --local status.showUntrackedFiles no
git --git-dir="$HOME/.git" stash -m "[dots]"
git --git-dir="$HOME/.git" stash apply
git --git-dir="$HOME/.git" restore "$HOME"
}
install_aur_packages() {
announce "Installing AUR packages"
local count
for package in "${aurpac_list[@]}" ; do
if pacman -Qi "$1" &> /dev/null; then
echo "$1 is already installed"
else
count=$((count+1))
aurpac "$package" && makepkg -si -D "$HOME/.build/$package"
fi
done
echo "$count AUR packages installed"
}
setup_neovim() {
announce "Setting up NeoVim"
git clone --depth=1 https://github.com/savq/paq-nvim.git \
"${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim
}
setup_keyboard() {
announce "Setting up keyboard"
install "interception-tools"
install "interception-caps2esc"
udevmon_config_contents="\
- JOB: intercept -g \$DEVNODE | caps2esc -m 1 | uinput -d \$DEVNODE
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK]"
if [ -f /etc/interception/udevmon.yaml ] && diff -q <(echo "$udevmon_config_contents") /etc/interception/udevmon.yaml; then
echo "udevmon config already exists"
echo "$udevmon_config_contents"
elif [ -f /etc/interception/udevmon.yaml ]; then
echo "interception udevmon.yaml already exists"
cat /etc/interception/udevmon.yaml
echo "verify if this config matches the one below"
echo "$udevmon_config_contents"
else
echo "interception udevmon.yaml does not exist, creating one"
sudo bash -c "echo '$udevmon_config_contents' > /etc/interception/udevmon.yaml"
fi
sudo systemctl enable --now udevmon.service
if pgrep -x caps2esc > /dev/null; then
echo "caps2esc is already running"
else
caps2esc -m 1
fi
}
configure_gnome() {
announce "Configuring Gnome"; setup-gnome
}
setup_firewall() {
announce "Configuring firewalld"
install firewalld
sudo systemctl enable --now firewalld
}
setup_docker() {
announce "Setting up Docker"
install docker
install docker-compose
sudo systemctl enable --now docker.socket
sudo usermod -aG docker "$USER"
echo "User added to docker group, please restart your session"
}
announce() {
local message="$1"
echo " "
echo "[dots] $message"
echo " "
}
confirm() {
local question="$1"
read -r -p "[dots] $question? [y/N]" -n 1
case "$REPLY" in y|Y ) "$2";; * ) echo "Skipping"; esac
}
printf '%s\n' "${pac_list[@]}"
confirm "Install these packages? " install_packages
printf '%s\n' "${aurpac_list[@]}"
confirm "Install these AUR packages? " install_aur_packages
confirm "Setup NeoVim? " setup_neovim
confirm "Install dotfiles? " install_dotfiles
confirm "Setup keyboard? " setup_keyboard
if pacman -Qi "gdm" &> /dev/null; then
confirm "Configure Gnome? " configure_gnome
fi
confirm "Setup firewall? " setup_firewall
confirm "Setup Docker? " setup_docker
-5
View File
@@ -1,5 +0,0 @@
#!/usr/bin/env bash
ssh_hosts="$(grep -E 'Host [a-z0-9\-]*$' ~/.ssh/config | awk '{print $2}')"
echo "$ssh_hosts"
-26
View File
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
set -euf -o pipefail
VIM=${VIM:-"vim"}
TMUX=${TMUX:-"tmux"}
FILE=${FILE:-"$(date +%F).tidal"}
SESSION=${SESSION:-"tidal"}
TIDAL_BOOT_PATH=${TIDAL_BOOT_PATH:-""}
GHCI=${GHCI:-""}
args=${*:-$FILE}
# attach if session else create
$TMUX attach-session -t "$SESSION" || $TMUX new-session -s "$SESSION" \; \
split-window -h -t "$SESSION" \; \
send-keys -t 0 "$VIM $args" C-m \; \
send-keys -t 1 "TIDAL_BOOT_PATH=$TIDAL_BOOT_PATH GHCI=$GHCI tidal" C-m \; \
new-window -t "$SESSION":2 -n SuperDirt \; \
send-keys -t 0 "jack_control start && sclang ~/dev/live/scripts/start.scd" C-m \; \
select-window -t 1 \; \
resize-pane -t 1 -x 100 \; \
resize-pane -t 0 -x 125 \; \
select-pane -t 0
-13
View File
@@ -1,13 +0,0 @@
#!/usr/bin/env bash
session="main"
tmux attach-session -t $session || tmux new-session -s $session \; \
rename-window task \; \
send-keys -t 1 "task" C-m \; \
new-window -n zk \; \
send-keys -t 2 "nvim $ZK_PATH/index.md" C-m \; \
new-window -n term \; \
new-window -n music \; \
send-keys -t 4 "echo 'TODO: open music player'" C-m \; \
select-window -t 1 \;
-11
View File
@@ -1,11 +0,0 @@
#!/usr/bin/env bash
status="$(bluetoothctl info "$1" | grep Connected | cut -f 2 -d ':' | cut -f 2 -d ' ')"
if [ "$status" == "yes" ]
then
bluetoothctl disconnect "$1"
else
trust "$1"
bluetoothctl connect "$1"
fi
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/env bash
sudo pacman -Syu
-1
View File
@@ -1 +0,0 @@
[{ "key": "ctrl+b", "command": "workbench.action.toggleSidebarVisibility" }]
-114
View File
@@ -1,114 +0,0 @@
{
/* view */
"workbench.statusBar.visible": true,
"workbench.activityBar.visible": false,
"breadcrumbs.enabled": false,
"editor.minimap.enabled": false,
"window.menuBarVisibility": "hidden",
"workbench.editor.showTabs": false,
"workbench.editor.showIcons": false,
/* font */
"editor.fontSize": 20,
"editor.fontLigatures": true,
"editor.fontFamily": "Iosevka",
"terminal.integrated.fontSize": 20,
/* editor */
"editor.lineNumbers": "relative",
"editor.glyphMargin": false,
"terminal.integrated.allowMnemonics": false,
"workbench.colorCustomizations": {
"editorGroup.emptyBackground": "#0c0c0c",
"scrollbar.shadow": "#000",
"widget.shadow": "#000",
"editorWidget.background": "#0c0c0c",
"editor.background": "#0c0c0c",
"sideBar.background": "#0c0c0c",
"editorGroupHeader.noTabsBackground": "#0c0c0c",
"scrollbarSlider.background": "#222",
"scrollbarSlider.activeBackground": "#222",
"scrollbarSlider.hoverBackground": "#333",
"statusBar.noFolderBackground": "#0c0c0c",
"statusBar.border": "#0c0c0c",
"statusBar.background": "#0c0c0c",
"statusBar.foreground": "#555"
},
"editor.tokenColorCustomizations": {
"comments": "#555",
"functions": "#aaa",
"numbers": "#fff",
"strings": "#fff",
"types": "#aaa",
"variables": "#aaa",
"keywords": "#aaa"
},
/* vim keybindings */
"vim.incsearch": true,
"vim.hlsearch": true,
"vim.leader": "<space>",
"vim.normalModeKeyBindingsNonRecursive": [
/* quick quit */
{
"before": ["<leader>", "q"],
"commands": [":q"]
},
{
"before": ["<leader>", "w"],
"commands": [":w"]
},
{
"before": ["<leader>", "Q"],
"commands": [":q!"]
},
{
"before": ["<leader>", "W"],
"commands": [":w!"]
},
/* split */
{
"before": ["<leader>", "s", "s"],
"commands": [":sp"]
},
{
"before": ["<leader>", "s", "v"],
"commands": [":vs"]
},
/* clear search highlight */
{
"before": ["<leader>", "<leader>"],
"commands": [":nohl"]
}
],
"vim.insertModeKeyBindings": [
/* quick exit insert */
{
"before": ["j", "j"],
"after": ["<Esc>"]
}
],
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false
},
/* eslint & prettier */
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"workbench.colorTheme": "Absolute Black",
"window.zoomLevel": 1,
"javascript.updateImportsOnFileMove.enabled": "always"
}
-12
View File
@@ -1,12 +0,0 @@
prev_img h
next_img l
scroll_left L
scroll_right H
scroll_up J
scroll_down K
zoom_in j
zoom_out k
zoom_fit z
zoom_default =
mirror bar
close q Q
-3
View File
@@ -1,3 +0,0 @@
feh \
-B black \
--auto-zoom
-36
View File
@@ -1,36 +0,0 @@
[General]
checkForUpdates=false
disabledTrayIcon=true
uiColor=#cccccc
fontFamily=Inter
drawColor=#ffffff
savePath=/home/h/doc/clips
copyPathAfterSave=true
saveLastRegion=true
saveAsFileExtension=png
userColors=picker, #800000, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ffffff, #000000
[Shortcuts]
TYPE_ARROW=a
TYPE_CIRCLE=o
TYPE_CIRCLECOUNT=Shift+o
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
TYPE_COPY=y
TYPE_DELETE_CURRENT_TOOL=
TYPE_DRAWER=l
TYPE_EXIT=q
TYPE_IMAGEUPLOADER=
TYPE_MARKER=m
TYPE_MOVESELECTION=Ctrl+M
TYPE_MOVE_DOWN=j
TYPE_MOVE_LEFT=h
TYPE_MOVE_RIGHT=l
TYPE_MOVE_UP=k
TYPE_OPEN_APP=o
TYPE_PENCIL=d
TYPE_PIN=Enter
TYPE_PIXELATE=p
TYPE_RECTANGLE=r
TYPE_REDO=Ctrl+r
TYPE_RESIZE_DOWN=Shift+j
TYPE_RESIZE_LEFT=Shift+h
-16
View File
@@ -1,16 +0,0 @@
git_protocol: ssh
prompt: enabled
aliases:
co: pr checkout
c: repo clone
f: repo fork
rc: repo create
rv: repo view
re: repo edit
rm: repo remove
rn: repo rename
lr: repo list
li: issue list
al: alias
al-: alias delete
version: "1"
-5
View File
@@ -1,5 +0,0 @@
[Settings]
gtk-font-name=Inter 12
gtk-application-prefer-dark-theme=true
gtk-icon-theme-name=Adwaita
gtk-theme-name=Adwaita
File diff suppressed because it is too large. Load diff
-32
View File
@@ -1,32 +0,0 @@
[General]
ConfigVersion=2
[Browser]
CustomProxyLocation=
Enabled=true
[GUI]
ApplicationTheme=dark
CompactMode=false
HidePreviewPanel=false
HideToolbar=false
MinimizeOnClose=true
MinimizeToTray=true
ShowTrayIcon=true
TrayIconAppearance=colorful
[KeeShare]
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
Foreign="<?xml version=\"1.0\"?>\n<KeeShare xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n <Foreign/>\n</KeeShare>\n"
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</PrivateKey><PublicKey><Signer>h</Signer><Key>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</Key></PublicKey></KeeShare>\n"
QuietSuccess=true
[PasswordGenerator]
AdditionalChars=
ExcludedChars=
Length=40
Logograms=true
WordCount=9
[SSHAgent]
Enabled=true
-20
View File
@@ -1,20 +0,0 @@
[Default Applications]
inode/x-empty=nvim.desktop
inode/directory=nvim.desktop
text/plain=nvim.desktop
text/html=firefoxdeveloperedition.desktop
image/gif=feh.desktop
image/jpeg=feh.desktop
image/png=feh.desktop
video/mp4=mpv.desktop
video/webm=mpv.desktop
model/stl=com.ultimaker.cura.desktop
application/pdf=org.pwmt.zathura.desktop
x-scheme-handler/msteams=teams-for-linux.desktop
x-scheme-handler/web+stremio=firefox.desktop
x-scheme-handler/http=firefoxdeveloperedition.desktop
x-scheme-handler/https=firefoxdeveloperedition.desktop
x-scheme-handler/chrome=firefoxdeveloperedition.desktop
x-scheme-handler/sidequest=SideQuest.desktop
x-scheme-handler/mailto=firefox.desktop
x-scheme-handler/webcal=firefox.desktop
Binary file not shown.
-15
View File
@@ -1,15 +0,0 @@
l seek +5
h seek -5
k seek +30
j seek -30
+ add video-zoom 0.1
- add video-zoom -0.1
= set video-zoom 0; set video-pan-x 0; set video-pan-y 0
H add video-pan-x 0.01
L add video-pan-x -0.01
K add video-pan-y 0.01
J add video-pan-y -0.01
m cycle mute
-16
View File
@@ -1,16 +0,0 @@
vo=gpu
profile=gpu-hq
hwdec=auto
msg-color=yes
cursor-autohide=300
cursor-autohide-fs-only=yes
save-position-on-quit=yes
keep-open=yes
# Custom osc
osc=no
cursor-autohide=3500
osd-bar=no
osc-vidscale=no
File diff suppressed because it is too large. Load diff
-39
View File
@@ -1,39 +0,0 @@
auto-reload yes
reload-threads 100
# color background color240 black
# color listnormal color238 black
# color listfocus white black
# color listnormal_unread color240 black bold
# color listfocus_unread default black bold
# color info default black
# color article default black
bind-key h quit articlelist
bind-key h quit article
bind-key h quit tagselection
bind-key h quit feedlist
bind-key j down feedlist
bind-key j down tagselection
bind-key j next articlelist
bind-key j down article
bind-key J next-feed articlelist
bind-key k up feedlist
bind-key k prev articlelist
bind-key k up tagselection
bind-key K prev-feed articlelist
bind-key k up article
bind-key l open articlelist
bind-key l open feedlist
bind-key l open tagselection
bind-key G end
bind-key g home
text-width 80
browser "brave"
macro m set browser "mpv %u"; open-in-browser ; set browser "brave"
show-title-bar false
show-keymap-hint false
-60
View File
@@ -1,60 +0,0 @@
context.properties = {}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = { nice.level = -11 }
flags = [ ifexists nofail ]
}
{ name = libpipewire-module-protocol-native }
{ name = libpipewire-module-client-node }
{ name = libpipewire-module-adapter }
{ name = libpipewire-module-metadata }
{ name = libpipewire-module-protocol-pulse
args = { }
}
]
context.exec = [
{ path = "pactl" args = "load-module module-always-sink" }
# Automatically switch to (bluetooth) headphones
{ path = "pactl" args = "load-module module-switch-on-connect" }
]
stream.properties = { }
pulse.properties = {
server.address = [ "unix:native" ]
vm.overrides = { pulse.min.quantum = 1024/48000 }
}
pulse.rules = [
{
matches = [ { } ]
actions = { update-props = { } }
}
{
matches = [
{ application.process.binary = "teams" }
{ application.process.binary = "teams-insiders" }
{ application.process.binary = "skypeforlinux" }
]
actions = { quirks = [ force-s16-info ] }
}
{
matches = [ { application.process.binary = "firefox" } ]
actions = { quirks = [ remove-capture-dont-move ] }
}
{
matches = [ { application.name = "~speech-dispatcher*" } ]
actions = {
update-props = {
pulse.min.req = 1024/48000 # 21ms
pulse.min.quantum = 1024/48000 # 21ms
}
}
}
]
-11
View File
@@ -1,11 +0,0 @@
[google-drive]
type = drive
scope = drive
token =
[onedrive-vub]
type = webdav
url =
vendor = sharepoint
user =
pass =
-71
View File
@@ -1,71 +0,0 @@
{
"101B:E2D1E989": {
"_name": "Marathon Mouse M705 (M-R0009)",
"side-scroll": true,
"smooth-scroll": true
},
"405E:C347528E": {
"_absent": [
"hi-res-scroll",
"lowres-smooth-scroll",
"smart-shift",
"thumb-scroll-mode",
"thumb-scroll-invert",
"onboard_profiles",
"report_rate",
"dpi",
"dpi-sliding",
"speed-change",
"backlight",
"backlight-timed",
"fn-swap",
"disable-keyboard-keys",
"divert-crown",
"crown-smooth",
"divert-gkeys",
"m-key-leds",
"mr-key-led",
"multiplatform",
"gesture2-gestures",
"gesture2-divert",
"gesture2-params"
],
"_modelId": "B015405E0000",
"_name": "M720 Triathlon Multi-Device Mouse",
"_sensitive": {
"change-host": true,
"divert-keys": true,
"hires-smooth-invert": false,
"hires-smooth-resolution": false,
"mouse-gestures": false,
"pointer_speed": false,
"reprogrammable-keys": true
},
"_serial": "C347528E",
"_unitId": "F204EB17",
"divert-keys": {
"208": 0,
"215": 0,
"82": 0,
"83": 0,
"86": 0,
"91": 0,
"93": 0
},
"hires-smooth-invert": false,
"hires-smooth-resolution": false,
"mouse-gestures": 0,
"pointer_speed": 195,
"reprogrammable-keys": {
"208": 208,
"80": 80,
"81": 81,
"82": 82,
"83": 83,
"86": 86,
"91": 91,
"93": 93
}
},
"_version": "1.1.2"
}
-4
View File
@@ -1,4 +0,0 @@
# Spotify cache size
The contents of `prefs.example` can be added to the `prefs` file in this
directory to change the cache size to 1GB.
-1
View File
@@ -1 +0,0 @@
storage.size=1024
@@ -1,11 +0,0 @@
[Unit]
Description=Save KeypassXC password database to cloud
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/h/.bin/save-passwddb
[Install]
WantedBy=multi-user.target
@@ -1,10 +0,0 @@
[Unit]
Description=Save Keepass password database to cloud daily
[Timer]
OnCalendar=daily
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target
-1
View File
@@ -1 +0,0 @@
enabled=False
-15
View File
@@ -1,15 +0,0 @@
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/"
XDG_DOWNLOAD_DIR="$HOME/dl"
XDG_DOCUMENTS_DIR="$HOME/doc"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_MUSIC_DIR="$HOME/"
XDG_PICTURES_DIR="$HOME/"
XDG_TEMPLATES_DIR="$HOME/"
XDG_VIDEOS_DIR="$HOME/"
-6
View File
@@ -1,6 +0,0 @@
---
extends: default
rules:
document-start: disable
comments-indentation: disable
-19
View File
@@ -1,19 +0,0 @@
# Keyboard configuration
Keyboard configuration for the Vortex Core 40% keyboard.
Generated using [TsFreddie's MPC tool](https://tsdo.in/much-programming-core/).
Note: this is assuming `Caps lock` is remapped to `Esc` on press and `Ctrl` on hold (e.g. using `caps2esc`).
## Layer 0
Macros are mainly used for shift, ctrl & alt modifiers.
![](l0.png)
## Layer 1
Lighting configuration layer with some macros for workspaces.
![](l1.png)
-101
View File
@@ -1,101 +0,0 @@
{
"config": {
"options": {},
"preferences": {
"ascii": "",
"asciiBibLaTeX": false,
"asciiBibTeX": true,
"autoAbbrev": false,
"autoExport": "immediate",
"autoExportDelay": 5,
"autoExportIdleWait": 10,
"autoExportPathReplaceDiacritics": false,
"autoExportPathReplaceDirSep": "-",
"autoExportPathReplaceSpace": " ",
"automaticTags": true,
"auxImport": false,
"baseAttachmentPath": "/home/h/doc/readings",
"biblatexExtendedDateFormat": true,
"biblatexExtendedNameFormat": true,
"biblatexExtractEprint": true,
"biblatexUsePrefix": true,
"bibtexEditionOrdinal": false,
"bibtexParticleNoOp": false,
"bibtexURL": "off",
"cache": true,
"cacheDelete": false,
"charmap": "",
"chinese": false,
"chineseSplitName": true,
"citeCommand": "cite",
"citekeyCaseInsensitive": true,
"citekeyFold": true,
"citekeyFormat": "zotero.clean",
"citekeyFormatEditing": "zotero.clean",
"citekeySearch": false,
"citekeyUnsafeChars": "\\\"#%'(),={}~",
"csquotes": "",
"DOIandURL": "both",
"exportBibTeXStrings": "off",
"exportBraceProtection": true,
"exportSort": "citekey",
"exportTitleCase": true,
"extraMergeCitekeys": false,
"extraMergeCSL": false,
"extraMergeTeX": false,
"fillKeyAfter": 1,
"git": "config",
"import": true,
"importBibTeXStrings": true,
"importCaseProtection": "as-needed",
"importCitationKey": true,
"importDetectURLs": true,
"importExtra": true,
"importJabRefAbbreviations": true,
"importJabRefStrings": true,
"importNoteToExtra": "",
"importPlaceEvent": "inproceedings,conference,presentation,talk",
"importSentenceCase": "on+guess",
"importSentenceCaseQuoted": true,
"importUnknownTexCommand": "ignore",
"itemObserverDelay": 5,
"jabrefFormat": 0,
"japanese": false,
"keyScope": "global",
"language": "langid",
"logEvents": false,
"mapMath": "",
"mapText": "",
"packages": "",
"parseParticles": true,
"patchDates": "dateadded=dateAdded, date-added=dateAdded, datemodified=dateModified, date-modified=dateModified",
"platform": "lin",
"postscript": "",
"postscriptOverride": "",
"preferencesOverride": "",
"qualityReport": false,
"quickCopyEta": "",
"quickCopyMode": "citekeys",
"quickCopyOrgMode": "zotero",
"quickCopyPandocBrackets": false,
"quickCopySelectLink": "zotero",
"rawImports": false,
"rawLaTag": "#LaTeX",
"relativeFilePaths": false,
"remigrate": false,
"resetKeyOnChange": false,
"scrubDatabase": false,
"separatorList": "and",
"separatorNames": "and",
"skipFields": "",
"skipWords": "a,ab,aboard,about,above,across,after,against,al,along,amid,among,an,and,anti,around,as,at,before,behind,below,beneath,beside,besides,between,beyond,but,by,d,da,das,de,del,dell,dello,dei,degli,della,dell,delle,dem,den,der,des,despite,die,do,down,du,during,ein,eine,einem,einen,einer,eines,el,en,et,except,for,from,gli,i,il,in,inside,into,is,l,la,las,le,les,like,lo,los,near,nor,of,off,on,onto,or,over,past,per,plus,round,save,since,so,some,sur,than,the,through,to,toward,towards,un,una,unas,under,underneath,une,unlike,uno,unos,until,up,upon,versus,via,von,while,with,within,without,yet,zu,zum",
"startupProgress": "popup",
"strings": "",
"stringsOverride": "",
"testing": false,
"verbatimFields": "url,doi,file,pdf,ids,eprint,/^verb[a-z]$/,groups,/^citeulike-linkout-[0-9]+$/, /^bdsk-url-[0-9]+$/",
"warnBulkModify": 10,
"warnTitleCased": false
}
}
}
-13
View File
@@ -1,13 +0,0 @@
# My dotfiles
To get started, run the following:
```
bash <(curl -s https://git.hektormisplon.xyz/hektor/dots/raw/branch/master/.bin/setup)
```
Note: will not set up *everything* (e.g. `/etc` configs, dependencies...), but
should get you up and running.
2025-10-04: I am migrating from Arch Linux to NixOS. For this transition, these
dotfiles are currently included as a subtree in my [NixOS repository](https://git.hektormisplon.xyz/hektor/nix).
Generated
+163 -87
View File
@@ -9,11 +9,11 @@
]
},
"locked": {
"lastModified": 1770259557,
"narHash": "sha256-EvZ09k9+mzXAngPzU2K7oLLUDlKoT1numb4bDb3Gtl4=",
"lastModified": 1792249008,
"narHash": "sha256-lk60ysBytg9QwroDcNRY5BXPWs2j6bgE+NQCps7T1Wc=",
"owner": "hercules-ci",
"repo": "arion",
"rev": "9b24cf65c72cb0e9616e437d55e1ac8e5c6bc715",
"rev": "b12c8655e62561e9f19f1c5a7b11ad3228318bb5",
"type": "github"
},
"original": {
@@ -100,11 +100,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1790189016,
"narHash": "sha256-6YGyJyFq6i4ZQ8/4gEwRk5RNFqCfK3bAqSsGvH7CrKA=",
"lastModified": 1791553562,
"narHash": "sha256-jp+gxgnCdMhpBxxBnOoHW5fRVc+C5rKCFHsP/afoh3w=",
"owner": "zhaofengli",
"repo": "colmena",
"rev": "4d2d652a81322c906b9d945c331715d6c088261f",
"rev": "e269669b798a361a521029d5d15e289124a15038",
"type": "github"
},
"original": {
@@ -122,11 +122,11 @@
"utils": "utils"
},
"locked": {
"lastModified": 1789404474,
"narHash": "sha256-UXFQ7tFiwn8sPz0EV4CBB2PCf/ZiGIHWn/6MXk81Lxs=",
"lastModified": 1792446739,
"narHash": "sha256-eINUtQW48bf9G3EYprthHMll8VDKxaXQP52TZFuwMmE=",
"owner": "serokell",
"repo": "deploy-rs",
"rev": "e760371d631165e7d8de5b0dcf148e21ec4c16f0",
"rev": "1cec0527bd09074bbee6d4461900ce5d58267217",
"type": "github"
},
"original": {
@@ -164,11 +164,11 @@
},
"locked": {
"dir": "pkgs/firefox-addons",
"lastModified": 1790136153,
"narHash": "sha256-hLMo0LbkS0su6U5D1ciIoB49azLTRy/UqHaX4Z+Tzrc=",
"lastModified": 1792468971,
"narHash": "sha256-jGMXYZz5D8ihBGTbHOvCF2zsQViDpY3+dy2u/BwQCE8=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "bd692aa479d856e65497faf8ca3f541aaaf76242",
"rev": "abb43a6f155c24abd663c2cc86e5ca43e070080c",
"type": "gitlab"
},
"original": {
@@ -226,6 +226,20 @@
"type": "github"
}
},
"flake-compat_3": {
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"revCount": 69,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@@ -234,11 +248,11 @@
]
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"lastModified": 1790898470,
"narHash": "sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"rev": "024633cd702b10285db5cb19b40ad48d2399ba60",
"type": "github"
},
"original": {
@@ -248,6 +262,24 @@
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"stylix",
@@ -310,11 +342,11 @@
]
},
"locked": {
"lastModified": 1790091288,
"narHash": "sha256-2dUuLTiQrf2gUFVLlayDq/hgluitplAMv6Y9bYwQQ+c=",
"lastModified": 1791909798,
"narHash": "sha256-VAhpCOmrun/KXimYfR8NM88bciKCui7CqHHhThSzgag=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "0d3997c4d3253505f77c9bcea63904bb575da3c5",
"rev": "1ba1dbfe28738c9a71c266be6efa5b89e75491a9",
"type": "github"
},
"original": {
@@ -344,16 +376,16 @@
},
"haskell-flake": {
"locked": {
"lastModified": 1675296942,
"narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=",
"lastModified": 1776367004,
"narHash": "sha256-P2E65OCyIe2EjIG30vWF0HseHxZb4oujGdFhQInQ9c8=",
"owner": "srid",
"repo": "haskell-flake",
"rev": "c2cafce9d57bfca41794dc3b99c593155006c71e",
"rev": "dd6bbc834f5942f3255d9f9d7b06dbf14b84f05c",
"type": "github"
},
"original": {
"owner": "srid",
"ref": "0.1.0",
"ref": "1.0.0",
"repo": "haskell-flake",
"type": "github"
}
@@ -361,19 +393,19 @@
"hecuba-services": {
"flake": false,
"locked": {
"lastModified": 1791511346,
"narHash": "sha256-npyjx4tE/j40WTsTITWz+ktBjedlcvrq3mPkvnZIfVA=",
"lastModified": 1793511960,
"narHash": "sha256-TvzuWcQVL4u2g8UhYdnfOwphDJ8bg1l/T31yFbKQbvc=",
"ref": "main",
"rev": "303a91dd8658fe6a4ffdaf2ce3a75a520af87fe5",
"rev": "16c8c8d4a1f96b83ba7d2440fde98ab7093f2556",
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor/hecuba-services"
"url": "ssh://git@github.com/hektor-org/hecuba-services"
},
"original": {
"type": "git",
"url": "ssh://git@github.com/hektor/hecuba-services",
"ref": "main",
"shallow": true
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor-org/hecuba-services"
}
},
"home-manager": {
@@ -383,11 +415,11 @@
]
},
"locked": {
"lastModified": 1790128814,
"narHash": "sha256-6Gm9q+wW3E4Ey4F6wEbJAwaMsEK6hvCYfTW7yY64ZfA=",
"lastModified": 1792495086,
"narHash": "sha256-TyoYH983Nsc++1scw0SoOEKshPSJWJDxK7tTmuZ974M=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "0b2f1129177f70c5f0f5d88bb53c49ca47d0bfc0",
"rev": "ec80131710bffcdf3b8498cf41f3a0579833b023",
"type": "github"
},
"original": {
@@ -417,22 +449,44 @@
"type": "github"
}
},
"nix-mineral": {
"inputs": {
"flake-compat": "flake-compat_3",
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1792339378,
"narHash": "sha256-2GSp02yOdG9BSvb0c9SW1nsMnUpjR1/WBKskGz0D+8g=",
"owner": "cynicsketch",
"repo": "nix-mineral",
"rev": "bcd361bb18fccc4297d668aa5e0d5e4ebd4918ce",
"type": "github"
},
"original": {
"owner": "cynicsketch",
"repo": "nix-mineral",
"type": "github"
}
},
"nix-secrets": {
"flake": false,
"locked": {
"lastModified": 1788786361,
"narHash": "sha256-u6qgw8xKHLdlC02HZnC89WzigADbXoO4mGsllMMj5FM=",
"lastModified": 1792706177,
"narHash": "sha256-MdLYOxV0xXvCtBU6mld3gL4iH7Mr+jGXH+ytAojVie8=",
"ref": "main",
"rev": "b560101cef698142dd15cacc222c2c6135b8ab04",
"rev": "1d855a9725603034b66b6f007b553f7347d101bc",
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor/nix-secrets"
"url": "ssh://git@github.com/hektor-org/nix-secrets"
},
"original": {
"ref": "main",
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor/nix-secrets"
"url": "ssh://git@github.com/hektor-org/nix-secrets"
}
},
"nixCats": {
@@ -476,11 +530,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1789978172,
"narHash": "sha256-FIRXajv1pPZ+l6On6ekkmcQ6le0Zi0ncRUoR3nB0vKA=",
"lastModified": 1792491056,
"narHash": "sha256-6n1Dn+WYtD8lprnSi+0k4FjbKfIVNG8lblpJ5MiiqXs=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "9ebcb7766700d7e006d9505247bd7ce0426f4232",
"rev": "efb6d0d5e2394c3c5416a18652808aba206c0988",
"type": "github"
},
"original": {
@@ -503,13 +557,28 @@
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1777168982,
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1790046670,
"narHash": "sha256-MYiI+CzL0tuWgRPjGsKCDHqYs2T3OzMlMQWOYWG0qso=",
"lastModified": 1792210252,
"narHash": "sha256-Mh0PUaIv4nFY+8wAGonaEh8iBzwsmdNlwjVHmFg1Biw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6774f7bc253789b113a4f39285dc0fa100abeacc",
"rev": "09063bd1f2b36fd9fd793c36dfade7bd40a93dfc",
"type": "github"
},
"original": {
@@ -550,9 +619,8 @@
"nixpkgs": [
"nixpkgs"
],
"plugins-atlas-nvim": "plugins-atlas-nvim",
"plugins-beancount-nvim": "plugins-beancount-nvim",
"plugins-diffview-nvim": "plugins-diffview-nvim",
"plugins-nvimkit-nvim": "plugins-nvimkit-nvim",
"plugins-shipwright-nvim": "plugins-shipwright-nvim",
"plugins-tailwind-fold-nvim": "plugins-tailwind-fold-nvim"
},
@@ -566,6 +634,22 @@
},
"parent": []
},
"plugins-atlas-nvim": {
"flake": false,
"locked": {
"lastModified": 1793732433,
"narHash": "sha256-z9Mnw/wU5ceuaMiIPJgtXDhw93w0y6MayWQtIYrlqaY=",
"owner": "emrearmagan",
"repo": "atlas.nvim",
"rev": "f78cfc45930d070e93be6d00e500292dfcc263c8",
"type": "github"
},
"original": {
"owner": "emrearmagan",
"repo": "atlas.nvim",
"type": "github"
}
},
"plugins-beancount-nvim": {
"flake": false,
"locked": {
@@ -582,38 +666,6 @@
"type": "github"
}
},
"plugins-diffview-nvim": {
"flake": false,
"locked": {
"lastModified": 1787574526,
"narHash": "sha256-twlMCrNKlkuoT3aQtZHVAZNw5zv1Y9McFYBt8+KgHZ4=",
"owner": "dlyongemallo",
"repo": "diffview.nvim",
"rev": "30afab604a0abe02dfd19e6fbb9153fd26fd2eb3",
"type": "github"
},
"original": {
"owner": "dlyongemallo",
"repo": "diffview.nvim",
"type": "github"
}
},
"plugins-nvimkit-nvim": {
"flake": false,
"locked": {
"lastModified": 1721393835,
"narHash": "sha256-MdmrhLHMxrn6upu1chjKyitPZ5WkCQtpI465AKJXDOA=",
"owner": "jamesblckwell",
"repo": "nvimkit.nvim",
"rev": "af363d22699760f66988e8d36539a5753039217a",
"type": "github"
},
"original": {
"owner": "jamesblckwell",
"repo": "nvimkit.nvim",
"type": "github"
}
},
"plugins-shipwright-nvim": {
"flake": false,
"locked": {
@@ -656,15 +708,39 @@
"git-hooks": "git-hooks",
"hecuba-services": "hecuba-services",
"home-manager": "home-manager",
"nix-mineral": "nix-mineral",
"nix-secrets": "nix-secrets",
"nixgl": "nixgl",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2",
"nvim": "nvim",
"scripts": "scripts",
"sops-nix": "sops-nix",
"stylix": "stylix"
}
},
"scripts": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1791756354,
"narHash": "sha256-oBlr1pCkDwCrHapNpoU+AgwI+3IjV0jzheRMjJyHEeA=",
"ref": "main",
"rev": "36cef91b740a2e183aae2d2735d22d73951fab52",
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor/scripts"
},
"original": {
"ref": "main",
"shallow": true,
"type": "git",
"url": "ssh://git@github.com/hektor/scripts"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
@@ -672,11 +748,11 @@
]
},
"locked": {
"lastModified": 1789890976,
"narHash": "sha256-GKwH3zpy7tartuJMG0Rv/xUsdetG1QLmTVv8UKgJLmA=",
"lastModified": 1792056300,
"narHash": "sha256-YU1LjDe1o2Ymg5zEiCHbmMXLkDCtxHQRiVqZ3nC5GGk=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "7214124c20c1542c90deb54af50e2f53ae02711f",
"rev": "44931708c62937c2b1bf7953902989fa5bb9ee1b",
"type": "github"
},
"original": {
@@ -687,11 +763,11 @@
},
"stable": {
"locked": {
"lastModified": 1790117938,
"narHash": "sha256-KgxFEzwzcmyNe4mqlYtsZjzy40mLcNVKtaeoCf5tCGg=",
"lastModified": 1791219833,
"narHash": "sha256-q8KNN9Zs/nau7Cc8+f5ZGJeMXmCQqm5+bgy5m/uYxmw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "bd495b825e5c4365131f9b744cce923d42c06158",
"rev": "1f623a1582190fa3ba3f5cea25aba925055d43eb",
"type": "github"
},
"original": {
@@ -708,7 +784,7 @@
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_2",
"flake-parts": "flake-parts_3",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
@@ -721,11 +797,11 @@
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1789937675,
"narHash": "sha256-/F9gQpAlPCxheQ9ht/5Fka2JEr/FfuOh9R7ySa9SAGc=",
"lastModified": 1791574276,
"narHash": "sha256-UMnLnZ3JlA7UTBNNNx1rNsXYoPP/cirXLCKGiQ/yDx8=",
"owner": "danth",
"repo": "stylix",
"rev": "abff36bfab11cbdcd0723f41c1b0921e211be6ac",
"rev": "2856c4c6a845b9bec98828ef197abe176e4806bb",
"type": "github"
},
"original": {
+17 -20
View File
@@ -6,6 +6,10 @@
nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
nix-mineral = {
url = "github:cynicsketch/nix-mineral";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
@@ -15,7 +19,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
nix-secrets = {
url = "git+ssh://git@github.com/hektor/nix-secrets?shallow=1&ref=main";
url = "git+ssh://git@github.com/hektor-org/nix-secrets?shallow=1&ref=main";
flake = false;
};
colmena = {
@@ -31,7 +35,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
hecuba-services = {
url = "git+ssh://git@github.com/hektor/hecuba-services?shallow=1&ref=main";
url = "git+ssh://git@github.com/hektor-org/hecuba-services?shallow=1&ref=main";
flake = false;
};
git-hooks = {
@@ -58,6 +62,10 @@
url = "path:./home/modules/nvim/config";
inputs.nixpkgs.follows = "nixpkgs";
};
scripts = {
url = "git+ssh://git@github.com/hektor/scripts?shallow=1&ref=main";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
@@ -70,12 +78,9 @@
...
}@inputs:
let
inherit (self) outputs;
inherit (inputs.nixpkgs) lib;
myUtils = import ./utils { inherit lib; };
hostDirNames = myUtils.dirNames ./hosts;
lib' = import ./lib { inherit lib; };
system = "x86_64-linux";
dotsPath = ./dots;
gitHooks = import ./git-hooks.nix {
inherit nixpkgs git-hooks system;
src = ./.;
@@ -83,22 +88,20 @@
in
{
nixosConfigurations =
(lib.genAttrs hostDirNames (
(lib.genAttrs lib'.nixosHosts (
host:
nixpkgs.lib.nixosSystem {
modules = [
./hosts/${host}
{
nixpkgs.hostPlatform = (myUtils.hostMeta ./hosts/${host}).system;
nixpkgs.hostPlatform = (lib'.hostMeta host).system;
host.name = host;
}
];
specialArgs = {
inherit
inputs
outputs
dotsPath
myUtils
lib'
;
};
}
@@ -116,9 +119,7 @@
specialArgs = {
inherit
inputs
outputs
dotsPath
myUtils
lib'
;
};
};
@@ -134,9 +135,7 @@
specialArgs = {
inherit
inputs
outputs
dotsPath
myUtils
lib'
;
};
};
@@ -153,9 +152,7 @@
osConfig = null;
inherit
inputs
outputs
dotsPath
myUtils
lib'
;
};
};
+16 -21
View File
@@ -9,6 +9,9 @@ let
pre-commit-check = git-hooks.lib.${system}.run {
inherit src;
default_stages = [ "pre-commit" ];
hooks = {
nixfmt = {
enable = true;
@@ -16,32 +19,24 @@ let
};
statix.enable = true;
deadnix.enable = true;
flake-check = {
enable = true;
entry = "${pkgs.lib.getExe pkgs.nix} flake check";
stages = [ "pre-push" ];
pass_filenames = false;
always_run = true;
};
};
};
in
{
checks = {
inherit pre-commit-check;
};
checks.pre-commit-check = pre-commit-check;
formatter =
let
inherit (pre-commit-check) config;
inherit (config) package configFile;
script = ''
${pkgs.lib.getExe package} run --all-files --config ${configFile}
'';
in
pkgs.writeShellScriptBin "pre-commit-run" script;
formatter = pkgs.nixfmt-tree;
devShells = {
default =
let
inherit (pre-commit-check) shellHook enabledPackages;
in
pkgs.mkShell {
inherit shellHook;
buildInputs = enabledPackages;
};
devShells.default = pkgs.mkShell {
inherit (pre-commit-check) shellHook;
packages = pre-commit-check.enabledPackages;
};
}
+14 -9
View File
@@ -16,19 +16,15 @@
homeDirectory = "/home/${config.host.username}";
};
xdg.userDirs.createDirectories = false;
xdg.userDirs.download = "${config.home.homeDirectory}/dl";
modules."3d" = {
printing.enable = true;
modeling.enable = true;
};
modules."3d".printing.enable = true;
ai-tools = {
claude-code.enable = true;
codex.enable = true;
opencode.enable = true;
};
anki.enable = true;
audio.enable = true;
bin.enable = true;
browser.primary = "librewolf";
cloud.hetzner.enable = true;
comms.signal.enable = true;
@@ -36,29 +32,38 @@
desktop.niri.enable = true;
devenv.enable = true;
direnv.enable = true;
docker.enable = true;
gaming.enable = true;
git = {
enable = true;
gitea.enable = true;
github.enable = true;
};
k8s.k9s.enable = true;
k8s = {
enable = true;
k9s.enable = true;
talos.enable = true;
};
keyboard.vortexCore.enable = true;
keepassxc.enable = true;
mpv.enable = true;
music.enable = true;
newsboat.enable = true;
nvim.enable = true;
pandoc.enable = true;
photography.enable = true;
reference-manager.enable = true;
scripts.enable = true;
secrets.enable = true;
shell = {
enable = true;
bash.aliases.lang-js = true;
bash.addBinToPath = true;
};
ssh.enable = true;
taskwarrior.enable = true;
terminal.enable = true;
torrenting.enable = true;
my.xdg.enable = true;
my.yubikey.enable = true;
zk.enable = true;
+6 -7
View File
@@ -15,11 +15,6 @@
homeDirectory = "/home/${config.host.username}";
};
xdg.userDirs = {
enable = false;
createDirectories = false;
};
modules."3d".printing.enable = true;
ai-tools = {
claude-code.enable = true;
@@ -28,6 +23,7 @@
anki.enable = true;
archiving.enable = true;
audio.enable = true;
bin.enable = true;
browser.enable = true;
browser.primary = "librewolf";
cloud.hetzner.enable = true;
@@ -35,6 +31,7 @@
desktop.niri.enable = true;
devenv.enable = true;
direnv.enable = true;
docker.enable = true;
git = {
enable = true;
gitea.enable = true;
@@ -42,22 +39,24 @@
};
k8s.k9s.enable = true;
keepassxc.enable = true;
mpv.enable = true;
music.enable = true;
newsboat.enable = true;
my.xdg.enable = true;
my.yubikey.enable = true;
nfc.enable = true;
nvim.enable = true;
pandoc.enable = true;
reference-manager.enable = true;
secrets.enable = true;
shell = {
enable = true;
bash.aliases.lang-js = true;
bash.addBinToPath = true;
};
ssh.enable = true;
deploy.enable = true;
taskwarrior.enable = true;
terminal.enable = true;
reference-manager.enable = true;
programs = {
home-manager.enable = true;
-1
View File
@@ -15,7 +15,6 @@ with pkgs;
parallel
pass
ripgrep
sops
tldr
tree
wget
+14 -9
View File
@@ -16,13 +16,7 @@
nixpkgs.config.allowUnfree = true;
xdg = {
systemDirs.config = [ "/etc/xdg" ];
userDirs = {
createDirectories = false;
download = "${config.home.homeDirectory}/dl";
};
};
xdg.systemDirs.config = [ "/etc/xdg" ];
home = {
stateVersion = "25.05";
@@ -70,11 +64,22 @@
k8s.enable = true;
keepassxc.enable = true;
music.enable = true;
my.dconf.enable = true;
my.stylix.enable = true;
my = {
dconf.enable = true;
stylix.enable = true;
xdg.enable = true;
};
nvim = {
enable = true;
colorscheme = "vscode";
# note: non-exhaustive (these are the ones that are not inferred from home
# module options atm)
languages = {
css = true;
html = true;
json = true;
tailwind = true;
};
};
pandoc.enable = true;
shell.enable = true;
+12 -1
View File
@@ -6,7 +6,18 @@
enable = lib.mkEnableOption "3D printing tools";
};
modeling = {
enable = lib.mkEnableOption "3D modeling tools";
blender = {
enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
openscad = {
enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
};
};
+6 -3
View File
@@ -6,10 +6,13 @@
}:
{
config = lib.mkIf config.modules."3d".modeling.enable {
home.packages = with pkgs; [
config = {
home.packages =
with pkgs;
lib.optionals config.modules."3d".modeling.blender.enable [
blender
openscad-lsp
]
++ lib.optionals config.modules."3d".modeling.openscad.enable [
openscad-unstable
];
};
+16 -35
View File
@@ -6,52 +6,33 @@
}:
let
cfg = config.ai-tools.claude-code;
rtk-version = "0.18.1";
in
{
config = lib.mkIf cfg.enable {
programs.claude-code.enable = true;
home.packages = with pkgs; [
(stdenv.mkDerivation {
name = "ccline";
src = fetchurl {
url = "https://github.com/Haleclipse/CCometixLine/releases/download/v1.0.8/ccline-linux-x64.tar.gz";
hash = "sha256-Joe3Dd6uSMGi66QT6xr2oY/Tz8rA5RuKa6ckBVJIzI0=";
(rustPlatform.buildRustPackage (finalAttrs: {
pname = "ccometixline";
version = "2.0.1";
src = fetchFromGitHub {
owner = "Haleclipse";
repo = "CCometixLine";
tag = "v${finalAttrs.version}";
hash = "sha256-tzEo+8M86C6EdN31rDVqt8+SCYqeEXRCVFsbtbW41XY=";
};
unpackPhase = "tar xzf $src";
installPhase = ''
mkdir -p $out/bin
cp ccline $out/bin/
chmod +x $out/bin/ccline
'';
cargoHash = "sha256-dTsuyklpaiYqp5Rq1Q7YUBrmQUH42ve2UY+MwUqF7Ek=";
checkFlags = [ "--skip=git::tests::detects_repositories_without_spawning_git" ];
postInstall = "mv $out/bin/ccometixline $out/bin/ccline";
meta = {
description = "CCometixLine Linux x64 CLI (Claude Code statusline)";
description = "CCometixLine (ccline) - Claude Code statusline tool";
homepage = "https://github.com/Haleclipse/CCometixLine";
license = lib.licenses.mit;
platforms = [ "x86_64-linux" ];
mainProgram = "ccline";
platforms = lib.platforms.unix;
};
})
(stdenv.mkDerivation {
name = "rtk-${rtk-version}";
version = rtk-version;
src = fetchurl {
url = "https://github.com/rtk-ai/rtk/releases/download/v${rtk-version}/rtk-x86_64-unknown-linux-gnu.tar.gz";
hash = "sha256-XoTia5K8b00OzcKYCufwx8ApkAS31DxUCpGSU0jFs2Q=";
};
unpackPhase = "tar xzf $src";
installPhase = ''
mkdir -p $out/bin
cp rtk $out/bin/
chmod +x $out/bin/rtk
'';
meta = {
description = "RTK - AI coding tool enhancer";
homepage = "https://www.rtk-ai.app";
license = lib.licenses.mit;
platforms = [ "x86_64-linux" ];
};
})
}))
rtk
mcp-nixos
];
};
+13
View File
@@ -0,0 +1,13 @@
{
lib,
config,
pkgs,
...
}:
{
config = lib.mkIf config.ai-tools.codex.enable {
programs.codex.enable = true;
home.packages = with pkgs; [ codex ];
};
}
+4
View File
@@ -20,6 +20,9 @@ in
default = [ ];
};
};
codex = {
enable = lib.mkEnableOption "codex";
};
opencode = {
enable = lib.mkEnableOption "opencode";
};
@@ -31,6 +34,7 @@ in
imports = [
./claude-code.nix
./fabric.nix
./codex.nix
./opencode.nix
./skills.nix
./tirith.nix
+13 -11
View File
@@ -6,25 +6,27 @@
}:
let
cfg = config.ai-tools.opencode;
authReady = config.secrets.templatePath ? "opencode/auth.json";
in
{
config = lib.mkIf cfg.enable {
config = lib.mkIf config.ai-tools.opencode.enable {
secrets.files.opencode = [ "api-key" ];
secrets.templates."opencode/auth.json" = {
path = ".local/share/opencode/auth.json";
content = ''
{
"zai-coding-plan": {
"type": "api",
"key": "${config.sops.placeholder."opencode/api-key"}"
}
}
'';
content = builtins.toJSON {
zai-coding-plan = {
type = "api";
key = config.sops.placeholder."opencode/api-key";
};
};
};
home.packages = [ pkgs.opencode ];
warnings =
lib.optional (!authReady)
"opencode is enabled but its auth template is unavailable. the opencode API key will not be configured.";
home.packages = [ pkgs.opencode ];
home.file.".config/opencode/opencode.json".text = builtins.toJSON {
"$schema" = "https://opencode.ai/config.json";
permission = {
+14 -19
View File
@@ -2,33 +2,29 @@
config,
lib,
pkgs,
myUtils,
osConfig ? null,
inputs ? null,
...
}:
let
cfg = config.anki;
sops = myUtils.sopsAvailability config osConfig;
standalone = osConfig == null;
syncReady = config.secrets.path ? "anki/sync-user" && config.secrets.path ? "anki/sync-key";
in
{
options.anki.enable = lib.mkEnableOption "Anki";
options.anki.reviewsCache = lib.mkOption {
default = "/tmp/anki-reviews";
type = lib.types.str;
};
config = lib.mkIf cfg.enable (
lib.optionalAttrs standalone {
sops.secrets = myUtils.mkSopsSecrets "${toString inputs.nix-secrets}/secrets" {
anki = [
config = lib.mkIf cfg.enable {
secrets.files.anki = [
"sync-user"
"sync-key"
];
};
}
// {
warnings = lib.optional (
!sops.available
) "anki is enabled but sops secrets are not available. anki sync will not be configured.";
!syncReady
) "anki is enabled but its secrets are unavailable. anki sync will not be configured.";
programs.anki = {
enable = true;
@@ -48,14 +44,13 @@ in
puppy-reinforcement
review-heatmap
];
profiles."User 1".sync = lib.mkIf sops.available {
usernameFile = "${sops.secrets."anki/sync-user".path}";
keyFile = "${sops.secrets."anki/sync-key".path}";
profiles."User 1".sync = lib.mkIf syncReady {
usernameFile = config.secrets.path."anki/sync-user";
keyFile = config.secrets.path."anki/sync-key";
};
};
# allow Anki to write prefs
home.file."${config.xdg.dataHome}/Anki2/prefs21.db".enable = lib.mkForce false;
}
);
};
}
+87
View File
@@ -0,0 +1,87 @@
{
config,
lib,
pkgs,
...
}:
let
script =
name: args:
pkgs.writeShellApplication (
{
inherit name;
text = builtins.readFile ./scripts/${name};
}
// args
);
pythonScript =
name: runtimeInputs:
pkgs.writeShellApplication {
inherit name runtimeInputs;
text = ''exec ${lib.getExe pkgs.python3} ${pkgs.writeTextDir name (builtins.readFile ./scripts/${name})}/${name} "$@"'';
};
ssh-hosts = script "ssh-hosts" {
runtimeInputs = with pkgs; [
gnugrep
gawk
];
};
scripts = with pkgs; {
bak.runtimeInputs = [ coreutils ];
notify.runtimeInputs = [ libnotify ];
pdftitle.runtimeInputs = [
poppler-utils
gawk
coreutils
];
fzf-book.runtimeInputs = [
findutils
fzf
coreutils
];
fzf-ssh.runtimeInputs = [
ssh-hosts
fzf
];
save-ssh-host = {
runtimeInputs = [
ssh-hosts
fzf
];
excludeShellChecks = [ "SC2029" ];
};
fzf-fontnames.runtimeInputs = [
fontconfig
fzf
gawk
coreutils
];
get-anki-decks.runtimeInputs = [
curl
jq
];
get-anki-reviews-status = {
runtimeInputs = [ coreutils ];
runtimeEnv.ANKI_REVIEWS = config.anki.reviewsCache;
};
};
pythonScripts = with pkgs; {
pomo = [ libnotify ];
taskdeps = [ ];
};
in
{
options.bin.enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
config = lib.mkIf config.bin.enable {
home.packages = [
ssh-hosts
]
++ lib.mapAttrsToList script scripts
++ lib.mapAttrsToList pythonScript pythonScripts;
};
}
@@ -1,5 +1,3 @@
#!/usr/bin/env bash
# back up a file by copying it to a new file with a .bak extension
# reference: https://askubuntu.com/questions/962489/is-there-any-way-to-create-backup-copy-of-a-file-without-type-its-name-twice
@@ -1,10 +1,8 @@
#!/usr/bin/env bash
# Generate menu of book filenames and save paths
# Preview window contains metadata
function get_book_paths {
find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort
find "$HOME/doc/books/" -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort
}
function select_file {
@@ -21,10 +19,8 @@ function open {
fi
}
case "$1" in
case "${1:-}" in
--open) open "$(select_file)" ;;
--help) printf "open \n" >&2 ;;
*) open "$(select_file)" ;;
esac
[[ -n "$selected" ]] && xdg-open "$selected" &> /dev/null & disown
@@ -1,5 +1,3 @@
#!/usr/bin/env bash
fn="/tmp/fontnames.txt"
contains_dash() {
@@ -7,16 +5,16 @@ contains_dash() {
}
update() {
echo "" > "$fn"
: > "$fn"
font_list=$(fc-list -f "%{fullname}\n")
echo "$font_list" | while read line ; do
echo "$font_list" | while read -r line ; do
first="$(echo "$line" | cut -d',' -f1)"
last="$(echo "$line" | cut -d',' -f2)"
if $(contains_dash "$first"); then
if contains_dash "$first"; then
echo "$last" >> "$fn"
else
echo "$first" >> "$fn"
@@ -24,7 +22,7 @@ update() {
done
}
case "$1" in
case "${1:-}" in
--update) update;;
*) cat "$fn" | sort | uniq | awk 'NF' | fzf;;
*) sort -u "$fn" | awk 'NF' | fzf;;
esac
@@ -1,3 +1 @@
#!/usr/bin/env bash
ssh "$(ssh-hosts | fzf)"
@@ -1,3 +1 @@
#!/usr/bin/env bash
curl 127.0.0.1:8765 -X POST -d '{"action": "deckNames", "version": 6}' | jq '.result[]' -r
@@ -1,8 +1,6 @@
#!/usr/bin/env bash
# Get Anki review status from exit code
num_reviews="$(cat /tmp/anki-reviews)"
num_reviews="$(cat "$ANKI_REVIEWS")"
if [ "$num_reviews" -ge "400" ]
then
@@ -1,8 +1,6 @@
#!/usr/bin/env bash
# Pipe into notify-send
#
# e.g. `echo "Hello world" | notify`
read -r msg
read -r msg || true
notify-send "$msg" "$@"
@@ -1,3 +1 @@
#!/usr/bin/env bash
pdfinfo "$1" | head -n 1 | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'
@@ -10,11 +10,11 @@ Pomodoro timer
import atexit
import os
import signal
import subprocess
from argparse import ArgumentParser
from time import sleep
from plyer import notification
POMO_PATH = os.path.join(
os.getenv("XDG_DATA_HOME", os.path.expanduser("~/.local/share")), "pomo"
)
@@ -30,34 +30,28 @@ def format_mins_secs(mins, secs):
return f"{mins:02d}:{secs:02d}"
def make_countdown():
def countdown(duration):
while duration != 0:
mins = duration // 60
secs = duration % 60
time_str = format_mins_secs(mins, secs)
os.system(f'echo -n "{time_str}" > {POMO_PATH}')
with open(POMO_PATH, "w") as f:
f.write(format_mins_secs(mins, secs))
sleep(1)
duration -= 1
return countdown
def main(args):
work_duration = args.work_duration * 60
break_duration = args.break_duration * 60
repeats = args.repeats
work_countdown = make_countdown()
break_countdown = make_countdown()
while repeats != 0:
notification.notify(title="Get started")
work_countdown(work_duration)
subprocess.run(["notify-send", "Get started"])
countdown(work_duration)
if break_duration != 0:
notification.notify(title="Time for a break")
break_countdown(break_duration)
notification.notify(title="Break is over, back to work")
subprocess.run(["notify-send", "Time for a break"])
countdown(break_duration)
subprocess.run(["notify-send", "Break is over, back to work"])
repeats -= 1
@@ -84,4 +78,10 @@ if __name__ == "__main__":
args = parser.parse_args()
signal.signal(signal.SIGINT, handle_signal)
signal.signal(signal.SIGTERM, handle_signal)
if args.clear:
clear()
else:
main(args)
@@ -1,5 +1,3 @@
#!/usr/bin/env bash
selected_hosts="$(ssh-hosts | fzf -m)"
for host in $selected_hosts; do
+1
View File
@@ -0,0 +1 @@
grep -E 'Host [a-z0-9\-]*$' ~/.ssh/config | awk '{print $2}'
@@ -7,12 +7,8 @@ from collections import defaultdict
def get_task_data():
command = (
"task +PENDING or +WAITING -COMPLETED -DELETED export | "
"jq '[.[] | {uuid: .uuid, id, depends: .depends, description: .description, status: .status }]'"
)
output = subprocess.check_output(command, shell=True)
return json.loads(output)
command = ["task", "+PENDING", "or", "+WAITING", "-COMPLETED", "-DELETED", "export"]
return json.loads(subprocess.check_output(command))
def parse_task_data(data):
@@ -27,8 +23,7 @@ def parse_task_data(data):
"description": task.get("description", "No description"),
"status": task.get("status", "Unknown status"),
}
if task["depends"]:
for dependency in task["depends"]:
for dependency in task.get("depends", []):
dependency_graph[dependency].append(task_id)
dependent_tasks.add(task_id)
@@ -36,52 +31,6 @@ def parse_task_data(data):
return task_details, dependency_graph, root_tasks
def get_all_parents(task_id, dependency_graph):
return [
parent for parent, children in dependency_graph.items() if task_id in children
]
def build_ascii_dag(
task_id,
task_details,
dependency_graph,
prefix="",
is_last=True,
show_id=True,
visited=None,
):
if visited is None:
visited = set()
if task_id in visited:
return [f"{prefix}{'└── ' if is_last else '├── '}... (cycle detected)"]
visited.add(task_id)
task_info = task_details[task_id]
task_line = f"{prefix}{'└── ' if is_last else '├── '}{task_info['id'] + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
lines = [task_line]
children = dependency_graph.get(task_id, [])
for idx, child in enumerate(children):
child_is_last = idx == len(children) - 1
child_prefix = prefix + (" " if is_last else "│ ")
lines.extend(
build_ascii_dag(
child,
task_details,
dependency_graph,
child_prefix,
child_is_last,
show_id,
visited.copy(),
)
)
return lines
def render_dependency_dag(task_details, dependency_graph, root_tasks, show_id):
dag_lines = []
global_visited = set()
+1
View File
@@ -9,6 +9,7 @@
./firefox.nix
./librewolf.nix
./chromium.nix
./tridactyl.nix
];
options.browser = {
+4
View File
@@ -53,6 +53,10 @@ in
};
policies = {
DefaultDownloadDirectory = "\${home}/dl";
"3rdparty".Extensions."keepassxc-browser@keepassxc.org".settings = {
defaultGroup = "browser";
defaultPasskeyGroup = "browser";
};
ExtensionSettings = {
"jid1-ZAdIEUB7XOzOJw@jetpack" = {
default_area = "navbar";
+17
View File
@@ -0,0 +1,17 @@
{
config,
lib,
...
}:
let
browsers = [
config.browser.primary
config.browser.secondary
];
in
{
config = lib.mkIf (lib.elem "firefox" browsers || lib.elem "librewolf" browsers) {
xdg.configFile."tridactyl/tridactylrc".source = ./tridactylrc;
};
}
File renamed without changes.
+7 -2
View File
@@ -2,14 +2,14 @@
config,
lib,
pkgs,
myUtils,
lib',
...
}:
{
imports =
let
dirs = myUtils.dirNames ./.;
dirs = lib'.dirNames ./.;
hasDef = name: builtins.pathExists ./${name}/default.nix;
in
map (name: ./${name}) (builtins.filter hasDef dirs);
@@ -20,6 +20,11 @@
default = config.home.username;
};
readings.path = lib.mkOption {
default = "${config.home.homeDirectory}/doc/readings";
type = lib.types.str;
};
nixgl.wrap = lib.mkOption {
type = lib.types.functionTo lib.types.package;
default = if config.lib ? nixGL then config.lib.nixGL.wrap else lib.id;
+4 -5
View File
@@ -3,23 +3,22 @@
lib,
pkgs,
inputs,
myUtils,
lib',
...
}:
let
cfg = config.deploy;
hostDir = ../../../hosts;
hostNames = myUtils.dirNames hostDir;
inherit (lib') hostNames;
hostsWithKeys = lib.filter (
hostname: builtins.pathExists (hostDir + "/${hostname}/ssh_host.pub")
hostname: builtins.pathExists (lib'.hostsPath + "/${hostname}/ssh_host.pub")
) hostNames;
colmena = inputs.colmena.packages.${pkgs.stdenv.hostPlatform.system}.colmena;
deployRs = inputs.deploy-rs.packages.${pkgs.stdenv.hostPlatform.system}.default;
hostTags = hostname: (myUtils.hostMeta (hostDir + "/${hostname}")).tags;
hostTags = hostname: (lib'.hostMeta hostname).tags;
nodeTagsDecl = ''
declare -A _colmena_node_tags=(
${lib.concatMapStringsSep "\n" (
+44 -53
View File
@@ -1,22 +1,24 @@
{
config,
inputs,
lib,
myUtils,
osConfig ? null,
...
}:
let
cfg = config.git;
sops = myUtils.sopsAvailability config osConfig;
standalone = osConfig == null;
identities = [
"personal"
"work"
];
personalEmail = sops.templates.".gitconfig.email".path;
workEmail = sops.templates.".gitconfig.work.email".path;
emailTemplate = key: ".gitconfig.${key}.email";
emailInclude =
key:
lib.optionalAttrs (config.secrets.templatePath ? ${emailTemplate key}) {
include.path = config.secrets.templatePath.${emailTemplate key};
};
workSettings = {
include.path = workEmail;
workSettings = emailInclude "work" // {
core.longpaths = true;
user = {
name = "Hektor Misplon";
@@ -47,42 +49,29 @@ in
./gitlab.nix
];
config = lib.mkIf cfg.enable (
lib.optionalAttrs standalone {
sops = {
secrets = myUtils.mkSopsSecrets "${toString inputs.nix-secrets}/secrets" {
email = [
"personal"
"work"
];
};
config = lib.mkIf cfg.enable {
secrets.files.email = identities;
templates = {
".gitconfig.email".content = ''
secrets.templates = lib.genAttrs' identities (
key:
lib.nameValuePair (emailTemplate key) {
content = ''
[user]
email = ${config.sops.placeholder."email/personal"}
email = ${config.sops.placeholder."email/${key}"}
'';
".gitconfig.work.email".content = ''
[user]
email = ${config.sops.placeholder."email/work"}
'';
};
};
}
// {
assertions = [
{
assertion = config.nvim.enable;
message = "git module requires 'nvim' module (`nvimdiff`)";
}
];
);
warnings = lib.optional (
!config.nvim.enable
) "'git.enable' is enabled without 'nvim.enable' (not using 'nvimdiff')";
xdg.configFile."git/ignore".source = ./global.gitignore;
programs.git = {
enable = true;
settings = {
core.editor = "nvim";
settings = lib.mkMerge [
{
user = {
name = "Hektor Misplon";
username = "hektor";
@@ -146,27 +135,30 @@ in
date = "relative";
abbrevCommit = true;
};
merge = {
tool = "nvimdiff";
conflictStyle = "diff3";
};
diff = {
colorMoved = "zebra";
tool = "nvimdiff";
};
merge.conflictStyle = "diff3";
diff.colorMoved = "zebra";
commit.gpgSign = false;
interactive.singleKey = true;
pull.rebase = true;
rerere.enabled = true;
}
(lib.mkIf config.nvim.enable {
core.editor = "nvim";
diff.tool = "nvimdiff";
merge.tool = "nvimdiff";
difftool.prompt = false;
mergetool = {
prompt = false;
keepBackup = false;
};
commit.gpgSign = false;
interactive.singleKey = true;
pull.rebase = true;
rerere.enabled = true;
};
})
];
includes = [
{ path = personalEmail; }
includes =
lib.optional (config.secrets.templatePath ? ${emailTemplate "personal"}) {
path = config.secrets.templatePath.${emailTemplate "personal"};
}
++ [
{
condition = "gitdir:~/work/";
contents = workSettings;
@@ -179,6 +171,5 @@ in
}
];
};
}
);
};
}
+21 -1
View File
@@ -6,6 +6,26 @@
{
config = lib.mkIf (config.git.enable && config.git.github.enable) {
programs.gh.enable = true;
programs.gh = {
enable = true;
settings = {
git_protocol = "ssh";
prompt = "enabled";
aliases = {
co = "pr checkout";
c = "repo clone";
f = "repo fork";
rc = "repo create";
rv = "repo view";
re = "repo edit";
rm = "repo remove";
rn = "repo rename";
lr = "repo list";
li = "issue list";
al = "alias";
al- = "alias delete";
};
};
};
};
}
+1 -4
View File
@@ -13,10 +13,7 @@
config = lib.mkIf config.go.enable {
home = {
sessionVariables.GOPATH = "${config.xdg.dataHome}/go";
packages = with pkgs; [
go
gopls
];
packages = with pkgs; [ go ];
};
};
}
+12
View File
@@ -0,0 +1,12 @@
{
config,
lib,
pkgs,
...
}:
{
config = lib.mkIf config.k8s.crossplane.enable {
home.packages = [ pkgs.upbound ];
};
}
+14 -1
View File
@@ -18,11 +18,25 @@ in
k9s = {
enable = lib.mkEnableOption "k9s";
};
crossplane = {
enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
talos = {
enable = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
};
imports = [
./crossplane.nix
./helm.nix
./k9s.nix
./talos.nix
];
config = lib.mkIf cfg.enable {
@@ -36,7 +50,6 @@ in
kubectl
kustomize
opentofu
upbound
];
programs.kubecolor = {
+12
View File
@@ -0,0 +1,12 @@
{
config,
lib,
pkgs,
...
}:
{
config = lib.mkIf config.k8s.talos.enable {
home.packages = [ pkgs.talosctl ];
};
}
+16
View File
@@ -0,0 +1,16 @@
{
config,
lib,
...
}:
{
options.keyboard.vortexCore.enable = lib.mkEnableOption "Vortex Core keyboard configuration files";
config = lib.mkIf config.keyboard.vortexCore.enable {
home.file.".vortex-core" = {
source = ./vortex-core;
recursive = true;
};
};
}
Loaded 100 of 187 files, more files were not shown because too many files have changed in this diff. Show more