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 o='xdg-open'
|
||||
alias s='kitty +kitten ssh'
|
||||
alias ssh='kitty +kitten ssh'
|
||||
alias cat='bat'
|
||||
# alias rg='ripgrep'
|
||||
alias ll='ls -ahlF'
|
||||
alias la='ls -Ah'
|
||||
alias l='ls -CF'
|
||||
alias ll='eza -ahlF'
|
||||
alias la='eza -Ah'
|
||||
alias feh='feh -d --scale-down'
|
||||
alias camshot='fswebcam -r 640x480 --jpeg 90 -F 3 -D 1 --no-banner'
|
||||
|
||||
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 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'
|
||||
|
||||
# basic docker shortcuts
|
||||
alias docker='podman'
|
||||
alias dps='docker container ls -a'
|
||||
alias di='docker image ls'
|
||||
alias dv='docker volume '
|
||||
|
|
|
@ -108,21 +108,20 @@ set $WS9 "9 "
|
|||
|
||||
assign [class="^Firefox$"] $WS1
|
||||
assign [class="^DebugScreen"] $WS3
|
||||
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 $CENTER DP-0
|
||||
set $RIGHT DP-3
|
||||
set $LEFT DVI-D-0
|
||||
set $LAPTOP LVDS-1
|
||||
set $CENTER DP-1
|
||||
set $RIGHT VGA-1
|
||||
set $LEFT HDMI-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
|
||||
bindsym 1 exec xrandr --output $LAPTOP --auto --primary --output $CENTER --off --output $LEFT --off
|
||||
# CENTER main, RIGHT 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
|
||||
|
@ -211,9 +210,10 @@ mode "resize" {
|
|||
bindsym $mod+r mode "resize"
|
||||
|
||||
bar {
|
||||
font pango:DejaVu Sans, FontAwesome 9
|
||||
font pango:DejaVu Sans, FontAwesome 7
|
||||
# position top
|
||||
output $CENTER
|
||||
output $LAPTOP
|
||||
# output $CENTER
|
||||
status_command /usr/bin/i3status-rs /home/fschl/dotfiles/.i3/status-rust.toml
|
||||
colors {
|
||||
separator #166616
|
||||
|
@ -227,7 +227,7 @@ bar {
|
|||
}
|
||||
|
||||
bar {
|
||||
output $RIGHT
|
||||
# output $RIGHT
|
||||
output $LEFT
|
||||
status_command i3status --config ~/.i3/status_small.conf
|
||||
tray_output $CENTER
|
||||
|
@ -235,10 +235,10 @@ bar {
|
|||
|
||||
# startup programs
|
||||
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 $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 'workspace $WS5; exec kitty;'
|
||||
exec --no-startup-id i3-msg 'workspace $WS3; exec kitty;'
|
||||
|
|
@ -1,19 +1,26 @@
|
|||
[theme]
|
||||
name = "semi-native"
|
||||
# theme = "solarized-dark"
|
||||
# name = "semi-native"
|
||||
name = "solarized-dark"
|
||||
[theme.overrides]
|
||||
separator = "<span font='5'>|</span>"
|
||||
[icons]
|
||||
name = "awesome"
|
||||
|
||||
|
||||
# https://github.com/greshake/i3status-rust/blob/master/doc/blocks.md
|
||||
[[block]]
|
||||
block = "pomodoro"
|
||||
length = 25
|
||||
break_length = 5
|
||||
message = "Take a break!"
|
||||
message = " Take a break!"
|
||||
break_message = "Back to work!"
|
||||
notifier = "swaynag"
|
||||
notifier = "i3nag"
|
||||
[icons.overrides]
|
||||
pomodoro = ""
|
||||
pomodoro_started = ""
|
||||
pomodoro_stopped = "⏹"
|
||||
pomodoro_paused = "⏸"
|
||||
pomodoro_break = ""
|
||||
|
||||
|
||||
[[block]]
|
||||
block = "disk_space"
|
||||
|
@ -21,8 +28,8 @@ path = "/"
|
|||
info_type = "available"
|
||||
unit = "GB"
|
||||
interval = 20
|
||||
warning = 12.0
|
||||
alert = 8.0
|
||||
warning = 1.5
|
||||
alert = 0.4
|
||||
alert_absolute = true
|
||||
format = "{icon}/{available}"
|
||||
|
||||
|
@ -59,15 +66,15 @@ format = "{1m}"
|
|||
|
||||
[[block]]
|
||||
block = "net"
|
||||
device = "enp0s25"
|
||||
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}"
|
||||
# on_click = "kitty -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
|
||||
|
||||
|
@ -76,11 +83,12 @@ 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 = "sound"
|
||||
name = "Capture"
|
||||
device_kind = "source"
|
||||
format = "Mic {volume}"
|
||||
show_volume_when_muted = true
|
||||
|
||||
[[block]]
|
||||
block = "battery"
|
||||
|
@ -89,16 +97,16 @@ 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 = "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"
|
||||
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.
|
||||
dotspacemacs-configuration-layers
|
||||
'(javascript
|
||||
'(sql
|
||||
typescript
|
||||
javascript
|
||||
systemd
|
||||
;; ----------------------------------------------------------------
|
||||
;; Example of useful layers you may want to use right away.
|
||||
|
@ -49,6 +51,7 @@ This function should only modify configuration layer settings."
|
|||
graphviz
|
||||
helm
|
||||
html
|
||||
;; (keypoard-layout :variables kl-layout 'colemak-neio-literal)
|
||||
latex
|
||||
(lsp :variables
|
||||
lsp-rust-server
|
||||
|
@ -59,6 +62,7 @@ This function should only modify configuration layer settings."
|
|||
org-enable-roam-ui t)
|
||||
plantuml
|
||||
(python :variables python-backend 'lsp python-lsp-server 'mspyls)
|
||||
restclient
|
||||
(rust :variables rust-backend 'lsp)
|
||||
shell
|
||||
;; shell-scripts
|
||||
|
@ -70,6 +74,7 @@ This function should only modify configuration layer settings."
|
|||
tree-sitter-fold-enable t
|
||||
tree-sitter-fold-indicators-enable t)
|
||||
version-control
|
||||
(vue :variables vue-backend 'lsp)
|
||||
yaml
|
||||
;; (shell :variables
|
||||
;; shell-default-height 30
|
|
@ -57,9 +57,11 @@
|
|||
# #+TITLE: ?
|
||||
# #+DATE:
|
||||
|
||||
# #+SUBJECT: test letter subject
|
||||
#+SUBJECT: Betreff des Briefs
|
||||
|
||||
#+LCO: Absender-Frieder
|
||||
# #+LCO: Absender-Marcelle
|
||||
# #+LCO: Absender-FamilieSchlesier
|
||||
#+LCO: Brief-de-modern
|
||||
#+STARTUP: showall
|
||||
|
||||
|
@ -70,7 +72,9 @@
|
|||
* Sehr geehrte Damen und Herren,
|
||||
?
|
||||
|
||||
* Mit freundlichen Grüßen, :closing: "
|
||||
* Mit freundlichen Grüßen, :closing:
|
||||
|
||||
Frieder Schlesier"
|
||||
)
|
||||
("m" "Schedule a meeting" entry
|
||||
(file+headline "~/Documents/Org/tasks.org")
|
|
@ -8,25 +8,31 @@ case $- in
|
|||
*) return;;
|
||||
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.
|
||||
# See bash(1) for more options
|
||||
HISTCONTROL=ignoreboth
|
||||
|
||||
# allow docker to use X
|
||||
if [ -f /usr/bin/xhost ]; then
|
||||
xhost +local:root
|
||||
fi
|
||||
|
||||
# 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,dockerfunc,extra,exports}; do
|
||||
for file in ~/.{bash_aliases,exports}; do
|
||||
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
|
||||
done
|
||||
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"
|
||||
done
|
||||
unset file
|
||||
|
@ -117,11 +123,20 @@ if ! shopt -oq posix; then
|
|||
. /etc/bash_completion
|
||||
fi
|
||||
fi
|
||||
|
||||
. "$HOME/.cargo/env"
|
||||
|
||||
if [ -z "$SSH_AUTH_SOCK" ] ; then
|
||||
eval `ssh-agent -s`
|
||||
# ssh-add
|
||||
ssh-add -l &>/dev/null
|
||||
if [ "$?" == 2 ]; then
|
||||
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
|
||||
|
||||
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
|
||||
# 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
|
||||
# https://wiki.mozilla.org/Security/Guidelines/OpenSSH
|
||||
#
|
||||
|
@ -9,6 +17,11 @@ IdentitiesOnly yes
|
|||
# make known_hosts unreadable
|
||||
HashKnownHosts yes
|
||||
|
||||
# see man ssh-config
|
||||
AddKeysToAgent yes
|
||||
IdentityAgent SSH_AUTH_SOCK
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
|
@ -20,6 +33,7 @@ Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.
|
|||
|
||||
|
||||
#Host hostname_alias
|
||||
# User yourusername
|
||||
# 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
|
||||
|
||||
Things that make my linux life more comfortable, portable and secure.
|
||||
For debian, or debian-based distros. using i3wm.org on the desktop.
|
||||
part of my personal computing environment. mainly contains
|
||||
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?
|
||||
- Do you have backups?
|
||||
- Are you using a password manager?
|
||||
- How do you transport your secrets?
|
||||
- Can you get things done without *your* computer?
|
||||
** (future) Features
|
||||
|
||||
- reproducable machine setup (GNU Guix)
|
||||
- keyboard-based environment (Sway wm)
|
||||
- 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
|
||||
- panic-ops using a friends laptop
|
||||
|
||||
*** Firefox/Thunderbird customization
|
||||
** Security
|
||||
|
||||
- goto ~.mozilla/firefox/<user-profile>/~
|
||||
- ~mkdir chrome/ && cp ~/dotfiles/userChrome.css ./chrome/~
|
||||
- open Firefox: ~about:config~ and set
|
||||
~toolkit.legacyUserProfileCustomizations.stylesheets~ to *true*
|
||||
|
||||
*** Security
|
||||
|
||||
**** SSH Hardening
|
||||
*** SSH Hardening
|
||||
|
||||
- https://blog.g3rt.nl/upgrade-your-ssh-keys.html
|
||||
- https://stribika.github.io/2015/01/04/secure-secure-shell.html
|
||||
- https://wiki.mozilla.org/Security/Guidelines/OpenSSH#OpenSSH_client
|
||||
- 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
|
||||
# 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"
|
||||
#+END_SRC
|
||||
|
||||
# Fallback for really old systems (why do you still have those??)
|
||||
# RSA keys are favored over ECDSA keys when backward compatibility ''is required'',
|
||||
# thus, newly generated keys are always either ED25519 or RSA (NOT ECDSA or DSA).
|
||||
Fallback for really old systems (why do you still have those??) RSA
|
||||
keys are favored over ECDSA keys when backward compatibility ''is
|
||||
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-copy-id -i ~/.ssh/<file>.pub -p 22 user@host
|
||||
#+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://keyring.debian.org/creating-key.html
|
||||
|
@ -59,11 +68,7 @@
|
|||
keyid-format 0xlong
|
||||
#+END_SRC
|
||||
|
||||
**** Managing logins & passphrases
|
||||
|
||||
- use a secure, cross-platform, *cloudless* password manager, e.g keepassXC
|
||||
|
||||
**** Backup Secure Keys
|
||||
*** Backup Secure Keys
|
||||
|
||||
- get 2 USB thumb drives
|
||||
- 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
|
||||
- [ ] OR: give GUIX a shot
|
||||
|
||||
** Moving to Arch
|
||||
** Notes on Arch
|
||||
|
||||
- official repository setup: https://wiki.archlinux.org/title/Official_repositories#multilib
|
||||
- ~multiplib~ is required for wine
|
||||
- Sound troubleshooting: https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture/Troubleshooting#HDMI
|
||||
- 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
|
||||
wg-quick save wg0
|
||||
|
||||
#+end_src
|
||||
|
||||
**** Mobile Client
|
||||
|
@ -68,8 +67,8 @@
|
|||
|
||||
*** Sync the configuration without restarting the interface
|
||||
|
||||
From ~man wg-quick~: The strip command is useful for reloading configuration
|
||||
files without disrupting ac‐ tive sessions:
|
||||
From ~man wg-quick~: The strip command is useful for reloading
|
||||
configuration filesystem without disrupting active sessions:
|
||||
|
||||
#+begin_src bash
|
||||
# wg syncconf wg0 <(wg-quick strip wg0)
|
||||
|
@ -81,5 +80,4 @@
|
|||
- https://github.com/WeeJeWel/wg-easy
|
||||
- https://github.com/subspacecommunity/subspace
|
||||
- https://github.com/vx3r/wg-gen-web
|
||||
|
||||
- non-web: https://github.com/mullvad/wg-manager
|
||||
|
|
Loading…
Reference in New Issue