Skip to content
Subway SeatSubway SeatSubway Seat
← All ports

EditorsNeeds Emacs 27.1+

Emacs

Three themes in one package, covering the tree-sitter font-lock faces, org, magit, diff and ediff, vertico, corfu, company, helm, treemacs, lsp-ui, doom-modeline and more. To install straight from GitHub instead of copying files, use (use-package subway-seat-theme :vc (:url "https://github.com/oddurs/subway-seat" :lisp-dir "dist/emacs" :rev :newest)) on Emacs 30+, or (package-vc-install '(subway-seat-theme :url "https://github.com/oddurs/subway-seat" :lisp-dir "dist/emacs")) on Emacs 29, then (load-theme 'subway-seat t).

Showing WalnutTunnelEnamelMoquetteDeep LevelPortlandGuimardCatacombesCarrelage. Switch flavors with the bullets up top.

Emacs Report a problem with this portReport a problem with this portReport a problem with this portReport a problem with this portReport a problem with this portReport a problem with this portReport a problem with this portReport a problem with this portReport a problem with this port

The quick way

The installer sets it up for you, then tells you the one thing it can't do. More ways to install

curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor walnut --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor tunnel --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor enamel --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor moquette --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor deep --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor portland --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor guimard --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor catacombes --only emacs
curl -fsSL https://oddurs.github.io/subway-seat/install.sh | sh -s -- --flavor carrelage --only emacs

Turn it on

In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'subway-seat t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'subway-seat-tunnel t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'subway-seat-enamel t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'london-moquette t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'london-deep-level t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'london-portland t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'paris-guimard t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'paris-catacombes t)
In init.el, with the three files in ~/.config/emacs/themes/
(add-to-list 'load-path "~/.config/emacs/themes/")
(add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
(load-theme 'paris-carrelage t)

Follow light and dark

One setting that changes with your system’s light and dark mode, no switching by hand.

In init.el, with the auto-dark package from MELPA (it swaps the theme when the OS appearance changes)
(use-package auto-dark
  :ensure t
  :custom (auto-dark-themes '((subway-seat) (subway-seat-enamel)))
  :init (auto-dark-mode))

The files

subway-seat-theme.elsave as ~/.config/emacs/themes/subway-seat-theme.el
;;; subway-seat-theme.el --- A warm 1970s subway-car color theme -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:
;;
;; The above copyright notice and this permission notice shall be included in all
;; copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;; SOFTWARE.

;;; Commentary:

;; Subway Seat: walnut-brown ground, parchment text, harvest gold, burnt
;; orange, avocado, sage and faded denim -- a 1970s subway car with shag
;; carpet, kept relaxed.  Three themes share one palette table and one face
;; list:
;;
;;   `subway-seat'         Walnut, the original dark
;;   `subway-seat-tunnel'  Tunnel, a deeper dark
;;   `subway-seat-enamel'  Enamel, the light one
;;
;; Put the three files in one folder on `load-path' and
;; `custom-theme-load-path' (or install the package), then enable one with
;;
;;   (load-theme 'subway-seat t)
;;
;; To tweak a face with the theme's colors, bind them with
;; `subway-seat-theme-with-colors':
;;
;;   (subway-seat-theme-with-colors 'subway-seat
;;     (set-face-attribute 'hl-line nil :background .surface1))
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(defgroup subway-seat-theme nil
  "The Subway Seat color themes."
  :group 'faces
  :prefix "subway-seat-theme-"
  :link '(url-link "https://github.com/oddurs/subway-seat"))

(defconst subway-seat-theme-palettes
  '(
    (subway-seat
     (crust           . "#20160E")
     (mantle          . "#2A1D13")
     (base            . "#362619")
     (surface0        . "#43301F")
     (surface1        . "#513B27")
     (surface2        . "#634932")
     (overlay0        . "#7B6047")
     (overlay1        . "#967B5C")
     (overlay2        . "#AE9575")
     (subtext0        . "#C4AE8C")
     (subtext1        . "#D9C6A3")
     (text            . "#EDDCBC")
     (text-hi         . "#F8ECD4")
     (yellow          . "#F3BF45")
     (yellow-hi       . "#FFD36B")
     (orange          . "#EC7F31")
     (orange-hi       . "#FF9D55")
     (red             . "#E05C45")
     (red-hi          . "#FF8373")
     (green           . "#ADB956")
     (green-hi        . "#BFCB63")
     (sage            . "#86AD95")
     (sage-hi         . "#A5C9B0")
     (denim           . "#7F9BAE")
     (denim-hi        . "#9DB6C6")
     (clay            . "#F4A87E")
     (ink             . "#20160E")
     (cursor          . "#F3BF45")
     (hl-line         . "#43301F")
     (region          . "#634932")
     (region-inactive . "#4F3927")
     (line-nr         . "#7B6047")
     (line-nr-cur     . "#F3BF45")
     (bracket         . "#FFD36B")
     (bracket-bg      . "#513B27")
     (paper           . "#43301F")
     (edge            . "#584532")
     (row             . "#584532")
     (bg-add          . "#3F3A1E")
     (bg-add-hl       . "#454121")
     (bg-add-emph     . "#504D26")
     (bg-del          . "#52281C")
     (bg-del-hl       . "#5B2C1F")
     (bg-del-emph     . "#6D3224")
     (bg-chg          . "#423117")
     (bg-chg-emph     . "#57421C")
     (bg-error        . "#4A2C1E")
     (bg-warning      . "#49351D")
     (bg-info         . "#40362E")
     (bg-hint         . "#41392A")
     (bg-search       . "#6F5426")
     (bg-search-cur   . "#915225")
     (bg-inlay        . "#3E2C1D")
     (ansi0           . "#513B27")
     (ansi1           . "#E05C45")
     (ansi2           . "#ADB956")
     (ansi3           . "#F3BF45")
     (ansi4           . "#7F9BAE")
     (ansi5           . "#EC7F31")
     (ansi6           . "#86AD95")
     (ansi7           . "#D9C6A3")
     (ansi8           . "#967B5C")
     (ansi9           . "#FF8373")
     (ansi10          . "#BFCB63")
     (ansi11          . "#FFD36B")
     (ansi12          . "#9DB6C6")
     (ansi13          . "#FF9D55")
     (ansi14          . "#A5C9B0")
     (ansi15          . "#F8ECD4"))
    (subway-seat-tunnel
     (crust           . "#140D07")
     (mantle          . "#1B120A")
     (base            . "#24180E")
     (surface0        . "#302115")
     (surface1        . "#3D2C1D")
     (surface2        . "#4F3927")
     (overlay0        . "#745B45")
     (overlay1        . "#917759")
     (overlay2        . "#AA9171")
     (subtext0        . "#C0AA88")
     (subtext1        . "#D6C3A0")
     (text            . "#E9D8B6")
     (text-hi         . "#F6EAD1")
     (yellow          . "#F3BF45")

Showing 150 of 1,514 lines.

subway-seat-tunnel-theme.elsave as ~/.config/emacs/themes/subway-seat-tunnel-theme.el
needs subway-seat-theme.el in the same folder
;;; subway-seat-tunnel-theme.el --- Subway Seat Tunnel, the Tunnel flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; The late local after midnight: espresso-deep, same warm lights.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `subway-seat-tunnel'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme subway-seat-tunnel
  "Subway Seat Tunnel: The late local after midnight: espresso-deep, same warm lights.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'subway-seat-tunnel)

(provide-theme 'subway-seat-tunnel)

;;; subway-seat-tunnel-theme.el ends here
subway-seat-enamel-theme.elsave as ~/.config/emacs/themes/subway-seat-enamel-theme.el
needs subway-seat-theme.el in the same folder
;;; subway-seat-enamel-theme.el --- Subway Seat Enamel, the Enamel flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Cream enamel panels in the morning sun. The light one.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `subway-seat-enamel'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme subway-seat-enamel
  "Subway Seat Enamel: Cream enamel panels in the morning sun. The light one.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'subway-seat-enamel)

(provide-theme 'subway-seat-enamel)

;;; subway-seat-enamel-theme.el ends here
london-moquette-theme.elsave as ~/.config/emacs/themes/london-moquette-theme.el
needs subway-seat-theme.el in the same folder
;;; london-moquette-theme.el --- London Moquette, the Moquette flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; The seat you're sitting on. Corporate Blue, turned right down.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `london-moquette'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme london-moquette
  "London Moquette: The seat you're sitting on. Corporate Blue, turned right down.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'london-moquette)

(provide-theme 'london-moquette)

;;; london-moquette-theme.el ends here
london-deep-level-theme.elsave as ~/.config/emacs/themes/london-deep-level-theme.el
needs subway-seat-theme.el in the same folder
;;; london-deep-level-theme.el --- London Deep Level, the Deep flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Below the cut-and-cover lines. The ground drops; the signals don't.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `london-deep-level'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme london-deep-level
  "London Deep Level: Below the cut-and-cover lines. The ground drops; the signals don't.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'london-deep-level)

(provide-theme 'london-deep-level)

;;; london-deep-level-theme.el ends here
london-portland-theme.elsave as ~/.config/emacs/themes/london-portland-theme.el
needs subway-seat-theme.el in the same folder
;;; london-portland-theme.el --- London Portland, the Portland flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Holden's Portland stone. Links are the exact Corporate Blue.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `london-portland'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme london-portland
  "London Portland: Holden's Portland stone. Links are the exact Corporate Blue.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'london-portland)

(provide-theme 'london-portland)

;;; london-portland-theme.el ends here
paris-guimard-theme.elsave as ~/.config/emacs/themes/paris-guimard-theme.el
needs subway-seat-theme.el in the same folder
;;; paris-guimard-theme.el --- Paris Guimard, the Guimard flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Cast iron off a Metro entrance, which is nearly black. Brass leads.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `paris-guimard'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme paris-guimard
  "Paris Guimard: Cast iron off a Metro entrance, which is nearly black. Brass leads.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'paris-guimard)

(provide-theme 'paris-guimard)

;;; paris-guimard-theme.el ends here
paris-catacombes-theme.elsave as ~/.config/emacs/themes/paris-catacombes-theme.el
needs subway-seat-theme.el in the same folder
;;; paris-catacombes-theme.el --- Paris Catacombes, the Catacombes flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Under the quarries: the same green with the lights turned down.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `paris-catacombes'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme paris-catacombes
  "Paris Catacombes: Under the quarries: the same green with the lights turned down.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'paris-catacombes)

(provide-theme 'paris-catacombes)

;;; paris-catacombes-theme.el ends here
paris-carrelage-theme.elsave as ~/.config/emacs/themes/paris-carrelage-theme.el
needs subway-seat-theme.el in the same folder
;;; paris-carrelage-theme.el --- Paris Carrelage, the Carrelage flavor -*- lexical-binding: t; -*-

;; Copyright (C) 2026 Oddur Sigurdsson

;; Author: Oddur Sigurdsson
;; URL: https://github.com/oddurs/subway-seat
;; Version: 0.3.0
;; Package-Requires: ((emacs "27.1"))
;; SPDX-License-Identifier: MIT

;; This file is not part of GNU Emacs.

;;; Commentary:

;; Bevelled white tile under a vaulted platform. The light one.
;; The palette and faces live in subway-seat-theme.el; this file lets
;; `load-theme' find `paris-carrelage'.
;;
;; Subway Seat — generated from palette.py by build.py. Edit the palette, not this file.

;;; Code:

(require 'subway-seat-theme)

(deftheme paris-carrelage
  "Paris Carrelage: Bevelled white tile under a vaulted platform. The light one.")

;; `load-theme' clears a theme's settings before loading its file, so record them again.
(subway-seat-theme-apply 'paris-carrelage)

(provide-theme 'paris-carrelage)

;;; paris-carrelage-theme.el ends here