diff --git a/default.nix b/default.nix index 37aff8c3..3606c96a 100644 --- a/default.nix +++ b/default.nix @@ -6,7 +6,7 @@ device: networking.hostName = lib.mkDefault device; imports = [ - ./options.nix + ./modules "${./hosts}/${device}" ]; @@ -16,15 +16,15 @@ device: # So we can use absolute import paths "bin=/etc/dotfiles/bin" "config=/etc/dotfiles/config" - "modules=/etc/dotfiles/modules" ]; - # ...but we still need to set nixpkgs.overlays to make them visible to the - # rebuild process, however... + # Add custom packages & unstable channel, so they can be accessed via pkgs.* nixpkgs.overlays = import ./overlays.nix; nixpkgs.config.allowUnfree = true; # forgive me Stallman senpai - # For instant nix-shell scripts - environment.systemPackages = [ pkgs.my.cached-nix-shell ]; + environment.systemPackages = with pkgs; [ + gnumake # for our own makefile + my.cached-nix-shell # for instant nix-shell scripts + ]; environment.shellAliases = { nix-env = "NIXPKGS_ALLOW_UNFREE=1 nix-env"; nix-shell = ''NIX_PATH="nixpkgs-overlays=/etc/dotfiles/overlays.nix:$NIX_PATH" nix-shell''; diff --git a/hosts/aka/default.nix b/hosts/aka/default.nix index 6258686e..a8a5672a 100644 --- a/hosts/aka/default.nix +++ b/hosts/aka/default.nix @@ -5,16 +5,16 @@ imports = [ ../personal.nix # common settings ./hardware-configuration.nix - ## Apps - - ## Services - - # - - - ]; + modules = { + shell.zsh.enable = true; + services.calibre.enable = true; + services.jellyfin.enable = true; + services.ssh.enable = true; + services.syncthing.enable = true; + }; + my.zsh.rc = lib.readFile ; networking.networkmanager.enable = true; diff --git a/hosts/ao/default.nix b/hosts/ao/default.nix index 4ff5c1ef..c13ce683 100644 --- a/hosts/ao/default.nix +++ b/hosts/ao/default.nix @@ -5,16 +5,17 @@ imports = [ ../personal.nix ./hardware-configuration.nix - ## Apps - - - ## Services - - - - ]; + modules = { + shell.git.enable = true; + shell.zsh.enable = true; + services.ssh.enable = true; + services.nginx.enable = true; + services.gitea.enable = true; + services.syncthing.enable = true; + }; + my.zsh.rc = lib.readFile ; networking.networkmanager.enable = true; diff --git a/hosts/default.nix b/hosts/common.nix similarity index 85% rename from hosts/default.nix rename to hosts/common.nix index aad4d977..bb8c1983 100644 --- a/hosts/default.nix +++ b/hosts/common.nix @@ -1,4 +1,4 @@ -# hosts/default.nix --- settings common to all my systems +# hosts/common.nix --- settings common to all my systems { pkgs, ... }: { @@ -13,7 +13,6 @@ sshfs ]; - ### My user settings my.username = "hlissner"; my.user = { diff --git a/hosts/kuro/default.nix b/hosts/kuro/default.nix index 231c408e..6266f841 100644 --- a/hosts/kuro/default.nix +++ b/hosts/kuro/default.nix @@ -1,41 +1,73 @@ # Kuro -- my desktop -{ pkgs, ... }: +{ pkgs, options, config, ... }: { imports = [ ../personal.nix # common settings ./hardware-configuration.nix - ## Desktop/shell environment - - # - ## Apps - - - - # - - - - - - - - - - - ## Project-based - # discord, mainly - # recording video & audio - # making music - # playing music - # art & design - # virtualbox for testing - ## Services - - ## Theme - ]; + modules = { + desktop = { + bspwm.enable = true; + + apps.rofi.enable = true; + apps.discord.enable = true; + # apps.skype.enable = true; + apps.daw.enable = true; # making music + apps.graphics.enable = true; # raster/vector/sprites + apps.recording.enable = true; # recording screen/audio + apps.vm.enable = true; # virtualbox for testing + + term.default = "xst"; + term.st.enable = true; + + browsers.default = "firefox"; + browsers.firefox.enable = true; + # browsers.qutebrowser.enable = true; + + # gaming.emulators.psx.enable = true; + # gaming.steam.enable = true; + # gaming.factorio.enable = true; + }; + + editors = { + default = "nvim"; + emacs.enable = true; + vim.enable = true; + }; + + dev = { + cc.enable = true; + common-lisp.enable = true; + rust.enable = true; + scala.enable = true; + }; + + media = { + mpv.enable = true; + spotify.enable = true; + }; + + shell = { + direnv.enable = true; + git.enable = true; + gnupg.enable = true; + # weechat.enable = true; + pass.enable = true; + tmux.enable = true; + ranger.enable = true; + zsh.enable = true; + }; + + services = { + syncthing.enable = true; + }; + + # themes.aquanaut.enable = true; + themes.fluorescence.enable = true; + }; + networking.networkmanager.enable = true; time.timeZone = "America/Toronto"; } diff --git a/hosts/linode.nix b/hosts/linode.nix index 4090d5d5..ba8452f8 100644 --- a/hosts/linode.nix +++ b/hosts/linode.nix @@ -33,7 +33,7 @@ with pkgs; [ inetutils mtr sysstat git ]; imports = [ - ./. + ./common.nix diff --git a/hosts/personal.nix b/hosts/personal.nix index 71da1b9c..b47edcc4 100644 --- a/hosts/personal.nix +++ b/hosts/personal.nix @@ -2,7 +2,7 @@ { config, lib, pkgs, ... }: { - imports = [ ./. ]; + imports = [ ./common.nix ]; # Support for more filesystems environment.systemPackages = with pkgs; [ diff --git a/hosts/shiro/default.nix b/hosts/shiro/default.nix index e01747d9..101cf96d 100644 --- a/hosts/shiro/default.nix +++ b/hosts/shiro/default.nix @@ -5,32 +5,68 @@ imports = [ ../personal.nix # common settings ./hardware-configuration.nix - ## Dekstop environment - - ## Apps - - - - - - - - - - - ## Project-based - # discord, mainly - # recording video & audio - # making music - # playing music - # art & design - # # virtualbox for testing - ## Services - - ## Theme - ]; + modules = { + desktop = { + bspwm.enable = true; + + apps.rofi.enable = true; + apps.discord.enable = true; + # apps.skype.enable = true; + apps.daw.enable = true; # making music + apps.graphics.enable = true; # raster/vector/sprites + apps.recording.enable = true; # recording screen/audio + # apps.vm.enable = true; # virtualbox for testing + + term.default = "xst"; + term.st.enable = true; + + browsers.default = "firefox"; + browsers.firefox.enable = true; + # browsers.qutebrowser.enable = true; + + # gaming.emulators.psx.enable = true; + # gaming.steam.enable = true; + # gaming.factorio.enable = true; + }; + + editors = { + default = "nvim"; + emacs.enable = true; + vim.enable = true; + }; + + # dev = { + # cc.enable = true; + # # common-lisp.enable = true; + # rust.enable = true; + # }; + + media = { + mpv.enable = true; + spotify.enable = true; + }; + + shell = { + direnv.enable = true; + git.enable = true; + gnupg.enable = true; + # weechat.enable = true; + pass.enable = true; + tmux.enable = true; + ranger.enable = true; + zsh.enable = true; + }; + + services = { + syncthing.enable = true; + }; + + # themes.aquanaut.enable = true; + themes.fluorescence.enable = true; + }; + networking.wireless.enable = true; hardware.opengl.enable = true; diff --git a/modules/browser/firefox.nix b/modules/browser/firefox.nix deleted file mode 100644 index 326ff5c9..00000000 --- a/modules/browser/firefox.nix +++ /dev/null @@ -1,26 +0,0 @@ -# modules/browser/firefox.nix --- https://www.mozilla.org/en-US/firefox -# -# Oh firefox, gateway to the interwebs, devourer of ram. Give onto me your -# infinite knowledge and shelter me from ads. - -{ config, lib, pkgs, ... }: -{ - my.packages = with pkgs; [ - firefox-bin - (pkgs.writeScriptBin "firefox-private" '' - #!${stdenv.shell} - ${firefox}/bin/firefox --private-window "$@" - '') - (makeDesktopItem { - name = "firefox-private"; - desktopName = "Firefox (Private)"; - genericName = "Open a private Firefox window"; - icon = "firefox"; - exec = "${firefox-bin}/bin/firefox --private-window"; - categories = "Network"; - }) - ]; - - my.env.BROWSER = "firefox"; - my.env.XDG_DESKTOP_DIR = "$HOME"; # prevent firefox creating ~/Desktop -} diff --git a/modules/browser/qutebrowser.nix b/modules/browser/qutebrowser.nix deleted file mode 100644 index efd03796..00000000 --- a/modules/browser/qutebrowser.nix +++ /dev/null @@ -1,51 +0,0 @@ -# modules/browser/qutebrowser.nix --- https://github.com/qutebrowser/qutebrowser -# -# Qutebrowser is cute because it's not enough of a browser to be handsome. -# Still, we can all tell he'll grow up to be one hell of a lady-killer. - -{ config, lib, pkgs, ... }: -{ - my.packages = with pkgs; [ - qutebrowser - (pkgs.writeScriptBin "qutebrowser-private" '' - #!${stdenv.shell} - ${qutebrowser}/bin/qutebrowser ":open -p $@" - '') - (makeDesktopItem { - name = "qutebrowser-private"; - desktopName = "Qutebrowser (Private)"; - genericName = "Open a private Qutebrowser window"; - icon = "qutebrowser"; - exec = "${qutebrowser}/bin/qutebrowser ':open -p'"; - categories = "Network"; - }) - ]; - my.env.BROWSER = "qutebrowser"; - my.home.xdg = { - configFile."qutebrowser" = { - source = ; - recursive = true; - }; - dataFile = { - "qutebrowser/greasemonkey" = { - source = ; - recursive = true; - }; - "qutebrowser/userstyles.css".source = - let compiledStyles = - with pkgs; runCommand "compileUserStyles" - { buildInputs = [ sass ]; } '' - mkdir "$out" - for file in ${}/*.scss; do - scss --sourcemap=none \ - --no-cache \ - --style compressed \ - --default-encoding utf-8 \ - "$file" \ - >>"$out/userstyles.css" - done - ''; - in "${compiledStyles}/userstyles.css"; - }; - }; -} diff --git a/modules/browser/vivaldi.nix b/modules/browser/vivaldi.nix deleted file mode 100644 index 54e0fa96..00000000 --- a/modules/browser/vivaldi.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - my.packages = with pkgs; [ - vivaldi - vivaldi-widevine - (pkgs.writeScriptBin "vivaldi-private" '' - #!${stdenv.shell} - ${vivaldi}/bin/vivaldi --incognito "$@" - '') - (makeDesktopItem { - name = "vivaldi-private"; - desktopName = "Vivaldi (Incognito)"; - genericName = "Open an incognito Vivaldi window"; - icon = "vivaldi"; - exec = "${vivaldi}/bin/vivaldi --incognito"; - categories = "Network"; - }) - ]; - my.env.BROWSER = "vivaldi"; -} diff --git a/modules/chat.nix b/modules/chat.nix deleted file mode 100644 index 3dd06ce2..00000000 --- a/modules/chat.nix +++ /dev/null @@ -1,12 +0,0 @@ -# modules/chat.nix -# -# Even neckbeards have a social life. Not that I have one. A neckbeard, I mean. -# But when I do have either, then discord and weechat are my go-to. - -{ pkgs, ... }: -{ - my.packages = with pkgs; [ - # weechat # TODO For the real neckbeards - discord # For everyone else - ]; -} diff --git a/modules/daw.nix b/modules/daw.nix deleted file mode 100644 index 9af851b8..00000000 --- a/modules/daw.nix +++ /dev/null @@ -1,18 +0,0 @@ -# modules/music.nix -# -# I make music for my games. LMMS is my DAW; or will be, once I've weened myself -# off of Fruityloops. When I'm in the mood for a quicky I fire up sunvox -# instead. It runs absolutely anywhere, even on my ipad and phone. As if I'd -# ever need to. - -{ config, lib, pkgs, ... }: -{ - my.packages = with pkgs; [ - audacity # for recording and remastering audio - sunvox # for making music (where LMMS is overkill) - - # lmms on stable is broken due to 'Could not find the Qt platform plugin - # "xcb" in ""' error: https://github.com/NixOS/nixpkgs/issues/76074 - unstable.lmms # for making music - ]; -} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 00000000..7bd7bb8f --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,101 @@ +{ config, options, lib, ... }: +with lib; +let mkOptionStr = value: mkOption + { type = types.str; + default = value; }; +in { + imports = [ + + + ./desktop + ./dev + ./editors + ./media + ./services + ./shell + ./themes + ]; + + options = { + my = { + ## Personal details + username = mkOptionStr "hlissner"; + email = mkOptionStr "henrik@lissner.net"; + + ## Convenience aliases + home = mkOption { type = options.home-manager.users.type.functor.wrapped; }; + user = mkOption { type = types.submodule; }; + packages = mkOption { type = with types; listOf package; }; + + ## Environment + env = mkOption { + type = with types; attrsOf (either (either str path) (listOf (either str path))); + apply = mapAttrs + (n: v: if isList v + then concatMapStringsSep ":" (x: toString x) v + else (toString v)); + }; + init = mkOption { + type = types.lines; + description = '' + An init script that runs after the environment has been rebuilt or + booted. Anything done here should be idempotent and inexpensive. + ''; + }; + + alias = mkOption { + type = with types; nullOr (attrsOf (nullOr (either str path))); + }; + zsh = { + rc = mkOption { + type = types.lines; + default = ""; + description = '' + Zsh lines to be written to $XDG_CONFIG_HOME/zsh/extra.zshrc and + sourced by $XDG_CONFIG_HOME/zsh/.zshrc + ''; + }; + env = mkOption { + type = types.lines; + default = ""; + description = '' + Zsh lines to be written to $XDG_CONFIG_HOME/zsh/extra.zshenv and + sourced by $XDG_CONFIG_HOME/zsh/.zshenv + ''; + }; + }; + }; + }; + + config = { + ## Convenience aliases + home-manager.users.${config.my.username} = mkAliasDefinitions options.my.home; + users.users.${config.my.username} = mkAliasDefinitions options.my.user; + my.user.packages = config.my.packages; + + ## PATH should always start with its old value + my.env.PATH = [ "$PATH" ]; + environment.extraInit = + let exportLines = mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.my.env; + in '' + ${concatStringsSep "\n" exportLines} + ${config.my.init} + ''; + + # I avoid programs.zsh.*Init variables because they initialize too soon. My + # zsh config is particular about load order. + my.home.xdg.configFile = { + "zsh/extra.zshrc".text = + let aliasLines = mapAttrsToList (n: v: "alias ${n}=\"${v}\"") config.my.alias; + in '' + # This file is autogenerated, do not edit it! + ${concatStringsSep "\n" aliasLines} + ${config.my.zsh.rc} + ''; + "zsh/extra.zshenv".text = '' + # This file is autogenerated, do not edit it! + ${config.my.zsh.env}; + ''; + }; + }; +} diff --git a/modules/desktop/apps/daw.nix b/modules/desktop/apps/daw.nix new file mode 100644 index 00000000..fd45e834 --- /dev/null +++ b/modules/desktop/apps/daw.nix @@ -0,0 +1,28 @@ +# modules/desktop/apps/daw.nix +# +# I make music for my games. LMMS is my DAW; or will be, once I've weened myself +# off of Fruityloops. When I'm in the mood for a quicky I fire up sunvox +# instead. It runs absolutely anywhere, even on my ipad and phone. As if I'd +# ever need to. + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.daw = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.apps.daw.enable { + my.packages = with pkgs; [ + # lmms on stable is broken due to 'Could not find the Qt platform plugin + # "xcb" in ""' error: https://github.com/NixOS/nixpkgs/issues/76074 + unstable.lmms # for making music + + audacity # for recording and remastering audio + # sunvox # for making music (where LMMS is overkill) + ]; + }; +} diff --git a/modules/desktop/apps/default.nix b/modules/desktop/apps/default.nix new file mode 100644 index 00000000..f3fdefd3 --- /dev/null +++ b/modules/desktop/apps/default.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./daw.nix + ./discord.nix + ./graphics.nix + ./recording.nix + ./rofi.nix + ./skype.nix + ./vm.nix + ]; +} diff --git a/modules/desktop/apps/discord.nix b/modules/desktop/apps/discord.nix new file mode 100644 index 00000000..3c28af29 --- /dev/null +++ b/modules/desktop/apps/discord.nix @@ -0,0 +1,17 @@ +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.discord = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.apps.discord.enable { + my.packages = with pkgs; [ + discord + # ripcord + ]; + }; +} diff --git a/modules/desktop/apps/graphics.nix b/modules/desktop/apps/graphics.nix new file mode 100644 index 00000000..d635bdf9 --- /dev/null +++ b/modules/desktop/apps/graphics.nix @@ -0,0 +1,50 @@ +# modules/desktop/apps/graphics.nix +# +# The hardest part about switching to linux? Sacrificing Adobe. It really is +# difficult to replace and its open source alternatives don't *quite* cut it, +# but enough that I can do a fraction of it on Linux. For the rest I have a +# second computer dedicated to design work (and gaming). + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.graphics = + let mkBoolDefault = bool: mkOption { + type = types.bool; + default = bool; + }; + in { + enable = mkBoolDefault false; + tools.enable = mkBoolDefault false; + raster.enable = mkBoolDefault false; + vector.enable = mkBoolDefault false; + sprites.enable = mkBoolDefault false; + }; + + config = let gfx = config.modules.desktop.apps.graphics; in { + my.packages = with pkgs; + (if gfx.enable || gfx.tools.enable then [ + font-manager # so many damned fonts... + imagemagick # for image manipulation from the shell + ] else []) ++ + + # replaces illustrator & indesign + (if gfx.enable || gfx.vector.enable then [ + inkscape + ] else []) ++ + + # Replaces photoshop + (if gfx.enable || gfx.raster.enable then [ + krita + gimp + gimpPlugins.resynthesizer2 # content-aware scaling in gimp + ] else []) ++ + + # Sprite sheets & animation + (if gfx.enable || gfx.sprites.enable then [ aseprite-unfree ] else []); + + my.home.xdg.configFile = mkIf (gfx.enable || gfx.raster.enable) { + "GIMP/2.10" = { source = ; recursive = true; }; + }; + }; +} diff --git a/modules/desktop/apps/recording.nix b/modules/desktop/apps/recording.nix new file mode 100644 index 00000000..114b249d --- /dev/null +++ b/modules/desktop/apps/recording.nix @@ -0,0 +1,28 @@ +# modules/desktop/apps/recording.nix +# +# OBS to capture footage/stream, DaVinci Resolve for editing (on my Windows +# system -- it will run on linux, but it can't be automated on nix, what with +# their devs registration-gating their free download). + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.recording = + let mkBoolDefault = bool: mkOption { + type = types.bool; + default = bool; + }; + in { + enable = mkBoolDefault false; + audio.enable = mkBoolDefault false; + video.enable = mkBoolDefault false; + }; + + config = let rc = config.modules.desktop.apps.recording; in { + my.packages = with pkgs; + # for recording and remastering audio + (if rc.enable || rc.audio.enable then [ audacity ] else []) ++ + # for longer term streaming/recording the screen + (if rc.enable || rc.video.enable then [ obs-studio handbrake ] else []); + }; +} diff --git a/modules/desktop/apps/redshift.nix b/modules/desktop/apps/redshift.nix deleted file mode 100644 index 3c7d6b7a..00000000 --- a/modules/desktop/apps/redshift.nix +++ /dev/null @@ -1,15 +0,0 @@ -# modules/desktop/apps/redshift.nix - -{ config, lib, pkgs, ... }: -{ - services.redshift.enable = true; - - # For redshift - location = (if config.time.timeZone == "America/Toronto" then { - latitude = 43.70011; - longitude = -79.4163; - } else if config.time.timeZone == "Europe/Copenhagen" then { - latitude = 55.88; - longitude = 12.5; - } else {}); -} diff --git a/modules/desktop/apps/rofi.nix b/modules/desktop/apps/rofi.nix index 3a22e200..1a24b7de 100644 --- a/modules/desktop/apps/rofi.nix +++ b/modules/desktop/apps/rofi.nix @@ -1,63 +1,84 @@ -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my = { - # link recursively so other modules can link files in its folder - home.xdg.configFile."rofi" = { - source = ; - recursive = true; + options.modules.desktop.apps.rofi = { + enable = mkOption { + type = types.bool; + default = false; }; + }; - packages = with pkgs; [ - (writeScriptBin "rofi" '' - #!${stdenv.shell} - exec ${rofi}/bin/rofi -terminal xst -m -1 "$@" - '') + config = mkIf config.modules.desktop.apps.rofi.enable { + my = { + # link recursively so other modules can link files in its folder + home.xdg.configFile."rofi" = { + source = ; + recursive = true; + }; - # Fake rofi dmenu entries - (makeDesktopItem { - name = "rofi-bookmarkmenu"; - desktopName = "Open Bookmark in Browser"; - icon = "bookmark-new-symbolic"; - exec = "${}"; - }) - (makeDesktopItem { - name = "rofi-filemenu"; - desktopName = "Open Directory in Terminal"; - icon = "folder"; - exec = "${}"; - }) - (makeDesktopItem { - name = "rofi-filemenu-scratch"; - desktopName = "Open Directory in Scratch Terminal"; - icon = "folder"; - exec = "${} -x"; - }) + packages = with pkgs; [ + (writeScriptBin "rofi" '' + #!${stdenv.shell} + exec ${rofi}/bin/rofi -terminal xst -m -1 "$@" + '') - (makeDesktopItem { - name = "reboot"; - desktopName = "System: Reboot"; - icon = "system-reboot"; - exec = "systemctl reboot"; - }) - (makeDesktopItem { - name = "shutdown"; - desktopName = "System: Shut Down"; - icon = "system-shutdown"; - exec = "systemctl shutdown"; - }) - (makeDesktopItem { - name = "sleep"; - desktopName = "System: Sleep"; - icon = "system-suspend"; - exec = "zzz -f"; - }) - (makeDesktopItem { - name = "lock-display"; - desktopName = "Lock screen"; - icon = "system-lock-screen"; - exec = "zzz"; - }) - ]; + # For rapidly test changes to rofi's stylesheets + # (writeScriptBin "rofi-test" '' + # #!${stdenv.shell} + # themefile=$1 + # themename=${modules.theme.name} + # shift + # exec rofi \ + # -theme ~/.dotfiles/modules/themes/$themename/rofi/$themefile \ + # "$@" + # '') + + # Fake rofi dmenu entries + (makeDesktopItem { + name = "rofi-bookmarkmenu"; + desktopName = "Open Bookmark in Browser"; + icon = "bookmark-new-symbolic"; + exec = "${}"; + }) + (makeDesktopItem { + name = "rofi-filemenu"; + desktopName = "Open Directory in Terminal"; + icon = "folder"; + exec = "${}"; + }) + (makeDesktopItem { + name = "rofi-filemenu-scratch"; + desktopName = "Open Directory in Scratch Terminal"; + icon = "folder"; + exec = "${} -x"; + }) + + (makeDesktopItem { + name = "reboot"; + desktopName = "System: Reboot"; + icon = "system-reboot"; + exec = "systemctl reboot"; + }) + (makeDesktopItem { + name = "shutdown"; + desktopName = "System: Shut Down"; + icon = "system-shutdown"; + exec = "systemctl shutdown"; + }) + (makeDesktopItem { + name = "sleep"; + desktopName = "System: Sleep"; + icon = "system-suspend"; + exec = "${} -f"; + }) + (makeDesktopItem { + name = "lock-display"; + desktopName = "Lock screen"; + icon = "system-lock-screen"; + exec = "${}"; + }) + ]; + }; }; } diff --git a/modules/desktop/apps/skype.nix b/modules/desktop/apps/skype.nix new file mode 100644 index 00000000..89f99b73 --- /dev/null +++ b/modules/desktop/apps/skype.nix @@ -0,0 +1,17 @@ +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.skype = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.apps.skype.enable { + my.packages = with pkgs; [ + skypeforlinux + skype_call_recorder + ]; + }; +} diff --git a/modules/desktop/apps/st.nix b/modules/desktop/apps/st.nix deleted file mode 100644 index c179a825..00000000 --- a/modules/desktop/apps/st.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - # xst-256color isn't supported over ssh, so revert to a known one - my.zsh.rc = ''[ "$TERM" = xst-256color ] && export TERM=xterm-256color''; - - my.packages = with pkgs; [ - xst # st + nice-to-have extensions - (makeDesktopItem { - name = "xst"; - desktopName = "Suckless Terminal"; - genericName = "Default terminal"; - icon = "utilities-terminal"; - exec = "${xst}/bin/xst"; - categories = "Development;System;Utility"; - }) - ]; -} diff --git a/modules/desktop/apps/thunar.nix b/modules/desktop/apps/thunar.nix deleted file mode 100644 index 1ac3a42e..00000000 --- a/modules/desktop/apps/thunar.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - my.packages = with pkgs; [ - xfce.thunar - xfce.tumbler # for thumbnails - ]; -} diff --git a/modules/desktop/apps/urxvt.nix b/modules/desktop/apps/urxvt.nix deleted file mode 100644 index 07cd46bb..00000000 --- a/modules/desktop/apps/urxvt.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - my.packages = with pkgs; [ - rxvt_unicode - ]; -} diff --git a/modules/desktop/apps/vm.nix b/modules/desktop/apps/vm.nix new file mode 100644 index 00000000..ef4a821c --- /dev/null +++ b/modules/desktop/apps/vm.nix @@ -0,0 +1,25 @@ +# modules/desktop/apps/vm.nix +# +# For testing software or building it on other OSes. If I find out how to get +# macOS on qemu/libvirt I'd be happy to leave virtualbox behind. + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.apps.vm = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + # TODO Figure out macOS guest on libvirt/qemu instead + config = mkIf config.modules.desktop.apps.vm.enable { + virtualisation.virtualbox.host = { + enable = true; + enableExtensionPack = true; # urg, takes so long to build + }; + + my.user.extraGroups = [ "vboxusers" ]; + }; +} diff --git a/modules/desktop/browsers/default.nix b/modules/desktop/browsers/default.nix new file mode 100644 index 00000000..0b6e8871 --- /dev/null +++ b/modules/desktop/browsers/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: +with lib; +{ + imports = [ + ./firefox.nix + ./qutebrowser.nix + ./vivaldi.nix + ]; + + options.modules.desktop.browsers = { + default = mkOption { + type = with types; nullOr str; + default = null; + }; + }; + + config = mkIf (config.modules.desktop.browsers.default != null) { + my.env.BROWSER = config.modules.desktop.browsers.default; + }; +} diff --git a/modules/desktop/browsers/firefox.nix b/modules/desktop/browsers/firefox.nix new file mode 100644 index 00000000..54a850a9 --- /dev/null +++ b/modules/desktop/browsers/firefox.nix @@ -0,0 +1,30 @@ +# modules/browser/firefox.nix --- https://www.mozilla.org/en-US/firefox +# +# Oh firefox, gateway to the interwebs, devourer of ram. Give onto me your +# infinite knowledge and shelter me from ads. + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.browsers.firefox = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.browsers.firefox.enable { + my.packages = with pkgs; [ + firefox-bin + (makeDesktopItem { + name = "firefox-private"; + desktopName = "Firefox (Private)"; + genericName = "Open a private Firefox window"; + icon = "firefox"; + exec = "${firefox-bin}/bin/firefox --private-window"; + categories = "Network"; + }) + ]; + my.env.XDG_DESKTOP_DIR = "$HOME"; # (try to) prevent ~/Desktop + }; +} diff --git a/modules/desktop/browsers/qutebrowser.nix b/modules/desktop/browsers/qutebrowser.nix new file mode 100644 index 00000000..125d2386 --- /dev/null +++ b/modules/desktop/browsers/qutebrowser.nix @@ -0,0 +1,33 @@ +# modules/browser/qutebrowser.nix --- https://github.com/qutebrowser/qutebrowser +# +# Qutebrowser is cute because it's not enough of a browser to be handsome. +# Still, we can all tell he'll grow up to be one hell of a lady-killer. + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.browsers.qutebrowser = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.browsers.qutebrowser.enable { + my.packages = with pkgs; [ + qutebrowser + (makeDesktopItem { + name = "qutebrowser-private"; + desktopName = "Qutebrowser (Private)"; + genericName = "Open a private Qutebrowser window"; + icon = "qutebrowser"; + exec = "${qutebrowser}/bin/qutebrowser ':open -p'"; + categories = "Network"; + }) + ]; + my.home.xdg.configFile."qutebrowser" = { + source = ; + recursive = true; + }; + }; +} diff --git a/modules/desktop/browsers/vivaldi.nix b/modules/desktop/browsers/vivaldi.nix new file mode 100644 index 00000000..82fdddeb --- /dev/null +++ b/modules/desktop/browsers/vivaldi.nix @@ -0,0 +1,27 @@ +# modules/browser/vivaldi.nix --- ... + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.desktop.browsers.vivaldi = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.browsers.vivaldi.enable { + my.packages = with pkgs; [ + vivaldi + vivaldi-widevine + (makeDesktopItem { + name = "vivaldi-private"; + desktopName = "Vivaldi (Incognito)"; + genericName = "Open an incognito Vivaldi window"; + icon = "vivaldi"; + exec = "${vivaldi}/bin/vivaldi --incognito"; + categories = "Network"; + }) + ]; + }; +} diff --git a/modules/desktop/bspwm.nix b/modules/desktop/bspwm.nix index dd38943e..2240920c 100644 --- a/modules/desktop/bspwm.nix +++ b/modules/desktop/bspwm.nix @@ -1,34 +1,43 @@ -{ config, lib, pkgs, ... }: - +{ config, options, lib, pkgs, ... }: +with lib; { imports = [ - ./. # common settings + ./common.nix ]; - environment.systemPackages = with pkgs; [ - lightdm - dunst - libnotify - (polybar.override { - pulseSupport = true; - nlSupport = true; - }) - ]; - - services = { - compton.enable = true; - xserver = { - windowManager.default = "bspwm"; - windowManager.bspwm.enable = true; - displayManager.lightdm.enable = true; - displayManager.lightdm.greeters.mini.enable = true; - }; + options.modules.desktop.bspwm = { + enable = mkOption { type = types.bool; default = false; }; }; - my.home.xdg.configFile = { - "sxhkd".source = ; + config = mkIf config.modules.desktop.bspwm.enable { + environment.systemPackages = with pkgs; [ + lightdm + dunst + libnotify + (polybar.override { + pulseSupport = true; + nlSupport = true; + }) + ]; + + services = { + compton.enable = true; + redshift.enable = true; + xserver = { + enable = true; + windowManager.default = "bspwm"; + windowManager.bspwm = { + enable = true; + configFile = ; + sxhkd.configFile = ; + }; + displayManager.lightdm.enable = true; + displayManager.lightdm.greeters.mini.enable = true; + }; + }; + # link recursively so other modules can link files in their folders - "bspwm" = { + my.home.xdg.configFile."bspwm" = { source = ; recursive = true; }; diff --git a/modules/desktop/common.nix b/modules/desktop/common.nix new file mode 100644 index 00000000..62ef0c6b --- /dev/null +++ b/modules/desktop/common.nix @@ -0,0 +1,103 @@ +{ config, lib, pkgs, ... }: +{ + my.packages = with pkgs; [ + # I often need a thumbnail browser to show off, peruse or organize photos, + # design work, or digital art. + xfce.thunar + xfce.tumbler # for thumbnails + + calibre # managing my ebooks + evince # pdf reader + feh # image viewer + mpv # video player + xclip + xdotool + libqalculate # calculator cli w/ currency conversion + (makeDesktopItem { + name = "scratch-calc"; + desktopName = "Calculator"; + icon = "calc"; + exec = "scratch '${tmux}/bin/tmux new-session -s calc -n calc qalc'"; + categories = "Development"; + }) + ]; + + ## Sound + sound.enable = true; + hardware.pulseaudio.enable = true; + + ## Fonts + fonts = { + enableFontDir = true; + enableGhostscriptFonts = true; + fonts = with pkgs; [ + ubuntu_font_family + dejavu_fonts + fira-code + fira-code-symbols + symbola + noto-fonts + noto-fonts-cjk + font-awesome-ttf + siji + ]; + fontconfig.defaultFonts = { + sansSerif = ["Ubuntu"]; + monospace = ["Fira Code"]; + }; + }; + + ## Apps/Services + # For redshift + location = (if config.time.timeZone == "America/Toronto" then { + latitude = 43.70011; + longitude = -79.4163; + } else if config.time.timeZone == "Europe/Copenhagen" then { + latitude = 55.88; + longitude = 12.5; + } else {}); + + services.xserver = { + displayManager.lightdm.greeters.mini.user = config.my.username; + }; + + services.compton = { + backend = "glx"; + vSync = true; + opacityRules = [ + # "100:class_g = 'Firefox'" + # "100:class_g = 'Vivaldi-stable'" + "100:class_g = 'VirtualBox Machine'" + # Art/image programs where we need fidelity + "100:class_g = 'Gimp'" + "100:class_g = 'Inkscape'" + "100:class_g = 'aseprite'" + "100:class_g = 'krita'" + "100:class_g = 'feh'" + "100:class_g = 'mpv'" + "100:class_g = 'Rofi'" + "100:class_g = 'Peek'" + "99:_NET_WM_STATE@:32a = '_NET_WM_STATE_FULLSCREEN'" + ]; + shadowExclude = [ + # Put shadows on notifications, the scratch popup and rofi only + "! name~='(rofi|scratch|Dunst)$'" + ]; + settings.blur-background-exclude = [ + "window_type = 'dock'" + "window_type = 'desktop'" + "class_g = 'Rofi'" + "_GTK_FRAME_EXTENTS@:c" + ]; + }; + + # Try really hard to get QT to respect my GTK theme. + my.env.GTK_DATA_PREFIX = [ "${config.system.path}" ]; + my.env.QT_QPA_PLATFORMTHEME = "gtk2"; + qt5 = { style = "gtk2"; platformTheme = "gtk2"; }; + services.xserver.displayManager.sessionCommands = '' + export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc" + source "$XDG_CONFIG_HOME"/xsession/*.sh + xrdb -merge "$XDG_CONFIG_HOME"/xtheme/* + ''; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index f30265b4..f6b2cbbb 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -2,96 +2,12 @@ { imports = [ - ## Desktop apps - ./apps/redshift.nix - ./apps/rofi.nix # My launcher + ./bspwm.nix + # ./stumpwm.nix - # I often need a thumbnail browser to show off, peruse or organize photos, - # design work, or digital art. - # ./apps/nautilus.nix - ./apps/thunar.nix - - ## Terminal - # ./apps/alacritty.nix - ./apps/st.nix - # ./apps/urxvt.nix + ./apps + ./term + ./browsers + ./gaming ]; - - services.xserver = { - enable = true; - desktopManager.xterm.enable = lib.mkDefault false; - displayManager.lightdm.greeters.mini.user = config.my.username; - }; - - my.packages = with pkgs; [ - calibre # managing my ebooks - evince # pdf reader - feh # image viewer - mpv # video player - xclip - xdotool - libqalculate # calculator cli w/ currency conversion - (makeDesktopItem { - name = "scratch-calc"; - desktopName = "Calculator"; - icon = "calc"; - exec = "scratch '${tmux}/bin/tmux new-session -s calc -n calc qalc'"; - categories = "Development"; - }) - ]; - - ## Sound - sound.enable = true; - hardware.pulseaudio.enable = true; - - ## Fonts - fonts = { - enableFontDir = true; - enableGhostscriptFonts = true; - fonts = with pkgs; [ - ubuntu_font_family - dejavu_fonts - fira-code - fira-code-symbols - symbola - noto-fonts - noto-fonts-cjk - font-awesome-ttf - siji - ]; - fontconfig.defaultFonts = { - sansSerif = ["Ubuntu"]; - monospace = ["Fira Code"]; - }; - }; - - services.compton = { - backend = "glx"; - vSync = true; - opacityRules = [ - # "100:class_g = 'Firefox'" - # "100:class_g = 'Vivaldi-stable'" - "100:class_g = 'VirtualBox Machine'" - # Art/image programs where we need fidelity - "100:class_g = 'Gimp'" - "100:class_g = 'Inkscape'" - "100:class_g = 'aseprite'" - "100:class_g = 'krita'" - "100:class_g = 'feh'" - "100:class_g = 'mpv'" - "100:class_g = 'Rofi'" - "100:class_g = 'Peek'" - "99:_NET_WM_STATE@:32a = '_NET_WM_STATE_FULLSCREEN'" - ]; - shadowExclude = [ - # Put shadows on notifications, the scratch popup and rofi only - "! name~='(scratch|Dunst)$'" - ]; - settings.blur-background-exclude = [ - "window_type = 'dock'" - "window_type = 'desktop'" - "class_g = 'Rofi'" - "_GTK_FRAME_EXTENTS@:c" - ]; - }; } diff --git a/modules/desktop/gaming/default.nix b/modules/desktop/gaming/default.nix new file mode 100644 index 00000000..ce1ec763 --- /dev/null +++ b/modules/desktop/gaming/default.nix @@ -0,0 +1,9 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./emulators.nix + ./factorio.nix + ./steam.nix + ]; +} diff --git a/modules/desktop/gaming/emulators.nix b/modules/desktop/gaming/emulators.nix new file mode 100644 index 00000000..03e6d64d --- /dev/null +++ b/modules/desktop/gaming/emulators.nix @@ -0,0 +1,27 @@ +{ config, options, lib, pkgs, ... }: + +with lib; +{ + options.modules.desktop.gaming.emulators = + let mkBoolDefault = bool: mkOption { + type = types.bool; + default = bool; + }; + in { + psx.enable = mkBoolDefault false; # Playstation + ds.enable = mkBoolDefault false; # Nintendo DS + gb.enable = mkBoolDefault false; # GameBoy + GameBoy Color + gba.enable = mkBoolDefault false; # GameBoy Advance + snes.enable = mkBoolDefault false; # Super Nintendo + }; + + config = let emu = config.modules.desktop.gaming.emulators; in { + my.packages = with pkgs; + (if emu.psx.enable then [ epsxe ] else []) ++ + (if emu.ds.enable then [ desume ] else []) ++ + (if (emu.gba.enable || + emu.gb.enable || + emu.snes.enable) + then [ higan ] else []); + }; +} diff --git a/modules/desktop/gaming/factorio.nix b/modules/desktop/gaming/factorio.nix new file mode 100644 index 00000000..95e9c49d --- /dev/null +++ b/modules/desktop/gaming/factorio.nix @@ -0,0 +1,17 @@ +{ config, options, lib, pkgs, ... }: + +with lib; +{ + options.modules.desktop.gaming.factorio = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.gaming.factorio.enable { + my.packages = with pkgs; [ + unstable.factorio-experimental + ]; + }; +} diff --git a/modules/desktop/gaming/steam.nix b/modules/desktop/gaming/steam.nix new file mode 100644 index 00000000..43a7d705 --- /dev/null +++ b/modules/desktop/gaming/steam.nix @@ -0,0 +1,30 @@ +{ config, options, lib, pkgs, ... }: + +with lib; +{ + options.modules.desktop.gaming.steam = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.gaming.steam.enable { + my.packages = with pkgs; [ + # Get steam to keep its garbage out of $HOME + (writeScriptBin "steam" '' + #!${stdenv.shell} + HOME="$XDG_DATA_HOME/steamlib" exec ${steam}/bin/steam "$@" + '') + # for GOG and humblebundle games + (writeScriptBin "steam-run" '' + #!${stdenv.shell} + HOME="$XDG_DATA_HOME/steamlib" exec ${steam-run-native}/bin/steam-run "$@" + '') + xboxdrv # driver for 360 controller + ]; + + hardware.opengl.driSupport32Bit = true; + hardware.pulseaudio.support32Bit = true; + }; +} diff --git a/modules/desktop/stumpwm.nix b/modules/desktop/stumpwm.nix index 1f6f47af..c2cfa07e 100644 --- a/modules/desktop/stumpwm.nix +++ b/modules/desktop/stumpwm.nix @@ -1,10 +1,8 @@ { config, lib, pkgs, ... }: -# let unstable = import {}; -# in { imports = [ - ./. # common settings + ./common.nix ]; environment.systemPackages = with pkgs; [ @@ -15,7 +13,9 @@ # unstable.services.picom.enable = true; services = { + redshift.enable = true; xserver = { + enable = true; windowManager.default = "stumpwm"; windowManager.stumpwm.enable = true; displayManager.lightdm.enable = true; diff --git a/modules/desktop/term/default.nix b/modules/desktop/term/default.nix new file mode 100644 index 00000000..18ef58b5 --- /dev/null +++ b/modules/desktop/term/default.nix @@ -0,0 +1,23 @@ +{ config, options, lib, pkgs, ... }: +with lib; +{ + imports = [ + # ./alacritty.nix + ./st.nix + # ./urxvt.nix + ]; + + options.modules.desktop.term = { + default = mkOption { + type = types.str; + default = "xterm"; + }; + }; + + config = { + services.xserver.desktopManager.xterm.enable = + config.modules.desktop.term.default == "xterm"; + + my.env.TERMINAL = config.modules.editors.default; + }; +} diff --git a/modules/desktop/term/st.nix b/modules/desktop/term/st.nix new file mode 100644 index 00000000..2067a16b --- /dev/null +++ b/modules/desktop/term/st.nix @@ -0,0 +1,28 @@ +{ config, lib, pkgs, ... }: + +with lib; +{ + options.modules.desktop.term.st = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.desktop.term.st.enable { + # xst-256color isn't supported over ssh, so revert to a known one + my.zsh.rc = ''[ "$TERM" = xst-256color ] && export TERM=xterm-256color''; + + my.packages = with pkgs; [ + xst # st + nice-to-have extensions + (makeDesktopItem { + name = "xst"; + desktopName = "Suckless Terminal"; + genericName = "Default terminal"; + icon = "utilities-terminal"; + exec = "${xst}/bin/xst"; + categories = "Development;System;Utility"; + }) + ]; + }; +} diff --git a/modules/dev/cc.nix b/modules/dev/cc.nix index af777fe0..577506d2 100644 --- a/modules/dev/cc.nix +++ b/modules/dev/cc.nix @@ -4,16 +4,24 @@ # Liking C/C++ seems to be an unpopular opinion. It's my guilty secret, so don't # tell anyone pls. -{ pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - imports = [ ./. ]; + options.modules.dev.cc = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - my.packages = with pkgs; [ - clang - gcc - bear - gdb - cmake - llvmPackages.libcxx - ]; + config = mkIf config.modules.dev.cc.enable { + my.packages = with pkgs; [ + clang + gcc + bear + gdb + cmake + llvmPackages.libcxx + ]; + }; } diff --git a/modules/dev/clojure.nix b/modules/dev/clojure.nix index 236b152f..b91dd38d 100644 --- a/modules/dev/clojure.nix +++ b/modules/dev/clojure.nix @@ -2,11 +2,21 @@ # # I don't use clojure. Perhaps one day... -{ pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my.packages = with pkgs; [ - clojure - joker - leiningen - ]; + options.modules.dev.clojure = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.dev.clojure.enable { + my.packages = with pkgs; [ + clojure + joker + leiningen + ]; + }; } diff --git a/modules/dev/common-lisp.nix b/modules/dev/common-lisp.nix index 3e3b7d2d..c1dfb130 100644 --- a/modules/dev/common-lisp.nix +++ b/modules/dev/common-lisp.nix @@ -2,10 +2,20 @@ # # Mostly for my stumpwm config, and the occasional dip into lisp gamedev. -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my.packages = with pkgs; [ - sbcl - lispPackages.quicklisp - ]; + options.modules.dev.common-lisp = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.dev.common-lisp.enable { + my.packages = with pkgs; [ + sbcl + lispPackages.quicklisp + ]; + }; } diff --git a/modules/dev/default.nix b/modules/dev/default.nix index 77b66770..9c547e0f 100644 --- a/modules/dev/default.nix +++ b/modules/dev/default.nix @@ -2,7 +2,22 @@ { pkgs, ... }: { - my.packages = with pkgs; [ - gnumake + imports = [ + ./cc.nix + ./clojure.nix + ./common-lisp.nix + # ./godot.nix + # ./haskell.nix + # ./latex.nix + # ./love2d.nix + # ./node.nix + # ./python.nix + ./rust.nix + ./scala.nix + # ./unity3d.nix + # ./zsh.nix ]; + + options = {}; + config = {}; } diff --git a/modules/dev/godot.nix b/modules/dev/godot.nix index a0f2a508..d4df97a2 100644 --- a/modules/dev/godot.nix +++ b/modules/dev/godot.nix @@ -3,9 +3,19 @@ # Gamedev is my hobby. C++ or Rust are my main drivers (and occasionally Lua), # but to prototype (for 3D, mainly) I'll occasionally reach for godot. -{ pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my.packages = with pkgs; [ - godot - ]; + options.modules.dev.godot = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.dev.godot.enable { + my.packages = with pkgs; [ + godot + ]; + }; } diff --git a/modules/dev/rust.nix b/modules/dev/rust.nix index 1c852137..d1e91203 100644 --- a/modules/dev/rust.nix +++ b/modules/dev/rust.nix @@ -7,19 +7,29 @@ # is no formal proof of your claims for safety, but who said you have to solve # all the world's problems to be wonderful? -{ lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my = { - packages = with pkgs; [ - rustup - ]; + options.modules.dev.rust = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - env.RUSTUP_HOME = "$XDG_DATA_HOME/rustup"; - env.CARGO_HOME = "$XDG_DATA_HOME/cargo"; - env.PATH = [ "$CARGO_HOME/bin" ]; + config = mkIf config.modules.dev.rust.enable { + my = { + packages = with pkgs; [ + rustup + ]; - alias.rs = "rustc"; - alias.rsp = "rustup"; - alias.ca = "cargo"; + env.RUSTUP_HOME = "$XDG_DATA_HOME/rustup"; + env.CARGO_HOME = "$XDG_DATA_HOME/cargo"; + env.PATH = [ "$CARGO_HOME/bin" ]; + + alias.rs = "rustc"; + alias.rsp = "rustup"; + alias.ca = "cargo"; + }; }; } diff --git a/modules/dev/scala.nix b/modules/dev/scala.nix new file mode 100644 index 00000000..b893e487 --- /dev/null +++ b/modules/dev/scala.nix @@ -0,0 +1,19 @@ + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.dev.scala = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.dev.scala.enable { + my.packages = with pkgs; [ + scala + jdk + sbt + ]; + }; +} diff --git a/modules/editors/default.nix b/modules/editors/default.nix new file mode 100644 index 00000000..7f99e0fd --- /dev/null +++ b/modules/editors/default.nix @@ -0,0 +1,19 @@ +{ config, options, lib, pkgs, ... }: +with lib; +{ + imports = [ + ./emacs.nix + ./vim.nix + ]; + + options.modules.editors = { + default = mkOption { + type = types.str; + default = "vi"; + }; + }; + + config = mkIf (config.modules.editors.default != null) { + my.env.EDITOR = config.modules.editors.default; + }; +} diff --git a/modules/editors/emacs.nix b/modules/editors/emacs.nix index 7b9b7a62..be672069 100644 --- a/modules/editors/emacs.nix +++ b/modules/editors/emacs.nix @@ -2,50 +2,60 @@ # https://github.com/hlissner/doom-emacs. This module sets it up to meet my # particular Doomy needs. -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my = { - packages = with pkgs; [ - ## Doom dependencies - my.emacs27 - git - (ripgrep.override {withPCRE2 = true;}) - - ## Optional dependencies - editorconfig-core-c # per-project style config - fd # faster projectile indexing - gnutls # for TLS connectivity - imagemagick # for image-dired - (lib.mkIf (config.programs.gnupg.agent.enable) - pinentry_emacs) # in-emacs gnupg prompts - zstd # for undo-tree compression - - ## Module dependencies - # :checkers spell - aspell - aspellDicts.en - aspellDicts.en-computers - aspellDicts.en-science - # :checkers grammar - languagetool - # :tools lookup - sqlite - # :lang cc - ccls - # :lang javascript - nodePackages.javascript-typescript-langserver - # :lang latex & :lang org (latex previews) - texlive.combined.scheme-medium - # :lang rust - rustfmt - rls - ]; - - env.PATH = [ "$HOME/.emacs.d/bin" ]; - zsh.rc = lib.readFile ; + options.modules.editors.emacs = { + enable = mkOption { + type = types.bool; + default = false; + }; }; - fonts.fonts = [ - pkgs.emacs-all-the-icons-fonts - ]; + config = mkIf config.modules.editors.emacs.enable { + my = { + packages = with pkgs; [ + ## Doom dependencies + my.emacs27 + git + (ripgrep.override {withPCRE2 = true;}) + + ## Optional dependencies + editorconfig-core-c # per-project style config + fd # faster projectile indexing + gnutls # for TLS connectivity + imagemagick # for image-dired + (lib.mkIf (config.programs.gnupg.agent.enable) + pinentry_emacs) # in-emacs gnupg prompts + zstd # for undo-tree compression + + ## Module dependencies + # :checkers spell + aspell + aspellDicts.en + aspellDicts.en-computers + aspellDicts.en-science + # :checkers grammar + languagetool + # :tools lookup + sqlite + # :lang cc + ccls + # :lang javascript + nodePackages.javascript-typescript-langserver + # :lang latex & :lang org (latex previews) + texlive.combined.scheme-medium + # :lang rust + rustfmt + rls + ]; + + env.PATH = [ "$HOME/.emacs.d/bin" ]; + zsh.rc = lib.readFile ; + }; + + fonts.fonts = [ + pkgs.emacs-all-the-icons-fonts + ]; + }; } diff --git a/modules/editors/vim.nix b/modules/editors/vim.nix index 9aea0032..536f26e5 100644 --- a/modules/editors/vim.nix +++ b/modules/editors/vim.nix @@ -1,17 +1,26 @@ # When I'm stuck in the terminal or don't have access to Emacs, (neo)vim is my # go-to. I am a vimmer at heart, after all. -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - my = { - packages = with pkgs; [ - editorconfig-core-c - neovim - ]; + options.modules.editors.vim = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - env.EDITOR = "nvim"; - env.VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC"; + config = mkIf config.modules.editors.vim.enable { + my = { + packages = with pkgs; [ + editorconfig-core-c + neovim + ]; - alias.v = "nvim"; + env.VIMINIT = "let \\$MYVIMRC='\\$XDG_CONFIG_HOME/nvim/init.vim' | source \\$MYVIMRC"; + alias.vim = "nvim"; + alias.v = "nvim"; + }; }; } diff --git a/modules/gaming/emulators.nix b/modules/gaming/emulators.nix deleted file mode 100644 index 6b0832ee..00000000 --- a/modules/gaming/emulators.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - environment.systemPackages = with pkgs; [ - epsxe # PSX - desmume # DS - ]; -} diff --git a/modules/gaming/steam.nix b/modules/gaming/steam.nix deleted file mode 100644 index a48d347c..00000000 --- a/modules/gaming/steam.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - my.packages = with pkgs; [ - # Get steam to keep its garbage out of $HOME - (writeScriptBin "steam" '' - #!${stdenv.shell} - HOME="$XDG_DATA_HOME/steamlib" exec ${steam}/bin/steam "$@" - '') - # for GOG and humblebundle games - (writeScriptBin "steam-run" '' - #!${stdenv.shell} - HOME="$XDG_DATA_HOME/steamlib" exec ${steam-run-native}/bin/steam-run "$@" - '') - xboxdrv # driver for 360 controller - ]; - - hardware.opengl.driSupport32Bit = true; - hardware.pulseaudio.support32Bit = true; -} diff --git a/modules/graphics.nix b/modules/graphics.nix deleted file mode 100644 index 8a1b398a..00000000 --- a/modules/graphics.nix +++ /dev/null @@ -1,26 +0,0 @@ -# modules/graphics.nix -# -# The hardest part about switching to linux? Sacrificing Adobe. It really is -# difficult to replace and its open source alternatives don't *quite* cut it, -# but enough that I can do a fraction of it on Linux. For the rest I have a -# second computer dedicated to design work (and gaming). - -{ config, lib, pkgs, ... }: -{ - my = { - packages = with pkgs; [ - font-manager # so many damned fonts... - - imagemagick # for image manipulation from the shell - aseprite-unfree # pixel art - inkscape # illustrator & indesign - krita # replaces photoshop - gimp # replaces photoshop - gimpPlugins.resynthesizer2 # content-aware scaling in gimp - ]; - - home.xdg.configFile = { - "GIMP/2.10" = { source = ; recursive = true; }; - }; - }; -} diff --git a/modules/media/default.nix b/modules/media/default.nix new file mode 100644 index 00000000..d73b739c --- /dev/null +++ b/modules/media/default.nix @@ -0,0 +1,9 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./mpv.nix + # ./ncmpcpp.nix + ./spotify.nix + ]; +} diff --git a/modules/media/mpv.nix b/modules/media/mpv.nix new file mode 100644 index 00000000..25255b8b --- /dev/null +++ b/modules/media/mpv.nix @@ -0,0 +1,19 @@ +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.media.mpv = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.media.mpv.enable { + my.packages = with pkgs; [ + mpv-with-scripts + mpvc # CLI controller for mpv + (mkIf config.services.xserver.enable + celluloid) # nice GTK GUI for mpv + ]; + }; +} diff --git a/modules/media/ncmpcpp.nix b/modules/media/ncmpcpp.nix new file mode 100644 index 00000000..e69de29b diff --git a/modules/media/spotify.nix b/modules/media/spotify.nix new file mode 100644 index 00000000..73afcd1e --- /dev/null +++ b/modules/media/spotify.nix @@ -0,0 +1,67 @@ +# I use spotify for my music needs. Gone are the days where I'd manage 200gb+ of +# local music; most of which I haven't heard or don't even like. + +{ config, options, lib, pkgs, ... }: +with lib; +{ + options.modules.media.spotify = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.media.spotify.enable { + # services.spotifyd doesn't work so we'll have to roll our own spotifyd + + # spotify-tui solution. The dbus interface doesn't work, though, so we have to + # wait for spotify-tui to implement CLI command for controlling spotify + # playback. See https://github.com/Rigellute/spotify-tui/issues/147 or for + # spotifyd to get fixed. + my.packages = with pkgs; [ + # unstable.spotifyd + # (writeScriptBin "spt" '' + # #!${stdenv.shell} + # if ! systemctl --user is-active spotifyd >/dev/null; then + # systemctl --user start spotifyd + # fi + # echo $TMUX >$XDG_DATA_HOME/spt.tmux + # exec ${unstable.spotify-tui}/bin/spt + # '') + + # spotify-tui is fine for selecting and playing music, but incomplete. We + # occasionally still need the official client for more sophisticated search + # and the "made for you" playlists. + spotify + + # Since dbus doesn't work with spotifyd/spotify-tui, and I always use tmux + # for my terminal, may as well exploit tmux to control spotify. + # (writeScriptBin "spt-send" '' + # #!${stdenv.shell} + # dbus_cmd='dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player' + # tmux_cmd="tmux send-keys -t $(cat $XDG_DATA_HOME/spt.tmux | cut -d, -f3)" + # case "$1" in + # toggle) $dbus_cmd.PlayPause 2>/dev/null || $tmux_cmd " " ;; + # next) $dbus_cmd.Next 2>/dev/null || $tmux_cmd n ;; + # prev) $dbus_cmd.Previous 2>/dev/null || $tmux_cmd p ;; + # esac + # '') + ]; + + # systemd.user.services.spotifyd.serviceConfig = + # let spotifydConf = pkgs.writeText "spotifyd.conf" '' + # [global] + # username = g2qwjcs6334oacg1zg9wrihnn + # password_cmd = ${pkgs.pass}/bin/pass www/spotify.com | head -n1 + # backend = pulseaudio + # ''; + # in { + # ExecStart = '' + # ${pkgs.unstable.spotifyd}/bin/spotifyd --no-daemon \ + # --cache-path /tmp/spotifyd \ + # --config-path ${spotifydConf} + # ''; + # Restart = "always"; + # RestartSec = 6; + # }; + }; +} diff --git a/modules/music.nix b/modules/music.nix deleted file mode 100644 index 6ceef19d..00000000 --- a/modules/music.nix +++ /dev/null @@ -1,39 +0,0 @@ -# I use spotify for my music needs. Gone are the days where I'd manage 200gb+ of -# local music; most of which I haven't heard or don't even like. - -{ config, lib, pkgs, ... }: -{ - # services.spotifyd doesn't work so we'll have to roll our own spotifyd + - # spotify-tui solution. The dbus interface doesn't work, though, so we have to - # wait for spotify-tui to implement CLI command for controlling spotify - # playback. See https://github.com/Rigellute/spotify-tui/issues/147 or for - # spotifyd to get fixed. - my.packages = with pkgs; [ - unstable.spotifyd - (writeScriptBin "spt" '' - #!${stdenv.shell} - if ! systemctl --user is-active spotifyd >/dev/null; then - systemctl --user start spotifyd - fi - ${unstable.spotify-tui}/bin/spt - '') - - # spotify-tui is fine for selecting and playing music, but incomplete. We - # occasionally still need the official client for more sophisticated search - # and the "made for you" playlists. - spotify - ]; - - systemd.user.services.spotifyd.serviceConfig = - let spotifydConf = pkgs.writeText "spotifyd.conf" '' - [global] - username = g2qwjcs6334oacg1zg9wrihnn - password_cmd = ${pkgs.pass}/bin/pass www/spotify.com | head -n1 - backend = pulseaudio - ''; - in { - ExecStart = "${pkgs.unstable.spotifyd}/bin/spotifyd --no-daemon --cache-path /tmp/spotifyd --config-path ${spotifydConf}"; - Restart = "always"; - RestartSec = 6; - }; -} diff --git a/modules/recording.nix b/modules/recording.nix deleted file mode 100644 index 500f2e66..00000000 --- a/modules/recording.nix +++ /dev/null @@ -1,14 +0,0 @@ -# modules/recording.nix -# -# OBS to capture footage/stream, DaVinci Resolve for editing (on my Windows -# system -- it will run on linux, but it can't be automated on nix, what with -# their devs registration-gating their free download). - -{ config, lib, pkgs, ... }: -{ - my.packages = with pkgs; [ - audacity # for recording and remastering audio - obs-studio # for streaming to twitch/recording for youtube - handbrake # for encoding footage - ]; -} diff --git a/modules/services/calibre-server.nix b/modules/services/calibre-server.nix deleted file mode 100644 index 812ce5e0..00000000 --- a/modules/services/calibre-server.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - services.calibre-server.enable = true; - networking.firewall.allowedTCPPorts = [ 8080 ]; -} diff --git a/modules/services/calibre.nix b/modules/services/calibre.nix new file mode 100644 index 00000000..9db47028 --- /dev/null +++ b/modules/services/calibre.nix @@ -0,0 +1,15 @@ +{ config, options, pkgs, lib, ... }: +with lib; +{ + options.modules.services.calibre = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.services.calibre.enable { + services.calibre-server.enable = true; + networking.firewall.allowedTCPPorts = [ 8080 ]; + }; +} diff --git a/modules/services/default.nix b/modules/services/default.nix new file mode 100644 index 00000000..6be1194a --- /dev/null +++ b/modules/services/default.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + # ./calibre-server.nix + # ./gitea.nix + # ./jellyfin.nix + # ./keybase.nix + # ./mpd.nix + # ./nginx.nix + # ./plex.nix + # ./ssh.nix + ./syncthing.nix + # ./transmission.nix + ]; +} diff --git a/modules/services/gitea.nix b/modules/services/gitea.nix index ebd1ad68..d952f22c 100644 --- a/modules/services/gitea.nix +++ b/modules/services/gitea.nix @@ -1,26 +1,35 @@ -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - # I prefer git@... ssh addresses over gitea@... - users.users.git = { - useDefaultShell = true; - home = "/var/lib/gitea"; - group = "gitea"; + options.modules.services.gitea = { + enable = mkOption { + type = types.bool; + default = false; + }; }; - services.gitea = { - enable = true; - log.level = "Info"; - - user = "git"; - database = { - user = "git"; - type = "postgres"; + config = mkIf config.modules.services.gitea.enable { + # I prefer git@... ssh addresses over gitea@... + users.users.git = { + useDefaultShell = true; + home = "/var/lib/gitea"; + group = "gitea"; }; - useWizard = false; - disableRegistration = true; - # We're assuming SSL-only connectivity - cookieSecure = true; + services.gitea = { + enable = true; + log.level = "Info"; + + user = "git"; + database = { + user = "git"; + type = "postgres"; + }; + useWizard = false; + disableRegistration = true; + + # We're assuming SSL-only connectivity + cookieSecure = true; + }; }; } diff --git a/modules/services/jellyfin.nix b/modules/services/jellyfin.nix index be27b47f..e1f3460c 100644 --- a/modules/services/jellyfin.nix +++ b/modules/services/jellyfin.nix @@ -1,14 +1,23 @@ # Finally, a decent open alternative to Plex! -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - services.jellyfin.enable = true; - - networking.firewall = { - allowedTCPPorts = [ 8096 ]; - allowedUDPPorts = [ 8096 ]; + options.modules.services.jellyfin = { + enable = mkOption { + type = types.bool; + default = false; + }; }; - my.user.extraGroups = [ "jellyfin" ]; + config = mkIf config.modules.services.jellyfin.enable { + services.jellyfin.enable = true; + + networking.firewall = { + allowedTCPPorts = [ 8096 ]; + allowedUDPPorts = [ 8096 ]; + }; + + my.user.extraGroups = [ "jellyfin" ]; + }; } diff --git a/modules/services/keybase.nix b/modules/services/keybase.nix new file mode 100644 index 00000000..0d3c2c57 --- /dev/null +++ b/modules/services/keybase.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: + +{ + services.kbfs = { + enable = true; + mountPoint = "%t/kbfs"; + extraFlags = [ "-label %u" ]; + }; + + systemd.user.services.kbfs = { + environment = { KEYBASE_RUN_MODE = "prod"; }; + serviceConfig.Slice = "keybase.slice"; + }; +} diff --git a/modules/services/mpd.nix b/modules/services/mpd.nix index 11b97efb..b91115c0 100644 --- a/modules/services/mpd.nix +++ b/modules/services/mpd.nix @@ -5,6 +5,8 @@ mpc_cli ]; + my.env.MPD_HOME = "$XDG_CONFIG_HOME/mpd"; + services.mpd = { enable = true; musicDirectory = "/home/hlissner/music"; diff --git a/modules/services/nginx.nix b/modules/services/nginx.nix index 1b1867fb..2615232d 100644 --- a/modules/services/nginx.nix +++ b/modules/services/nginx.nix @@ -1,15 +1,24 @@ -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - networking.firewall.allowedTCPPorts = [ 80 443 ]; + options.modules.services.nginx = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - services.nginx = { - enable = true; + config = mkIf config.modules.services.nginx.enable { + networking.firewall.allowedTCPPorts = [ 80 443 ]; - # Use recommended settings - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; + services.nginx = { + enable = true; + + # Use recommended settings + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + }; }; } diff --git a/modules/services/ssh.nix b/modules/services/ssh.nix index df022b53..87bfa790 100644 --- a/modules/services/ssh.nix +++ b/modules/services/ssh.nix @@ -1,20 +1,31 @@ { config, pkgs, ... }: +{ config, options, pkgs, lib, ... }: +with lib; { - services.openssh = { - enable = true; - forwardX11 = true; - permitRootLogin = "no"; - passwordAuthentication = false; - - # Allow local LAN to connect with passwords - extraConfig = '' - Match address 192.168.0.0/24 - PasswordAuthentication yes - ''; + options.modules.services.ssh = { + enable = mkOption { + type = types.bool; + default = false; + }; }; - users.users.hlissner.openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Tl2pj6CPBV3V72cohPhn+k0a/Na3cOrbmUtFC7rR7icWocSs1S1cSrP3sPLwUqRh3+zfIuLXTrTv3gj8Xvg8WELOspzsiYeAtbcHrnWnx/a7xzYvFyT9/8hkiGM/F6w7IuKEk+AZW34vARSgRPJ1FdH8NbPKJ8ay9zW9XB9YJGnbzIRmsVVpQ8l6Fh8ZqRjZfC1ea7hns8+HgjPrIHFb+S3qZZiwU4Gc8aWJy9ziwwkllEsSchv3aigYA3eOeW0FUQFiKsLGxbX2b2b3d6jFO4Pu+dMSen0h5IzBo0nh7UADSfJPdwbZaMuJzviKe2y6zg6jaM9XRIhLBT6bftDr henrik@lissner.net" - ]; + config = mkIf config.modules.services.ssh.enable { + services.openssh = { + enable = true; + forwardX11 = true; + permitRootLogin = "no"; + passwordAuthentication = false; + + # Allow local LAN to connect with passwords + extraConfig = '' + Match address 192.168.0.0/24 + PasswordAuthentication yes + ''; + }; + + users.users.hlissner.openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8Tl2pj6CPBV3V72cohPhn+k0a/Na3cOrbmUtFC7rR7icWocSs1S1cSrP3sPLwUqRh3+zfIuLXTrTv3gj8Xvg8WELOspzsiYeAtbcHrnWnx/a7xzYvFyT9/8hkiGM/F6w7IuKEk+AZW34vARSgRPJ1FdH8NbPKJ8ay9zW9XB9YJGnbzIRmsVVpQ8l6Fh8ZqRjZfC1ea7hns8+HgjPrIHFb+S3qZZiwU4Gc8aWJy9ziwwkllEsSchv3aigYA3eOeW0FUQFiKsLGxbX2b2b3d6jFO4Pu+dMSen0h5IzBo0nh7UADSfJPdwbZaMuJzviKe2y6zg6jaM9XRIhLBT6bftDr henrik@lissner.net" + ]; + }; } diff --git a/modules/services/syncthing.nix b/modules/services/syncthing.nix index adde9048..5c24f709 100644 --- a/modules/services/syncthing.nix +++ b/modules/services/syncthing.nix @@ -1,60 +1,69 @@ -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - services.syncthing = { - enable = true; - openDefaultPorts = true; - user = config.my.username; - configDir = "/home/${config.my.username}/.config/syncthing"; - dataDir = "/home/${config.my.username}/.local/share/syncthing"; - declarative = { - devices = { - kuro.id = "4UJSUBN-V7LCISG-6ZE7SBN-YPXM5FQ-CE7CD2U-W4KZC7O-4HUZZSW-6DXAGQQ"; - shiro.id = "G4DUO25-AMQQIWS-SRZE5TJ-43CCQZJ-5ULEZBS-P2LMZZU-V5JA5CS-6X7RLQK"; - aka.id = "IZQ2GAC-I3QBTRT-TXBIG7Z-NT6S66Y-H64WOCO-T3AMKYZ-VGWTNCY-CTQOLQN"; - ao.id = "NBMLUKD-PJRXCTM-GQ2WFLE-NN4IGSN-6WSC6JL-M6XN7PE-HCBTOKV-7VER2QE"; - # Windows machine; set up the other end yourself! - midori.id = "BOFH5JP-A3MPTJA-EGIZVWV-URHUTSJ-2ZXCAA2-XMZPPSR-GLMOQFL-ZX7DGQP"; - }; - folders = - let deviceEnabled = devices: lib.elem config.networking.hostName devices; - deviceType = devices: - if deviceEnabled devices - then "sendreceive" - else "receiveonly"; - in { - archive = rec { - devices = [ "kuro" "ao" "midori" ]; - path = "/home/${config.my.username}/archive"; - watch = false; - rescanInterval = 3600 * 6; - type = deviceType ["kuro"]; - enable = deviceEnabled devices; - }; - share = rec { - devices = [ "kuro" "shiro" "ao" "aka" "midori" ]; - path = "/home/${config.my.username}/share"; - watch = true; - rescanInterval = 3600 * 6; - enable = deviceEnabled devices; - }; - projects = rec { - devices = [ "kuro" "shiro" "ao" "midori" ]; - path = "/home/${config.my.username}/projects"; - watch = false; - rescanInterval = 3600 * 2; - type = deviceType ["kuro" "shiro"]; - enable = deviceEnabled devices; - }; - secrets = rec { - devices = [ "kuro" "shiro" "ao" "aka" ]; - path = "/home/${config.my.username}/.secrets"; - watch = true; - rescanInterval = 3600; - type = deviceType ["kuro" "shiro"]; - enable = deviceEnabled devices; - }; + options.modules.services.syncthing = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.services.syncthing.enable { + services.syncthing = { + enable = true; + openDefaultPorts = true; + user = config.my.username; + configDir = "/home/${config.my.username}/.config/syncthing"; + dataDir = "/home/${config.my.username}/.local/share/syncthing"; + declarative = { + devices = { + kuro.id = "4UJSUBN-V7LCISG-6ZE7SBN-YPXM5FQ-CE7CD2U-W4KZC7O-4HUZZSW-6DXAGQQ"; + shiro.id = "G4DUO25-AMQQIWS-SRZE5TJ-43CCQZJ-5ULEZBS-P2LMZZU-V5JA5CS-6X7RLQK"; + aka.id = "IZQ2GAC-I3QBTRT-TXBIG7Z-NT6S66Y-H64WOCO-T3AMKYZ-VGWTNCY-CTQOLQN"; + ao.id = "NBMLUKD-PJRXCTM-GQ2WFLE-NN4IGSN-6WSC6JL-M6XN7PE-HCBTOKV-7VER2QE"; + # Windows machine; set up the other end yourself! + midori.id = "BOFH5JP-A3MPTJA-EGIZVWV-URHUTSJ-2ZXCAA2-XMZPPSR-GLMOQFL-ZX7DGQP"; }; + folders = + let deviceEnabled = devices: lib.elem config.networking.hostName devices; + deviceType = devices: + if deviceEnabled devices + then "sendreceive" + else "receiveonly"; + in { + archive = rec { + devices = [ "kuro" "ao" "midori" ]; + path = "/home/${config.my.username}/archive"; + watch = false; + rescanInterval = 3600 * 6; + type = deviceType ["kuro"]; + enable = deviceEnabled devices; + }; + share = rec { + devices = [ "kuro" "shiro" "ao" "aka" "midori" ]; + path = "/home/${config.my.username}/share"; + watch = true; + rescanInterval = 3600 * 6; + enable = deviceEnabled devices; + }; + projects = rec { + devices = [ "kuro" "shiro" "ao" "midori" ]; + path = "/home/${config.my.username}/projects"; + watch = false; + rescanInterval = 3600 * 2; + type = deviceType ["kuro" "shiro"]; + enable = deviceEnabled devices; + }; + secrets = rec { + devices = [ "kuro" "shiro" "ao" "aka" ]; + path = "/home/${config.my.username}/.secrets"; + watch = true; + rescanInterval = 3600; + type = deviceType ["kuro" "shiro"]; + enable = deviceEnabled devices; + }; + }; + }; }; }; } diff --git a/modules/shell/default.nix b/modules/shell/default.nix new file mode 100644 index 00000000..59778272 --- /dev/null +++ b/modules/shell/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./direnv.nix + ./git.nix + ./gnupg.nix + ./ncmpcpp.nix + ./pass.nix + ./ranger.nix + ./tmux.nix + ./weechat.nix + ./zsh.nix + ]; +} diff --git a/modules/shell/direnv.nix b/modules/shell/direnv.nix index 97dbf08c..5f088fb8 100644 --- a/modules/shell/direnv.nix +++ b/modules/shell/direnv.nix @@ -1,10 +1,17 @@ -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - services.lorri.enable = true; + options.modules.shell.direnv = { + enable = mkOption { type = types.bool; default = false; }; + }; - my = { - packages = [ pkgs.direnv ]; - zsh.rc = "_cache direnv hook zsh"; + config = mkIf config.modules.shell.direnv.enable { + my = { + packages = [ pkgs.direnv ]; + zsh.rc = "_cache direnv hook zsh"; + }; + + services.lorri.enable = true; }; } diff --git a/modules/shell/git.nix b/modules/shell/git.nix index bc1c6fc8..68c9ae85 100644 --- a/modules/shell/git.nix +++ b/modules/shell/git.nix @@ -1,16 +1,26 @@ { config, lib, pkgs, ... }: +with lib; { - my = { - packages = with pkgs; [ - gitAndTools.hub - gitAndTools.diff-so-fancy - ]; - zsh.rc = lib.readFile ; - # Do recursively, in case git stores files in this folder - home.xdg.configFile = { - "git/config".source = ; - "git/ignore".source = ; + options.modules.shell.git = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.shell.git.enable { + my = { + packages = with pkgs; [ + gitAndTools.hub + gitAndTools.diff-so-fancy + ]; + zsh.rc = lib.readFile ; + # Do recursively, in case git stores files in this folder + home.xdg.configFile = { + "git/config".source = ; + "git/ignore".source = ; + }; }; }; } diff --git a/modules/shell/gnupg.nix b/modules/shell/gnupg.nix index e8332052..96f0d025 100644 --- a/modules/shell/gnupg.nix +++ b/modules/shell/gnupg.nix @@ -1,27 +1,37 @@ -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: -{ - my = { - packages = with pkgs; [ - gnupg - pinentry +with lib; +let cfg = config.modules; + gnupgCfg = cfg.shell.gnupg; +in { + options.modules.shell.gnupg = { + enable = mkOption { type = types.bool; default = false; }; + cacheTTL = mkOption { type = types.int; default = 1800; }; + }; + + config = mkIf gnupgCfg.enable { + my = { + packages = with pkgs; [ + gnupg + pinentry + ]; + env.GNUPGHOME = "$XDG_CONFIG_HOME/gnupg"; + init = "mkdir -p \"$GNUPGHOME\" -m 700"; + }; + + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + systemd.user.services.gpg-agent.serviceConfig.ExecStart = [ + "" '' + ${pkgs.gnupg}/bin/gpg-agent \ + --supervised \ + --allow-emacs-pinentry \ + --default-cache-ttl ${toString gnupgCfg.cacheTTL} \ + --pinentry-program ${pkgs.pinentry}/bin/pinentry-gtk-2 + '' ]; - env.GNUPGHOME = "$XDG_CONFIG_HOME/gnupg"; - init = "mkdir -p \"$GNUPGHOME\" -m 700"; }; - - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - }; - - systemd.user.services.gpg-agent.serviceConfig.ExecStart = [ - "" '' - ${pkgs.gnupg}/bin/gpg-agent \ - --supervised \ - --allow-emacs-pinentry \ - --default-cache-ttl 1800 \ - --pinentry-program ${pkgs.pinentry}/bin/pinentry-gtk-2 - '' - ]; } diff --git a/modules/shell/ncmpcpp.nix b/modules/shell/ncmpcpp.nix index 002b4e43..bf514bba 100644 --- a/modules/shell/ncmpcpp.nix +++ b/modules/shell/ncmpcpp.nix @@ -1,21 +1,29 @@ -{ config, lib, pkgs, ... }: - +{ config, options, lib, pkgs, ... }: +with lib; { - my.packages = with pkgs; [ - (ncmpcpp.override { visualizerSupport = true; }) - ]; + options.modules.shell.ncmpcpp = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - my.env.MPD_HOME = "$XDG_CONFIG_HOME/mpd"; - my.env.NCMPCPP_HOME = "$XDG_CONFIG_HOME/ncmpcpp"; + config = mkIf config.modules.shell.ncmpcpp.enable { + my.packages = with pkgs; [ + (ncmpcpp.override { visualizerSupport = true; }) + ]; - my.alias.rate = "mpd-rate"; - my.alias.mpcs = "mpc search any"; - my.alias.mpcsp = "mpc searchplay any"; + my.alias.rate = "mpd-rate"; + my.alias.mpcs = "mpc search any"; + my.alias.mpcsp = "mpc searchplay any"; - # Symlink these one at a time because ncmpcpp writes other files to - # ~/.config/ncmpcpp, so it needs to be writeable. - my.home.xdg.configFile = { - "ncmpcpp/config".source = ; - "ncmpcpp/bindings".source = ; + my.env.NCMPCPP_HOME = "$XDG_CONFIG_HOME/ncmpcpp"; + + # Symlink these one at a time because ncmpcpp writes other files to + # ~/.config/ncmpcpp, so it needs to be writeable. + my.home.xdg.configFile = { + "ncmpcpp/config".source = ; + "ncmpcpp/bindings".source = ; + }; }; } diff --git a/modules/shell/pass.nix b/modules/shell/pass.nix index 0e2121e4..80b4128a 100644 --- a/modules/shell/pass.nix +++ b/modules/shell/pass.nix @@ -1,13 +1,22 @@ -{ config, pkgs, lib, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - my = { - packages = with pkgs; [ - (pass.withExtensions (exts: [ - exts.pass-otp - exts.pass-genphrase - ])) - ]; - env.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store"; + options.modules.shell.pass = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.shell.pass.enable { + my = { + packages = with pkgs; [ + (pass.withExtensions (exts: [ + exts.pass-otp + exts.pass-genphrase + ])) + ]; + env.PASSWORD_STORE_DIR = "$HOME/.secrets/password-store"; + }; }; } diff --git a/modules/shell/ranger.nix b/modules/shell/ranger.nix index 67fd1b70..25f27133 100644 --- a/modules/shell/ranger.nix +++ b/modules/shell/ranger.nix @@ -1,9 +1,18 @@ -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - my.packages = with pkgs; [ - ranger - (lib.mkIf config.services.xserver.enable - w3m) - ]; + options.modules.shell.ranger = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.shell.ranger.enable { + my.packages = with pkgs; [ + ranger + # For image previews + (lib.mkIf config.services.xserver.enable w3m) + ]; + }; } diff --git a/modules/shell/tmux.nix b/modules/shell/tmux.nix index 5ea7f374..42afc838 100644 --- a/modules/shell/tmux.nix +++ b/modules/shell/tmux.nix @@ -1,32 +1,41 @@ -{ config, lib, pkgs, ... }: - +{ config, options, pkgs, lib, ... }: +with lib; { - my = { - packages = with pkgs; [ - # The developer of tmux chooses not to add XDG support for religious - # reasons (see tmux/tmux#142). Fortunately, nix makes this easy: - (writeScriptBin "tmux" '' - #!${stdenv.shell} - exec ${tmux}/bin/tmux -f "$TMUX_HOME/config" "$@" - '') - ]; + options.modules.shell.tmux = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; - env.TMUX_HOME = "$XDG_CONFIG_HOME/tmux"; - env.TMUXIFIER = "$XDG_DATA_HOME/tmuxifier"; - env.TMUXIFIER_LAYOUT_PATH = "$XDG_DATA_HOME/tmuxifier"; - env.PATH = [ "$TMUXIFIER/bin" ]; + config = mkIf config.modules.shell.tmux.enable { + my = { + packages = with pkgs; [ + # The developer of tmux chooses not to add XDG support for religious + # reasons (see tmux/tmux#142). Fortunately, nix makes this easy: + (writeScriptBin "tmux" '' + #!${stdenv.shell} + exec ${tmux}/bin/tmux -f "$TMUX_HOME/config" "$@" + '') + ]; - zsh.rc = '' - _cache tmuxifier init - - ${lib.readFile } - ''; - home.xdg.configFile = { - "tmux" = { source = ; recursive = true; }; - "tmux/plugins".text = '' - 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 + env.TMUX_HOME = "$XDG_CONFIG_HOME/tmux"; + env.TMUXIFIER = "$XDG_DATA_HOME/tmuxifier"; + env.TMUXIFIER_LAYOUT_PATH = "$XDG_DATA_HOME/tmuxifier"; + env.PATH = [ "$TMUXIFIER/bin" ]; + + zsh.rc = '' + _cache tmuxifier init - + ${lib.readFile } ''; + home.xdg.configFile = { + "tmux" = { source = ; recursive = true; }; + "tmux/plugins".text = '' + 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 + ''; + }; }; }; } diff --git a/modules/shell/weechat.nix b/modules/shell/weechat.nix new file mode 100644 index 00000000..016b6226 --- /dev/null +++ b/modules/shell/weechat.nix @@ -0,0 +1,17 @@ +{ config, options, lib, pkgs, ... }: + +with lib; +{ + options.modules.shell.weechat = { + enable = mkOption { + type = types.bool; + default = false; + }; + }; + + config = mkIf config.modules.shell.weechat.enable { + my.packages = with pkgs; [ + weechat + ]; + }; +} diff --git a/modules/shell/zsh.nix b/modules/shell/zsh.nix index 94869208..78449a3d 100644 --- a/modules/shell/zsh.nix +++ b/modules/shell/zsh.nix @@ -1,48 +1,58 @@ # modules/shell/zsh.nix --- ... -{ pkgs, libs, ... }: +{ config, options, pkgs, lib, ... }: +with lib; { - my = { - packages = with pkgs; [ - zsh - nix-zsh-completions - bat - exa - fasd - fd - fzf - htop - tldr - tree - ]; - env.ZDOTDIR = "$XDG_CONFIG_HOME/zsh"; - env.ZSH_CACHE = "$XDG_CACHE_HOME/zsh"; - - alias.exa = "exa --group-directories-first"; - alias.l = "exa -1"; - alias.ll = "exa -lg"; - alias.la = "LC_COLLATE=C exa -la"; - alias.sc = "systemctl"; - alias.ssc = "sudo systemctl"; - - # Write it recursively so other modules can write files to it - home.xdg.configFile."zsh" = { - source = ; - recursive = true; + options.modules.shell.zsh = { + enable = mkOption { + type = types.bool; + default = false; }; }; - programs.zsh = { - enable = true; - enableCompletion = true; - # I init completion myself, because enableGlobalCompInit initializes it too - # soon, which means commands initialized later in my config won't get - # completion, and running compinit twice is slow. - enableGlobalCompInit = false; - promptInit = ""; - }; + config = mkIf config.modules.shell.zsh.enable { + my = { + packages = with pkgs; [ + zsh + nix-zsh-completions + bat + exa + fasd + fd + fzf + htop + tldr + tree + ]; + env.ZDOTDIR = "$XDG_CONFIG_HOME/zsh"; + env.ZSH_CACHE = "$XDG_CACHE_HOME/zsh"; - system.userActivationScripts.cleanupZgen = '' - rm -fv $XDG_CACHE_HOME/zsh/* - ''; + alias.exa = "exa --group-directories-first"; + alias.l = "exa -1"; + alias.ll = "exa -lg"; + alias.la = "LC_COLLATE=C exa -la"; + alias.sc = "systemctl"; + alias.ssc = "sudo systemctl"; + + # Write it recursively so other modules can write files to it + home.xdg.configFile."zsh" = { + source = ; + recursive = true; + }; + }; + + programs.zsh = { + enable = true; + enableCompletion = true; + # I init completion myself, because enableGlobalCompInit initializes it too + # soon, which means commands initialized later in my config won't get + # completion, and running compinit twice is slow. + enableGlobalCompInit = false; + promptInit = ""; + }; + + system.userActivationScripts.cleanupZgen = '' + rm -fv $XDG_CACHE_HOME/zsh/* + ''; + }; } diff --git a/modules/themes/aquanaut/default.nix b/modules/themes/aquanaut/default.nix index a6777a96..3ea0f701 100644 --- a/modules/themes/aquanaut/default.nix +++ b/modules/themes/aquanaut/default.nix @@ -1,68 +1,80 @@ -# modules/themes/aquanaut/default.nix --- a sea-blue linux theme +# themes/aquanaut/default.nix --- a sea-blue linux theme -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - imports = [ ../. ]; # Load framework for themes - - theme.wallpaper = ./wallpaper.jpg; - - services.compton = { - activeOpacity = "0.96"; - inactiveOpacity = "0.75"; - settings = { - blur-background = true; - blur-background-frame = true; - blur-background-fixed = true; - blur-kern = "7x7box"; - blur-strength = 340; + options.modules.themes.aquanaut = { + enable = mkOption { + type = types.bool; + default = false; }; }; - services.xserver.displayManager.lightdm = { - greeters.mini.extraConfig = '' - text-color = "#bbc2cf" - password-background-color = "#29323d" - window-color = "#0b1117" - border-color = "#0b1117" - ''; - }; + config = mkIf config.modules.themes.aquanaut.enable { + modules.theme = { + name = "Aquanaut"; + version = "0.1"; + path = ./.; + }; - fonts.fonts = [ pkgs.nerdfonts ]; - my.packages = with pkgs; [ - nordic - paper-icon-theme # for rofi - ]; - my.zsh.rc = lib.readFile ./zsh/prompt.zsh; - my.home.xdg.configFile = { - "bspwm/rc.d/polybar".source = ./polybar/run.sh; - "bspwm/rc.d/theme".source = ./bspwmrc; - "dunst/dunstrc".source = ./dunstrc; - "polybar" = { source = ./polybar; recursive = true; }; - "rofi/theme" = { source = ./rofi; recursive = true; }; - "tmux/theme".source = ./tmux.conf; - "xtheme/90-theme".source = ./Xresources; - # GTK - "gtk-3.0/settings.ini".text = '' - [Settings] - gtk-theme-name=Nordic-blue - gtk-icon-theme-name=Paper - gtk-fallback-icon-theme=gnome - gtk-application-prefer-dark-theme=true - gtk-cursor-theme-name=Paper - gtk-xft-hinting=1 - gtk-xft-hintstyle=hintfull - gtk-xft-rgba=none - ''; - # GTK2 global theme (widget and icon theme) - "gtk-2.0/gtkrc".text = '' - gtk-theme-name="Nordic-blue" - gtk-icon-theme-name="Paper-Mono-Dark" - gtk-font-name="Sans 10" - ''; - # QT4/5 global theme - "Trolltech.conf".text = '' - [Qt] - style=Nordic-blue - ''; + services.compton = { + activeOpacity = "0.96"; + inactiveOpacity = "0.75"; + settings = { + blur-background = true; + blur-background-frame = true; + blur-background-fixed = true; + blur-kern = "7x7box"; + blur-strength = 340; + }; + }; + + services.xserver.displayManager.lightdm = { + greeters.mini.extraConfig = '' + text-color = "#bbc2cf" + password-background-color = "#29323d" + window-color = "#0b1117" + border-color = "#0b1117" + ''; + }; + + fonts.fonts = [ pkgs.nerdfonts ]; + my.packages = with pkgs; [ + nordic + paper-icon-theme # for rofi + ]; + my.zsh.rc = lib.readFile ./zsh/prompt.zsh; + my.home.xdg.configFile = { + "bspwm/rc.d/polybar".source = ./polybar/run.sh; + "bspwm/rc.d/theme".source = ./bspwmrc; + "dunst/dunstrc".source = ./dunstrc; + "polybar" = { source = ./polybar; recursive = true; }; + "rofi/theme" = { source = ./rofi; recursive = true; }; + "tmux/theme".source = ./tmux.conf; + "xtheme/90-theme".source = ./Xresources; + # GTK + "gtk-3.0/settings.ini".text = '' + [Settings] + gtk-theme-name=Nordic-blue + gtk-icon-theme-name=Paper + gtk-fallback-icon-theme=gnome + gtk-application-prefer-dark-theme=true + gtk-cursor-theme-name=Paper + gtk-xft-hinting=1 + gtk-xft-hintstyle=hintfull + gtk-xft-rgba=none + ''; + # GTK2 global theme (widget and icon theme) + "gtk-2.0/gtkrc".text = '' + gtk-theme-name="Nordic-blue" + gtk-icon-theme-name="Paper-Mono-Dark" + gtk-font-name="Sans 10" + ''; + # QT4/5 global theme + "Trolltech.conf".text = '' + [Qt] + style=Nordic-blue + ''; + }; }; } diff --git a/modules/themes/default.nix b/modules/themes/default.nix index 439adb39..a20e6f36 100644 --- a/modules/themes/default.nix +++ b/modules/themes/default.nix @@ -1,16 +1,56 @@ -# modules/themes/default.nix +{ config, options, lib, pkgs, ... }: -{ config, ... }: +with lib; { - imports = [ ./options.nix ]; + imports = [ + # aquanaut = callPackage (import ./aquanaut {}); + ./fluorescence + ]; - # Try really hard to get QT to respect my GTK theme. - my.env.GTK_DATA_PREFIX = [ "${config.system.path}" ]; - my.env.QT_QPA_PLATFORMTHEME = "gtk2"; - qt5 = { style = "gtk2"; platformTheme = "gtk2"; }; - services.xserver.displayManager.sessionCommands = '' - export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc" - source "$XDG_CONFIG_HOME"/xsession/*.sh - xrdb -merge "$XDG_CONFIG_HOME"/xtheme/* - ''; + options.modules.theme = { + name = mkOption { type = with types; nullOr str; default = null; }; + version = mkOption { type = with types; nullOr str; default = null; }; + path = mkOption { + type = with types; nullOr path; + default = null; + }; + + wallpaper = { + path = mkOption { + type = with types; nullOr str; + default = if config.modules.theme.path != null + then "${config.modules.theme.path}/wallpaper.png" + else null; + }; + + filter = { + enable = mkOption { + type = types.bool; + default = true; + }; + options = mkOption { + type = types.str; + default = "-gaussian-blur 0x2 -modulate 70 -level 5%"; + }; + }; + }; + }; + + config = mkIf (config.modules.theme.wallpaper.path != null && + builtins.pathExists config.modules.theme.wallpaper.path) { + my.home.home.file.".background-image".source = + config.modules.theme.wallpaper.path; + + services.xserver.displayManager.lightdm.background = + mkIf config.modules.theme.wallpaper.filter.enable + (let filteredPath = "wallpaper.filtered.png"; + filteredWallpaper = + with pkgs; runCommand "filterWallpaper" + { buildInputs = [ imagemagick ]; } '' + mkdir "$out" + convert ${config.modules.theme.wallpaper.filter.options} \ + ${config.modules.theme.wallpaper.path} $out/${filteredPath} + ''; + in "${filteredWallpaper}/${filteredPath}"); + }; } diff --git a/modules/themes/fluorescence/default.nix b/modules/themes/fluorescence/default.nix index 6389270c..527fb15c 100644 --- a/modules/themes/fluorescence/default.nix +++ b/modules/themes/fluorescence/default.nix @@ -1,75 +1,111 @@ -# modules/themes/aquanaut/default.nix --- a sea-blue linux theme +# themes/fluorescence/default.nix --- a regal dracula-inspired theme -{ config, lib, pkgs, ... }: +{ config, options, lib, pkgs, ... }: +with lib; { - imports = [ ../. ]; # Load framework for themes - - theme.wallpaper = ./wallpaper.png; - - services.compton = { - fade = true; - fadeDelta = 1; - fadeSteps = [ "0.01" "0.012" ]; - shadow = true; - shadowOffsets = [ (-10) (-10) ]; - shadowOpacity = "0.22"; - # activeOpacity = "1.00"; - # inactiveOpacity = "0.92"; - settings = { - shadow-radius = 12; - # blur-background = true; - # blur-background-frame = true; - # blur-background-fixed = true; - blur-kern = "7x7box"; - blur-strength = 320; + options.modules.themes.fluorescence = { + enable = mkOption { + type = types.bool; + default = false; }; }; - services.xserver.displayManager.lightdm = { - greeters.mini.extraConfig = '' - text-color = "#ff79c6" - password-background-color = "#1E2029" - window-color = "#181a23" - border-color = "#181a23" - ''; - }; + config = mkIf config.modules.themes.fluorescence.enable { + modules.theme = { + name = "fluorescence"; + version = "0.0.1"; + path = ./.; - fonts.fonts = [ pkgs.nerdfonts ]; - my.packages = with pkgs; [ - my.ant-dracula - paper-icon-theme # for rofi - ]; - my.zsh.rc = lib.readFile ./zsh/prompt.zsh; - my.home.xdg.configFile = { - "bspwm/rc.d/polybar".source = ./polybar/run.sh; - "bspwm/rc.d/theme".source = ./bspwmrc; - "dunst/dunstrc".source = ./dunstrc; - "polybar" = { source = ./polybar; recursive = true; }; - "rofi/theme" = { source = ./rofi; recursive = true; }; - "tmux/theme".source = ./tmux.conf; - "xtheme/90-theme".source = ./Xresources; - # GTK - "gtk-3.0/settings.ini".text = '' - [Settings] - gtk-theme-name=Ant-Dracula - gtk-icon-theme-name=Paper - gtk-fallback-icon-theme=gnome - gtk-application-prefer-dark-theme=true - gtk-cursor-theme-name=Paper - gtk-xft-hinting=1 - gtk-xft-hintstyle=hintfull - gtk-xft-rgba=none - ''; - # GTK2 global theme (widget and icon theme) - "gtk-2.0/gtkrc".text = '' - gtk-theme-name="Ant-Dracula" - gtk-icon-theme-name="Paper-Mono-Dark" - gtk-font-name="Sans 10" - ''; - # QT4/5 global theme - "Trolltech.conf".text = '' - [Qt] - style=Ant-Dracula - ''; + wallpaper = { + filter.options = "-gaussian-blur 0x2 -modulate 70 -level 5%"; + }; + }; + + services.compton = { + fade = true; + fadeDelta = 1; + fadeSteps = [ "0.01" "0.012" ]; + shadow = true; + shadowOffsets = [ (-10) (-10) ]; + shadowOpacity = "0.22"; + # activeOpacity = "1.00"; + # inactiveOpacity = "0.92"; + settings = { + shadow-radius = 12; + # blur-background = true; + # blur-background-frame = true; + # blur-background-fixed = true; + blur-kern = "7x7box"; + blur-strength = 320; + }; + }; + + services.xserver.displayManager.lightdm = { + greeters.mini.extraConfig = '' + text-color = "#ff79c6" + password-background-color = "#1E2029" + window-color = "#181a23" + border-color = "#181a23" + ''; + }; + + fonts.fonts = [ pkgs.nerdfonts ]; + my.packages = with pkgs; [ + my.ant-dracula + paper-icon-theme # for rofi + ]; + my.zsh.rc = lib.readFile ./zsh/prompt.zsh; + my.home.xdg = { + configFile = { + "bspwm/rc.d/polybar".source = ./polybar/run.sh; + "bspwm/rc.d/theme".source = ./bspwmrc; + "dunst/dunstrc".source = ./dunstrc; + "polybar" = { source = ./polybar; recursive = true; }; + "rofi/theme" = { source = ./rofi; recursive = true; }; + "tmux/theme".source = ./tmux.conf; + "xtheme/90-theme".source = ./Xresources; + # GTK + "gtk-3.0/settings.ini".text = '' + [Settings] + gtk-theme-name=Ant-Dracula + gtk-icon-theme-name=Paper + gtk-fallback-icon-theme=gnome + gtk-application-prefer-dark-theme=true + gtk-cursor-theme-name=Paper + gtk-xft-hinting=1 + gtk-xft-hintstyle=hintfull + gtk-xft-rgba=none + ''; + # GTK2 global theme (widget and icon theme) + "gtk-2.0/gtkrc".text = '' + gtk-theme-name="Ant-Dracula" + gtk-icon-theme-name="Paper-Mono-Dark" + gtk-font-name="Sans 10" + ''; + # QT4/5 global theme + "Trolltech.conf".text = '' + [Qt] + style=Ant-Dracula + ''; + }; + + dataFile = mkIf config.modules.desktop.browsers.qutebrowser.enable { + "qutebrowser/userstyles.css".source = + let compiledStyles = + with pkgs; runCommand "compileUserStyles" + { buildInputs = [ sass ]; } '' + mkdir "$out" + for file in ${./userstyles/qutebrowser}/*.scss; do + scss --sourcemap=none \ + --no-cache \ + --style compressed \ + --default-encoding utf-8 \ + "$file" \ + >>"$out/userstyles.css" + done + ''; + in "${compiledStyles}/userstyles.css"; + }; + }; }; } diff --git a/modules/themes/fluorescence/userstyles/firefox/stylus-2020-02-11.json b/modules/themes/fluorescence/userstyles/firefox/stylus-2020-02-11.json new file mode 100644 index 00000000..b387e721 --- /dev/null +++ b/modules/themes/fluorescence/userstyles/firefox/stylus-2020-02-11.json @@ -0,0 +1,272 @@ +[ + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1562423881810, + "name": "Monospace textareas", + "sections": [ + { + "code": "textarea {\n font-family: monospace;\n}" + } + ], + "updateDate": 1562423881810, + "id": 3 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/119903.json", + "md5Url": "https://update.userstyles.org/119903.md5", + "url": "http://userstyles.org/styles/119903", + "originalMd5": "0b2b6adac6c0d80d1e0512d007323127", + "installDate": 1565469520822, + "sections": [ + { + "urls": [], + "urlPrefixes": [], + "domains": [ + "www.keyhero.com" + ], + "regexps": [], + "code": "body {\r\n background-color: #2C2C2C !important;\r\n color: #ccc;\r\n}\r\n.description-block {\r\n background-color: #2C2C2C !important;\r\n color: white !important;\r\n}\r\ntr.head td {\r\n background-color: #2C2C2C !important;\r\n color: white !important;\r\n}\r\ndiv.new-post a {\r\n background-color: #2C2C2C !important;\r\n color: white !important;\r\n}\r\n.quote-current {\r\n background: black;\r\n}\r\n.quote-left {\r\n color: black;\r\n}\r\n.navbar-default .navbar-collapse,\r\n.navbar-default .navbar-form {\r\n background: #202020 !important;\r\n}\r\n.navbar-default {\r\n background-color: #202020 !important;\r\n box-shadow: none !important;\r\n}\r\nh4,\r\n.h4 {\r\n color: #ccc !important;\r\n}\r\nspan {\r\n color: #A2A2A2 !important;\r\n}\r\n.dl-horizontal dd {\r\n background-color: #2c2c2c !important;\r\n}\r\n.dl-horizontal dt {\r\n color: #808080 !important;\r\n}\r\n.table-striped>tbody>tr:nth-child(odd)>td,\r\n.table-striped>tbody>tr:nth-child(odd)>th {\r\n background: #2c2c2c !important;\r\n}\r\n.row {\r\n background: #2c2c2c !important;\r\n}\r\nfooter {\r\n background: #2c2c2c !important;\r\n}\r\nh3,\r\n.h3 {\r\n color: #ccc !important;\r\n}\r\n.alert-info {\r\n background: #3c3c3c !important;\r\n}\r\n.form-control {\r\n background: #202020 !important;\r\n color: #ccc !important;\r\n border: none !important;\r\n}\r\n.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {\r\n background: #3c3c3c !important;\r\n}\r\ninput, button, select {\r\n background: #2c2c2c !important;\r\n}\r\ntextarea {\r\n\tbackground: #3c3c3c !important;\r\n}\r\n.panel-body {\r\n background: #3c3c3c !important;\r\n}\r\n.panel-default>.panel-heading {\r\n background: #3c3c3c !important;\r\n}\r\n.quote-bg-error {\r\n background: #4c4c4c !important;\r\n}\r\n.correction {\r\n background: #2c2c2c !important;\r\n}\r\n.label-awesome {\r\n background-color: #84840B !important;\r\n}\r\n#tooltip {\r\n background-color: #202020 !important;\r\n}\r\n.legendLabel {\r\n background: #202020 !important;\r\n color: #ccc !important;\r\n}\r\n.btn-success {\r\n background: #21692B !important;\r\n border-color: #21692B !important;\r\n}\r\n.btn-info {\r\n\tbackground: #772953 !important;\r\n}\r\n.well {\r\n \tbackground: #202020; \r\n}\r\n.navbar-default .navbar-nav>li>a {\r\n\tcolor: #ccc !important;\r\n}\r\n.media, .media-body {\r\n\tbackground: #262626 !important;\r\n\tborder-radius: 5px !important;\r\n}\r\n.table-striped>tbody>tr:nth-child(odd)>td, .table-striped>tbody>tr:nth-child(odd)>th {\r\n\tbackground: #3c3c3c !important;\r\n}\r\n.topic-message {\r\n\tborder: none !important;\r\n\tborder-radius: 5px !important;\r\n\tbackground: #202020 !important;\r\n}\r\n.pager li>a, .pager li>span {\r\n\tbackground: #202020 !important;\r\n\tborder: 1px solid #313131 !important;\r\n}\r\n.btn-link {\r\n\tbackground: #242424 !important;\r\n\tborder-radius: 5px;\r\n}\r\n.btn-primary {\r\n\tbackground: #dd4814 !important;\r\n}\r\n.comment-reply {\r\n\tbackground: #2c2c2c !important;\r\n\tborder-radius: 3px !important;\r\n}\r\n.btn-default {\r\n\tborder-color: #202020 !important;\r\n}\r\n.parent-message {\r\n\tbackground: #2c2c2c !important;\r\n}\r\n.alert-warning {\r\n\tbackground: #3c3c3c !important;\r\n\tborder-color: #a9a9a9 !important;\r\n}\r\n.label-great {\r\n background: #8E4D00;\r\n}\r\n\r\n/* vimmium styles */\r\ndiv.internalVimiumHintMarker {\r\n \tborder: black !important;\r\n\tbackground: rgb(78, 146, 255) !important;\r\n}\r\ndiv.internalVimiumHintMarker span {\r\n color: black !important;\r\n text-shadow: none !important;\r\n}\r\ndiv.internalVimiumHintMarker {\r\n\tcolor: red !important;\r\n}\r\ndiv.internalVimiumHintMarker > .matchingCharacter {\r\n\tcolor: white !important;\r\n}\r\n/* 14.11.2015 12:35 */" + } + ], + "name": "KeyHero: Dark Reign", + "originalDigest": "74af3625a2069f9717126deec918ef9d35e35d0a", + "id": 5 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/169544.json", + "md5Url": "https://update.userstyles.org/169544.md5", + "url": "http://userstyles.org/styles/169544", + "originalMd5": "98c3766882c44152c5b3afc51fc7327e", + "installDate": 1566107759034, + "sections": [ + { + "code": "body {\n background-color: #1E2029!important\n}\ndiv.grid_page,\ndiv[class*=\"side_bar\"],\ndiv[class*=\"sidebar\"],\ndiv[class*=\"Sidebar\"] {\n background-color: #1E2029!important\n}\ndiv.Toggle.ContentPageFeed.SimpleToggle {\n background-color: #1E2029!important\n}\n.SiteHeader {\n background-color: #282a36!important;\n border-bottom: 1px solid #373844!important\n}\nspan.expanded {\n color: gainsboro!important\n}\nspan.expanded:hover {\n color: #6272a4!important\n}\n.ui_qtext_rendered_qtext,\n.rendered_qtext {\n color: #b6b6c2!important\n}\ndiv.AmaSelfServeQuestionsPrompt {\n background-color: #1E2029!important\n}\n.selector_input.text {\n color: gainsboro!important\n}\ndiv[class*=\"story\"],\ndiv[class$=\"answer\"] {\n background-color: #282a36!important\n}\ndiv[id$=\"item\"] {\n background-color: #282a36!important\n}\n.container,\ndiv[class*=\"bundle\"] {\n background-color: #282a36!important\n}\n.comments_preview_toggle,\n.answer_auto_expanded_comments,\n.show_child_link {\n background-color: #282a36!important\n}\n.BetterUserHoverMenuContents,\n.BetterTopicHoverMenuContents.ObjectCard {\n background-color: #1E2029!important\n}\na.user,\n.NameCredential,\n.TopicName,\n.header_text_main,\n.user,\n.prompt_title,\ndiv[class^=\"answer\"] {\n color: lightgrey!important\n}\n.layout_1col_main_card,\n.layout_1col_secondary_card {\n background-color: #282a36!important\n}\n.grid_page h3 {\n color: #b6b6b2!important\n}\n.AboutListItem .main_text,\n.UserCredential {\n color: #b6b6b2!important\n}\n.icon_action_bar.sticky,\n.hover_menu_title {\n background-color: #282a36!important\n}\n.hover_menu_contents,\n.Notif {\n background-color: #1E2029!important;\n color: white!important\n}\n[class*=\"LookupBarResults\"] {\n background-color: #1E2029!important;\n color: #f8f8f2!important\n}", + "regexps": [ + "https?://(www|blog).quora.com.*" + ] + } + ], + "name": "Quora - Dark focused mode", + "originalDigest": "fabde60a33e2fc6a17c8c3f585c652854c631728", + "id": 6, + "updateDate": 1581131678066 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/124693.json", + "md5Url": "https://update.userstyles.org/124693.md5", + "url": "http://userstyles.org/styles/124693", + "originalMd5": "963068df63c3ae5642decc633d44f6d0", + "installDate": 1572046592546, + "sections": [ + { + "urls": [], + "urlPrefixes": [], + "domains": [ + "stackexchange.com", + "superuser.com", + "askubuntu.com" + ], + "regexps": [], + "code": "/* @-moz-document regexp(\"^https?://((chat|meta)\\.)?((tex|math|unix)\\.)?stackexchange\\.com.*\") { */\r\n /***************************************************************\r\n \r\n \r\n Worlbuilding Dark v0.9.1 (05/10/2014)\r\n\r\n - 0.9.1\r\n - fixed answered questions not showing up with a different color\r\n \r\n based on:\r\n \r\n StackOverflow Dark v2.5.7 (10/2/2014)\r\n https://github.com/StylishThemes/StackOverflow-Dark\r\n http://userstyles.org/styles/35345\r\n\r\n this is still quite crude\r\n \r\n the logo image is made by me ivycarp@gmail.com from a public domain\r\n image created by NASA that you can find on Wikipedia\r\n ****************************************************************/\r\n \r\n /***** Modifications by Abhishek Chakraborty *****/\r\n \r\n /*** codereview.stackexchange.com ***/\r\n #question-header {\r\n background-color: #232323;\r\n }\r\n \r\n #mainbar {\r\n background-color: transparent;\r\n }\r\n \r\n #sidebar .module:not(.community-bulletin) {\r\n background-color: transparent;\r\n }\r\n \r\n #sidebar .ad-container {\r\n background-color: #232323;\r\n }\r\n \r\n div.ad > a > img {\r\n filter: invert(100%);\r\n }\r\n \r\n #footer #footer-menu {\r\n background-color: transparent;\r\n }\r\n \r\n /*** askubuntu.com ***/\r\n \r\n #footer .footerwrap {\r\n background-color: transparent;\r\n }\r\n \r\n /***************************************************/\r\n \r\n\r\n * {\r\n border-color: #444 !important;\r\n text-shadow: none !important;\r\n box-shadow: none !important;\r\n }\r\n\r\n #content{\r\n background-color: rgba(255,255,255,0);\r\n }\r\n \r\n .mention{\r\n background-color: #666;\r\n color: #111;\r\n }\r\n .reviewed-action{\r\n background-color: #444 !important;\r\n color: #00aa00 !important;\r\n \r\n }\r\n span.comments{\r\n color: #aaa !important;\r\n }\r\n div.cp div{\r\n border: 0px !important;\r\n }\r\n .bottom-notice{\r\n background-color: #222;\r\n }\r\n #promo-box{\r\n background-color: #222;\r\n }\r\n table.history-table tbody tr span[style*=\"color:maroon;\"]{\r\n color: red !important;\r\n }\r\n div.question-summary.narrow:not(.tagget-interesting) div.cp div{\r\n background: none !important;\r\n }\r\n div.status.answered-accepted > *{\r\n color: #4C9067 !important;\r\n }\r\n div.status.answered-accepted{\r\n border: 1px solid #4C9067 !important;\r\n width: 46px !important;\r\n height: 36px !important;\r\n }\r\n\r\n body, .container, #footer {\r\n background-color: #191919 !important;\r\n background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAgMAAAANjH3HAAAACVBMVEUaGhohISElJSUh9lebAAAB20lEQVRIx4XWuZXDMAwE0C0SAQtggIIYoAAEU+aKOHhYojTrYP2+QfOW/5QIJOih/q8HwF/pb3EX+UPIveYcQGgEHiu9hI+ihEc5Jz5KBIlRRRaJ1JtoSAl5Hw96hLB1/up1tnIXOck5jZQy+3iU2hAOKSH1JvwxHsp+5TLF5MOl1/MQXsVs1miXc+KDbYydyMeUgpPQreZ7fWidbNhkXNJSeAhc6qHmHD8AYovunYyEACWEbyIhNeB9fRrH3hFi0bGPLuEW7xCNaohw1vAlS805nfsrTspclB/hVdoqusg53eH7FWot+wjYpOViX8KbFFKTwlnzvj65P9H/vD0/hibYBGhPwlPO8TmxRsaxsNnrUmUXpNhirlJMPr6Hqq9k5Xn/8iYQHYIuQsWFC6Z87IOxLxHphSY4SpuiU87xJnJr5axfeRd+lnMExXpEWPpuZ1v7qZdNBOjiHzDREHX5fs5Zz9p6X0vVKbKKchlSl5rv+3p//FJ/PYvoKryI8vs+2G9lzRmnEKkh+BU8yDk515jDj/HAswu7CCz6U/Mxb/PnC9N41ndpU4hUU7JGk/C9PmP/M2xZYdvBW2PObyf1IUiIzoHmHW9yTncliYs9A9tVNppdShfgQaTLMf+j3X723tLeHgAAAABJRU5ErkJggg==) !important;\r\n background-clip: border-box !important;\r\n background-origin: padding-box !important;\r\n background-repeat: repeat !important;\r\nbackground-size: auto !important;\r\nbackground-position: left top !important;\r\n background-attachment: scroll !important;\r\n }\r\n\r\n /* === custom color === */\r\n a, .profile-popup a, .seWrapper a, .post-tag, .comments-link, .tag-synonym-link {\r\n color: #4183C4 !important\r\n }\r\n/*\r\n .nav .primarynav li a:hover {\r\n color: #fff !important;\r\n background: #4183C4 !important;\r\n }\r\n*/\r\n \r\n .post-tag:hover, .comments-link:hover, .summary .post-tag:hover , .commentslink, .bounty-indicator,\r\n .bounty-indicator-tab, .bounty-award {\r\n background-color: #4183C4 !important;\r\n color: #eee !important;\r\n }\r\n\r\n /* === text selection === */\r\n ::selection {\r\n background: #4183C4 !important;\r\n color: #fff !important;\r\n }\r\n ::-moz-selection {\r\n background: #4183C4 !important;\r\n color: #fff !important;\r\n }\r\n\r\n /* === input focus hightlight === */\r\n input:focus {\r\n border-color: #4183C4 !important;\r\n box-shadow: 0px 1px 2px rgba(255, 255, 255, 0.075) inset, 0px 0px 5px rgba(255, 255, 255, .075) !important;\r\n }\r\n .tag-editor input:focus {\r\n border: 0 !important;\r\n box-shadow: none !important;\r\n }\r\n\r\n /* === hidden === */\r\n div.hireme, div#hireme {\r\n display: none !important;\r\n }\r\n\r\n /* === background color === */\r\n /* from darkest to lightest grey */\r\n .search-container input[type=text] {\r\n background-color: #000 !important;\r\n }\r\n\r\n #custom-header, .review-bar, .diff-choices a.selected, #header #topbar, td.owner, a.owner, .question-status,\r\n .profile-popup, .profile-popup div, .profile-popup th, .profile-popup td, #global, .actual-edit-overlay,\r\n input:not([type='submit']), textarea, #search input, .tag-editor {\r\n background-color: #111 !important;\r\n color: #ddd !important;\r\n }\r\n\r\n .summary .post-tag, .onebox, .profile-ad {\r\n background: #151515 !important;\r\n }\r\n\r\n html, blockquote, #post-preview, .nav .primarynav li a, #container, #hsearch .textbox, .form-item, .grippie,\r\n .welovestackoverflow, #wmd-button-bar, .wmd-button-bar, .qa-block, .content-block, .user-info-rep, .sidebar,\r\n .popup {\r\n background: #191919 none !important\r\n }\r\n\r\n .authcomment, .seIntro, .seFooter {\r\n background-color: #191919 !important;\r\n border: 2px solid #262626 !important;\r\n }\r\n\r\n #tabs a {\r\n border: 1px solid transparent !important;\r\n }\r\n\r\n #tabs a.youarehere, .tag-suggestions {\r\n background: #191919 !important;\r\n border: 1px solid #444 !important;\r\n }\r\n \r\n .nav .youarehere{\r\n font-weight: bold !important;\r\n background: none !important;\r\n color: blue !important;\r\n }\r\n\r\n #user-about-me, .user-about-me, .mine .messages {\r\n background: #191919 !important;\r\n border: 0px !important;\r\n color: #C1BEBA !important;\r\n }\r\n\r\n .topbar-dialog .header, .topbar-dialog .modal-content li:hover, .share-tip,\r\n #tag-menu, .sidebar h3, #overlay-header, .action-list .action-selected, .switcher-nudge-lightbox,\r\n .user-rep-chart-summary-tooltip:hover, #footer {\r\n background-color: #222 !important;\r\n color: #ddd !important;\r\n }\r\n\r\n .profile-popup, .profile-popup tr, .profile-popup th, .profile-gravatar, .newuser, .roomcard,\r\n .seWrapper, h2.index.header, .privilege-table-row:hover {\r\n background-color: #222 !important;\r\n border-color: #555 !important;\r\n color: #ddd !important;\r\n }\r\n\r\n #header #topbar, .revision-comment, .date-span, .post-tag, .form-submit input, .preferred-login,\r\n .mdhelp, .wmd-help-button.active-help, .date_brick, .more-info {\r\n background: #222 !important;\r\n color: #ddd !important;\r\n -webkit-border-radius: 3px !important;\r\n border-radius: 3px !important;\r\n }\r\n\r\n .ad502-room, .messages, .messages,.topbar-dialog .unread-item {\r\n background-color: #232323 !important;\r\n border: 1px solid #191919 !important;\r\n }\r\n\r\n .rep-recent-row, .bounty, .diff-choices a:hover, div.meter, .narrow .votes, .stats, .ob-post-votes {\r\n background-color: #232323 !important;\r\n color: #bbb !important;\r\n }\r\n\r\n .answer, #system-message, .commentlist, .revision td, #hero-content, .mdhelp-tabs .selected, .tabs .selected {\r\n background: #232323 !important;\r\n color: #999 !important;\r\n }\r\n\r\n .tagged-interesting, .tagged-interesting .views, .highlight-row, .highlighted {\r\n background-color: #242424 !important;\r\n background-image: none !important;\r\n }\r\n\r\n /*.nav li,*/ .seNav, .topbar a.topbar-icon-on, .topbar a.topbar-icon-on:hover, .topbar-dialog, .owner,\r\n .module li.current, .seCurrent, .community-bulletin, .owner-revision td, .markdown-diff .skip,\r\n #footer .container, .current-site-container, .body-diffs .skip, .newsletter-anon, .tag-suggestions>div:hover {\r\n background-color: #333 !important;\r\n }\r\n\r\n .owner-answer, .question-status, #input-area, .notification, #feed-ticker, #top-menu, .vote-revision td {\r\n background: #404040 !important;\r\n }\r\n\r\n tr.comment:hover, .reply-parent, .timestamp, .usercard, .page-numbers.current,\r\n .comment-help, .answer-help-background, .mdhelp-tabs, .tabs li, .hi, .seNavLinks a:hover,\r\n .seNavLinks a:focus, .itemBoxNew {\r\n background-color: #444 !important;\r\n color: #ddd !important;\r\n }\r\n\r\n #post-text-container div span {\r\n background: #c1beba !important\r\n }\r\n\r\n /* === Brown(ish) === */\r\n .new-post-activity, #new-answer-activity {\r\n background-color: #840 !important;\r\n }\r\n\r\n /* chat room buttons */\r\n a.button {\r\n background: #840 !important;\r\n color: #eee !important;\r\n }\r\n\r\n .supernovabg, .hotbg, /*.nav .youarehere,*/ /*.nav li:hover,*/ a.button:hover {\r\n background-color: #d80 !important;\r\n }\r\n\r\n /* === Green === */\r\n .accepted-answer, .suggested-edit .inserted, .markdown-diff .inserted {\r\n background: #232 !important;\r\n }\r\n\r\n .answered, .answer-votes {\r\n background: #232323 !important;\r\n /*color: #4b553c !important*/\r\n color: #00aa00 !important\r\n }\r\n\r\n .answered-accepted, .answered-accepted strong, .rep-up.bounty-indicator-tab, .user-rep-chart-summary-bar {\r\n background: #4b553c !important;\r\n color: #fff !important;\r\n border: none !important;\r\n }\r\n\r\n .answered strong {\r\n color: #4b553c !important\r\n }\r\n\r\n /* === Red === */\r\n .deleted-answer, .suggested-edit .deleted, .markdown-diff .deleted {\r\n background-color: #200 !important;\r\n }\r\n\r\n a.moderator-tag {\r\n background-color: #400 !important;\r\n }\r\n\r\n a.moderator-tag:hover {\r\n background-color: #600 !important;\r\n }\r\n\r\n /* === Transparent background === */\r\n div.message .meta, .spaces, .comment, span.feed-icon, a.role-switch, .nav.careers li, .nav.careers li:hover,\r\n .switcher-nudge-content p {\r\n background-color: transparent !important;\r\n }\r\n\r\n #tabs a:hover {\r\n background-color: transparent !important;\r\n border: 1px solid #666666 !important;\r\n border-bottom: 1px solid #444 !important;\r\n }\r\n\r\n .highcharts-container rect[fill=\"#FFFFFF\"], rect[fill=\"rgb(255, 255, 255)\"] {\r\n fill: transparent !important;\r\n }\r\n\r\n /* === Dark border === */\r\n .body-diffs table * {\r\n border-color: #111 !important;\r\n }\r\n\r\n a.required-tag, .welovestackoverflow, .question-summary {\r\n border-color: #333 !important;\r\n }\r\n\r\n #tabs a.youarehere {\r\n border-bottom: 1px solid #191919 !important;\r\n }\r\n\r\n /* === No/hide border === */\r\n div.list > div {\r\n border-right: 0 !important;\r\n }\r\n\r\n .module {\r\n border-color: transparent !important;\r\n }\r\n\r\n /* blue label count */\r\n .bounty-indicator-tab {\r\n background: #07d !important;\r\n color: #ccc !important;\r\n }\r\n\r\n /* === Text Color === */\r\n div, input, .accepted-answer .post-text, .accepted-answer .user-action-time, #question-header a,\r\n .post-text, .user-info, .topbar-dialog .header h3, .topbar-dialog .header h3 a, .topbar-dialog span,\r\n .search-result .answered .vote-count-post strong, .votes-cast-stats th {\r\n color: #ddd !important;\r\n }\r\n\r\n /* placeholder */\r\n ::-webkit-input-placeholder {\r\n color: #ddd !important;\r\n }\r\n ::-moz-placeholder {\r\n color: #ddd !important;\r\n }\r\n\r\n .user-details td, .content-page, h2, h2 a, .profile-popup a:hover, .module h4, .page-description,\r\n #openid_identifier, .form-item label {\r\n color: #c1beba !important\r\n }\r\n\r\n .comment, #top-menu a, .subheader a, .reputation a, .reputation-score, a:visited, .relativetime.old,\r\n .votes-cast-stats td {\r\n color: #aaa !important;\r\n }\r\n\r\n .answered-accepted strong, .youarehere, .nav .primarynav li a, .nav a, a:hover, .rep-up.special-rep {\r\n color: #fff !important\r\n }\r\n\r\n input, .actual-edit-overlay {\r\n -webkit-text-fill-color: #fff !important;\r\n }\r\n\r\n .rep-up {\r\n /*color: #4b553c !important;*/\r\n color: #00dd00 !important;\r\n }\r\n .rep-down {\r\n color: #d65 !important;\r\n }\r\n\r\n /* dark blue */\r\n .result-highlight {\r\n color: #aa0 !important;\r\n }\r\n\r\n /* brown/dark orange */\r\n .warm {\r\n color: #840 !important;\r\n }\r\n\r\n /* orange */\r\n .hot {\r\n color: #a20 !important;\r\n }\r\n\r\n /* light brown */\r\n .unanswered {\r\n color: #9a4444 !important;\r\n }\r\n\r\n /* === Style adjustments === */\r\n a.question-hyperlink, a:hover, a:visited {\r\n text-decoration: underline !important;\r\n }\r\n\r\n .nav a, .post-tag, .comments-link, .tag-synonym-link, a.post-tag:hover, .topbar a {\r\n text-decoration: none !important;\r\n }\r\n\r\n .post-tag, .comments-link, .tag-synonym-link {\r\n margin: 2px !important;\r\n padding: 3px !important;\r\n font-size: 80% !important;\r\n line-height: 2.2 !important;\r\n white-space: nowrap !important\r\n }\r\n\r\n .stats {\r\n float: right !important;\r\n margin-top: 5px !important;\r\n }\r\n\r\n #hsearch, .statscontainer {\r\n margin-right: 5px !important;\r\n }\r\n\r\n .stats {\r\n margin-bottom: 4px !important;\r\n }\r\n\r\n .nav .primarynav li a {\r\n display: block !important;\r\n float: left !important\r\n }\r\n\r\n /* === badges === */\r\n a.badge[title^=\"bronze\"], a.badge-tag[title^=\"bronze\"], .badge3 + .badgecount {\r\n color: #cc9966 !important;\r\n }\r\n a.badge[title^=\"silver\"], a.badge-tag[title^=\"silver\"], .badge2 + .badgecount {\r\n color: #c5c5c5 !important;\r\n }\r\n a.badge[title^=\"gold\"], a.badge-tag[title^=\"gold\"], .badge1 + .badgecount {\r\n color: #ffcc46 !important;\r\n }\r\n .badge-tag {\r\n background-color: #191919 !important;\r\n border-color: #111 !important;\r\n }\r\n\r\n /* === code & syntax highlighting === */\r\n pre, code, .pln, .youarehere {\r\n background: #333 !important;\r\n color: #ccc !important;\r\n }\r\n\r\n .str { color: #0a0 !important; }\r\n .lit { color: #d65 !important; }\r\n .pun { color: #999 !important; } /* parenthesis */\r\n .kwd { color: #08f !important; } /* keyword */\r\n .tag { color: #999 !important; } /* html tag */\r\n .atn { color: #088 !important; } /* attribute */\r\n .atv { color: #0a0 !important; } /* attribute value*/\r\n .dec { color: #90a !important; } /* doc type */\r\n\r\n /* === Images === */\r\n .wmd-button>span {\r\n background-image: url(http://StylishThemes.github.io/StackOverflow-Dark/images/wmd-buttons.png) !important;\r\n }\r\n\r\n .statsarrow {\r\n width: 7px !important;\r\n height: 13px !important;\r\n background: url('data:image/gif;base64,R0lGODlhBwANAIAAACMjI////yH5BAEAAAEALAAAAAAHAA0AAAITRI5gGLrnXlzT1NsidEkx/zFHAQA7') 0 0 !important;\r\n }\r\n\r\n #hlogo img, .everyonelovesstackoverflow, #newsletter-ad { opacity: 0.3 !important; }\r\n\r\n /* chat domain logo */\r\n #header-logo a {\r\n display: block;\r\n width: 150px !important;\r\n height: 36px !important;\r\n background-size: cover !important;\r\n background-position: 0 -2px !important;\r\n }\r\n\r\n #header-logo img {\r\n display: none;\r\n }" + }, + { + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "^https?://(chat.)?worldbuilding.stackexchange.com.*" + ], + "code": "#hlogo a {\r\n /* background-image: url(http://StylishThemes.github.io/StackOverflow-Dark/images/logo.png) !important; */\r\n /* background-image: url('data:image/png;base64,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') !important; */\r\n /*\r\n width: 250px;\r\n height: 61px;\r\n font-size: 0px;*/\r\n }" + }, + { + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "^https?://meta.worldbuilding.stackexchange.com.*" + ], + "code": "#hlogo a {\r\n /* background-image: url(http://StylishThemes.github.io/StackOverflow-Dark/images/meta-logo.png) !important; */\r\n /* background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO4AAAA9CAMAAACdmqWRAAAAk1BMVEUAAAD///////////////////////////////////////////////////+MiYaLiISJhoKKh4OHhICIhYGLh4SMiISKh4OHhYGIg34IAAAUAAAHAAAOAACLiokKAAARAACMh4JsAACDg4OHgnyBfnqLiomMioeOiIQpAABfAABmAAAbAABXAABOAAA/AAA0AABIAADInvqVAAAAIXRSTlMA6RGs1cFmVSJ3M5mIRCYRSeafz4q6elwzQfEXp29ix2ZyYf0pAAAIQElEQVRo3uSXW27iQBBF7wr8woABCyhhQT9s4/2vbqguFzFkPiZGDSPlfCSNZaSc1O3qavwjybFI8Fso8/xyyfBbWF5urPAGavwHlKy7RHw6avF5MtbNER9HtMFnyFIo1YVJEZsNEe3wCZLlqYSSBt0KsdnedPEJjqcbX3456x4RG09k8QGqE5M/tuYSsTH0oVZVBN8CI6v3tOaeqMMnSPPgm72tNavugI+QSZxTBJILkyAG+x2UjqjHFztjtngT5TTOKfeqGGPktSWi1khf5vUVir/JvzHci2mcl7Nbs2mpx64b//DNYNlOaUno+UXnjB/cDQuEbwgbvIXqFJA4F6xbzJB1XLGaGAsYtRMsP9xZIvKAde46GMfwCSy8rb4a5yWY47zWbIkZSGivquDB8Ecj/4MW8MaTdVdzA3D8tY0nBtHI0u9xDhHO5o2Rrfo5Fn+u2CgepA7gReuuYMwYgTaqbtI06+nHUyB5oTXXLpR1i7142tqMuR41N2NwjVTbiG4/vtNH1S2apllU01GSWfBybmvuubSSa8ks5PfEpZbt/KyrhXeIRNYEigTKMviWL9zwe+1MrUbWapi7sbobibfu5aluTUO8KXrRjNy10lOg0hv+PF2jugNUVxYM/zTPuuis7cONsI+nm919F2t9pHE+zhgjtelsVdfrope7vHCFf9RVvPcS/FiscxUuquldoZx1w9d+BLXch8KpLjGmDm8Z803XW9L9Ho101ShFOrkrVAjVTfBTDnrqtFNvo9UdoDzrDlz3PvqYkRTqm68lzoF0tcqSFD9mR+TV0kG3rNFF+5d9Pnm9jqv7vIUzjXOZYiaO7KNuiLDWz0LYPOrqTj9IACKzbhg9lPLTosJs7JPu/j5EetLtDEM2+Kuutij/Fl2kRaOsUJV4gY7sPcOSbu3VeBA/iG4PRldDLN2kWCWYUH0lOsULeD04nejKUFHfE9tpwTnMnRU5PawMxdJdn8/nvFgn3w+lAq/Qt6K7G5VwGGcpTXPvvRy+96vRwcLKABKwiEBxFhaiPDmUUrzClaurlp4f6CKslRY6PNs/3JjZbqswEIbBgxcMBqchjdQjcnGkSCkKUd//6TpjM1Vw94Qu6n/D8A8Z+4sX4uDI0rv5aw+8K2Jl5FvfPr2UttdUPeCZ/TCMBz7X3+1CwLxs83n/NN2y/0AGjfzSahiVtY5L2V81lXdISwqzk0/6M95/p+Nw/4A3/P/UPR6NTxgch2G8oytvbIuq9bfrBJiX8jI6nMbxOI7DOGn34d8p/F0srWZ78wwZt+W/LERezUY4++tqm7N5fbNERWtFtqiEVkqLzFhrTfYp/Ue9sZS3/MQ1ynO9KG2ZowohAC/qEty2adpnyLSU21+IG2gZt7wEt9/v96v1puv63p+TU/Q6roBCfz+uKRbBZUXyTdd737yDW+Q/gOsIVlmbXY7b7V9W9wtxFQ0tBZfjbl7B7b8MVxgjpgjFLoZpnm2yhHgDV2Cew7M6M49Hd/VRXGGsNWIKi1xxYfbnDya4jCN0JYtC1hZjUwGAjtkaQ0WR43wQ2c7WaIE2riZc7dwc1yiQhQRFTWpAiViRazvyDMPQ3ux933Wb9Tm5T3E10EYhKy0yUUlsF6CixmqJPnbQMJcKRmVnuCVAJMwnldgp6nQV0pYshx+e5SNWVUSHU8lW5eRkS8d1uGIEr0OUTtWEvElwS2ICKl1nBgKhBGwMIwnhPrSCOQwDsI64vOoUd58Ue6vpKp5WJUaIxKqT50G/iEsdYB+H/bH1Mkt6GwSCsFlmYbtE7n/IBJq2iP9SOaoKL4YBjfpjRgOGQJ5Za8sFawHz/etmUSweY6xd/ExmDTL+dNxykB2PrB59pNDiG9dODTkhHhUHixGrb/7UuyBIxJWUQ3KXvAaSDtwocImpuEIp2yO22OHrGW4Ljcm6S5ViaL5/kUQ6f5DTEdFFBFrEUyFIjXFhNQQzUVJFIHpEioRE0SVG7z5dIrSR3y7Ppu7R+6LC2OER2WzYB8L8umkn7vSv95WZG7A2u/+ozFXWe88vq0PD2NmskOZIaa6cWJi4P4jKhsFWFkTbsBTgDYnzCPeVQv+CK6EsmfUT1yUIUgAbzaBkpzioX/NMoil+cOIWlzDstbchAVfhyZ7gstb4F1wIjh+4U5ptJ4wV4lgRnIaRbxxZLSyR33HZgau0t3R57DLfVuH7CS5fkCU1jQcuDlIKLFNQ/sDVnbc/cUNl0i47Uvxs+hhX9r3a58pR2GuvJ7g8TgOanbhOa7jBlZA1h36Du4qTJXj9H7iwaJpbXOdcQko/q8y8LdmErsDd75URj2T+xF0gBWjHt4sU4w6cg1bfLT7BxW3i8NhXZRD6fo77IhZwITvX0z5C8A9c1OsUrwIFcPScVyZYoZjtOy4LFHuHx4GA0+Vj3PMEJq7taBHXYT9wO5ZdJ74yKAnuKI7zA+7GP+DSVH/4RhZV+C7PcSOocCTxlD1xHW7bZQCuEaqy3pVa26XCKI5Ks3n0IcHucLlJMjyCSMxNyI2YYpt5fSPM97ZpW6p/3Z4S0rOSJzboqjk0n2MTIy4yLG02NnEeaRTHcGRZNrvBRQ9MAGdrh5PxJpfXM1xQ5KZms+S1COHSy6Kc9iJHduWuBeuOf0TolfM+j9YZAGJwwT0uJoDr6PHKyJiyImLRE1zwJqrokfpDvt6WizA7BZa57sKNsouvbGmVDJXi+PS14B735Y0k3jOFHRvYL/LxEBd6q/bWujkNbmrTPsofs/rLlDXaemsFA1UnlWo9ZiFtr1FGGv5667oXmO7H6EPtrcfwHJRNBWyuytH404Wn33iFQHtUqeywAAAAAElFTkSuQmCC') !important; */\r\n }" + } + ], + "name": "StackExchange Dark", + "originalDigest": "ce78ad218ea4e735ac86babbd088cf6709dfa384", + "id": 9 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/118568.json", + "md5Url": "https://update.userstyles.org/118568.md5", + "url": "http://userstyles.org/styles/118568", + "originalMd5": "badf151eede9eb53f25c70bab174e664", + "installDate": 1574150561677, + "sections": [ + { + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "https?://([^:]+)(:[0-9]+)?/transmission/web/.*" + ], + "code": "@namespace url(http://www.w3.org/1999/xhtml);\n* {\r\n background-color: transparent !important;\r\n color: inherit !important;\r\n border-color: var(--border-color) !important;\r\n }\r\n \r\n body, div.dialog_container div.dialog_window, .inspector-tab, div#jqContextMenu ul, .ui-widget-content {\r\n background-color: var(--background-color) !important;\r\n color: var(--foreground-color) !important;\r\n }\r\n \r\n div#toolbar, #statusbar, div.torrent_footer, .ui-widget-header {\r\n background-color: var(--background-color) !important;\r\n background-image: var(--gradient-header) !important;\r\n }\r\n\r\n div.dialog_container div.dialog_window a {\r\n background-color: var(--background-color) !important;\r\n background-image: var(--gradient-button) !important;\r\n }\r\n div.dialog_container div.dialog_window a:hover, div.dialog_container div.dialog_window a:active {\r\n background-color: var(--background-color) !important;\r\n background-image: var(--gradient-button-selected);\r\n border-color: var(--border-color-selected) !important;\r\n }\r\n\r\n .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {\r\n background-color: var(--background-color) !important;\r\n background-image: var(--gradient-tab);\r\n }\r\n .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {\r\n background-color: var(--background-color) !important;\r\n background-image: var(--gradient-tab-selected) !important;\r\n border-color: var(--border-color-selected) !important;\r\n }\r\n \r\n ul {\r\n list-style: none;\r\n }\r\n \r\n ul.torrent_list li.torrent.even {\r\n background-color: rgba(255, 255, 255, 0.1) !important;\r\n }\r\n ul.torrent_list li.torrent.selected, ul.torrent_list li.torrent.selected.even, div#jqContextMenu ul li:hover {\r\n color: var(--foreground-color-selected) !important;\r\n border-color: var(--border-color-selected) !important;\r\n }\r\n \r\n\r\n \r\n div.inspector-tab.selected { border-color: var(--border-color-selected) !important; }\r\n #inspector-tab-files { background-image: var(--tab-files), var(--gradient-button) !important; }\r\n #inspector-tab-files.selected { background-image: var(--tab-files), var(--gradient-button-selected) !important; }\r\n #inspector-tab-info { background-image: var(--tab-info), var(--gradient-button) !important; }\r\n #inspector-tab-info.selected { background-image: var(--tab-info), var(--gradient-button-selected) !important; }\r\n #inspector-tab-peers { background-image: var(--tab-peers), var(--gradient-button) !important; }\r\n #inspector-tab-peers.selected { background-image: var(--tab-peers), var(--gradient-button-selected) !important; }\r\n #inspector-tab-trackers { background-image: var(--tab-trackers), var(--gradient-button) !important; }\r\n #inspector-tab-trackers.selected { background-image: var(--tab-trackers), var(--gradient-button-selected) !important; }\r\n\r\n div.torrent_footer div.selected { border-color: var(--border-color-selected) !important; }\r\n div.torrent_footer div.main_container { display: none; }\r\n #prefs-button { background-image: var(--button-prefs), var(--gradient-button) !important; }\r\n #turtle-button { background-image: var(--button-turtle), var(--gradient-button) !important; }\r\n #turtle-button.selected { background-image: var(--button-turtle), var(--gradient-button-selected) !important; }\r\n #compact-button { background-image: var(--button-compact), var(--gradient-button) !important; }\r\n #compact-button.selected { background-image: var(--button-compact), var(--gradient-button-selected) !important; }\r\n\r\n div.file-priority-radiobox > div.selected { border-color: var(--border-color-selected) !important; }\r\n div.file-priority-radiobox > div.low { background-image: var(--priority-low), var(--gradient-button) !important; }\r\n div.file-priority-radiobox > div.low.selected { background-image: var(--priority-low), var(--gradient-button-selected) !important; }\r\n div.file-priority-radiobox > div.normal { background-image: var(--priority-normal), var(--gradient-button) !important; }\r\n div.file-priority-radiobox > div.normal.selected { background-image: var(--priority-normal), var(--gradient-button-selected) !important; }\r\n div.file-priority-radiobox > div.high { background-image: var(--priority-high), var(--gradient-button) !important; }\r\n div.file-priority-radiobox > div.high.selected { background-image: var(--priority-high), var(--gradient-button-selected) !important; }\r\n \r\n :root {\r\n --background-color: #333;\r\n --border-color: #222;\r\n --border-color-selected: #666;\r\n --foreground-color: rgba(255, 255, 255, 0.8);\r\n --foreground-color-selected: rgba(0, 255, 0, 0.8);\r\n --gradient-to-top: linear-gradient(to top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1));\r\n --gradient-to-bottom: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1));\r\n --gradient-selected: linear-gradient(to right, rgba(0, 255, 0, 0.2), rgba(0, 255, 0, 0), rgba(0, 255, 0, 0.2));\r\n\r\n --gradient-header: var(--gradient-to-top);\r\n --gradient-button: var(--gradient-to-top);\r\n --gradient-button-selected: var(--gradient-to-top), var(--gradient-selected);\r\n --gradient-button-selected: var(--gradient-to-bottom);\r\n --gradient-tab: var(--gradient-to-bottom);\r\n --gradient-tab-selected: var(--gradient-to-top);\r\n\r\n /* Images */\r\n --priority-high: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAwUlEQVQokcXQMYoCMBAF0I9mqmRIkUkRkibpkiY38Bja7RU8hMcQPIedeCdLYWxUlhXBRvbDr+bBMAP8S+achznn4RO77L3vxhg6xtDe+w7A8h1e1Fr3rTX93VrrHsDiRaeUTqUUzTlrzvnnXi2laErp9ITMHEIIRxFREbnEGNePWYxxLSIXEdEQwpGZA6y1Z2ZW59zVe7/5u9l7v3HOXZlZrbVnENGWiNQYs3p3nDFmRURKRFsAMADaBx9sd/vl3ACk0StFsQlurQAAAABJRU5ErkJggg==\");\r\n --priority-normal: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAASklEQVQokWNgGIlAVFRURVZW9qmMjMwDfFhWVvadiIiIFIOEhISWpKTkfyKxPIOIiAiviIhIk4iISD0+LCoq2i4oKMg/0CFCDQAAK2Qigs7t83QAAAAASUVORK5CYII=\");\r\n --priority-low: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAwUlEQVQokb3QQQoCMQwF0FBn064KQlMoE4rQQKG5gseY2XkFDzHHGPAc7sQ7uRTiRl0Myqz0QzbhEZIA/COdiOzW0NN00Fo7iojWWvffcK11LyLaWjsCM1+ZWUsp95zzuMQ557GUcmdmZeYrpJS2RHQmIu37/kZEwwsT0fDsKRGdU0rb9yREvCCixhg1hHAIIRxijIqIioiXT6sa7/3svddFzQBgvt23cc5N1lq11qpzbgKAzdoHwRhzMsacVuFP8gCN6y5Xkv6lMgAAAABJRU5ErkJggg==\");\r\n\r\n --button-turtle: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAYAAADwdn+XAAAAmklEQVQokY3PPQoCUQwE4E9sFEsbK8FOEES0trT0FLZ2Woi9XkTY4l3DO1haCHoJwWfzFtafXR0IhGQyk+ETLayQ4YDlF04pRrgjvtUZzQKvgc77cTuRH18EIq4YYFaYbYsCl4rjMuE9dHH64Z7XDTvM0cud+9jg+Id7M8ZYewkeQqinNkukBcYYpszTlD8ms1IETCr26/T6C54Bx0EzYFeoXQAAAABJRU5ErkJggg==\");\r\n --button-prefs: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAA7klEQVQokZWP0YmEMBCG5yEkEMEwQsDgihIhAcEYK70SUsKVsCWkhCvhSph7MYcPruv+8MEQ5mPyA9xIjDFt20Yxxp87+/9ZliWFECiEQOu6preCtVaVeZ5n2vn96CoAgHMue+/Je0/OubS/Je/9dQVrrbLWpmma6IxLeRiGPI4jveB1/8fjQUf6vk9d1+Uyn0qIqIwx2RhDBzIiqlPhKGqts9aaCm3bXncrIiLmpmmogIj5rQgAqq7rXNc1HcgAcP1VAFBSylxVFRWklLdE4JwnIQQJIZ5CCOKc3xMBABhjX4wx2rkvHpIA4PtT8Q/UuVtO1WtEUAAAAABJRU5ErkJggg==\");\r\n --button-compact: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAYAAADwdn+XAAAAbUlEQVQokcWQMQrAMAwD5UAwmUoGZzDK/5/nJ7hLU9op3Sq4RXAaBJI559xCMt19AsBySCbcPb/Sez8AvByYWYwxcoeZBa4s59n9GFWN1lruUNUAcDwdVQ3UWvMra+DViUiUUnKHiNyHLUdE4gRg62K+ejzZwAAAAABJRU5ErkJggg==\");\r\n\r\n --tab-files: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABBklEQVQ4jdWTsWqFMBiFfxwqjh26Xejz6hv8PoZ3EDcXQUTQIQYhLi5ZXFxcXE6HxlAsarx06YFvzEc4JyH67/GYGXEc/+L5fCoi8u4KfWbGuq6WrusAAGVZIkmS29KAmbEsi6VtW2xhZhDR223hPM+Wuq4tRhjcEkZRBCEEhBAYhgHTNFlchIcjZFmGpmnQ9z201tBaOwlPR0jTFFVVYRxHjOPoJLwcoSgKKKWglHIXno2Q5zmklJBSugt/Fr8fIQxDMLPFSbiVvscIPonoYfggIv9SuJW+xwjfza0CIzv9KQEz29L3vPSQmdmWvudl4Rl3hT59F/044HKEfTxzIDjgcoQ/zxc9wNC8RsMJhQAAAABJRU5ErkJggg==\");\r\n --tab-info: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAClElEQVQ4jdWUS0hUYRiGP4UxBV0JgpJLL8d/lHFOUYFCNEaLMogSBN1ZE4JQeYsghjHJhamImhQKKTahgVcKpCIvVLSwclGjjgkFSV4WXtIiCp4W58jozJi07IcHzvf+//fyfuccfpH/dqV2Tyar4eU2NbLpVS9AvQA1sulVw8ttqd2Tyf/iFaYGl9ptI3B2Ai55oeqjwSWvoR0YAzW41C4iYXuZhauhjanj41D5Hq57Q1PxHnLGQA1tTIlI+O7JuhbaHU+g7B2Ub+PmB/j+G8aX/FrZW3A8BdW1EDppUvWYltEDF19ByeuduN4Zhs+/7tSdLyGjB5Kqx7SgUbXWxV5HP5wfDebWJFx9HaxfGAVHH2iti72Bo1tUy/r0mUEoHPbjfAaf1gFg8xecewQn+iH7IRzuBv0B2DpBtaxPi4hlu2GkaoKzfXCu30/PFLS8MQy//QS9Ixj7PVBNICKR2w2jVC2cvA+nPH5yOqHhlWE4NAP63WDsd0DVgohE7TBMc63NZLeCow2OtcGh26A3w8QXw7DssVEHYquHNNfaTKBhpFY6P5B5A440gl7nZ2s5e6B+ZOeeXgcZbtBK5wcCR7Yk5jYetJaDvRr0GoOjDbD+wzCc+GzUW3t6DWRWgbUcEk83Hwj8KOEiEqM557rSS8HuAt1tkNsIzg5/vYXdBelXQHPOdYlITOBvIyISISKxWtGqz1oM9krQr4UmswKsxaAVrfpEJNbsDVph5ouNSynweaxFkO4EWwnYLxvYSgzNWgQpBT6PiMSZPbteEuHmgdgE3Z2VkufzpOWvzKpCUIWQlr8ym5Ln8yTo7iwzWVSoUUMljRCRaLMpXkT2m8SbWrR5Zs/rKzCtRUT2mUmizGfL31L9ARu1bU1qe+H9AAAAAElFTkSuQmCC\");\r\n --tab-peers: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABZUlEQVQ4je2UMWrDMBhGf0JJ3EUpNTJElrEhKgYPxuAWgfFgAjbEYIgne/It0qX3yNBT5ATJJQqla+g9vg5NoSEdEs198CZJD/0gRPTPb6qqcpqm2TdNg6P7qqoc096orutd27YYhgHDMKBtW9R1vSOikUlwXJYluq5D3/fo+x5d16EsSxDR2CR4WxQFVqvViUVRgIhujYJ5nmO5XJ6Y57l5UGuNxWJxotbaPJgkyYfWGlmWIcsyaK2RJMmHaXAShuE6jmOkaYo0TRHHMcIwXBPRxCR4Q0R3SqltFEWIoghKqS0R3R3XrkNK+eD7/ksQBO/z+RxKKQRB8On7/qvneU8XRTjnSgjxLIR4c10XUkp4nneilBKu60IIcRBCbGaz2eOfMdu2nzjn4JzDcZyL/Nlv2/b5jRljG8YYptPpVTLGwBjbnAUtyzpYlgVDD39NfU9ELhHJK3WPZ88Y0/eDNdHos7iIL1k4pt0kxY1cAAAAAElFTkSuQmCC\");\r\n --tab-trackers: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAACC0lEQVQ4jdWSsWsiQRTGvyoEIsmUuS7/QRbOImwRbDRbpNhiFyZYLOyyLKwh4hVrJdhsY5ohsOfYbGVlY2ezZf4ELYVUIW2IheV3jQaJcpru7oMHj5lvfu/NmwH+e9m2Xcmy7CXLshfbtisHHxyAP3bleZ6/z+dzzudz5nn+vs//qd/gz135aDRaFEXBoig4Go0W+/yf0uD1E3i6yssZeA4A4/H4fjKZvE0mk7fxeHwPABl4rsEyADyBpxq83gL2wcq6Uh+80OBdFzwiKUherUJ0wSMN3vXBi3V3fbCya4ZnGmx2weMV9EaDl6ZpGr1ej71ej6ZpGhq87IM3ANAFjzXYHIBnW8AV1B2A3uZakiRDpRSVUkySZPjF7w1AdydsY5ZKg81H8EQIITqdziIMw2UYhstOp7MQQohH8ESDTQ2qv8IAIANLGvyVgSUppR/HMdvt9nO73X6O45hSSn/Tsxf45bozx3GYpinTNKXjOEySZPYtyFqGYRhxHNPzvFeSFZIVz/Ne4zimYRjGt4G+7w+llGw0Gmy1Wmy1Wmw0GpRS0vf94X7ChoQQIoqiD8uyltPp9Hbd4XQ6vbUsaxlF0YcQQhwMrNVqvpSSrusyiiIGQcAgCBhFEV3XpZSStVrNPxhYr9dn1WqVSqmHdXfrUEo9VKtV1uv1wx+HZHkF2PoWJEurvfLBwH9KfwCL+zyAGn9UVAAAAABJRU5ErkJggg==\");\r\n }" + } + ], + "name": "Transmission dark theme", + "originalDigest": "870ff0bb623012a14a3ff083756fb0b94f6668a0", + "id": 11 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/157126.json?ik-colorPallets=ik-navyblue&ik-frosted=ik-froston&ik-watchedoverlay=ik-watchedon&ik-searchbox=ik-searchboxcenter", + "md5Url": "https://update.userstyles.org/157126.md5", + "url": "http://userstyles.org/styles/157126", + "originalMd5": "662b85c8aea5f0cc483285ec80705517", + "installDate": 1575341578500, + "sections": [ + { + "code": "/*\n * Name: CleanTube v2\n * Author: Sardorbek Usmonov\n * Version: 2.0.0\n*/\n/* ============ COLOR PALETTE ============ */\n:root {\n --blue-day: #306AF2;\n --blue-night: #4789E5;\n --red-day: #F8333C;\n --red-night: #ee353e;\n /* Day */\n --day-darker: #7d7d7d;\n --day-dark: #B7B7B7;\n --day-light: #DDDDDD;\n --day-lighter: #EAEAEA;\n --day-lightest: #FFFFFF;\n /* Night */\n --night-darkest: #1E2029;\n --night-darker: #282a36;\n --night-dark: #373844;\n --night-light: ##6272a4;\n --night-lighter: #e2e2dc\n}\n/* Cream White Theme */\nhtml:not([style-scope]):not(.style-scope) {\n --yt-spec-brand-background-primary: var(--day-lightest) !important;\n}\nytd-masthead, app-toolbar.ytd-c4-tabbed-header-renderer {\n box-shadow: var(--masterhead-shadow) !important;\n}\n\n/* Day */\nhtml:not([style-scope]):not(.style-scope) {\n /* CUSTOM */\n --watched-bg-color: rgba(255, 255, 255, .45);\n --masterhead-shadow: 0 5px 12px 5px rgba(228, 9, 9, .07), 0 0 0px rgba(0, 0, 0, 0.25);\n /* REMAPPED */\n --yt-spec-brand-background-primary: var(--day-lighter);\n --yt-main-app-background: var(--day-lightest);\n --yt-app-background: var(--day-lightest);\n --yt-main-app-background-tmp: var(--day-lightest);\n --yt-spec-general-background-b: var(--day-lightest);\n --yt-spec-general-background-a: var(--day-lightest);\n --yt-sidebar-background: var(--day-lightest);\n --yt-guide-background: var(--day-lightest);\n --yt-dialog-background: var(--day-lightest);\n --yt-live-chat-background-color: var(--day-lightest);\n --paper-listbox-background-color: var(--day-lightest);\n --yt-spec-brand-background-solid: var(--day-lightest);\n --darker-bg-color: var(--day-lightest);\n --yt-live-chat-vem-background-color: var(--day-lighter);\n --yt-std-surface-300: var(--day-lighter);\n --yt-simple-menu-header-background: var(--day-lighter);\n --yt-featured-channel-title-text-color: var(--day-darker);\n --ytd-metadata-line-color: var(--day-darker);\n --yt-spec-text-disabled: var(--day-darker);\n --yt-spec-text-primary: var(--night-darkest);\n --video-title-text-color: var(--night-darker);\n --yt-expand-color: var(--day-darker);\n --yt-spec-text-secondary: var(--day-darker);\n --link-text-color: var(--day-darker);\n --ytd-badge-icon-color: var(--day-darker);\n --ytd-owner-badge-color: var(--day-darker);\n --yt-spec-call-to-action: var(--day-darker);\n --badge-bg: var(--red-day);\n --badge-color: var(--day-lightest);\n --comment-op-bg-color: var(--day-darker);\n --iron-icon-fill-color: var(--day-darker);\n --comment-op-check-color: var(--day-lightest);\n --yt-button-color: var(--day-darker);\n --yt-spec-brand-button-background: var(--red-day);\n --searchbox-focus-color: var(--red-day);\n --searchresults-bg-color: var(--day-lightest);\n --searchresults-text-color: var(--day-darker);\n --searchresults-text-bg-hovered: var(--day-light);\n --searchbox-placeholder-color: var(--day-darker);\n --searchresults-searched-text-color: var(--blue-day);\n --paper-toggle-button-checked-button-color: var(--blue-day);\n --scrollbar-background: var(--day-lightest);\n --scrollbar-color: var(--day-light);\n --scrollbar-hover: var(--day-dark);\n --scrollbar-active: var(--day-darker);\n --sidepanel-menu-active: rgb(255, 0, 0, .25);\n --sidepanel-menu-active-color: red;\n --yt-spec-10-percent-layer: var(--day-light);\n --yt-spec-icon-disabled: var(--day-light);\n --yt-spec-icon-inactive: var(--day-darker);\n --skeleton-bg-color: var(--day-lighter);\n --paper-toggle-button-unchecked-bar: var(--day-dark);\n --paper-toggle-button-unchecked-bar-color: var(--paper-toggle-button-unchecked-bar);\n --url-color: var(--blue-day);\n}\n\n/* Night */\nhtml[dark]:not([style-scope]):not(.style-scope), [dark]:not([style-scope]):not(.style-scope) {\n /* CUSTOM */\n --watched-bg-color: rgba(0, 0, 0, .65);\n --masterhead-shadow: 0 5px 12px 5px rgba(36, 36, 36, .07), 0 0 0px rgba(0, 0, 0, 0.25);\n /* REMAPPED */\n --yt-spec-brand-background-primary: var(--night-darker) !important;\n --yt-main-app-background: var(--night-darkest);\n --yt-app-background: var(--night-darkest);\n --yt-main-app-background-tmp: var(--night-darkest);\n --yt-spec-general-background-b: var(--night-darkest);\n --yt-spec-general-background-a: var(--night-darkest);\n --yt-sidebar-background: var(--night-darkest);\n --yt-guide-background: var(--night-darkest);\n --yt-dialog-background: var(--night-darkest);\n --yt-live-chat-background-color: var(--night-darkest);\n --paper-listbox-background-color: var(--night-darkest);\n --yt-spec-brand-background-solid: var(--night-darkest);\n --darker-bg-color: var(--night-darkest);\n --yt-live-chat-vem-background-color: var(--night-darker);\n --yt-std-surface-300: var(--night-darker);\n --yt-simple-menu-header-background: var(--night-darker);\n --yt-featured-channel-title-text-color: var(--night-lighter);\n --ytd-metadata-line-color: var(--night-lighter);\n --yt-spec-text-disabled: var(--night-lighter);\n --yt-spec-text-primary: var(--night-lighter);\n --video-title-text-color: var(--day-lightest);\n --yt-expand-color: var(--night-lighter);\n --link-text-color: var(--night-lighter);\n --yt-spec-text-secondary: var(--night-lighter);\n --ytd-badge-icon-color: var(--night-lighter);\n --ytd-owner-badge-color: var(--night-lighter);\n --yt-spec-call-to-action: var(--night-lighter);\n --badge-bg: var(--red-night);\n --badge-color: var(--day-lighter);\n --comment-op-bg-color: var(--night-dark);\n --iron-icon-fill-color: var(--night-lighter);\n --comment-op-check-color: var(--day-lightest);\n --yt-button-color: var(--night-lighter);\n --yt-spec-brand-button-background: var(--red-night);\n --searchbox-focus-color: var(--red-night);\n --searchresults-bg-color: var(--night-darker);\n --searchresults-text-color: var(--night-lighter);\n --searchresults-text-bg-hovered: var(--night-dark);\n --searchbox-placeholder-color: var(--night-lighter);\n --searchresults-searched-text-color: var(--blue-night);\n --paper-toggle-button-checked-button-color: var(--blue-night);\n --scrollbar-background: var(--night-darkest);\n --scrollbar-color: var(--night-dark);\n --scrollbar-hover: var(--night-light);\n --scrollbar-active: var(--night-lighter);\n --sidepanel-menu-active: var(--night-dark);\n --sidepanel-menu-active-color: var(--red-night);\n --yt-spec-10-percent-layer: var(--night-dark);\n --yt-spec-icon-disabled: var(--night-dark);\n --yt-spec-icon-inactive: var(--night-lighter);\n --skeleton-bg-color: var(--night-darker);\n --paper-toggle-button-unchecked-bar: var(--night-dark);\n --paper-toggle-button-unchecked-bar-color: var(--paper-toggle-button-unchecked-bar);\n --url-color: var(--blue-night);\n}\n\n/* ============ FONTS ============ */\n@font-face {\n font-family: Google Sans;\n font-style: normal;\n font-weight: 400;\n src: url(https://fonts.gstatic.com/s/googlesans/v14/4UaGrENHsxJlGDuGo1OIlL3Owp4.woff2);\n}\n\n@font-face {\n font-family: Google Sans;\n font-style: normal;\n font-weight: 500;\n src: url(https://fonts.gstatic.com/s/googlesans/v14/4UabrENHsxJlGDuGo1OIlLU94YtzCwY.woff2);\n}\n\n/* ============ BASE CODE ============ */\nbody, html, #search-input.ytd-searchbox-spt input {\n font-family: 'Google Sans', Roboto, sans-serif;\n font-weight: 400;\n}\n\nb {\n font-family: 'Google Sans', Roboto, sans-serif !important;\n font-weight: 500 !important;\n}\n\nyt-formatted-string[has-link-only_]:not([force-default-style]) a.yt-simple-endpoint.yt-formatted-string, #description-text.ytd-video-renderer, .content.ytd-channel-video-player-renderer, .deemphasize.yt-formatted-string, #caption.ytd-toggle-item-renderer, #label.ytd-pinned-comment-badge-renderer {\n color: var(--link-text-color) !important;\n}\n\nyt-icon.ytd-pinned-comment-badge-renderer {\n fill: var(--link-text-color) !important;\n}\n\n#tabs-inner-container.ytd-c4-tabbed-header-renderer, #channel-header.ytd-c4-tabbed-header-renderer, #container #section, ytd-multi-page-menu-renderer {\n background: var(--darker-bg-color) !important;\n}\n\n#sections.ytd-multi-page-menu-renderer > ytd-background-promo-renderer.ytd-multi-page-menu-renderer {\n background: var(--darker-bg-color);\n margin-bottom: none;\n}\n\npaper-button.ytd-subscribe-button-renderer .deemphasize.yt-formatted-string {\n color: white !important;\n}\n\npaper-button.ytd-subscribe-button-renderer[subscribed] .deemphasize.yt-formatted-string {\n color: var(--yt-spec-text-secondary) !important;\n}\n\n#video-title.yt-simple-endpoint.ytd-grid-video-renderer, h3.ytd-compact-video-renderer, ytd-compact-radio-renderer.use-ellipsis #video-title.ytd-compact-radio-renderer, #video-title.ytd-playlist-panel-video-renderer, .title.ytd-video-primary-info-renderer {\n color: var(--video-title-text-color) !important;\n}\n\nytd-live-chat-frame#chat, #search-icon-legacy.ytd-searchbox:hover {\n border: none;\n box-shadow: none;\n}\n\nytd-author-comment-badge-renderer {\n background: var(--comment-op-bg-color);\n}\n\nytd-author-comment-badge-renderer yt-icon {\n fill: var(--comment-op-check-color);\n}\n\nytd-guide-entry-renderer[active] {\n background-color: var(--sidepanel-menu-active);\n border-radius: 0 25px 25px 0;\n}\n\nytd-guide-entry-renderer[active] .guide-icon.ytd-guide-entry-renderer, ytd-guide-entry-renderer[active] .title.ytd-guide-entry-renderer {\n fill: var(--sidepanel-menu-active-color);\n color: var(--sidepanel-menu-active-color);\n}\n\napp-toolbar.ytd-c4-tabbed-header-renderer {\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15), 0 0 0px rgba(0, 0, 0, 0.25);\n}\n\nytd-sentiment-bar-renderer[activated_] #like-bar.ytd-sentiment-bar-renderer {\n background: var(--blue-day);\n}\n\nytd-toggle-button-renderer.style-default-active[is-icon-button], ytd-toggle-button-renderer.style-default-active[is-icon-button] yt-icon {\n color: var(--blue-day);\n fill: var(--blue-day);\n}\n\n#home-page-skeleton .skeleton-bg-color, .masthead-skeleton-icon, .watch-skeleton .skeleton-bg-color, html[dark] #home-page-skeleton .skeleton-bg-color, html[dark] .masthead-skeleton-icon, html[dark] .watch-skeleton .skeleton-bg-color {\n background-color: var(--skeleton-bg-color);\n}\n\npaper-toggle-button[checked]:not([disabled]) .toggle-bar.paper-toggle-button {\n background-color: var(--paper-toggle-button-unchecked-bar) !important;\n}\n\n#expander yt-formatted-string[has-link-only_]:not([force-default-style]) a.yt-simple-endpoint.yt-formatted-string, #description a.yt-simple-endpoint.yt-formatted-string, #expander a.yt-simple-endpoint.yt-formatted-string {\n color: var(--url-color) !important;\n}\n\n/* ============ SEARCHBOX ============ */\n#search-icon-legacy.ytd-searchbox, #container.ytd-searchbox {\n border: none;\n background: transparent !important;\n}\n\n#container.ytd-searchbox input.ytd-searchbox::placeholder, input#search::placeholder {\n color: var(--searchbox-placeholder-color);\n}\n\nytd-searchbox[has-focus] #container.ytd-searchbox {\n border: none;\n border-bottom: var(--searchbox-focus-color) solid 1px;\n box-shadow: none;\n transition: border-bottom 350ms ease-in-out;\n -webkit-transition: border-bottom 350ms ease-in-out;\n -o-transition: border-bottom 350ms ease-in-out;\n}\n\n#container.ytd-searchbox {\n box-shadow: none !important;\n}\n\n/* ============ SEARCHRESULTS ============ */\n.sbdd_b, .sbsb_a, .sbfl_b {\n background: var(--searchresults-bg-color);\n border: none;\n}\n\n.gsfs, .sbfl_a {\n color: var(--searchresults-text-color);\n}\n\n.sbsb_d {\n background: var(--searchresults-text-bg-color-hovered);\n}\n\n.sbpqs_a {\n color: var(--searchresults-searched-text-color);\n}\n\n.sbdd_a {\n top: 50px !important;\n z-index: 9999 !important;\n}\n\n.sbdd_b {\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15), 0 0 0px rgba(0, 0, 0, 0.25);\n}\n\n/* ============ WATCHED BADGE ============ */\nytd-thumbnail-overlay-toggle-button-renderer, ytd-thumbnail-overlay-time-status-renderer[overlay-style=DEFAULT] {\n z-index: 2;\n}\n\nytd-thumbnail-overlay-resume-playback-renderer, #progress.ytd-thumbnail-overlay-resume-playback-renderer {\n background-color: var(--watched-bg-color);\n height: 100%;\n width: 100%;\n}\n\n#progress.ytd-thumbnail-overlay-resume-playback-renderer:after {\n content: 'WATCHED';\n left: 0;\n top: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n font-size: 1.35rem;\n letter-spacing: 0.035rem;\n height: 21px;\n width: 77px;\n margin: 4px;\n border-radius: 3px;\n opacity: .8;\n color: #fff;\n background: #121212\n}\n\nytd-thumbnail:hover ytd-thumbnail-overlay-resume-playback-renderer, #progress.ytd-thumbnail-overlay-resume-playback-renderer {\n height: 0\n}\n\nyt-formatted-string.ytd-thumbnail-overlay-playback-status-renderer {\n display: none;\n}\n \n/* ============ BADGES ============ */\n.badge-style-type-simple.ytd-badge-supported-renderer, .badge-style-type-live-now.ytd-badge-supported-renderer, .badge-style-type-red.ytd-badge-supported-renderer {\n background: var(--badge-bg);\n color: var(--badge-color);\n border: none;\n}\n\n/* ============ FROSTED ============ */\nytd-thumbnail-overlay-side-panel-renderer {\n --blur: 10px;\n backdrop-filter: blur(var(--blur));\n -webkit-backdrop-filter: blur(var(--blur));\n}\n\n/* ============ SCROLLBAR ============ */\nhtml[hide-scrollbar=\"true\"] ::-webkit-scrollbar, ::-webkit-scrollbar-corner {\n display: none;\n}\n\n::-webkit-scrollbar, ::-webkit-scrollbar-corner {\n background: var(--scrollbar-background);\n width: 10px;\n height: 10px;\n}\n\n::-webkit-scrollbar-button {\n display: none;\n}\n\n::-webkit-scrollbar-thumb {\n background: var(--scrollbar-color);\n}\n\n::-webkit-scrollbar-thumb:not(:active):hover {\n background: var(--scrollbar-hover);\n}\n\n::-webkit-scrollbar-thumb:active, ::-webkit-scrollbar-thumb:hover:active {\n background: var(--scrollbar-active);\n}", + "urlPrefixes": [ + "https://www.youtube.com/" + ] + } + ], + "name": "CleanTube 2 (NEW UPDATE!!!)", + "originalDigest": "f77d1739500a82bd642f03ecabb54308bd2b03f1", + "id": 21, + "updateDate": 1581129986355 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/22251.json", + "md5Url": "https://update.userstyles.org/22251.md5", + "url": "http://userstyles.org/styles/22251", + "originalMd5": "52673f0b8a441088a0229dbbf36f9ee4", + "installDate": 1575343452208, + "sections": [ + { + "code": "@namespace url(http://www.w3.org/1999/xhtml);\n#topRight,\n#topLeft,\n#bottom,\n#middleContainer>h3 {\n display: none !important;\n}\n\n#ctitle {\n color: #dddddd !important;\n}\n\nbody {\n background: #1E2029;\n}\n\n#middleContainer {\n background: #1E2029 !important;\n border: 0 !important;\n color: #1E2029 !important;\n}\n\nul.comicNav li a {\n background: #1E2029 !important;\n border-color: hsl(220, 28%, 40%) !important;\n box-shadow: none !important;\n}\n\nul.comicNav li a:hover {\n background: hsl(211, 38%, 66%) !important;\n color: #ffffff !important;\n}\n\n.imageCaption {\n color: #dddddd !important;\n text-align: center !important;\n background: #282a36 !important;\n margin: 5px 0 0 !important;\n padding: 5px !important;\n font-size: 13px !important;\n}", + "domains": [ + "xkcd.com" + ] + } + ], + "name": "dracula: xkcd", + "originalDigest": "4bc70aa95f0eb41725e1c4e2dbc5b718dcdd0a6f", + "id": 22, + "updateDate": 1581130216156 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/153882.json", + "md5Url": "https://update.userstyles.org/153882.md5", + "url": "http://userstyles.org/styles/153882", + "originalMd5": "cab8c955bd5e6f83d66045dbee50142c", + "installDate": 1575355300691, + "sections": [ + { + "urls": [], + "urlPrefixes": [], + "domains": [ + "nixos.org" + ], + "regexps": [], + "code": "@font-face {\r\n font-family: 'Quattrocento';\r\n font-style: normal;\r\n font-weight: 400;\r\n src: local('Quattrocento'), url(http://themes.googleusercontent.com/static/fonts/quattrocento/v5/WZDISdyil4HsmirlOdBRFKRDOzjiPcYnFooOUGCOsRk.woff) format('woff');\r\n}\r\nbody {\r\n font-family: 'Quattrocento';\r\n font-size: 18px;\r\n line-height: 1.45em;\r\n background-color: #002b36 !important;\r\n color: #93a1a1 !important;\r\n}\r\nh1 {\r\n color: #93a1a1 !important;\r\n}\r\na:link {\r\n color: #268bd2 !important;\r\n}\r\na:visited {\r\n color: #2aa198 !important;\r\n}\r\na:hover {\r\n color: #d33682 !important;\r\n}\r\ndiv.book {\r\n background-color: #073642 !important;\r\n}\r\ndiv.docbook code {\r\n font-size: 0.8em;\r\n}\r\npre {\r\n box-shadow: none !important;\r\n border: none !important;\r\n}\r\ncode,\r\npre {\r\n background-color: #073642 !important;\r\n color: #93a1a1 !important;\r\n}\r\n.alert-info code,\r\n.alert-info pre,\r\n.alert-info {\r\n background-color: #fdf6e3 !important;\r\n color: #586e75 !important;\r\n border: none !important;\r\n line-height: 1.4em !important;\r\n}\r\n.alert-info code,\r\n.alert-info pre {\r\n background-color: #eee8d5 !important;\r\n}\r\ntable#search-results tr.odd > td {\r\n background-color: #073642;\r\n}\r\n.table th,\r\n.table td {\r\n border: none;\r\n}\r\ntable#search-results tr.details > td:hover {\r\n background-color: #002b36;\r\n}\r\n.table-hover tbody tr:hover>td,\r\n.table-hover tbody tr:hover>th {\r\n background-color: #002b36;\r\n}\r\n.navbar-inner {\r\n background-image: none;\r\n background-color: #073642;\r\n border: none;\r\n}\r\n.navbar .brand,\r\n.navbar .nav>li>a {\r\n text-shadow: none;\r\n}\r\n.navbar-search .search-query {\r\n background-color: #002b36;\r\n border: none;\r\n}\r\nul.nixos-blogs > li:nth-child(odd),\r\nul.nixos-commits > li:nth-child(odd) {\r\n background-color: #073642;\r\n}\r\nul.nixos-blogs > li,\r\nul.nixos-commits > li {\r\n border-top: 1px solid #073642;\r\n}\r\nhr {\r\n border-top: 1px solid #073642;\r\n border-bottom: 1px solid #073642;\r\n}\r\ntr.news-header {\r\n border-bottom: 1px solid #073642;\r\n}\r\n.news-short {\r\n color: #b58900;\r\n}\r\n/* $base03: #002b36; */\r\n/* $base02: #073642; */\r\n/* $base01: #586e75; */\r\n/* $base00: #657b83; */\r\n/* $base0: #839496; */\r\n/* $base1: #93a1a1; */\r\n/* $base2: #eee8d5; */\r\n/* $base3: #fdf6e3; */\r\n/* $yellow: #b58900; */\r\n/* $orange: #cb4b16; */\r\n/* $red: #dc322f; */\r\n/* $magenta: #d33682; */\r\n/* $violet: #6c71c4; */\r\n/* $blue: #268bd2; */\r\n/* $cyan: #2aa198; */\r\n/* $green: #859900; */" + } + ], + "name": "Nixos Solarized (Dark)", + "originalDigest": "b8e24095530af971f61ee64a39b373a7ca2e5736", + "id": 25 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/179101.json", + "md5Url": "https://update.userstyles.org/179101.md5", + "url": "http://userstyles.org/styles/179101", + "originalMd5": "5a232c77627dfdb22013e4026899b0b1", + "installDate": 1581128205184, + "sections": [ + { + "code": ":root {\n --bg1: #1E2029;\n --bg2: #282a36;\n --bg3: #282a36;\n --bg4: #21222d;\n /* code background */\n --bg5: #282a36;\n --bg6: #282a36;\n\n --selected: #f8f8f2;\n --selected2: #f8f8f2;\n --accents: #bd93f9;\n\n --btn: #44475a;\n --btn2: #44475a;\n --btn3: #44475a;\n --btn4: #44475a;\n}\n\npre,\ncode,\ntt,\nkbd:not(.badmono),\npre,\nsamp,\n.js-line-number,\n.blob-num,\n.blob-code,\n.file-data pre,\n.line-data,\n#gist-form .file .input textarea,\n.blob-code-inner {\n font-family: 'Source Code Pro', 'Menlo', Consolas, 'Liberation Mono', Menlo, Courier, monospace !important;\n}\n\n.tabnav--responsive .tabnav-tab,\n.page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting,\n.pagehead.repohead.readability-menu {\n background-color: var(--bg1) !important;\n border: 0px;\n}\n\n.SelectMenu-item,\n.SelectMenu-header {\n background-color: var(--bg1) !important;\n color: var(--selected) !important;\n}\n\n.SelectMenu-item:hover {\n background-color: var(--btn) !important;\n}\n\ntextarea:focus {\n background-color: var(--bg1) !important;\n}\nbody {\n background-color: var(--bg3) !important;\n}\n.markdown-body table tr,\n.blob-num-context,\n#user-content-toc td {\n background: var(--bg1) !important;\n}\n.highlight:not(.lines) tr:not(.inline-comments):hover td.selected-line.blob-num:not(.line-age),\n.highlight:not(.lines) tr:not(.inline-comments):hover td.blob-num,\n.blob-num[colspan],\n.blob-num-hunk {\n background: var(--bg3) !important;\n}\n.list-browser-item.closed,\n.content .verseblock-content,\n.content .verseblock-content,\n.simple-stacked-bar,\n.date_selector td.selectable_day:hover,\n.date_selector td.selectable_day.hover,\n.pagination a:hover,\n.pagination a:focus,\n.pagination span:hover,\n.pagination span:focus,\n.pagination em:not(.current):hover,\n.pagination em:not(.current):focus,\n.dropdown-divider,\n.js-current .standalone a,\n.sidebar-module .disable > a,\n.label-select-menu div.labelstyle-000000.selected,\n.ScreenshotCarousel-navitem.selected,\n.CircleBadge {\n background: var(--bg1) !important;\n}\n.header,\n.headers,\n#readme .markdown-body,\n.social-count,\n.file,\n.box-body,\n.markdown-body table tr:nth-child(2n),\n.steps li,\n.explore-section:nth-child(2n),\n.markdown-format table,\n.list-group-item,\n.chromed-list-browser .none p,\n.chromed-list-browser .error p,\n.list-browser-footer,\n.commandbar .choice:hover,\n#gollum-editor-help,\n.search-filter:hover,\n#wiki-history table tr:nth-child(2n) td,\n.display tr:hover,\n.octofication .message,\n.commandbar .loading:hover,\n.comment-content,\n.commandbar .message,\n.boxed-group-inner,\n#adv_code_search .search-page-label,\n.timeline-comment,\n#contributors-master svg.viz,\n.diff-table .line-comments,\n.menu,\nsvg.spark,\nsvg.capped-card-content,\nbody.api .content tbody,\n.markdown-format img:not(.emoji),\n.mini-repo-list,\n#common-issues,\n.setup-wrapper .oauth-permissions-details,\n.milestone-list,\n.setup-form .setup-plans,\n.prose-diff > .markdown-body,\n.revision .gu,\n.tree-browser td,\n.tree-browser .alt td,\n.branches .branch-summary,\n.branches .no-results-message,\n.simple-box-footer,\n.commit-group,\n.blankslate,\n.content table tr,\n#search-results,\ntable.files,\n.mergeable,\n.org-module,\n.org-add-footer,\n.branch-infobar,\ntable.capped-list tr:nth-child(2n),\n.team-org-group,\n#gollum-editor-help-wrapper,\n.integrations-quality,\n.showcase-featured .mo-info .featured-grid-outer,\n.render-shell,\n.list,\n.latest-commit .commit-author,\n.bubble,\n.tabs > a.selected,\n.comment-form-head .tabnav-tab.selected,\n.oauth-org-access-details .boxed-group-list > li.on,\n#fullscreen_overlay,\n.branch-action-body,\n.inline-comment-form,\n.file-history-tease .participation,\n.gist-quicksearch-result-header,\n.label-generic,\n.migrate-org-roles,\n.commit-tease .commit-meta,\n.manage-repo-access-icon,\n.table-list:not(.team-member-list),\n.repo-file-upload-progress,\n.gcr-ext-editor-dialog,\n.shade-gray,\n.exploregrid-item,\n.signed-commit-badge-small,\n.facebox-popup,\n.explore-signup-entice-wrapper,\n.billing-addon-items tr.total-row,\n.billing-addon-items tr.dark-row,\n.Box-body,\nli.pinned-repo-item,\n.js-contribution-graph h2 + div:last-child,\n.project-triage-pane,\n.user-profile-nav.is-stuck,\n[data-filterable-for='projects-filter'] .container-lg,\n.review-summary-form-wrapper,\n#projects-results,\n.listgroup,\n.protected-branch-orgs-and-repo-admins,\n.listgroup-overflow,\n.Header,\n.project-column,\n.btn.btn-outline,\n.js-notice > .border,\n.news .issues_labeled .border,\ntable.pricing-table,\n.two-factor-steps,\ndiv.border.rounded-1,\narticle.border.rounded-1,\n.border-right.border-bottom.border-left,\n.graph-before-activity-overview,\n.access-form-wrapper {\n background: var(--bg2) !important;\n}\n.table-list-header,\n.timeline-comment-header,\n.boxed-group > h3,\n.boxed-group .heading,\n.file-header,\n.capped-card h3,\n.select-menu-header,\n#gist-form .file .meta,\n.file .meta,\n.file-box .meta,\n.menu-heading,\n.audit-results-header,\n.branches .branch-group-heading,\n.auth-form-header,\n.commit-form,\n.migration-jumbotron,\n.migration-sub-header,\n.commit-tease,\n.manage-repo-access-title,\n.select-menu-divider,\n.signed-commit-header,\n.reorderable-task-lists .markdown-body .task-list-item.hovered,\n.next-charge-box,\n.credit-card,\n.branch-action-body .merge-message,\n.review-thread-reply,\na.card.bg-gray-light:hover,\n.add-member-team-list .team-row-header,\n.Box-header,\n.pagination .gap,\n.pagination .disabled,\n.pagination .gap:hover,\n.pagination .disabled:hover,\n.listgroup-header,\n.merge-status-item,\n.previewable-comment-form .comment-form-head.tabnav,\n.bg-gray:not(body):not(.team-discussions-container),\n.Header .header-search-wrapper,\n.Header .header-search-wrapper input,\n.user-key-email-unverified {\n background: var(--bg1) !important;\n}\n.calendar-graph .contrib-details div,\n.tabnav-tabs a,\n.time,\n.gist-item .metadata .datetime,\n.list-group-item-meta,\na.keyboard-shortcuts,\nbutton.keyboard-shortcuts,\n.simple-conversation-list,\n.simple-conversation-list > li .title .num,\n.drag-and-drop,\n.starred-repo .sort-info,\n.org-stats,\n.commandbar .choice,\n.commandbar .loading,\n.commandbar .description,\nul.summary-stats li a,\n.authorship,\n.sha-block,\n.gh-header-meta,\n#last-edit,\n.setup-header .lead a,\n.repository-meta .edit-link a,\n.api-status a,\n.meta li,\n.who_when a,\n.numbers-summary a,\n.mini-icon-remove-close:hover,\n.section-heading-title .separator,\n.blog-aside .rss,\n.hook-list a,\n.github-jobs-promotion a.jobs-logo,\n.org-teams-list .team-meta,\n.repo-list-item .repo-description,\n.branch-infobar .lightweight-actions > li a,\n.repo-leaderboard-list .repo-leaderboard-meta-item a,\n.changed .moved-up:before,\n.changed .moved-down:before,\n.comment-header .octicon,\na.section-heading-back,\n.list-group-item-meta .octicon,\n.repo-leaderboard-title .title-meta,\na.pagehead-nav-item,\n.wiki-wrapper .wiki-empty-box,\n.commits-list-item .commits-comments-link,\n.timeline-comment-header,\n.commits-list-item .commit-meta,\n.issues-listing .table-list-issues .issue-comments-link,\n.issues-listing .table-list-issues .issue-meta-section a,\na.issues-reset-query,\n.labels-list-action,\ntable.tag-list p a,\ntable.tag-list td.date a,\n.muted-link,\na.muted-link,\n.render-view-modes li,\n.site-footer,\n.site-footer .octicon-mark-github:hover,\n.repo-list-stats .repo-list-stat-item,\n.range-editor span.flag .octicon,\n.commit-info .commit-meta a,\n.notifications .issue-notification.read .type-icon,\n.notifications .read a,\n.auth-form-header .octicon,\n.releases-tag-list p a,\n.history-link a,\na.issue-nwo-link,\nul.filter-list .filter-item,\n.member-meta .teams-link,\n.member-meta .btn-link,\nul.comparison-list > li em,\nul.comparison-list > li.title,\n.diffstat-summary,\na.team-member-ellipsis,\na.discussion-item-toggle-open,\na.discussion-item-toggle-closed,\nbutton.discussion-item-toggle-open,\nbutton.discussion-item-toggle-closed,\n.dropdown-header,\n.participation a,\n.completeness-indicator-info,\n.type-icon-state-none,\n.pagehead-tabs-item,\na.pagehead-tabs-item,\n.commit-tease,\n.reponav-item,\na.reponav-item,\n.delete-owners-button,\n.stats-group-stat,\n.stats-group-stat.no-link:hover,\n.wiki-edit-link,\n.toolbar-item .menu-target,\n.member-meta .member-meta-link,\n.hidden-text-expander a,\n.ellipsis-expander,\n.text-muted,\n.listgroup-item,\n.discussion-item-header,\n.discussion-sidebar-heading,\n.org-header-meta .meta-item .meta-link,\n.underline-nav-item,\n.boxed-group-inner,\n.lead,\n.form-checkbox .note,\n.bot-identifier,\n.dashboard-notice .dismiss:hover,\n.text-gray,\ntd.icon .octicon-file-text,\ntd.icon .octicon-file-symlink-file,\n.UnderlineNav-item,\n.project-header-link,\nbutton.project-header-link,\ntd.icon,\n.project-pane-close,\n.facebox-close,\n.tree-browser-result mark {\n color: #a3aac1 !important;\n}\nimg,\n#browser table,\n#browser table th,\n#issues .menu ul li,\n.branches .more-branches,\n.issues td,\nul.main_nav li.selected,\n.browser_header,\n.issue-head,\n.bootcamp-help .image,\nul.hook-list,\n.clone-url-button,\n.list-tip li,\n.section-nav a,\n.search-menu-container,\n.repo_list li a,\n.graphs .axis,\n.switcher > span:after,\na.assignee-bit,\n.menu li,\n.notifications td,\n.filter-tab,\nul.hook-list li,\n.repo .border,\n.box-action,\nul.repo-stats li a,\n.footer_nav h4,\n.footer-divider,\n.chromed-list-browser,\n.js-activate-link,\n.chromed-list-browser div,\n.filter-bar,\n.columns.sidebar,\n.title,\n.lbl,\n#contributors .person,\n.tabnav,\n#commit-activity-master,\n#services,\n.top-rule,\n.blog-post,\n#services .service,\nul.stats,\n.select-menu-filters,\n.select-menu-item,\n.select-menu-tabs,\n.release-list > li,\n.context-body,\n.api li:before,\n.library-list .feature,\n.lower_footer,\n.cheatsheet,\n.pagehead.settings-area,\n.release-body,\n.suggester,\n.pull-state,\n.pull-number,\n.merge-pr,\n.gist-file,\n#graph-shots li,\n.sidebar,\n.release-timeline,\n.explore h2,\n#head,\n.leaderboard-list-item,\n.release-timeline-tags .main,\n.search-result-item,\n.details,\n.jobs-list,\n.content-header,\n.user-list-item,\n.markdown-body,\nul#categories li h5,\n.render-view-modes li,\n.gobutton.with-comments .sha,\n#gollum-editor-function-bar,\n.capped-box,\n.steps li,\n#common-issues,\n.steps,\n#graphs,\n.previewable-comment-form .comment,\n.org-module,\n.org-repo,\n.table-list,\n.org-add-footer,\n.auto-search-group .search-filter,\n#notification-center li,\n.branch-status,\n.comment + .comment,\n.discussion-bubble-inner,\n.member-row,\n.press-info,\n.timeline-comment,\n.timeline-comment-header,\n.timeline-commits .timeline-commits-header,\n.marketing-section,\n.featured-callout .screenshot,\n.page-new-repo .license-container,\n.sidebar-module,\n.collapsed,\n.expanded,\n.discussion-topic,\n.bubble-inner,\n.team-org-group,\ndiv.article div.helper div.content,\n.boxed-group-inner .help,\ndl.new-email-form,\n.file .meta-divider,\n.avatar-stack.multiple-avatars:before,\n.file-box,\n.file-actions .btn-group li,\n.gist .gist-file .gist-data,\n.calendar-graph .contrib-details div,\n.branch-action-body,\n.setup-form .tos-info,\n.setup-form .setup-organization-next,\n.collection-page .other-content,\n.bubble-wrap,\n.release-show,\n.file-wrap,\n.branches .branch-summary,\n.branches .no-results-message,\n.branch-a-b-count .count-half:last-child,\n.tabnav-tab.selected,\n.panel-nav,\n.file,\n.full-commit .sha-block > a,\n.theme-selector-thumbnail,\n.segmented-nav li,\n.overall-summary,\n.boxed-group-inner,\n.search-form button,\n.branches .branch-group-heading,\n.boxed-group > h3,\n.boxed-group .heading,\n.issues-list-actions,\np code,\ncode,\n.wiki-wrapper .wiki-empty-box,\n#adv_code_search .search-page-label,\npre.headers,\n.inline-comment-form,\n.history-link,\n.oauth-permissions-details,\n.setup-info-module .features-list .list-divider,\n.setup-wrapper .oauth-permissions,\n.swipe .swipe-frame .swipe-shell,\nul.search-results,\n.orgs-help-shelf-content .orgs-help-divider,\n.repository-lang-stats-graph,\n.gist-quicksearch-results,\n.gist-quicksearch-result,\n.gist-quicksearch-result-group,\n.listgroup,\n.listgroup-item + .listgroup-item,\n.user-key-badge,\n.newsfeed-placeholder,\n.progress-bar-inline .progress-bar,\n.menu-heading,\nbody .border-gray-dark,\n.discussion-item-review .blob-wrapper,\n.bot-identifier,\n.counter,\n.Counter,\ndiv.marketplace-product-callout,\n.CodeMirror-dialog-top,\n.project-card:hover {\n border-color: rgba(30, 32, 41, 1) !important;\n}\n.edit-repository-meta,\n.field label,\n.boxed-group-list li,\n.capped-box,\n.marketing-nav a,\n.repository-meta,\n.gist-item .description,\np.explain,\n.news .alert .simple .title,\n#network .graph-date,\n.tabnav-widget.text,\n.feature .intro,\nspan.diffstat,\nspan.diffstat a,\n.commit .commit-branches a,\n#readme .plain,\n.news blockquote,\n.news blockquote p,\n.collection-stat,\n.overall-summary .graphs .desc,\n.flash-global a,\n.calendar-graph .contrib-details div .lbl,\n.tag-info a,\na.browse-button,\n.ghead .dir,\n.repository-lang-stats .percent,\n.comment-header-action-text a,\n.comment-header-right a,\n.gist-item .creator,\n.dashboard-tabs a,\n#graph_data .tab a,\n.pull-info,\n.list-group-item .list-group-item-summary a,\n#contributors .capped-card .cmt,\n.boxed-group-list .access-level,\nh3.conversation-list-heading,\na.filter-tab,\n.starred-repo p.description,\n.commit-desc pre,\n.org-repo-stats a,\n.org-repo-updated a,\n.org-repo-description,\n.org-repo-forked a,\n.commandbar .display table td span,\n.clone-options,\n.pulse-section,\n.discussion-sidebar p,\n.discussion-topic-header .discussion-topic-author,\n.gist-description,\n.explain,\np.subtext,\n.team-grid .team-description,\n.orgs-nav .org-nav-item,\n.form-actions-protip .protip,\n.discussion-item .author,\n.inline-comments .comment-count,\n.sidebar-heading,\n.clear-issue-filters a,\n.render-view-modes li.active:before,\nul.comparison-list > li em,\n.marketing-benefits .column p,\n.sub-nav li a,\n.headlines a .date,\n.sidebar-module ul ul li span,\n.merge-branch-description,\n.gist-item ul.meta > li > a,\nul#categories li h5 a,\n.render-view-modes li.active,\n.user-leaderboard-list .repo-list-item .repo,\n.repo-stats li a,\n.about p,\ndl.form > dd p.note,\np.subdued,\n.team-header .team-description,\n.hfields dl.form > dt label,\n.boxed-group > h3 a.boxed-group-breadcrumb,\n.boxed-group .heading a.boxed-group-breadcrumb,\n.subscriptions-sidebar .note,\n.thread-subscription-status,\n.ellipsis-button,\n.follow-list .follow-list-info,\nform.btn .count,\n.blame .commitinfo .date,\n.gist .gist-file .gist-meta a,\n.merge-pr-more-commits,\n.hidden-text-expander a,\n.news div.message,\n.news li blockquote,\n.news .alert .pull-info,\n.news .alert .branch-link,\n.release .release-authorship a,\n.wiki-wrapper .wiki-empty-box:hover,\n.select-menu.is-showing-clear-item .select-menu-clear-item .octicon,\n.diffstat-summary a,\na.subnav-item,\n.branches .branch-group-heading .branch-group-name,\n.render-notice,\n.table-list-milestones .stat,\n.commits-listing .commit-group-title .octicon-git-commit,\n.select-menu-header .octicon:hover,\n.repo-list-description,\n.file .meta,\n.email-format .email-hidden-toggle a,\n.file-diffstat,\n.program-info-column .mega-octicon,\n.octofication .notice-dismiss:hover,\n.markdown-format .intro,\n.label-admin,\n.program-info-column p,\n.file-history-tease,\n.blob-num:hover,\n.gist-snippet-meta .gist-count-links > li > a,\n.commit-tease .message,\n.commit-author-section,\n.manage-repo-access-not-active,\n.milestone-name,\n.select-menu-modal,\n.select-menu-action,\n.feature-callout,\n.repo-file-upload-file-wrap .remove-file:hover,\n.rss-subscribe,\ntable.capped-list .octicon,\n.site-header-menu .nav-item,\n.exploregrid-item,\n.markdown-body blockquote,\n.link-gray,\n.tabnav-tabs button.tabnav-tab,\n.commits-list-item .commit-desc pre,\n.Label--outline.bg-yellow-light,\n.review-comment .pending-batched-suggestion-label {\n color: rgba(255, 255, 255, 0.6) !important;\n}\n\n.Label--outline.bg-yellow-light {\n background-color: var(--btn) !important;\n}\n#main,\n.capped-box,\n.unread_count,\n#browser table th,\n.markdown-format table th,\ntable.upgrades tr.current td,\n.definitions,\n.discussion-topic-header,\n.timeline-commits-minimal .commit-icon .octicon,\n.timeline-commits .commit-icon .octicon,\n.upload-progress,\n.search-results-listing em,\n.discussion-bubble-inner,\n#wiki-history table td,\n.gist .gist-file .gist-data,\n.logo-box,\n.markdown-example .rendered,\n.team-grid .team-members,\n.diagram-icon:not(.active),\ntable.capped-list th,\n.filter-bar,\n.audit-search-clear,\n.country-info,\n.tabnav-tab.selected,\n.file-diff-split .empty-cell,\n.composer-infobar,\n.completeness-indicator-blank,\n.leaflet-control-zoom,\n.pagehead-tabs-item.selected,\n.reponav-item.selected,\n.manage-repo-access-not-active,\n.header-search-scope,\n.reverse-progress-bar,\n.featurette.py-5,\n.payment-history .refunded,\n.payment-history .failed,\n.profile-timeline-month-heading.bg-white,\n.project-card,\n.gh-header .gh-header-sticky.is-stuck + .gh-header-shadow {\n background: var(--bg2) !important;\n}\n.btn,\npre,\nh1,\nh2,\nh3,\n.header,\ntable,\ntable tr,\ntable td,\ntable th,\nblockquote,\n.pulse-graph,\n.minibutton,\n.social-count,\n.discusion-topic-infobar,\n.box-body,\n.timeline-comment-label,\n.logo-box,\n.developer-program-badge,\n.vcard-details,\n.vcard-stats,\n.auth-form-header,\n.nav-bar-tabs .section-title,\n.pagination a:last-child,\n.pagination span:first-child,\n.boxed-group-list > li,\n.toolbar-bordered,\n.pagination span:last-child,\n.dashboard-tabs,\n.graphs,\n.graph,\n.sub-nav,\n.audit-search-clear,\n.repo-list-item,\n.email-signature-reply,\nfooter,\n.bubble .bubble-expand,\n.grid .col,\n.composer-infobar,\n.email-quoted-reply,\n.summary-stats li,\n.columns.equacols.bordered,\n.file-diffstat,\nul.filter-list,\n.news .alert,\ntable.files td,\n.explore-section,\n.repolist > li,\n.featured-grid-outer,\n.gh-header-meta,\n.theme-picker-thumbs,\n.team,\n.billing-section,\n.sidebar-module ul h3,\n.headlines li,\n.discussion-sidebar-item + .discussion-sidebar-item,\n.markdown-format img,\ndiv#common-issues ul li,\n.about-facts,\n.starred-repo,\n.markdown-example,\n.traffic-graph-stats,\n.discussion-item + .discussion-item,\n.bubble,\n.tree-browser,\n.simple-box-footer,\n.team-grid .team-members,\n.org-list .list-item,\n.stats-group .stat,\n.team-info-card .team-stats,\n.table-of-contents li,\n.commit-group,\n.table-list-bordered .table-list-cell:first-child,\n.table-list-bordered .table-list-cell:last-child,\n.table-list-cell,\n.table-list,\n.table-list-header,\n.blankslate,\n.labels-list-item,\n.subnav-divider-right,\n.subnav-bordered,\n.content table tr th,\n#search-results li,\n.subhead,\n#pages-composer,\n.render-bar,\n#gollum-editor-help,\n#gollum-editor-help-parent,\n#gollum-editor-help-list,\n.auth-section,\n.commit-sha,\n.comment-body,\n.mini-repo-list-item,\n.advanced-search-form fieldset,\n.contrib-column,\n.org-header .edit-org,\n.pulse-summary .summary-box,\n.pulse-summary .summary-box li:first-child,\n.list-item + .list-item,\n.list-item + .list-heading,\n.list-heading + .list-item,\n.issue-list-item,\n.collection-card,\n.setup-header,\nbody.api pre,\n.stats-group-stat:first-child,\n.build-statuses-list,\n#gollum-dialog-dialog-buttons,\n#gollum-dialog-dialog h4,\na.gollum-minibutton,\na.gollum-minibutton:visited,\n.two-factor-toggle .two-factor-status,\n.two-factor-settings-group,\n.member-badge,\nul.comparison-list > li,\n.release-downloads,\n.release-downloads li,\n.blob-interaction-bar,\ninput.subnav-search-input,\n.select-menu-header,\n.select-menu-modal,\n#gist-form .file .meta,\n.file .meta,\n.file-box .meta,\n.capped-card,\n.audit-results-header,\n.pagination a,\n.pagination span,\n.pagination em,\n.input_area,\n.output_area .rendered_html table,\n.render-info .message,\n.subnav .btn + .issues-search,\n.branch-action-body .branch-action-item + .branch-action-item,\n.discussion-item-merged.open .discussion-item-details-header,\n.discussion-item-merged.open .build-statuses-list,\n.build-status-item,\n.pagehead-tabs-item.selected,\n.org-header,\n.pagehead,\n.branch-action-item + .mergeability-details,\n.migration-section,\n.migrate-org-roles,\n.migrate-org-roles-header,\n.migration-footer,\n.migration-org-avatar,\n.org-migration-settings-section,\n.word-upload-callout .note,\n.commit-tease .commit-meta,\n.manage-user-info,\n.manage-repo-access-title,\n.org-settings-team-item:first-child,\n.label-generic,\n.plan-notice,\n.intgr-header,\n.code-list-item,\n.sort-bar,\n.repo-file-upload-outline,\n.comment-reactions.has-reactions,\n.reaction-summary-item,\n.select-menu-divider,\n.featurette.border-top,\n.tile-block,\n.tile-bordered:not(:last-child),\n.showcase-page-header,\n.showcase-page-repo-list,\n.header-search-scope,\n.result-group a,\n.signed-commit-badge,\n.signed-commit-header,\n.user-key-email,\n.border-top,\n.pricing-card-cta,\n.shelf,\n.access-token,\n.about-menu,\n.oauth-border,\n.reponav-item.selected,\n.file-header,\n.reorderable-task-lists .markdown-body .task-list-item.hovered,\n.next-charge-box,\n.setup-info-module h2,\n.radio-label,\n.border,\n.border-top,\n.border-right,\n.border-bottom,\n.border-left,\n.border-y,\n.pinned-repo-list-item,\n.pinned-repo-filters,\n.orghead,\n.orghead .edit-org,\n.Box-body-row,\n.discussion-item-deployed,\n.branch-action-body .merge-message,\n.new-project-column,\n.confirm-removal-list-container,\n.confirm-removal-list-item,\n.user-profile-nav,\n.review-thread-reply,\n.feature-callout-octicon,\n.feature-callout,\n.discussion-item + .discussion-item,\n.discussion-item-review + .discussion-item,\n.libraries-jumbotron,\n.last-review-thread,\n.menu-item,\n.review-comment.is-comment-editing,\n.Box,\n.team-list-footer,\n.Box-header,\n.profile-rollup-summarized + .profile-rollup-summarized,\n.Subhead,\n.dashboard-notice .coupon,\n.Box-body,\n.listgroup-header,\n.merge-status-item,\n.pending-team-invitations-link,\n.discussion-item + .discussion-item-review,\n.profile-timeline-card-wrapper,\n.profile-rollup-wrapper + .profile-rollup-wrapper,\n.email-preference-exceptions .exception,\n.user-key-email-unverified {\n border-color: rgba(255, 255, 255, 0.02) !important;\n}\n.btn:active,\noption:hover,\n.listings-layout .nav li a:hover,\n.state-merged,\n#fork-select .target:not(.disabled):hover,\n.flash-notice,\ntable.upgrades tr:hover td,\n.email-format .email-hidden-toggle:hover a,\n.dashboard-tabs a:hover,\n.documentation-results a:hover,\n.hidden-text-expander a:hover,\n.dropdown-item:hover,\n.dropdown-item.zeroclipboard-is-hover,\n.subnav-item.selected,\n.subnav-item.selected:hover,\n.subnav-item.selected:focus,\n.example-nav li a.selected,\n.issues-reset-query:hover .octicon-x,\n.segmented-nav li.active,\n.diff-expander:hover,\n.pagination .current,\n.owner-select-target:hover,\n.release-timeline-tags .expander-text:hover .expander-dots,\n.gollum-minibutton:hover,\n.gollum-minibutton:visited:hover,\n.search-result-item.navigation-focus,\n.gist-quicksearch-result.navigation-focus,\n.gist-snippet .link-overlay .link,\n.btn.btn-outline:hover,\n.btn.btn-outline:active,\n.btn.btn-outline.selected,\n.btn.btn-outline.zeroclipboard-is-hover,\n.btn.btn-outline.zeroclipboard-is-active,\n.pull-request-link:hover,\n.issues-reset-query:hover .issues-reset-query-block,\n.date-selector td.selected,\n.date-selector td.selectable-day:hover,\n.add-line-comment,\n.suggester .cur,\n.result.selected,\n.result:hover,\n.CommunityTemplate-highlight,\n.diff-table button.add-line-comment,\n.version-picker a:hover,\n.discussion-item-changes-marker.is-unread .discussion-item-icon {\n background: var(--bg2) !important;\n color: #fff !important;\n}\n.comment-reactions .user-has-reacted,\n.filter-item.selected {\n background: #373848 !important;\n}\n.markdown-format pre,\n.markdown-body pre,\n.markdown-format .highlight pre,\n.markdown-body .highlight pre,\n#facebox pre,\n.blob-expanded,\n.terminal,\n.copyable-terminal,\n#notebook .input_area,\n.blob-code-context,\n.markdown-format code,\n.api pre,\n.api code,\n.hook-delivery-details pre,\n.hook-delivery-container pre,\n.CodeMirror,\n.highlight {\n background: var(--bg4) !important;\n color: #ccc !important;\n border: none !important;\n}\n.blob-expanded .blob-num,\n.blob-expanded .blob-code {\n background: var(--bg3) !important;\n}\n\n#readme .plain,\n.readme .markdown-body,\n.readme .plain,\n.pull-request-composer,\n.drag-and-drop,\n.octofication .broadcast-icon-mask,\n.file .image,\n.merge-pr-more-commits,\n.coupons .coupon-form-body,\n.manage-repo-access-group,\n.saved-reply-form,\n.orghead .edit-org:hover,\n.octotree_views,\n.simple-box,\n.btn-link.timeline-progressive-disclosure-button,\na.border.rounded-1,\n.Box:not([style*='background']),\n.octotree_sidebar .octotree_bottom {\n background: var(--bg2) !important;\n border-color: var(--bg2) !important;\n}\n.Box-row,\n.Box-footer,\n.border-y,\n.border-top,\n.border-sm-top,\n.border-md-top,\n.border-lg-top,\n.commits-list-item + .commits-list-item,\n.diff-table .line-comments,\n.diff-table tr:not(:last-child) .line-comments,\n.timeline-comment .comment + .comment,\n.facebox-footer,\n.comment-reactions.has-reactions,\n.select-menu-divider,\n.branch-action-body .merge-branch-form,\n.branch-action-body .merge-message,\n.branch-action-item + .branch-action-item,\n.branch-action-item + .mergeability-details,\n.codesearch-results .repo-list-item + .repo-list-item,\n.dashboard-rollup-items > .dashboard-rollup-item,\n.topic-list .topic-list-item + .topic-list-item,\n.discussion-post .reply-comment:first-child,\n.issue-list-item + .issue-list-item,\n.last-review-thread,\n.review-thread-reply,\n.file-navigation .get-repo-btn,\n.user-list-item + .user-list-item,\n.wiki-list .wiki-list-item + .wiki-list-item {\n border-top: 1px solid var(--bg2) !important;\n}\n.Header {\n border-bottom: none !important;\n}\n.blame .blob-num,\n.blame-blob-num,\n.overall-summary,\n.repository-lang-stats,\n.collection-card,\n.team-grid .team,\n.code-list .divider .blob-num,\n.code-list .divider .blob-code,\n.expandable-line-num .diff-expander:hover,\n.select-menu-filters,\n.select-menu-modal,\n.pagination a,\n.build-status-item,\n.more-branches,\n.plan-choice.open,\n.uploaded-files > li.delete,\n.bg-gray-light,\n.more-repos,\n.billing-per-seat-callout:after,\n.code-list-item .blob-num,\n.blob-num.js-line-number,\n.bg-gray-light.disabled {\n background: var(--bg1) !important;\n}\n.UnderlineNav-item:focus .UnderlineNav-octicon,\n.UnderlineNav-item:hover .UnderlineNav-octicon,\n.UnderlineNav-item.selected .UnderlineNav-octicon,\n.text-gray-light,\n.markdown-body blockquote,\n.markdown-body h6,\n.table-list,\n.autocomplete-item .organization-member,\n.full-commit .branches-list li.loading,\n.full-commit .branches-list li.pull-request,\n.branches-tag-list li.loading,\n.commit-branches,\n.table-of-contents .octicon-diff-renamed,\n.toc-select .select-menu-item-icon.octicon-diff-renamed,\n.conversation-list-heading,\n.simple-conversation-list,\n.simple-conversation-list > li .num,\n.deployment-status-label,\n.list-group-item .list-group-item-summary a.quiet,\n.select-menu-tabs .select-menu-tab-nav,\n.select-menu-tabs a,\n.select-menu-item.disabled,\n.select-menu-item.disabled.selected,\n.select-menu-item.disabled .description,\n.select-menu-item.disabled.selected .description,\n.credit-card.amex .title,\n.billing-addon-items .addon-cost,\n.payment-history .refunded .status,\n.plan-choice-exp,\n.blame-commit-date[data-heat='10'],\n.blame-hunk:hover .reblame-link,\nul.comparison-list > li.title,\n.admin-options-block .disabled,\n.admin-options-block .disabled .note,\n.check-annotation-notice .annotation-title,\n.code-list .full-path a,\n.deployments-timeline-icon.is-inactive,\n.graphs .dir,\n.delete-topic-button,\n.topic-tag-action .add-topic-button,\n.topic-tag-action .remove-topic-button,\n.jump-to-suggestions-path .jump-to-octicon,\n.hook-item .description,\n.hook-item.inactive .icon-for-inactive,\n.hook-item.mute .icon-for-mute,\n.hook-item.pending .icon-for-pending,\n.hook-deliveries-list .item-status.pending,\n.hook-delivery-time,\n.repository-lang-stats ol.repository-lang-stats-numbers li > a,\n.repository-lang-stats ol.repository-lang-stats-numbers li > span,\n.page-new-repo .form-checkbox.disabled,\n.oauth-permissions-details.default:not(.delete) .access-details,\n.oauth-permissions-details.default:not(.delete) .permission-title,\n.oauth-permissions-details.none .access-details,\n.oauth-permissions-details.none .permission-title,\n.oauth-application-whitelist .edit-link,\n.oauth-application-info .app-info,\n.developer-app-item .developer-app-list-meta,\n.org-insights-cards [role='tab'][aria-selected='true'] .UnderlineNav-octicon,\n.export-actions a,\n.pinned-repo-name,\n.vcard-detail .octicon,\n.profile-timeline-card .issue-meta-section .octicon,\n.profile-rollup-toggle,\n.mini-repo-list-item .stars,\n.numbers-summary .octicon,\ntable.files td .simplified-path,\ntable.files td.message,\ntable.files td.message a,\ntable.files td.age,\n.settings-email .email-actions .settings-remove-email.settings-disabled-remove-email,\n.setup-creditcard-form .form-group select:invalid,\n.task-run.inactive .icon-for-inactive,\n.task-run.pending .icon-for-pending,\n.team-listing .expand-nested-team,\n.user-status-emoji-tab[role='tab'][aria-selected='true'] .UnderlineNav-octicon,\n.home-hero-signup .form-control-note,\n.gist-snippet-meta .gist-count-links > li .octicon,\n.gist-snippet-meta .extra-info,\n.gist-quicksearch-results .gist-quicksearch-result-header,\n.gist-quicksearch-results .select-menu-item h4,\n.gist-quicksearch-results .select-menu-item span,\n.markdown-body del {\n color: rgba(255, 255, 255, 0.4) !important;\n}\n.issues-list,\n.pulls-list-group,\n.commit-tease,\n.branch-infobar,\n.pagehead.repohead h1 .repo-label span,\n.coupons .coupon-form-body .coupon-icon,\n.menu,\n.merge-pr-more-commits,\n.api pre {\n border: 1px solid rgba(0, 0, 0, 0.03) !important;\n}\n.compare-pr-placeholder,\n.compare-cutoff,\n.diff-cutoff,\n.flash.flash-warn,\n.flash-global.flash-warn,\n.markdown-body li.added.moved,\n.repo-private-label,\n.gist-secret-label,\n.label-private,\n.stale-files-tab,\n.signed-out-comment,\n.warning,\n.commits-list-item em,\n.unsupported-browser,\n.prereceive-feedback,\n.zhc-banner {\n background: rgba(126, 81, 35, 0.4) !important;\n border: 1px solid #542 !important;\n}\n.btn,\ninput.btn,\nheader.nav-bar,\n.bubble .bubble-title,\nkbd,\na.feed,\n.list-browser-filterbar,\n.gobutton,\n.comment-header,\n.pagehead ul.tabs li a,\n.login_form input[type='submit'],\n.top-bar,\nul#bootcamp li a h4,\n#gists .context-menu-container,\nbody#com #header,\n.white-nav .selected span,\n.filter-tab,\n#header-wrapper,\n#header-wrapper .nav,\n.pagination span,\n.cheatsheet h2,\n.section a.section-head,\n.octotree_view_header,\n.list-heading,\n.dashboard-tabs li a,\na.function-button,\n.add-pill-form,\n.gist .gist-file .gist-meta,\n.octotree_toggle,\nul.comparison-list > li.title,\nbutton.button,\na.button,\nspan.button,\nbutton.minibutton,\na.minibutton,\nspan.minibutton,\n.clone-url-button > .clone-url-link {\n background: var(--bg2) !important;\n border-color: var(--bg2) !important;\n}\n.btn:hover,\n.btn:active,\n.btn.zeroclipboard-is-hover,\n.btn.zeroclipboard-is-active,\n.minibutton:hover,\n.minibutton:active,\n.minibutton.zeroclipboard-is-hover,\n.minibutton.zeroclipboard-is-active.kbd,\n.signup-button:hover,\na.signin:hover,\n.hero .textographic,\n.hero .screenographic,\n.pagination span.current,\n.box-action:active,\n.btn:active,\n.btn.selected,\n.btn.selected:hover,\n.btn.zeroclipboard-is-active,\n.minibutton:active,\n.minibutton.selected,\n.minibutton.selected:hover,\n.minibutton.zeroclipboard-is-active,\n.octotree_toggle:hover,\nbutton.button:hover,\na.button:hover,\nspan.button:hover,\nbutton.minibutton:hover,\na.minibutton:hover,\nspan.minibutton:hover,\n.clone-url-button.selected > .clone-url-link,\n.clone-url-button.selected > .clone-url-link:hover,\nul#bootcamp li a:hover h4 {\n background: var(--bg5) !important;\n border-color: var(--bg5) !important;\n}\n.commitinfo,\n.gc .diff-line-code,\n.gc .diff-line-num,\n.gc .diff-line-pre,\n.featured-commit-activity-graph,\n.featured-repo-logo,\n.outline-box,\n.gobutton > .sha .octicon,\n.markdown-body .csv-data .blob-num,\n#feedBody,\n.search-result-header,\n.accessibility-aid:focus,\n.file-data,\n.signup-plans th,\n.signup-plans td,\n.signup-plans-orgs th,\n.signup-plans-orgs td,\n.commits td,\n.featured-callout,\n.sidebar-module ul ul li,\n.native-download,\n.setup-info-module,\ndiv#common-issues ul,\n#gist-form .name,\n.subnav-item,\n.render-notice,\n.label-edit.edit-color-label-form .color-editor .color-editor-input,\n.date_selector td,\n.new-label,\n.range-editor .range,\n.range-editor .flag,\n.octotree_sidebar,\n.auth-form-body,\ndiv.border-wrap,\n.profile-header,\n.highlight .gc,\n.uploaded-files.is-populated,\n.range-editor,\n#gollum-editor-help-parent li a.selected,\n#gollum-editor-help-list li a.selected,\n#gollum-editor-help-parent li a:hover,\n#gollum-editor-help-list li a:hover,\n.github-access-banner,\n.protip-callout,\nul.comparison-list,\n.wiki-custom-sidebar,\n.invitation-container,\n.orgs-help-shelf,\n.orgs-help-item-octicon,\ntextarea,\n.thread-subscription-status,\n.branch-action-body .merge-branch-form,\n.pull-info,\n.branch-link,\n.discussion-item-merged.open .discussion-item-details,\n.word-upload-callout,\n.commit-tease-contributors,\n.session-authentication .create-account-callout,\n.intgrs-lstng-item,\n.intgr-install-callout,\n.is-failed .repo-file-upload-errors,\n.is-bad-file .repo-file-upload-errors,\n.is-too-big .repo-file-upload-errors,\n.is-too-many .repo-file-upload-errors,moz-extension://7d69bfd2-7bdf-41a4-8b4c-d5d025044fe0/edit.html?id=26#\n.is-empty .repo-file-upload-errors,\n.site-header,\n.site-subheader,\n.pricing-card,\n.explore-signup-entice,\n.price-box,\n.cvv-hint-tooltip,\n.plan-choice,\n.date-selector td,\n.user-profile-sticky-bar:after,\n.review-thread,\n.card,\n.tutorial,\n.overview .card > div[style*='background'],\n.Box-footer,\n.ScreenshotCarousel,\n.card-filter-autocomplete-dropdown .autocomplete-keyword-only,\n.inbox-zero,\n.tag-input .suggester,\n.review-comment:target .timeline-comment-label,\n.review-comment:target button.reaction-summary-item {\n background: var(--bg1) !important;\n border-color: var(--bg1) !important;\n}\n.pagehead ul.actions a.feed,\n.explore h2 .feed,\n#code_search_instructions h2,\ntd.inst,\n.metabox-loader,\n.pull-flag,\n.browser-content,\n.filterbar ul.filters li,\n.pagehead ul.tabs li.contextswitch,\n#wiki-header > div,\n.pagehead ul.tabs li.contextswitch:hover,\n.bigbutton a,\n#new_message,\n#issues_next ul.sorts li,\nul.sorts li.asc,\nul.sorts li.desc,\n.listings-layout .columns.main .content,\n.fieldswrap,\n.filterbar li.selected,\n#issues_next ul.filters li,\ntable.instruction tr:nth-child(2n),\n.email-hidden-toggle a,\n#commit-activity-master-head,\n.action-indicator,\n.pull-head .diffstat,\nul.suggestions,\n.discusion-topic-infobar,\n.commits-listing:before,\n.discussion-item-icon,\n.jstree-wholerow-hovered,\n.bubble-contents,\n.ellipsis-button,\n.filter-list li span.bar,\n.selectable_day.today,\n.billing-plans .current,\n.commits-listing:before,\n.billing-section .usage-bar,\n.issue-list em,\n.file-info-divider,\n.pagehead ul.tabs li a:hover,\n.repos .bottom-bar,\n#languages .popular,\n.tip-box h4,\ntable.upgrades td,\n.commit-preview .message,\n.commit-preview p.error,\n.pagehead ul.tabs li.contextswitch,\n#browser tr th,\n.status-box h4,\n.line_numbers,\n#files span.icon,\n#issues_list .actions,\n#repos .public,\n.inset-callout,\n#repo-message,\n.repo-private-label,\n.label-admin,\na.team-member-ellipsis,\n.code-list em,\n.user-list em,\n.credit-card.normal .signature,\n.credit-card.amex .gladiator,\n.subnav-item:hover,\n.subnav-item:focus,\n.wiki-list em,\n.progress-bar:not(.anim-grow-x),\n.header-search-scope:hover,\n.CommunityTemplate-highlight--focus,\n.related-issue-item.navigation-focus,\n.commit-sha {\n background: var(--bg5) !important;\n}\n.template-previews .discussion-sidebar-heading,\nbody,\n.Box-row-link,\n.btn,\n.social-count,\n.form-control,\n.form-select,\np.explain strong,\n.menu-item.selected,\n.menu-item .octicon,\n.tabnav-tab.selected,\n.tabnav-tab:focus,\n.tabnav-tab:hover,\n.UnderlineNav-item:focus,\n.UnderlineNav-item:hover,\n.UnderlineNav-item.selected,\n.text-gray-dark,\n.link-gray-dark,\n.text-emphasized,\n.Counter--gray-light,\n.markdown-body span.frame span span,\n.table-list-header-toggle .btn-link:hover,\n.table-list-header-toggle .btn-link.selected,\n.table-list-header-toggle .btn-link.selected:hover,\n.table-list-header-toggle .select-menu-button.selected,\n.table-list-header-toggle .select-menu-button.selected:hover,\n.table-list-header-toggle .select-menu-button:hover,\n.breadcrumb strong.final-path,\n.commit-author-section,\n.commits-list-item .commit-title,\n.signed-commit-signer-name .signer,\n.toc-select .select-menu-item-heading,\n.toc-select .select-menu-item-text,\n.blob-code-inner,\n.blob-code-addition .x,\n.blob-code-deletion .x,\n.tabnav-pr .tabnav-tab.selected,\n.discussion-item-entity,\n.discussion-item-ref-title .title-link,\n.pull-request-integrations-title,\n.discussion-item .renamed-is,\n.discussion-item .renamed-was,\n.dropdown-item,\n.keyboard-mappings th,\n.list-group-item-link,\n.team-mention,\n.user-mention,\n.pagehead-actions > li,\n.pagehead-tabs-item:hover,\n.pagehead-tabs-item.selected,\n.reponav-item:focus,\n.reponav-item:hover,\n.reponav-item.selected,\n.steps li.current,\n.prose-diff.collapsed .rich-diff-level-zero.expandable:hover .octicon,\n.prose-diff.collapsed .rich-diff-level-zero.expandable:only-child:hover:before,\n.radio-label,\n.select-menu-divider,\n.select-menu-header .select-menu-title,\n.select-menu-tabs .select-menu-tab-nav:hover,\n.select-menu-tabs a:hover,\n.select-menu-tabs .select-menu-tab-nav.selected,\n.select-menu-tabs .select-menu-tab-nav[aria-selected='true'],\n.select-menu-tabs a.selected,\n.select-menu-tabs a[aria-selected='true'],\n.select-menu-blankslate h3,\n.select-menu-item.selected,\ndetails-menu .select-menu-item[aria-checked='true'],\ndetails-menu .select-menu-item[aria-selected='true'],\n.select-menu-item.selected > .octicon,\ndetails-menu .select-menu-item[aria-checked='true'] > .octicon,\ndetails-menu .select-menu-item[aria-selected='true'] > .octicon,\n.select-menu-item-parent.navigation-focus,\n.select-menu-item-parent.navigation-focus.selected,\n.select-menu-item-parent[aria-selected='true'],\n.select-menu-item-parent[aria-selected='true'].selected,\n.select-menu-item-parent.navigation-focus .octicon-check,\n.select-menu-item-parent.navigation-focus.selected .octicon-check,\n.select-menu-item-parent[aria-selected='true'] .octicon-check,\n.select-menu-item-parent[aria-selected='true'].selected .octicon-check,\n.selected .checks-index-label,\n.code-list em,\n.search-autocomplete-dropdown .autocomplete-text,\n.CommunityTemplate-highlight,\n.dashboard-notice h2,\n.exploregrid-item-title,\n.getting-started .link-text,\n.jump-to-field-active,\n.page-responsive .HeaderMenu-link:hover,\n.page-responsive .HeaderMenu-details[open] .HeaderMenu-link,\n.header-nav-current-user .user-profile-link,\n.select-menu-item.navigation-focus > .octicon.label-options-icon,\n.select-menu-item[aria-selected='true'] > .octicon.label-options-icon,\n.repository-lang-stats ol.repository-lang-stats-numbers li .lang,\n.marketplace-plan-emphasis,\n.merge-branch-heading,\n.oauth-org-access-details .oauth-org-item.on strong,\n.oauth-application-whitelist .request-info strong,\n.oauth-application-info .application-title,\n.developer-app-item .developer-app-name,\n.org-insights-cards [role='tab'][aria-selected='true'],\n.manage-repo-access-not-active,\n.manage-memberships-tabs-item.selected,\n.pinned-repo-checkbox:checked + .pinned-repo-name,\n.access-token .token-description,\n.token-scope,\n.shelf-dismiss .close-button:hover,\n.team-listing .is-open .expand-nested-team,\n.user-status-emoji-tab[role='tab'][aria-selected='true'],\n.subheader-nav .nav-item.selected,\n.illflow-item.selected .illflow-item-heading,\n.MarketingBody-lead > p:first-child,\n.site-header-nav .dropdown-menu a.active,\n.flash {\n color: rgba(255, 255, 255, 0.7) !important;\n}\n.text-alpha,\n.text-beta,\n.text-delta,\n.text-gamma,\nh1,\nh2,\nh3,\nh4,\nh5,\n.link-muted:hover,\n.text-black,\n.menu-item.selected,\n.header-enterprise-version {\n color: rgba(255, 255, 255, 0.65) !important;\n}\n.subnav-bordered,\n.markdown-body h1,\n.markdown-body h2,\n.boxed-group-table th,\n.boxed-group-table td,\n.capped-card > p,\n.capped-card h3,\n.select-menu-item,\ntable.files tr.up-tree,\ntable.capped-list td,\n.pricing-table td {\n border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;\n}\n.list-browser-item.navigation-focus,\n.headlines li:hover,\n.js-details-container.navigation-focus,\n.js-details-container.navigation-focus:nth-child(2n),\n.team-grid .team-members,\n.tree-browser tr.navigation-focus td,\n.issues-listing .table-list-issues .selectable:hover,\n.issues-listing .table-list-issues .navigation-focus,\n.setup-plans tr.selected,\n.notifications .navigation-focus,\n.sidebar-module ul ul li a:hover,\n.typeahead-result,\n.no-results,\n.link-overlay .link,\n#gollum-editor-help-list,\n.owner-select-target,\n.divider .blob-code div.highlight,\n.oauth-org-access-details .boxed-group-list > li.on:hover,\npre div:hover,\n.summary-stats li a:hover,\n.pinned-repos-selection-list-item.selected,\n.Box-body-row--highlight.navigation-focus,\n.Box-body-row--highlight:hover,\n.js-current .standalone a,\n.menu-item:hover,\n.Box-row--focus-gray.navigation-focus,\n.team-listing .is-open.root-team,\n.Box-row--hover-gray:hover,\n.Box-row--hover-blue:hover,\ntable.files tr[aria-selected='true'] td,\n.label-select-menu .select-menu-item[aria-selected='true'],\n.label-select-menu .select-menu-item.navigation-focus,\n.user-profile-nav {\n background: var(--bg4) !important;\n}\n.ellipsis-expander,\n.hidden-text-expander a,\n.subnav-search-context .btn,\n.markdown-body kbd,\n.email-format .email-hidden-toggle a,\n.commit .commit-title,\n.commit .commit-title a,\n.commit-tease-sha,\n.timeline-commits .author,\n.timeline-commits .commit-message > code a,\n.full-commit .branches-list li,\n.full-commit .sha-block > .sha,\n.full-commit .sha-block > a,\n.branches-tag-list li:first-child,\n.keyboard-mappings,\nkbd,\n.pagehead-tabs-item .Counter,\n.reponav-item .Counter,\n.protip-callout,\n.render-notice,\n.select-menu-header .close-button:hover,\n.select-menu-header .octicon:hover,\n.select-menu-action,\n.page-responsive .HeaderMenu-link,\ntable.capped-list .octicon,\n.illflow-item .illflow-item-heading,\n.action-card-syntax,\n.markdown-format kbd,\n.repohead h1.private .octicon {\n color: rgba(255, 255, 255, 0.6) !important;\n}\nul.sidetabs li a:hover,\n.editbox h1,\n#issues .labels .admin,\n#issues .display .sortbar,\n#facebox .close,\n#issues_search .wrapper,\n.ranked-repositories .meta a,\n.actor,\nul.nav.logged_out,\n.tip-box a.next,\n#inbox .list .unread,\n.main .filterbar,\n.browser-content .footerbar,\nul.smalltabs,\n.snippet,\n.supportstaffer,\n.discussion-form,\n.chooser-box,\n.chooser-box h3,\n#forkqueue .instructions,\n.selector-item.clear:hover,\n#contributors-master svg,\n.inset-callout h2,\n.documentation ul.nav,\n.date_selector td.selected,\n#contributors-master,\n.context-title,\n.list-module h2,\n.bootcamp-help h1,\ntable.files tr.up-tree a:hover,\n.ellipsis-button:hover,\n.codesearch-results .repo-list-name em,\n.codesearch-results .repo-list-description em,\n.blog-search-results em,\n.codesearch-cols em,\nul.bignav li a:hover,\nul.smallnav li a:hover,\n.comments-wrapper,\n.rackspace,\n.subnav-bar > ul > li > ul > li > a:hover,\n.issue.active,\n.orgs-nav .count,\n.filter-item:not(.selected):hover,\n.task-progress .progress-bar .progress,\n.oauth-connection-illustration .oauth-image,\n.manage-repo-access-wrapper:before,\n.counter,\n.Counter,\n.block-diff-neutral {\n background: var(--bg6) !important;\n}\n.vcard-detail .octicon,\n.member-badge .octicon,\n.command-bar .octicon-question:before,\n.news .alert .time,\nul.color-label-list .color-label.zeroed,\nul.color-label-list .color-label.zeroed .count,\n.gh-header-title .issue-number,\na.leaderboard-list-rank,\n.bootcamp ul li a,\n.ssh-key-fingerprint,\n.tag-references > li a,\n.release .release-authorship,\n.branches .branch-summary,\n.branches .no-results-message,\nheader ul.links > li a,\n.team-info-card .stats-group .stat,\n.team-info-card .stats-group .stat.no-link:hover,\n.discussion-sidebar-item,\n.issues-listing .table-list-issues .issue-meta,\n.task-progress,\n.table-list-milestones .stat-label,\n.table-list,\n#blog-home,\n.blog-post-meta,\n.blog-post-meta a,\n.blog-post-meta .octicon,\n.diff-line-num,\n.file-data .line-numbers span,\n.discussion-item .timestamp,\n.branch-status .divider,\n.news .alert .octicon,\n.news .alert .mega-octicon,\n.blankslate > .mega-octicon,\n.repo-list-meta,\na.discussion-item-help,\n.page-new-repo .license-info,\n.notification-actions .btn-link,\n.commit-info .commit-meta,\n.notifications .read .type-icon,\n.notification-actions .age,\n.list-item .byline,\n.issue-list-meta,\n.blob-num-expandable .diff-expander,\n.file-type-icon,\n.uploaded-files .remove,\n.releases-tag-list td.date a,\n.collaborators .collab-remove .remove-link,\n.octofication .notice-dismiss,\nul.comparison-list > li .octicon,\ndiv.content-header h6,\n.fullscreen-overlay textarea,\n.blob-num.non-expandable:hover,\n.breadcrumb,\n.application-authorizations .oauth-app-list-meta,\n.application-authorizations .oauth-app-owner,\n.boxed-group-inner .help,\n.thread-subscription-status .reason,\n.toc-diff-stats .octicon,\n.blob-num,\n.recent-gists .description .blank,\n.recent-gists .metadata,\n.member-meta .access-link,\n.gist-quicksearch-no-results,\n#user-content-toc ul ul li:before,\n.btn-octicon,\nbutton.btn-octicon,\n.user-list li em,\n.reponav-item .octicon,\n.pagehead-tabs-item .octicon,\n.table-list-header-toggle .btn-link,\n#graph_data h2,\n#message-list .message .time,\n.tabnav .tabnav-extras,\n.discussion-item-integrations-callout .pull-request-integrations-dismiss,\n.oauth-application-info .meta-link,\n.oauth-application-info .app-info,\n.repo-file-upload-file-wrap .remove-file,\n.gcr-ext-editor-close svg,\n.commit-id,\n.orghead .edit-org,\n.signed-commit-badge,\n.manage-member-meta-item .btn-link,\n.note,\n.topic-tag-action .add-topic-button,\n.topic-tag-action .remove-topic-button,\n.text-gray-light,\n.js-notice .octicon-x,\na.footer-octicon:hover,\n.table-of-contents .toc-diff-stats .octicon {\n color: rgba(255, 255, 255, 0.3) !important;\n}\n.btn:disabled,\n.btn:disabled:hover,\n.btn.disabled,\n.btn.disabled:hover,\nbutton.button:disabled,\nbutton.button:disabled:hover,\nbutton.button.disabled,\nbutton.button.disabled:hover,\nbutton.minibutton:disabled,\nbutton.minibutton:disabled:hover,\nbutton.minibutton.disabled,\nspan.minibutton.disabled,\na.minibutton.disabled,\nbutton.minibutton.disabled:hover,\na.minibutton:disabled:hover,\na.minibutton.disabled:hover,\nspan.minibutton:disabled:hover,\nspan.minibutton.disabled:hover,\n.search-result-group,\n.gist-quicksearch-result-group {\n background: var(--bg2) !important;\n border-color: var(--bg2) !important;\n color: rgba(255, 255, 255, 0.2) !important;\n}\n.avatar.avatar-more,\n.AvatarStack--right .avatar.avatar-more:after,\n.markdown-body .csv-data th,\n.capped-card-content,\n.new-discussion-timeline .previewable-comment-form .comment-form-head.tabnav,\n.select-menu-divider,\n.select-menu-header,\n.payment-history .failed,\n.payment-history .refunded,\n.search-autocomplete-dropdown .autocomplete-keyword-only,\n.tint-box,\n.MarketplaceEdit-body .menu-item:hover,\ntable.files tr.navigation-focus td,\ntable.files tr[aria-selected='true'] td,\n.team-member-ellipsis:hover,\ntable.capped-list th,\n.action-card:after,\n.action-card:before,\n.action-card-header:before,\n.gistsearch-aside .filter-list li span.bar,\n.gist-quicksearch-results .gist-quicksearch-result-header {\n background: var(--bg1) !important;\n}\n.sidebar-module,\n.form-control,\n.form-select,\n.octotree_github_sidebar input[type='text'],\n.octotree_github_sidebar textarea,\ndiv.search-form input,\n#search > input[name='q'] {\n background-color: var(--bg2) !important;\n border-color: var(--bg2) !important;\n}\n.octofication .message,\n.panel-nav:not(.disabled):active,\n.diagram-icon:not(.active),\n.btn.btn-outline:hover:not(.ajax-pagination-btn),\n.btn.btn-outline.zeroclipboard-is-hover,\n:checked + .radio-label,\n.gist-snippet .file-box:hover .file,\n.octofication .message,\n.reaction-sort-item.selected,\n.pull-request-link,\ndiv.project-card:focus,\n.timeline-progressive-disclosure-button:hover,\n.release-timeline-tags .expander-text:hover .expander-dots,\n.review-comment[aria-selected='true'],\n.timeline-comment[aria-selected='true'] .review-summary .comment-body {\n border-color: var(--selected) !important;\n}\n.repo-file-upload-progress,\n.project-updated-message,\n.delete-topic-button,\n.topic-tag-action .add-topic-button,\n.topic-tag-action .remove-topic-button,\n.commit-desc + .commit-branches,\n.full-commit .btn-outline {\n border-color: var(--btn3) !important;\n}\n.template-previews .discussion-sidebar-heading:hover,\n.zeroclipboard-link,\na:not(.IssueLabel),\n.Box-row.navigation-focus .Box-row--drag-button,\n.Box-row-link:hover,\n.btn-blue .Counter,\n.btn-outline,\n.btn-outline.selected .Counter,\n.btn-outline:active .Counter,\n.btn-outline:hover .Counter,\n[open] > .btn-outline .Counter,\n.social-count:hover,\n.btn-link,\n.drag-and-drop-error-info a,\na.tabnav-extra:hover,\n.pagination a,\n.pagination em,\n.pagination span,\n.text-blue,\n.link-gray:hover,\n.link-gray-dark:hover,\n.link-hover-blue:hover,\n.muted-link:hover,\na.branch-name,\n.ajax-pagination-form .ajax-pagination-btn,\n.btn-invisible,\n.btn-invisible.selected,\n.btn-invisible.zeroclipboard-is-active,\n.btn-invisible.zeroclipboard-is-hover,\n.btn-invisible:active,\n.btn-invisible:focus,\n.btn-invisible:hover,\n.btn-octicon:hover,\n.commit .commit-title .issue-link,\n.commit-link,\n.timeline-commits .commit-message > code a:hover,\n.commit-id:hover,\n.discussion-sidebar-toggle:hover,\n.milestone-name:hover,\n.sidebar-assignee .assignee:hover,\n.participation a:hover,\n.timeline-comment-action:focus,\n.timeline-comment-action:hover,\n.discussion-item-link:hover,\n.discussion-item-entity:hover,\n.discussion-item-ref-title .title-link:hover,\n.discussion-item-help:hover,\n.steps li.current .octicon,\n.prose-diff .show-rich-diff,\n.select-menu-action:hover,\n.select-menu-new-item-form .octicon,\n.marketing-hero-octicon .octicon,\n.intgrs-lstng-item-link:hover .intgrs-lstng-item-header,\n.intgr-admin-link:hover .octicon,\n.listgroup-item:hover .link-small,\n.rule-type-conditions,\n.code-list .blob-num a:hover,\n.coupon-icon,\n.dashboard-notice .octicon-organization,\n.dashboards-overview-cards .summary-stats .metric-1,\n.repo-snipit:hover .repo-snipit-description,\n.repo-snipit:hover .repo-snipit-name,\n.exploregrid-item:hover .exploregrid-item-title,\n.getting-started .link-text strong,\n.scoped-search .form-control.focus .header-search-scope,\n.issues-reset-query:hover,\n.milestone-title-link a:hover,\n.milestone-description .expand-more,\na.task-progress:hover,\n.page-new-repo .license-info,\n.notifications .notifications-more > a,\n.notifications-sso-prompt em,\n.notification-actions .btn-link:hover,\n.oauth-application-whitelist .edit-link:hover,\n.developer-app-item .developer-app-name:hover,\n.org-insights-card-legend .metric-0,\n.orghead .edit-org:hover,\n.export-actions a:hover,\n.member-row a:hover,\n.invite-team-member-list .team-link,\n.stats-group-stat:hover,\n.stats-group-stat:hover .stat-number,\n.ldap-memberships-list .edit,\n.project-comment-body-hover .octicon-pencil:hover,\n.project-comment-title-hover .octicon-pencil:hover,\n.profile-rollup-toggle:hover,\n.pr-toolbar .subset-files-tab,\n.numbers-summary a:hover,\ntable.files td.message a:hover,\n.session-details:hover .octicon,\n.setup-header .lead a:hover,\n.shelf-dismiss:hover,\n.orgs-help-item-octicon .octicon,\n.orgs-help-dismiss:hover,\n.team-member-ellipsis:hover,\n.team-listing .team-name,\n.team-listing .team-show-more,\n.team-listing .expand-nested-team:hover,\n.tree-browser tr.navigation-focus td .octicon-chevron-right,\n.tree-browser tr[aria-selected='true'] td .octicon-chevron-right,\n.tree-browser-result mark,\n.toolbar-commenting .dropdown-item:hover,\n.toolbar-commenting .dropdown-item:focus,\n.toolbar-item .menu-target:hover,\n.toolbar-item:hover,\n.toolbar-item .menu-target:focus,\n.toolbar-item:focus,\n.link-mktg:hover,\n.btn-outline-mktg:hover,\n.illflow-blue .illflow-item .illflow-item-heading,\n.MarketingBody-lead a:hover {\n color: var(--selected) !important;\n}\n.HeaderNavlink:hover,\n.HeaderNavlink:focus,\ntable.files .octicon-file-directory,\ntable.files .octicon-file-symlink-directory,\ntable.files .octicon-file-submodule,\n.header-logo-invertocat:hover,\n.notification-indicator:hover,\n.btn.btn-outline,\n.full-commit .btn-outline:not(:disabled):hover,\n.markdown-body a strong,\n.markdown-format a strong,\n.notifications.list-group a:hover,\n.octotree_sidebar .octotree_bottom a:hover i:before {\n color: var(--selected) !important;\n}\n#com #header .top-nav .dropdown-button:hover .dropdown-caret,\n.header-nav-link:hover .dropdown-caret,\n.header-nav-link:focus .dropdown-caret,\n.header-navlink:hover .dropdown-caret,\n.header-navlink:focus .dropdown-caret,\n.HeaderNavlink:hover .dropdown-caret,\n.HeaderNavlink:focus .dropdown-caret {\n border-top-color: var(--selected) !important;\n}\n.btn-primary:not(.compare-button):not(.btn-outline):not([disabled]):not(.disabled),\n.button.primary,\n.btn-theme-green,\n.btn-primary-mktg {\n background: var(--btn) !important;\n border-color: var(--btn) !important;\n}\n.btn-primary:not(:disabled):not(.disabled):not(.compare-button):not(.btn-outline):hover,\n.button.primary:not(:disabled):hover,\n.btn-theme-green:hover,\n.btn-primary-mktg:hover {\n background: var(--btn) !important;\n border-color: #7686C3 !important;\n}\nimage-crop .handle:before,\n.pagination a,\n.pagination em,\n.pagination span,\n.AvatarStack-body,\n.blankslate code,\n.markdown-body .csv-data .blob-num,\n.ajax-pagination-form .ajax-pagination-btn,\n.autocomplete-results,\n.suggester,\n.boxed-group-inner,\n.commit-group-title .octicon-git-commit,\n.full-commit .commit-meta,\n.conversation-list-heading .inner,\n.details-overlay[open] > .dropdown-item:hover,\n.discussion-timeline.team-discussion-timeline .blankslate,\nul.comparison-list,\n.tint-box.transparent,\n.dashboard-notice .coupon,\n.getting-started .list-group-item,\n.topic-tag-outline,\n.MarketplaceEdit-body .menu-item.selected,\n.oauth-org-access-details .oauth-org-item.on,\n.oauth-org-access-details .oauth-org-item.revoked,\n.manage-repo-access-icon,\ntable.files,\n.qr-code-table .white,\n.action-card:after,\n.action-card-controls:before,\n.actions-bg-mask,\n.TenYearNav-year.selected .TenYearNav-digits,\n.TenYearNav-year:hover .TenYearNav-digits,\n.gist-snippet-meta .gist-count-links > li > a:hover,\n.gist-quicksearch-results,\ndiv#common-issues ul,\n.markdown-format img,\n.dropdown-menu,\n.btn-primary .counter,\n.bg-white,\n.card,\n.pagination > span,\n.rgh-reactions-near-limit,\n.select-menu-item {\n background: var(--bg2) !important;\n}\n.timeline-comment.current-user,\n.github-jobs-promotion p,\n.octotip,\n.markdown-format .alert:not(.warning),\n.full-commit.commit,\n.bootcamp .bootcamp-body,\n.bootcamp h1,\n.owners-notice,\n.new-user-avatar-cta,\n.full-commit .browse-button,\n.commit-ref,\n.branch-name,\n.timeline-comment.current-user .timeline-comment-header .timeline-comment-label,\n.file-history-tease,\n.flash,\n.flash-global,\n.feature-banner,\n.recently-touched-branches,\n.timeline-progressive-disclosure-items button,\n.pr-toolbar .subset-files-tab,\narticle.full .alert,\n.btn.btn-blue,\n.topic-tag,\n.RecentBranches,\n.js-tag-input-tag,\nul.search-results li .label,\n.topic-tag-action,\n.alert {\n border: 1px solid var(--btn2) !important;\n}\n.timeline-comment.current-user .timeline-comment-header,\n.blob-history,\n.recently-touched-branches li {\n border-bottom-color: var(--btn2) !important;\n}\n.timeline-comment.current-user .timeline-comment-header,\n.github-jobs-promotion p,\n.octotip,\n.markdown-format .alert:not(.warning),\n.full-commit.commit,\n.flash,\n.bootcamp h1,\n.bootcamp-body,\n.owners-notice,\n.full-commit .browse-button,\n.blob-history,\n.branch-name,\n.new-user-avatar-cta,\n.jstree-wholerow-clicked,\n.commit-ref,\n.api .alert,\n.file-history-tease,\n.flash,\n.flash-global,\n.feature-banner,\n.recently-touched-branches,\n.pr-toolbar .subset-files-tab,\narticle.full .alert,\n.btn.btn-blue,\n.hook-delivery-guid,\n.topic-tag,\n.topic-tag-action,\n.delete-topic-button,\n.topic-tag-action .add-topic-button,\n.topic-tag-action .remove-topic-button,\n.RecentBranches,\n.signup-prompt-bg,\nul.search-results li .label,\ndiv[style*='background-color: #044d6e'],\n.alert,\n.btn-mktg {\n background: var(--btn4) !important;\n}\n.timeline-comment.current-user:before {\n border-right-color: var(--btn2) !important;\n}\n.diff-table tr:hover > pre,\n.highlight:not(.lines) tr:not(.inline-comments):hover td.selected-line.blob-code:not(.line-age),\n.highlight:not(.lines) tr:not(.inline-comments):hover td.blob-code,\n.blob-code-hunk,\n.blob-code-expandable {\n background: var(--bg2) !important;\n}\n.pagination a:focus,\n.pagination a:hover,\n.pagination em:focus,\n.pagination em:hover,\n.pagination span:focus,\n.pagination span:hover,\n.select-menu-item + .semantic-toc-file:after,\n.semantic-toc-symbol:not(.last-visible):after,\n.tabnav-pr,\n.tabnav-pr .tabnav-tab.selected,\n.plans-card-btn {\n border-color: transparent !important;\n}\n::-webkit-scrollbar-track,\n::-webkit-scrollbar-corner {\n background: var(--bg3) !important;\n}\n::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.1) !important;\n}\npath.js-diff-placeholder {\n fill: var(--bg5) !important;\n}\n.repohead.experiment-repo-nav,\n.discussion-timeline-actions,\n.gh-header {\n background-color: var(--bg3);\n}\n.timeline-comment-wrapper {\n border-bottom: 2px solid var(--bg5);\n border-top: 2px solid var(--bg5);\n}\n.discussion-timeline-actions {\n border-top: 2px solid var(--bg5);\n}\n.discussion-item-icon {\n border: 2px solid var(--bg5);\n}\n.discussion-timeline:before,\n.profile-timeline.discussion-timeline:before,\n.profile-timeline.discussion-timeline .profile-timeline-month-heading:after {\n background-color: var(--bg5);\n}\n.thread-subscription-status {\n background-color: var(--bg3) !important;\n}\n.Counter {\n color: rgba(255, 255, 255, 0.75);\n}\n.UnderlineNav-item.selected,\n.UnderlineNav-item:focus,\n.UnderlineNav-item:hover {\n border-bottom-color: var(--selected);\n}\n.profile-timeline-year-list {\n background: var(--bg3) !important;\n}\n.contribution-activity .filter-item.selected {\n color: rgba(0, 0, 0, 0.7) !important;\n}\n.markdown-body img {\n background-color: transparent;\n}\n.ellipsis-expander,\n.hidden-text-expander a {\n background: rgba(0, 0, 0, 0.2);\n}\n\n/* CODE */\n.pl-s .pl-s1,\n.pl-smi {\n color: #b2ccd6;\n}\n.pl-e,\n.pl-en {\n color: #50fa7b;\n}\n.pl-c1,\n.pl-s .pl-v {\n color: #ffb86c;\n}\n.pl-pds,\n.pl-s,\n.pl-s .pl-pse .pl-s1,\n.pl-sr,\n.pl-sr .pl-cce,\n.pl-sr .pl-sra,\n.pl-sr .pl-sre {\n color: #f1fa8c;\n}\n.pl-ent {\n color: #8be9fd;\n}\n.pl-mi1 {\n color: #8be9fd;\n background-color: var(--bg4);\n}\n.pl-k {\n color: #ff79c6;\n}\n.pl-smw,\n.pl-v {\n color: #bd93f9;\n}\n.pl-c {\n color: #6272a4;\n}\n.blob-code-inner.highlighted {\n background-color: var(--btn);\n}\n.blob-code-deletion {\n background-color: hsla(353, 25%, 30%, 1);\n}\n.blob-num-deletion {\n background-color: hsla(353, 25%, 25%, 1);\n border-color: hsla(353, 25%, 20%, 1);\n}\n.blob-code-addition {\n background-color: hsla(137, 25%, 30%, 1);\n}\n.blob-num-addition {\n background-color: hsla(137, 25%, 25%, 1);\n border-color: hsla(137, 25%, 20%, 1);\n}\n.blob-code-addition .x {\n background-color: hsla(135, 73%, 30%, 1);\n}\n.blob-code-deletion .x {\n background-color: hsla(353, 73%, 30%, 1);\n}\n.timeline-comment {\n color: inherit;\n}\n/* comments */\n.comment-body,\n.js-comment-body {\n color: #f8f8f2 !important;\n}\n/* timeline background lines, badges, etc */\n.TimelineItem-break {\n background-color: var(--bg3) !important;\n border-top: 4px solid var(--bg5) !important;\n}\n.TimelineItem:before {\n background-color: var(--bg5) !important;\n}\n.TimelineItem-badge {\n border: 2px solid var(--bg5) !important;\n}\n/* tabs on the comment box and such, Write, Preview, etc */\n.tabnav-tab.selected,\n.tabnav-tab[aria-selected='true'] {\n background-color: var(--bg5) !important;\n border-color: var(--bg4) !important;\n}\n/* badges, like bug, feature, etc, */\n.protip code {\n background-color: var(--bg5) !important;\n padding: 3px;\n}\n.menu-item.selected {\n background-color: var(--bg4);\n}\n.menu .menu-item:hover {\n background-color: var(--bg5) !important;\n}\n.timeline-comment--caret:after,\n.timeline-comment--caret:before {\n border-right-color: var(--bg1);\n}\n.Popover-message:after {\n border-bottom-color: var(--bg1);\n}\n.Popover-message--bottom-left:after,\n.Popover-message--bottom-right:after,\n.Popover-message--bottom:after {\n border-top-color: var(--bg1);\n}\n.Popover-message--right-bottom:after,\n.Popover-message--right-top:after,\n.Popover-message--right:after {\n border-left-color: var(--bg1);\n}\n.select-menu-tabs .select-menu-tab-nav.selected,\n.select-menu-tabs .select-menu-tab-nav[aria-selected='true'],\n.select-menu-tabs a.selected,\n.select-menu-tabs a[aria-selected='true'] {\n color: #24292e;\n background-color: var(--btn);\n border-color: var(--btn);\n}\n.TimelineItem-badge {\n background-color: var(--bg5);\n}\n.TimelineItem-badge .octicon {\n fill: hsla(0, 0%, 100%, 0.5);\n}\n.TimelineItem-body {\n color: hsla(0, 0%, 100%, 0.33);\n}\n.commit-ref,\n.branch-name {\n color: hsla(0, 0%, 100%, 0.4);\n}\n.diffbar,\n.pr-toolbar {\n background-color: var(--bg3);\n}\n.orghead {\n background-color: var(--bg1);\n}\n\n.comment-body a {\n color: var(--accents) !important;\n}\n", + "domains": [ + "github.com" + ] + } + ], + "name": "Dracula GitHub", + "originalDigest": "f68b01ff04b2cc0ddb61d0b91dfd2f3b87b1af73", + "id": 26, + "updateDate": 1581223257532 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/176998.json", + "md5Url": "https://update.userstyles.org/176998.md5", + "url": "http://userstyles.org/styles/176998", + "originalMd5": "1175f7014bcea33009b6ff8ed2603887", + "installDate": 1581128402636, + "sections": [ + { + "urls": [], + "urlPrefixes": [], + "domains": [ + "stackoverflow.com", + "superuser.com", + "serverfault.com", + "askubuntu.com", + "stackexchange.com" + ], + "regexps": [], + "code": "/* Conwy - Stack Exchange\r\n Version: 1.0.0\r\n Author: lineav\r\n Licence: https://creativecommons.org/licenses/by-sa/4.0/\r\n*/\r\n\r\n/* Invert the whole website */\r\nhtml {\r\n filter: invert(0.80) hue-rotate(180deg) contrast(1.2)!important;\r\n background: #ffffff !important;\r\n}\r\n\r\nimg {\r\n filter: invert(1) hue-rotate(180deg) brightness(1.1) contrast(1.05)!important;\r\n}\r\n\r\n/* invert logo */\r\nimg.h-auto.wmx100 {\r\n filter: invert(0)!important;\r\n}\r\n\r\n/* make scrollbars dark */\r\n::-webkit-scrollbar {\r\n background: #2f2f2f;\r\n width: 0.8em;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n background-color: #555555;\r\n outline: 1px solid #111111;\r\n}" + } + ], + "name": "Conwy - Stack Exchange", + "originalDigest": "055ce9ac0041cad64b4c5245fb4bb1083a231dc2", + "id": 29 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/174814.json", + "md5Url": "https://update.userstyles.org/174814.md5", + "url": "http://userstyles.org/styles/174814", + "originalMd5": "fcfb3986795d61f47eb67338edb01330", + "installDate": 1581129281945, + "sections": [ + { + "code": "html, body {\n\tbackground-color: #282a36;\n\tcolor: #f3f3f3;\n}\n\n.style-name-link {\n color: #f3f3f3;\n}\n\n#header {\n\tborder-color: transparent;\n\tbox-shadow: 0 0 16px -3px #191A21;\n}\n\n#options input[type=\"number\"] {\n\tborder-width: 1px;\t\n}\n\ninput[type=\"number\"],\nselect,\ninput[type=\"checkbox\"],\nbutton,\ninput:not([type]) {\n\tbackground-color: #282a36;\n\tborder-color: #191A21 !important;\n\tcolor: #6272a4;\n\tbackground: none;\n\tborder-radius: .2rem;\n\ttransition: .12s all;\n}\n\ninput[type=\"number\"]:hover,\nselect:hover,\ninput[type=\"checkbox\"]:hover,\nbutton:not([disabled]):hover,\ninput:not([type]):hover {\n\tborder-color: #6272a4 !important;\n\tbackground-color: #282a36 !important;\n\tcolor: #f3f3f3;\n\tcursor: pointer;\n}\n\ninput:not([type]):hover {\n\tcursor: auto !important;\n}\n\ninput[type=\"checkbox\"] {\t\n\tborder-color: #191A21 !important;\n}\n\nsvg.svg-icon.checked,\nsvg.svg-icon.select-arrow {\n\tfill: #6272a4;\n}\n\n#enabled-label:hover svg {\n\tfill: #f3f3f3 !important;\n}\n\n.cm-s-dracula .CodeMirror-activeline-background {\n\tbackground: #2d2e3b;\t\n}\n\n.resize-grip {\n\tborder-color: transparent;\n\tbox-shadow: 0 0 15px -.5px #191A21;\n\tborder-radius: 2rem !important;\n}\n\n.resize-grip::after {\n\tborder: none;\n}\n\n.CodeMirror-focused,\n.codeMirror>div>textarea {\n\toutline: none !important;\n}", + "regexps": [ + "moz-extension://.*" + ] + } + ], + "name": "dracula: stylus", + "originalDigest": "52c36bb7712fdb6f67195019664f060f4838a4f6", + "id": 30, + "updateDate": 1581130211735 + }, + { + "enabled": true, + "updateUrl": "https://userstyles.org/styles/chrome/170121.json", + "md5Url": "https://update.userstyles.org/170121.md5", + "url": "http://userstyles.org/styles/170121", + "originalMd5": "25c77995809000a269e5275133b6a485", + "installDate": 1581129599953, + "sections": [ + { + "code": "body, td, tr, input, textarea, select {\n font-family: 'open sans', 'source sans pro', 'helvetica neue', sans-serif;\n}\n\n.gt {\n font-size: 90%;\n line-height: 1.5em;\n font-weight: 400;\n color: #222;\n}\n\n.LW-avf {\n font-size: 0.95em;\n line-height: 1.45em;\n}\n\n/* //////// GLOBAL NON-COLOR ///////// */\n\n.Bu.y3, .aKB, .aKl {\n display: none;\n}\n\n.aAy {\n width: auto;\n}\n\n/* opacity icons */\n\n.gbqfi, .gb_X .gb_Nb .gb_Pb, .aQS, .n4 .G-asx, .aii, .gb_Pb, .T-I-auR.ayk-axZ-aup-I .ayk-axZ-aup-auo, .aqN, .aos, .gb_Qb {\n opacity: .7;\n background-color: transparent;\n}\n\n.gb_Rb {\n opacity: 0.7;\n}\n\n.l6 {\n padding-top: 0;\n}\n\n.J-KU-Jg-K9 .J-KU .aAy, .aRy, .aKj {\n height: 46px;\n}\n\nbody, td, tr, input, textarea, select {\n font-family: \"Helvetica Neue\", arial;\n}\n\n.aKj {\n padding-top: 4px;\n}\n\n/* search text*/\n\n.gbqfif, .gbqfq {\n height: auto;\n font-family: \"Helvetica Neue\", arial;\n margin: 0;\n}\n\n/* tab icons, something, labels */\n\n.aKp, .aRx, .as {\n display: none;\n}\n\n/* //////// BACKGROUND COLOR ///////// */\n\n.wl {\n background: #171A21;\n /* background: linear-gradient(45deg, #042029 0%,#073642 146%); */\n}\n\n/* //////// TRANSLUSCENT WHITE ///////// */\n\n.aOd, .aJ6 {\n color: rgba(255,255,255,.7);\n}\n\n.aAy.aAy.aIf-aLe.J-KU-Je.J-KU-JW .aKo {\n background-color: rgba(255,255,255,.7);\n}\n\n.J-KU-Jg-K9.aAA .aAy, .J-KU-Jg-K9.aAA .J-KU-KO.aAy, .aKj, .yO, .xY, .aKz, .gbqfqw, #gbqfb, .UI .TB {\n border: none;\n background: transparent;\n color: rgba(255,255,255,.7);\n box-shadow: none;\n}\n\n/* search bar */\n\n.gbqfqw {\n border-bottom: 1px dashed rgba(255,255,255,.3);\n /*\n border-bottom: 1px dashed rgba(0,0,0,.3);\n */\n}\n\n/* //////// TRANSLUSCENT BLACK ///////// */\n\n.NQ {\n background-color: rgba(0,0,0,.3);\n}\n\n\n/* //////// SEARCH TEXT COLOR ///////// */\n\n.gbqfif {\n color: #F573C7;\n}\n\n/* //////// UNREAD HIGHLIGHT LINE ///////// */\n\n.zE {\n background: #292936;\n}\n\n/* //////// EMAIL FROM ///////// */\n\n.xY, .e, .x2, .CL .CK {\n color: #8DBBE0;\n}\n\n/* //////// EMAIL TITLE ///////// */\n\n.y6 span {\n color: #7A8CBE;\n}\n\n/* //////// GRAY VARIANT 1 ///////// */\n\n.TO .n0, .akh, .mj, .l8, .l9, .ma, .B .Di .Dj, .l6, .z .Di .Dj, .Wz .Wy {\n color: #878C91;\n}\n\n/* buttons */\n\n.T-I-KE, .G-atb .T-I-ax7, .TD, .aOd {\n color: #878C91;\n background-color: rgba(0,0,0,.35);\n background-image: none;\n border: none;\n}\n\n/* //////// GRAY VARIANT 2 ///////// */\n\n.y6 .y2, .h0, .C .Di .Dj {\n color: #878C91;\n}\n\n/* //////// SIDEBAR MORE LINK ///////// */\n\n.n4 {\n color: #F573C7;\n}\n\n/* active menu item tick */\n\n.ain {\n border-color: #F573C7;\n}\n\n/* //////// HOUHIN ///////// */\n\n.bX a, .Cz.J-J5-Ji.e {\n color: #B587DE;\n}\n\n/* contact header */\n\n.bX {\n color: #B587DE;\n background-color: rgba(0,0,0,.35);\n}\n\n/* //////// SENCHA ///////// */\n\n.T-I-auR {\n background-image: none;\n border: none;\n background-color: #B587DE;\n color: rgba(255,255,255,.8);\n}\n\n/* Promotions line */\n\n.aJi-aLe .aDG, .aAy.J-KU-JW.aAy.aJi-aLe .aKo, .aAy.J-KU-KO.aAy.aJi-aLe .aKo {\n background-color: #B587DE;\n}\n\n/* //////// SHENG ///////// */\n\n/* flash alerts */\n\n.b8 .vh, .cc .vh, .vX .vh {\n background-color: #FFBA66;\n border: none;\n color: rgba(0,0,0,.85);\n}\n\n/* Updates Line */\n\n.aH2-aLe .aDG, .aAy.J-KU-JW.aAy.aH2-aLe .aKo, .aAy.J-KU-KO.aAy.aH2-aLe .aKo {\n background-color: #DEF085;\n}\n\n/* //////// GAIWAN ///////// */\n\n/* tooltips */\n\n.T-ays, .T-ays-atD, .T-ays-atC {\n background-color: #878C91;\n border: none;\n color: rgba(0,0,0,.85);\n}\n\n/* //////// KYUSU ///////// */\n\n.aIf-aLe .aDG, .aAy.J-KU-JW.aAy.aIf-aLe .aKo, .aAy.J-KU-KO.aAy.aIf-aLe .aKo {\n background-color: #FFBA66;\n}\n\n/* did you mean */\n\n.Wz, .ya {\n color: #FFBA66;\n background-color: rgba(0,0,0,.35);\n padding: 11px;\n}\n\n/* email line cursor */\n\n.PF.xY.PE {\n background: #FFBA66;\n}\n\n/* tab text */\n\n.aKz {\n color: #FFBA66;\n}", + "domains": [ + "mail.google.com" + ] + } + ], + "name": "dracula: gmail", + "originalDigest": "e3be0bd4ec5291d6ce6a194524e36ff2d77f3bac", + "id": 31, + "updateDate": 1581130222031 + } +] \ No newline at end of file diff --git a/config/qutebrowser/styles/github.scss b/modules/themes/fluorescence/userstyles/qutebrowser/github.scss similarity index 100% rename from config/qutebrowser/styles/github.scss rename to modules/themes/fluorescence/userstyles/qutebrowser/github.scss diff --git a/modules/themes/fluorescence/userstyles/qutebrowser/monospace-textareas.scss b/modules/themes/fluorescence/userstyles/qutebrowser/monospace-textareas.scss new file mode 100644 index 00000000..5ba2ee79 --- /dev/null +++ b/modules/themes/fluorescence/userstyles/qutebrowser/monospace-textareas.scss @@ -0,0 +1,3 @@ +textarea { + font-family: monospace; +} diff --git a/config/qutebrowser/styles/quora.scss b/modules/themes/fluorescence/userstyles/qutebrowser/quora.scss similarity index 100% rename from config/qutebrowser/styles/quora.scss rename to modules/themes/fluorescence/userstyles/qutebrowser/quora.scss diff --git a/config/qutebrowser/styles/stackoverflow.scss b/modules/themes/fluorescence/userstyles/qutebrowser/stackoverflow.scss similarity index 100% rename from config/qutebrowser/styles/stackoverflow.scss rename to modules/themes/fluorescence/userstyles/qutebrowser/stackoverflow.scss diff --git a/config/qutebrowser/styles/xkcd.scss b/modules/themes/fluorescence/userstyles/qutebrowser/xkcd.scss similarity index 100% rename from config/qutebrowser/styles/xkcd.scss rename to modules/themes/fluorescence/userstyles/qutebrowser/xkcd.scss diff --git a/config/qutebrowser/styles/youtube.scss b/modules/themes/fluorescence/userstyles/qutebrowser/youtube.scss similarity index 100% rename from config/qutebrowser/styles/youtube.scss rename to modules/themes/fluorescence/userstyles/qutebrowser/youtube.scss diff --git a/modules/themes/options.nix b/modules/themes/options.nix deleted file mode 100644 index 64a7c43a..00000000 --- a/modules/themes/options.nix +++ /dev/null @@ -1,27 +0,0 @@ -# modules/themes/options.nix - -{ options, config, lib, pkgs, ... }: -with lib; -{ - options.theme = { - wallpaper = mkOption { - type = with types; nullOr (either str path); - }; - - # TODO Colors? - }; - - config = { - my.home.home.file.".background-image".source = config.theme.wallpaper; - services.xserver.displayManager.lightdm.background = - let blurredWallpaper = - with pkgs; runCommand "blurWallpaper" - { buildInputs = [ imagemagick ]; } '' - mkdir "$out" - convert -gaussian-blur 0x2 -modulate 70 -level 5% \ - ${config.theme.wallpaper} $out/wallpaper.blurred.png - ''; - in mkIf (config.theme.wallpaper != null) - "${blurredWallpaper}/wallpaper.blurred.png"; - }; -} diff --git a/modules/vm.nix b/modules/vm.nix deleted file mode 100644 index 4cec0eac..00000000 --- a/modules/vm.nix +++ /dev/null @@ -1,14 +0,0 @@ -# modules/vm.nix -# -# For testing software or building it on other OSes. If I find out how to get -# macOS on qemu/libvirt I'd be happy to leave virtualbox behind. - -{ config, lib, pkgs, ... }: -{ - virtualisation.virtualbox.host = { - enable = true; - enableExtensionPack = true; # urg, takes so long to build - }; - - my.user.extraGroups = [ "vboxusers" ]; -} diff --git a/options.nix b/options.nix deleted file mode 100644 index 3d8ea379..00000000 --- a/options.nix +++ /dev/null @@ -1,89 +0,0 @@ -{ config, options, lib, ... }: - -with lib; -let mkOptionStr = value: mkOption - { type = types.str; - default = value; }; -in -{ - imports = [ ]; - - - ## Personal settings - options.my.username = mkOptionStr "hlissner"; - options.my.email = mkOptionStr "henrik@lissner.net"; - - - ## Convenience aliases - options.my.home = mkOption - { type = options.home-manager.users.type.functor.wrapped; }; - config.home-manager.users.${config.my.username} = mkAliasDefinitions options.my.home; - - options.my.user = mkOption { type = types.submodule; }; - config.users.users.${config.my.username} = mkAliasDefinitions options.my.user; - - options.my.packages = mkOption - { type = types.listOf types.package; - description = "The set of packages to appear in the user environment."; }; - config.my.user.packages = config.my.packages; - - - ## Shell/Environment - options.my.env = mkOption { - type = with types; attrsOf (either (either str path) (listOf (either str path))); - apply = mapAttrs - (n: v: if isList v - then concatMapStringsSep ":" (x: toString x) v - else (toString v)); - }; - options.my.init = mkOption { - type = types.lines; - description = '' - An init script that runs after the environment has been rebuilt or - booted. Anything done here should be idempotent and inexpensive. - ''; - }; - ## PATH should always start with its old value - config.my.env.PATH = [ ./bin "$PATH" ]; - config.environment.extraInit = - let exportLines = mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.my.env; - in '' - ${concatStringsSep "\n" exportLines} - ${config.my.init} - ''; - - options.my.alias = mkOption - { type = with types; nullOr (attrsOf (nullOr (either str path))); }; - options.my.zsh = { - rc = mkOption { - type = types.lines; - default = ""; - description = '' - Zsh lines to be written to $XDG_CONFIG_HOME/zsh/extra.zshrc and - sourced by $XDG_CONFIG_HOME/zsh/.zshrc - ''; - }; - env = mkOption { - type = types.lines; - default = ""; - description = '' - Zsh lines to be written to $XDG_CONFIG_HOME/zsh/extra.zshenv and - sourced by $XDG_CONFIG_HOME/zsh/.zshenv - ''; - }; - }; - - # I avoid programs.zsh.*Init variables because they initialize too soon. My - # zsh config is particular about load order. - config.my.home.xdg.configFile."zsh/extra.zshrc".text = - let aliasLines = mapAttrsToList (n: v: "alias ${n}=\"${v}\"") config.my.alias; - in '' - # This file is autogenerated, do not edit it! - ${concatStringsSep "\n" aliasLines} - ${config.my.zsh.rc} - ''; - config.my.home.xdg.configFile."zsh/extra.zshenv".text = '' - # This file is autogenerated, do not edit it! - ${config.my.zsh.env}; - ''; -}