├── spec ├── text.txt ├── php.php ├── properties.properties ├── ini.ini ├── xslt.xsl ├── yaml.yml ├── xml.xml ├── python.py ├── html.html ├── sql.sql ├── json.json ├── javascript.js ├── jsx.jsx ├── markdown.md ├── haml.haml ├── ruby.rb ├── css.css ├── less.less ├── coffeescript.coffee ├── sass.scss ├── COMMIT_EDITMSG ├── groovy.groovy └── java.java ├── .gitignore ├── gruvbox.png ├── CONTRIBUTING.md ├── CHANGELOG.md ├── styles ├── languages │ ├── cs.less │ ├── ini.less │ ├── python.less │ ├── ruby.less │ ├── gfm.less │ ├── css.less │ ├── java.less │ ├── diff.less │ └── json.less ├── colors.less ├── editor.less ├── syntax-variables.less └── language.less ├── index.less ├── package.json ├── README.md └── LICENSE.md /spec/text.txt: -------------------------------------------------------------------------------- 1 | Just some text. 2 | 3 | Nothing more. -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | npm-debug.log 3 | node_modules 4 | -------------------------------------------------------------------------------- /gruvbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caleb/gruvbox-syntax-atom/HEAD/gruvbox.png -------------------------------------------------------------------------------- /spec/php.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Just fork and make a pull request. 2 | 3 | It would help to have a screenshot of your changes, if applicable. -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 - First Release 2 | * Reworked the gruvbox theme off of the one-dark-syntax theme, which is more modular 3 | -------------------------------------------------------------------------------- /spec/properties.properties: -------------------------------------------------------------------------------- 1 | # This is a commment 2 | user=root 3 | schedule=* * 3 * * * 4 | retries=4 5 | dotted.property=true 6 | -------------------------------------------------------------------------------- /styles/languages/cs.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--cs { 2 | .syntax--keyword.syntax--operator { 3 | color: @gruvbox-bright-red; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /styles/languages/ini.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--ini { 2 | .syntax--keyword.syntax--other.syntax--definition.syntax--ini { 3 | color: @gruvbox-bright-blue; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /spec/ini.ini: -------------------------------------------------------------------------------- 1 | ; comment 2 | [user] 3 | email=johndoe@nowhere.com 4 | name=John Doe 5 | escape='a\=b\;' 6 | 7 | [database] 8 | server=10.0.0.1 9 | port=5452 10 | database="Orders" 11 | -------------------------------------------------------------------------------- /styles/languages/python.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--python { 2 | .syntax--keyword.syntax--operator.syntax--logical.syntax--python { 3 | color: @gruvbox-bright-red; 4 | } 5 | 6 | .syntax--variable.syntax--parameter { 7 | color: @gruvbox-bright-purple; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /spec/xslt.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /styles/languages/ruby.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--ruby { 2 | .syntax--constant.syntax--other.syntax--symbol > .syntax--punctuation { 3 | color: inherit; 4 | } 5 | 6 | .syntax--punctuation.syntax--separator.syntax--namespace { 7 | color: @gruvbox-bright-yellow; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /spec/yaml.yml: -------------------------------------------------------------------------------- 1 | root: 2 | unquoted_string: lorem ipsem 3 | quotwed_string: "lorem ipsum" 4 | integer: 123 5 | float: 3.14 6 | boolean: true 7 | null: null 8 | list: 9 | - one 10 | - two 11 | - three 12 | map_list: 13 | - one: 1 14 | - two: "two" 15 | - three: 3.0 16 | -------------------------------------------------------------------------------- /styles/languages/gfm.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--gfm { 2 | .syntax--markup { 3 | -webkit-font-smoothing: auto; 4 | &.syntax--heading { 5 | color: @gruvbox-bright-blue; 6 | } 7 | 8 | &.syntax--link { 9 | color: @gruvbox-bright-red; 10 | } 11 | } 12 | 13 | .syntax--link .syntax--entity { 14 | color: @gruvbox-bright-green; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /spec/xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | King 7 | 8 | 100000 9 | R&D 10 | 11 | 12 | -------------------------------------------------------------------------------- /styles/languages/css.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--css { 2 | // highlight properties/values if they are supported 3 | .syntax--property-name { 4 | color: @gruvbox-light2; 5 | } 6 | 7 | .syntax--property-value { 8 | color: @gruvbox-light2; 9 | &.syntax--support { 10 | color: @syntax-fg; 11 | } 12 | &.syntax--constant { 13 | color: @gruvbox-bright-blue; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /index.less: -------------------------------------------------------------------------------- 1 | 2 | // Atom Syntax Theme: Gruvbox 3 | 4 | @import (reference) "styles/syntax-variables"; 5 | 6 | @import 'editor'; 7 | @import 'language'; 8 | 9 | @import 'languages/cs'; 10 | @import 'languages/css'; 11 | @import 'languages/diff'; 12 | @import 'languages/gfm'; 13 | @import 'languages/ini'; 14 | @import 'languages/java'; 15 | @import 'languages/json'; 16 | @import 'languages/ruby'; 17 | @import 'languages/python'; 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gruvbox", 3 | "theme": "syntax", 4 | "version": "1.0.7", 5 | "description": "A Gruvbox theme for Atom that aims to be just a little groovier", 6 | "keywords": [ 7 | "dark", 8 | "green", 9 | "orange", 10 | "syntax" 11 | ], 12 | "repository": "https://github.com/caleb/gruvbox-syntax-atom", 13 | "license": "MIT", 14 | "engines": { 15 | "atom": ">0.50.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /spec/python.py: -------------------------------------------------------------------------------- 1 | @requires_authorization 2 | def somefunc(param1='', param2=0): 3 | r'''A docstring''' 4 | if param1 > param2: # interesting 5 | print 'Gre\'ater' 6 | return (param2 - param1 + 1) or None 7 | 8 | class SomeClass: 9 | def cats(arg): 10 | abc = 1 11 | deg = [1, 2, '3'] 12 | 13 | def another(arg): 14 | pass 15 | 16 | >>> message = '''interpreter 17 | ... prompt''' 18 | -------------------------------------------------------------------------------- /spec/html.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Title 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |

HTML sample

13 |
14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gruvbox Syntax Theme for Atom 1.0 2 | 3 | A Gruvbox theme for Atom that adheres to the vim theme. Easy on the eyes, beautiful theme. 4 | 5 | A big thanks to Isaac Hess for creating the [original Gruvbox theme for Atom](https://github.com/isaachess/gruvbox-atom) on which this is based. 6 | 7 | Based on [https://github.com/morhetz/gruvbox](https://github.com/morhetz/gruvbox). 8 | 9 | ![Screenshot](https://raw.githubusercontent.com/caleb/gruvbox-syntax-atom/master/gruvbox.png) 10 | -------------------------------------------------------------------------------- /spec/sql.sql: -------------------------------------------------------------------------------- 1 | -- full line comment 2 | SELECT 3 | d.name AS department, e.id, full_name, max(salary), 4 | CASE WHEN e.type = 'p' 5 | THEN 'part-time' 6 | WHEN e.type = 'f' 7 | THEN 'full-time' 8 | ELSE 'special' 9 | END 10 | FROM employees AS e 11 | INNER JOIN departments AS d ON e.department = d.id 12 | GROUP BY e.department 13 | WHERE salary > (SELECT avg(salary) FROM employees) 14 | AND e.department IS NOT NULL 15 | ORDER BY d.name -- inline comment 16 | -------------------------------------------------------------------------------- /styles/languages/java.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--java { 2 | .syntax--storage { 3 | &.syntax--modifier.syntax--import { 4 | color: @gruvbox-bright-yellow; 5 | } 6 | 7 | &.syntax--type { 8 | color: @gruvbox-bright-yellow; 9 | } 10 | } 11 | } 12 | 13 | .syntax--source.syntax--java-properties { 14 | .syntax--meta.syntax--key-pair { 15 | color: @gruvbox-bright-blue; 16 | 17 | & > .syntax--punctuation { 18 | color: @syntax-fg; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /spec/json.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "apples", 4 | "count": [12000, 20000], 5 | "description": {"text": "...", "sensitive": false} 6 | }, 7 | { 8 | "title": "oranges", 9 | "count": [17500, null, "String"], 10 | "description": {"text": "She said, \"Hello\"", "sensitive": false} 11 | }, 12 | { 13 | "deeply_nested": { 14 | "key": { 15 | "key": { 16 | "key": { 17 | "array": [1, "two", null], 18 | "string": "hello" 19 | } 20 | } 21 | } 22 | } 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /spec/javascript.js: -------------------------------------------------------------------------------- 1 | function $initHighlight(block, flags) { 2 | try { 3 | if (block.className.search(/\bno\-highlight\b/) != -1) 4 | return processBlock(block.function, true, 0x0F) + ' class=""'; 5 | } catch (e) { 6 | /* handle exception */ 7 | var e4x = 8 |
Example 9 |

1234

; 10 | } 11 | for (var i = 0 / 2; i < classes.length; i++) { // "0 / 2" should not be parsed as regexp 12 | if (checkCondition(classes[i]) === undefined) 13 | return /\d+[\s/]/g; 14 | } 15 | console.log(Array.every(classes, Boolean)); 16 | } -------------------------------------------------------------------------------- /spec/jsx.jsx: -------------------------------------------------------------------------------- 1 | function $initHighlight(block, flags) { 2 | try { 3 | if (block.className.search(/\bno\-highlight\b/) != -1) 4 | return processBlock(block.function, true, 0x0F) + ' class=""'; 5 | } catch (e) { 6 | /* handle exception */ 7 | var e4x = 8 |
Example 9 |

1234

; 10 | } 11 | for (var i = 0 / 2; i < classes.length; i++) { // "0 / 2" should not be parsed as regexp 12 | if (checkCondition(classes[i]) === undefined) 13 | return /\d+[\s/]/g; 14 | } 15 | console.log(Array.every(classes, Boolean)); 16 | } 17 | -------------------------------------------------------------------------------- /spec/markdown.md: -------------------------------------------------------------------------------- 1 | # hello world 2 | ## hello world 3 | ### hello world 4 | #### hello world 5 | ##### hello world 6 | ###### hello world 7 | 8 | you can write text [with links](http://example.com) inline or [link references][1]. 9 | 10 | * one _thing_ has *em* phasis 11 | * two __things__ are **bold** 12 | 13 | [1]: http://example.com 14 | 15 | --- 16 | 17 | hello world 18 | =========== 19 | 20 | ```html 21 |
22 | ``` 23 | 24 | > markdown is so cool 25 | 26 | so are code segments 27 | 28 | 1. one thing (yeah!) 29 | 2. two thing `i can write code`, and `more` wipee! 30 | -------------------------------------------------------------------------------- /spec/haml.haml: -------------------------------------------------------------------------------- 1 | !!! XML 2 | !!! 3 | %html(xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en") 4 | %head 5 | %title= article.title 6 | %body 7 | - parameter = "value" 8 | /[if IE] 9 | %a{ :href => 'http://www.mozilla.com/en-US/firefox/' } 10 | %h1 Get Firefox 11 | -# Example comment 12 | -# 13 | This is a... 14 | multi-line comment 15 | 16 | %section.container 17 | - articles.each do |article| 18 | %article 19 | %h1= "Article: #{article.title}" 20 | %a{ :href => article.url } More Info... 21 | .content 22 | = article.content 23 | #copyright 24 | %p#copyright_statement Copyright 2015 25 | :javascript 26 | $(document).ready(function() { 27 | alert("Hello!"); 28 | }); 29 | -------------------------------------------------------------------------------- /spec/ruby.rb: -------------------------------------------------------------------------------- 1 | class A < B; def self.create(object = User) object end end 2 | class Zebra; def inspect; "X#{2 + self.object_id}" end end 3 | 4 | module ABC::DEF 5 | include Comparable 6 | 7 | # @param test 8 | # @return [String] nothing 9 | def foo(test) 10 | Thread.new do |blockvar| 11 | ABC::DEF.reverse(:a_symbol, :'a symbol', :<=>, 'test' + ?\012) 12 | answer = valid?4 && valid?CONST && ?A && ?A.ord 13 | end.join 14 | end 15 | 16 | def [](index) self[index] end 17 | def ==(other) other == self end 18 | end 19 | 20 | class Car < ActiveRecord::Base 21 | has_many :wheels, class_name: 'Wheel', foreign_key: 'car_id' 22 | scope :available, -> { where(available: true) } 23 | end 24 | 25 | hash = {1 => 'one', 2 => 'two'} 26 | 27 | 2.0.0p0 :001 > ['some'] 28 | => ["some"] 29 | -------------------------------------------------------------------------------- /spec/css.css: -------------------------------------------------------------------------------- 1 | @media screen and (-webkit-min-device-pixel-ratio: 0) { 2 | body:first-of-type pre::after { 3 | content: 'highlight: ' attr(class); 4 | } 5 | body { 6 | background: linear-gradient(45deg, blue, red); 7 | } 8 | } 9 | 10 | @import url('print.css'); 11 | @page:right { 12 | margin: 1cm 2cm 1.3cm 4cm; 13 | } 14 | 15 | @font-face { 16 | font-family: Chunkfive; src: url('Chunkfive.otf'); 17 | } 18 | 19 | div.text, 20 | #content, 21 | li[lang=ru] { 22 | font: Tahoma, Chunkfive, sans-serif; 23 | background: url('hatch.png') /* wtf? */; 24 | color: #F0F0F0 !important; 25 | width: 100%; 26 | } 27 | 28 | 29 | /* Tests */ 30 | 31 | .support-test { 32 | background: blue; /* <- valid properties/values should be highlighted more */ 33 | invalid-property: invalid-color; /* <- invalid should be toned down */ 34 | } 35 | -------------------------------------------------------------------------------- /styles/languages/diff.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--diff { 2 | color: @gruvbox-light4; 3 | 4 | .syntax--meta { 5 | color: @gruvbox-bright-blue; 6 | 7 | &.syntax--header.syntax--from-file { color: @gruvbox-bright-aqua; } 8 | &.syntax--header.syntax--to-file { color: @gruvbox-bright-aqua; } 9 | &.syntax--diff.syntax--range { color: @gruvbox-bright-yellow; } 10 | &.syntax--diff.syntax--line-number { color: @gruvbox-bright-yellow; opacity: 1; } 11 | } 12 | 13 | .syntax--markup { 14 | &.syntax--deleted { color: @gruvbox-bright-red; } 15 | &.syntax--inserted { color: @gruvbox-bright-green; } 16 | } 17 | .syntax--punctuation { 18 | &.syntax--deleted { color: @gruvbox-bright-red; } 19 | &.syntax--inserted { color: @gruvbox-bright-green; } 20 | &.syntax--range { color: @gruvbox-bright-yellow; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /styles/languages/json.less: -------------------------------------------------------------------------------- 1 | .syntax--source.syntax--json { 2 | .syntax--meta.syntax--structure.syntax--dictionary.syntax--json { 3 | & > .syntax--string.syntax--quoted.syntax--json { 4 | & > .syntax--punctuation.syntax--string { 5 | color: @gruvbox-bright-blue; 6 | } 7 | color: @gruvbox-bright-blue; 8 | } 9 | } 10 | 11 | .syntax--meta.syntax--structure.syntax--dictionary.syntax--json, .syntax--meta.syntax--structure.syntax--array.syntax--json { 12 | & > .syntax--value.syntax--json > .syntax--string.syntax--quoted.syntax--json, 13 | & > .syntax--value.syntax--json > .syntax--string.syntax--quoted.syntax--json > .syntax--punctuation { 14 | color: @gruvbox-bright-yellow; 15 | } 16 | 17 | & > .syntax--constant.syntax--language.syntax--json { 18 | color: @gruvbox-bright-red; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /spec/less.less: -------------------------------------------------------------------------------- 1 | /* 2 | Using the most minimal language subset to ensure we 3 | have enough relevance hints for proper Less detection 4 | */ 5 | 6 | @import "fruits"; 7 | 8 | @rhythm: 1.5em; 9 | 10 | @media screen and (min-resolution: 2dppx) { 11 | body {font-size: 125%} 12 | } 13 | 14 | section > .foo + #bar:hover [href*="less"] { 15 | margin: @rhythm 0 0 @rhythm; 16 | padding: calc(5% + 20px); 17 | background: #f00ba7 url(http://placehold.alpha-centauri/42.png) no-repeat; 18 | background-image: linear-gradient(-135deg, wheat, fuchsia) !important ; 19 | background-blend-mode: multiply; 20 | } 21 | 22 | @font-face { 23 | font-family: /* ? */ 'Omega'; 24 | src: url('../fonts/omega-webfont.woff?v=2.0.2'); 25 | } 26 | 27 | .icon-baz::before { 28 | display: inline-block; 29 | font-family: "Omega", Alpha, sans-serif; 30 | content: "\f085"; 31 | color: rgba(98, 76 /* or 54 */, 231, .75); 32 | } 33 | -------------------------------------------------------------------------------- /spec/coffeescript.coffee: -------------------------------------------------------------------------------- 1 | grade = (student, period=(if b? then 7 else 6), messages={"A": "Excellent"}) -> 2 | if student.excellentWork 3 | "A+" 4 | else if student.okayStuff 5 | if student.triedHard then "B" else "B-" 6 | else 7 | "C" 8 | 9 | square = (x) -> x * x 10 | 11 | two = -> 2 12 | 13 | math = 14 | root: Math.sqrt 15 | square: square 16 | cube: (x) -> x * square x 17 | 18 | race = (winner, runners...) -> 19 | print winner, runners 20 | 21 | class Animal extends Being 22 | constructor: (@name) -> 23 | 24 | move: (meters) -> 25 | alert @name + " moved #{meters}m." 26 | 27 | hi = `function() { 28 | return [document.title, "Hello JavaScript"].join(": "); 29 | }` 30 | 31 | heredoc = """ 32 | CoffeeScript subst test #{ 0o010 + 0xf / 0b10 + "nested string #{ /\n/ }"} 33 | """ 34 | 35 | ### 36 | CoffeeScript Compiler v1.2.0 37 | Released under the MIT License 38 | ### 39 | 40 | OPERATOR = /// ^ ( 41 | ?: [-=]> # function 42 | ) /// 43 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Caleb Land. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /spec/sass.scss: -------------------------------------------------------------------------------- 1 | @import "compass/reset"; 2 | 3 | // variables 4 | $colorGreen: #008000; 5 | $colorGreenDark: darken($colorGreen, 10); 6 | 7 | @mixin container { 8 | max-width: 980px; 9 | } 10 | 11 | // mixins with parameters 12 | @mixin button($color:green) { 13 | @if ($color == green) { 14 | background-color: #008000; 15 | } 16 | @else if ($color == red) { 17 | background-color: #B22222; 18 | } 19 | } 20 | 21 | button { 22 | @include button(red); 23 | } 24 | 25 | div, 26 | .navbar, 27 | #header, 28 | input[type="input"] { 29 | font-family: "Helvetica Neue", Arial, sans-serif; 30 | width: auto; 31 | margin: 0 auto; 32 | display: block; 33 | } 34 | 35 | .row-12 > [class*="spans"] { 36 | border-left: 1px solid #B5C583; 37 | } 38 | 39 | // nested definitions 40 | ul { 41 | width: 100%; 42 | padding: { 43 | left: 5px; right: 5px; 44 | } 45 | li { 46 | float: left; margin-right: 10px; 47 | .home { 48 | background: url('http://placehold.it/20') scroll no-repeat 0 0; 49 | } 50 | } 51 | } 52 | 53 | .banner { 54 | @extend .container; 55 | } 56 | 57 | a { 58 | color: $colorGreen; 59 | &:hover { color: $colorGreenDark; } 60 | &:visited { color: #c458cb; } 61 | } 62 | 63 | @for $i from 1 through 5 { 64 | .span#{$i} { 65 | width: 20px*$i; 66 | } 67 | } 68 | 69 | @mixin mobile { 70 | @media screen and (max-width : 600px) { 71 | @content; 72 | } 73 | } -------------------------------------------------------------------------------- /styles/colors.less: -------------------------------------------------------------------------------- 1 | // Gruvbox colors 2 | @gruvbox-dark0-hard: #1d2021; 3 | @gruvbox-dark0: #282828; 4 | @gruvbox-dark0-soft: #32302f; 5 | @gruvbox-dark1: #3c3836; 6 | @gruvbox-dark2: #504945; 7 | @gruvbox-dark3: #665c54; 8 | @gruvbox-dark4: #7c6f64; 9 | 10 | @gruvbox-medium: #928374; 11 | 12 | @gruvbox-light0-hard: #f9f5d7; 13 | @gruvbox-light0: #fbf1c7; 14 | @gruvbox-light0-soft: #f2e5bc; 15 | @gruvbox-light1: #ebdbb2; 16 | @gruvbox-light2: #d5c4a1; 17 | @gruvbox-light3: #bdae93; 18 | @gruvbox-light4: #a89984; 19 | 20 | @gruvbox-bright-red: #fb4934; 21 | @gruvbox-bright-green: #b8bb26; 22 | @gruvbox-bright-yellow: #fabd2f; 23 | @gruvbox-bright-blue: #83a598; 24 | @gruvbox-bright-purple: #d3869b; 25 | @gruvbox-bright-aqua: #8ec07c; 26 | @gruvbox-bright-orange: #fe8019; 27 | 28 | @gruvbox-neutral-red: #cc241d; 29 | @gruvbox-neutral-green: #98971a; 30 | @gruvbox-neutral-yellow: #d79921; 31 | @gruvbox-neutral-blue: #458588; 32 | @gruvbox-neutral-purple: #b16286; 33 | @gruvbox-neutral-aqua: #689d6a; 34 | @gruvbox-neutral-orange: #d65d0e; 35 | 36 | @gruvbox-faded-red: #9d0006; 37 | @gruvbox-faded-green: #79740e; 38 | @gruvbox-faded-yellow: #b57614; 39 | @gruvbox-faded-blue: #076678; 40 | @gruvbox-faded-purple: #8f3f71; 41 | @gruvbox-faded-aqua: #427b58; 42 | @gruvbox-faded-orange: #af3a03; 43 | 44 | // Base colors ----------------------------------- 45 | @syntax-accent: @gruvbox-bright-red; 46 | @syntax-guide: fade(@syntax-fg, 15%); 47 | @syntax-guide-alt: fade(@syntax-fg, 25%); 48 | @syntax-fg: @gruvbox-light1; 49 | @syntax-bg: @gruvbox-dark0; 50 | -------------------------------------------------------------------------------- /spec/COMMIT_EDITMSG: -------------------------------------------------------------------------------- 1 | This is the summary line. It can't be too long. 2 | After I can write a much more detailed description without quite the same restrictions on length. 3 | # Please enter the commit message for your changes. Lines starting 4 | # with '#' will be ignored, and an empty message aborts the commit. 5 | # On branch master 6 | # Your branch is up-to-date with 'origin/master'. 7 | # 8 | # Changes to be committed: 9 | # deleted: README.md 10 | # modified: index.less 11 | # new file: spec/COMMIT_EDITMSG 12 | # 13 | # ------------------------ >8 ------------------------ 14 | # Do not touch the line above. 15 | # Everything below will be removed. 16 | diff --git c/README.md i/README.md 17 | deleted file mode 100644 18 | index 039c78e..0000000 19 | --- c/README.md 20 | +++ /dev/null 21 | @@ -1,11 +0,0 @@ 22 | -## One Dark Syntax theme 23 | - 24 | -![one-dark-syntax](https://cloud.githubusercontent.com/assets/378023/7783203/49271ef6-0174-11e5-8eb1-d80b8d34a0e3.png) 25 | - 26 | -> The font used in the screenshot is [Fira Mono](https://github.com/mozilla/Fira). 27 | - 28 | -There is also a matching [UI theme](https://atom.io/themes/one-dark-ui). 29 | - 30 | -### Install 31 | - 32 | -This theme is installed by default with Atom and can be activated by going to the __Settings > Themes__ section and selecting it from the __Syntax Themes__ drop-down menu. 33 | diff --git c/index.less i/index.less 34 | index 64f6ac9..29dc35d 100644 35 | --- c/index.less 36 | +++ i/index.less 37 | @@ -1,4 +1,4 @@ 38 | - 39 | +// hello 40 | // Atom Syntax Theme: One 41 | 42 | @import (reference) "styles/syntax-variables"; 43 | diff --git c/spec/COMMIT_EDITMSG i/spec/COMMIT_EDITMSG 44 | new file mode 100644 45 | index 0000000..e69de29 46 | -------------------------------------------------------------------------------- /spec/groovy.groovy: -------------------------------------------------------------------------------- 1 | package com.somedomain.here 2 | 3 | import java.io.File 4 | import java.util.List 5 | 6 | import static java.io.File.* 7 | 8 | /** 9 | * Class JAVA Doc 10 | * 11 | * @author Some Important Person 12 | */ 13 | @Awesome("yeah baby!") 14 | public class Foo extends Bar implements SomeInterface { 15 | 16 | private static final int COUNT = 0x243 17 | private def myCount = 0 18 | 19 | public String myProperty = "value" 20 | 21 | @Cool(reason="because") 22 | public static staticMethod(String[] values, int n) { 23 | try { 24 | System.out.print(values[0]) 25 | } catch (Exception e) { 26 | e.printStackTrace() 27 | } 28 | 29 | if (n > 0) { 30 | return COUNT // single line comment 31 | } else { 32 | return -COUNT 33 | } 34 | } 35 | 36 | public Foo(int count) { 37 | myCount = count 38 | } 39 | 40 | /* This is a multiple... 41 | ...line comment. */ 42 | 43 | public int getMyCount() throws MyFavoriteException { 44 | return myCount 45 | } 46 | 47 | /** 48 | * Increment the count 49 | * @param by the amount to increment by 50 | */ 51 | public void increment(int by) { 52 | myCount += by 53 | } 54 | 55 | public String describe() { 56 | switch (myCount) { 57 | case 0: return "0" 58 | case 1: return "1" 59 | default: return "other" 60 | } 61 | } 62 | 63 | public MyFooInterface createFooBar() { 64 | final String test = null 65 | 66 | return new MyFooInterface() { 67 | public boolean isValid() { 68 | return false 69 | } 70 | } 71 | } 72 | 73 | public static interface MyFooInterface { 74 | public boolean isValid() 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /spec/java.java: -------------------------------------------------------------------------------- 1 | package com.somedomain.here; 2 | 3 | import java.io.File; 4 | import java.util.List; 5 | 6 | import static java.io.File.*; 7 | 8 | /** 9 | * Class JAVA Doc 10 | * 11 | * @author Some Important Person 12 | */ 13 | @Awesome("yeah baby!") 14 | public class Foo extends Bar implements SomeInterface { 15 | 16 | private static final int COUNT = 0x243; 17 | private int myCount = 0; 18 | 19 | @Cool(reason="because") 20 | public static int staticMethod(String[] values, int n) { 21 | try { 22 | System.out.print("This is the value:\n" + values[0]); 23 | } catch (Exception e) { 24 | e.printStackTrace(); 25 | } 26 | 27 | if (n > 0) { 28 | return COUNT; // single line comment 29 | } else { 30 | return -COUNT; 31 | } 32 | } 33 | 34 | public Foo(int count) { 35 | myCount = count; 36 | } 37 | 38 | /* This is a multiple... 39 | ...line comment. */ 40 | 41 | public int getMyCount() throws MyFavoriteException { 42 | return myCount; 43 | } 44 | 45 | /** 46 | * Increment the count 47 | * @param by the amount to increment by 48 | */ 49 | public void increment(int by) { 50 | myCount += by; 51 | } 52 | 53 | public String describe() { 54 | switch (myCount) { 55 | case 0: return "0"; 56 | case 1: return "1"; 57 | default: return "other"; 58 | } 59 | } 60 | 61 | public MyFooInterface createFooBar() { 62 | final String test = null; 63 | 64 | return new MyFooInterface() { 65 | public boolean isValid() { 66 | return false; 67 | } 68 | }; 69 | } 70 | 71 | public static interface MyFooInterface { 72 | public boolean isValid(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /styles/editor.less: -------------------------------------------------------------------------------- 1 | // Editor styles (background, gutter, guides) 2 | 3 | atom-text-editor { 4 | background-color: @syntax-background-color; 5 | color: @syntax-text-color; 6 | 7 | .line.cursor-line { 8 | background-color: @syntax-cursor-line; 9 | } 10 | 11 | .invisible { 12 | color: @syntax-text-color; 13 | } 14 | 15 | .cursor { 16 | border-left: 2px solid @syntax-cursor-color; 17 | } 18 | 19 | .selection .region { 20 | background-color: @syntax-selection-color; 21 | } 22 | 23 | .bracket-matcher .region { 24 | border-bottom: 2px solid @syntax-cursor-color; 25 | box-sizing: border-box; 26 | background-color: @syntax-bracket-matcher-background-color; 27 | } 28 | 29 | .invisible-character { 30 | color: @syntax-invisible-character-color; 31 | } 32 | 33 | .indent-guide { 34 | color: @syntax-indent-guide-color; 35 | } 36 | .indent-guide:nth-child(2n) { 37 | box-shadow: inset 1px 0 @syntax-guide-alt; 38 | } 39 | 40 | .wrap-guide { 41 | background-color: @syntax-wrap-guide-color; 42 | } 43 | 44 | .gutter { 45 | .line-number { 46 | color: @syntax-gutter-text-color; 47 | -webkit-font-smoothing: antialiased; 48 | 49 | &.git-line-removed:before { 50 | bottom: -3px; 51 | } 52 | &.git-line-removed:after { 53 | content: ""; 54 | position: absolute; 55 | left: 0px; 56 | bottom: 0px; 57 | width: 25px; 58 | border-bottom: 1px dotted fade(@syntax-color-removed, 50%); 59 | pointer-events: none; 60 | } 61 | 62 | &.cursor-line { 63 | color: @syntax-gutter-text-color-selected; 64 | background-color: @syntax-gutter-background-color-selected; 65 | } 66 | 67 | &.cursor-line-no-selection { 68 | background-color: @syntax-gutter-background-color-selected; 69 | } 70 | 71 | .icon-right { 72 | color: @syntax-text-color; 73 | } 74 | 75 | .icon-right { 76 | color: @syntax-text-color; 77 | } 78 | } 79 | } 80 | 81 | .gutter .line-number.folded, 82 | .gutter .line-number:after, 83 | .fold-marker:after { 84 | color: @syntax-gutter-text-color-selected; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /styles/syntax-variables.less: -------------------------------------------------------------------------------- 1 | @import "colors"; 2 | 3 | // Custom Syntax Variables ----------------------------------- 4 | 5 | @syntax-cursor-line: fade(@gruvbox-light0-hard, 4%); // needs to be semi-transparent to show serach results 6 | @syntax-bracket-matcher-background-color: lighten(@syntax-background-color, 6%); 7 | 8 | 9 | // Official Syntax Variables ----------------------------------- 10 | 11 | // General colors 12 | @syntax-text-color: @syntax-fg; 13 | @syntax-cursor-color: @gruvbox-light4; 14 | @syntax-selection-color: lighten(@syntax-background-color, 10%); 15 | @syntax-selection-flash-color: @syntax-accent; 16 | @syntax-background-color: @syntax-bg; 17 | 18 | // Guide colors 19 | @syntax-wrap-guide-color: @syntax-guide; 20 | @syntax-indent-guide-color: @syntax-guide; 21 | @syntax-invisible-character-color: @syntax-guide; 22 | 23 | // For find and replace markers 24 | @syntax-result-marker-color: @syntax-fg; 25 | @syntax-result-marker-color-selected: @syntax-accent; 26 | 27 | // Gutter colors 28 | @syntax-gutter-text-color: @gruvbox-medium; 29 | @syntax-gutter-text-color-selected: @gruvbox-light0-hard; 30 | @syntax-gutter-background-color: @syntax-bg; // unused 31 | @syntax-gutter-background-color-selected: @syntax-cursor-line; 32 | 33 | // Git colors - For git diff info. i.e. in the gutter 34 | @syntax-color-renamed: @gruvbox-bright-blue; 35 | @syntax-color-added: @gruvbox-bright-green; 36 | @syntax-color-modified: @gruvbox-bright-orange; 37 | @syntax-color-removed: @gruvbox-bright-red; 38 | 39 | // For language entity colors 40 | @syntax-color-variable: @gruvbox-bright-blue; 41 | @syntax-color-constant: @gruvbox-bright-purple; 42 | @syntax-color-property: @syntax-fg; 43 | @syntax-color-value: @syntax-fg; 44 | @syntax-color-function: @gruvbox-bright-green; 45 | @syntax-color-method: @gruvbox-bright-green; 46 | @syntax-color-class: @gruvbox-bright-yellow; 47 | @syntax-color-keyword: @gruvbox-bright-red; 48 | @syntax-color-tag: @gruvbox-bright-blue; 49 | @syntax-color-attribute: @gruvbox-bright-purple; 50 | @syntax-color-import: @gruvbox-bright-red; 51 | @syntax-color-snippet: @gruvbox-bright-yellow; 52 | -------------------------------------------------------------------------------- /styles/language.less: -------------------------------------------------------------------------------- 1 | // Language syntax highlighting 2 | 3 | .syntax--comment { 4 | color: @gruvbox-medium; 5 | font-style: italic; 6 | 7 | /* Keywords inside comments (e.syntax--g. yard, javadoc, etc) should be more subdued 8 | than other keywords */ 9 | .syntax--keyword, .syntax--keyword.syntax--punctuation { color: @gruvbox-light2; } 10 | .syntax--punctuation { color: @gruvbox-light3; } 11 | .syntax--string, .syntax--type, .syntax--parameter { color: @gruvbox-light3; } 12 | } 13 | 14 | .syntax--entity { 15 | &.syntax--name.syntax--type { 16 | color: @gruvbox-bright-yellow; 17 | } 18 | 19 | &.syntax--other.syntax--inherited-class { 20 | color: @gruvbox-bright-yellow; 21 | } 22 | } 23 | 24 | .syntax--keyword { 25 | color: @gruvbox-bright-red; 26 | 27 | &.syntax--control { 28 | color: @gruvbox-bright-red; 29 | } 30 | 31 | &.syntax--operator { 32 | color: @syntax-fg; 33 | } 34 | 35 | &.syntax--other.syntax--special-method { 36 | color: @gruvbox-bright-orange; 37 | } 38 | 39 | &.syntax--other.syntax--unit { 40 | color: @gruvbox-bright-purple; 41 | } 42 | } 43 | 44 | .syntax--storage { 45 | color: @gruvbox-bright-red; 46 | 47 | &.syntax--type { 48 | &.syntax--annotation, 49 | &.syntax--primitive { 50 | color: @gruvbox-bright-red; 51 | } 52 | } 53 | 54 | &.syntax--modifier { 55 | &.syntax--package, 56 | &.syntax--import { 57 | color: @syntax-fg; 58 | } 59 | } 60 | } 61 | 62 | .syntax--constant { 63 | color: @gruvbox-bright-purple; 64 | 65 | &.syntax--variable { 66 | color: @gruvbox-bright-purple; 67 | } 68 | 69 | &.syntax--character.syntax--escape { 70 | color: @gruvbox-bright-red; 71 | } 72 | 73 | &.syntax--numeric { 74 | color: @gruvbox-bright-purple; 75 | } 76 | 77 | &.syntax--other.syntax--color { 78 | color: @gruvbox-bright-red; 79 | } 80 | 81 | &.syntax--other.syntax--symbol { 82 | color: @gruvbox-bright-purple; 83 | } 84 | } 85 | 86 | .syntax--variable { 87 | color: @gruvbox-bright-blue; 88 | 89 | &.syntax--interpolation { 90 | color: @gruvbox-neutral-blue; 91 | } 92 | 93 | &.syntax--parameter { 94 | color: @syntax-fg; 95 | } 96 | } 97 | 98 | .syntax--invalid.syntax--illegal { 99 | background-color: @gruvbox-bright-blue; 100 | color: @syntax-background-color; 101 | } 102 | 103 | .syntax--string { 104 | color: @gruvbox-bright-green; 105 | 106 | &.syntax--regexp { 107 | color: @gruvbox-bright-red; 108 | 109 | .syntax--source.syntax--ruby.syntax--embedded { 110 | color: @gruvbox-bright-yellow; 111 | } 112 | } 113 | 114 | &.syntax--other.syntax--link { 115 | color: @gruvbox-bright-blue; 116 | } 117 | } 118 | 119 | .syntax--punctuation { 120 | &.syntax--definition { 121 | &.syntax--comment { 122 | color: @gruvbox-medium; 123 | } 124 | 125 | &.syntax--tag { color: @gruvbox-bright-blue; } 126 | 127 | &.syntax--method-parameters, 128 | &.syntax--function-parameters, 129 | &.syntax--parameters, 130 | &.syntax--separator, 131 | &.syntax--seperator, 132 | &.syntax--array { 133 | color: @syntax-fg; 134 | } 135 | 136 | &.syntax--heading, 137 | &.syntax--identity { 138 | color: @gruvbox-bright-green; 139 | } 140 | 141 | &.syntax--bold { 142 | color: @gruvbox-bright-yellow; 143 | font-weight: bold; 144 | } 145 | 146 | &.syntax--italic { 147 | color: @gruvbox-bright-red; 148 | font-style: italic; 149 | } 150 | } 151 | 152 | &.syntax--section { 153 | &.syntax--embedded { 154 | color: @gruvbox-bright-blue; 155 | } 156 | 157 | &.syntax--method, 158 | &.syntax--class, 159 | &.syntax--inner-class { 160 | color: @syntax-fg; 161 | } 162 | } 163 | } 164 | 165 | .syntax--support { 166 | &.syntax--type { 167 | color: @gruvbox-bright-orange; 168 | } 169 | 170 | &.syntax--class { 171 | color: @gruvbox-bright-yellow; 172 | } 173 | 174 | &.syntax--function { 175 | color: @gruvbox-bright-orange; 176 | 177 | &.syntax--any-method { 178 | color: @gruvbox-bright-green; 179 | } 180 | } 181 | } 182 | 183 | .syntax--entity { 184 | &.syntax--name.syntax--function { 185 | color: @gruvbox-bright-green; 186 | } 187 | 188 | &.syntax--name.syntax--class, 189 | &.syntax--name.syntax--type.syntax--class { 190 | color: @gruvbox-bright-yellow; 191 | .syntax--punctuation.syntax--separator { 192 | color: @syntax-fg; 193 | } 194 | } 195 | 196 | &.syntax--name.syntax--section { 197 | color: @gruvbox-bright-green; 198 | } 199 | 200 | &.syntax--name.syntax--tag { 201 | color: @gruvbox-bright-blue; 202 | } 203 | 204 | &.syntax--other.syntax--attribute-name { 205 | color: @gruvbox-bright-purple; 206 | 207 | &.syntax--id { 208 | color: @gruvbox-bright-green; 209 | } 210 | } 211 | } 212 | 213 | .syntax--meta { 214 | &.syntax--class { 215 | color: @gruvbox-bright-yellow; 216 | 217 | &.syntax--body { 218 | color: @syntax-fg; 219 | } 220 | } 221 | 222 | &.syntax--method-call, 223 | &.syntax--method { 224 | color: @syntax-fg; 225 | } 226 | 227 | &.syntax--definition { 228 | &.syntax--variable { 229 | color: @gruvbox-bright-blue; 230 | } 231 | } 232 | 233 | &.syntax--link { 234 | color: @gruvbox-bright-purple; 235 | } 236 | 237 | &.syntax--require { 238 | color: @gruvbox-bright-green; 239 | } 240 | 241 | &.syntax--selector { 242 | color: @gruvbox-bright-red; 243 | } 244 | 245 | &.syntax--separator { 246 | background-color: #373b41; 247 | color: @syntax-fg; 248 | } 249 | 250 | &.syntax--tag { 251 | color: @syntax-fg; 252 | } 253 | } 254 | 255 | .syntax--none { 256 | color: @syntax-fg; 257 | } 258 | 259 | // Languages ------------------------------------------------- 260 | 261 | .syntax--markup { 262 | &.syntax--bold { 263 | color: @gruvbox-bright-purple; 264 | font-weight: bold; 265 | } 266 | 267 | &.syntax--changed { 268 | color: @gruvbox-bright-red; 269 | } 270 | 271 | &.syntax--deleted { 272 | color: @gruvbox-bright-blue; 273 | } 274 | 275 | &.syntax--italic { 276 | color: @gruvbox-bright-red; 277 | font-style: italic; 278 | } 279 | 280 | &.syntax--heading .syntax--punctuation.syntax--definition.syntax--heading { 281 | color: @gruvbox-bright-green; 282 | } 283 | 284 | &.syntax--inserted { 285 | color: @gruvbox-bright-yellow; 286 | } 287 | 288 | &.syntax--list { 289 | color: @gruvbox-bright-blue; 290 | } 291 | 292 | &.syntax--quote { 293 | color: @gruvbox-bright-purple; 294 | } 295 | 296 | &.syntax--raw.syntax--inline { 297 | color: @gruvbox-bright-yellow; 298 | } 299 | } 300 | --------------------------------------------------------------------------------