{ pkgs, lib, ... }: let useFeatures = [ "alacritty" #"emacs" "direnv" "git" "gpg" "gtk" #"keyring" "syncthing" "tmux" "xdg" "zsh" "helix" ]; colors = { background = "fdf6e3"; foreground = "657b83"; regular0 = "eee8d5"; # background darker regular1 = "dc322f"; # red regular2 = "859900"; # green regular3 = "b58900"; # dark orange regular4 = "268bd2"; # azure blue regular5 = "d33682"; # hot pink regular6 = "2aa198"; # petrol regular7 = "073642"; # navy bright0 = "cb4b16"; # orange bright1 = "fdf6e3"; # foreground bright2 = "93a1a1"; # grey bright3 = "839496"; # slightly darker grey bright4 = "657b83"; # even slightly darker grey bright5 = "6c71c4"; # purple bright6 = "586e75"; # pretty dark grey bright7 = "002b36"; # dark navy blue }; in { imports = [ ./dconf.nix ]; home.stateVersion = "20.09"; programs.gpg.settings.default-key = "99658A3EB5CD7C13"; dadada.home = lib.attrsets.genAttrs useFeatures (useFeatures: { enable = true; }) // { session = { enable = true; sessionVars = { EDITOR = "hx"; PAGER = "less"; MAILDIR = "\$HOME/.var/mail"; MBLAZE = "\$HOME/.config/mblaze"; NOTMUCH_CONFIG = "\$HOME/.config/notmuch/config"; }; }; }; # Languagetool server for web extension systemd.user.services."languagetool-http-server" = { Unit = { Description = "Languagetool HTTP server"; PartOf = [ "graphical-session-pre.target" ]; After = [ "graphical-session.target" ]; }; Service = { Type = "simple"; ExecStart = "${pkgs.languagetool}/bin/languagetool-http-server org.languagetool.server.HTTPServer --allow-origin '*'"; Restart = "always"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; }; programs.offlineimap.enable = false; xdg.configFile."offlineimap/config".text = '' [general] accounts = tu-bs,mailbox [Account tu-bs] localrepository = tu-bs-local remoterepository = tu-bs-remote [Repository tu-bs-local] type = Maildir localfolders = ~/lib/backup/y0067212@tu-bs.de [Repository tu-bs-remote] type = IMAP remotehost = mail.tu-braunschweig.de remoteuser = y0067212 sslcacertfile = /etc/ssl/certs/ca-certificates.crt [Account mailbox] localrepository = mailbox-local remoterepository = mailbox-remote [Repository mailbox-local] type = Maildir localfolders = ~/lib/backup/mailbox.org [Repository mailbox-remote] type = IMAP remotehost = imap.mailbox.org remoteuser = dadada@dadada.li sslcacertfile = /etc/ssl/certs/ca-certificates.crt ''; home.file.".jjconfig.toml".source = ./jjconfig.toml; systemd.user.timers."backup-keepassxc" = { Unit.Description = "Backup password DB"; Timer = { OnBootSec = "15min"; OnUnitActiveSec = "1d"; }; Install.WantedBy = [ "timers.target" ]; }; systemd.user.services."backup-keepassxc" = { Unit.Description = "Backup password DB"; Unit.Type = "oneshot"; Service.ExecStart = "${pkgs.openssh}/bin/scp -P 23 -i /home/dadada/.ssh/keepassxc-backup /home/dadada/lib/sync/Personal.kdbx u355513-sub4@u355513-sub4.your-storagebox.de:Personal.kdbx"; Install.WantedBy = [ "multi-user.target" ]; }; systemd.user.timers."backup-keepassxc-ninurta" = { Unit.Description = "Backup password DB to ninurta"; Timer = { OnBootSec = "15min"; OnUnitActiveSec = "1d"; }; Install.WantedBy = [ "timers.target" ]; }; systemd.user.services."backup-keepassxc-ninurta" = { Unit.Description = "Backup password DB to ninurta"; Unit.Type = "oneshot"; Service.ExecStart = "${pkgs.openssh}/bin/scp -P 22 -i /home/dadada/.ssh/keepassxc-backup /home/dadada/lib/sync/Personal.kdbx backup-keepassxc@ninurta.bs.dadada.li:/mnt/storage/backups/backup-keepassxc/Personal.kdbx"; Install.WantedBy = [ "multi-user.target" ]; }; programs.foot = { enable = true; server.enable = false; settings = { inherit colors; main = { shell = "tmux"; font = "Jetbrains Mono:size=8"; dpi-aware = false; }; mouse.hide-when-typing = true; csd.preferred = "none"; cursor.color = "fdf6e3 586e75"; bell = { urgent = true; visual = false; }; }; }; home.file.".config/sway/config".text = with colors; '' # Read `man 5 sway` for a complete reference. ### Variables # # Logo key. Use Mod1 for Alt. set $mod Mod4 # Home row direction keys, like vim set $left h set $down j set $up k set $right l # Your preferred terminal emulator set $term foot # Your preferred application launcher # Note: pass the final command to swaymsg so that the resulting window can be opened # on the original workspace that the command was run on. set $menu fuzzel set $wallpaper "~/lib/pictures/wallpaper.jpg" ### Idle configuration # # Example configuration: # exec swayidle -w \ timeout 300 'swaylock -f -i $wallpaper -s fill' \ timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ before-sleep 'swaylock -f -i $wallpaper -s fill' # # This will lock your screen after 300 seconds of inactivity, then turn off # your displays after another 300 seconds, and turn your screens back on when # resumed. It will also lock your screen before your computer goes to sleep. input * { xkb_layout eu xkb_model pc105+inet xkb_options caps:escape drag_lock enabled drag enabled dwt enabled tap enabled tap_button_map lrm natural_scroll enabled } ### Key bindings # # Basics: # # Start a terminal bindsym $mod+Return exec $term # Kill focused window bindsym $mod+Shift+q kill # Start your launcher bindsym $mod+d exec $menu # Drag floating windows by holding down $mod and left mouse button. # Resize them with right mouse button + $mod. # Despite the name, also works for non-floating windows. # Change normal to inverse to use left mouse button for resizing and right # mouse button for dragging. floating_modifier $mod normal # Lock the screen bindsym XF86Sleep exec 'swaylock -f -c ${background}' bindsym $mod+End exec 'swaylock -f -c ${background}' # Reload the configuration file bindsym $mod+Shift+c reload # Exit sway (logs you out of your Wayland session) bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' # Brightness bindsym --locked XF86MonBrightnessDown exec light -U 10 bindsym --locked XF86MonBrightnessUp exec light -A 10 # Volume bindsym --locked XF86AudioRaiseVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ +1%' bindsym --locked XF86AudioLowerVolume exec 'pactl set-sink-volume @DEFAULT_SINK@ -1%' bindsym --locked XF86AudioMute exec 'pactl set-sink-mute @DEFAULT_SINK@ toggle' # # Moving around: # # Move your focus around bindsym $mod+$left focus left bindsym $mod+$down focus down bindsym $mod+$up focus up bindsym $mod+$right focus right # Or use $mod+[up|down|left|right] bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right # Move the focused window with the same, but add Shift bindsym $mod+Shift+$left move left bindsym $mod+Shift+$down move down bindsym $mod+Shift+$up move up bindsym $mod+Shift+$right move right # Ditto, with arrow keys bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right # # Workspaces: # # Switch to workspace bindsym $mod+1 workspace number 1 bindsym $mod+2 workspace number 2 bindsym $mod+3 workspace number 3 bindsym $mod+4 workspace number 4 bindsym $mod+5 workspace number 5 bindsym $mod+6 workspace number 6 bindsym $mod+7 workspace number 7 bindsym $mod+8 workspace number 8 bindsym $mod+9 workspace number 9 bindsym $mod+0 workspace number 10 # Move focused container to workspace bindsym $mod+Shift+1 move container to workspace number 1 bindsym $mod+Shift+2 move container to workspace number 2 bindsym $mod+Shift+3 move container to workspace number 3 bindsym $mod+Shift+4 move container to workspace number 4 bindsym $mod+Shift+5 move container to workspace number 5 bindsym $mod+Shift+6 move container to workspace number 6 bindsym $mod+Shift+7 move container to workspace number 7 bindsym $mod+Shift+8 move container to workspace number 8 bindsym $mod+Shift+9 move container to workspace number 9 bindsym $mod+Shift+0 move container to workspace number 10 # Note: workspaces can have any name you want, not just numbers. # We just use 1-10 as the default. # # Layout stuff: # # You can "split" the current object of your focus with # $mod+b or $mod+v, for horizontal and vertical splits # respectively. bindsym $mod+b splith bindsym $mod+v splitv # Switch the current container between different layout styles bindsym $mod+s layout stacking bindsym $mod+w layout tabbed bindsym $mod+e layout toggle split # Make the current focus fullscreen bindsym $mod+f fullscreen # Toggle the current focus between tiling and floating mode bindsym $mod+Shift+space floating toggle # Swap focus between the tiling area and the floating area bindsym $mod+space focus mode_toggle # Move focus to the parent container bindsym $mod+a focus parent # # Font # font "pango:Jetbrains Mono 8" # # Scratchpad: # # Sway has a "scratchpad", which is a bag of holding for windows. # You can send windows there and get them back later. # Move the currently focused window to the scratchpad bindsym $mod+Shift+minus move scratchpad # Show the next scratchpad window or hide the focused scratchpad window. # If there are multiple scratchpad windows, this command cycles through them. bindsym $mod+minus scratchpad show # # Resizing containers: # mode "resize" { # left will shrink the containers width # right will grow the containers width # up will shrink the containers height # down will grow the containers height bindsym $left resize shrink width 10px bindsym $down resize grow height 10px bindsym $up resize shrink height 10px bindsym $right resize grow width 10px # Ditto, with arrow keys bindsym Left resize shrink width 10px bindsym Down resize grow height 10px bindsym Up resize shrink height 10px bindsym Right resize grow width 10px # Return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+r mode "resize" # # Status Bar: # # Read `man 5 sway-bar` for more information about this section. bar { position bottom # When the status_command prints a new line to stdout, swaybar updates. # The default just shows the current date and time. status_command ~/.config/sway/status colors { statusline ${foreground} background ${background} inactive_workspace ${background}ee ${background}ee ${foreground}ee } } # Gaps between multiple tiling windows gaps inner 10 smart_gaps on bindsym $mod+grave exec busctl --user call org.keepassxc.KeePassXC.MainWindow /keepassxc org.keepassxc.KeePassXC.MainWindow lockAllDatabases && swaylock -c #fdf6e3 # class border backgr. text indicator child_border client.focused #${bright6} #${foreground} #${background} #${bright5} #${regular4} client.focused_inactive #${regular0} #${regular0} #${foreground} #${bright5} #${regular0} client.unfocused #${regular0} #${background} #${bright2} #${bright5} #${regular0} client.urgent #${bright1} #${bright0} #${regular4} #${background} #${bright0} client.placeholder #${background} #${bright2} #${foreground} #${background} #${bright2} client.background #${foreground} include /etc/sway/config.d/* exec sleep 5; systemctl --user restart kanshi.service exec sleep 5; swaymsg output '*' bg $wallpaper fill ''; home.file.".config/sway/status".source = ./status; home.file.".config/kanshi/config".text = '' profile Laptop { output eDP-1 enable } profile Docked { output eDP-1 disable output "LG Electronics LG HDR 4K 0x000354D1" { enable scale 1.4 position 0,0 } } ''; # Let Home Manager install and manage itself. programs.home-manager.enable = true; home.packages = import ./pkgs.nix { pkgs = pkgs; }; }