Skip to content

Home manager module for themeing programs with base16 templates

License

Notifications You must be signed in to change notification settings

AtaraxiaSjel/base16-nix

 
 

Repository files navigation

Base16 themes for home manager

This is a fork of lukebfox/base16-nix

Differences:

  • Returns support for obtaining color values from the color scheme
  • Added possibility to select a template type ('default', 'color', etc)
  • Added possibility to use custom schemes by importing local files or remote repository
  • Removed unused files

Usage

import this flake in your 'flake.nix':

inputs.base16.url = "github:alukardbf/base16-nix";

then, in any home-manager configuration:

home.user.${user} = { config, pkgs, lib }: {
  imports = [ base16.hmModule ];
};
{ pkgs, lib, config, ...}:
{
  config = {

    # Choose your theme
    themes.base16 = {
      enable = true;
      scheme = "solarized";
      variant = "solarized-dark";
      defaultTemplateType = "default";
      # Add extra variables for inclusion in custom templates
      extraParams = {
        fontName = "Roboto Mono";
        fontSize = "12";
      };
    };

    # 1. Use pre-provided templates
    ###############################

    programs.bash.initExtra = ''
      source ${config.lib.base16.templateFile { name = "shell"; }}
    '';
    programs.rofi = {
      enable = true;
      theme = "${config.lib.base16.templateFile { name = "rofi"; type = "colors"; }}";
    };

    # 2. Template strings directly into other home-manager configuration
    ####################################################################

    services.dunst = {
        enable = true;
        settings = with config.lib.base16.theme;
            {
              global = {
                geometry         =  "600x1-800+-3";
                icon_path =
                  config.services.dunst.settings.global.icon_folders;
                alignment        = "right";
                font = "${fontName} ${fontSize}";
                frame_width      = 0;
                separator_height = 0;
                sort             = true;
              };
              urgency_low = {
                background = "#${base01-hex}";
                foreground = "#${base03-hex}";
              };
              urgency_normal = {
                background = "#${base01-hex}";
                foreground = "#${base05-hex}";
              };
              urgency_critical = {
                msg_urgency = "CRITICAL";
                background  = "#${base01-hex}";
                foreground  = "#${base08-hex}";
              };
        };
     };
  };
}

You can also use local schemes:

{ pkgs, lib, config, ...}:
{
  config = {
    # Choose your theme
    themes.base16 = {
      enable = true;
      customScheme = {
        enable = true;
        path = ./base16-custom-scheme.yaml;
      };
    };
  };
}

Or use an imported color scheme:

For example, import scheme repository into yours 'flake.nix'

inputs.base16-horizon-scheme = {
  url = github:michael-ball/base16-horizon-scheme;
  flake = false;
};
{ pkgs, lib, config, inputs, ...}:
{
  config = {
    # Choose your theme
    themes.base16 = {
      enable = true;
      customScheme = {
        enable = true;
        path = "${inputs.base16-horizon-scheme}/horizon-dark.yaml";
      };
    };

    # The template will be generated from the local scheme
    programs.rofi = {
      enable = true;
      theme = "${config.lib.base16.templateFile { name = "rofi"; }}";
    };
  };
}

Reloading

Changing themes involves switching the theme definition and typing home-manager switch. There is no attempt in general to force programs to reload, and not all are able to reload their configs, although occasionally restarting applications has been enough.

You are unlikely to achieve a complete switch without logging out and logging back in again.

Also, if you use home-manager as a module in the system configuration, the switch should be done with the command nixos-rebuild switch.

Updating Sources

If you're using nix flakes:

  • Fork this repository
  • cd into repository dir
  • Enter nix develop and then run update-base16 OR
  • Enter nix run .
  • Commit and push new files

If you're not using nix flakes:

  • cd into repository dir
  • Run update_sources.sh

Todo

Improve the source code.

About

Home manager module for themeing programs with base16 templates

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nix 71.9%
  • Python 18.5%
  • Shell 9.6%