Compare commits
41 Commits
Author | SHA1 | Date |
---|---|---|
Frieder Schlesier | a37efb9245 | |
Frieder Schlesier | aaa97a3b9b | |
Frieder Schlesier | f5ada520af | |
Frieder Schlesier | 9d81950832 | |
Frieder Schlesier | 193254990d | |
Frieder Schlesier | 244462d22d | |
Frieder Schlesier | e5897b247f | |
Frieder Schlesier | c83df245af | |
Frieder Schlesier | 6d4354f2f5 | |
Frieder Schlesier | 088f7945c3 | |
Frieder Schlesier | ac52ab8dc1 | |
Frieder Schlesier | bd28518f0d | |
Frieder Schlesier | 05d5e6d6b1 | |
Frieder Schlesier | 1eb7de5772 | |
Frieder Schlesier | 502204ce8b | |
Frieder Schlesier | f764bfc86d | |
Frieder Schlesier | fa19de0f0f | |
Frieder Schlesier | 8d9be295c1 | |
Frieder Schlesier | f0f7764462 | |
Frieder Schlesier | 4dc517442c | |
Frieder Schlesier | 919381562f | |
Frieder Schlesier | c6f10afe64 | |
Frieder Schlesier | 47d8848fb1 | |
Frieder Schlesier | e8690220d7 | |
Frieder Schlesier | 340573426b | |
Frieder Schlesier | 4b572decbd | |
Frieder Schlesier | 024feceb44 | |
Frieder Schlesier | e0e2b2e103 | |
fschl | e75c2725a7 | |
fschl | a442149f79 | |
fschl | 563e30c228 | |
Frieder Schlesier | ac67e3405b | |
Frieder Schlesier | bbe7734631 | |
Frieder Schlesier | 092c4424af | |
Frieder Schlesier | 029f58c1b3 | |
Frieder Schlesier | b9d5240175 | |
Frieder Schlesier | c828cd5014 | |
Frieder Schlesier | 96ad907232 | |
Frieder Schlesier | 6b49ef4e19 | |
Frieder Schlesier | 5f7113ec21 | |
Frieder Schlesier | e01c87419e |
10
.aliases
10
.aliases
|
@ -7,17 +7,18 @@ alias up='sudo apt update && sudo apt upgrade'
|
||||||
alias upnodock='sudo apt-mark hold docker-ce docker-ce-cli && sudo apt update && sudo apt upgrade && sudo apt-mark unhold docker-ce docker-ce-cli'
|
alias upnodock='sudo apt-mark hold docker-ce docker-ce-cli && sudo apt update && sudo apt upgrade && sudo apt-mark unhold docker-ce docker-ce-cli'
|
||||||
|
|
||||||
alias o='xdg-open'
|
alias o='xdg-open'
|
||||||
|
alias s='kitty +kitten ssh'
|
||||||
|
alias ssh='kitty +kitten ssh'
|
||||||
alias cat='bat'
|
alias cat='bat'
|
||||||
# alias rg='ripgrep'
|
# alias rg='ripgrep'
|
||||||
alias ll='ls -ahlF'
|
alias ll='eza -ahlF'
|
||||||
alias la='ls -Ah'
|
alias la='eza -Ah'
|
||||||
alias l='ls -CF'
|
|
||||||
alias feh='feh -d --scale-down'
|
alias feh='feh -d --scale-down'
|
||||||
alias camshot='fswebcam -r 640x480 --jpeg 90 -F 3 -D 1 --no-banner'
|
alias camshot='fswebcam -r 640x480 --jpeg 90 -F 3 -D 1 --no-banner'
|
||||||
|
|
||||||
alias ta='tmux attach'
|
alias ta='tmux attach'
|
||||||
|
|
||||||
alias sk='sh ~/projects/home-infra/tools/goking.sh'
|
alias sk='sh ~/git/home-infra/tools/goking.sh'
|
||||||
alias wgfsu='sudo wg-quick up fschl-vpn'
|
alias wgfsu='sudo wg-quick up fschl-vpn'
|
||||||
alias wgfsd='sudo wg-quick down fschl-vpn'
|
alias wgfsd='sudo wg-quick down fschl-vpn'
|
||||||
|
|
||||||
|
@ -32,6 +33,7 @@ alias act='sudo systemctl -l -t service --state=active'
|
||||||
alias fai='sudo systemctl -l -t service --state=failed'
|
alias fai='sudo systemctl -l -t service --state=failed'
|
||||||
|
|
||||||
# basic docker shortcuts
|
# basic docker shortcuts
|
||||||
|
alias docker='podman'
|
||||||
alias dps='docker container ls -a'
|
alias dps='docker container ls -a'
|
||||||
alias di='docker image ls'
|
alias di='docker image ls'
|
||||||
alias dv='docker volume '
|
alias dv='docker volume '
|
||||||
|
|
|
@ -108,21 +108,20 @@ set $WS9 "9 "
|
||||||
|
|
||||||
assign [class="^Firefox$"] $WS1
|
assign [class="^Firefox$"] $WS1
|
||||||
assign [class="^DebugScreen"] $WS3
|
assign [class="^DebugScreen"] $WS3
|
||||||
assign [class="^Eclipse$"] $WS5
|
|
||||||
assign [class="^Thunderbird$"] $WS4
|
assign [class="^Thunderbird$"] $WS4
|
||||||
assign [class=".*ee.*ass.*"] $WS8
|
assign [class=".*ee.*ass.*"] $WS8
|
||||||
|
|
||||||
# https://faq.i3wm.org/question/3726/workspace-output-multiple-values/index.html%3Fanswer=3731.html#post-id-3731
|
# https://faq.i3wm.org/question/3726/workspace-output-multiple-values/index.html%3Fanswer=3731.html#post-id-3731
|
||||||
# set $LAPTOP LVDS-1
|
set $LAPTOP LVDS-1
|
||||||
set $CENTER DP-0
|
set $CENTER DP-1
|
||||||
set $RIGHT DP-3
|
set $RIGHT VGA-1
|
||||||
set $LEFT DVI-D-0
|
set $LEFT HDMI-1
|
||||||
|
|
||||||
# monitor settings
|
# monitor settings
|
||||||
bindsym $mod+m mode "monitor"
|
bindsym $mod+m mode "monitor"
|
||||||
mode "monitor" {
|
mode "monitor" {
|
||||||
# only laptop
|
# only laptop
|
||||||
bindsym 1 exec xrandr --output $LAPTOP --auto --primary --output $CENTER --off $RIGHT --off
|
bindsym 1 exec xrandr --output $LAPTOP --auto --primary --output $CENTER --off --output $LEFT --off
|
||||||
# CENTER main, RIGHT secondary
|
# CENTER main, RIGHT secondary
|
||||||
bindsym 2 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --off
|
bindsym 2 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --off
|
||||||
# HDMI main, laptop left, VGA right, *not* supported on X230
|
# HDMI main, laptop left, VGA right, *not* supported on X230
|
||||||
|
@ -211,9 +210,10 @@ mode "resize" {
|
||||||
bindsym $mod+r mode "resize"
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
bar {
|
bar {
|
||||||
font pango:DejaVu Sans, FontAwesome 9
|
font pango:DejaVu Sans, FontAwesome 7
|
||||||
# position top
|
# position top
|
||||||
output $CENTER
|
output $LAPTOP
|
||||||
|
# output $CENTER
|
||||||
status_command /usr/bin/i3status-rs /home/fschl/dotfiles/.i3/status-rust.toml
|
status_command /usr/bin/i3status-rs /home/fschl/dotfiles/.i3/status-rust.toml
|
||||||
colors {
|
colors {
|
||||||
separator #166616
|
separator #166616
|
||||||
|
@ -227,7 +227,7 @@ bar {
|
||||||
}
|
}
|
||||||
|
|
||||||
bar {
|
bar {
|
||||||
output $RIGHT
|
# output $RIGHT
|
||||||
output $LEFT
|
output $LEFT
|
||||||
status_command i3status --config ~/.i3/status_small.conf
|
status_command i3status --config ~/.i3/status_small.conf
|
||||||
tray_output $CENTER
|
tray_output $CENTER
|
||||||
|
@ -235,10 +235,10 @@ bar {
|
||||||
|
|
||||||
# startup programs
|
# startup programs
|
||||||
exec --no-startup-id nm-applet
|
exec --no-startup-id nm-applet
|
||||||
exec --no-startup-id xrandr --output $CENTER --primary --auto --output $RIGHT --auto --right-of $CENTER --rotate left --output $LAPTOP --off --output $LEFT --auto --left-of $CENTER --rotate right
|
exec --no-startup-id xrandr --output $LAPTOP --primary --auto --output $RIGHT --auto --right-of $CENTER --rotate left --output $CENTER --off --output $LEFT --auto --left-of $CENTER --rotate right
|
||||||
exec --no-startup-id i3-msg 'workspace $WS1; exec firefox;'
|
exec --no-startup-id i3-msg 'workspace $WS1; exec firefox;'
|
||||||
exec --no-startup-id i3-msg 'workspace $WS2; exec emacs'
|
exec --no-startup-id i3-msg 'workspace $WS2; exec emacs'
|
||||||
exec --no-startup-id i3-msg 'exec thunderbird'
|
# exec --no-startup-id i3-msg 'exec thunderbird'
|
||||||
exec --no-startup-id i3-msg 'exec keepassxc'
|
exec --no-startup-id i3-msg 'exec keepassxc'
|
||||||
exec --no-startup-id i3-msg 'workspace $WS5; exec kitty;'
|
exec --no-startup-id i3-msg 'workspace $WS3; exec kitty;'
|
||||||
|
|
|
@ -1,19 +1,26 @@
|
||||||
[theme]
|
[theme]
|
||||||
name = "semi-native"
|
# name = "semi-native"
|
||||||
# theme = "solarized-dark"
|
name = "solarized-dark"
|
||||||
[theme.overrides]
|
[theme.overrides]
|
||||||
separator = "<span font='5'>|</span>"
|
separator = "<span font='5'>|</span>"
|
||||||
[icons]
|
[icons]
|
||||||
name = "awesome"
|
name = "awesome"
|
||||||
|
|
||||||
|
# https://github.com/greshake/i3status-rust/blob/master/doc/blocks.md
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "pomodoro"
|
block = "pomodoro"
|
||||||
length = 25
|
length = 25
|
||||||
break_length = 5
|
break_length = 5
|
||||||
message = "Take a break!"
|
message = " Take a break!"
|
||||||
break_message = "Back to work!"
|
break_message = "Back to work!"
|
||||||
notifier = "swaynag"
|
notifier = "i3nag"
|
||||||
|
[icons.overrides]
|
||||||
|
pomodoro = ""
|
||||||
|
pomodoro_started = ""
|
||||||
|
pomodoro_stopped = "⏹"
|
||||||
|
pomodoro_paused = "⏸"
|
||||||
|
pomodoro_break = ""
|
||||||
|
|
||||||
|
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "disk_space"
|
block = "disk_space"
|
||||||
|
@ -21,8 +28,8 @@ path = "/"
|
||||||
info_type = "available"
|
info_type = "available"
|
||||||
unit = "GB"
|
unit = "GB"
|
||||||
interval = 20
|
interval = 20
|
||||||
warning = 12.0
|
warning = 1.5
|
||||||
alert = 8.0
|
alert = 0.4
|
||||||
alert_absolute = true
|
alert_absolute = true
|
||||||
format = "{icon}/{available}"
|
format = "{icon}/{available}"
|
||||||
|
|
||||||
|
@ -59,15 +66,15 @@ format = "{1m}"
|
||||||
|
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "net"
|
block = "net"
|
||||||
device = "enp0s25"
|
device = "enp31s0"
|
||||||
format = "eth {ip} {speed_down;K*b} {graph_down;K*b}"
|
format = "eth {ip} {speed_down;K*b} {graph_down;K*b}"
|
||||||
interval = 5
|
interval = 5
|
||||||
|
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "net"
|
block = "net"
|
||||||
device = "wlp3s0"
|
device = "wlp3s0"
|
||||||
on_click = "alacritty -e nmtui"
|
# on_click = "kitty -e nmtui"
|
||||||
format = "{ssid} {signal_strength} {ip} {speed_down;K*b}"
|
format = "{ssid} ({signal_strength}) {ip} {speed_down;K*b}"
|
||||||
# format = "{ssid} {signal_strength} {ip} {speed_down;K*b} {graph_down;K*b}"
|
# format = "{ssid} {signal_strength} {ip} {speed_down;K*b} {graph_down;K*b}"
|
||||||
interval = 5
|
interval = 5
|
||||||
|
|
||||||
|
@ -76,11 +83,12 @@ block = "sound"
|
||||||
format = "{volume}"
|
format = "{volume}"
|
||||||
show_volume_when_muted = true
|
show_volume_when_muted = true
|
||||||
|
|
||||||
# [[block]]
|
[[block]]
|
||||||
# block = "sound"
|
block = "sound"
|
||||||
# name = "Mic"
|
name = "Capture"
|
||||||
# format = "{output_name} {volume}"
|
device_kind = "source"
|
||||||
# show_volume_when_muted = true
|
format = "Mic {volume}"
|
||||||
|
show_volume_when_muted = true
|
||||||
|
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "battery"
|
block = "battery"
|
||||||
|
@ -89,16 +97,16 @@ driver = "sysfs"
|
||||||
format = "{percentage} {time}"
|
format = "{percentage} {time}"
|
||||||
allow_missing = true
|
allow_missing = true
|
||||||
|
|
||||||
[[block]]
|
# [[block]]
|
||||||
block = "networkmanager"
|
# block = "networkmanager"
|
||||||
on_click = "alacritty -e nmtui"
|
# on_click = "alacritty -e nmtui"
|
||||||
interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
# interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
||||||
interface_name_include = []
|
# interface_name_include = []
|
||||||
ap_format = "{ssid^10}"
|
# ap_format = "{ssid^10}"
|
||||||
|
|
||||||
|
|
||||||
[[block]]
|
[[block]]
|
||||||
block = "time"
|
block = "time"
|
||||||
timezone = "Europe/Berlin"
|
timezone = "Europe/Berlin"
|
||||||
interval = 5
|
interval = 5
|
||||||
format = "%a %Y-%m-%d %R:%S"
|
format = "%a %Y-%m-%d (%V) %R:%S"
|
|
@ -32,7 +32,9 @@ This function should only modify configuration layer settings."
|
||||||
|
|
||||||
;; List of configuration layers to load.
|
;; List of configuration layers to load.
|
||||||
dotspacemacs-configuration-layers
|
dotspacemacs-configuration-layers
|
||||||
'(javascript
|
'(sql
|
||||||
|
typescript
|
||||||
|
javascript
|
||||||
systemd
|
systemd
|
||||||
;; ----------------------------------------------------------------
|
;; ----------------------------------------------------------------
|
||||||
;; Example of useful layers you may want to use right away.
|
;; Example of useful layers you may want to use right away.
|
||||||
|
@ -49,6 +51,7 @@ This function should only modify configuration layer settings."
|
||||||
graphviz
|
graphviz
|
||||||
helm
|
helm
|
||||||
html
|
html
|
||||||
|
;; (keypoard-layout :variables kl-layout 'colemak-neio-literal)
|
||||||
latex
|
latex
|
||||||
(lsp :variables
|
(lsp :variables
|
||||||
lsp-rust-server
|
lsp-rust-server
|
||||||
|
@ -59,6 +62,7 @@ This function should only modify configuration layer settings."
|
||||||
org-enable-roam-ui t)
|
org-enable-roam-ui t)
|
||||||
plantuml
|
plantuml
|
||||||
(python :variables python-backend 'lsp python-lsp-server 'mspyls)
|
(python :variables python-backend 'lsp python-lsp-server 'mspyls)
|
||||||
|
restclient
|
||||||
(rust :variables rust-backend 'lsp)
|
(rust :variables rust-backend 'lsp)
|
||||||
shell
|
shell
|
||||||
;; shell-scripts
|
;; shell-scripts
|
||||||
|
@ -70,6 +74,7 @@ This function should only modify configuration layer settings."
|
||||||
tree-sitter-fold-enable t
|
tree-sitter-fold-enable t
|
||||||
tree-sitter-fold-indicators-enable t)
|
tree-sitter-fold-indicators-enable t)
|
||||||
version-control
|
version-control
|
||||||
|
(vue :variables vue-backend 'lsp)
|
||||||
yaml
|
yaml
|
||||||
;; (shell :variables
|
;; (shell :variables
|
||||||
;; shell-default-height 30
|
;; shell-default-height 30
|
|
@ -57,9 +57,11 @@
|
||||||
# #+TITLE: ?
|
# #+TITLE: ?
|
||||||
# #+DATE:
|
# #+DATE:
|
||||||
|
|
||||||
# #+SUBJECT: test letter subject
|
#+SUBJECT: Betreff des Briefs
|
||||||
|
|
||||||
#+LCO: Absender-Frieder
|
#+LCO: Absender-Frieder
|
||||||
|
# #+LCO: Absender-Marcelle
|
||||||
|
# #+LCO: Absender-FamilieSchlesier
|
||||||
#+LCO: Brief-de-modern
|
#+LCO: Brief-de-modern
|
||||||
#+STARTUP: showall
|
#+STARTUP: showall
|
||||||
|
|
||||||
|
@ -70,7 +72,9 @@
|
||||||
* Sehr geehrte Damen und Herren,
|
* Sehr geehrte Damen und Herren,
|
||||||
?
|
?
|
||||||
|
|
||||||
* Mit freundlichen Grüßen, :closing: "
|
* Mit freundlichen Grüßen, :closing:
|
||||||
|
|
||||||
|
Frieder Schlesier"
|
||||||
)
|
)
|
||||||
("m" "Schedule a meeting" entry
|
("m" "Schedule a meeting" entry
|
||||||
(file+headline "~/Documents/Org/tasks.org")
|
(file+headline "~/Documents/Org/tasks.org")
|
|
@ -8,25 +8,31 @@ case $- in
|
||||||
*) return;;
|
*) return;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# Source global definitions
|
||||||
|
if [ -f /etc/bashrc ]; then
|
||||||
|
. /etc/bashrc
|
||||||
|
fi
|
||||||
|
|
||||||
|
# User specific environment
|
||||||
|
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then
|
||||||
|
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
|
||||||
|
fi
|
||||||
|
export PATH
|
||||||
|
|
||||||
# don't put duplicate lines or lines starting with space in the history.
|
# don't put duplicate lines or lines starting with space in the history.
|
||||||
# See bash(1) for more options
|
# See bash(1) for more options
|
||||||
HISTCONTROL=ignoreboth
|
HISTCONTROL=ignoreboth
|
||||||
|
|
||||||
# allow docker to use X
|
|
||||||
if [ -f /usr/bin/xhost ]; then
|
|
||||||
xhost +local:root
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load the shell dotfiles, and then some:
|
# Load the shell dotfiles, and then some:
|
||||||
# * ~/.path can be used to extend `$PATH`.
|
# * ~/.path can be used to extend `$PATH`.
|
||||||
# * ~/.extra can be used for other settings you don’t want to commit.
|
# * ~/.extra can be used for other settings you don’t want to commit.
|
||||||
for file in ~/.{aliases,bash_prompt,functions,path,dockerfunc,extra,exports}; do
|
for file in ~/.{bash_aliases,exports}; do
|
||||||
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
||||||
done
|
done
|
||||||
unset file
|
unset file
|
||||||
|
|
||||||
|
|
||||||
for file in /usr/share/fzf/{key-bindings.bash,completion.bash}; do
|
for file in /usr/share/fzf/shell/{key-bindings.bash,completion.bash}; do
|
||||||
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
||||||
done
|
done
|
||||||
unset file
|
unset file
|
||||||
|
@ -117,11 +123,20 @@ if ! shopt -oq posix; then
|
||||||
. /etc/bash_completion
|
. /etc/bash_completion
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
. "$HOME/.cargo/env"
|
. "$HOME/.cargo/env"
|
||||||
|
|
||||||
if [ -z "$SSH_AUTH_SOCK" ] ; then
|
ssh-add -l &>/dev/null
|
||||||
eval `ssh-agent -s`
|
if [ "$?" == 2 ]; then
|
||||||
# ssh-add
|
test -r ~/.ssh-agent && \
|
||||||
|
eval "$(<~/.ssh-agent)" >/dev/null
|
||||||
|
|
||||||
|
ssh-add -l &>/dev/null
|
||||||
|
if [ "$?" == 2 ]; then
|
||||||
|
(umask 066; ssh-agent > ~/.ssh-agent)
|
||||||
|
eval "$(<~/.ssh-agent)" >/dev/null
|
||||||
|
ssh-add
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
eval "$(starship init bash)"
|
eval "$(starship init bash)"
|
||||||
|
@ -130,3 +145,9 @@ eval "$(starship init bash)"
|
||||||
if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi
|
if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi
|
||||||
# END_KITTY_SHELL_INTEGRATION
|
# END_KITTY_SHELL_INTEGRATION
|
||||||
|
|
||||||
|
# Automatically added by the Guix install script.
|
||||||
|
if [ -n "$GUIX_ENVIRONMENT" ]; then
|
||||||
|
if [[ $PS1 =~ (.*)"\\$" ]]; then
|
||||||
|
PS1="${BASH_REMATCH[1]} [env]\\\$ "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# NOTE: This file is generated from ~/.dotfiles/System.org. Please see commentary there.
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
RED='\033[1;30m'
|
||||||
|
NC='\033[0m'
|
||||||
|
GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
|
||||||
|
|
||||||
|
profiles=$*
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
profiles="$HOME/.config/guix/manifests/*.scm";
|
||||||
|
fi
|
||||||
|
|
||||||
|
for profile in $profiles; do
|
||||||
|
# Remove the path and file extension, if any
|
||||||
|
profileName=$(basename $profile)
|
||||||
|
profileName="${profileName%.*}"
|
||||||
|
profilePath="$GUIX_EXTRA_PROFILES/$profileName"
|
||||||
|
manifestPath=$HOME/.config/guix/manifests/$profileName.scm
|
||||||
|
|
||||||
|
if [ -f $manifestPath ]; then
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Activating profile:" $manifestPath "${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
mkdir -p $profilePath
|
||||||
|
guix package --manifest=$manifestPath --profile="$profilePath/$profileName"
|
||||||
|
|
||||||
|
# Source the new profile
|
||||||
|
GUIX_PROFILE="$profilePath/$profileName"
|
||||||
|
if [ -f $GUIX_PROFILE/etc/profile ]; then
|
||||||
|
. "$GUIX_PROFILE"/etc/profile
|
||||||
|
else
|
||||||
|
echo -e "${RED}Couldn't find profile:" $GUIX_PROFILE/etc/profile "${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "No profile found at path" $profilePath
|
||||||
|
fi
|
||||||
|
done
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Sync dotfiles repo and ensure that dotfiles are tangled correctly afterward
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
RED='\033[1;30m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# Navigate to the directory of this script (generally ~/.dotfiles/.bin)
|
||||||
|
cd $(dirname $(readlink -f $0))
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}Saving Org buffers if Emacs is running...${NC}"
|
||||||
|
emacsclient -u -e "(org-save-all-org-buffers)" -a "echo 'Emacs is not currently running'"
|
||||||
|
|
||||||
|
echo -e "${BLUE}Stashing existing changes...${NC}"
|
||||||
|
stash_result=$(git stash push -m "sync-dotfiles: Before syncing dotfiles")
|
||||||
|
needs_pop=1
|
||||||
|
if [ "$stash_result" = "No local changes to save" ]; then
|
||||||
|
needs_pop=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${BLUE}Pulling updates from dotfiles repo...${NC}"
|
||||||
|
echo
|
||||||
|
git pull origin master
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ $needs_pop -eq 1 ]]; then
|
||||||
|
echo -e "${BLUE}Popping stashed changes...${NC}"
|
||||||
|
echo
|
||||||
|
git stash pop
|
||||||
|
fi
|
||||||
|
|
||||||
|
unmerged_files=$(git diff --name-only --diff-filter=U)
|
||||||
|
if [[ ! -z $unmerged_files ]]; then
|
||||||
|
echo -e "${RED}The following files have merge conflicts after popping the stash:${NC}"
|
||||||
|
echo
|
||||||
|
printf %"s\n" $unmerged_files # Ensure newlines are printed
|
||||||
|
else
|
||||||
|
update-dotfiles
|
||||||
|
fi
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Building ${BLUE}$(hostname)${GREEN}...${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
sudo guix system -v 3 -c 8 -L ~/git/dotfiles/ build ~/git/dotfiles/fschl/systems/$(hostname).scm
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Updating ${BLUE}base-channels${GREEN}...${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
cp -f ~/git/dotfiles/fschl/base-channels.scm ~/.config/guix/base-channels.scm
|
||||||
|
guix pull --channels=$HOME/.config/guix/base-channels.scm
|
||||||
|
guix describe --format=channels > ~/.config/guix/channels.scm
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Navigate to the directory of this script (generally ~/.dotfiles/.bin)
|
||||||
|
cd $(dirname $(readlink -f $0))
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# The heavy lifting is done by an Emacs script
|
||||||
|
emacs -Q --script ./.emacs.d/tangle-dotfiles.el
|
||||||
|
|
||||||
|
# Make sure any running Emacs instance gets updated settings
|
||||||
|
emacsclient -e '(load-file "~/.emacs.d/per-system-settings.el")' -a "echo 'Emacs is not currently running'"
|
||||||
|
|
||||||
|
# Update configuration symlinks
|
||||||
|
stow .
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Updating $HOME for ${BLUE}$(hostname)${GREEN}...${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
RUNNING_GUIX_HOME=1 guix home -v 3 -c 10 -L ~/git/dotfiles/ reconfigure ~/git/dotfiles/fschl/systems/$(hostname).scm
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# NOTE: This file is generated from ~/.dotfiles/System.org. Please see commentary there.
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
NC='\033[0m'
|
||||||
|
GUIX_EXTRA_PROFILES=$HOME/.guix-extra-profiles
|
||||||
|
|
||||||
|
profiles=$*
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
profiles="$GUIX_EXTRA_PROFILES/*";
|
||||||
|
fi
|
||||||
|
|
||||||
|
for profile in $profiles; do
|
||||||
|
profileName=$(basename $profile)
|
||||||
|
profilePath=$GUIX_EXTRA_PROFILES/$profileName
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Updating profile:" $profilePath "${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
guix package --profile="$profilePath/$profileName" --manifest="$HOME/.config/guix/manifests/$profileName.scm"
|
||||||
|
done
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}Updating ${BLUE}$(hostname)${GREEN}...${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
sudo guix system -v 3 -c 10 -L ~/git/dotfiles/ reconfigure ~/git/dotfiles/fschl/systems/$(hostname).scm
|
|
@ -0,0 +1,202 @@
|
||||||
|
[global]
|
||||||
|
### Display ###
|
||||||
|
monitor = 0
|
||||||
|
|
||||||
|
# The geometry of the window:
|
||||||
|
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||||
|
geometry = "500x10-10+50"
|
||||||
|
|
||||||
|
# Show how many messages are currently hidden (because of geometry).
|
||||||
|
indicate_hidden = yes
|
||||||
|
|
||||||
|
# Shrink window if it's smaller than the width. Will be ignored if
|
||||||
|
# width is 0.
|
||||||
|
shrink = no
|
||||||
|
|
||||||
|
# The transparency of the window. Range: [0; 100].
|
||||||
|
transparency = 10
|
||||||
|
|
||||||
|
# The height of the entire notification. If the height is smaller
|
||||||
|
# than the font height and padding combined, it will be raised
|
||||||
|
# to the font height and padding.
|
||||||
|
notification_height = 0
|
||||||
|
|
||||||
|
# Draw a line of "separator_height" pixel height between two
|
||||||
|
# notifications.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
separator_height = 1
|
||||||
|
separator_color = frame
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 8
|
||||||
|
|
||||||
|
# Defines width in pixels of frame around the notification window.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
frame_width = 2
|
||||||
|
|
||||||
|
# Defines color of the frame around the notification window.
|
||||||
|
frame_color = "#89AAEB"
|
||||||
|
|
||||||
|
# Sort messages by urgency.
|
||||||
|
sort = yes
|
||||||
|
|
||||||
|
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||||
|
# for longer than idle_threshold seconds.
|
||||||
|
idle_threshold = 120
|
||||||
|
|
||||||
|
### Text ###
|
||||||
|
|
||||||
|
font = Iosevka Aile 12
|
||||||
|
|
||||||
|
# The spacing between lines. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
line_height = 0
|
||||||
|
markup = full
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# %n progress value if set without any extra characters
|
||||||
|
# %% Literal %
|
||||||
|
# Markup is allowed
|
||||||
|
format = "<b>%s</b>\n%b"
|
||||||
|
|
||||||
|
# Alignment of message text.
|
||||||
|
# Possible values are "left", "center" and "right".
|
||||||
|
alignment = left
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60
|
||||||
|
|
||||||
|
# Split notifications into multiple lines if they don't fit into
|
||||||
|
# geometry.
|
||||||
|
word_wrap = yes
|
||||||
|
|
||||||
|
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
|
||||||
|
# Possible values are "start", "middle" and "end".
|
||||||
|
ellipsize = middle
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = no
|
||||||
|
|
||||||
|
# Stack together notifications with the same content
|
||||||
|
stack_duplicates = true
|
||||||
|
|
||||||
|
# Hide the count of stacked notifications with the same content
|
||||||
|
hide_duplicate_count = false
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = yes
|
||||||
|
|
||||||
|
### Icons ###
|
||||||
|
|
||||||
|
# Align icons left/right/off
|
||||||
|
icon_position = left
|
||||||
|
|
||||||
|
# Scale larger icons down to this size, set to 0 to disable
|
||||||
|
max_icon_size = 88
|
||||||
|
|
||||||
|
# Paths to default icons.
|
||||||
|
icon_path = /home/daviwil/.guix-extra-profiles/desktop/desktop/share/icons/gnome/256x256/status/:/home/daviwil/.guix-extra-profiles/desktop/desktop/share/icons/gnome/256x256/devices/:/home/daviwil/.guix-extra-profiles/desktop/desktop/share/icons/gnome/256x256/emblems/
|
||||||
|
|
||||||
|
### History ###
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = no
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20
|
||||||
|
|
||||||
|
### Misc/Advanced ###
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = qutebrowser
|
||||||
|
|
||||||
|
# Always run rule-defined scripts, even if the notification is suppressed
|
||||||
|
always_run_script = true
|
||||||
|
|
||||||
|
# Define the title of the windows spawned by dunst
|
||||||
|
title = Dunst
|
||||||
|
|
||||||
|
# Define the class of the windows spawned by dunst
|
||||||
|
class = Dunst
|
||||||
|
|
||||||
|
startup_notification = false
|
||||||
|
verbosity = mesg
|
||||||
|
|
||||||
|
# Define the corner radius of the notification window
|
||||||
|
# in pixel size. If the radius is 0, you have no rounded
|
||||||
|
# corners.
|
||||||
|
# The radius will be automatically lowered if it exceeds half of the
|
||||||
|
# notification height to avoid clipping text and/or icons.
|
||||||
|
corner_radius = 4
|
||||||
|
|
||||||
|
mouse_left_click = close_current
|
||||||
|
mouse_middle_click = do_action
|
||||||
|
mouse_right_click = close_all
|
||||||
|
|
||||||
|
# Experimental features that may or may not work correctly. Do not expect them
|
||||||
|
# to have a consistent behaviour across releases.
|
||||||
|
[experimental]
|
||||||
|
# Calculate the dpi to use on a per-monitor basis.
|
||||||
|
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||||
|
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||||
|
# using the resolution and physical size. This might be useful in setups
|
||||||
|
# where there are multiple screens with very different dpi values.
|
||||||
|
per_monitor_dpi = false
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
|
||||||
|
# Shortcuts are specified as [modifier+][modifier+]...key
|
||||||
|
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
||||||
|
# "mod3" and "mod4" (windows-key).
|
||||||
|
# Xev might be helpful to find names for keys.
|
||||||
|
|
||||||
|
# Close notification.
|
||||||
|
#close = ctrl+space
|
||||||
|
|
||||||
|
# Close all notifications.
|
||||||
|
#close_all = ctrl+shift+space
|
||||||
|
|
||||||
|
# Redisplay last message(s).
|
||||||
|
# On the US keyboard layout "grave" is normally above TAB and left
|
||||||
|
# of "1". Make sure this key actually exists on your keyboard layout,
|
||||||
|
# e.g. check output of 'xmodmap -pke'
|
||||||
|
history = ctrl+grave
|
||||||
|
|
||||||
|
# Context menu.
|
||||||
|
context = ctrl+shift+period
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
# IMPORTANT: colors have to be defined in quotation marks.
|
||||||
|
# Otherwise the "#" and following would be interpreted as a comment.
|
||||||
|
background = "#222222"
|
||||||
|
foreground = "#888888"
|
||||||
|
timeout = 10
|
||||||
|
# Icon for notifications with low urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
background = "#1c1f26"
|
||||||
|
foreground = "#ffffff"
|
||||||
|
timeout = 10
|
||||||
|
# Icon for notifications with normal urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
background = "#900000"
|
||||||
|
foreground = "#ffffff"
|
||||||
|
frame_color = "#ff0000"
|
||||||
|
timeout = 0
|
||||||
|
# Icon for notifications with critical urgency, uncomment to enable
|
||||||
|
#icon = /path/to/icon
|
|
@ -0,0 +1,233 @@
|
||||||
|
; Docs: https://github.com/polybar/polybar
|
||||||
|
;==========================================================
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
screenchange-reload = true
|
||||||
|
|
||||||
|
[global/wm]
|
||||||
|
margin-top = 0
|
||||||
|
margin-bottom = 0
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
background = #f0232635
|
||||||
|
background-alt = #576075
|
||||||
|
foreground = #A6Accd
|
||||||
|
foreground-alt = #555
|
||||||
|
primary = #ffb52a
|
||||||
|
secondary = #e60053
|
||||||
|
alert = #bd2c40
|
||||||
|
underline-1 = #c792ea
|
||||||
|
|
||||||
|
[bar/panel]
|
||||||
|
width = 100%
|
||||||
|
height = 30
|
||||||
|
offset-x = 0
|
||||||
|
offset-y = 0
|
||||||
|
fixed-center = true
|
||||||
|
enable-ipc = true
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
line-size = 2
|
||||||
|
line-color = #f00
|
||||||
|
|
||||||
|
border-size = 0
|
||||||
|
border-color = #00000000
|
||||||
|
|
||||||
|
padding-top = 5
|
||||||
|
padding-left = 1
|
||||||
|
padding-right = 1
|
||||||
|
|
||||||
|
module-margin = 1
|
||||||
|
|
||||||
|
font-0 = "Iosevka Aile:size=16:weight=light;2"
|
||||||
|
font-1 = "Font Awesome:size=12;2"
|
||||||
|
font-2 = "Material Icons:size=18;5"
|
||||||
|
font-3 = "Fira Mono:size=11;-3"
|
||||||
|
|
||||||
|
modules-left = exwm exwm-path
|
||||||
|
modules-center = spotify
|
||||||
|
modules-right = telegram mu4e cpu temperature battery date
|
||||||
|
|
||||||
|
tray-position = right
|
||||||
|
tray-padding = 2
|
||||||
|
tray-maxsize = 28
|
||||||
|
|
||||||
|
cursor-click = pointer
|
||||||
|
cursor-scroll = ns-resize
|
||||||
|
|
||||||
|
[bar/herbst]
|
||||||
|
width = 100%
|
||||||
|
height = 30
|
||||||
|
offset-x = 0
|
||||||
|
offset-y = 0
|
||||||
|
fixed-center = true
|
||||||
|
enable-ipc = true
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
line-size = 2
|
||||||
|
line-color = #f00
|
||||||
|
|
||||||
|
border-size = 0
|
||||||
|
border-color = #00000000
|
||||||
|
|
||||||
|
padding-top = 5
|
||||||
|
padding-left = 1
|
||||||
|
padding-right = 1
|
||||||
|
|
||||||
|
module-margin = 1
|
||||||
|
|
||||||
|
font-0 = "Iosevka Aile:size=16:weight=semibold;2"
|
||||||
|
font-1 = "Font Awesome:size=12;2"
|
||||||
|
font-2 = "Material Icons:size=18;5"
|
||||||
|
font-3 = "Fira Mono:size=11;-3"
|
||||||
|
|
||||||
|
modules-left = xworkspaces
|
||||||
|
modules-center = spotify
|
||||||
|
modules-right = cpu temperature battery date
|
||||||
|
|
||||||
|
tray-position = right
|
||||||
|
tray-padding = 2
|
||||||
|
tray-maxsize = 28
|
||||||
|
|
||||||
|
cursor-click = pointer
|
||||||
|
cursor-scroll = ns-resize
|
||||||
|
|
||||||
|
[module/xworkspaces]
|
||||||
|
type = internal/xworkspaces
|
||||||
|
enable-click = false
|
||||||
|
|
||||||
|
[module/exwm]
|
||||||
|
type = custom/ipc
|
||||||
|
hook-0 = emacsclient -e "(dw/polybar-exwm-workspace)" | sed -e 's/^"//' -e 's/"$//'
|
||||||
|
initial = 1
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
format-background = ${colors.background-alt}
|
||||||
|
format-padding = 1
|
||||||
|
|
||||||
|
[module/exwm-path]
|
||||||
|
type = custom/ipc
|
||||||
|
hook-0 = emacsclient -e "(dw/polybar-exwm-workspace-path)" | sed -e 's/^"//' -e 's/"$//'
|
||||||
|
format-foreground = #f78c6c
|
||||||
|
initial = 1
|
||||||
|
|
||||||
|
[module/spotify]
|
||||||
|
type = custom/script
|
||||||
|
exec = ~/.config/polybar/player-status.sh
|
||||||
|
interval = 3
|
||||||
|
|
||||||
|
[module/mu4e]
|
||||||
|
type = custom/ipc
|
||||||
|
hook-0 = emacsclient -e '(dw/polybar-mail-count 500)' | sed -e 's/^"//' -e 's/"$//'
|
||||||
|
initial = 1
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
click-left = emacsclient -e '(dw/go-to-inbox)'
|
||||||
|
|
||||||
|
[module/telegram]
|
||||||
|
type = custom/ipc
|
||||||
|
hook-0 = emacsclient -e '(dw/polybar-telegram-chats)' | sed -e 's/^"//' -e 's/"$//'
|
||||||
|
format-padding = 3
|
||||||
|
initial = 1
|
||||||
|
|
||||||
|
[module/xkeyboard]
|
||||||
|
type = internal/xkeyboard
|
||||||
|
blacklist-0 = num lock
|
||||||
|
|
||||||
|
format-prefix-font = 1
|
||||||
|
format-prefix-foreground = ${colors.foreground-alt}
|
||||||
|
format-prefix-underline = ${colors.underline-1}
|
||||||
|
|
||||||
|
label-layout = %layout%
|
||||||
|
label-layout-underline = ${colors.underline-1}
|
||||||
|
|
||||||
|
label-indicator-padding = 2
|
||||||
|
label-indicator-margin = 1
|
||||||
|
label-indicator-underline = ${colors.underline-1}
|
||||||
|
|
||||||
|
[module/cpu]
|
||||||
|
type = internal/cpu
|
||||||
|
interval = 2
|
||||||
|
format = <label> <ramp-coreload>
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
click-left = emacsclient -e "(proced)"
|
||||||
|
label = %percentage:2%%
|
||||||
|
ramp-coreload-spacing = 0
|
||||||
|
ramp-coreload-0 = ▁
|
||||||
|
ramp-coreload-0-foreground = ${colors.foreground-alt}
|
||||||
|
ramp-coreload-1 = ▂
|
||||||
|
ramp-coreload-2 = ▃
|
||||||
|
ramp-coreload-3 = ▄
|
||||||
|
ramp-coreload-4 = ▅
|
||||||
|
ramp-coreload-5 = ▆
|
||||||
|
ramp-coreload-6 = ▇
|
||||||
|
|
||||||
|
[module/memory]
|
||||||
|
type = internal/memory
|
||||||
|
interval = 2
|
||||||
|
format-prefix = "M:"
|
||||||
|
format-prefix-foreground = ${colors.foreground-alt}
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
label = %percentage_used%%
|
||||||
|
|
||||||
|
[module/date]
|
||||||
|
type = internal/date
|
||||||
|
interval = 5
|
||||||
|
|
||||||
|
date = "W%U: %a %b %e"
|
||||||
|
date-alt = "%A %B %d %Y"
|
||||||
|
|
||||||
|
time = %l:%M %p
|
||||||
|
time-alt = %H:%M:%S
|
||||||
|
|
||||||
|
format-prefix-foreground = ${colors.foreground-alt}
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
|
||||||
|
label = %date% %time%
|
||||||
|
|
||||||
|
[module/battery]
|
||||||
|
type = internal/battery
|
||||||
|
battery = BAT0
|
||||||
|
adapter = ADP1
|
||||||
|
full-at = 98
|
||||||
|
time-format = %-l:%M
|
||||||
|
|
||||||
|
label-charging = %percentage%% / %time%
|
||||||
|
format-charging = <animation-charging> <label-charging>
|
||||||
|
format-charging-underline = ${colors.underline-1}
|
||||||
|
|
||||||
|
label-discharging = %percentage%% / %time%
|
||||||
|
format-discharging = <ramp-capacity> <label-discharging>
|
||||||
|
format-discharging-underline = ${self.format-charging-underline}
|
||||||
|
|
||||||
|
format-full = <ramp-capacity> <label-full>
|
||||||
|
format-full-underline = ${self.format-charging-underline}
|
||||||
|
|
||||||
|
ramp-capacity-0 =
|
||||||
|
ramp-capacity-1 =
|
||||||
|
ramp-capacity-2 =
|
||||||
|
ramp-capacity-3 =
|
||||||
|
ramp-capacity-4 =
|
||||||
|
|
||||||
|
animation-charging-0 =
|
||||||
|
animation-charging-1 =
|
||||||
|
animation-charging-2 =
|
||||||
|
animation-charging-3 =
|
||||||
|
animation-charging-4 =
|
||||||
|
animation-charging-framerate = 750
|
||||||
|
|
||||||
|
[module/temperature]
|
||||||
|
type = internal/temperature
|
||||||
|
thermal-zone = 0
|
||||||
|
warn-temperature = 60
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
format-underline = ${colors.underline-1}
|
||||||
|
format-warn = <label-warn>
|
||||||
|
format-warn-underline = ${self.format-underline}
|
||||||
|
|
||||||
|
label = %temperature-c%
|
||||||
|
label-warn = %temperature-c%!
|
||||||
|
label-warn-foreground = ${colors.secondary}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
status="$(playerctl -p spotify status 2>&1)"
|
||||||
|
if [ "$status" != "No players found" ]
|
||||||
|
then
|
||||||
|
artist="$(playerctl -p spotify metadata artist)"
|
||||||
|
if [ "$artist" != "" ]
|
||||||
|
then
|
||||||
|
echo " $(playerctl -p spotify metadata artist) - $(playerctl -p spotify metadata title)"
|
||||||
|
else
|
||||||
|
# Clear any string that was previously displayed
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Clear any string that was previously displayed
|
||||||
|
echo ""
|
||||||
|
fi
|
|
@ -0,0 +1,253 @@
|
||||||
|
set $mod Mod4
|
||||||
|
# at some point check https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway
|
||||||
|
|
||||||
|
# Configure displays
|
||||||
|
|
||||||
|
# https://github.com/swaywm/sway/wiki#display-configuration
|
||||||
|
# swaymsg -t get_outputs
|
||||||
|
set $primary 'LG Electronics 24MB65 512NTHM7N489'
|
||||||
|
set $secondary 'BNQ BenQ GW2450H K8D03191SL0'
|
||||||
|
set $laptop eDP-1
|
||||||
|
|
||||||
|
output $primary pos 1080 135
|
||||||
|
output $secondary pos 0 0 transform 90
|
||||||
|
|
||||||
|
# output * bg ~/.dotfiles/backgrounds/samuel-ferrara-uOi3lg8fGl4-unsplash.jpg fill
|
||||||
|
# output * bg ~/.dotfiles/backgrounds/scott-rodgerson-lRtzEExP0H8-unsplash.jpg fill
|
||||||
|
|
||||||
|
bindsym $mod+Shift+s exec ~/.bin/toggle-display $primary
|
||||||
|
|
||||||
|
# https://github.com/swaywm/sway/wiki#input-configuration
|
||||||
|
# localectl list-x11-keymap-layouts - gives you layouts (~100 on modern systems)
|
||||||
|
# localectl list-x11-keymap-variants de - gives you variants for this layout
|
||||||
|
input "5426:270:Razer_Razer_BlackWidow" {
|
||||||
|
xkb_layout de
|
||||||
|
xkb_options ctrl:nocaps
|
||||||
|
}
|
||||||
|
|
||||||
|
# The internal keyboard of my ThinkPad X13 has a ANSI german keyboard
|
||||||
|
# which uses the variant E2 and moves
|
||||||
|
# < to AltGr+2
|
||||||
|
# > to AltGr+3
|
||||||
|
# | to AltGr+^
|
||||||
|
input "1:1:AT_Translated_Set_2_keyboard" {
|
||||||
|
xkb_layout de
|
||||||
|
xkb_variant e2
|
||||||
|
xkb_options ctrl:nocaps
|
||||||
|
}
|
||||||
|
|
||||||
|
# input "4617:8963:Keyboardio_Atreus" {
|
||||||
|
input "4617:8963:Keyboardio_Atreus_Keyboard" {
|
||||||
|
xkb_layout de,de
|
||||||
|
xkb_options ctrl:nocaps
|
||||||
|
}
|
||||||
|
|
||||||
|
font pango:Iosevka ss08 7
|
||||||
|
|
||||||
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
bindsym $mod+Shift+x exit
|
||||||
|
bindsym $mod+Shift+r reload
|
||||||
|
# bindsym $mod+r resize
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
bindsym $mod+Shift+Return exec kitty
|
||||||
|
# bindsym $mod+Shift+Return exec emacsclient -c --eval '(vterm)'
|
||||||
|
|
||||||
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+w layout tabbed
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# use vim keys for window movement
|
||||||
|
bindsym $mod+h focus left
|
||||||
|
bindsym $mod+j focus down
|
||||||
|
bindsym $mod+k focus up
|
||||||
|
bindsym $mod+l focus right
|
||||||
|
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# move workspace
|
||||||
|
bindsym $mod+Mod1+h move workspace to output left
|
||||||
|
bindsym $mod+Mod1+l move workspace to output right
|
||||||
|
bindsym $mod+Mod1+Left move workspace to output left
|
||||||
|
bindsym $mod+Mod1+Right move workspace to output right
|
||||||
|
|
||||||
|
# alternatively, you can use the cursor keys:
|
||||||
|
bindsym $mod+Shift+Left move left 30 px
|
||||||
|
bindsym $mod+Shift+Down move down 30 px
|
||||||
|
bindsym $mod+Shift+Up move up 30 px
|
||||||
|
bindsym $mod+Shift+Right move right 30 px
|
||||||
|
bindsym $mod+Shift+h move left 30 px
|
||||||
|
bindsym $mod+Shift+j move down 30 px
|
||||||
|
bindsym $mod+Shift+k move up 30 px
|
||||||
|
bindsym $mod+Shift+l move right 30 px
|
||||||
|
|
||||||
|
# split in horizontal orientation
|
||||||
|
# bindsym $mod+s split h
|
||||||
|
|
||||||
|
# split in vertical orientation
|
||||||
|
bindsym $mod+v split v
|
||||||
|
|
||||||
|
# enter fullscreen mode for the focused container
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# toggle tiling / floating
|
||||||
|
bindsym $mod+Shift+f floating toggle
|
||||||
|
|
||||||
|
# toggle pinned floating window
|
||||||
|
bindsym $mod+Shift+p sticky toggle
|
||||||
|
|
||||||
|
# change focus between tiling / floating windows
|
||||||
|
bindsym $mod+Control+space focus mode_toggle
|
||||||
|
|
||||||
|
# focus the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
|
# focus the child container
|
||||||
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
|
# App launcher
|
||||||
|
bindsym $mod+space exec fuzzel -w 50 -x 8 -y 8 -r 3 -b 232635ff -t A6Accdff -s A6Accdff -S 232635ff -C c792eacc -m c792eacc -f "Iosevka ss08:weight=light:size=11" --no-fuzzy --icon-theme="Papirus-Dark"
|
||||||
|
|
||||||
|
# Set defaults
|
||||||
|
default_orientation horizontal
|
||||||
|
workspace_layout tabbed
|
||||||
|
|
||||||
|
# Configure gaps and borders
|
||||||
|
default_border pixel 1
|
||||||
|
gaps outer 2
|
||||||
|
gaps inner 4
|
||||||
|
# smart_borders off
|
||||||
|
hide_edge_borders --i3 none
|
||||||
|
|
||||||
|
# Define names for default workspaces for which we configure key bindings later on.
|
||||||
|
# We use variables to avoid repeating the names in multiple places.
|
||||||
|
set $ws1 "1 "
|
||||||
|
set $ws2 "2 "
|
||||||
|
set $ws3 "3 "
|
||||||
|
set $ws4 "4 "
|
||||||
|
set $ws5 "5 "
|
||||||
|
# unlock-alt - keepassxc defaults here
|
||||||
|
set $ws8 "8 "
|
||||||
|
# linux - less often used terminals for background processes
|
||||||
|
set $ws9 "9 "
|
||||||
|
set $ws0 "chat"
|
||||||
|
|
||||||
|
# find application info with =swaymsg -t get_tree=
|
||||||
|
assign [app_id="firefox"] $ws1
|
||||||
|
# assign [class="Emacs"] $ws2
|
||||||
|
assign [title="^DebugScreen"] $ws3
|
||||||
|
assign [app_id="org.keepassxc.KeePassXC"] $ws8
|
||||||
|
|
||||||
|
# Move specific workspaces to outputs
|
||||||
|
workspace $ws1 output $primary $laptop
|
||||||
|
workspace $ws2 output $primary $laptop
|
||||||
|
workspace $ws3 output $secondary $laptop
|
||||||
|
workspace $ws4 output $secondary $laptop
|
||||||
|
workspace $ws5 output $secondary $laptop
|
||||||
|
workspace $ws8 output $laptop
|
||||||
|
workspace $ws9 output $laptop
|
||||||
|
workspace $ws0 output $laptop
|
||||||
|
|
||||||
|
# Switch to workspace
|
||||||
|
# bindsym $mod+grave workspace $ws0
|
||||||
|
bindsym $mod+1 workspace $ws1
|
||||||
|
bindsym $mod+2 workspace $ws2
|
||||||
|
bindsym $mod+3 workspace $ws3
|
||||||
|
bindsym $mod+4 workspace $ws4
|
||||||
|
bindsym $mod+5 workspace $ws5
|
||||||
|
bindsym $mod+6 workspace 6
|
||||||
|
bindsym $mod+7 workspace 7
|
||||||
|
bindsym $mod+8 workspace $ws8
|
||||||
|
bindsym $mod+9 workspace $ws9
|
||||||
|
bindsym $mod+0 workspace 0
|
||||||
|
|
||||||
|
# Move focused container to workspace
|
||||||
|
# bindsym $mod+Shift+grave move container to workspace $ws0
|
||||||
|
bindsym $mod+Shift+1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace 6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace 7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace $ws8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace $ws9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace 0
|
||||||
|
|
||||||
|
# Bind hotkeys for brightness and volume
|
||||||
|
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
|
||||||
|
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
|
||||||
|
bindsym --locked $mod+p exec playerctl play-pause
|
||||||
|
|
||||||
|
# resize window (you can also use the mouse for that)
|
||||||
|
mode "resize" {
|
||||||
|
# These bindings trigger as soon as you enter the resize mode
|
||||||
|
|
||||||
|
# Pressing left will shrink the window’s width.
|
||||||
|
# Pressing right will grow the window’s width.
|
||||||
|
# Pressing up will shrink the window’s height.
|
||||||
|
# Pressing down will grow the window’s height.
|
||||||
|
bindsym j resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym i resize grow height 10 px or 10 ppt
|
||||||
|
bindsym k resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym l resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# same bindings, but for the arrow keys
|
||||||
|
bindsym Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym Down resize grow height 10 px or 10 ppt
|
||||||
|
bindsym Up resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# back to normal: Enter or Escape
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Screenshots
|
||||||
|
bindsym Print exec grimshot --notify save output
|
||||||
|
bindsym Alt+Print exec grimshot --notify save area
|
||||||
|
|
||||||
|
# Style the UI
|
||||||
|
client.focused #c792eacc #232635dd #ffffffff #ffffffff #c792eacc
|
||||||
|
client.unfocused #c792eacc #1c1f2bef #ffffffff #ffffffff #c792eacc
|
||||||
|
|
||||||
|
# Set up screen locking
|
||||||
|
set $lock 'swaylock -f -i ~/.dotfiles/backgrounds/samuel-ferrara-uOi3lg8fGl4-unsplash.jpg -s fill --font "Iosevka ss08" --indicator-idle-visible'
|
||||||
|
exec swayidle -w \
|
||||||
|
timeout 900 $lock \
|
||||||
|
timeout 960 'swaymsg "output * dpms off"' \
|
||||||
|
resume 'swaymsg "output * dpms on"' \
|
||||||
|
before-sleep $lock
|
||||||
|
|
||||||
|
bindsym Ctrl+Shift+L exec $lock
|
||||||
|
# Window rules
|
||||||
|
#for_window [title="Firefox — Sharing Indicator"] kill
|
||||||
|
for_window [title=".* - mpv$"] floating enable, sticky enable
|
||||||
|
|
||||||
|
# Autostart applications
|
||||||
|
exec waybar --config ~/.config/waybar/x13-fedora.config
|
||||||
|
# exec waybar --config ~/.config/waybar/$(hostname).config
|
||||||
|
exec mako --border-radius=2 --font="Iosevka ss08 10" --max-visible=5 --outer-margin=5 --margin=3 --background="#1c1f26" --border-color="#89AAEB" --border-size=1 --default-timeout=7000
|
||||||
|
exec nm-applet --indicator
|
||||||
|
exec udiskie -t
|
||||||
|
exec gammastep-indicator -l 50.8643:12.1124 -t 6500:3500 -b 1.0:0.7
|
||||||
|
|
||||||
|
exec swaymsg workspace $ws2 && emacs --daemon && emacsclient -c
|
||||||
|
exec firefox
|
||||||
|
exec keepassxc
|
||||||
|
|
||||||
|
# Set GNOME settings (requires "glib:bin" in Guix)
|
||||||
|
exec gsettings set org.gnome.desktop.interface gtk-theme "Matcha-dark-azul"
|
||||||
|
exec gsettings set org.gnome.desktop.interface icon-theme "Papirus-Dark"
|
||||||
|
exec gsettings set org.gnome.desktop.interface font-name "Iosevka Aile 11"
|
||||||
|
|
||||||
|
# Update DBUS activation records to ensure Flatpak apps work
|
||||||
|
exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
|
|
@ -0,0 +1,105 @@
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family: Iosevka ss08;
|
||||||
|
font-size: 14px;
|
||||||
|
box-shadow: none;
|
||||||
|
text-shadow: none;
|
||||||
|
transition-duration: 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
color: #efefff;
|
||||||
|
background: rgba(35, 38, 53, 0.8);
|
||||||
|
margin: 0px 2px 0px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
margin: 0 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 5px;
|
||||||
|
color: rgba(217, 216, 216, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.visible {
|
||||||
|
color: rgba(217, 216, 216, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
font-weight: bold;
|
||||||
|
/* border-bottom: 2px solid rgba(217, 216, 216, 1); */
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.unfocused {
|
||||||
|
/* border-bottom: 2px solid rgba(217, 216, 216, 0); */
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
color: rgba(238, 46, 36, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
color: #afbfff;
|
||||||
|
background: rgba(15, 18, 43, 0.3);
|
||||||
|
margin: 0px 2px 0px 22px;
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode,
|
||||||
|
#battery,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#backlight,
|
||||||
|
#wireplumber,
|
||||||
|
#custom-storage,
|
||||||
|
#custom-spotify,
|
||||||
|
#custom-weather,
|
||||||
|
#custom-mail {
|
||||||
|
margin: 0px 6px 0px 10px;
|
||||||
|
min-width: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#wireplumber.muted {
|
||||||
|
color: rgba(255, 210, 4, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
color: rgba(180, 100, 100, 0.20);
|
||||||
|
margin: 0px 2px 0px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
margin: 0px 2px 0px 2px;
|
||||||
|
min-width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-timer {
|
||||||
|
font-weight: bold;
|
||||||
|
color: rgba(247, 172, 66, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
color: rgba(255, 210, 4, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical {
|
||||||
|
color: rgba(238, 46, 36, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
color: rgba(217, 216, 216, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-storage.warning {
|
||||||
|
color: rgba(255, 210, 4, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-storage.critical {
|
||||||
|
color: rgba(238, 46, 36, 1);
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
emacsclient -e "(dw/waybar-timer-status)" | sed 's/\"//g'
|
|
@ -0,0 +1,113 @@
|
||||||
|
{
|
||||||
|
"layer": "bottom",
|
||||||
|
"position": "bottom",
|
||||||
|
"height": 24,
|
||||||
|
|
||||||
|
// maybe take another look at e.g. https://gitlab.com/wef/dotfiles/-/blob/master/.config/waybar/config
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Configuration
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Examples
|
||||||
|
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode", "sway/window" ],
|
||||||
|
"modules-center": [ "custom/disk_root", "custom/disk_docs", "custom/disk_store", "network"],
|
||||||
|
"modules-right": [ "custom/mail", "battery", "memory", "tray", "clock" ],
|
||||||
|
"sway/mode": {
|
||||||
|
"format": " {}"
|
||||||
|
},
|
||||||
|
"sway/workspaces": {
|
||||||
|
"format": "{name}",
|
||||||
|
"disable-scroll": true
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%b %d %H:%M KW%U}",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"format": " {time} {icon}",
|
||||||
|
"format-alt": "{capacity}% {icon}",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"format-charging": "{capacity}% ",
|
||||||
|
"interval": 30,
|
||||||
|
"states": {
|
||||||
|
"warning": 25,
|
||||||
|
"critical": 10
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/disk_home": {
|
||||||
|
"format": "🏠 {} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail $HOME | tail -1 | tr -d ' '",
|
||||||
|
"tooltip": true ,
|
||||||
|
"tooltip-format": "{path} ({percentage_used}% of {total})"
|
||||||
|
},
|
||||||
|
"custom/disk_root": {
|
||||||
|
"format": "root💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail / | tail -1 | tr -d ' '",
|
||||||
|
"tooltip": true ,
|
||||||
|
"tooltip-format": "{path} ({percentage_used}% of {total})"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/disk_store": {
|
||||||
|
"format": "store💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail /media/store | tail -1 | tr -d ' '"
|
||||||
|
},
|
||||||
|
"custom/disk_docs": {
|
||||||
|
"format": "docs💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail /media/docs | tail -1 | tr -d ' '"
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
// "thermal-zone": 2,
|
||||||
|
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
||||||
|
"critical-threshold": 80,
|
||||||
|
// "format-critical": "{temperatureC}°C {icon}",
|
||||||
|
"format": "<span color='#e88939'>{icon}</span> {temperatureC}°C",
|
||||||
|
"format-icons": ["", "", ""]
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": "🏭 {usage}%",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "💾 {used:0.1f}G"
|
||||||
|
},
|
||||||
|
"custom/mail": {
|
||||||
|
"format": "📩{}",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "notmuch count tag:flagged OR tag:inbox AND NOT tag:killed"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
// "family": "ipv6",
|
||||||
|
"format-wifi": "<span color='#589df6'></span> <span color='gray'>{essid}</span> {frequency} <span color='#589df6'>{signaldBm} dB</span> <span color='#589df6'>⇵</span> {bandwidthUpBits}/{bandwidthDownBits}",
|
||||||
|
"format-ethernet": "{ifname}: {ipaddr}/{cidr} ",
|
||||||
|
"format-linked": "{ifname} (No IP) ",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
//"timer": {
|
||||||
|
// "interval": 1,
|
||||||
|
// "exec": "~/.config/waybar/timer.sh",
|
||||||
|
// "exec-if": "pgrep emacs",
|
||||||
|
// "escape": true
|
||||||
|
//},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 20,
|
||||||
|
"show-passive-items": true
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"interval": 2,
|
||||||
|
"format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}",
|
||||||
|
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,107 @@
|
||||||
|
{
|
||||||
|
"layer": "bottom",
|
||||||
|
"position": "bottom",
|
||||||
|
"height": 32,
|
||||||
|
|
||||||
|
// maybe take another look at e.g. https://gitlab.com/wef/dotfiles/-/blob/master/.config/waybar/config
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Configuration
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Examples
|
||||||
|
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode", "sway/window" ],
|
||||||
|
"modules-center": [ "custom/disk_root", "network"],
|
||||||
|
"modules-right": [ "wireplumber", "custom/mail", "cpu", "battery", "tray", "clock" ],
|
||||||
|
"sway/mode": {
|
||||||
|
"format": " {}"
|
||||||
|
},
|
||||||
|
"sway/workspaces": {
|
||||||
|
"format": "{name}",
|
||||||
|
"disable-scroll": true
|
||||||
|
},
|
||||||
|
"sway/window": {
|
||||||
|
"icon": true
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%b %d %H:%M KW%U}",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"format": " {time} ({capacity}%) {icon}",
|
||||||
|
"format-alt": "{capacity}% {icon}",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"format-charging": "{capacity}% ",
|
||||||
|
"interval": 30,
|
||||||
|
"states": {
|
||||||
|
"warning": 25,
|
||||||
|
"critical": 10
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/disk_root": {
|
||||||
|
"format": "💽/{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail / | tail -1 | tr -d ' '",
|
||||||
|
"tooltip": true ,
|
||||||
|
"tooltip-format": "{path} ({percentage_used}% of {total})"
|
||||||
|
},
|
||||||
|
|
||||||
|
"temperature": {
|
||||||
|
// "thermal-zone": 2,
|
||||||
|
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
||||||
|
"critical-threshold": 80,
|
||||||
|
// "format-critical": "{temperatureC}°C {icon}",
|
||||||
|
"format": "<span color='#e88939'>{icon}</span> {temperatureC}°C",
|
||||||
|
"format-icons": ["", "", ""]
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": "🏭 {usage}%",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "💾 {used:0.1f}G"
|
||||||
|
},
|
||||||
|
"custom/mail": {
|
||||||
|
"format": "📩{}",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "notmuch count tag:flagged OR tag:inbox AND NOT tag:killed"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
// "family": "ipv6",
|
||||||
|
"format-wifi": "<span color='#589df6'></span> <span color='gray'>{essid}</span> <span color='#589df6'>⇵</span> {bandwidthUpBits}/{bandwidthDownBits}",
|
||||||
|
"tooltip-format-wifi": "Freq: {frequency} <span color='#589df6'>{signaldBm} dB</span>",
|
||||||
|
"format-ethernet": "{ifname}: {ipaddr}/{cidr} ",
|
||||||
|
"format-linked": "{ifname} (No IP) ",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
"wireplumber": {
|
||||||
|
"format": "{icon}{volume}%",
|
||||||
|
"format-muted": "MUTED",
|
||||||
|
"on-click": "helvum",
|
||||||
|
"on-click-right": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
|
"format-icons": ["", "", ""]
|
||||||
|
},
|
||||||
|
//"timer": {
|
||||||
|
// "interval": 1,
|
||||||
|
// "exec": "~/.config/waybar/timer.sh",
|
||||||
|
// "exec-if": "pgrep emacs",
|
||||||
|
// "escape": true
|
||||||
|
//},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 18,
|
||||||
|
"show-passive-items": true
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"interval": 2,
|
||||||
|
"format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}",
|
||||||
|
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
{
|
||||||
|
"layer": "bottom",
|
||||||
|
"position": "bottom",
|
||||||
|
"height": 24,
|
||||||
|
|
||||||
|
// maybe take another look at e.g. https://gitlab.com/wef/dotfiles/-/blob/master/.config/waybar/config
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Configuration
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Examples
|
||||||
|
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode", "sway/window" ],
|
||||||
|
"modules-center": [ "custom/disk_root", "custom/disk_docs", "custom/disk_store", "network"],
|
||||||
|
"modules-right": [ "custom/mail", "battery", "memory", "tray", "clock" ],
|
||||||
|
"sway/mode": {
|
||||||
|
"format": " {}"
|
||||||
|
},
|
||||||
|
"sway/workspaces": {
|
||||||
|
"format": "{name}",
|
||||||
|
"disable-scroll": true
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%b %d %H:%M KW%U}",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"format": " {time} {icon}",
|
||||||
|
"format-alt": "{capacity}% {icon}",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"format-charging": "{capacity}% ",
|
||||||
|
"interval": 30,
|
||||||
|
"states": {
|
||||||
|
"warning": 25,
|
||||||
|
"critical": 10
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/disk_home": {
|
||||||
|
"format": "🏠 {} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail $HOME | tail -1 | tr -d ' '",
|
||||||
|
"tooltip": true ,
|
||||||
|
"tooltip-format": "{path} ({percentage_used}% of {total})"
|
||||||
|
},
|
||||||
|
"custom/disk_root": {
|
||||||
|
"format": "root💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail / | tail -1 | tr -d ' '",
|
||||||
|
"tooltip": true ,
|
||||||
|
"tooltip-format": "{path} ({percentage_used}% of {total})"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/disk_store": {
|
||||||
|
"format": "store💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail /media/store | tail -1 | tr -d ' '"
|
||||||
|
},
|
||||||
|
"custom/disk_docs": {
|
||||||
|
"format": "docs💽{} ",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "df -h --output=avail /media/docs | tail -1 | tr -d ' '"
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
// "thermal-zone": 2,
|
||||||
|
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
||||||
|
"critical-threshold": 80,
|
||||||
|
// "format-critical": "{temperatureC}°C {icon}",
|
||||||
|
"format": "<span color='#e88939'>{icon}</span> {temperatureC}°C",
|
||||||
|
"format-icons": ["", "", ""]
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": "🏭 {usage}%",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "💾 {used:0.1f}G"
|
||||||
|
},
|
||||||
|
"custom/mail": {
|
||||||
|
"format": "📩{}",
|
||||||
|
"interval": 30,
|
||||||
|
"exec": "notmuch count tag:flagged OR tag:inbox AND NOT tag:killed"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
// "family": "ipv6",
|
||||||
|
"format-wifi": "<span color='#589df6'></span> <span color='gray'>{essid}</span> {frequency} <span color='#589df6'>{signaldBm} dB</span> <span color='#589df6'>⇵</span> {bandwidthUpBits}/{bandwidthDownBits}",
|
||||||
|
"format-ethernet": "{ifname}: {ipaddr}/{cidr} ",
|
||||||
|
"format-linked": "{ifname} (No IP) ",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}",
|
||||||
|
"interval": 5
|
||||||
|
},
|
||||||
|
//"timer": {
|
||||||
|
// "interval": 1,
|
||||||
|
// "exec": "~/.config/waybar/timer.sh",
|
||||||
|
// "exec-if": "pgrep emacs",
|
||||||
|
// "escape": true
|
||||||
|
//},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
},
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 20,
|
||||||
|
"show-passive-items": true
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"interval": 2,
|
||||||
|
"format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}",
|
||||||
|
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,111 +0,0 @@
|
||||||
[theme]
|
|
||||||
name = "semi-native"
|
|
||||||
# theme = "solarized-dark"
|
|
||||||
[theme.overrides]
|
|
||||||
separator = "<span font='5'>|</span>"
|
|
||||||
[icons]
|
|
||||||
name = "awesome"
|
|
||||||
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "pomodoro"
|
|
||||||
length = 25
|
|
||||||
break_length = 5
|
|
||||||
message = " Take a break!"
|
|
||||||
break_message = "Back to work!"
|
|
||||||
notifier = "i3nag"
|
|
||||||
[icons.overrides]
|
|
||||||
pomodoro = ""
|
|
||||||
pomodoro_started = ""
|
|
||||||
pomodoro_stopped = "⏹"
|
|
||||||
pomodoro_paused = "⏸"
|
|
||||||
pomodoro_break = ""
|
|
||||||
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "disk_space"
|
|
||||||
# path = "/"
|
|
||||||
# info_type = "available"
|
|
||||||
# unit = "GB"
|
|
||||||
# interval = 20
|
|
||||||
# warning = 1.5
|
|
||||||
# alert = 0.8
|
|
||||||
# alert_absolute = true
|
|
||||||
# format = "{icon}/{available}"
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "disk_space"
|
|
||||||
path = "/home"
|
|
||||||
info_type = "available"
|
|
||||||
unit = "GB"
|
|
||||||
interval = 20
|
|
||||||
warning = 20.0
|
|
||||||
alert = 10.0
|
|
||||||
alert_absolute = true
|
|
||||||
format = "{icon}/home {available}"
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "docker"
|
|
||||||
# interval = 2
|
|
||||||
# format = "{running}/{total} | {images}"
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "memory"
|
|
||||||
display_type = "memory"
|
|
||||||
format_mem = "{mem_used_percents}"
|
|
||||||
format_swap = "{swap_used_percents}"
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "cpu"
|
|
||||||
interval = 5
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "load"
|
|
||||||
interval = 5
|
|
||||||
format = "{1m}"
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "net"
|
|
||||||
device = "enp31s0"
|
|
||||||
format = "eth {ip} {speed_down;K*b} {graph_down;K*b}"
|
|
||||||
interval = 5
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "net"
|
|
||||||
# device = "wlp3s0"
|
|
||||||
# on_click = "alacritty -e nmtui"
|
|
||||||
# format = "{ssid} {signal_strength} {ip} {speed_down;K*b}"
|
|
||||||
# # format = "{ssid} {signal_strength} {ip} {speed_down;K*b} {graph_down;K*b}"
|
|
||||||
# interval = 5
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "sound"
|
|
||||||
format = "{volume}"
|
|
||||||
show_volume_when_muted = true
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "sound"
|
|
||||||
# name = "Mic"
|
|
||||||
# format = "{output_name} {volume}"
|
|
||||||
# show_volume_when_muted = true
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "battery"
|
|
||||||
# # driver = "upower"
|
|
||||||
# driver = "sysfs"
|
|
||||||
# format = "{percentage} {time}"
|
|
||||||
# allow_missing = true
|
|
||||||
|
|
||||||
# [[block]]
|
|
||||||
# block = "networkmanager"
|
|
||||||
# on_click = "alacritty -e nmtui"
|
|
||||||
# interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
|
||||||
# interface_name_include = []
|
|
||||||
# ap_format = "{ssid^10}"
|
|
||||||
|
|
||||||
|
|
||||||
[[block]]
|
|
||||||
block = "time"
|
|
||||||
timezone = "Europe/Berlin"
|
|
||||||
interval = 5
|
|
||||||
format = "%a %Y-%m-%d %R:%S"
|
|
3
.path
3
.path
|
@ -1,3 +0,0 @@
|
||||||
export PATH=${PATH}:/usr/local/go/bin:/home/fschl/go/bin
|
|
||||||
|
|
||||||
. "$HOME/.cargo/env"
|
|
18
.ssh/config
18
.ssh/config
|
@ -1,3 +1,11 @@
|
||||||
|
# https://gist.github.com/grenade/6318301
|
||||||
|
#
|
||||||
|
# chmod 700 ~/.ssh
|
||||||
|
# chmod 644 ~/.ssh/authorized_keys
|
||||||
|
# chmod 644 ~/.ssh/known_hosts
|
||||||
|
# chmod 644 ~/.ssh/config
|
||||||
|
# chmod 600 ~/.ssh/id_rsa
|
||||||
|
# chmod 644 ~/.ssh/id_rsa.pub
|
||||||
# more secure ssh config
|
# more secure ssh config
|
||||||
# https://wiki.mozilla.org/Security/Guidelines/OpenSSH
|
# https://wiki.mozilla.org/Security/Guidelines/OpenSSH
|
||||||
#
|
#
|
||||||
|
@ -9,6 +17,11 @@ IdentitiesOnly yes
|
||||||
# make known_hosts unreadable
|
# make known_hosts unreadable
|
||||||
HashKnownHosts yes
|
HashKnownHosts yes
|
||||||
|
|
||||||
|
# see man ssh-config
|
||||||
|
AddKeysToAgent yes
|
||||||
|
IdentityAgent SSH_AUTH_SOCK
|
||||||
|
|
||||||
|
|
||||||
# order HostKeyAlgorithms
|
# order HostKeyAlgorithms
|
||||||
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
|
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
|
||||||
|
|
||||||
|
@ -20,6 +33,7 @@ Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.
|
||||||
|
|
||||||
|
|
||||||
#Host hostname_alias
|
#Host hostname_alias
|
||||||
# User yourusername
|
|
||||||
# Hostname <IP or dns>
|
# Hostname <IP or dns>
|
||||||
# IdentityFile ~/.ssh/<your_keyfile_name>
|
# Port 22022
|
||||||
|
# User yourusername
|
||||||
|
# IdentityFile ~/.ssh/<your_keyfile_name>.pub
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
* GUIX systems and home
|
||||||
|
** Backlog
|
||||||
|
*** TODO add ssh config
|
||||||
|
*** TODO add ssh keys
|
||||||
|
*** TODO password management
|
||||||
|
start with keepassxc, but try password-store
|
||||||
|
*** TODO figure out how to maintain emacs config
|
||||||
|
*** TODO add LaTeX
|
||||||
|
with XDG_CONFIG_DIR, XDG_DATA_DIR
|
||||||
|
https://wiki.archlinux.org/title/XDG_Base_Directory
|
||||||
|
|
||||||
|
and make letter creation from org-capture work
|
||||||
|
*** TODO add wireguard configuration
|
||||||
|
*** TODO add libreoffice
|
||||||
|
*** TODO add email management (mu4e?)
|
||||||
|
*** TODO add config for desktop (multi-monitor)
|
||||||
|
*** TODO add syncthing config
|
||||||
|
how to back that up?
|
||||||
|
*** TODO figure out luks setup
|
||||||
|
*** TODO securely manage ssh keys
|
||||||
|
they are in the keepass database file
|
210
README.org
210
README.org
|
@ -1,50 +1,59 @@
|
||||||
* fschl dotfiles
|
* fschl dotfiles
|
||||||
|
|
||||||
Things that make my linux life more comfortable, portable and secure.
|
part of my personal computing environment. mainly contains
|
||||||
For debian, or debian-based distros. using i3wm.org on the desktop.
|
configuration files for sway, some useful addons and system tools
|
||||||
|
(git, terminal, ssh, backup). This repository also has some notes on
|
||||||
|
security considerations when setting up a Linux system.
|
||||||
|
|
||||||
** Questions this repos tries to answer
|
The relevant things for my workflows can be found in [[https://git.fschl-co.de/fschl/emacs]].
|
||||||
|
|
||||||
- How long does it take for you to set up a machine?
|
** (future) Features
|
||||||
- Do you have backups?
|
|
||||||
- Are you using a password manager?
|
- reproducable machine setup (GNU Guix)
|
||||||
- How do you transport your secrets?
|
- keyboard-based environment (Sway wm)
|
||||||
- Can you get things done without *your* computer?
|
- efficient, keyboard based (Emacs + CLI tools)
|
||||||
|
- portable password management (KeepassXC)
|
||||||
|
- similar environment on Desktop, Laptop, Android
|
||||||
|
- for Laptop: encrypted boot + home partitions
|
||||||
|
- TODO Can you get things done without *your* computer?
|
||||||
- Rescue+Recover friends laptops/computers
|
- Rescue+Recover friends laptops/computers
|
||||||
- panic-ops using a friends laptop
|
- panic-ops using a friends laptop
|
||||||
|
|
||||||
*** Firefox/Thunderbird customization
|
** Security
|
||||||
|
|
||||||
- goto ~.mozilla/firefox/<user-profile>/~
|
*** SSH Hardening
|
||||||
- ~mkdir chrome/ && cp ~/dotfiles/userChrome.css ./chrome/~
|
|
||||||
- open Firefox: ~about:config~ and set
|
|
||||||
~toolkit.legacyUserProfileCustomizations.stylesheets~ to *true*
|
|
||||||
|
|
||||||
*** Security
|
|
||||||
|
|
||||||
**** SSH Hardening
|
|
||||||
|
|
||||||
- https://blog.g3rt.nl/upgrade-your-ssh-keys.html
|
- https://blog.g3rt.nl/upgrade-your-ssh-keys.html
|
||||||
- https://stribika.github.io/2015/01/04/secure-secure-shell.html
|
- https://stribika.github.io/2015/01/04/secure-secure-shell.html
|
||||||
- https://wiki.mozilla.org/Security/Guidelines/OpenSSH#OpenSSH_client
|
- https://wiki.mozilla.org/Security/Guidelines/OpenSSH#OpenSSH_client
|
||||||
- see ~/etc/ssh/ssh_config~ and ~.ssh/config~
|
- see ~/etc/ssh/ssh_config~ and ~.ssh/config~
|
||||||
|
|
||||||
**** SSH key generation
|
*** SSH key generation
|
||||||
|
|
||||||
|
ED25519 keys are favored over RSA keys when backward compatibility ''is not required''.
|
||||||
|
This is only compatible with OpenSSH 6.5+ and fixed-size (256 bytes).
|
||||||
|
|
||||||
#+BEGIN_SRC bash
|
#+BEGIN_SRC bash
|
||||||
# ED25519 keys are favored over RSA keys when backward compatibility ''is not required''.
|
|
||||||
# This is only compatible with OpenSSH 6.5+ and fixed-size (256 bytes).
|
|
||||||
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_host_$(date +%Y-%m-%d) -C "Key to HOST for user-xyz"
|
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_host_$(date +%Y-%m-%d) -C "Key to HOST for user-xyz"
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
# Fallback for really old systems (why do you still have those??)
|
Fallback for really old systems (why do you still have those??) RSA
|
||||||
# RSA keys are favored over ECDSA keys when backward compatibility ''is required'',
|
keys are favored over ECDSA keys when backward compatibility ''is
|
||||||
# thus, newly generated keys are always either ED25519 or RSA (NOT ECDSA or DSA).
|
required'', thus, newly generated keys are always either ED25519 or
|
||||||
|
RSA (NOT ECDSA or DSA).
|
||||||
|
|
||||||
|
#+BEGIN_SRC bash
|
||||||
$ ssh-keygen -t rsa -b 8192 -f ~/.ssh/id_rsa_host_$(date +%Y-%m-%d) -C "Key to HOST for user-xyz"
|
$ ssh-keygen -t rsa -b 8192 -f ~/.ssh/id_rsa_host_$(date +%Y-%m-%d) -C "Key to HOST for user-xyz"
|
||||||
|
|
||||||
$ ssh-copy-id -i ~/.ssh/<file>.pub -p 22 user@host
|
$ ssh-copy-id -i ~/.ssh/<file>.pub -p 22 user@host
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** GnuPG
|
*** SSH-Agent
|
||||||
|
|
||||||
|
automatically start agent, add keys to agent (after using it for the first time) when entering passphrase.
|
||||||
|
integrates with KeepassXC ([[https://github.com/keepassxreboot/keepassxc/blob/develop/docs/topics/SSHAgent.adoc][GH:KeePass > Docs > SSH-Agent]])
|
||||||
|
|
||||||
|
*** GnuPG
|
||||||
|
|
||||||
- https://wiki.mozilla.org/Security/Key_Management
|
- https://wiki.mozilla.org/Security/Key_Management
|
||||||
- https://keyring.debian.org/creating-key.html
|
- https://keyring.debian.org/creating-key.html
|
||||||
|
@ -59,11 +68,7 @@
|
||||||
keyid-format 0xlong
|
keyid-format 0xlong
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** Managing logins & passphrases
|
*** Backup Secure Keys
|
||||||
|
|
||||||
- use a secure, cross-platform, *cloudless* password manager, e.g keepassXC
|
|
||||||
|
|
||||||
**** Backup Secure Keys
|
|
||||||
|
|
||||||
- get 2 USB thumb drives
|
- get 2 USB thumb drives
|
||||||
- on each, create 2 partitions (ext4, you will never use them on any windows device anyway)
|
- on each, create 2 partitions (ext4, you will never use them on any windows device anyway)
|
||||||
|
@ -96,9 +101,154 @@
|
||||||
- [ ] move to ansible for easier modularization of setup
|
- [ ] move to ansible for easier modularization of setup
|
||||||
- [ ] OR: give GUIX a shot
|
- [ ] OR: give GUIX a shot
|
||||||
|
|
||||||
** Moving to Arch
|
** Notes on Arch
|
||||||
|
|
||||||
- official repository setup: https://wiki.archlinux.org/title/Official_repositories#multilib
|
- official repository setup: https://wiki.archlinux.org/title/Official_repositories#multilib
|
||||||
- ~multiplib~ is required for wine
|
- ~multiplib~ is required for wine
|
||||||
- Sound troubleshooting: https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture/Troubleshooting#HDMI
|
- Sound troubleshooting: https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture/Troubleshooting#HDMI
|
||||||
- Skype, VSCode: use ~yay~
|
- Skype, VSCode: use ~yay~
|
||||||
|
|
||||||
|
** TODO Fedora
|
||||||
|
|
||||||
|
- fedora project
|
||||||
|
- different Desktop/Workstation spins (Gnome, KDE, sway...)
|
||||||
|
- =dnf= package manager, install updates on reboot
|
||||||
|
- "Atomic Desktop", uses Fedora/RedHat CoreOS with rpm-ostree + flatpaks
|
||||||
|
- has problems with video playback (in firefox)
|
||||||
|
- setup syncthing service
|
||||||
|
#+begin_quote
|
||||||
|
https://src.fedoraproject.org/rpms/syncthing/tree/rawhide
|
||||||
|
#+end_quote
|
||||||
|
#+begin_src bash
|
||||||
|
sudo systemctl enable --now syncthing@USER.service
|
||||||
|
#+end_src
|
||||||
|
- setup wireguard
|
||||||
|
https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/
|
||||||
|
- add and configure some modern tools:
|
||||||
|
https://github.com/ibraheemdev/modern-unix?tab=readme-ov-file
|
||||||
|
|
||||||
|
*** Basic Packages
|
||||||
|
#+name: update and install packages
|
||||||
|
#+begin_src bash
|
||||||
|
sudo dnf update
|
||||||
|
sudo dnf group install sway-desktop-environment
|
||||||
|
sudo dnf -y install \
|
||||||
|
ImageMagick \
|
||||||
|
bat \
|
||||||
|
brightnessctl \
|
||||||
|
cascadia-code-nf-fonts \
|
||||||
|
cmake \
|
||||||
|
duf \
|
||||||
|
emacs \
|
||||||
|
eza \
|
||||||
|
fd-find \
|
||||||
|
fuzzel \
|
||||||
|
gammastep \
|
||||||
|
gammastep-indicator \
|
||||||
|
gimp \
|
||||||
|
glances \
|
||||||
|
gparted \
|
||||||
|
grimshot \
|
||||||
|
htop \
|
||||||
|
isync \
|
||||||
|
keepassxc \
|
||||||
|
kitty \
|
||||||
|
libtool \
|
||||||
|
network-manager-applet \
|
||||||
|
notmuch \
|
||||||
|
papirus-icon-theme-dark \
|
||||||
|
papirus-icon-theme-light \
|
||||||
|
ripgrep \
|
||||||
|
rustup \
|
||||||
|
syncthing \
|
||||||
|
udiskie \
|
||||||
|
virt-manager \
|
||||||
|
wireguard-tools \
|
||||||
|
wofi \
|
||||||
|
youtube-dl
|
||||||
|
|
||||||
|
rustup_init
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
|
||||||
|
*** setup dotfiles and emacs
|
||||||
|
#+name: link dotfiles and emacs
|
||||||
|
#+begin_src bash
|
||||||
|
ln -s /home/fschl/git/dotfiles/.config/dunst /home/fschl/.config/dunst
|
||||||
|
ln -s /home/fschl/git/dotfiles/.config/git /home/fschl/.config/git
|
||||||
|
ln -s /home/fschl/git/dotfiles/.config/sway /home/fschl/.config/sway
|
||||||
|
ln -s /home/fschl/git/dotfiles/.config/waybar /home/fschl/.config/waybar
|
||||||
|
|
||||||
|
git clone https://gitlab.com/fschl/emacs-config ~/git/emacs
|
||||||
|
cd ~/git/emacs
|
||||||
|
git submodule update --init --recursive
|
||||||
|
ln -s /home/fschl/git/emacs /home/fschl/.config/emacs
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Tools and Usability stuff
|
||||||
|
|
||||||
|
Install [[https://github.com/typst/typst][Typst]] modern replacement for LaTeX, see [[https://github.com/qjcg/awesome-typst][GH: awesome-typst]]
|
||||||
|
|
||||||
|
- [ ] add [[https://github.com/typst/packages][typst/packages]] (letter, CV)
|
||||||
|
- [ ] https://github.com/Sematre/typst-letter-pro
|
||||||
|
- [ ] https://github.com/mintyfrankie/brilliant-CV
|
||||||
|
#+begin_src sh
|
||||||
|
cargo install --locked starship
|
||||||
|
cargo install --locked typst-cli
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Install [[https://difftastic.wilfred.me.uk/][difftastic]] ([[https://github.com/Wilfred/difftastic][Github]]), for improved diff highlighting.
|
||||||
|
#+begin_src sh
|
||||||
|
cargo install --locked difftastic
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** setup development stuff
|
||||||
|
|
||||||
|
https://realpython.com/dependency-management-python-poetry/
|
||||||
|
#+begin_src bash
|
||||||
|
sudo dnf install python3-lsp-server+all
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** NEXT Moving to Guix
|
||||||
|
|
||||||
|
- btrfs for snapshots, easier backups
|
||||||
|
- encrypted =/boot= + =/home= partitions
|
||||||
|
- separate subvolumes for =/gnu=, =/var=, =swap=
|
||||||
|
|
||||||
|
- [ ] MOVE: https://www.draketo.de/software/package-guix.html
|
||||||
|
|
||||||
|
*** Disk partitioning
|
||||||
|
|
||||||
|
- https://github.com/david-cortes/snapper-in-debian-guide?tab=readme-ov-file
|
||||||
|
- https://wiki.archlinux.org/title/Snapper#Suggested_filesystem_layout
|
||||||
|
- https://reckoning.dev/blog/ubuntu-btrfs-guide/
|
||||||
|
- https://wiki.systemcrafters.net/guix/nonguix-installation-guide/#partition-the-disks
|
||||||
|
- https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html
|
||||||
|
- https://git.sr.ht/~abcdw/rde/tree/master/item/examples/README
|
||||||
|
- https://guix.gnu.org/manual/en/html_node/Mapped-Devices.html
|
||||||
|
- Mapped Devices example in *RDE*: https://git.sr.ht/~abcdw/rde/tree/master/item/examples/src/rde-configs/hosts/ixy.scm
|
||||||
|
|
||||||
|
** ImageMagick Notes
|
||||||
|
|
||||||
|
convert multiple .png files into multipage pdf with downscaling
|
||||||
|
#+begin_src bash
|
||||||
|
convert filePrefix*.png -resize 1240x1753 \
|
||||||
|
-extent 1240x1753 -gravity center \
|
||||||
|
-units PixelsPerInch -density 150x150 multipage.pdf
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
lower resolution:
|
||||||
|
#+begin_src bash
|
||||||
|
convert filePrefix*.png -resize 620x876 \
|
||||||
|
-extent 629x876 -gravity center \
|
||||||
|
-units PixelsPerInch -density 100x100 multipage.pdf
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
combine multiple pdf file into one multipage file
|
||||||
|
#+begin_src sh
|
||||||
|
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=result.pdf sourceFilePrefix-*.pdf
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
I read the answer like ImageMagick uses ghostscript internally.
|
||||||
|
source: https://stackoverflow.com/questions/14738911/imagemagick-combine-2-generated-pdfs-into-1-multi-page-file
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,37 @@
|
||||||
|
;; NOTE: This file is generated from ~/.dotfiles/System.org. Please see commentary there.
|
||||||
|
|
||||||
|
(list (channel
|
||||||
|
; (name 'flat)
|
||||||
|
; (url "https://github.com/flatwhatson/guix-channel.git")
|
||||||
|
; (commit
|
||||||
|
; "7b8353ebbcf486e3344924d1cac0fa7ba47c371d")
|
||||||
|
; (introduction
|
||||||
|
; (make-channel-introduction
|
||||||
|
; "33f86a4b48205c0dc19d7c036c85393f0766f806"
|
||||||
|
; (openpgp-fingerprint
|
||||||
|
; "736A C00E 1254 378B A982 7AF6 9DBE 8265 81B6 4490"))))
|
||||||
|
; (channel
|
||||||
|
(name 'rde)
|
||||||
|
(url "https://git.sr.ht/~abcdw/rde")
|
||||||
|
(introduction
|
||||||
|
(make-channel-introduction
|
||||||
|
"257cebd587b66e4d865b3537a9a88cccd7107c95"
|
||||||
|
(openpgp-fingerprint
|
||||||
|
"2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))
|
||||||
|
(channel
|
||||||
|
(name 'nonguix)
|
||||||
|
(url "https://gitlab.com/nonguix/nonguix")
|
||||||
|
(introduction
|
||||||
|
(make-channel-introduction
|
||||||
|
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
|
||||||
|
(openpgp-fingerprint
|
||||||
|
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
|
||||||
|
(channel
|
||||||
|
(name 'guix)
|
||||||
|
(url "https://git.savannah.gnu.org/git/guix.git")
|
||||||
|
;; (url "file:///home/daviwil/Projects/Code/guix"))
|
||||||
|
(introduction
|
||||||
|
(make-channel-introduction
|
||||||
|
"9edb3f66fd807b096b48283debdcddccfea34bad"
|
||||||
|
(openpgp-fingerprint
|
||||||
|
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
|
|
@ -0,0 +1,76 @@
|
||||||
|
# -*- mode: sh; -*-
|
||||||
|
# Adapted from https://jdhao.github.io/2021/03/31/bash_prompt_config/
|
||||||
|
|
||||||
|
function fromhex() {
|
||||||
|
hex=$1
|
||||||
|
if [[ $hex == "#"* ]]; then
|
||||||
|
hex=$(echo $1 | awk '{print substr($0,2)}')
|
||||||
|
fi
|
||||||
|
r=$(printf '0x%0.2s' "$hex")
|
||||||
|
g=$(printf '0x%0.2s' ${hex#??})
|
||||||
|
b=$(printf '0x%0.2s' ${hex#????})
|
||||||
|
echo -e `printf "%03d" "$(((r<75?0:(r-35)/40)*6*6+(g<75?0:(g-35)/40)*6+(b<75?0:(b-35)/40)+16))"`
|
||||||
|
}
|
||||||
|
|
||||||
|
GRAY="\e[1;30m"
|
||||||
|
BOLD="\033[1m"
|
||||||
|
LT_CYAN="\e[1;36m"
|
||||||
|
LT_GREEN="\e[1;32m"
|
||||||
|
LT_RED="\e[1;31m"
|
||||||
|
GREEN="\e[0;32m"
|
||||||
|
PURPLE="\e[1;35m"
|
||||||
|
COLOR_NONE="\e[0m"
|
||||||
|
|
||||||
|
# Detect whether the current directory is a git repository.
|
||||||
|
function is_git_repository() {
|
||||||
|
git branch > /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_git_branch () {
|
||||||
|
# Note that for new repo without commit, git rev-parse --abbrev-ref HEAD
|
||||||
|
# will error out.
|
||||||
|
if git rev-parse --abbrev-ref HEAD > /dev/null 2>&1; then
|
||||||
|
BRANCH=" $(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
else
|
||||||
|
BRANCH="<bare repo>"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_bash_prompt () {
|
||||||
|
PS1="\n"
|
||||||
|
|
||||||
|
# Host and directory
|
||||||
|
PS1+="${LT_CYAN}\u@\h${COLOR_NONE} ${LT_RED}${BOLD}⛧${COLOR_NONE} "
|
||||||
|
PS1+="${GREEN}\w${COLOR_NONE} • "
|
||||||
|
|
||||||
|
# Add git branch
|
||||||
|
if is_git_repository; then
|
||||||
|
set_git_branch
|
||||||
|
PS1+="${PURPLE}${BRANCH}${COLOR_NONE} • "
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Current time in 12 hour format
|
||||||
|
PS1+="${GREEN}$(date +'%r')${COLOR_NONE}\n"
|
||||||
|
|
||||||
|
# Prompt character with color based on exit code
|
||||||
|
if [ "$?" == "0" ]; then
|
||||||
|
PS1+="${LT_GREEN}"
|
||||||
|
else
|
||||||
|
PS1+="${LT_RED}"
|
||||||
|
fi
|
||||||
|
PS1+="λ${COLOR_NONE}"
|
||||||
|
|
||||||
|
# If inside vterm, add prompt metadata
|
||||||
|
if [[ "$INSIDE_EMACS" = 'vterm' ]]; then
|
||||||
|
PS1=$PS1' \[$(vterm_prompt_end)\]'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Include common vterm functions
|
||||||
|
if [[ "$INSIDE_EMACS" = 'vterm' ]] \
|
||||||
|
&& [[ -n ${EMACS_VTERM_PATH} ]] \
|
||||||
|
&& [[ -f ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh ]]; then
|
||||||
|
source ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PROMPT_COMMAND=set_bash_prompt
|
|
@ -0,0 +1,7 @@
|
||||||
|
set show-all-if-ambiguous on
|
||||||
|
set menu-complete-display-prefix on
|
||||||
|
TAB: menu-complete
|
||||||
|
set visible-stats on
|
||||||
|
set colored-stats on
|
||||||
|
set colored-completion-prefix on
|
||||||
|
set menu-complete-display-prefix on
|
|
@ -0,0 +1,135 @@
|
||||||
|
(define-module (fschl home-services desktop)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
|
#:use-module (gnu packages glib)
|
||||||
|
;; #:use-module (fschl packages fonts)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services dotfiles)
|
||||||
|
#:use-module (gnu home services shepherd)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
|
||||||
|
#:export (home-desktop-service-type))
|
||||||
|
|
||||||
|
(define (home-desktop-profile-service config)
|
||||||
|
(cons*
|
||||||
|
;; NOTE: This is a very weird hack to get around an issue where "glib:bin"
|
||||||
|
;; returns a newer version of glib than what most packages are using via the
|
||||||
|
;; exported `glib' symbol. The "bin" output is needed to get the `gsettings'
|
||||||
|
;; program to control GTK theme settings without a configuration file.
|
||||||
|
(list glib "bin")
|
||||||
|
(map specification->package+output
|
||||||
|
'(;; Sway setup
|
||||||
|
"sway"
|
||||||
|
"swayidle"
|
||||||
|
"swaylock"
|
||||||
|
"waybar"
|
||||||
|
"fuzzel"
|
||||||
|
"mako"
|
||||||
|
"gammastep"
|
||||||
|
"grimshot" ;; grimshot --notify copy area
|
||||||
|
"feh"
|
||||||
|
"network-manager-applet"
|
||||||
|
"hicolor-icon-theme" ;; needed in waybar by nm-applet, gammastep-indicator
|
||||||
|
|
||||||
|
;; Compatibility for older Xorg applications
|
||||||
|
"xorg-server-xwayland"
|
||||||
|
|
||||||
|
;; Flatpak and XDG utilities
|
||||||
|
;; "flatpak"
|
||||||
|
"xdg-desktop-portal"
|
||||||
|
"xdg-desktop-portal-gtk"
|
||||||
|
"xdg-desktop-portal-wlr"
|
||||||
|
"xdg-utils" ;; For xdg-open, etc
|
||||||
|
"xdg-dbus-proxy"
|
||||||
|
"shared-mime-info"
|
||||||
|
|
||||||
|
;; TODO: Remove when Emacs service is working
|
||||||
|
"emacs-next-pgtk"
|
||||||
|
|
||||||
|
;; Appearance
|
||||||
|
"matcha-theme"
|
||||||
|
"papirus-icon-theme"
|
||||||
|
"breeze-icons" ;; For KDE apps
|
||||||
|
|
||||||
|
;; Fonts
|
||||||
|
;; "font-jost"
|
||||||
|
"font-iosevka-ss08"
|
||||||
|
"font-iosevka-aile"
|
||||||
|
"font-jetbrains-mono"
|
||||||
|
"font-google-noto"
|
||||||
|
"font-google-noto-emoji"
|
||||||
|
"font-liberation"
|
||||||
|
"font-awesome"
|
||||||
|
"gucharmap"
|
||||||
|
"fontmanager"
|
||||||
|
|
||||||
|
;; Browsers
|
||||||
|
"qtwayland@5"
|
||||||
|
"qutebrowser"
|
||||||
|
|
||||||
|
;; Authentication
|
||||||
|
"password-store"
|
||||||
|
"keepassxc"
|
||||||
|
|
||||||
|
;; Audio devices and media playback
|
||||||
|
"mpv"
|
||||||
|
"mpv-mpris"
|
||||||
|
"youtube-dl"
|
||||||
|
"playerctl"
|
||||||
|
"gstreamer"
|
||||||
|
"gst-plugins-base"
|
||||||
|
"gst-plugins-good"
|
||||||
|
"gst-plugins-bad"
|
||||||
|
"gst-plugins-ugly"
|
||||||
|
"gst-libav"
|
||||||
|
"alsa-utils"
|
||||||
|
"pavucontrol"
|
||||||
|
|
||||||
|
;; Graphics
|
||||||
|
"gimp"
|
||||||
|
|
||||||
|
;; PDF reader
|
||||||
|
"zathura"
|
||||||
|
"zathura-pdf-mupdf"
|
||||||
|
|
||||||
|
;; File syncing
|
||||||
|
"syncthing"
|
||||||
|
"syncthing-gtk"
|
||||||
|
"borg"
|
||||||
|
|
||||||
|
;; General utilities
|
||||||
|
"curl"
|
||||||
|
"wget"
|
||||||
|
"openssh"
|
||||||
|
"zip"
|
||||||
|
"unzip"
|
||||||
|
"udiskie"
|
||||||
|
"trash-cli"))))
|
||||||
|
|
||||||
|
(define (home-desktop-shepherd-services config)
|
||||||
|
(list
|
||||||
|
;; TODO: Use built-in syncthing service
|
||||||
|
(shepherd-service
|
||||||
|
(provision '(syncthing))
|
||||||
|
(documentation "Run and control syncthing.")
|
||||||
|
(start #~(make-forkexec-constructor '("syncthing" "-no-browser")))
|
||||||
|
(stop #~(make-kill-destructor)))))
|
||||||
|
|
||||||
|
(define (home-desktop-environment-variables config)
|
||||||
|
'(("_JAVA_AWT_WM_NONREPARENTING" . "1")))
|
||||||
|
|
||||||
|
(define home-desktop-service-type
|
||||||
|
(service-type (name 'home-desktop)
|
||||||
|
(description "My desktop environment service.")
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-profile-service-type
|
||||||
|
home-desktop-profile-service)
|
||||||
|
(service-extension
|
||||||
|
home-shepherd-service-type
|
||||||
|
home-desktop-shepherd-services)
|
||||||
|
(service-extension
|
||||||
|
home-environment-variables-service-type
|
||||||
|
home-desktop-environment-variables)))
|
||||||
|
(default-value #f)))
|
|
@ -0,0 +1,203 @@
|
||||||
|
(define-module (fschl home-services emacs)
|
||||||
|
#:use-module (fschl packages emacs)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages emacs)
|
||||||
|
#:use-module (gnu packages emacs-xyz)
|
||||||
|
#:use-module (gnu packages finance)
|
||||||
|
#:use-module (gnu packages gnupg)
|
||||||
|
#:use-module (gnu packages mail)
|
||||||
|
#:use-module (gnu packages version-control)
|
||||||
|
#:use-module (gnu packages rust-apps)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (guix transformations)
|
||||||
|
|
||||||
|
#:export (home-emacs-config-service-type))
|
||||||
|
|
||||||
|
(define (home-emacs-config-profile-service config)
|
||||||
|
(list
|
||||||
|
((options->transformation
|
||||||
|
;; 2.3.0 does not include the `box :style none` fix
|
||||||
|
'((with-commit . "emacs-doom-themes=3b2422b208d28e8734b300cd3cc6a7f4af5eba55")))
|
||||||
|
emacs-doom-themes)
|
||||||
|
|
||||||
|
emacs-next-pgtk
|
||||||
|
emacs-tmr
|
||||||
|
emacs-buffer-env
|
||||||
|
emacs-beframe
|
||||||
|
|
||||||
|
emacs-no-littering
|
||||||
|
|
||||||
|
emacs-exwm
|
||||||
|
emacs-desktop-environment
|
||||||
|
|
||||||
|
emacs-god-mode
|
||||||
|
|
||||||
|
emacs-popper
|
||||||
|
|
||||||
|
emacs-mpv
|
||||||
|
|
||||||
|
emacs-ement
|
||||||
|
|
||||||
|
emacs-lua-mode
|
||||||
|
emacs-fennel-mode
|
||||||
|
|
||||||
|
emacs-emojify
|
||||||
|
|
||||||
|
emacs-mood-line
|
||||||
|
emacs-minions
|
||||||
|
|
||||||
|
emacs-alert
|
||||||
|
|
||||||
|
emacs-super-save
|
||||||
|
|
||||||
|
emacs-pinentry
|
||||||
|
pinentry-emacs
|
||||||
|
|
||||||
|
emacs-evil-nerd-commenter
|
||||||
|
|
||||||
|
emacs-ws-butler
|
||||||
|
|
||||||
|
emacs-hydra
|
||||||
|
|
||||||
|
emacs-vertico
|
||||||
|
emacs-corfu
|
||||||
|
emacs-kind-icon
|
||||||
|
emacs-orderless
|
||||||
|
emacs-consult
|
||||||
|
emacs-wgrep
|
||||||
|
emacs-marginalia
|
||||||
|
emacs-embark
|
||||||
|
|
||||||
|
emacs-avy
|
||||||
|
emacs-ace-window
|
||||||
|
|
||||||
|
emacs-default-text-scale
|
||||||
|
emacs-visual-fill-column
|
||||||
|
|
||||||
|
emacs-password-store
|
||||||
|
emacs-auth-source-pass
|
||||||
|
|
||||||
|
emacs-dired-hacks
|
||||||
|
emacs-all-the-icons-dired
|
||||||
|
|
||||||
|
emacs-org
|
||||||
|
emacs-org-modern
|
||||||
|
emacs-org-pomodoro
|
||||||
|
emacs-org-make-toc
|
||||||
|
emacs-org-present
|
||||||
|
emacs-org-roam
|
||||||
|
emacs-org-appear
|
||||||
|
emacs-org-ql
|
||||||
|
emacs-htmlize
|
||||||
|
emacs-denote
|
||||||
|
|
||||||
|
emacs-magit
|
||||||
|
emacs-magit-todos
|
||||||
|
|
||||||
|
git
|
||||||
|
(list git "send-email")
|
||||||
|
|
||||||
|
emacs-git-link
|
||||||
|
emacs-git-gutter
|
||||||
|
emacs-git-gutter-fringe
|
||||||
|
|
||||||
|
;emacs-project
|
||||||
|
ripgrep ;; For consult-ripgrep
|
||||||
|
|
||||||
|
emacs-lispy
|
||||||
|
emacs-lispyville
|
||||||
|
|
||||||
|
emacs-sly
|
||||||
|
emacs-sly-asdf
|
||||||
|
|
||||||
|
emacs-js2-mode
|
||||||
|
emacs-typescript-mode
|
||||||
|
emacs-apheleia
|
||||||
|
|
||||||
|
emacs-go-mode
|
||||||
|
|
||||||
|
emacs-rust-mode
|
||||||
|
emacs-zig-mode
|
||||||
|
|
||||||
|
emacs-helpful
|
||||||
|
|
||||||
|
emacs-geiser
|
||||||
|
|
||||||
|
emacs-markdown-mode
|
||||||
|
|
||||||
|
emacs-web-mode
|
||||||
|
emacs-skewer-mode
|
||||||
|
|
||||||
|
emacs-yaml-mode
|
||||||
|
|
||||||
|
emacs-flycheck
|
||||||
|
|
||||||
|
emacs-yasnippet
|
||||||
|
emacs-yasnippet-snippets
|
||||||
|
|
||||||
|
emacs-smartparens
|
||||||
|
|
||||||
|
emacs-rainbow-delimiters
|
||||||
|
|
||||||
|
emacs-rainbow-mode
|
||||||
|
|
||||||
|
emacs-posframe
|
||||||
|
emacs-keycast
|
||||||
|
|
||||||
|
emacs-obs-websocket-el
|
||||||
|
|
||||||
|
emacs-a
|
||||||
|
emacs-request
|
||||||
|
|
||||||
|
;; TODO: Move to mail profile
|
||||||
|
isync
|
||||||
|
mu
|
||||||
|
emacs-mu4e-alert
|
||||||
|
|
||||||
|
ledger
|
||||||
|
;; hledger
|
||||||
|
emacs-ledger-mode
|
||||||
|
|
||||||
|
emacs-eat
|
||||||
|
emacs-eshell-z
|
||||||
|
emacs-esh-autosuggest
|
||||||
|
emacs-xterm-color
|
||||||
|
emacs-exec-path-from-shell
|
||||||
|
|
||||||
|
emacs-pcmpl-args
|
||||||
|
|
||||||
|
emacs-eshell-syntax-highlighting
|
||||||
|
|
||||||
|
emacs-eshell-toggle
|
||||||
|
|
||||||
|
emacs-vterm
|
||||||
|
|
||||||
|
emacs-tracking
|
||||||
|
|
||||||
|
emacs-telega
|
||||||
|
|
||||||
|
emacs-elfeed
|
||||||
|
|
||||||
|
emacs-elpher
|
||||||
|
|
||||||
|
emacs-guix
|
||||||
|
|
||||||
|
emacs-daemons
|
||||||
|
|
||||||
|
emacs-pulseaudio-control
|
||||||
|
|
||||||
|
emacs-docker
|
||||||
|
emacs-docker-tramp
|
||||||
|
emacs-dockerfile-mode))
|
||||||
|
|
||||||
|
(define home-emacs-config-service-type
|
||||||
|
(service-type (name 'home-emacs-config)
|
||||||
|
(description "Applies my personal Emacs configuration.")
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-profile-service-type
|
||||||
|
home-emacs-config-profile-service)))
|
||||||
|
(default-value #f)))
|
|
@ -0,0 +1,99 @@
|
||||||
|
(define-module (fschl home-services pipewire)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services shepherd)
|
||||||
|
#:use-module (guix gexp))
|
||||||
|
|
||||||
|
(define (home-pipewire-profile-service config)
|
||||||
|
(map specification->package
|
||||||
|
(list "pipewire"
|
||||||
|
"wireplumber")))
|
||||||
|
|
||||||
|
(define (home-pipewire-shepherd-service config)
|
||||||
|
(list
|
||||||
|
;; Start Pipewire daemon
|
||||||
|
(shepherd-service
|
||||||
|
(requirement '(dbus))
|
||||||
|
(provision '(pipewire))
|
||||||
|
(stop #~(make-kill-destructor))
|
||||||
|
(start #~(make-forkexec-constructor
|
||||||
|
(list #$(file-append pipewire "/bin/pipewire"))
|
||||||
|
#:log-file (string-append
|
||||||
|
(or (getenv "XDG_LOG_HOME")
|
||||||
|
(format #f "~a/.local/var/log"
|
||||||
|
(getenv "HOME")))
|
||||||
|
"/pipewire.log")
|
||||||
|
#:environment-variables
|
||||||
|
(append (list "DISABLE_RTKIT=1")
|
||||||
|
(default-environment-variables)))))
|
||||||
|
;; Start Pipewire PulseAudio module
|
||||||
|
(shepherd-service
|
||||||
|
(requirement '(pipewire))
|
||||||
|
(provision '(pipewire-pulse))
|
||||||
|
(stop #~(make-kill-destructor))
|
||||||
|
(start #~(make-forkexec-constructor
|
||||||
|
(list #$(file-append pipewire "/bin/pipewire-pulse"))
|
||||||
|
#:log-file (string-append
|
||||||
|
(or (getenv "XDG_LOG_HOME")
|
||||||
|
(format #f "~a/.local/var/log"
|
||||||
|
(getenv "HOME")))
|
||||||
|
"/pipewire-pulse.log")
|
||||||
|
#:environment-variables
|
||||||
|
(append (list "DISABLE_RTKIT=1")
|
||||||
|
(default-environment-variables)))))
|
||||||
|
;; Start Wireplumber session manager
|
||||||
|
(shepherd-service
|
||||||
|
(requirement '(pipewire))
|
||||||
|
(provision '(wireplumber))
|
||||||
|
(stop #~(make-kill-destructor))
|
||||||
|
(start #~(make-forkexec-constructor
|
||||||
|
(list #$(file-append wireplumber "/bin/wireplumber"))
|
||||||
|
#:log-file (string-append
|
||||||
|
(or (getenv "XDG_LOG_HOME")
|
||||||
|
(format #f "~a/.local/var/log"
|
||||||
|
(getenv "HOME")))
|
||||||
|
"/wireplumber.log")
|
||||||
|
#:environment-variables
|
||||||
|
(append (list "DISABLE_RTKIT=1")
|
||||||
|
(default-environment-variables)))))))
|
||||||
|
|
||||||
|
(define (home-pipewire-xdg-configuration-service config)
|
||||||
|
`(("alsa/asoundrc"
|
||||||
|
,(mixed-text-file
|
||||||
|
"asoundrc"
|
||||||
|
#~(string-append
|
||||||
|
"<"
|
||||||
|
#$(file-append
|
||||||
|
pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf")
|
||||||
|
">\n<"
|
||||||
|
#$(file-append
|
||||||
|
pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
|
||||||
|
">\n"
|
||||||
|
"
|
||||||
|
pcm_type.pipewire {
|
||||||
|
lib " #$(file-append pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
|
||||||
|
"
|
||||||
|
}
|
||||||
|
ctl_type.pipewire {
|
||||||
|
lib " #$(file-append pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
|
||||||
|
"
|
||||||
|
}
|
||||||
|
")))))
|
||||||
|
|
||||||
|
(define-public home-pipewire-service-type
|
||||||
|
(service-type (name 'home-pipewire)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-profile-service-type
|
||||||
|
home-pipewire-profile-service)
|
||||||
|
(service-extension
|
||||||
|
home-shepherd-service-type
|
||||||
|
home-pipewire-shepherd-service)
|
||||||
|
(service-extension
|
||||||
|
home-xdg-configuration-files-service-type
|
||||||
|
home-pipewire-xdg-configuration-service)))
|
||||||
|
(default-value #f)
|
||||||
|
(description "Configures and runs the Pipewire audio system.")))
|
|
@ -0,0 +1,39 @@
|
||||||
|
(define-module (fschl home-services template-file)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (fschl utils)
|
||||||
|
#:export (home-template-file-service-type
|
||||||
|
home-template-file-configuration))
|
||||||
|
|
||||||
|
(define-configuration/no-serialization home-template-file-configuration
|
||||||
|
(base-path
|
||||||
|
(string)
|
||||||
|
"The base path from which all relative paths are calculated.")
|
||||||
|
(files
|
||||||
|
(list-of-strings)
|
||||||
|
"The list of relative file paths to include.")
|
||||||
|
(values
|
||||||
|
(alist)
|
||||||
|
"The list of key-value pairs to use for templating the configuration files"))
|
||||||
|
|
||||||
|
(define (home-template-file-files-service config)
|
||||||
|
(map (lambda (file)
|
||||||
|
(let ((full-path (canonicalize-path (string-append (home-template-file-configuration-base-path config)
|
||||||
|
file-name-separator-string
|
||||||
|
file))))
|
||||||
|
`(,file ,(plain-file
|
||||||
|
(basename full-path)
|
||||||
|
(apply-template-file full-path
|
||||||
|
(home-template-file-configuration-values config))))))
|
||||||
|
(home-template-file-configuration-files config)))
|
||||||
|
|
||||||
|
(define-public home-template-file-service-type
|
||||||
|
(service-type (name 'home-template-file)
|
||||||
|
(description "Creates configuration files based on templated text.")
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-files-service-type
|
||||||
|
home-template-file-files-service)))
|
||||||
|
(default-value #f)))
|
|
@ -0,0 +1,32 @@
|
||||||
|
(define-module (fschl home-services udiskie)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services shepherd)
|
||||||
|
#:use-module (gnu packages freedesktop)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
|
||||||
|
#:export (home-udiskie-service-type))
|
||||||
|
|
||||||
|
(define (home-udiskie-profile-service config)
|
||||||
|
(list udiskie))
|
||||||
|
|
||||||
|
(define (home-udiskie-shepherd-service config)
|
||||||
|
(list
|
||||||
|
(shepherd-service
|
||||||
|
(provision '(udiskie))
|
||||||
|
(documentation "Run and control udiskie.")
|
||||||
|
(start #~(make-forkexec-constructor '("udiskie" "-t")))
|
||||||
|
(stop #~(make-kill-destructor)))))
|
||||||
|
|
||||||
|
(define home-udiskie-service-type
|
||||||
|
(service-type (name 'home-udiskie)
|
||||||
|
(description "A service for launching Udiskie.")
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-profile-service-type
|
||||||
|
home-udiskie-profile-service)
|
||||||
|
(service-extension
|
||||||
|
home-shepherd-service-type
|
||||||
|
home-udiskie-shepherd-service)))
|
||||||
|
(default-value #f)))
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Disable access control for the current user
|
||||||
|
xhost +SI:localuser:$USER
|
||||||
|
|
||||||
|
# Run xsettingsd to progagate font and theme settings
|
||||||
|
xsettingsd &
|
||||||
|
|
||||||
|
# Enable screen compositing
|
||||||
|
compton &
|
||||||
|
|
||||||
|
# Turn off the system bell
|
||||||
|
xset -b
|
||||||
|
|
||||||
|
# Enable screen locking on suspend
|
||||||
|
xss-lock -- slock &
|
||||||
|
|
||||||
|
# Uncomment this to start xterm instead for debugging purposes!
|
||||||
|
# Then you can manually run the window manager and log output
|
||||||
|
# > exec dbus-launch emacs -mm --debug-init --use-exwm 2>&1 | tee ~/debug.log
|
||||||
|
#xterm
|
||||||
|
|
||||||
|
# Fire it up
|
||||||
|
exec dbus-launch --exit-with-session emacs -mm --debug-init --use-exwm --with-profile=default
|
||||||
|
#exec dbus-launch --exit-with-session herbstluftwm
|
|
@ -0,0 +1,74 @@
|
||||||
|
(define-module (fschl home-services xsettingsd)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
|
#:use-module (fschl packages fonts)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:export (home-xsettingsd-service-type
|
||||||
|
home-xsettingsd-configuration))
|
||||||
|
|
||||||
|
(define-configuration home-xsettingsd-configuration
|
||||||
|
(dpi
|
||||||
|
(integer 180)
|
||||||
|
"Screen dots per inch (DPI).")
|
||||||
|
|
||||||
|
(theme
|
||||||
|
(string "Adwaita")
|
||||||
|
"The name of the GTK theme to apply.")
|
||||||
|
|
||||||
|
(icon-theme
|
||||||
|
(string "Adwaita")
|
||||||
|
"The name of the icon theme to apply.")
|
||||||
|
|
||||||
|
(font
|
||||||
|
(string "Deja Vu Sans 10")
|
||||||
|
"The name and size of the normal user interface font.")
|
||||||
|
|
||||||
|
(monospace-font
|
||||||
|
(string "Deja Vu Mono 10")
|
||||||
|
"The name and size of the monospace user interface font.")
|
||||||
|
|
||||||
|
(extra-content
|
||||||
|
(string "")
|
||||||
|
"Extra content appended as-is to the xsettingsd configuration file.")
|
||||||
|
|
||||||
|
;; Don't use the serialization system!
|
||||||
|
(no-serialization))
|
||||||
|
|
||||||
|
(define (generate-xsettingsd-file config)
|
||||||
|
(string-append "
|
||||||
|
Net/ThemeName \"" (home-xsettingsd-configuration-theme config) "\"
|
||||||
|
Net/IconThemeName \"" (home-xsettingsd-configuration-icon-theme config) "\"
|
||||||
|
Gtk/DecorationLayout \"menu:minimize,maximize,close\"
|
||||||
|
Gtk/FontName \"" (home-xsettingsd-configuration-font config) "\"
|
||||||
|
Gtk/MonospaceFontName \"" (home-xsettingsd-configuration-monospace-font config) "\"
|
||||||
|
Gtk/CursorThemeName \"Adwaita\"
|
||||||
|
Xft/DPI " (number->string (* 1024 (home-xsettingsd-configuration-dpi config))) " # 1024 * DPI"
|
||||||
|
"\n"
|
||||||
|
(home-xsettingsd-configuration-extra-content config)
|
||||||
|
"\n"))
|
||||||
|
|
||||||
|
(define (home-xsettingsd-files-service config)
|
||||||
|
(list
|
||||||
|
`(".config/xsettingsd/xsettingsd.conf" ,(plain-file "xsettingsd.conf"
|
||||||
|
(generate-xsettingsd-file config)))))
|
||||||
|
|
||||||
|
(define (home-xsettingsd-profile-service config)
|
||||||
|
(map specification->package
|
||||||
|
(list "xsettingsd")))
|
||||||
|
|
||||||
|
|
||||||
|
(define home-xsettingsd-service-type
|
||||||
|
(service-type (name 'home-xsettingsd)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension
|
||||||
|
home-profile-service-type
|
||||||
|
home-xsettingsd-profile-service)
|
||||||
|
(service-extension
|
||||||
|
home-files-service-type
|
||||||
|
home-xsettingsd-files-service)))
|
||||||
|
(default-value (home-xsettingsd-configuration))
|
||||||
|
(description "Configures UI appearance settings for Xorg sessions using the xsettingsd
|
||||||
|
daemon.")))
|
|
@ -0,0 +1,23 @@
|
||||||
|
(define-module (fschl packages fonts)
|
||||||
|
#:use-module (guix download)
|
||||||
|
#:use-module (guix packages)
|
||||||
|
#:use-module (guix build-system font)
|
||||||
|
#:use-module ((guix licenses) #:prefix license:))
|
||||||
|
|
||||||
|
(define-public font-jost
|
||||||
|
(package
|
||||||
|
(name "font-jost")
|
||||||
|
(version "3.5")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append
|
||||||
|
"https://github.com/indestructible-type/Jost"
|
||||||
|
"/releases/download/" version "/Jost.zip"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"1nb92imnk1g7c5nyra2q3k298ym8dp3hcxr1saxyj8mg6gxsqc0h"))))
|
||||||
|
(build-system font-build-system)
|
||||||
|
(home-page "https://indestructibletype.com/Jost.html")
|
||||||
|
(synopsis "The Jost* font")
|
||||||
|
(description "Jost* font.")
|
||||||
|
(license license:silofl1.1)))
|
|
@ -0,0 +1,47 @@
|
||||||
|
(define-module (fschl packages linux)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu packages audio)
|
||||||
|
#:use-module (gnu packages base)
|
||||||
|
#:use-module (gnu packages build-tools)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
|
#:use-module (gnu packages freedesktop)
|
||||||
|
#:use-module (gnu packages pkg-config)
|
||||||
|
#:use-module (gnu packages pulseaudio)
|
||||||
|
#:use-module (gnu packages vulkan)
|
||||||
|
#:use-module (guix build-system meson)
|
||||||
|
#:use-module (guix download)
|
||||||
|
#:use-module (guix git-download)
|
||||||
|
#:use-module ((guix licenses) #:prefix license:)
|
||||||
|
#:use-module (guix packages)
|
||||||
|
#:use-module (guix gexp))
|
||||||
|
|
||||||
|
;; A temporary fix based on this patch:
|
||||||
|
;; https://lists.gnu.org/archive/html/guix-patches/2021-10/msg00762.html
|
||||||
|
|
||||||
|
(define-public pipewire-0.3.38
|
||||||
|
(package
|
||||||
|
(inherit pipewire)
|
||||||
|
(name "pipewire")
|
||||||
|
(version "0.3.38")
|
||||||
|
(source (origin
|
||||||
|
(method git-fetch)
|
||||||
|
(uri (git-reference
|
||||||
|
(url "https://github.com/PipeWire/pipewire")
|
||||||
|
(commit version)))
|
||||||
|
(file-name (git-file-name name version))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"15alnzwdgjbjrmphyinwdbaa1bi9cqbk8gkhrb4y6akjqph76hs0"))))
|
||||||
|
(arguments
|
||||||
|
`(#:meson ,meson-0.59
|
||||||
|
#:configure-flags
|
||||||
|
(list (string-append "-Dudevrulesdir=" (assoc-ref %outputs "out")
|
||||||
|
"/lib/udev/rules.d")
|
||||||
|
"-Dsystemd=disabled")))
|
||||||
|
(inputs
|
||||||
|
(append (package-inputs pipewire)
|
||||||
|
`(("bluez" ,bluez)
|
||||||
|
("jack" ,jack-2)
|
||||||
|
("pulseaudio" ,pulseaudio)
|
||||||
|
("vulkan-loader" ,vulkan-loader)
|
||||||
|
("vulkan-headers" ,vulkan-headers))))))
|
|
@ -0,0 +1,253 @@
|
||||||
|
(define-module (fschl systems base)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
|
#:use-module (gnu)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system nss)
|
||||||
|
#:use-module (gnu system setuid)
|
||||||
|
#:use-module (nongnu packages linux)
|
||||||
|
#:use-module (nongnu system linux-initrd))
|
||||||
|
|
||||||
|
(use-service-modules guix admin sysctl pm nix avahi dbus cups desktop linux
|
||||||
|
mcron networking xorg ssh docker audio virtualization)
|
||||||
|
|
||||||
|
(use-package-modules audio video nfs certs shells ssh linux bash emacs gnome
|
||||||
|
networking wm fonts libusb cups freedesktop file-systems
|
||||||
|
version-control package-management vim)
|
||||||
|
|
||||||
|
(define-public base-operating-system
|
||||||
|
(operating-system
|
||||||
|
(host-name "default")
|
||||||
|
(timezone "Europe/Berlin")
|
||||||
|
(locale "en_US.utf8")
|
||||||
|
|
||||||
|
;; Use non-free Linux and firmware
|
||||||
|
(kernel linux)
|
||||||
|
(firmware (list linux-firmware))
|
||||||
|
(initrd microcode-initrd)
|
||||||
|
|
||||||
|
;; Additional kernel modules
|
||||||
|
(kernel-loadable-modules (list v4l2loopback-linux-module))
|
||||||
|
|
||||||
|
;; Choose US English keyboard layout. The "altgr-intl"
|
||||||
|
;; variant provides dead keys for accented characters.
|
||||||
|
(keyboard-layout (keyboard-layout "de" "altgr-intl" #:model "thinkpad"))
|
||||||
|
|
||||||
|
;; Use the UEFI variant of GRUB with the EFI System
|
||||||
|
;; Partition mounted on /boot/efi.
|
||||||
|
(bootloader (bootloader-configuration
|
||||||
|
(bootloader grub-efi-bootloader)
|
||||||
|
(targets '("/boot/efi"))
|
||||||
|
(keyboard-layout keyboard-layout)))
|
||||||
|
|
||||||
|
;; Guix doesn't like it when there isn't a file-systems
|
||||||
|
;; entry, so add one that is meant to be overridden
|
||||||
|
(file-systems (cons*
|
||||||
|
(file-system
|
||||||
|
(mount-point "/tmp")
|
||||||
|
(device "none")
|
||||||
|
(type "tmpfs")
|
||||||
|
(check? #f))
|
||||||
|
%base-file-systems))
|
||||||
|
|
||||||
|
(users (cons (user-account
|
||||||
|
(name "fschl")
|
||||||
|
(comment "Frieder Schlesier")
|
||||||
|
(group "users")
|
||||||
|
(home-directory "/home/fschl")
|
||||||
|
(supplementary-groups '("wheel" ;; sudo
|
||||||
|
"netdev" ;; network devices
|
||||||
|
"kvm"
|
||||||
|
"tty"
|
||||||
|
"input"
|
||||||
|
"docker"
|
||||||
|
"realtime" ;; Enable realtime scheduling
|
||||||
|
"lp" ;; control bluetooth devices
|
||||||
|
"audio" ;; control audio devices
|
||||||
|
"video"))) ;; control video devices
|
||||||
|
|
||||||
|
%base-user-accounts))
|
||||||
|
|
||||||
|
;; Add the 'realtime' group
|
||||||
|
(groups (cons (user-group (system? #t) (name "realtime"))
|
||||||
|
%base-groups))
|
||||||
|
|
||||||
|
;; Install bare-minimum system packages
|
||||||
|
(packages (cons* bluez
|
||||||
|
bluez-alsa
|
||||||
|
brightnessctl
|
||||||
|
emacs-no-x-toolkit
|
||||||
|
exfat-utils
|
||||||
|
fuse-exfat
|
||||||
|
git
|
||||||
|
gvfs ;; Enable user mounts
|
||||||
|
intel-media-driver/nonfree
|
||||||
|
libva-utils
|
||||||
|
ntfs-3g
|
||||||
|
stow
|
||||||
|
vim
|
||||||
|
%base-packages))
|
||||||
|
|
||||||
|
;; Configure only the services necessary to run the system
|
||||||
|
(services (append
|
||||||
|
(modify-services %base-services
|
||||||
|
(delete login-service-type)
|
||||||
|
(delete mingetty-service-type)
|
||||||
|
(delete console-font-service-type))
|
||||||
|
(list
|
||||||
|
;; Seat management (can't use seatd because Wireplumber depends on elogind)
|
||||||
|
(service elogind-service-type)
|
||||||
|
|
||||||
|
;; Configure TTYs and graphical greeter
|
||||||
|
;; (service console-font-service-type
|
||||||
|
;; (map (lambda (tty)
|
||||||
|
;; ;; Use a larger font for HIDPI screens
|
||||||
|
;; (cons tty (file-append
|
||||||
|
;; font-terminus
|
||||||
|
;; "/share/consolefonts/ter-132n")))
|
||||||
|
;; '("tty1" "tty2" "tty3")))
|
||||||
|
|
||||||
|
(service greetd-service-type
|
||||||
|
(greetd-configuration
|
||||||
|
(greeter-supplementary-groups (list "video" "input"))
|
||||||
|
(terminals
|
||||||
|
(list
|
||||||
|
;; TTY1 is the graphical login screen for Sway
|
||||||
|
(greetd-terminal-configuration
|
||||||
|
(terminal-vt "1")
|
||||||
|
(terminal-switch #t)
|
||||||
|
;; (default-session-command (greetd-wlgreet-sway-session
|
||||||
|
;; (sway-configuration
|
||||||
|
;; (plain-file "sway-greet.conf"
|
||||||
|
;; "output * bg /home/fschl/.dotfiles/backgrounds/samuel-ferrara-uOi3lg8fGl4-unsplash.jpg fill\n"))))
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Set up remaining TTYs for terminal use
|
||||||
|
(greetd-terminal-configuration (terminal-vt "2"))
|
||||||
|
(greetd-terminal-configuration (terminal-vt "3"))))))
|
||||||
|
|
||||||
|
;; Configure swaylock as a setuid program
|
||||||
|
(service screen-locker-service-type
|
||||||
|
(screen-locker-configuration
|
||||||
|
(name "swaylock")
|
||||||
|
(program (file-append swaylock "/bin/swaylock"))
|
||||||
|
(using-pam? #t)
|
||||||
|
(using-setuid? #f)))
|
||||||
|
|
||||||
|
;; Configure the Guix service and ensure we use Nonguix substitutes
|
||||||
|
(simple-service 'add-nonguix-substitutes
|
||||||
|
guix-service-type
|
||||||
|
(guix-extension
|
||||||
|
(substitute-urls
|
||||||
|
(append (list "https://substitutes.nonguix.org")
|
||||||
|
%default-substitute-urls))
|
||||||
|
(authorized-keys
|
||||||
|
(append (list (plain-file "nonguix.pub"
|
||||||
|
"(public-key (ecc (curve Ed25519) (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))"))
|
||||||
|
%default-authorized-guix-keys))))
|
||||||
|
|
||||||
|
;; Set up Polkit to allow `wheel' users to run admin tasks
|
||||||
|
polkit-wheel-service
|
||||||
|
|
||||||
|
;; Give certain programs super-user access
|
||||||
|
(simple-service 'mount-setuid-helpers
|
||||||
|
setuid-program-service-type
|
||||||
|
(map (lambda (program)
|
||||||
|
(setuid-program
|
||||||
|
(program program)))
|
||||||
|
(list (file-append nfs-utils "/sbin/mount.nfs")
|
||||||
|
(file-append ntfs-3g "/sbin/mount.ntfs-3g"))))
|
||||||
|
|
||||||
|
;; Networking services
|
||||||
|
(service network-manager-service-type
|
||||||
|
(network-manager-configuration
|
||||||
|
(vpn-plugins
|
||||||
|
(list network-manager-openvpn))))
|
||||||
|
(service wpa-supplicant-service-type) ;; Needed by NetworkManager
|
||||||
|
(service modem-manager-service-type) ;; For cellular modems
|
||||||
|
(service bluetooth-service-type
|
||||||
|
(bluetooth-configuration
|
||||||
|
(auto-enable? #t)))
|
||||||
|
(service usb-modeswitch-service-type)
|
||||||
|
|
||||||
|
;; Basic desktop system services (copied from %desktop-services)
|
||||||
|
(service avahi-service-type)
|
||||||
|
(service udisks-service-type)
|
||||||
|
(service upower-service-type)
|
||||||
|
(service cups-pk-helper-service-type)
|
||||||
|
(service geoclue-service-type)
|
||||||
|
(service polkit-service-type)
|
||||||
|
(service dbus-root-service-type)
|
||||||
|
fontconfig-file-system-service ;; Manage the fontconfig cache
|
||||||
|
|
||||||
|
;; Power and thermal management services
|
||||||
|
(service thermald-service-type)
|
||||||
|
(service tlp-service-type
|
||||||
|
(tlp-configuration
|
||||||
|
(cpu-boost-on-ac? #t)
|
||||||
|
(wifi-pwr-on-bat? #t)))
|
||||||
|
|
||||||
|
;; Enable JACK to enter realtime mode
|
||||||
|
(service pam-limits-service-type
|
||||||
|
(list
|
||||||
|
(pam-limits-entry "@realtime" 'both 'rtprio 99)
|
||||||
|
(pam-limits-entry "@realtime" 'both 'nice -19)
|
||||||
|
(pam-limits-entry "@realtime" 'both 'memlock 'unlimited)))
|
||||||
|
|
||||||
|
;; Configure v4l2loopback module for virtual cameras
|
||||||
|
;; See also: https://stackoverflow.com/a/66072635
|
||||||
|
;; https://github.com/umlaeute/v4l2loopback
|
||||||
|
;; (service kernel-module-loader-service-type '("v4l2loopback"))
|
||||||
|
;; (simple-service 'v4l2loopback-config etc-service-type
|
||||||
|
;; (list `("modprobe.d/v4l2loopback.conf"
|
||||||
|
;; ,(plain-file "v4l2loopback.conf"
|
||||||
|
;; "options v4l2loopback devices=1 video_nr=2 exclusive_caps=1 card_label=\"OBS Virtual Camera\""))))
|
||||||
|
|
||||||
|
|
||||||
|
;; Enable Docker containers and virtual machines
|
||||||
|
(service docker-service-type)
|
||||||
|
(service libvirt-service-type
|
||||||
|
(libvirt-configuration
|
||||||
|
(unix-sock-group "libvirt")
|
||||||
|
(tls-port "16555")))
|
||||||
|
|
||||||
|
;; Enable SSH access
|
||||||
|
(service openssh-service-type
|
||||||
|
(openssh-configuration
|
||||||
|
(openssh openssh-sans-x)
|
||||||
|
(port-number 2222)))
|
||||||
|
|
||||||
|
;; Enable printing and scanning
|
||||||
|
(service sane-service-type)
|
||||||
|
(service cups-service-type
|
||||||
|
(cups-configuration
|
||||||
|
(web-interface? #t)
|
||||||
|
(extensions
|
||||||
|
(list cups-filters))))
|
||||||
|
|
||||||
|
;; Set up the X11 socket directory for XWayland
|
||||||
|
(service x11-socket-directory-service-type)
|
||||||
|
|
||||||
|
;; Sync system clock with time servers
|
||||||
|
(service ntp-service-type)
|
||||||
|
|
||||||
|
;; Add udev rules for MTP (mobile) devices for non-root user access
|
||||||
|
(simple-service 'mtp udev-service-type (list libmtp))
|
||||||
|
|
||||||
|
;; Add udev rules for a few packages
|
||||||
|
(udev-rules-service 'pipewire-add-udev-rules pipewire)
|
||||||
|
(udev-rules-service 'brightnessctl-udev-rules brightnessctl)
|
||||||
|
|
||||||
|
;; Enable the build service for Nix package manager
|
||||||
|
(service nix-service-type)
|
||||||
|
|
||||||
|
;; Schedule cron jobs for system tasks
|
||||||
|
(simple-service 'system-cron-jobs
|
||||||
|
mcron-service-type
|
||||||
|
(list
|
||||||
|
;; Run `guix gc' 5 minutes after midnight every day.
|
||||||
|
;; Clean up generations older than 2 months and free
|
||||||
|
;; at least 10G of space.
|
||||||
|
#~(job "5 0 * * *" "guix gc -d 2m -F 10G"))))))
|
||||||
|
|
||||||
|
;; Allow resolution of '.local' host names with mDNS
|
||||||
|
(name-service-switch %mdns-host-lookup-nss)))
|
|
@ -0,0 +1,107 @@
|
||||||
|
(define-module (fschl systems common)
|
||||||
|
#:use-module (fschl utils)
|
||||||
|
#:use-module (fschl home-services emacs)
|
||||||
|
#:use-module (fschl home-services desktop)
|
||||||
|
#:use-module (fschl home-services udiskie)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu packages gnupg)
|
||||||
|
#:use-module (gnu home)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services dotfiles)
|
||||||
|
#:use-module (gnu home services gnupg)
|
||||||
|
#:use-module (gnu home services mcron)
|
||||||
|
#:use-module (gnu home services shells)
|
||||||
|
#:use-module (gnu home services desktop)
|
||||||
|
#:use-module (guix gexp))
|
||||||
|
|
||||||
|
(define-public common-home-services
|
||||||
|
(list
|
||||||
|
;; Set environment variables for every session
|
||||||
|
(simple-service 'profile-env-vars-service
|
||||||
|
home-environment-variables-service-type
|
||||||
|
'( ;; Sort hidden (dot) files first in `ls` listings
|
||||||
|
("LC_COLLATE" . "C")
|
||||||
|
|
||||||
|
;; Emacs is our editor
|
||||||
|
("VISUAL" . "emacsclient")
|
||||||
|
("EDITOR" . "emacsclient")
|
||||||
|
|
||||||
|
;; Add some things to $PATH (maybe integrate into other services?)
|
||||||
|
;; ("PATH" . "$HOME/.bin:$HOME/.npm-global/bin:$PATH")
|
||||||
|
|
||||||
|
;; Make sure Flatpak apps are visible
|
||||||
|
("XDG_DATA_DIRS" . "$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share")
|
||||||
|
|
||||||
|
;; Make sure JAVA_HOME is set
|
||||||
|
;; TODO: Move this to a different service
|
||||||
|
;; ("JAVA_HOME" . "$(dirname $(dirname $(readlink $(which java))))")
|
||||||
|
|
||||||
|
;; Set Wayland-specific environment variables (taken from RDE)
|
||||||
|
("XDG_CURRENT_DESKTOP" . "sway")
|
||||||
|
("XDG_SESSION_TYPE" . "wayland")
|
||||||
|
("RTC_USE_PIPEWIRE" . "true")
|
||||||
|
("SDL_VIDEODRIVER" . "wayland")
|
||||||
|
("MOZ_ENABLE_WAYLAND" . "1")
|
||||||
|
("CLUTTER_BACKEND" . "wayland")
|
||||||
|
("ELM_ENGINE" . "wayland_egl")
|
||||||
|
("ECORE_EVAS_ENGINE" . "wayland-egl")
|
||||||
|
("QT_QPA_PLATFORM" . "wayland-egl")))
|
||||||
|
|
||||||
|
;; Set up the shell environment
|
||||||
|
(service home-bash-service-type
|
||||||
|
(home-bash-configuration
|
||||||
|
(bash-profile
|
||||||
|
`(,(plain-file "bash-profile-extras"
|
||||||
|
(string-append
|
||||||
|
;; Load the Nix profile
|
||||||
|
"if [ -f /run/current-system/profile/etc/profile.d/nix.sh ]; then\n"
|
||||||
|
" . /run/current-system/profile/etc/profile.d/nix.sh\n"
|
||||||
|
"fi\n"))
|
||||||
|
,(plain-file "bash-sway-login"
|
||||||
|
(string-append
|
||||||
|
"if [ -z \"$WAYLAND_DISPLAY\" ] && [ \"$XDG_VTNR\" -eq 1 ]; then\n"
|
||||||
|
" exec sway\n"
|
||||||
|
"fi\n"))))
|
||||||
|
(bashrc
|
||||||
|
`(,(local-file "../files/bash-prompt")))))
|
||||||
|
|
||||||
|
;; Place other files
|
||||||
|
(simple-service 'profile-files-service
|
||||||
|
home-files-service-type
|
||||||
|
(list `(".inputrc" ,(local-file "../files/inputrc"))))
|
||||||
|
|
||||||
|
;; GnuPG configuration
|
||||||
|
;; (service home-gpg-agent-service-type
|
||||||
|
;; (home-gpg-agent-configuration
|
||||||
|
;; (pinentry-program
|
||||||
|
;; (file-append pinentry-emacs "/bin/pinentry-emacs"))
|
||||||
|
;; (ssh-support? #t)
|
||||||
|
;; (default-cache-ttl 28800)
|
||||||
|
;; (max-cache-ttl 28800)
|
||||||
|
;; (default-cache-ttl-ssh 28800)
|
||||||
|
;; (max-cache-ttl-ssh 28800)))
|
||||||
|
|
||||||
|
;; Emacs configuration
|
||||||
|
(service home-emacs-config-service-type)
|
||||||
|
|
||||||
|
;; Run user dbus session
|
||||||
|
(service home-dbus-service-type)
|
||||||
|
|
||||||
|
;; Set up desktop environment
|
||||||
|
(service home-desktop-service-type)
|
||||||
|
|
||||||
|
(service home-dotfiles-service-type
|
||||||
|
(home-dotfiles-configuration
|
||||||
|
(directories (list "../../.config"))))
|
||||||
|
|
||||||
|
;; Start background jobs
|
||||||
|
;; (service home-mcron-service-type
|
||||||
|
;; (home-mcron-configuration
|
||||||
|
;; (jobs
|
||||||
|
;; (list
|
||||||
|
;; #~(job
|
||||||
|
;; '(next-hour (range 0 24 4))
|
||||||
|
;; "~/.dotfiles/.bin/sync-passwords")))))
|
||||||
|
|
||||||
|
;; Udiskie for auto-mounting devices
|
||||||
|
(service home-udiskie-service-type)))
|
|
@ -0,0 +1,51 @@
|
||||||
|
;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
|
||||||
|
;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
|
||||||
|
;;; Copyright © 2019 David Wilson <david@daviwil.com>
|
||||||
|
;;;
|
||||||
|
;;; This program is free software: you can redistribute it and/or modify
|
||||||
|
;;; it under the terms of the GNU General Public License as published by
|
||||||
|
;;; the Free Software Foundation, either version 3 of the License, or
|
||||||
|
;;; (at your option) any later version.
|
||||||
|
;;;
|
||||||
|
;;; This program is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
;;; GNU General Public License for more details.
|
||||||
|
;;;
|
||||||
|
;;; You should have received a copy of the GNU General Public License
|
||||||
|
;;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
;; Generate a bootable image (e.g. for USB sticks, etc.) with:
|
||||||
|
;; $ guix system disk-image nongnu/system/install.scm
|
||||||
|
|
||||||
|
(define-module (fschl systems install)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system install)
|
||||||
|
#:use-module (gnu packages version-control)
|
||||||
|
#:use-module (gnu packages vim)
|
||||||
|
#:use-module (gnu packages curl)
|
||||||
|
#:use-module (gnu packages emacs)
|
||||||
|
#:use-module (gnu packages linux)
|
||||||
|
#:use-module (gnu packages mtools)
|
||||||
|
#:use-module (gnu packages file-systems)
|
||||||
|
#:use-module (gnu packages package-management)
|
||||||
|
#:use-module (nongnu packages linux)
|
||||||
|
#:export (installation-os-nonfree))
|
||||||
|
|
||||||
|
(define installation-os-nonfree
|
||||||
|
(operating-system
|
||||||
|
(inherit installation-os)
|
||||||
|
(kernel linux)
|
||||||
|
(firmware (list linux-firmware))
|
||||||
|
|
||||||
|
;; Add the 'net.ifnames' argument to prevent network interfaces
|
||||||
|
;; from having really long names. This can cause an issue with
|
||||||
|
;; wpa_supplicant when you try to connect to a wifi network.
|
||||||
|
(kernel-arguments '("quiet" "modprobe.blacklist=radeon" "net.ifnames=0"))
|
||||||
|
|
||||||
|
;; Add some extra packages useful for the installation process
|
||||||
|
(packages
|
||||||
|
(append (list exfat-utils fuse-exfat git curl stow vim emacs-no-x-toolkit)
|
||||||
|
(operating-system-packages installation-os)))))
|
||||||
|
|
||||||
|
installation-os-nonfree
|
|
@ -0,0 +1,109 @@
|
||||||
|
;; This is an operating system configuration template
|
||||||
|
;; for a "bare bones" setup, with no X11 display server.
|
||||||
|
(define-module (fschl systems minimal-system)
|
||||||
|
#:use-module (srfi srfi-1)
|
||||||
|
#:use-module (gnu)
|
||||||
|
#:use-module (gnu services docker)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system nss)
|
||||||
|
#:use-module (gnu system setuid))
|
||||||
|
|
||||||
|
(use-modules (gnu))
|
||||||
|
(use-service-modules networking
|
||||||
|
;; dbus ; required by dockerd
|
||||||
|
docker
|
||||||
|
guix virtualization ssh)
|
||||||
|
(use-package-modules linux
|
||||||
|
docker
|
||||||
|
;; freedesktop ; required by elogind, which is required by dockerd
|
||||||
|
screen ssh vim certs)
|
||||||
|
|
||||||
|
|
||||||
|
;; (define-public base-operating-system
|
||||||
|
(operating-system
|
||||||
|
(host-name "home-server")
|
||||||
|
(timezone "Europe/Berlin")
|
||||||
|
(locale "en_US.utf8")
|
||||||
|
|
||||||
|
(keyboard-layout (keyboard-layout "de" "altgr-intl" #:model "thinkpad"))
|
||||||
|
|
||||||
|
;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
|
||||||
|
;; target hard disk, and "my-root" is the label of the target
|
||||||
|
;; root file system.
|
||||||
|
(bootloader (bootloader-configuration
|
||||||
|
(bootloader grub-bootloader)
|
||||||
|
(targets '("/dev/sdX"))))
|
||||||
|
;; It's fitting to support the equally bare bones ‘-nographic’
|
||||||
|
;; QEMU option, which also nicely sidesteps forcing QWERTY.
|
||||||
|
(kernel-arguments (list "console=ttyS0,115200"))
|
||||||
|
(file-systems (cons (file-system
|
||||||
|
(device (file-system-label "my-root"))
|
||||||
|
(mount-point "/")
|
||||||
|
(type "ext4"))
|
||||||
|
%base-file-systems))
|
||||||
|
|
||||||
|
;; This is where user accounts are specified. The "root"
|
||||||
|
;; account is implicit, and is initially created with the
|
||||||
|
;; empty password.
|
||||||
|
(users (cons (user-account
|
||||||
|
(name "fschl")
|
||||||
|
(comment "F S")
|
||||||
|
(group "users")
|
||||||
|
|
||||||
|
;; Adding the account to the "wheel" group makes it a
|
||||||
|
;; sudoer.
|
||||||
|
(supplementary-groups '("wheel"
|
||||||
|
"netdev"
|
||||||
|
;; "docker"
|
||||||
|
)))
|
||||||
|
%base-user-accounts))
|
||||||
|
|
||||||
|
;; Globally-installed packages.
|
||||||
|
(packages (cons* vim
|
||||||
|
net-tools
|
||||||
|
%base-packages))
|
||||||
|
|
||||||
|
;; Add services to the baseline: a DHCP client and
|
||||||
|
;; an SSH server.
|
||||||
|
(services (append (list (service dhcp-client-service-type)
|
||||||
|
;; (service dbus-root-service-type) ;; required by dockerd
|
||||||
|
;; (service elogind-service-type) ;; required by dockerd
|
||||||
|
;; (service docker-service-type)
|
||||||
|
;; (service oci-container-service-type
|
||||||
|
;; (list
|
||||||
|
;; (oci-container-configuration
|
||||||
|
;; (image "jellyfin/jellyfin")
|
||||||
|
;; (provision "jellyfin")
|
||||||
|
;; (network "host")
|
||||||
|
;; (ports
|
||||||
|
;; '(("8096" . "8096")))
|
||||||
|
;; (volumes
|
||||||
|
;; '("jellyfin-config:/config"
|
||||||
|
;; "jellyfin-cache:/cache"
|
||||||
|
;; "/home/daviwil/Media:/media")))))
|
||||||
|
;; (service oci-container-service-type
|
||||||
|
;; (list
|
||||||
|
;; (oci-container-configuration
|
||||||
|
;; (image "pihole/pihole:latest")
|
||||||
|
;; (provision "pihole")
|
||||||
|
;; (network "host")
|
||||||
|
;; (ports
|
||||||
|
;; '("53:53/tcp"
|
||||||
|
;; "53:53/udp"
|
||||||
|
;; "67:67/udp" ; Only required if using Pi-hole as DHCP server
|
||||||
|
;; "80:80/tcp"))
|
||||||
|
;; (environment
|
||||||
|
;; '(("TZ" . "America/Chicago")))
|
||||||
|
;; ; Uncomment and set a secure password, or it will be random
|
||||||
|
;; ; '(("WEBPASSWORD" . "set a secure password here"))
|
||||||
|
;; (volumes
|
||||||
|
;; '("/docker/Pihole:/etc/pihole"
|
||||||
|
;; "/docker/Dnsmasq:/etc/dnsmasq.d")))))
|
||||||
|
(service openssh-service-type
|
||||||
|
(openssh-configuration
|
||||||
|
(openssh openssh-sans-x)
|
||||||
|
(port-number 2222))))
|
||||||
|
%base-services)))
|
||||||
|
|
||||||
|
|
||||||
|
;; (base-operating-system)
|
|
@ -0,0 +1,73 @@
|
||||||
|
(define-module (fschl systems tower-guix)
|
||||||
|
#:use-module (fschl utils)
|
||||||
|
#:use-module (fschl systems base)
|
||||||
|
#:use-module (fschl systems common)
|
||||||
|
;; #:use-module (fschl home-services pipewire)
|
||||||
|
#:use-module (fschl home-services xsettingsd)
|
||||||
|
#:use-module (gnu)
|
||||||
|
#:use-module (gnu home)
|
||||||
|
#:use-module (gnu home services xdg)
|
||||||
|
#:use-module (gnu home services sound)
|
||||||
|
#:use-module (gnu packages file-systems)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu services docker)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system uuid)
|
||||||
|
#:use-module (gnu system file-systems)
|
||||||
|
#:use-module (gnu system mapped-devices)
|
||||||
|
#:use-module (nongnu packages linux))
|
||||||
|
|
||||||
|
(define home
|
||||||
|
(home-environment
|
||||||
|
(services (cons*
|
||||||
|
(service home-xsettingsd-service-type
|
||||||
|
(home-xsettingsd-configuration
|
||||||
|
(dpi 180)))
|
||||||
|
;; (service home-pipewire-service-type)
|
||||||
|
(simple-service
|
||||||
|
'xdg-user-directories-config-service
|
||||||
|
home-xdg-user-directories-service-type
|
||||||
|
(home-xdg-user-directories-configuration
|
||||||
|
(desktop "$HOME/desktop")
|
||||||
|
(documents "/media/store/Documents")
|
||||||
|
(download "/media/store/Downloads")
|
||||||
|
(music "/media/store/Music")
|
||||||
|
(pictures "/media/store/Pictures")
|
||||||
|
(publicshare "/media/store/Public")
|
||||||
|
(templates "/media/store/Templates")
|
||||||
|
(videos "/media/store/Videos")))
|
||||||
|
common-home-services))))
|
||||||
|
|
||||||
|
(define system
|
||||||
|
(operating-system
|
||||||
|
(inherit base-operating-system)
|
||||||
|
(host-name "tower-guix")
|
||||||
|
|
||||||
|
(keyboard-layout (keyboard-layout "de" "altgr-intl" #:options '("ctrl:nocaps")))
|
||||||
|
(bootloader (bootloader-configuration
|
||||||
|
(bootloader grub-efi-bootloader)
|
||||||
|
(targets '("/boot/efi"))
|
||||||
|
(keyboard-layout keyboard-layout)))
|
||||||
|
|
||||||
|
(file-systems (cons*
|
||||||
|
(file-system
|
||||||
|
(device "/dev/nvme0n1p3")
|
||||||
|
(mount-point "/")
|
||||||
|
(type "ext4"))
|
||||||
|
(file-system
|
||||||
|
(device "/dev/sdd1")
|
||||||
|
(mount-point "/media/store")
|
||||||
|
(type "ext4"))
|
||||||
|
(file-system
|
||||||
|
(device "/dev/sda1")
|
||||||
|
(mount-point "/media/docs")
|
||||||
|
(type "ext4"))
|
||||||
|
(file-system
|
||||||
|
;; (device "/dev/nvme0n1p1")
|
||||||
|
(device (uuid "7241-D6CA" 'fat))
|
||||||
|
(mount-point "/boot/efi")
|
||||||
|
(type "vfat"))
|
||||||
|
%base-file-systems))))
|
||||||
|
|
||||||
|
;; Return home or system config based on environment variable
|
||||||
|
(if (getenv "RUNNING_GUIX_HOME") home system)
|
|
@ -0,0 +1,45 @@
|
||||||
|
(define-module (fschl systems x230)
|
||||||
|
#:use-module (fschl utils)
|
||||||
|
#:use-module (fschl systems base)
|
||||||
|
#:use-module (fschl systems common)
|
||||||
|
; #:use-module (fschl home-services pipewire)
|
||||||
|
#:use-module (fschl home-services xsettingsd)
|
||||||
|
#:use-module (gnu home)
|
||||||
|
#:use-module (gnu packages file-systems)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system uuid)
|
||||||
|
#:use-module (gnu system file-systems)
|
||||||
|
#:use-module (gnu system mapped-devices)
|
||||||
|
#:use-module (nongnu packages linux))
|
||||||
|
|
||||||
|
(define home
|
||||||
|
(home-environment
|
||||||
|
(services (cons*
|
||||||
|
(service home-xsettingsd-service-type
|
||||||
|
(home-xsettingsd-configuration
|
||||||
|
(dpi 180)))
|
||||||
|
; (service home-pipewire-service-type)
|
||||||
|
common-home-services))))
|
||||||
|
|
||||||
|
(define system
|
||||||
|
(operating-system
|
||||||
|
(inherit base-operating-system)
|
||||||
|
(host-name "x230")
|
||||||
|
|
||||||
|
;; Add sof-firmware drivers for audio on ThinkPad x230
|
||||||
|
;; (firmware (list linux-firmware sof-firmware))
|
||||||
|
|
||||||
|
;; (source (uuid "ad42a856-8e7c-4844-a55a-23ba4bd03dcc"))
|
||||||
|
;; (target "system-root")
|
||||||
|
;; (type luks-device-mapping))))
|
||||||
|
|
||||||
|
(file-systems (cons*
|
||||||
|
(file-system
|
||||||
|
(device "/dev/sda3")
|
||||||
|
(mount-point "/")
|
||||||
|
(type "ext4"))
|
||||||
|
%base-file-systems))))
|
||||||
|
|
||||||
|
;; Return home or system config based on environment variable
|
||||||
|
(if (getenv "RUNNING_GUIX_HOME") home system)
|
|
@ -0,0 +1,52 @@
|
||||||
|
(define-module (fschl utils)
|
||||||
|
#:use-module (gnu packages)
|
||||||
|
#:use-module (gnu services)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services shepherd)
|
||||||
|
#:use-module (gnu packages freedesktop)
|
||||||
|
#:use-module (gnu services configuration)
|
||||||
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (ice-9 regex)
|
||||||
|
#:use-module (ice-9 pretty-print)
|
||||||
|
#:use-module (ice-9 textual-ports)
|
||||||
|
|
||||||
|
#:export (gather-manifest-packages
|
||||||
|
apply-template-file))
|
||||||
|
|
||||||
|
(define (read-manifest manifest-path)
|
||||||
|
(with-input-from-file manifest-path
|
||||||
|
(lambda ()
|
||||||
|
(read))))
|
||||||
|
|
||||||
|
(define (gather-manifest-packages manifests)
|
||||||
|
(if (pair? manifests)
|
||||||
|
(begin
|
||||||
|
(let ((manifest (read-manifest (string-append
|
||||||
|
"/home/fschl/.dotfiles/.config/guix/manifests/"
|
||||||
|
(symbol->string (car manifests))
|
||||||
|
".scm"))))
|
||||||
|
;; (pretty-print (eval manifest (current-module)))
|
||||||
|
(append (map specification->package+output
|
||||||
|
(cadadr manifest))
|
||||||
|
(gather-manifest-packages (cdr manifests)))))
|
||||||
|
'()))
|
||||||
|
|
||||||
|
|
||||||
|
(define (apply-template template-string value-alist)
|
||||||
|
(regexp-substitute/global #f
|
||||||
|
"\\$\\{([A-Za-z/\\-]+)\\}"
|
||||||
|
template-string
|
||||||
|
'pre
|
||||||
|
(lambda (m)
|
||||||
|
(let ((entry (assq (string->symbol (match:substring m 1))
|
||||||
|
value-alist)))
|
||||||
|
(if entry
|
||||||
|
(cdr entry)
|
||||||
|
"VALUE NOT FOUND")))
|
||||||
|
'post))
|
||||||
|
|
||||||
|
(define (apply-template-file file-path value-alist)
|
||||||
|
(call-with-input-file file-path
|
||||||
|
(lambda (port)
|
||||||
|
(apply-template (get-string-all port)
|
||||||
|
value-alist))))
|
124
publish.el
124
publish.el
|
@ -1,124 +0,0 @@
|
||||||
(require 'package)
|
|
||||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
||||||
("elpa" . "https://elpa.gnu.org/packages/")))
|
|
||||||
|
|
||||||
(package-initialize)
|
|
||||||
(unless package-archive-contents
|
|
||||||
(package-refresh-contents))
|
|
||||||
|
|
||||||
(setq org-export-with-broken-links 'mark)
|
|
||||||
|
|
||||||
(package-install 'htmlize)
|
|
||||||
(require 'htmlize)
|
|
||||||
|
|
||||||
(package-install 'simple-httpd)
|
|
||||||
(package-install 'websocket)
|
|
||||||
(package-install 'org-roam)
|
|
||||||
(package-install 'org-roam-ui)
|
|
||||||
(package-install 'f)
|
|
||||||
|
|
||||||
(require 'org-roam)
|
|
||||||
(require 'org-roam-ui)
|
|
||||||
(require 'ox-publish)
|
|
||||||
|
|
||||||
(setq org-export-html-coding-system 'utf-8-unix)
|
|
||||||
(setq org-html-doctype "html5")
|
|
||||||
(defvar fschlde-html-head "<link type='text/css' rel='stylesheet' href='../css/plain.css'>")
|
|
||||||
(setq fschlde-html-footer " <footer>\nfschl.de 2018-2023\n</footer>")
|
|
||||||
|
|
||||||
;; following two funcs are taken from
|
|
||||||
;; https://www.orgroam.com/manual.html#How-do-I-publish-my-notes-with-an-Internet_002dfriendly-graph_003f
|
|
||||||
;; sitemap function for my roam-publish
|
|
||||||
(defun roam-sitemap (title list)
|
|
||||||
(concat "#+OPTIONS: ^:nil author:nil html-postamble:nil\n"
|
|
||||||
"#+SETUPFILE: ./simple_inline.theme\n"
|
|
||||||
"#+TITLE: " title "\n\n"
|
|
||||||
(org-list-to-org list) "\nfile:sitemap.svg"))
|
|
||||||
|
|
||||||
(setq my-publish-time 0) ; see the next section for context
|
|
||||||
|
|
||||||
;;
|
|
||||||
(defun roam-publication-wrapper (plist filename pubdir)
|
|
||||||
(org-roam-graph)
|
|
||||||
(org-html-publish-to-html plist filename pubdir)
|
|
||||||
(setq my-publish-time (cadr (current-time))))
|
|
||||||
|
|
||||||
(defun org-roam-custom-link-builder (node)
|
|
||||||
(let ((file (org-roam-node-file node)))
|
|
||||||
(concat (file-name-base file) ".html")))
|
|
||||||
|
|
||||||
(setq org-roam-graph-link-builder 'org-roam-custom-link-builder)
|
|
||||||
|
|
||||||
(add-hook 'org-roam-graph-generation-hook
|
|
||||||
(lambda (dot svg) (if (< (- (cadr (current-time)) my-publish-time) 5)
|
|
||||||
(progn (copy-file svg "~/projects/blog-fschlde/pkb/sitemap.svg" 't)
|
|
||||||
(kill-buffer (file-name-nondirectory svg))
|
|
||||||
(setq my-publish-time 0)))))
|
|
||||||
|
|
||||||
|
|
||||||
(setq org-publish-project-alist
|
|
||||||
'(("website"
|
|
||||||
:components ("org-journal", "project-notes", "org-sites", "blog-rss", "blog-images"))
|
|
||||||
("org-journal"
|
|
||||||
:base-directory "~/Documents/Org/"
|
|
||||||
:base-extension "org"
|
|
||||||
:publishing-directory "~/projects/blog-fschlde/reads/"
|
|
||||||
:recursive nil
|
|
||||||
:publishing-function org-html-publish-to-html
|
|
||||||
|
|
||||||
:headline-levels 4
|
|
||||||
:with-author t
|
|
||||||
:with-creator nil
|
|
||||||
:with-date t
|
|
||||||
|
|
||||||
:with-toc t
|
|
||||||
:with-drawers nil
|
|
||||||
|
|
||||||
:html-link-home "/"
|
|
||||||
:html-head nil ;; cleans up anything that would have been in there.
|
|
||||||
;; :html-head-extra ,my-blog-extra-head
|
|
||||||
:html-head-include-default-style nil
|
|
||||||
:html-head-include-scripts nil
|
|
||||||
|
|
||||||
;; :html-preamble my-blog-header
|
|
||||||
;; :html-postamble ,my-blog-footer
|
|
||||||
)
|
|
||||||
("project-notes"
|
|
||||||
:base-directory "~/projects/"
|
|
||||||
:base-extension "org"
|
|
||||||
:publishing-directory "~/projects/blog-fschlde/projects/"
|
|
||||||
:recursive nil
|
|
||||||
:publishing-function org-html-publish-to-html
|
|
||||||
:headline-levels 4)
|
|
||||||
("org-sites"
|
|
||||||
:base-directory "~/projects/fschlde-static/"
|
|
||||||
:base-extension "org\\|css\\|js\\|ico\\|png\\|html"
|
|
||||||
:publishing-directory "~/projects/blog-fschlde/"
|
|
||||||
:recursive t
|
|
||||||
:publishing-function org-publish-attachment
|
|
||||||
|
|
||||||
:html-link-home "/"
|
|
||||||
;; :html-head ,fschlde-html-head ;; cleans up anything that would have been in there.
|
|
||||||
:html-head-include-default-style nil
|
|
||||||
:html-head-include-scripts nil
|
|
||||||
:with-drawers nil
|
|
||||||
:with-creator nil
|
|
||||||
|
|
||||||
;; :html-head-extra fschlde-html-head
|
|
||||||
;; :html-postamble fschlde-html-footer
|
|
||||||
:headline-levels 4)
|
|
||||||
("roam"
|
|
||||||
:base-directory "~/org-roam/"
|
|
||||||
:auto-sitemap t
|
|
||||||
:recursive nil
|
|
||||||
:base-extension "org"
|
|
||||||
:exclude ".stversions/\\|.stfolder"
|
|
||||||
:sitemap-function roam-sitemap
|
|
||||||
:sitemap-title "Roam notes"
|
|
||||||
:publishing-function roam-publication-wrapper
|
|
||||||
:publishing-directory "~/projects/blog-fschlde/pkb/"
|
|
||||||
:section-number nil
|
|
||||||
:table-of-contents nil
|
|
||||||
:style "<link rel=\"stylesheet\" href=\"../other/mystyle.cs\" type=\"text/css\">")
|
|
||||||
)
|
|
||||||
)
|
|
|
@ -1,155 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# from https://github.com/j3k0/quicktinc
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
IMAGE="fschl/tinc"
|
|
||||||
|
|
||||||
function usage() {
|
|
||||||
echo "
|
|
||||||
Usage:
|
|
||||||
$0 run --net=<network> - start a container for $network with existing configuration
|
|
||||||
|
|
||||||
or create configuration with:
|
|
||||||
|
|
||||||
$0 init [OPTIONS]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
--net=NET_NAME Network name (required)
|
|
||||||
--node=NODE_NAME Node name (required)
|
|
||||||
--public-ip=PUBLIC_IP Node's public IP (required)
|
|
||||||
--private-ip=PRIVATE_IP Node's private IP (required)
|
|
||||||
--connect-to=HOST Name of another node (optional, repeatable)
|
|
||||||
--interface=tun0 Network interface to create (optional, default=tun0)
|
|
||||||
--config=/etc/tinc Where to save tinc networks (optional, default=/etc/tinc)
|
|
||||||
--up Also start the daemon
|
|
||||||
|
|
||||||
Example:
|
|
||||||
$0 --net=demonet --node=node23 --public-ip=8.9.10.11 --private-ip=10.0.0.23 --connect-to=node1 --connect-to=node2
|
|
||||||
$0 -n=demonet -o=node23 -p=8.9.10.11 -v=10.0.0.23 -c=node1 -c=node2
|
|
||||||
|
|
||||||
Report bugs to <https://github.com/j3k0/quicktinc>
|
|
||||||
"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
function parse_args() {
|
|
||||||
for i in "$@"
|
|
||||||
do
|
|
||||||
case $i in
|
|
||||||
-n=*|--net=*)
|
|
||||||
NET_NAME="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-o=*|--node=*)
|
|
||||||
NODE_NAME="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-v=*|--private-ip=*)
|
|
||||||
PRIVATE_IP="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-p=*|--public-ip=*)
|
|
||||||
PUBLIC_IP="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-c=*|--connect-to=*)
|
|
||||||
CONNECT_TO="$CONNECT_TO ${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-i=*|--interface=*)
|
|
||||||
INTERFACE="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
-C=*|--config=*)
|
|
||||||
TINC_HOME="${i#*=}"
|
|
||||||
shift # past argument=value
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# unknown option
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "_$NET_NAME" = "_" ]; then usage; fi
|
|
||||||
if [ "_$NODE_NAME" = "_" ]; then usage; fi
|
|
||||||
if [ "_$PRIVATE_IP" = "_" ]; then usage; fi
|
|
||||||
if [ "_$PUBLIC_IP" = "_" ]; then usage; fi
|
|
||||||
|
|
||||||
if [ "_$INTERFACE" = "_" ]; then
|
|
||||||
INTERFACE=tun0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "_$TINC_HOME" = "_" ]; then
|
|
||||||
TINC_HOME=/etc/tinc
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function tinc() {
|
|
||||||
docker run --rm --net=host --device=/dev/net/tun --cap-add NET_ADMIN --volume $TINC_HOME:/etc/tinc $IMAGE -n $NET_NAME "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
init_node() {
|
|
||||||
# Initialize configuration file
|
|
||||||
tinc init $NODE_NAME
|
|
||||||
|
|
||||||
# Setup host file
|
|
||||||
# Declare public and private IPs in the host file, CONFIG/NET/hosts/HOST
|
|
||||||
echo "Address = $PUBLIC_IP" >> $TINC_HOME/$NET_NAME/hosts/$NODE_NAME
|
|
||||||
echo "Subnet = $PRIVATE_IP/32" >> $TINC_HOME/$NET_NAME/hosts/$NODE_NAME
|
|
||||||
|
|
||||||
# Tweak the config to add our particular setup
|
|
||||||
tinc add AddressFamily ipv4
|
|
||||||
tinc add Device /dev/net/tun
|
|
||||||
tinc add Interface $INTERFACE
|
|
||||||
if [ "_$CONNECT_TO" != "_" ]; then
|
|
||||||
for i in $CONNECT_TO; do
|
|
||||||
tinc add ConnectTo $i
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Edit the tinc-up script
|
|
||||||
cat << EOF > $TINC_HOME/$NET_NAME/tinc-up
|
|
||||||
#!/bin/sh
|
|
||||||
ifconfig \$INTERFACE $PRIVATE_IP netmask 255.255.255.0
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat << EOF > $TINC_HOME/$NET_NAME/tinc-down
|
|
||||||
#!/bin/sh
|
|
||||||
ifconfig \$INTERFACE down
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x $TINC_HOME/$NET_NAME/tinc-up
|
|
||||||
chmod +x $TINC_HOME/$NET_NAME/tinc-down
|
|
||||||
}
|
|
||||||
|
|
||||||
run_container() {
|
|
||||||
NAME=tinc_$NET_NAME_$NODE_NAME
|
|
||||||
docker run -d --restart=always --name=$NAME --net=host --device=/dev/net/tun --cap-add NET_ADMIN --volume $TINC_HOME:/etc/tinc $IMAGE -n $NET_NAME start -D
|
|
||||||
echo "Docker container started with name: $NAME"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
main() {
|
|
||||||
local cmd=$1
|
|
||||||
shift
|
|
||||||
|
|
||||||
if [[ -z "$cmd" ]]; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$cmd" in
|
|
||||||
init)
|
|
||||||
parse_args $@
|
|
||||||
init_node
|
|
||||||
;;
|
|
||||||
run)
|
|
||||||
parse_args $@
|
|
||||||
run_container
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
79
sway/.bashrc
79
sway/.bashrc
|
@ -1,79 +0,0 @@
|
||||||
# ~/.bashrc: executed by bash(1) for non-login shells.
|
|
||||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
|
||||||
# for examples
|
|
||||||
|
|
||||||
# If not running interactively, don't do anything
|
|
||||||
case $- in
|
|
||||||
*i*) ;;
|
|
||||||
*) return;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# don't put duplicate lines or lines starting with space in the history.
|
|
||||||
# See bash(1) for more options
|
|
||||||
HISTCONTROL=ignoreboth
|
|
||||||
|
|
||||||
# Load the shell dotfiles, and then some:
|
|
||||||
# * ~/.path can be used to extend `$PATH`.
|
|
||||||
# * ~/.extra can be used for other settings you don’t want to commit.
|
|
||||||
for file in ~/.{aliases,bash_prompt,functions,path,extra,exports}; do
|
|
||||||
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
|
||||||
done
|
|
||||||
unset file
|
|
||||||
|
|
||||||
# Case-insensitive globbing (used in pathname expansion)
|
|
||||||
shopt -s nocaseglob
|
|
||||||
|
|
||||||
# append to the history file, don't overwrite it
|
|
||||||
shopt -s histappend
|
|
||||||
|
|
||||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
|
||||||
HISTSIZE=1000000
|
|
||||||
HISTFILESIZE=20000000
|
|
||||||
|
|
||||||
export TERMINAL="alacritty";
|
|
||||||
export TERM="alacritty";
|
|
||||||
|
|
||||||
# check the window size after each command and, if necessary,
|
|
||||||
# update the values of LINES and COLUMNS.
|
|
||||||
shopt -s checkwinsize
|
|
||||||
|
|
||||||
# If set, the pattern "**" used in a pathname expansion context will
|
|
||||||
# match all files and zero or more directories and subdirectories.
|
|
||||||
#shopt -s globstar
|
|
||||||
|
|
||||||
# make less more friendly for non-text input files, see lesspipe(1)
|
|
||||||
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
|
||||||
|
|
||||||
# set variable identifying the chroot you work in (used in the prompt below)
|
|
||||||
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
|
|
||||||
debian_chroot=$(cat /etc/debian_chroot)
|
|
||||||
fi
|
|
||||||
|
|
||||||
PS1="\[\e[01;36m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;33m\]\h\[\e[0m\]\[\e[00;36m\][\w]\[\e[0m\]\[\e[01;31m\]\n\\$\[\e[0m\]\[\e[00;37m\] \[\e[0m\]"
|
|
||||||
|
|
||||||
# If this is an xterm set the title to user@host:dir
|
|
||||||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
|
|
||||||
|
|
||||||
# enable color support of ls and also add handy aliases
|
|
||||||
if [ -x /usr/bin/dircolors ]; then
|
|
||||||
eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
|
||||||
alias ls='ls --color=auto'
|
|
||||||
alias grep='grep --color=auto'
|
|
||||||
alias fgrep='fgrep --color=auto'
|
|
||||||
alias egrep='egrep --color=auto'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add an "alert" alias for long running commands. Use like so:
|
|
||||||
# sleep 10; alert
|
|
||||||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
|
||||||
|
|
||||||
# enable programmable completion features (you don't need to enable
|
|
||||||
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
|
|
||||||
# sources /etc/bash.bashrc).
|
|
||||||
if ! shopt -oq posix; then
|
|
||||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
|
||||||
. /usr/share/bash-completion/bash_completion
|
|
||||||
elif [ -f /etc/bash_completion ]; then
|
|
||||||
. /etc/bash_completion
|
|
||||||
fi
|
|
||||||
fi
|
|
|
@ -1,2 +0,0 @@
|
||||||
export MOZ_ENABLE_WAYLAND=1
|
|
||||||
export QT_QPA_PLATFORM=wayland
|
|
295
sway/config
295
sway/config
|
@ -1,295 +0,0 @@
|
||||||
# Default config for sway
|
|
||||||
#
|
|
||||||
# Copy this to ~/.config/sway/config and edit it to your liking.
|
|
||||||
#
|
|
||||||
# Read `man 5 sway` for a complete reference.
|
|
||||||
|
|
||||||
# Logo key. Use Mod1 for Alt.
|
|
||||||
set $mod Mod4
|
|
||||||
|
|
||||||
font pango:DejaVu Sans Mono 8
|
|
||||||
|
|
||||||
set $term alacritty
|
|
||||||
|
|
||||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
|
||||||
floating_modifier $mod
|
|
||||||
|
|
||||||
hide_edge_borders both # none|vertical|horizontal|both
|
|
||||||
|
|
||||||
output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|
||||||
|
|
||||||
# start a terminal
|
|
||||||
bindsym $mod+Return exec alacritty
|
|
||||||
|
|
||||||
# kill focused window
|
|
||||||
bindsym $mod+Shift+q kill
|
|
||||||
|
|
||||||
# start dmenu (a program launcher)
|
|
||||||
# for_window [app_id="^launcher$"] floating enable, sticky enable, resize set 30 ppt 60 ppt, border pixel 10
|
|
||||||
# set $menu exec $term --class=launcher -e /home/fschl/projects/sway-launcher-desktop/sway-launcher-desktop.sh
|
|
||||||
# bindsym $mod+d exec $menu
|
|
||||||
bindsym $mod+d exec wofi --show=drun --lines=10 --prompt=""
|
|
||||||
|
|
||||||
# bindsym Ctrl+Shift+l exec i3lock-fancy
|
|
||||||
bindsym Ctrl+Shift+l exec swaylock \
|
|
||||||
--screenshots \
|
|
||||||
--clock \
|
|
||||||
--indicator \
|
|
||||||
--indicator-radius 100 \
|
|
||||||
--indicator-thickness 7 \
|
|
||||||
--effect-blur 7x9 \
|
|
||||||
--effect-vignette 0.5:0.5 \
|
|
||||||
--ring-color 859900 \
|
|
||||||
--key-hl-color 2aa198 \
|
|
||||||
--line-color 00000000 \
|
|
||||||
--inside-color 00000088 \
|
|
||||||
--separator-color 00000000 \
|
|
||||||
--grace 2 \
|
|
||||||
--fade-in 0.2
|
|
||||||
|
|
||||||
input * {
|
|
||||||
xkb_layout "de"
|
|
||||||
xkb_variant "nodeadkeys"
|
|
||||||
xkb_options "ctrl:nocaps"
|
|
||||||
}
|
|
||||||
|
|
||||||
# change focus
|
|
||||||
bindsym $mod+j focus left
|
|
||||||
bindsym $mod+k focus down
|
|
||||||
bindsym $mod+l focus right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Left focus left
|
|
||||||
bindsym $mod+Down focus down
|
|
||||||
bindsym $mod+Right focus right
|
|
||||||
|
|
||||||
# move focused window
|
|
||||||
bindsym $mod+Shift+j move left
|
|
||||||
bindsym $mod+Shift+k move down
|
|
||||||
bindsym $mod+Shift+l move right
|
|
||||||
|
|
||||||
# alternatively, you can use the cursor keys:
|
|
||||||
bindsym $mod+Shift+Left move left
|
|
||||||
bindsym $mod+Shift+Down move down
|
|
||||||
bindsym $mod+Shift+Right move right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
|
||||||
bindsym $mod+h split h
|
|
||||||
|
|
||||||
# split in vertical orientation
|
|
||||||
bindsym $mod+v split v
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
|
||||||
bindsym $mod+f fullscreen
|
|
||||||
|
|
||||||
# change container layout (stacked, tabbed, toggle split)
|
|
||||||
bindsym $mod+s layout stacking
|
|
||||||
bindsym $mod+w layout tabbed
|
|
||||||
bindsym $mod+e layout toggle split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
|
||||||
bindsym $mod+Shift+space floating toggle
|
|
||||||
|
|
||||||
# change focus between tiling / floating windows
|
|
||||||
bindsym $mod+space focus mode_toggle
|
|
||||||
# float some applications
|
|
||||||
for_window [class="Tor Browser"] floating enable
|
|
||||||
|
|
||||||
bindsym $mod+a focus parent # focus the parent container
|
|
||||||
|
|
||||||
# manage workspaces
|
|
||||||
# look for icons: https://fontawesome.com/icons?d=gallery
|
|
||||||
# firefox - browser is placed on this Workspace
|
|
||||||
set $WS1 "1 "
|
|
||||||
# git - emacs <3
|
|
||||||
set $WS2 "2 "
|
|
||||||
# terminal - place for urxvt
|
|
||||||
set $WS3 "3 "
|
|
||||||
# envelope - thunderbird windows on here
|
|
||||||
set $WS4 "4 "
|
|
||||||
# code - eclise, intellij IDEs, etc
|
|
||||||
set $WS5 "5 "
|
|
||||||
# unlock-alt - keepassxc defaults here
|
|
||||||
set $WS8 "8 "
|
|
||||||
# linux - less often used terminals for background processes
|
|
||||||
set $WS9 "9 "
|
|
||||||
|
|
||||||
assign [class="^Firefox$"] $WS1
|
|
||||||
assign [class="^Eclipse$"] $WS5
|
|
||||||
assign [class="^Thunderbird$"] $WS4
|
|
||||||
assign [class=".*ee.*ass.*"] $WS8
|
|
||||||
|
|
||||||
# https://faq.i3wm.org/question/3726/workspace-output-multiple-values/index.html%3Fanswer=3731.html#post-id-3731
|
|
||||||
set $LAPTOP LVDS-1
|
|
||||||
# set $EXTERN HDMI-1
|
|
||||||
set $EXTERN VGA-1
|
|
||||||
|
|
||||||
# monitor settings
|
|
||||||
bindsym $mod+m mode "monitor"
|
|
||||||
mode "monitor" {
|
|
||||||
# only laptop
|
|
||||||
# bindsym 1 exec xrandr --output $LAPTOP --auto --primary --output $CENTER --off $RIGHT --off
|
|
||||||
# HDMI main, laptop secondary
|
|
||||||
# bindsym 2 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --off
|
|
||||||
# HDMI main, laptop left, VGA right, *not* supported on X230
|
|
||||||
# bindsym 3 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --auto --right-of $CENTER
|
|
||||||
# HDMI main, VGA right, laptop off
|
|
||||||
# bindsym 4 exec xrandr --output $CENTER --primary --auto --output $RIGHT --right-of $CENTER --rotate left --auto --output $LAPTOP --off
|
|
||||||
# VGA main, laptop left, HDMI off
|
|
||||||
# bindsym 8 exec xrandr --output $RIGHT --primary --auto --output $LAPTOP --auto --left-of $RIGHT --output $CENTER --off
|
|
||||||
# HDMI main, VGA right, laptop off
|
|
||||||
# bindsym 9 exec xrandr --output $CENTER --primary --auto --output $RIGHT --auto --right-of $CENTER --output $LAPTOP --off
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
bindsym $mod+m mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym $mod+p exec xrandr-toggle
|
|
||||||
|
|
||||||
workspace $WS1 output $EXTERN
|
|
||||||
workspace $WS2 output $EXTERN
|
|
||||||
# workspace $WS3 output $LAPTOP
|
|
||||||
workspace $WS3 output $LAPTOP
|
|
||||||
workspace $WS4 output $LAPTOP
|
|
||||||
workspace $WS5 output $EXTERN
|
|
||||||
workspace $WS8 output $LAPTOP
|
|
||||||
workspace $WS9 output $LAPTOP
|
|
||||||
|
|
||||||
# switch to workspace
|
|
||||||
bindsym $mod+1 workspace $WS1
|
|
||||||
bindsym $mod+2 workspace $WS2
|
|
||||||
bindsym $mod+3 workspace $WS3
|
|
||||||
bindsym $mod+4 workspace $WS4
|
|
||||||
bindsym $mod+5 workspace $WS5
|
|
||||||
bindsym $mod+6 workspace 6
|
|
||||||
bindsym $mod+7 workspace 7
|
|
||||||
bindsym $mod+8 workspace $WS8
|
|
||||||
bindsym $mod+9 workspace $WS9
|
|
||||||
bindsym $mod+0 workspace 10
|
|
||||||
|
|
||||||
# move focused container to workspace
|
|
||||||
bindsym $mod+Shift+1 move container to workspace $WS1
|
|
||||||
bindsym $mod+Shift+2 move container to workspace $WS2
|
|
||||||
bindsym $mod+Shift+3 move container to workspace $WS3
|
|
||||||
bindsym $mod+Shift+4 move container to workspace $WS4
|
|
||||||
bindsym $mod+Shift+5 move container to workspace $WS5
|
|
||||||
bindsym $mod+Shift+6 move container to workspace 6
|
|
||||||
bindsym $mod+Shift+7 move container to workspace 7
|
|
||||||
bindsym $mod+Shift+8 move container to workspace $WS8
|
|
||||||
bindsym $mod+Shift+9 move container to workspace $WS9
|
|
||||||
bindsym $mod+Shift+0 move container to workspace 10
|
|
||||||
|
|
||||||
# https://github.com/francma/wob
|
|
||||||
set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
|
|
||||||
exec mkfifo $WOBSOCK && tail -f $WOBSOCK | wob
|
|
||||||
|
|
||||||
# audio controls
|
|
||||||
bindsym XF86AudioRaiseVolume exec amixer sset Master 5%+ | sed -En 's/.*\[([0-9]+)%\].*/\1/p' | head -1 > $WOBSOCK
|
|
||||||
bindsym XF86AudioLowerVolume exec amixer sset Master 5%- | sed -En 's/.*\[([0-9]+)%\].*/\1/p' | head -1 > $WOBSOCK
|
|
||||||
bindsym XF86AudioMute exec amixer sset Master toggle | sed -En '/\[on\]/ s/.*\[([0-9]+)%\].*/\1/ p; /\[off\]/ s/.*/0/p' | head -1 > $WOBSOCK
|
|
||||||
|
|
||||||
bindsym XF86MonBrightnessDown exec brightnessctl set 5%- | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
|
|
||||||
bindsym XF86MonBrightnessUp exec brightnessctl set +5% | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
|
|
||||||
|
|
||||||
|
|
||||||
# bindsym XF86AudioRaiseVolume exec amixer set Master 5+ #increase sound volume
|
|
||||||
# bindsym XF86AudioLowerVolume exec amixer set Master 5- #decrease sound volume
|
|
||||||
# bindsym XF86AudioMute exec amixer set Master 1+ toggle # mute sound
|
|
||||||
# bindsym XF86AudioMicMute exec amixer set Capture toggle # mute mic
|
|
||||||
|
|
||||||
# reload the configuration file
|
|
||||||
bindsym $mod+Shift+c reload
|
|
||||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
||||||
bindsym $mod+Shift+r restart
|
|
||||||
# exit i3 (logs you out of your X session)
|
|
||||||
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
|
||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
|
||||||
mode "resize" {
|
|
||||||
# These bindings trigger as soon as you enter the resize mode
|
|
||||||
|
|
||||||
# Pressing left will shrink the window’s width.
|
|
||||||
# Pressing right will grow the window’s width.
|
|
||||||
# Pressing up will shrink the window’s height.
|
|
||||||
# Pressing down will grow the window’s height.
|
|
||||||
bindsym j resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym i resize grow height 10 px or 10 ppt
|
|
||||||
bindsym k resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym l resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# same bindings, but for the arrow keys
|
|
||||||
bindsym Left resize shrink width 10 px or 10 ppt
|
|
||||||
bindsym Down resize grow height 10 px or 10 ppt
|
|
||||||
bindsym Up resize shrink height 10 px or 10 ppt
|
|
||||||
bindsym Right resize grow width 10 px or 10 ppt
|
|
||||||
|
|
||||||
# back to normal: Enter or Escape
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
bindsym $mod+r mode "resize"
|
|
||||||
|
|
||||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
|
||||||
# finds out, if available)
|
|
||||||
# actually use the rust port https://github.com/greshake/i3status-rust
|
|
||||||
bar {
|
|
||||||
colors {
|
|
||||||
background #223232
|
|
||||||
statusline #93b4a6
|
|
||||||
# focused_workspace #7d9683 #6c71c4 #fdf6e3
|
|
||||||
# active_workspace #fdf6e3 #6c71c4 #fdf6e3
|
|
||||||
# inactive_workspace #002b36 #586e75 #002b36
|
|
||||||
# urgent_workspace #d33682 #d33682 #fdf6e3
|
|
||||||
}
|
|
||||||
|
|
||||||
status_command ~/.cargo/bin/i3status-rs ~/dotfiles/sway/status-rust.toml
|
|
||||||
# tray_output $LAPTOP
|
|
||||||
tray_output primary
|
|
||||||
|
|
||||||
output $LAPTOP
|
|
||||||
output $EXTERN
|
|
||||||
font pango:DejaVu Sans Mono, FontAwesome 8
|
|
||||||
}
|
|
||||||
|
|
||||||
bar {
|
|
||||||
# position top
|
|
||||||
colors {
|
|
||||||
background #323232
|
|
||||||
statusline #93b4a6
|
|
||||||
focused_workspace #7d9683 #6c71b4 #ede6b3
|
|
||||||
active_workspace #fdf6e3 #6c71b4 #ede6b3
|
|
||||||
# focused_workspace #7d9683 #6c71c4 #fdf6e3
|
|
||||||
# active_workspace #fdf6e3 #6c71c4 #fdf6e3
|
|
||||||
inactive_workspace #002b36 #586e75 #002b36
|
|
||||||
urgent_workspace #d33682 #d33682 #fdf6e3
|
|
||||||
}
|
|
||||||
|
|
||||||
status_command i3status --config ~/dotfiles/.i3/status.conf
|
|
||||||
tray_output $LAPTOP
|
|
||||||
|
|
||||||
# i3blocks: http://kumarcode.com/Colorful-i3/
|
|
||||||
# status_command i3blocks -c ~/.i3/i3blocks.conf
|
|
||||||
output $LAPTOP
|
|
||||||
output $CENTER
|
|
||||||
font pango:DejaVu Sans Mono, FontAwesome 8
|
|
||||||
}
|
|
||||||
|
|
||||||
# bar {
|
|
||||||
# # output $CENTER
|
|
||||||
# output $RIGHT
|
|
||||||
# status_command i3status --config ~/.i3/status_small.conf
|
|
||||||
# tray_output $LAPTOP
|
|
||||||
# }
|
|
||||||
|
|
||||||
# startup programs
|
|
||||||
exec swaymsg 'exec mako -c /home/fschl/dotfiles/sway/mako.conf'
|
|
||||||
exec swaymsg 'udiskie'
|
|
||||||
exec swaymsg 'workspace $WS1; exec firefox;'
|
|
||||||
exec swaymsg 'workspace $WS2; exec emacs-29.0.50'
|
|
||||||
exec swaymsg 'workspace $WS3; exec alacritty;'
|
|
||||||
exec swaymsg 'workspace $WS4; exec thunderbird'
|
|
||||||
exec swaymsg 'workspace $WS8; exec keepassxc'
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
sort=-time
|
|
||||||
layer=overlay
|
|
||||||
background-color=#1e1420
|
|
||||||
width=380
|
|
||||||
height=110
|
|
||||||
border-size=2
|
|
||||||
border-color=#88c0d0
|
|
||||||
border-radius=15
|
|
||||||
icons=0
|
|
||||||
max-icon-size=64
|
|
||||||
default-timeout=5000
|
|
||||||
ignore-timeout=1
|
|
||||||
font=monospace 14
|
|
||||||
|
|
||||||
[urgency=low]
|
|
||||||
border-color=#cccccc
|
|
||||||
|
|
||||||
[urgency=normal]
|
|
||||||
border-color=#d08770
|
|
||||||
|
|
||||||
[urgency=high]
|
|
||||||
border-color=#bf616a
|
|
||||||
default-timeout=0
|
|
||||||
|
|
||||||
[category=mpd]
|
|
||||||
default-timeout=2000
|
|
||||||
group-by=category
|
|
|
@ -42,7 +42,6 @@
|
||||||
|
|
||||||
# save to config
|
# save to config
|
||||||
wg-quick save wg0
|
wg-quick save wg0
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
**** Mobile Client
|
**** Mobile Client
|
||||||
|
@ -68,8 +67,8 @@
|
||||||
|
|
||||||
*** Sync the configuration without restarting the interface
|
*** Sync the configuration without restarting the interface
|
||||||
|
|
||||||
From ~man wg-quick~: The strip command is useful for reloading configuration
|
From ~man wg-quick~: The strip command is useful for reloading
|
||||||
files without disrupting ac‐ tive sessions:
|
configuration filesystem without disrupting active sessions:
|
||||||
|
|
||||||
#+begin_src bash
|
#+begin_src bash
|
||||||
# wg syncconf wg0 <(wg-quick strip wg0)
|
# wg syncconf wg0 <(wg-quick strip wg0)
|
||||||
|
@ -81,5 +80,4 @@
|
||||||
- https://github.com/WeeJeWel/wg-easy
|
- https://github.com/WeeJeWel/wg-easy
|
||||||
- https://github.com/subspacecommunity/subspace
|
- https://github.com/subspacecommunity/subspace
|
||||||
- https://github.com/vx3r/wg-gen-web
|
- https://github.com/vx3r/wg-gen-web
|
||||||
|
|
||||||
- non-web: https://github.com/mullvad/wg-manager
|
- non-web: https://github.com/mullvad/wg-manager
|
||||||
|
|
Loading…
Reference in New Issue