nixfiles/home-manager/modules/de2u.nix

390 lines
13 KiB
Nix

inputs: {
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.de2u;
in {
options.de2u = {
enable = mkEnableOption "Enable de2 user stuff";
tiling = mkOption {
type = types.bool;
default = true;
description = "Enable tiling stuff";
};
touch = mkOption {
type = types.bool;
default = false;
description = "Make usable for touchscreens";
};
};
config = mkIf cfg.enable {
ezcolors.enable = lib.mkDefault true;
ezfonts.enable = lib.mkDefault true;
programs.firefox.enable = true;
programs.kermit = {
enable = lib.mkDefault true;
settings = {
key = lib.mkDefault "shift";
opacity = lib.mkDefault "1";
};
};
home.packages = with pkgs; [
gnomeExtensions.pop-shell
gnomeExtensions.blur-my-shell
gnomeExtensions.improved-workspace-indicator
gnomeExtensions.vitals
gnomeExtensions.clipboard-indicator
gnomeExtensions.just-perfection
gnomeExtensions.appindicator
gnomeExtensions.compiz-windows-effect
gnomeExtensions.unite-shell
gnomeExtensions.gamemode
gnomeExtensions.desktop-cube
gnomeExtensions.gsconnect
gnomeExtensions.sound-output-device-chooser
gnomeExtensions.bluetooth-quick-connect
gnomeExtensions.burn-my-windows
gnomeExtensions.forge
];
systemd.user.sessionVariables = {
MOZ_ENABLE_WAYLAND = "1";
QT_WAYLAND_DISABLE_WINDOWDECORATION = lib.mkIf (cfg.tiling && !cfg.touch) "1";
};
xdg.configFile."gtk-4.0/gtk.css".text = ''
/* UNITE windowDecorations */
@import url('${config.home.homeDirectory}/.nix-profile/share/gnome-shell/extensions/unite@hardpixel.eu/styles/gtk4/buttons-right/${
if (cfg.tiling && !cfg.touch)
then "always"
else "both"
}.css');
/* windowDecorations UNITE */
'';
gtk.gtk3.extraCss = ''
/* UNITE windowDecorations */
@import url('${config.home.homeDirectory}/.nix-profile/share/gnome-shell/extensions/unite@hardpixel.eu/styles/gtk3/buttons-right/${
if (cfg.tiling && !cfg.touch)
then "always"
else "both"
}.css');
/* windowDecorations UNITE */
'';
home.activation.gtk3css-over-unite = {
data = ''
$DRY_RUN_CMD rm -f ~/.config/gtk-3.0/gtk.css
$DRY_RUN_CMD rm -f ~/.config/gtk-4.0/gtk.css
'';
before = ["checkLinkTargets"];
after = [];
};
xdg.configFile."mimeapps.list".force = true;
xdg.mimeApps = let
browser =
if config.programs.firefox.enable
then
(
if config.programs.firefox.package.pname == "firefox"
then "firefox.desktop"
else "librewolf.desktop"
)
else "chromium-browser.desktop";
apps = {
"text/plain" = "org.gnome.TextEditor.desktop";
"inode/directory" = "org.gnome.Nautilus.desktop";
"image/*" = "org.gnome.eog.desktop";
# and because mimeapps.list is DUMB
"image/jpeg" = "org.gnome.eog.desktop";
"image/bmp" = "org.gnome.eog.desktop";
"image/gif" = "org.gnome.eog.desktop";
"image/jpg" = "org.gnome.eog.desktop";
"image/pjpeg" = "org.gnome.eog.desktop";
"image/png" = "org.gnome.eog.desktop";
"image/tiff" = "org.gnome.eog.desktop";
"image/x-bmp" = "org.gnome.eog.desktop";
"image/x-gray" = "org.gnome.eog.desktop";
"image/x-icb" = "org.gnome.eog.desktop";
"image/x-ico" = "org.gnome.eog.desktop";
"image/x-png" = "org.gnome.eog.desktop";
"image/x-portable-anymap" = "org.gnome.eog.desktop";
"image/x-portable-bitmap" = "org.gnome.eog.desktop";
"image/x-portable-graymap" = "org.gnome.eog.desktop";
"image/x-portable-pixmap" = "org.gnome.eog.desktop";
"image/x-xbitmap" = "org.gnome.eog.desktop";
"image/x-xpixmap" = "org.gnome.eog.desktop";
"image/x-pcx" = "org.gnome.eog.desktop";
"image/svg+xml" = "org.gnome.eog.desktop";
"image/svg+xml-compressed" = "org.gnome.eog.desktop";
"image/vnd.wap.wbmp" = "org.gnome.eog.desktop";
"image/x-icns" = "org.gnome.eog.desktop";
"video/*" = "org.gnome.Totem.desktop";
"text/html" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/mailto" = "org.gnome.Geary.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/rar" = "org.gnome.FileRoller.desktop";
"application/7z" = "org.gnome.FileRoller.desktop";
"application/*tar" = "org.gnome.FileRoller.desktop";
"x-scheme-handler/sms" = "org.gnome.Shell.Extensions.GSConnect.desktop";
"x-scheme-handler/tel" = "org.gnome.Shell.Extensions.GSConnect.desktop";
};
in {
enable = true;
associations.added = apps;
defaultApplications = apps;
};
dconf.settings = with lib.hm.gvariant; {
"org/gnome/shell/extensions/forge" = {
stacked-tiling-mode-enabled = false;
tabbed-tiling-mode-enabled = false;
# I want this `true` but it screws up on multi-monitor setups
window-gap-hidden-on-single = false;
};
"org/gnome/shell/extensions/forge/keybindings" = {
window-focus-down = ["<Super>j" "<Super>Down"];
window-focus-left = ["<Super>h" "<Super>Left"];
window-focus-right = ["<Super>l" "<Super>Right"];
window-focus-up = ["<Super>k" "<Super>Up"];
window-move-down = ["<Shift><Super>j" "<Shift><Super>Down"];
window-move-left = ["<Shift><Super>h" "<Shift><Super>Left"];
window-move-right = ["<Shift><Super>l" "<Shift><Super>Right"];
window-move-up = ["<Shift><Super>k" "<Shift><Super>Up"];
window-swap-down = ["<Ctrl><Super>j" "<Ctrl><Super>Down"];
window-swap-left = ["<Ctrl><Super>h" "<Ctrl><Super>Left"];
window-swap-right = ["<Ctrl><Super>l" "<Ctrl><Super>Right"];
window-swap-up = ["<Ctrl><Super>k" "<Ctrl><Super>Up"];
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
enable-hot-corners = !cfg.tiling;
show-battery-percentage = true;
};
# "org/gnome/shell/extensions/pop-shell" = {
# tile-by-default = cfg.tiling;
# show-title = !cfg.tiling;
# active-hint = false;
# };
"org/gnome/shell/extensions/improved-workspace-indicator" = {
panel-position = "left";
};
"org/gnome/shell/extensions/vitals" = {
hide-zeros = true;
show-battery = true;
update-time = 10;
};
"org/gnome/shell/extensions/appindicator" = {
icon-opacity = 255;
tray-pos = "center";
};
"org/gnome/shell/extensions/user-theme" = {
name =
if config.ezcolors.enable
then "Generated"
else "Default";
};
"org/gnome/shell/extensions/just-perfection" = {
# activities-button = !cfg.tiling; # conflicts with unite?
startup-status = 0;
workspace-popup = false;
window-picker-icon = false;
animation = 3;
dash = !cfg.tiling;
double-super-to-appgrid = true;
};
"org/gnome/shell" = {
disable-user-extensions = false;
disabled-extensions = [""];
enabled-extensions = [
# "pop-shell@system76.com"
"rrc@ogarcia.me"
"native-window-placement@gnome-shell-extensions.gcampax.github.com"
"user-theme@gnome-shell-extensions.gcampax.github.com"
"improved-workspace-indicator@michaelaquilina.github.io"
"Vitals@CoreCoding.com"
"clipboard-indicator@tudmotu.com"
"just-perfection-desktop@just-perfection"
"appindicatorsupport@rgcjonas.gmail.com"
"launch-new-instance@gnome-shell-extensions.gcampax.github.com"
"unite@hardpixel.eu"
"gamemode@christian.kellner.me"
# "compiz-windows-effect@hermes83.github.com"
"bluetooth-quick-connect@bjarosze.gmail.com"
"gsconnect@andyholmes.github.io"
# "desktop-cube@schneegans.github.com"
"sound-output-device-chooser@kgshank.net"
# "blur-my-shell@aunetx"
# "burn-my-windows@schneegans.github.com"
] ++ (lib.optional cfg.tiling "forge@jmmaranan.com");
};
"org/gnome/desktop/peripherals/touchpad" = {
natural-scroll = false;
};
"org/gnome/mutter" = {
edge-tiling = !cfg.tiling;
dynamic-workspaces = !cfg.tiling;
};
"org/gnome/shell/extensions/unite" = {
hide-window-titlebars =
if (cfg.tiling && !cfg.touch)
then "always"
else "both";
hide-activities-button =
if (cfg.tiling || cfg.touch)
then "never"
else "always";
show-window-buttons =
if cfg.tiling
then "never"
else "both";
notifications-position = "center";
restrict-to-primary-screen = false;
show-legacy-tray = false;
show-desktop-name = false;
extend-left-box = false;
hide-app-menu-icon = false;
reduce-panel-spacing = false;
hide-dropdown-arrows = true;
};
# "org/gnome/shell/extensions/com/github/hermes83/compiz-windows-effect" = {
# resize-effect = true;
# };
# "org/gnome/shell/extensions/desktop-cube" = {
# workspace-transition-time = 200;
# last-first-gap = false;
# };
# "org/gnome/shell/extensions/burn-my-windows" = {
# snap-close-effect = true;
# fire-close-effect = false;
# snap-animation-time = 500;
# snap-color = "rgba(0,0,0,0)";
# };
"org/gnome/desktop/wm/preferences" = {
focus-mode =
if cfg.tiling
then "sloppy"
else "click";
resize-with-right-button = true;
num-workspaces = 9;
};
"org/gnome/maps" = {
night-mode = true;
transportation-type = "car";
};
"org/gnome/system/location" = {
enabled = true;
};
"org/gnome/desktop/wm/keybindings" = let
workspaceAttrsList = lib.flatten (map
(n: [
(lib.nameValuePair "move-to-workspace-${n}" ["<Shift><Super>${n}"])
(lib.nameValuePair "switch-to-workspace-${n}" ["<Super>${n}"])
])
(map (n: toString n) (lib.range 1 9)));
in
lib.listToAttrs workspaceAttrsList
// {
minimize = ["<Super>comma"];
maximize = [""];
unmaximize = [""];
move-to-monitor-up = [""];
move-to-monitor-down = [""];
move-to-monitor-left = [""];
move-to-monitor-right = [""];
move-to-workspace-down = [""];
move-to-workspace-up = [""];
switch-to-workspace-down = ["<Primary><Super>Down" "<Primary><Super>j"];
switch-to-workspace-up = ["<Primary><Super>Up" "<Primary><Super>k"];
toggle-maximized = ["<Super>m"];
toggle-fullscreen = ["<Super>f"];
close = ["<Super>q"];
cycle-windows = [""];
panel-run-dialog = ["<Super>d"];
move-to-workspace-right = [""];
move-to-workspace-left = [""];
switch-to-workspace-right = [""];
switch-to-workspace-left = [""];
toggle-on-all-workspaces = ["<Super>a"];
# And deal with the remaining alt keys, screw alt keys
cycle-windows-backward = [""];
activate-window-menu = [""];
cycle-panels = [""];
cycle-panels-backward = [""];
switch-panels = [""];
switch-panels-backward = [""];
switch-applications = ["<Super>Tab"];
switch-applications-backward = ["<Shift><Super>Tab"];
cycle-group = [""];
cycle-group-backward = [""];
switch-group = [""];
switch-group-backward = [""];
begin-resize = ["<Super>r"];
begin-move = [""];
};
"org/gnome/mutter/keybindings" = {
toggle-tiled-left = [""];
toggle-tiled-right = [""];
};
"org/gnome/mutter/wayland/keybindings" = {
restore-shortcuts = [""];
};
"org/gnome/shell/keybindings" =
lib.listToAttrs (map (n: lib.nameValuePair "switch-to-application-${toString n}" [""]) (lib.range 1 9))
// {
toggle-application-view = [""];
open-application-menu = [""];
toggle-message-tray = ["<Super>v"];
toggle-overview = [""];
};
"org/gnome/settings-daemon/plugins/media-keys" = {
play = ["<Super>backslash"];
next = ["<Super>bracketright"];
previous = ["<Super>bracketleft"];
volume-down = ["<Super>minus"];
volume-up = ["<Super>equal"];
screensaver = ["<Super>Escape"];
home = [""];
email = ["<Super>e"];
www = ["<Super>b"];
rotate-video-lock-static = [""];
screenshot-clip = ["Print"];
custom-keybindings = ["/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"];
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
binding = "<Super>t";
command = "kermit";
name = "Kermit terminal";
};
};
};
}