Refactor theme system, add 'hey theme' & reload handlers

Themes can now be swapped with 'hey theme NAME', or reloaded with the
reloadTheme script.
This commit is contained in:
Henrik Lissner 2020-10-23 20:54:25 -04:00
parent c50a51f987
commit 14e2aada30
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
12 changed files with 52 additions and 57 deletions

View file

@ -130,6 +130,7 @@ function main {
ch|check) _do nix flake check "$@" "$DOTFILES";;
sh|show) _do nix flake show "$@" "$DOTFILES" ;;
theme) THEME="$1" _rebuild --fast test ;;
t|test) _rebuild --fast test "$@" ;;
re|rebuild) _rebuild "${@:-switch}" ;;
rollback) _rebuild --rollback switch ;;

View file

@ -120,6 +120,5 @@ bind -T copy-mode-vi L send-keys -X end-of-line
set -g @open-editor 'C-e'
set -g @open-S 'https://www.duckduckgo.com/'
source $TMUX_HOME/plugins
if '[ -f $TMUX_HOME/theme ]' 'source $TMUX_HOME/theme'
source $TMUX_HOME/extraInit
if '[ -f ~/.tmux.conf ]' 'source ~/.tmux.conf'

View file

@ -15,7 +15,7 @@ with lib.my;
# services.gitea.enable = true;
# services.syncthing.enable = true;
themes.fluorescence.enable = true;
theme.active = "alucard";
};

View file

@ -65,7 +65,7 @@
# Needed occasionally to help the parental units with PC problems
# teamviewer.enable = true;
};
themes.fluorescence.enable = true;
theme.active = "alucard";
};

View file

@ -69,7 +69,7 @@
# syncthing.enable = true;
ssh.enable = true;
};
themes.fluorescence.enable = true;
theme.active = "alucard";
};

View file

@ -8,7 +8,7 @@ rec {
modulesDir = "${dotFilesDir}/modules";
configDir = "${dotFilesDir}/config";
binDir = "${dotFilesDir}/bin";
themeDir = "${modulesDir}/themes";
themesDir = "${modulesDir}/themes";
homeDir = "/home/${let name = getEnv "USERNAME"; in
if elem name [ "" "root" ]
then "hlissner" else name}";

View file

@ -28,7 +28,7 @@ in {
# themename=${my.theme.name}
# shift
# exec rofi \
# -theme ${themeDir}/$themename/rofi/$themefile \
# -theme ${themesDir}/$themename/rofi/$themefile \
# "$@"
# '')

View file

@ -9,6 +9,8 @@ in {
};
config = mkIf cfg.enable {
modules.theme.onReload.bspwm = "${pkgs.bspwm}/bin/bspc wm -r";
environment.systemPackages = with pkgs; [
lightdm
dunst

View file

@ -115,23 +115,10 @@ in {
env.QT_QPA_PLATFORMTHEME = "gtk2";
qt5 = { style = "gtk2"; platformTheme = "gtk2"; };
services.xserver.displayManager.sessionCommands =
let cfg = config.services.xserver.desktopManager.wallpaper; in ''
# Also, read xresources files in ~/.config/xtheme/* and init scripts in
# ~/.config/xsessions/*, so I can centralize my theme config files.
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
source "$XDG_CONFIG_HOME"/xsession/*.sh
xrdb -merge "$XDG_CONFIG_HOME"/xtheme/*
# Set the wallpaper ourselves so we don't need .background-image and/or
# .fehbg polluting $HOME
if [ -e "$XDG_DATA_HOME/wallpaper" ]; then
${pkgs.feh}/bin/feh --bg-${cfg.mode} \
${optionalString cfg.combineScreens "--no-xinerama"} \
--no-fehbg \
$XDG_DATA_HOME/wallpaper
fi
'';
services.xserver.displayManager.sessionCommands = ''
# GTK2_RC_FILES must be available to the display manager.
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
'';
# Clean up leftovers, as much as we can
system.userActivationScripts.cleanupHome = ''

View file

@ -3,21 +3,23 @@
with lib;
with lib.my;
let cfg = config.modules.shell.tmux;
# Despite tmux/tmux#142, tmux will support XDG in 3.2. Sadly, only 3.0 is
# available on nixpkgs, and 3.1b on master (tmux/tmux@15d7e56), so I
# implement it myself:
tmux = (pkgs.writeScriptBin "tmux" ''
#!${pkgs.stdenv.shell}
exec ${pkgs.tmux}/bin/tmux -f "$TMUX_HOME/config" "$@"
'');
in {
options.modules.shell.tmux = {
options.modules.shell.tmux = with types; {
enable = mkBoolOpt false;
rcFiles = mkOpt (listOf (either str path)) [];
};
config = mkIf cfg.enable {
user.packages = with pkgs; [
# Despite tmux/tmux#142, tmux will support XDG in 3.2. Sadly, only 3.0 is
# available on nixpkgs, and 3.1b on master (tmux/tmux@15d7e56), so I
# implement it myself:
(writeScriptBin "tmux" ''
#!${stdenv.shell}
exec ${tmux}/bin/tmux -f "$TMUX_HOME/config" "$@"
'')
];
user.packages = [ tmux ];
modules.theme.onReload.tmux = "${tmux}/bin/tmux source-file $TMUX_HOME/extraInit";
modules.shell.zsh = {
rcInit = "_cache tmuxifier init -";
@ -26,10 +28,13 @@ in {
home.configFile = {
"tmux" = { source = "${configDir}/tmux"; recursive = true; };
"tmux/plugins".text = ''
"tmux/extraInit".text = ''
# This file is auto-generated by nixos, don't edit by hand!
run-shell ${pkgs.tmuxPlugins.copycat}/share/tmux-plugins/copycat/copycat.tmux
run-shell ${pkgs.tmuxPlugins.prefix-highlight}/share/tmux-plugins/prefix-highlight/prefix_highlight.tmux
run-shell ${pkgs.tmuxPlugins.yank}/share/tmux-plugins/yank/yank.tmux
${concatMapStrings (path: "source '${path}'\n") cfg.rcFiles}
'';
};

View file

@ -74,23 +74,23 @@ in {
'';
# Other dotfiles
home.configFile = mkMerge [
home.configFile = with config.modules; mkMerge [
{
# Sourced from sessionCommands in modules/themes/default.nix
"xtheme/90-theme".source = ./config/Xresources;
}
(mkIf m.desktop.bspwm.enable {
(mkIf desktop.bspwm.enable {
"bspwm/rc.d/polybar".source = ./config/polybar/run.sh;
"bspwm/rc.d/theme".source = ./config/bspwmrc;
})
(mkIf m.desktop.apps.rofi.enable {
(mkIf desktop.apps.rofi.enable {
"rofi/theme" = { source = ./config/rofi; recursive = true; };
})
(mkIf (m.desktop.bspwm.enable || m.desktop.stumpwm.enable) {
(mkIf (desktop.bspwm.enable || desktop.stumpwm.enable) {
"polybar" = { source = ./config/polybar; recursive = true; };
"dunst/dunstrc".source = ./config/dunstrc;
})
(mkIf m.desktop.media.graphics.vector.enable {
(mkIf desktop.media.graphics.vector.enable {
"inkscape/templates/default.svg".source = ./config/inkscape/default-template.svg;
})
];

View file

@ -39,7 +39,7 @@ in {
config = mkIf (cfg.active != null) (mkMerge [
# Read xresources files in ~/.config/xtheme/* to allow modular
# configuration of Xresources.
(let xrdb = ''xrdb -merge "$XDG_CONFIG_HOME"/xtheme/*'';
(let xrdb = ''${pkgs.xorg.xrdb}/bin/xrdb -merge "$XDG_CONFIG_HOME"/xtheme/*'';
in {
services.xserver.displayManager.sessionCommands = xrdb;
modules.theme.onReload.xtheme = xrdb;
@ -104,21 +104,22 @@ in {
services.xserver.displayManager.lightdm.background = cfg.loginWallpaper;
})
(mkIf (cfg.onReload != {}) {
user.packages = [
(pkgs.writeScriptBin "reloadTheme" ''
#!${stdenv.shell}
echo "Reloading current theme: ${cfg.active}"
${concatStrings "\n"
(mapAttrsToList (name: script: ''
echo "[${name}]"
${script}
'') cfg.onReload)}
'')
];
system.userActivationScripts.reloadTheme = ''
[ -z "$NORELOAD" ] && reloadTheme
'';
})
(mkIf (cfg.onReload != {})
(let reloadTheme =
with pkgs; (writeScriptBin "reloadTheme" ''
#!${stdenv.shell}
echo "Reloading current theme: ${cfg.active}"
${concatStringsSep "\n"
(mapAttrsToList (name: script: ''
echo "[${name}]"
${script}
'') cfg.onReload)}
'');
in {
user.packages = [ reloadTheme ];
system.userActivationScripts.reloadTheme = ''
[ -z "$NORELOAD" ] && ${reloadTheme}/bin/reloadTheme
'';
}))
]);
}