Compare commits

..

No commits in common. "a37efb924516d8de08bffc33b0420d03aa17739b" and "e75c2725a7561986ed35baaf116f7ac2f8976d79" have entirely different histories.

27 changed files with 825 additions and 788 deletions

View File

@ -8,17 +8,17 @@ alias upnodock='sudo apt-mark hold docker-ce docker-ce-cli && sudo apt update &&
alias o='xdg-open'
alias s='kitty +kitten ssh'
alias ssh='kitty +kitten ssh'
alias cat='bat'
# alias rg='ripgrep'
alias ll='eza -ahlF'
alias la='eza -Ah'
alias ll='ls -ahlF'
alias la='ls -Ah'
alias l='ls -CF'
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 ~/git/home-infra/tools/goking.sh'
alias sk='sh ~/projects/home-infra/tools/goking.sh'
alias wgfsu='sudo wg-quick up fschl-vpn'
alias wgfsd='sudo wg-quick down fschl-vpn'
@ -33,7 +33,6 @@ 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 '

36
.bashrc Normal file → Executable file
View File

@ -8,31 +8,25 @@ 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 dont want to commit.
for file in ~/.{bash_aliases,exports}; do
for file in ~/.{aliases,bash_prompt,functions,path,dockerfunc,extra,exports}; do
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
done
unset file
for file in /usr/share/fzf/shell/{key-bindings.bash,completion.bash}; do
for file in /usr/share/fzf/{key-bindings.bash,completion.bash}; do
[[ -r "$file" ]] && [[ -f "$file" ]] && source "$file"
done
unset file
@ -123,7 +117,6 @@ if ! shopt -oq posix; then
. /etc/bash_completion
fi
fi
. "$HOME/.cargo/env"
ssh-add -l &>/dev/null
@ -145,9 +138,12 @@ 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
# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# pnpm
export PNPM_HOME="/home/fschl/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
# pnpm end

View File

@ -1,11 +0,0 @@
#!/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

View File

@ -1,14 +1,3 @@
#!/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

View File

@ -1,11 +0,0 @@
#!/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

View File

@ -1,11 +0,0 @@
#!/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

View File

@ -3,41 +3,22 @@ set $mod Mod4
# 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'
# The annoying thing is that sometimes the display ID changes when hotplugging
# my Thunderbolt dock...
set $primary DP-7 DP-8 HDMI-A-1
set $laptop eDP-1
output $primary pos 1080 135
output $secondary pos 0 0 transform 90
output $laptop pos 1920 135 scale 2
output DP-7 pos 0 0 scale 2
output DP-8 pos 0 0 scale 2
output HDMI-A-1 scale 2
# 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" {
input type:keyboard {
xkb_layout de,de
xkb_options ctrl:nocaps
}
@ -55,7 +36,6 @@ bindsym $mod+Shift+r reload
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
@ -68,11 +48,6 @@ 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
@ -122,13 +97,14 @@ workspace_layout tabbed
# Configure gaps and borders
default_border pixel 1
gaps outer 2
gaps outer 0
gaps inner 4
# smart_borders off
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 $ws0 "chat"
set $ws1 "1 "
set $ws2 "2 "
set $ws3 "3 "
@ -138,26 +114,26 @@ set $ws5 "5 "
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 [class="Emacs"] $ws2
assign [title="^DebugScreen"] $ws3
assign [app_id="org.keepassxc.KeePassXC"] $ws8
# Move specific workspaces to outputs
workspace $ws0 output $laptop
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
workspace $ws3 output $laptop
workspace $ws4 output $laptop
workspace $ws5 output $laptop
# Switch to dev workspace by default
#workspace $ws1
# Switch to workspace
# bindsym $mod+grave workspace $ws0
bindsym $mod+grave workspace $ws0
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
@ -167,10 +143,10 @@ 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
bindsym $mod+0 workspace 10
# Move focused container to workspace
# bindsym $mod+Shift+grave move container to workspace $ws0
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
@ -180,7 +156,7 @@ 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
bindsym $mod+Shift+0 move container to workspace 10
# Bind hotkeys for brightness and volume
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
@ -233,14 +209,13 @@ bindsym Ctrl+Shift+L exec $lock
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 waybar
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 emacs
exec firefox
exec keepassxc

View File

@ -1,15 +1,15 @@
{
"layer": "bottom",
"position": "bottom",
"height": 24,
"height": 20,
// 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" ],
"modules-left": ["sway/workspaces", "sway/mode"],
"modules-center": [ "custom/disk_root", "network"],
"modules-right": [ "memory", "tray", "battery", "clock", ],
"sway/mode": {
"format": " {}"
},
@ -36,27 +36,12 @@
"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})"
"exec": "df -h --output=avail $HOME | tail -1 | tr -d ' '"
},
"custom/disk_root": {
"format": "root💽{} ",
"format": "💽 {} ",
"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 ' '"
"exec": "df -h --output=avail / | tail -1 | tr -d ' '"
},
"temperature": {
// "thermal-zone": 2,
@ -80,6 +65,7 @@
},
"network": {
// "family": "ipv6",
"interface": "wlp3*", // (Optional) To force the use of this interface
"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) ",

View File

@ -2,16 +2,19 @@
border: none;
border-radius: 0;
font-family: Iosevka ss08;
font-size: 14px;
font-size: 13px;
box-shadow: none;
text-shadow: none;
transition-duration: 0s;
}
window.eDP-1 * {
font-size: 11px;
}
window {
color: #efefff;
background: rgba(35, 38, 53, 0.8);
margin: 0px 2px 0px 22px;
color: #ffffff;
background: rgba(35, 38, 53, 0.8);
}
#workspaces {
@ -40,13 +43,6 @@ window {
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,
@ -55,23 +51,12 @@ window {
#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;
margin: 0px 6px 0px 10px;
min-width: 25px;
}
#clock {

View File

@ -1,107 +0,0 @@
{
"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": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
},
}

3
.path Normal file
View File

@ -0,0 +1,3 @@
export PATH=${PATH}:/usr/local/go/bin:/home/fschl/go/bin
. "$HOME/.cargo/env"

View File

@ -48,11 +48,6 @@ RSA (NOT ECDSA or DSA).
$ ssh-copy-id -i ~/.ssh/<file>.pub -p 22 user@host
#+END_SRC
*** 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
@ -114,101 +109,6 @@ integrates with KeepassXC ([[https://github.com/keepassxreboot/keepassxc/blob/de
- 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
@ -220,8 +120,6 @@ https://realpython.com/dependency-management-python-poetry/
*** 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

View File

@ -30,7 +30,6 @@
"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"
@ -104,7 +103,6 @@
"openssh"
"zip"
"unzip"
"udiskie"
"trash-cli"))))
(define (home-desktop-shepherd-services config)

View File

@ -1,13 +1,7 @@
(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)
@ -16,182 +10,198 @@
#:export (home-emacs-config-service-type))
(define transform
(options->transformation
;; 0.0.9 is too old for the mu4e fix
;; also, adopt the new ement.el bindings
'((with-commit . "emacs-evil-collection=97a57c91d200a278d0bf91199e2eae45f7d875b0"))))
(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)
(map (lambda (package-name)
(transform
(specification->package+output package-name)))
(list "emacs-next-pgtk"
emacs-next-pgtk
emacs-tmr
emacs-buffer-env
emacs-beframe
"emacs-tmr"
"emacs-buffer-env"
emacs-no-littering
"emacs-no-littering"
emacs-exwm
emacs-desktop-environment
"emacs-exwm"
"emacs-desktop-environment"
emacs-god-mode
"emacs-god-mode"
"emacs-modalka"
"emacs-meow"
emacs-popper
"emacs-popper"
emacs-mpv
"emacs-ement"
emacs-ement
"emacs-evil"
"emacs-evil-collection"
"emacs-undo-tree"
emacs-lua-mode
emacs-fennel-mode
"emacs-general"
emacs-emojify
"emacs-doom-themes"
"emacs-spacegray-theme"
emacs-mood-line
emacs-minions
"emacs-emojify"
emacs-alert
"emacs-mood-line"
"emacs-doom-modeline"
"emacs-all-the-icons"
;"emacs-minions"
emacs-super-save
"emacs-alert"
emacs-pinentry
pinentry-emacs
"emacs-super-save"
emacs-evil-nerd-commenter
"emacs-pinentry"
"pinentry-emacs"
emacs-ws-butler
"emacs-evil-nerd-commenter"
emacs-hydra
"emacs-ws-butler"
emacs-vertico
emacs-corfu
emacs-kind-icon
emacs-orderless
emacs-consult
emacs-wgrep
emacs-marginalia
emacs-embark
"emacs-hydra"
emacs-avy
emacs-ace-window
"emacs-vertico"
"emacs-corfu"
"emacs-kind-icon"
"emacs-orderless"
"emacs-consult"
"emacs-wgrep"
"emacs-marginalia"
"emacs-embark"
emacs-default-text-scale
emacs-visual-fill-column
"emacs-avy"
"emacs-ace-window"
emacs-password-store
emacs-auth-source-pass
"emacs-default-text-scale"
"emacs-visual-fill-column"
emacs-dired-hacks
emacs-all-the-icons-dired
"emacs-password-store"
"emacs-auth-source-pass"
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-dired-single"
"emacs-dired-hacks"
"emacs-all-the-icons-dired"
emacs-magit
emacs-magit-todos
"emacs-openwith"
git
(list git "send-email")
"emacs-org"
"emacs-org-modern"
"emacs-org-pomodoro"
"emacs-evil-org"
"emacs-org-make-toc"
"emacs-org-present"
"emacs-org-roam"
"emacs-org-appear"
"emacs-htmlize"
"emacs-denote"
emacs-git-link
emacs-git-gutter
emacs-git-gutter-fringe
"emacs-magit"
"emacs-magit-todos"
;emacs-project
ripgrep ;; For consult-ripgrep
"git"
"git:send-email"
emacs-lispy
emacs-lispyville
"emacs-git-link"
"emacs-git-gutter"
"emacs-git-gutter-fringe"
emacs-sly
emacs-sly-asdf
"emacs-project"
"ripgrep" ;; For consult-ripgrep
emacs-js2-mode
emacs-typescript-mode
emacs-apheleia
;; TODO: Use the built-in Eglot for now to avoid problems
;; "emacs-eglot"
emacs-go-mode
"emacs-lispy"
"emacs-lispyville"
emacs-rust-mode
emacs-zig-mode
"emacs-sly"
"emacs-sly-asdf"
emacs-helpful
"emacs-js2-mode"
"emacs-typescript-mode"
"emacs-apheleia"
emacs-geiser
"emacs-go-mode"
emacs-markdown-mode
"emacs-rust-mode"
"emacs-zig-mode"
emacs-web-mode
emacs-skewer-mode
"emacs-helpful"
emacs-yaml-mode
"emacs-geiser"
emacs-flycheck
"emacs-markdown-mode"
emacs-yasnippet
emacs-yasnippet-snippets
"emacs-web-mode"
"emacs-skewer-mode"
emacs-smartparens
"emacs-yaml-mode"
emacs-rainbow-delimiters
"emacs-flycheck"
emacs-rainbow-mode
"emacs-yasnippet"
"emacs-yasnippet-snippets"
emacs-posframe
emacs-keycast
"emacs-smartparens"
emacs-obs-websocket-el
"emacs-rainbow-delimiters"
emacs-a
emacs-request
"emacs-rainbow-mode"
;; TODO: Move to mail profile
isync
mu
emacs-mu4e-alert
"emacs-posframe"
"emacs-keycast"
ledger
;; hledger
emacs-ledger-mode
;"emacs-obs-websocket-el"
emacs-eat
emacs-eshell-z
emacs-esh-autosuggest
emacs-xterm-color
emacs-exec-path-from-shell
"emacs-a"
"emacs-request"
emacs-pcmpl-args
"isync"
"mu"
"emacs-mu4e-alert"
emacs-eshell-syntax-highlighting
"ledger"
;; "hledger"
"emacs-ledger-mode"
emacs-eshell-toggle
"emacs-eat"
"emacs-eshell-z"
"emacs-esh-autosuggest"
"emacs-xterm-color"
"emacs-exec-path-from-shell"
emacs-vterm
"emacs-pcmpl-args"
emacs-tracking
"emacs-eshell-syntax-highlighting"
emacs-telega
"emacs-eshell-toggle"
emacs-elfeed
"emacs-vterm"
emacs-elpher
"emacs-tracking"
emacs-guix
"emacs-telega"
emacs-daemons
"emacs-elfeed"
emacs-pulseaudio-control
"emacs-elpher"
emacs-docker
emacs-docker-tramp
emacs-dockerfile-mode))
"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)

View File

@ -10,13 +10,12 @@
(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)
(use-package-modules nfs certs shells ssh linux bash emacs gnome networking wm fonts libusb
cups freedesktop file-systems version-control package-management)
(define-public base-operating-system
(operating-system
(host-name "default")
(host-name "x230guix")
(timezone "Europe/Berlin")
(locale "en_US.utf8")
@ -34,10 +33,14 @@
;; 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"))
(bootloader (bootloader-configuration
(bootloader grub-bootloader)
;;(targets (list "/dev/sda"))
(keyboard-layout keyboard-layout)))
;; (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
@ -47,6 +50,11 @@
(device "none")
(type "tmpfs")
(check? #f))
(file-system
(device "/dev/sda3")
(mount-point "/")
(type "ext4"))
%base-file-systems))
(users (cons (user-account
@ -72,20 +80,23 @@
%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))
(packages (append (map specification->package
'("git"
"ntfs-3g"
"exfat-utils"
"fuse-exfat"
"stow"
"vim"
"emacs-no-x-toolkit"
"brightnessctl"
"bluez"
"bluez-alsa"
"intel-vaapi-driver"
"libva-utils"
"xf86-input-libinput"
"nss-certs" ;; SSL root certificates
"gvfs")) ;; Enable user mounts
%base-packages))
;; Configure only the services necessary to run the system
(services (append

View File

@ -27,10 +27,10 @@
("EDITOR" . "emacsclient")
;; Add some things to $PATH (maybe integrate into other services?)
;; ("PATH" . "$HOME/.bin:$HOME/.npm-global/bin:$PATH")
;; ("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")
;; ("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
@ -48,27 +48,22 @@
("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")))))
;; (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"))))
;; (bashrc
;; `(,(local-file "../files/bash-prompt")))))
;; Place other files
(simple-service 'profile-files-service
home-files-service-type
(list `(".inputrc" ,(local-file "../files/inputrc"))))
;; (simple-service 'profile-files-service
;; home-files-service-type
;; (list `(".inputrc" ,(local-file "../files/inputrc"))))
;; GnuPG configuration
;; (service home-gpg-agent-service-type
@ -92,7 +87,7 @@
(service home-dotfiles-service-type
(home-dotfiles-configuration
(directories (list "../../.config"))))
(directories (list "../home-services/dotfiles"))))
;; Start background jobs
;; (service home-mcron-service-type

View File

@ -1,109 +0,0 @@
;; 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)

View File

@ -1,73 +0,0 @@
(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)

View File

@ -1,4 +1,4 @@
(define-module (fschl systems x230)
(define-module (fschl systems x230ding)
#:use-module (fschl utils)
#:use-module (fschl systems base)
#:use-module (fschl systems common)
@ -25,7 +25,7 @@
(define system
(operating-system
(inherit base-operating-system)
(host-name "x230")
(host-name "x230guix")
;; Add sof-firmware drivers for audio on ThinkPad x230
;; (firmware (list linux-firmware sof-firmware))

79
sway/.bashrc Executable file
View File

@ -0,0 +1,79 @@
# ~/.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 dont 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

2
sway/.exports Normal file
View File

@ -0,0 +1,2 @@
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM=wayland

224
sway/config Executable file
View File

@ -0,0 +1,224 @@
set $mod Mod4
# at some point check https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway
# Configure displays
# The annoying thing is that sometimes the display ID changes when hotplugging
# my Thunderbolt dock...
set $primary DP-7 DP-8 HDMI-A-1
set $laptop eDP-1
output $laptop pos 1920 135 scale 2
output DP-7 pos 0 0 scale 2
output DP-8 pos 0 0 scale 2
output HDMI-A-1 scale 2
# 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
input type: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
# 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
# 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 0
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 $ws0 "chat"
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 "
assign [class="^Firefox$"] $ws1
assign [class="^DebugScreen"] $ws3
assign [class="^Thunderbird$"] $ws4
assign [class=".*ee.*ass.*"] $ws8
# Move specific workspaces to outputs
workspace $ws0 output $laptop
workspace $ws1 output $primary $laptop
workspace $ws2 output $primary $laptop
workspace $ws3 output $laptop
workspace $ws4 output $laptop
workspace $ws5 output $laptop
# Switch to dev workspace by default
#workspace $ws1
# 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 10
# 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 10
# 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 windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows 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
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 emacs
# 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

27
sway/mako.conf Executable file
View File

@ -0,0 +1,27 @@
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

104
sway/status-rust.toml Normal file
View File

@ -0,0 +1,104 @@
[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 = "swaynag"
[[block]]
block = "disk_space"
path = "/"
info_type = "available"
unit = "GB"
interval = 20
warning = 12.0
alert = 8.0
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 = "enp0s25"
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"

View File

@ -1,15 +1,15 @@
{
"layer": "bottom",
"position": "bottom",
"height": 24,
"height": 20,
// 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" ],
"modules-left": ["sway/workspaces", "sway/mode"],
"modules-center": [ "custom/disk_root", "network"],
"modules-right": [ "memory", "tray", "battery", "clock", ],
"sway/mode": {
"format": " {}"
},
@ -36,27 +36,12 @@
"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})"
"exec": "df -h --output=avail $HOME | tail -1 | tr -d ' '"
},
"custom/disk_root": {
"format": "root💽{} ",
"format": "💽 {} ",
"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 ' '"
"exec": "df -h --output=avail / | tail -1 | tr -d ' '"
},
"temperature": {
// "thermal-zone": 2,
@ -80,6 +65,7 @@
},
"network": {
// "family": "ipv6",
"interface": "wlp3*", // (Optional) To force the use of this interface
"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) ",

90
waybar/style.css Normal file
View File

@ -0,0 +1,90 @@
* {
border: none;
border-radius: 0;
font-family: Iosevka ss08;
font-size: 13px;
box-shadow: none;
text-shadow: none;
transition-duration: 0s;
}
window.eDP-1 * {
font-size: 11px;
}
window {
color: #ffffff;
background: rgba(35, 38, 53, 0.8);
}
#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);
}
#mode,
#battery,
#cpu,
#memory,
#network,
#pulseaudio,
#idle_inhibitor,
#backlight,
#custom-storage,
#custom-spotify,
#custom-weather,
#custom-mail {
margin: 0px 6px 0px 10px;
min-width: 25px;
}
#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);
}

View File

@ -13,71 +13,73 @@
** Linux CLI
Cheat Sheet: https://gist.github.com/chrisswanda/88ade75fc463dcf964c6411d1e9b20f4
Cheat Sheet: https://gist.github.com/chrisswanda/88ade75fc463dcf964c6411d1e9b20f4
Tutorial with best Explaination:
https://medium.com/tangram-visions/what-they-dont-tell-you-about-setting-up-a-wireguard-vpn-46f7bd168478
Tutorial with best Explaination:
https://medium.com/tangram-visions/what-they-dont-tell-you-about-setting-up-a-wireguard-vpn-46f7bd168478
*** Create Keys
#+begin_src bash
$ umask 077
$ wg genkey | tee host.key | wg pubkey > host.pub
#+end_src
#+begin_src bash
$ umask 077
$ wg genkey | tee host.key | wg pubkey > host.pub
#+end_src
*** Setup the Interface
#+begin_src bash
# sudo wg-quick up wg0.conf
#+end_src
#+begin_src bash
# sudo wg-quick up wg0.conf
#+end_src
*** Add Peer
#+begin_src bash
# add peer
wg set wg0 peer <client_pubkey> allowed-ips 10.0.0.x/32 persistent-keepalive 25
#+begin_src bash
# add peer
wg set wg0 peer <client_pubkey> allowed-ips 10.0.0.x/32 persistent-keepalive 25
# verify connection
wg
# verify connection
wg
# save to config
wg-quick save wg0
#+end_src
# save to config
wg-quick save wg0
#+end_src
**** Mobile Client
requires ~qrencode~ package installed:
~qrencode -t ansiutf8 < tunnel.conf~
where ~tunnel.conf~ is the configuration file for the client, including its private and public keys.
requires ~qrencode~ package installed:
~qrencode -t ansiutf8 < tunnel.conf~
where ~tunnel.conf~ is the configuration file for the client, including its private and public keys.
*** Start/Stop Interface
#+begin_src bash
# Start/stop interface
wg-quick up wg0
wg-quick down wg0
#+begin_src bash
# Start/stop interface
wg-quick up wg0
wg-quick down wg0
# Start/stop service
$ sudo systemctl stop wg-quick@wg0.service
$ sudo systemctl start wg-quick@wg0.service
# Start/stop service
$ sudo systemctl stop wg-quick@wg0.service
$ sudo systemctl start wg-quick@wg0.service
# Enable service at startup
sudo systemctl enable wg-quick@wg0.service
#+end_src
# Enable service at startup
sudo systemctl enable wg-quick@wg0.service
#+end_src
*** Sync the configuration without restarting the interface
From ~man wg-quick~: The strip command is useful for reloading
configuration filesystem without disrupting active sessions:
From ~man wg-quick~: The strip command is useful for reloading configuration
files without disrupting ac tive sessions:
#+begin_src bash
# wg syncconf wg0 <(wg-quick strip wg0)
#+end_src
#+begin_src bash
# wg syncconf wg0 <(wg-quick strip wg0)
#+end_src
** Alternative Webinterfaces for Managing Clients
- https://github.com/place1/wg-access-server/
- 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
- https://github.com/place1/wg-access-server/
- 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