diff options
author | sternenseemann <sternenseemann@systemli.org> | 2022-10-09 12:21:42 +0200 |
---|---|---|
committer | sternenseemann <sternenseemann@systemli.org> | 2022-10-10 15:22:40 +0200 |
commit | d2c18b5cbd80bc3bc9e9cf42fda9a1d7ee6cf52f (patch) | |
tree | 095412b8832721983a7aefd5a2c181a938647215 /modules/user/sternenseemann/profiles/desktop-sway.nix | |
parent | 507eb19d3c5affcd9e43fff43216c4c899c9511a (diff) |
machines/sternenseemann: move desktop-sway.nix into profiles module
Making it a proper module with options allows us to selectively switch off stuff we don't need, e.g. saneterm. This should help keeping the closure of ludwig smallish. Additionally refactor font handling in the module: Instead of including fonts.nix and assuming Bitstream Vera is available, we check fonts.fontconfig.defaultFonts for the font to prefer.
Diffstat (limited to 'modules/user/sternenseemann/profiles/desktop-sway.nix')
-rw-r--r-- | modules/user/sternenseemann/profiles/desktop-sway.nix | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/modules/user/sternenseemann/profiles/desktop-sway.nix b/modules/user/sternenseemann/profiles/desktop-sway.nix new file mode 100644 index 00000000..ba88eb9e --- /dev/null +++ b/modules/user/sternenseemann/profiles/desktop-sway.nix @@ -0,0 +1,178 @@ +# TODO(sterni) icons, GTK +# TODO(sterni) X11 cursor +{ config, pkgs, lib, ... }: + +let + cfg = config.vuizvui.user.sternenseemann.profiles.desktop-sway; + + inherit (pkgs.vuizvui.profpatsch) + getBins + ; + + inherit (pkgs.vuizvui.sternenseemann) + tep + ; + + bins = (getBins pkgs.bemenu [ "bemenu" "bemenu-run" ]) + // (getBins tep [ "tep" ]) + // (getBins pkgs.grim [ "grim" ]) + // (getBins pkgs.slurp [ "slurp" ]) + // (getBins pkgs.mako [ "makoctl" ]) + // (getBins screenshot [ "screenshot" ]) + // (getBins pkgs.foot [ "foot" ]) + // (getBins pkgs.dash [ "dash" ]) + // (getBins config.vuizvui.user.sternenseemann.programs.saneterm.package [ "saneterm" ]) + ; + + screenshot = pkgs.writers.writeDashBin "screenshot" '' + if [ "$1" != "full" ]; then + additionalOpts="-g '$(${bins.slurp})'" + else + shift + fi + + $SHELL -c "${bins.grim} $additionalOpts $@" + ''; + + defaultFont = builtins.head config.fonts.fontconfig.defaultFonts.monospace; + + mkDefEnableOption = text: lib.mkEnableOption text // { + default = true; + example = false; + }; + +in + +{ + options = { + vuizvui.user.sternenseemann.profiles.desktop-sway = { + enable = lib.mkEnableOption "Sway-based Desktop Profile"; + saneterm.enable = mkDefEnableOption "Keyboard shortcuts for saneterm"; + tep.enable = mkDefEnableOption "Keyboard shortcuts for the tep emoji picker"; + nextcloud.enable = mkDefEnableOption "Automatically launching Nextcloud-Client"; + screenshot.enable = mkDefEnableOption "Keyboard shortcuts for taking screenshots"; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + # Core of the module, always active + { + vuizvui.user.sternenseemann.services.sway = { + enable = true; + additionalBinds = { + "$mod+c" = "${bins.makoctl} dismiss -a"; + }; + term = bins.foot; + menu = "${bins.bemenu-run} -l 10 -i"; + lockArgs = [ + "-c" "FFC0CB" "-k" "-l" + ]; + font = { + name = defaultFont; + size = 10; + }; + }; + + # notifications + services.dbus.packages = [ pkgs.mako ]; + + environment.systemPackages = with pkgs; [ + bemenu # better dmenu + xwayland qt5.qtwayland + wl-clipboard # instead of xsel + mako # notifications + gnome.adwaita-icon-theme + ]; + + programs.fish.shellAliases = { + "hdmi2-above" = '' + sway output HDMI-A-2 position 0 0 && sway output eDP-1 position 0 1440 + ''; + "workspace-move" = "sway move workspace output"; + }; + + vuizvui.programs.foot = { + enable = true; + settings = { + include = "${pkgs.foot.themes}/share/foot/themes/selenized-white"; + + font = [ + { + font = defaultFont; + options = { size = 8; }; + } + { + font = "Noto Color Emoji"; + options = { size = 8; }; + } + ]; + + tweak = { + grapheme-shaping = "yes"; + }; + + key-bindings = { + scrollback-up-page = "Control+Shift+Page_Up"; + scrollback-down-page = "Control+Shift+Page_Down"; + search-start = "Control+Shift+F"; + font-increase = "Control+Shift+b"; + font-decrease = "Control+Shift+t"; + font-reset = "Control+Shift+0"; + }; + + mouse-bindings = { + primary-paste = "none"; + }; + + mouse = { + alternate-scroll-mode = "yes"; + }; + + scrollback = { + lines = 10000; + indicator-position = "none"; + }; + }; + }; + } + + (lib.mkIf cfg.saneterm.enable { + vuizvui.user.sternenseemann = { + programs.saneterm.enable = true; + services.sway.additionalBinds = { + "$mod+Shift+Return" = "${bins.saneterm} -- ${bins.dash} -l"; + }; + }; + }) + + (lib.mkIf cfg.nextcloud.enable { + vuizvui.user.sternenseemann.services.sway.extraConfig = '' + exec ${pkgs.gnome.gnome-keyring}/bin/gnome-keyring-daemon --start --components=secrets + exec ${pkgs.nextcloud-client}/bin/nextcloud + ''; + + environment.systemPackages = [ + pkgs.nextcloud-client + ]; + + # so libsecret works + services.gnome.gnome-keyring.enable = true; + programs.dconf.enable = true; + }) + + (lib.mkIf cfg.tep.enable { + vuizvui.user.sternenseemann.services.sway.additionalBinds = { + "$mod+g" = "${bins.tep} copy -l 25 -p 'tep>' -i"; + }; + }) + + (lib.mkIf cfg.screenshot.enable { + vuizvui.user.sternenseemann.services.sway.additionalBinds = { + "$mod+x" = bins.screenshot; + }; + environment.systemPackages = [ + pkgs.grim pkgs.slurp screenshot # screenshots + ]; + }) + ]); +} |