rori 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +25 -0
  3. data/LICENSE +21 -0
  4. data/README.md +279 -0
  5. data/app/assets/stylesheets/rori/_init.css +79 -0
  6. data/app/assets/stylesheets/rori/layout.css +162 -0
  7. data/app/assets/stylesheets/rori/menubar.css +117 -0
  8. data/app/assets/stylesheets/rori/notifications.css +120 -0
  9. data/app/assets/stylesheets/rori/palette.css +114 -0
  10. data/app/assets/stylesheets/rori/shortcuts.css +110 -0
  11. data/app/assets/stylesheets/rori/terminal.css +98 -0
  12. data/app/assets/stylesheets/rori/themes.css +156 -0
  13. data/app/assets/stylesheets/rori/typing_badge.css +56 -0
  14. data/app/assets/stylesheets/rori/wallpaper.css +52 -0
  15. data/app/assets/stylesheets/rori/window.css +174 -0
  16. data/app/controllers/concerns/rori/windowed.rb +15 -0
  17. data/app/controllers/rori/commands/bars_controller.rb +9 -0
  18. data/app/controllers/rori/commands/runs_controller.rb +22 -0
  19. data/app/controllers/rori/commands/themes_controller.rb +9 -0
  20. data/app/controllers/rori/commands/ui_controller.rb +9 -0
  21. data/app/controllers/rori/commands/wallpapers_controller.rb +9 -0
  22. data/app/controllers/rori/commands_controller.rb +7 -0
  23. data/app/controllers/rori/desktops_controller.rb +7 -0
  24. data/app/helpers/rori/assets_helper.rb +9 -0
  25. data/app/helpers/rori/keymap_helper.rb +50 -0
  26. data/app/helpers/rori/prefs_helper.rb +13 -0
  27. data/app/helpers/rori/theme_helper.rb +14 -0
  28. data/app/helpers/rori/wallpaper_helper.rb +19 -0
  29. data/app/helpers/rori/window_helper.rb +36 -0
  30. data/app/javascript/rori/clock_controller.js +18 -0
  31. data/app/javascript/rori/command_index.js +84 -0
  32. data/app/javascript/rori/fuzzy.js +50 -0
  33. data/app/javascript/rori/index.js +21 -0
  34. data/app/javascript/rori/notifications_controller.js +45 -0
  35. data/app/javascript/rori/palette_controller.js +307 -0
  36. data/app/javascript/rori/prefs_controller.js +68 -0
  37. data/app/javascript/rori/rori_controller.js +996 -0
  38. data/app/javascript/rori/terminal_controller.js +198 -0
  39. data/app/javascript/rori/theme_controller.js +35 -0
  40. data/app/javascript/rori/wallpaper_controller.js +67 -0
  41. data/app/models/rori/command.rb +105 -0
  42. data/app/models/rori/notification.rb +20 -0
  43. data/app/models/rori/theme/color.rb +30 -0
  44. data/app/models/rori/theme.rb +87 -0
  45. data/app/models/rori/wallpaper.rb +54 -0
  46. data/app/views/layouts/rori/_head.html.haml +2 -0
  47. data/app/views/layouts/rori/shell.html.haml +97 -0
  48. data/app/views/layouts/rori/window.html.haml +10 -0
  49. data/app/views/rori/_menubar.html.haml +14 -0
  50. data/app/views/rori/_notification.html.haml +9 -0
  51. data/app/views/rori/_notifications.html.haml +10 -0
  52. data/app/views/rori/_palette.html.haml +13 -0
  53. data/app/views/rori/_shortcuts.html.haml +47 -0
  54. data/app/views/rori/_terminal.html.haml +9 -0
  55. data/app/views/rori/_wallpaper.html.haml +7 -0
  56. data/app/views/rori/_wallpaper_credit.html.haml +3 -0
  57. data/app/views/rori/_window.html.haml +15 -0
  58. data/app/views/rori/commands/_command.html.haml +17 -0
  59. data/app/views/rori/commands/index.html.haml +5 -0
  60. data/app/views/rori/desktops/show.html.haml +1 -0
  61. data/config/importmap.rb +3 -0
  62. data/config/locales/rori.en.yml +133 -0
  63. data/config/routes/rori.rb +13 -0
  64. data/lib/generators/rori/install/install_generator.rb +67 -0
  65. data/lib/generators/rori/install/templates/rori.rb.tt +22 -0
  66. data/lib/rori/engine.rb +19 -0
  67. data/lib/rori/version.rb +3 -0
  68. data/lib/rori.rb +180 -0
  69. data/lib/tasks/rori.rake +9 -0
  70. data/vendor/themes/LICENSE +25 -0
  71. data/vendor/themes/ghostty/Catppuccin Latte +22 -0
  72. data/vendor/themes/ghostty/Catppuccin Mocha +22 -0
  73. data/vendor/themes/ghostty/Everforest Dark Med +22 -0
  74. data/vendor/themes/ghostty/Flexoki Light +22 -0
  75. data/vendor/themes/ghostty/GitHub Dark Dimmed +22 -0
  76. data/vendor/themes/ghostty/Gruvbox Material Dark +22 -0
  77. data/vendor/themes/ghostty/Kanagawa Wave +22 -0
  78. data/vendor/themes/ghostty/Melange Dark +22 -0
  79. data/vendor/themes/ghostty/Nord +22 -0
  80. data/vendor/themes/ghostty/Rose Pine Dawn +22 -0
  81. data/vendor/themes/ghostty/Rose Pine Moon +22 -0
  82. data/vendor/themes/ghostty/TokyoNight Storm +22 -0
  83. data/vendor/themes/ghostty/Tomorrow Night Eighties +22 -0
  84. data/vendor/themes/ghostty/Zenbones Light +22 -0
  85. data/vendor/wallpapers/unsplash.yml +23 -0
  86. metadata +219 -0
data/lib/rori.rb ADDED
@@ -0,0 +1,180 @@
1
+ require "rails"
2
+ require "turbo-rails"
3
+ require "stimulus-rails"
4
+ require "importmap-rails"
5
+ require "propshaft"
6
+ require "haml"
7
+
8
+ require "rori/version"
9
+ require "rori/engine"
10
+
11
+ # The desk: a niri-style window manager for Rails pages (tiled turbo-frame
12
+ # windows, ⌘K palette and terminal, Ghostty themes). A Rails engine; see the
13
+ # README for wiring it into a host app. Configure in an initializer:
14
+ #
15
+ # Rori.configure do |desk|
16
+ # desk.records = %w[ User Project ]
17
+ # desk.hover_keys = true
18
+ # end
19
+ module Rori
20
+ # Shown in the menubar and the <title> of the bare desk.
21
+ mattr_accessor :app_name, default: "Rori"
22
+
23
+ # Model class names whose most recent records are listed in ⌘K.
24
+ mattr_accessor :records, default: []
25
+ mattr_accessor :record_limit, default: 25
26
+
27
+ # Extra palette entries: callables returning Rori::Command(s), evaluated on
28
+ # every palette open (so they can list fresh data).
29
+ mattr_accessor :commands, default: []
30
+
31
+ # Server-side commands registered with `Rori.command`, by name.
32
+ Runnable = Data.define(:name, :confirm, :block) do
33
+ def label = I18n.t(name, scope: "rori.commands.custom")
34
+
35
+ def call = block.call
36
+ end
37
+ mattr_accessor :runnables, default: {}
38
+
39
+ # `Rori.notify` broadcasts here; every open desk subscribes (turbo_stream_from).
40
+ mattr_accessor :notifications_stream, default: "rori_notifications"
41
+
42
+ # Ghostty themes compiled by `bin/rails rori:themes:build`; both default to
43
+ # the ones bundled with the gem (paths resolve lazily, after boot).
44
+ mattr_writer :themes_directory, :themes_stylesheet
45
+ mattr_accessor :theme_cookie, default: "theme"
46
+
47
+ # The app's own Ghostty theme files (a directory, relative to Rails.root or
48
+ # absolute), listed alongside the bundled ones; same name replaces a bundled
49
+ # theme. No build step: their CSS is rendered into the shell.
50
+ mattr_accessor :themes_folder
51
+
52
+ # Optional background photos (off by default): a random one per page load,
53
+ # unless one is pinned (UI › Wallpaper › Pin).
54
+ mattr_accessor :wallpapers, default: false
55
+ mattr_writer :wallpapers_file
56
+ mattr_accessor :wallpaper_cookie, default: "wallpaper"
57
+ mattr_accessor :wallpaper_pin_cookie, default: "wallpaper_pin"
58
+
59
+ # UI › Menu bar (top | bottom) and the dismissible empty-desk hint.
60
+ mattr_accessor :bars_cookie, default: "bars"
61
+ mattr_accessor :hint_cookie, default: "hint"
62
+
63
+ # The app's own wallpapers: a folder in its asset path (e.g. "wallpapers" for
64
+ # app/assets/images/wallpapers). When set, its images replace the bundled
65
+ # Unsplash photos.
66
+ mattr_accessor :wallpapers_folder
67
+
68
+ def self.themes_directory = @@themes_directory || Engine.root.join("vendor/themes/ghostty")
69
+
70
+ def self.themes_stylesheet = @@themes_stylesheet || Engine.root.join("app/assets/stylesheets/rori/themes.css")
71
+
72
+ def self.wallpapers_file = @@wallpapers_file || Engine.root.join("vendor/wallpapers/unsplash.yml")
73
+
74
+ # The terminal (⌘K as a command line) opens with this bare key outside text
75
+ # fields — KeyboardEvent#code, like the keymap — and with `toggle_terminal`.
76
+ mattr_accessor :terminal_key, default: "Backquote"
77
+
78
+ # Keyboard: desk action (rori_controller.js#perform) → key chords, written as
79
+ # `KeyboardEvent#code` names joined with modifiers. `Mod` stands for
80
+ # `Rori.modifier` — Alt in the browser, where ⌘ combos belong to the browser;
81
+ # a native shell (e.g. Tauri) can switch to Meta. `Digit*` binds 1–9 to the
82
+ # nth workspace. Chords never fire inside text fields; Esc leaves the field.
83
+ MODIFIERS = { "Alt" => "⌥", "Meta" => "⌘", "Control" => "⌃" }.freeze
84
+ mattr_accessor :modifier, default: "Alt"
85
+
86
+ # The native shell (src-tauri) marks its webview's user agent; there ⌘ combos
87
+ # aren't taken by a browser, so pages rendered for it use `native_modifier`.
88
+ mattr_accessor :native_user_agent, default: "RoriApp"
89
+ mattr_accessor :native_modifier, default: "Meta"
90
+
91
+ # Per-modifier replacements for chords the platform already owns: with ⌘,
92
+ # ⌘C is Copy in the native Edit menu, which fires before the page sees it.
93
+ mattr_accessor :keymap_overrides, default: {
94
+ "Meta" => { center_column: %w[ Mod+Shift+KeyC ] }
95
+ }.freeze
96
+ mattr_accessor :keymap, default: {
97
+ focus_left: %w[ Mod+ArrowLeft Mod+KeyH ],
98
+ focus_right: %w[ Mod+ArrowRight Mod+KeyL ],
99
+ focus_up: %w[ Mod+ArrowUp Mod+KeyK ],
100
+ focus_down: %w[ Mod+ArrowDown Mod+KeyJ ],
101
+ move_left: %w[ Mod+Shift+ArrowLeft Mod+Shift+KeyH ],
102
+ move_right: %w[ Mod+Shift+ArrowRight Mod+Shift+KeyL ],
103
+ move_up: %w[ Mod+Shift+ArrowUp Mod+Shift+KeyK ],
104
+ move_down: %w[ Mod+Shift+ArrowDown Mod+Shift+KeyJ ],
105
+ switch_to_workspace: %w[ Mod+Digit* ],
106
+ move_to_workspace: %w[ Mod+Shift+Digit* ],
107
+ consume_left: %w[ Mod+BracketLeft ],
108
+ consume_right: %w[ Mod+BracketRight ],
109
+ cycle_width: %w[ Mod+KeyR ],
110
+ full_width: %w[ Mod+KeyF ],
111
+ center_column: %w[ Mod+KeyC ],
112
+ overview: %w[ Mod+KeyO ],
113
+ close_window: %w[ Mod+KeyW ],
114
+ reopen_window: %w[ Mod+Shift+KeyT ],
115
+ toggle_terminal: %w[ Mod+Backquote ],
116
+ shortcuts: %w[ Mod+Shift+Slash ]
117
+ }.freeze
118
+
119
+ # Bare keys (opt-in). Blender-style: once the pointer deliberately moves onto
120
+ # an inactive window, they act on that window without taking focus — even
121
+ # while you're typing in a field elsewhere — until the pointer rests for
122
+ # `hover_timeout` seconds, leaves, or another key is typed. Otherwise, when
123
+ # no field has focus, they act on the focused window.
124
+ # No hjkl/arrows here: they'd shadow text entry and page scrolling.
125
+ mattr_accessor :hover_keys, default: false
126
+ mattr_accessor :hover_timeout, default: 1.5
127
+ mattr_accessor :hover_keymap, default: {
128
+ close_window: %w[ KeyW ],
129
+ reopen_window: %w[ KeyU ],
130
+ cycle_width: %w[ KeyR ],
131
+ full_width: %w[ KeyF ],
132
+ center_column: %w[ KeyC ],
133
+ consume_left: %w[ BracketLeft ],
134
+ consume_right: %w[ BracketRight ],
135
+ move_left: %w[ Shift+KeyH ],
136
+ move_right: %w[ Shift+KeyL ],
137
+ switch_to_workspace: %w[ Digit* ],
138
+ move_to_workspace: %w[ Shift+Digit* ]
139
+ }.freeze
140
+
141
+ class << self
142
+ def configure = yield(self)
143
+
144
+ # A command that runs on the server, listed in ⌘K and the terminal under
145
+ # Run and labelled by `rori.commands.custom.<name>` in the app's locale:
146
+ #
147
+ # rori.command :reindex_search, confirm: true do
148
+ # SearchReindexJob.perform_later
149
+ # "Reindexing…"
150
+ # end
151
+ #
152
+ # The block runs inside the request, so hand slow work to a job (which can
153
+ # `Rori.notify` when it's done). A String it returns becomes the
154
+ # notification's text. `confirm: true` asks first: ↵ twice in ⌘K, y in the
155
+ # terminal.
156
+ def command(name, confirm: false, &block)
157
+ runnables[name.to_s] = Runnable.new(name: name.to_s, confirm:, block:)
158
+ end
159
+
160
+ # A notification in the corner of every open desk, e.g. from a job:
161
+ # Rori.notify "Search reindexed", "1,204 records", kind: :success
162
+ def notify(title, body = nil, kind: :info) = Notification.new(title:, body:, kind:).broadcast
163
+
164
+ # The keymap with `Mod` spelled out, as rori_controller.js matches it.
165
+ def resolved_keymap(modifier = self.modifier)
166
+ raise ArgumentError, "Rori modifier must be one of #{MODIFIERS.keys.join(", ")}" unless MODIFIERS.key?(modifier)
167
+
168
+ keymap.merge(keymap_overrides.fetch(modifier, {}))
169
+ .transform_values { |chords| Array(chords).map { it.sub(/\AMod\+/, "#{modifier}+") } }
170
+ end
171
+
172
+ def modifier_symbol(modifier = self.modifier) = MODIFIERS.fetch(modifier)
173
+
174
+ def native?(user_agent) = user_agent.to_s.include?(native_user_agent)
175
+
176
+ def modifier_for(user_agent) = native?(user_agent) ? native_modifier : modifier
177
+
178
+ def resolved_hover_keymap = hover_keys ? hover_keymap : {}
179
+ end
180
+ end
@@ -0,0 +1,9 @@
1
+ namespace :rori do
2
+ namespace :themes do
3
+ desc "Compile Rori.themes_directory (Ghostty themes) into Rori.themes_stylesheet"
4
+ task build: :environment do
5
+ Rori.themes_stylesheet.write(Rori::Theme.stylesheet)
6
+ puts "Wrote #{Rori::Theme.all.size} themes to #{Rori.themes_stylesheet.relative_path_from(Rails.root)}"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2011 to Present Mark Badolato
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ This license covers the iTerm-Color-Schemes repository collection of themes.
24
+
25
+ The copyright/license for each individual theme belongs to the author of that theme.
@@ -0,0 +1,22 @@
1
+ palette = 0=#bcc0cc
2
+ palette = 1=#d20f39
3
+ palette = 2=#40a02b
4
+ palette = 3=#df8e1d
5
+ palette = 4=#1e66f5
6
+ palette = 5=#ea76cb
7
+ palette = 6=#179299
8
+ palette = 7=#5c5f77
9
+ palette = 8=#acb0be
10
+ palette = 9=#e7103f
11
+ palette = 10=#46b02f
12
+ palette = 11=#e49931
13
+ palette = 12=#3878f6
14
+ palette = 13=#ef95d7
15
+ palette = 14=#19a1a8
16
+ palette = 15=#6c6f85
17
+ background = #eff1f5
18
+ foreground = #4c4f69
19
+ cursor-color = #dc8a78
20
+ cursor-text = #eff1f5
21
+ selection-background = #dc8a78
22
+ selection-foreground = #eff1f5
@@ -0,0 +1,22 @@
1
+ palette = 0=#45475a
2
+ palette = 1=#f38ba8
3
+ palette = 2=#a6e3a1
4
+ palette = 3=#f9e2af
5
+ palette = 4=#89b4fa
6
+ palette = 5=#f5c2e7
7
+ palette = 6=#94e2d5
8
+ palette = 7=#bac2de
9
+ palette = 8=#585b70
10
+ palette = 9=#f7aec2
11
+ palette = 10=#c2ecbf
12
+ palette = 11=#fcd682
13
+ palette = 12=#aeccfc
14
+ palette = 13=#f398da
15
+ palette = 14=#b1eae1
16
+ palette = 15=#a6adc8
17
+ background = #1e1e2e
18
+ foreground = #cdd6f4
19
+ cursor-color = #f5e0dc
20
+ cursor-text = #1e1e2e
21
+ selection-background = #f5e0dc
22
+ selection-foreground = #1e1e2e
@@ -0,0 +1,22 @@
1
+ palette = 0=#7a8478
2
+ palette = 1=#e67e80
3
+ palette = 2=#a7c080
4
+ palette = 3=#dbbc7f
5
+ palette = 4=#7fbbb3
6
+ palette = 5=#d699b6
7
+ palette = 6=#83c092
8
+ palette = 7=#f2efdf
9
+ palette = 8=#a6b0a0
10
+ palette = 9=#f85552
11
+ palette = 10=#8da101
12
+ palette = 11=#dfa000
13
+ palette = 12=#3a94c5
14
+ palette = 13=#df69ba
15
+ palette = 14=#35a77c
16
+ palette = 15=#fffbef
17
+ background = #232a2e
18
+ foreground = #d3c6aa
19
+ cursor-color = #e69875
20
+ cursor-text = #543a48
21
+ selection-background = #543a48
22
+ selection-foreground = #d3c6aa
@@ -0,0 +1,22 @@
1
+ palette = 0=#100f0f
2
+ palette = 1=#af3029
3
+ palette = 2=#66800b
4
+ palette = 3=#ad8301
5
+ palette = 4=#205ea6
6
+ palette = 5=#a02f6f
7
+ palette = 6=#24837b
8
+ palette = 7=#6f6e69
9
+ palette = 8=#b7b5ac
10
+ palette = 9=#d14d41
11
+ palette = 10=#879a39
12
+ palette = 11=#d0a215
13
+ palette = 12=#4385be
14
+ palette = 13=#ce5d97
15
+ palette = 14=#3aa99f
16
+ palette = 15=#cecdc3
17
+ background = #fffcf0
18
+ foreground = #100f0f
19
+ cursor-color = #100f0f
20
+ cursor-text = #fffcf0
21
+ selection-background = #cecdc3
22
+ selection-foreground = #100f0f
@@ -0,0 +1,22 @@
1
+ palette = 0=#545d68
2
+ palette = 1=#f47067
3
+ palette = 2=#57ab5a
4
+ palette = 3=#c69026
5
+ palette = 4=#539bf5
6
+ palette = 5=#b083f0
7
+ palette = 6=#39c5cf
8
+ palette = 7=#909dab
9
+ palette = 8=#636e7b
10
+ palette = 9=#ff938a
11
+ palette = 10=#6bc46d
12
+ palette = 11=#daaa3f
13
+ palette = 12=#6cb6ff
14
+ palette = 13=#dcbdfb
15
+ palette = 14=#56d4dd
16
+ palette = 15=#cdd9e5
17
+ background = #22272e
18
+ foreground = #adbac7
19
+ cursor-color = #539bf5
20
+ cursor-text = #93dbff
21
+ selection-background = #adbac7
22
+ selection-foreground = #22272e
@@ -0,0 +1,22 @@
1
+ palette = 0=#282828
2
+ palette = 1=#ea6962
3
+ palette = 2=#a9b665
4
+ palette = 3=#d8a657
5
+ palette = 4=#7daea3
6
+ palette = 5=#d3869b
7
+ palette = 6=#89b482
8
+ palette = 7=#d4be98
9
+ palette = 8=#7c6f64
10
+ palette = 9=#ea6962
11
+ palette = 10=#a9b665
12
+ palette = 11=#d8a657
13
+ palette = 12=#7daea3
14
+ palette = 13=#d3869b
15
+ palette = 14=#89b482
16
+ palette = 15=#ddc7a1
17
+ background = #282828
18
+ foreground = #d4be98
19
+ cursor-color = #d4be98
20
+ cursor-text = #282828
21
+ selection-background = #d4be98
22
+ selection-foreground = #282828
@@ -0,0 +1,22 @@
1
+ palette = 0=#090618
2
+ palette = 1=#c34043
3
+ palette = 2=#76946a
4
+ palette = 3=#c0a36e
5
+ palette = 4=#7e9cd8
6
+ palette = 5=#957fb8
7
+ palette = 6=#6a9589
8
+ palette = 7=#c8c093
9
+ palette = 8=#727169
10
+ palette = 9=#e82424
11
+ palette = 10=#98bb6c
12
+ palette = 11=#e6c384
13
+ palette = 12=#7fb4ca
14
+ palette = 13=#938aa9
15
+ palette = 14=#7aa89f
16
+ palette = 15=#dcd7ba
17
+ background = #1f1f28
18
+ foreground = #dcd7ba
19
+ cursor-color = #dcd7ba
20
+ cursor-text = #1f1f28
21
+ selection-background = #dcd7ba
22
+ selection-foreground = #1f1f28
@@ -0,0 +1,22 @@
1
+ palette = 0=#34302c
2
+ palette = 1=#bd8183
3
+ palette = 2=#78997a
4
+ palette = 3=#e49b5d
5
+ palette = 4=#7f91b2
6
+ palette = 5=#b380b0
7
+ palette = 6=#7b9695
8
+ palette = 7=#c1a78e
9
+ palette = 8=#867462
10
+ palette = 9=#d47766
11
+ palette = 10=#85b695
12
+ palette = 11=#ebc06d
13
+ palette = 12=#a3a9ce
14
+ palette = 13=#cf9bc2
15
+ palette = 14=#89b3b6
16
+ palette = 15=#ece1d7
17
+ background = #292522
18
+ foreground = #ece1d7
19
+ cursor-color = #ece1d7
20
+ cursor-text = #292522
21
+ selection-background = #ece1d7
22
+ selection-foreground = #403a36
@@ -0,0 +1,22 @@
1
+ palette = 0=#3b4252
2
+ palette = 1=#bf616a
3
+ palette = 2=#a3be8c
4
+ palette = 3=#ebcb8b
5
+ palette = 4=#81a1c1
6
+ palette = 5=#b48ead
7
+ palette = 6=#88c0d0
8
+ palette = 7=#e5e9f0
9
+ palette = 8=#596377
10
+ palette = 9=#bf616a
11
+ palette = 10=#a3be8c
12
+ palette = 11=#ebcb8b
13
+ palette = 12=#81a1c1
14
+ palette = 13=#b48ead
15
+ palette = 14=#8fbcbb
16
+ palette = 15=#eceff4
17
+ background = #2e3440
18
+ foreground = #d8dee9
19
+ cursor-color = #eceff4
20
+ cursor-text = #282828
21
+ selection-background = #eceff4
22
+ selection-foreground = #4c566a
@@ -0,0 +1,22 @@
1
+ palette = 0=#f2e9e1
2
+ palette = 1=#b4637a
3
+ palette = 2=#286983
4
+ palette = 3=#ea9d34
5
+ palette = 4=#56949f
6
+ palette = 5=#907aa9
7
+ palette = 6=#d7827e
8
+ palette = 7=#575279
9
+ palette = 8=#9893a5
10
+ palette = 9=#b4637a
11
+ palette = 10=#286983
12
+ palette = 11=#ea9d34
13
+ palette = 12=#56949f
14
+ palette = 13=#907aa9
15
+ palette = 14=#d7827e
16
+ palette = 15=#575279
17
+ background = #faf4ed
18
+ foreground = #575279
19
+ cursor-color = #575279
20
+ cursor-text = #faf4ed
21
+ selection-background = #dfdad9
22
+ selection-foreground = #575279
@@ -0,0 +1,22 @@
1
+ palette = 0=#393552
2
+ palette = 1=#eb6f92
3
+ palette = 2=#3e8fb0
4
+ palette = 3=#f6c177
5
+ palette = 4=#9ccfd8
6
+ palette = 5=#c4a7e7
7
+ palette = 6=#ea9a97
8
+ palette = 7=#e0def4
9
+ palette = 8=#6e6a86
10
+ palette = 9=#eb6f92
11
+ palette = 10=#3e8fb0
12
+ palette = 11=#f6c177
13
+ palette = 12=#9ccfd8
14
+ palette = 13=#c4a7e7
15
+ palette = 14=#ea9a97
16
+ palette = 15=#e0def4
17
+ background = #232136
18
+ foreground = #e0def4
19
+ cursor-color = #e0def4
20
+ cursor-text = #232136
21
+ selection-background = #44415a
22
+ selection-foreground = #e0def4
@@ -0,0 +1,22 @@
1
+ palette = 0=#1d202f
2
+ palette = 1=#f7768e
3
+ palette = 2=#9ece6a
4
+ palette = 3=#e0af68
5
+ palette = 4=#7aa2f7
6
+ palette = 5=#bb9af7
7
+ palette = 6=#7dcfff
8
+ palette = 7=#a9b1d6
9
+ palette = 8=#4e5575
10
+ palette = 9=#f7768e
11
+ palette = 10=#9ece6a
12
+ palette = 11=#e0af68
13
+ palette = 12=#7aa2f7
14
+ palette = 13=#bb9af7
15
+ palette = 14=#7dcfff
16
+ palette = 15=#c0caf5
17
+ background = #24283b
18
+ foreground = #c0caf5
19
+ cursor-color = #c0caf5
20
+ cursor-text = #1d202f
21
+ selection-background = #364a82
22
+ selection-foreground = #c0caf5
@@ -0,0 +1,22 @@
1
+ palette = 0=#000000
2
+ palette = 1=#f2777a
3
+ palette = 2=#99cc99
4
+ palette = 3=#ffcc66
5
+ palette = 4=#6699cc
6
+ palette = 5=#cc99cc
7
+ palette = 6=#66cccc
8
+ palette = 7=#ffffff
9
+ palette = 8=#595959
10
+ palette = 9=#f2777a
11
+ palette = 10=#99cc99
12
+ palette = 11=#ffcc66
13
+ palette = 12=#6699cc
14
+ palette = 13=#cc99cc
15
+ palette = 14=#66cccc
16
+ palette = 15=#ffffff
17
+ background = #2d2d2d
18
+ foreground = #cccccc
19
+ cursor-color = #cccccc
20
+ cursor-text = #2d2d2d
21
+ selection-background = #515151
22
+ selection-foreground = #cccccc
@@ -0,0 +1,22 @@
1
+ palette = 0=#f0edec
2
+ palette = 1=#a8334c
3
+ palette = 2=#4f6c31
4
+ palette = 3=#944927
5
+ palette = 4=#286486
6
+ palette = 5=#88507d
7
+ palette = 6=#3b8992
8
+ palette = 7=#2c363c
9
+ palette = 8=#b5a7a0
10
+ palette = 9=#94253e
11
+ palette = 10=#3f5a22
12
+ palette = 11=#803d1c
13
+ palette = 12=#1d5573
14
+ palette = 13=#7b3b70
15
+ palette = 14=#2b747c
16
+ palette = 15=#4f5e68
17
+ background = #f0edec
18
+ foreground = #2c363c
19
+ cursor-color = #2c363c
20
+ cursor-text = #f0edec
21
+ selection-background = #cbd9e3
22
+ selection-foreground = #2c363c
@@ -0,0 +1,23 @@
1
+ # Landscape photos from Unsplash, free to use under the Unsplash License
2
+ # (https://unsplash.com/license; attribution appreciated, not required).
3
+ # Hotlinked from images.unsplash.com, sized per request by Rori::Wallpaper.
4
+ # Add an id (the part after "photo-" in an images.unsplash.com URL) to grow
5
+ # the pool; keep them landscape and calm enough to sit behind windows.
6
+ - 1418065460487-3e41a6c84dc5
7
+ - 1426604966848-d7adac402bff
8
+ - 1439066615861-d1af74d74000
9
+ - 1441974231531-c6227db76b6e
10
+ - 1447752875215-b2761acb3c5d
11
+ - 1454496522488-7a8e488e8606
12
+ - 1464822759023-fed622ff2c3b
13
+ - 1465146344425-f00d5f5c8f07
14
+ - 1469474968028-56623f02e42e
15
+ - 1470071459604-3b5ec3a7fe05
16
+ - 1470770841072-f978cf4d019e
17
+ - 1476514525535-07fb3b4ae5f1
18
+ - 1482192596544-9eb780fc7f66
19
+ - 1493246507139-91e8fad9978e
20
+ - 1501785888041-af3ef285b470
21
+ - 1506744038136-46273834b3fb
22
+ - 1507525428034-b723cf961d3e
23
+ - 1519681393784-d120267933ba